UNPKG

@vela-ui/react

Version:

Vela UI React components

120 lines (117 loc) 3.49 kB
import { Popover } from "./chunk-MPQ6RJKJ.mjs"; import { DropdownDescription, DropdownLabel, DropdownSeparator, dropdownItemVariants } from "./chunk-2KYD4PYX.mjs"; import { cn } from "./chunk-OCN72JL6.mjs"; import { CircleIcon } from "./chunk-P3WZ5OAJ.mjs"; import { CheckIcon } from "./chunk-6SWBNV6A.mjs"; import { ChevronRightIcon } from "./chunk-5XTUZYZG.mjs"; // src/components/menu.tsx import { Menu as AriaMenu, MenuItem as AriaMenuItem, MenuSection as AriaMenuSection, MenuTrigger as AriaMenuTrigger, Collection, Header, Keyboard, SubmenuTrigger, composeRenderProps } from "react-aria-components"; import { Fragment, jsx, jsxs } from "react/jsx-runtime"; var MenuTrigger = AriaMenuTrigger; var MenuSeparator = DropdownSeparator; var MenuLabel = DropdownLabel; var MenuDescription = DropdownDescription; function MenuPopover({ className, ...props }) { return /* @__PURE__ */ jsx( Popover, { className: composeRenderProps(className, (className2) => cn("w-auto", className2)), ...props } ); } function Menu({ className, ...props }) { return /* @__PURE__ */ jsx( AriaMenu, { className: composeRenderProps( className, (className2) => cn( "max-h-[inherit] min-w-[8rem] overflow-auto rounded-md p-1 outline-hidden [clip-path:inset(0_0_0_0_round_calc(var(--radius)-2px))]", className2 ) ), ...props } ); } function MenuItem({ className, children, variant, ...props }) { const textValue = props.textValue || (typeof children === "string" ? children : void 0); return /* @__PURE__ */ jsx( AriaMenuItem, { className: composeRenderProps( className, (className2, renderProps) => dropdownItemVariants({ ...renderProps, variant, className: cn("data-[selection-mode]:pr-2 data-[selection-mode]:pl-8", className2, { "data-[open=true]:bg-accent data-[open=true]:text-accent-foreground": renderProps.hasSubmenu }) }) ), textValue, ...props, children: (values) => /* @__PURE__ */ jsxs(Fragment, { children: [ values.isSelected && /* @__PURE__ */ jsxs("span", { className: "pointer-events-none absolute left-2 flex size-4 items-center justify-center", children: [ values.selectionMode === "single" && /* @__PURE__ */ jsx(CircleIcon, { className: "size-2 fill-current" }), values.selectionMode === "multiple" && /* @__PURE__ */ jsx(CheckIcon, { className: "size-4" }) ] }), typeof children === "function" ? children(values) : children, values.hasSubmenu && /* @__PURE__ */ jsx(ChevronRightIcon, { className: "ml-auto size-4" }) ] }) } ); } function MenuSection({ className, ...props }) { return /* @__PURE__ */ jsxs(AriaMenuSection, { className, ...props, children: [ "title" in props && /* @__PURE__ */ jsx(Header, { className: "px-2 py-1.5 text-sm font-medium", children: props.title }), /* @__PURE__ */ jsx(Collection, { items: props.items, children: props.children }) ] }); } function MenuShortcut({ className, ...props }) { return /* @__PURE__ */ jsx( Keyboard, { className: cn("text-muted-foreground ml-auto font-sans text-xs tracking-widest", className), ...props } ); } export { SubmenuTrigger, MenuTrigger, MenuSeparator, MenuLabel, MenuDescription, MenuPopover, Menu, MenuItem, MenuSection, MenuShortcut };