UNPKG

@crossed/primitive

Version:

A universal & performant styling library for React Native, Next.js & React

75 lines (74 loc) 2.6 kB
import { jsx } from "react/jsx-runtime"; import { useUncontrolled, withStaticProperties } from "@crossed/core"; import { useMemo, useId } from "react"; import { createDropdownMain } from "./Dropdown"; import { createDropdownTrigger } from "./DropdownTrigger"; import { createDropdownContent } from "./DropdownContent"; import { createDropdownPortal } from "./DropdownPortal"; import { Provider } from "./context"; import { createDropdownItem } from "./DropdownItem"; import { createDropdownDivider } from "./DropdownDivider"; import { createDropdownLabel } from "./DropdownLabel"; import { Provider as Provider2, useContext } from "./context"; const createDropdown = (components, { context } = {}) => { const { Root, Trigger, Content, Portal, Item, Divider, Label } = components; const Dropdown = createDropdownMain(Root); const DropdownTrigger = createDropdownTrigger(Trigger); const DropdownContent = createDropdownContent(Content); const DropdownPortal = createDropdownPortal(Portal); const DropdownItem = createDropdownItem(Item); const DropdownDivider = createDropdownDivider(Divider); const DropdownLabel = createDropdownLabel(Label); Dropdown.displayName = "Dropdown"; DropdownTrigger.displayName = "Dropdown.Trigger"; DropdownContent.displayName = "Dropdown.Content"; DropdownPortal.displayName = "Dropdown.Portal"; DropdownItem.displayName = "Dropdown.Item"; DropdownDivider.displayName = "Dropdown.Divider"; DropdownLabel.displayName = "Dropdown.Label"; return withStaticProperties( (props) => { const id = useId(); const { value, defaultValue = false, onChangeOpen, ...otherProps } = props; const [open, setOpen] = useUncontrolled({ value, defaultValue, onChange: onChangeOpen }); const contextProps = useMemo(() => { return Object.entries(context || {}).reduce( (acc, [key]) => { if (props[key]) { acc[key] = props[key]; } return acc; }, context || {} ); }, [props]); return /* @__PURE__ */ jsx(Provider, { ...contextProps, id, open, setOpen, children: /* @__PURE__ */ jsx(Dropdown, { ...otherProps }) }); }, { Trigger: DropdownTrigger, Content: DropdownContent, Portal: DropdownPortal, Item: DropdownItem, Divider: DropdownDivider, Label: DropdownLabel } ); }; export { Provider2 as ProviderDropdown, createDropdown, useContext as useDropdownContext }; //# sourceMappingURL=index.js.map