import { useRect } from "@reach/rect" import * as React from "react" import { Portal } from "~/modules/dom/portal" export function Popper({ renderReference, renderPopover, }: { renderReference: (referenceProps: { ref: (element: HTMLElement | null | undefined) => void }) => React.ReactNode renderPopover: () => React.ReactNode }) { const [reference, referenceRef] = React.useState() const referenceRect = useRect(useValueAsRefObject(reference)) return ( <> {renderReference({ ref: referenceRef })} {referenceRect && (
{renderPopover()}
)}
) } function useValueAsRefObject(value: Value): { readonly current: Value } { const ref = React.useRef(value) ref.current = value return ref }