UNPKG

@stratakit/react

Version:

A React component library for StrataKit

52 lines (51 loc) 1.97 kB
import { jsx, jsxs } from "react/jsx-runtime"; import * as React from "react"; import { DisclosureArrow as SkDisclosureArrow } from "@stratakit/bricks/secret-internals"; import { useControlledState, useUnreactiveCallback } from "@stratakit/foundations/secret-internals"; import { DropdownMenu as SkDropdownMenu } from "@stratakit/structures"; import { useCompatProps } from "./~utils.js"; import { Button } from "./Button.js"; const DropdownMenu = React.forwardRef((props, forwardedRef) => { const { children, menuItems: menuItemsProp, visible, onVisibleChange, // biome-ignore-start lint/correctness/noUnusedVariables: NOT IMPLEMENTED middleware, closeOnItemClick, placement, matchWidth, positionReference, portal, // biome-ignore-end lint/correctness/noUnusedVariables: NOT IMPLEMENTED ...rest } = props; const [open, setOpen] = useControlledState( false, visible, onVisibleChange ); const close = useUnreactiveCallback(() => setOpen(false)); const menuItems = React.useMemo(() => { if (typeof menuItemsProp === "function") return menuItemsProp(close); return menuItemsProp; }, [menuItemsProp, close]); return /* @__PURE__ */ jsxs(SkDropdownMenu.Root, { open, setOpen, children: [ /* @__PURE__ */ jsx(SkDropdownMenu.Button, { render: children }), /* @__PURE__ */ jsx(SkDropdownMenu.Content, { ...rest, ref: forwardedRef, children: menuItems }) ] }); }); DEV: DropdownMenu.displayName = "DropdownMenu"; const DropdownButton = React.forwardRef((props, forwardedRef) => { const { children, menuItems, dropdownMenuProps, ...rest } = useCompatProps(props); return /* @__PURE__ */ jsx(DropdownMenu, { menuItems, ...dropdownMenuProps, children: /* @__PURE__ */ jsx(Button, { ...rest, endIcon: /* @__PURE__ */ jsx(SkDisclosureArrow, {}), ref: forwardedRef, children }) }); }); DEV: DropdownButton.displayName = "DropdownButton"; export { DropdownButton, DropdownMenu };