import React from 'react'; import { View } from 'react-native'; import { useControllableState } from '../../../../internal/useControllableState'; import type { PopoverProps } from '../../../../types/popover'; import { PopoverOverlay } from './PopoverOverlay'; /*** Renders anchored overlay content through the shared Surface overlay stack. */ export function Popover(props: PopoverProps) { const anchorRef = React.useRef | null>(null); const [resolvedOpen, setResolvedOpen] = useControllableState({ defaultValue: props.defaultOpen ?? false, onChange: props.onOpenChange, value: props.open, }); const passive = props.interactionPolicy === 'passive'; const close = React.useCallback(() => { if (!passive) setResolvedOpen(false); }, [passive, setResolvedOpen]); const toggle = React.useCallback(() => { if (!passive) setResolvedOpen(!resolvedOpen); }, [passive, resolvedOpen, setResolvedOpen]); return ( <> {props.anchor({ close, open: resolvedOpen, toggle })} {resolvedOpen ? ( {props.children} ) : null} ); }