import { Observable } from '@legendapp/state'; import { DeepMaybeObservable } from '@usels/core'; import { ConfigurableWindow } from '../../shared/configurable.mjs'; import { MaybeEventTarget } from '../../types.mjs'; interface UseMouseInElementOptions extends ConfigurableWindow { /** Also update elementX/Y when mouse is outside the element. Default: true */ handleOutside?: boolean; /** Re-calculate on window scroll. Default: true */ windowScroll?: boolean; /** Re-calculate on window resize. Default: true */ windowResize?: boolean; } interface UseMouseInElementReturn { /** Mouse X position relative to the element */ elementX$: Observable; /** Mouse Y position relative to the element */ elementY$: Observable; /** Element's absolute X position on the page */ elementPositionX$: Observable; /** Element's absolute Y position on the page */ elementPositionY$: Observable; /** Element width */ elementWidth$: Observable; /** Element height */ elementHeight$: Observable; /** Whether the mouse is outside the element */ isOutside$: Observable; /** Global mouse X (clientX) */ x$: Observable; /** Global mouse Y (clientY) */ y$: Observable; /** Stop all observers and event listeners */ stop: () => void; } /** * Framework-agnostic mouse-in-element tracker. Must be called inside a * `useScope` factory — `mousemove`, `mouseleave`, window scroll/resize * listeners as well as ResizeObserver / MutationObserver for the target are * all registered via the scope-aware `create*` helpers and cleaned up * automatically when the scope disposes. Public API matches the legacy * `useMouseInElement` hook. */ declare function createMouseInElement(target: MaybeEventTarget, options?: DeepMaybeObservable): UseMouseInElementReturn; export { type UseMouseInElementOptions, type UseMouseInElementReturn, createMouseInElement };