@lobehub/ui
Version:
Lobe UI is an open-source UI component library for building AIGC web apps
70 lines (67 loc) • 2.44 kB
JavaScript
'use client';
import { useNativeButton } from "../hooks/useNativeButton.mjs";
import { PopoverGroupHandleContext } from "./groupContext.mjs";
import { parseTrigger } from "./parseTrigger.mjs";
import { useMergedPopoverProps } from "./useMergedPopoverProps.mjs";
import { cloneElement, isValidElement, useContext, useMemo } from "react";
import { jsx } from "react/jsx-runtime";
import { cx } from "antd-style";
import { mergeProps } from "@base-ui/react/merge-props";
import { mergeRefs } from "react-merge-refs";
import { Popover } from "@base-ui/react/popover";
//#region src/Popover/PopoverInGroup.tsx
const PopoverInGroup = ({ children, ref: refProp, ...props }) => {
const group = useContext(PopoverGroupHandleContext);
const item = useMergedPopoverProps(props);
const { openOnHover } = useMemo(() => parseTrigger(item.trigger ?? "hover"), [item.trigger]);
const resolvedOpenDelay = item.openDelay ?? (item.mouseEnterDelay ?? .1) * 1e3;
const resolvedCloseDelay = item.closeDelay ?? (item.mouseLeaveDelay ?? .1) * 1e3;
const disabled = Boolean(item.disabled);
const { isNativeButtonTriggerElement, resolvedNativeButton } = useNativeButton({
children,
nativeButton: item.nativeButton
});
if (!item.content) return children;
const triggerProps = {
closeDelay: resolvedCloseDelay,
delay: resolvedOpenDelay,
disabled,
openOnHover: openOnHover && !disabled,
payload: item
};
const triggerClassName = item.classNames?.trigger;
if (isValidElement(children)) return /* @__PURE__ */ jsx(Popover.Trigger, {
handle: group ?? void 0,
...triggerProps,
nativeButton: resolvedNativeButton,
render: (renderProps) => {
const resolvedProps = (() => {
if (isNativeButtonTriggerElement) return renderProps;
const { type, ref: triggerRef, ...restProps } = renderProps;
return restProps;
})();
const mergedProps = mergeProps(children.props, resolvedProps);
return cloneElement(children, {
...mergedProps,
className: cx(mergedProps.className, triggerClassName),
ref: mergeRefs([
children.ref,
renderProps.ref,
refProp
])
});
}
});
return /* @__PURE__ */ jsx(Popover.Trigger, {
handle: group ?? void 0,
...triggerProps,
className: triggerClassName,
nativeButton: resolvedNativeButton,
ref: refProp,
children
});
};
PopoverInGroup.displayName = "PopoverInGroup";
//#endregion
export { PopoverInGroup };
//# sourceMappingURL=PopoverInGroup.mjs.map