@stratakit/react
Version:
A React component library for StrataKit
52 lines (51 loc) • 1.97 kB
JavaScript
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
};