@vela-ui/react
Version:
Vela UI React components
120 lines (117 loc) • 3.49 kB
JavaScript
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
};