export function usePopup()

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
}