UNPKG

@base-ui-components/react

Version:

Base UI is a library of headless ('unstyled') React components and low-level hooks. You gain complete control over your app's CSS and accessibility features.

44 lines 1.24 kB
import * as React from 'react'; import { mergeReactProps } from '../../utils/mergeReactProps.js'; import { useAnchorPositioning } from '../../utils/useAnchorPositioning.js'; export function usePopoverPositioner(params) { const { open = false, keepMounted = false, mounted } = params; const { positionerStyles, arrowStyles, anchorHidden, arrowRef, arrowUncentered, renderedSide, renderedAlign, positionerContext } = useAnchorPositioning(params); const getPositionerProps = React.useCallback((externalProps = {}) => { const hiddenStyles = {}; if (keepMounted && !open) { hiddenStyles.pointerEvents = 'none'; } return mergeReactProps(externalProps, { role: 'presentation', hidden: !mounted, style: { ...positionerStyles, ...hiddenStyles } }); }, [keepMounted, open, mounted, positionerStyles]); return React.useMemo(() => ({ getPositionerProps, arrowRef, arrowUncentered, arrowStyles, side: renderedSide, align: renderedAlign, positionerContext, anchorHidden }), [getPositionerProps, arrowRef, arrowUncentered, arrowStyles, renderedSide, renderedAlign, positionerContext, anchorHidden]); }