@lobehub/ui
Version:
Lobe UI is an open-source UI component library for building AIGC web apps
123 lines (120 loc) • 3.6 kB
JavaScript
'use client';
import { TooltipGroupHandleContext } from "./groupContext.mjs";
import { useNativeButton } from "../hooks/useNativeButton.mjs";
import { useMergedTooltipProps } from "./useMergedTooltipProps.mjs";
import { cloneElement, isValidElement, use, useCallback, 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, arrow, className, classNames, closeDelay, defaultOpen, disabled: disabledProp, getPopupContainer, hotkey, hotkeyProps, mouseEnterDelay, mouseLeaveDelay, onOpenChange, open, openDelay, placement, popupContainer, popupProps, portalProps, positionerProps, standalone: _standalone, styles, title, triggerProps: triggerPropsProp, zIndex, ...restProps }) => {
const tooltipProps = useMemo(() => ({
arrow,
className,
classNames,
closeDelay,
defaultOpen,
disabled: disabledProp,
getPopupContainer,
hotkey,
hotkeyProps,
mouseEnterDelay,
mouseLeaveDelay,
onOpenChange,
open,
openDelay,
placement,
popupContainer,
popupProps,
portalProps,
positionerProps,
styles,
title,
triggerProps: triggerPropsProp,
zIndex
}), [
arrow,
className,
classNames,
closeDelay,
defaultOpen,
disabledProp,
getPopupContainer,
hotkey,
hotkeyProps,
mouseEnterDelay,
mouseLeaveDelay,
onOpenChange,
open,
openDelay,
placement,
popupContainer,
popupProps,
portalProps,
positionerProps,
styles,
title,
triggerPropsProp,
zIndex
]);
const group = use(TooltipGroupHandleContext);
const item = useMergedTooltipProps(tooltipProps);
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 });
const childElement = isValidElement(children) ? children : null;
const renderTrigger = useCallback((renderProps) => {
const resolvedProps = (() => {
if (isNativeButtonTriggerElement) return renderProps;
const { type, ref: triggerRef, ...triggerRest } = renderProps;
return triggerRest;
})();
return cloneElement(childElement, {
...mergeProps(restProps, childElement.props, resolvedProps),
ref: mergeRefs([
childElement.ref,
renderProps.ref,
refProp
])
});
}, [
childElement,
isNativeButtonTriggerElement,
refProp,
restProps
]);
if (item.title == null && !item.hotkey) return children;
const triggerProps = {
closeDelay: resolvedCloseDelay,
delay: resolvedOpenDelay,
disabled,
payload: item
};
if (childElement) return /* @__PURE__ */ jsx(Tooltip.Trigger, {
handle: group ?? void 0,
...triggerProps,
render: renderTrigger
});
return /* @__PURE__ */ jsx(Tooltip.Trigger, {
handle: group ?? void 0,
...triggerProps,
ref: refProp,
children
});
};
TooltipInGroup.displayName = "TooltipInGroup";
//#endregion
export { TooltipInGroup };
//# sourceMappingURL=TooltipInGroup.mjs.map