@wener/console
Version:
Base console UI toolkit
79 lines (78 loc) • 3.45 kB
JavaScript
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