in packages/react/src/hooks/use-popup.ts [116:141]
export function usePopup<T extends RenderObject, U extends any = unknown>(options: UsePopupOptions<T, U>) {
const [state] = useState(() => {
return new PopupState<T, U>()
})
useEffect(() => {
state.hideTriggerOnOpen = options.hideTriggerOnOpen
state.onVisibleChange = (visible) => {
if (visible) {
options.onOpen?.(state)
} else {
options.onClose?.(state)
}
}
state.onBoundsChange = () => {
if (state.visible) {
options.onUpdate?.(state)
}
}
return () => {
state.onVisibleChange = undefined
state.onBoundsChange = undefined
}
}, [options, state])
return state
}