@lobehub/ui
Version:
Lobe UI is an open-source UI component library for building AIGC web apps
91 lines (88 loc) • 2.98 kB
JavaScript
'use client';
import { PopoverGroupPropsContext } from "./groupContext.mjs";
import { useContext, useMemo } from "react";
//#region src/Popover/useMergedPopoverProps.ts
const useMergedPopoverProps = (props) => {
const sharedProps = useContext(PopoverGroupPropsContext);
const { arrow, inset, trigger, placement, className, classNames, styles: styleProps, onOpenChange, content, closeDelay, disabled, getPopupContainer, mouseEnterDelay, mouseLeaveDelay, nativeButton, openDelay, portalled, zIndex } = props;
const mergedClassName = useMemo(() => {
if (!sharedProps?.className && !className) return void 0;
return [sharedProps?.className, className].filter(Boolean).join(" ");
}, [className, sharedProps?.className]);
const mergedClassNames = useMemo(() => {
if (!sharedProps?.classNames && !classNames) return void 0;
return {
...sharedProps?.classNames,
...classNames
};
}, [classNames, sharedProps?.classNames]);
const mergedStyles = useMemo(() => {
if (!sharedProps?.styles && !styleProps) return void 0;
return {
...sharedProps?.styles,
...styleProps
};
}, [sharedProps?.styles, styleProps]);
const mergedOnOpenChange = useMemo(() => {
if (!sharedProps?.onOpenChange && !onOpenChange) return void 0;
return (open) => {
sharedProps?.onOpenChange?.(open);
onOpenChange?.(open);
};
}, [onOpenChange, sharedProps?.onOpenChange]);
return useMemo(() => ({
arrow: arrow ?? sharedProps?.arrow ?? false,
className: mergedClassName,
classNames: mergedClassNames,
closeDelay: closeDelay ?? sharedProps?.closeDelay,
content,
disabled: disabled ?? sharedProps?.disabled,
getPopupContainer: getPopupContainer ?? sharedProps?.getPopupContainer,
inset: inset ?? sharedProps?.inset ?? false,
mouseEnterDelay: mouseEnterDelay ?? sharedProps?.mouseEnterDelay,
mouseLeaveDelay: mouseLeaveDelay ?? sharedProps?.mouseLeaveDelay,
nativeButton: nativeButton ?? sharedProps?.nativeButton,
onOpenChange: mergedOnOpenChange,
openDelay: openDelay ?? sharedProps?.openDelay,
placement: placement ?? sharedProps?.placement ?? "top",
portalled: portalled ?? sharedProps?.portalled,
styles: mergedStyles,
trigger: trigger ?? sharedProps?.trigger ?? "hover",
zIndex: zIndex ?? sharedProps?.zIndex
}), [
arrow,
closeDelay,
content,
disabled,
getPopupContainer,
inset,
mergedClassName,
mergedClassNames,
mergedOnOpenChange,
mergedStyles,
mouseEnterDelay,
mouseLeaveDelay,
nativeButton,
openDelay,
placement,
portalled,
sharedProps?.arrow,
sharedProps?.closeDelay,
sharedProps?.disabled,
sharedProps?.getPopupContainer,
sharedProps?.inset,
sharedProps?.mouseEnterDelay,
sharedProps?.mouseLeaveDelay,
sharedProps?.nativeButton,
sharedProps?.openDelay,
sharedProps?.placement,
sharedProps?.portalled,
sharedProps?.trigger,
sharedProps?.zIndex,
trigger,
zIndex
]);
};
//#endregion
export { useMergedPopoverProps };
//# sourceMappingURL=useMergedPopoverProps.mjs.map