import { Observable } from '@legendapp/state'; import { DeepMaybeObservable } from '@usels/core'; import { ConfigurableWindow } from '../../shared/configurable.mjs'; import { MaybeEventTarget } from '../../types.mjs'; interface UseElementBoundingOptions extends ConfigurableWindow { /** Reset all values to 0 when element unmounts. Default: true */ reset?: boolean; /** Re-calculate on window resize. Default: true */ windowResize?: boolean; /** Re-calculate on window scroll. Default: true */ windowScroll?: boolean; /** Calculate immediately on mount. Default: true */ immediate?: boolean; /** Use requestAnimationFrame to read rect after CSS transforms settle. Default: true */ useCssTransforms?: boolean; } interface UseElementBoundingReturn { x$: Observable; y$: Observable; top$: Observable; right$: Observable; bottom$: Observable; left$: Observable; width$: Observable; height$: Observable; update: () => void; } /** * Framework-agnostic bounding-rect tracker. Must be called inside a `useScope` * factory — ResizeObserver / MutationObserver / window listeners are registered * via the scope-aware `create*` helpers and are cleaned up automatically when * the scope disposes. Public API matches the legacy `useElementBounding` hook. */ declare function createElementBounding(target: MaybeEventTarget, options?: DeepMaybeObservable): UseElementBoundingReturn; export { type UseElementBoundingOptions, type UseElementBoundingReturn, createElementBounding };