UNPKG

@wener/console

Version:

Base console UI toolkit

79 lines (78 loc) 3.45 kB
import React, { forwardRef } from "react"; import * as DropdownMenu from "@radix-ui/react-dropdown-menu"; import { cn } from "@wener/console"; import { flexRender } from "@wener/reaction"; import { clsx } from "clsx"; import { pick } from "es-toolkit"; import { match } from "ts-pattern"; import { isNodeTypeOf } from "./isNodeTypeOf.js"; (function (DaisyDropdownMenu) { DaisyDropdownMenu.Composite = ({ items, children, trigger, portal, className, ...props }) => { // if (Children.count(children) === 1) { // children = Children.only(children); // } trigger ||= children; if (trigger) { if (!isNodeTypeOf(trigger, [ DropdownMenu.Trigger, DaisyDropdownMenu.Trigger ])) { let last = trigger; trigger = /*#__PURE__*/ React.createElement(DaisyDropdownMenu.Trigger, { asChild: true }, last); } } let content = /*#__PURE__*/ React.createElement(DropdownMenu.Content, { side: "bottom", align: "end", sideOffset: 5, className: cn("menu menu-sm z-30 w-52 rounded-box bg-base-200", className) }, items.map((item, key) => { return match(item).with({ type: "label" }, ({ label, type, className, children, ...props }) => { return /*#__PURE__*/ React.createElement(DropdownMenu.Label, { key: key, className: cn("menu-title", className), ...props }, label || children); }).with({ type: "separator" }, ({ type, className, ...props }) => { return /*#__PURE__*/ React.createElement(DropdownMenu.Separator, { key: key, className: cn("m-[5px] h-px bg-base-300", className), ...props }); }).otherwise(({ label, icon, type, className, children, ...props }) => { return /*#__PURE__*/ React.createElement(DropdownMenu.Item, { key: key, asChild: true, ...props }, /*#__PURE__*/ React.createElement("li", { className: clsx("select-none outline-none", "group/item", "data-[disabled]:disabled data-[disabled]:pointer-events-none", className) }, /*#__PURE__*/ React.createElement("a", { className: clsx("group-data-[highlighted]/item:active") }, flexRender(icon, { className: "size-4" }), label))); }); })); return /*#__PURE__*/ React.createElement(DropdownMenu.Root, pick(props, [ "open", "onOpenChange", "modal", "defaultOpen" ]), trigger, portal && /*#__PURE__*/ React.createElement(DropdownMenu.Portal, null, content), !portal && content); }; DaisyDropdownMenu.Trigger = /*#__PURE__*/ forwardRef(({ className, ...props }, ref) => { return /*#__PURE__*/ React.createElement(DropdownMenu.Trigger, { className: cn("btn relative", className), ...props, ref: ref }); }); })(DaisyDropdownMenu || (DaisyDropdownMenu = {})); export var DaisyDropdownMenu; //# sourceMappingURL=DaisyDropdownMenu.js.map