UNPKG

@wener/console

Version:
203 lines (202 loc) 7.43 kB
function _define_property(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } function _object_spread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; var ownKeys = Object.keys(source); if (typeof Object.getOwnPropertySymbols === "function") { ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function (sym) { return Object.getOwnPropertyDescriptor(source, sym).enumerable; })); } ownKeys.forEach(function (key) { _define_property(target, key, source[key]); }); } return target; } function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; } function _object_spread_props(target, source) { source = source != null ? source : {}; if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; } function _object_without_properties(source, excluded) { if (source == null) return {}; var target = {}, sourceKeys, key, i; if (typeof Reflect !== "undefined" && Reflect.ownKeys) { sourceKeys = Reflect.ownKeys(source); for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } return target; } target = _object_without_properties_loose(source, excluded); if (Object.getOwnPropertySymbols) { sourceKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; } function _object_without_properties_loose(source, excluded) { if (source == null) return {}; var target = {}, sourceKeys = Object.getOwnPropertyNames(source), key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } return target; } import React from "react"; import { Menu } from "@base-ui/react/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 "../utils/isNodeTypeOf.js"; export var DaisyDropdownMenuComposite = function (_0) { var items = _0.items, children = _0.children, trigger = _0.trigger, portal = _0.portal, className = _0.className, props = _object_without_properties(_0, [ "items", "children", "trigger", "portal", "className" ]); trigger || (trigger = children); if (trigger) { if (!isNodeTypeOf(trigger, [ Menu.Trigger, DaisyDropdownMenuTrigger ])) { var last = trigger; trigger = /*#__PURE__*/ React.createElement(DaisyDropdownMenuTrigger, null, last); } } var content = /*#__PURE__*/ React.createElement(Menu.Positioner, { side: "bottom", align: "end", sideOffset: 5 }, /*#__PURE__*/ React.createElement(Menu.Popup, { className: cn("menu menu-sm rounded-box bg-base-200 z-30 w-52", className) }, items.map(function (item, key) { return match(item).with({ type: "label" }, function (_0) { var label = _0.label, type = _0.type, className = _0.className, children = _0.children, props = _object_without_properties(_0, [ "label", "type", "className", "children" ]); return /*#__PURE__*/ React.createElement(Menu.GroupLabel, _object_spread({ key: key, className: cn("menu-title", className) }, props), label || children); }).with({ type: "separator" }, function (_0) { var type = _0.type, className = _0.className, props = _object_without_properties(_0, [ "type", "className" ]); return /*#__PURE__*/ React.createElement(Menu.Separator, _object_spread({ key: key, className: cn("bg-base-300 m-[5px] h-px", className) }, props)); }).otherwise(function (_0) { var label = _0.label, icon = _0.icon, type = _0.type, className = _0.className, children = _0.children, props = _object_without_properties(_0, [ "label", "icon", "type", "className", "children" ]); return /*#__PURE__*/ React.createElement(Menu.Item, _object_spread_props(_object_spread({ key: key }, props), { render: /*#__PURE__*/ React.createElement("li", { className: clsx("outline-none select-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(Menu.Root, pick(props, [ "open", "onOpenChange", "modal", "defaultOpen" ]), trigger, portal && /*#__PURE__*/ React.createElement(Menu.Portal, null, content), !portal && content); }; export var DaisyDropdownMenuTrigger = function (_0) { var className = _0.className, props = _object_without_properties(_0, [ "className" ]); return /*#__PURE__*/ React.createElement(Menu.Trigger, _object_spread({ className: cn("btn relative", className) }, props)); }; export var DaisyDropdownMenu = { Composite: DaisyDropdownMenuComposite, Trigger: DaisyDropdownMenuTrigger, Root: Menu.Root, Portal: Menu.Portal, Positioner: Menu.Positioner, Popup: Menu.Popup, Item: Menu.Item, Separator: Menu.Separator, GroupLabel: Menu.GroupLabel };