UNPKG

@lobehub/ui

Version:

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

67 lines (64 loc) 2.33 kB
'use client'; import { useNativeButton } from "../hooks/useNativeButton.mjs"; import { TooltipGroupHandleContext } from "./groupContext.mjs"; import { useMergedTooltipProps } from "./useMergedTooltipProps.mjs"; import { cloneElement, isValidElement, useContext, useMemo } from "react"; import { jsx } from "react/jsx-runtime"; import { mergeProps } from "@base-ui/react/merge-props"; import { Tooltip } from "@base-ui/react/tooltip"; import { mergeRefs } from "react-merge-refs"; //#region src/Tooltip/TooltipInGroup.tsx const DEFAULT_OPEN_DELAY = 400; const DEFAULT_CLOSE_DELAY = 100; const TooltipInGroup = ({ children, ref: refProp, ...props }) => { const group = useContext(TooltipGroupHandleContext); const item = useMergedTooltipProps(props); const resolvedOpenDelay = useMemo(() => { if (item.openDelay !== void 0) return item.openDelay; if (item.mouseEnterDelay !== void 0) return item.mouseEnterDelay * 1e3; return DEFAULT_OPEN_DELAY; }, [item.mouseEnterDelay, item.openDelay]); const resolvedCloseDelay = useMemo(() => { if (item.closeDelay !== void 0) return item.closeDelay; if (item.mouseLeaveDelay !== void 0) return item.mouseLeaveDelay * 1e3; return DEFAULT_CLOSE_DELAY; }, [item.closeDelay, item.mouseLeaveDelay]); const disabled = Boolean(item.disabled); const { isNativeButtonTriggerElement } = useNativeButton({ children }); if (item.title == null && !item.hotkey) return children; const triggerProps = { closeDelay: resolvedCloseDelay, delay: resolvedOpenDelay, disabled, payload: item }; if (isValidElement(children)) return /* @__PURE__ */ jsx(Tooltip.Trigger, { handle: group ?? void 0, ...triggerProps, render: (renderProps) => { const resolvedProps = (() => { if (isNativeButtonTriggerElement) return renderProps; const { type, ref: triggerRef, ...restProps } = renderProps; return restProps; })(); return cloneElement(children, { ...mergeProps(children.props, resolvedProps), ref: mergeRefs([ children.ref, renderProps.ref, refProp ]) }); } }); return /* @__PURE__ */ jsx(Tooltip.Trigger, { handle: group ?? void 0, ...triggerProps, ref: refProp, children }); }; TooltipInGroup.displayName = "TooltipInGroup"; //#endregion export { TooltipInGroup }; //# sourceMappingURL=TooltipInGroup.mjs.map