UNPKG

@lobehub/ui

Version:

Lobe UI is an open-source UI component library for building AIGC web apps

43 lines (40 loc) 1.65 kB
'use client'; import { CLASSNAMES } from "../styles/classNames.mjs"; import { getServerSnapshot, getSnapshot, showContextMenu, subscribe } from "./store.mjs"; import React, { cloneElement, isValidElement, memo, useCallback, useId, useSyncExternalStore } from "react"; import { jsx } from "react/jsx-runtime"; import { mergeProps } from "@base-ui/react/merge-props"; import clsx from "clsx"; //#region src/ContextMenu/ContextMenuTrigger.tsx const styles = { trigger: { display: "contents" } }; const ContextMenuTrigger = memo(({ children, items, onContextMenu, ...rest }) => { const triggerId = useId(); const state = useSyncExternalStore(subscribe, getSnapshot, getServerSnapshot); const open = state.open && state.triggerId === triggerId; const handleContextMenu = useCallback((event) => { if (items) { event.preventDefault(); showContextMenu(typeof items === "function" ? items() : items); } onContextMenu?.(event); }, [items, onContextMenu]); const triggerProps = { ...rest, "aria-expanded": open || void 0, "className": clsx(CLASSNAMES.ContextTrigger, rest.className), "data-contextmenu-trigger": triggerId, "data-popup-open": open ? "" : void 0, "data-state": open ? "open" : void 0, "onContextMenu": handleContextMenu }; if (isValidElement(children) && React.Children.only(children)) return cloneElement(children, mergeProps(children.props, triggerProps)); return /* @__PURE__ */ jsx("span", { style: styles.trigger, ...triggerProps, children }); }); ContextMenuTrigger.displayName = "ContextMenuTrigger"; //#endregion export { ContextMenuTrigger }; //# sourceMappingURL=ContextMenuTrigger.mjs.map