@lobehub/ui
Version:
Lobe UI is an open-source UI component library for building AIGC web apps
67 lines (64 loc) • 2.33 kB
JavaScript
'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