import { Observable } from '@legendapp/state'; import { MaybeObservable, DeepMaybeObservable, Supportable, ReadonlyObservable, Fn } from '@usels/core'; import { ConfigurableWindow } from '../../shared/configurable.mjs'; import { MaybeEventTarget } from '../../types.mjs'; interface UseAnimateOptions extends KeyframeAnimationOptions, ConfigurableWindow { /** Start playing immediately on mount. @default true */ immediate?: boolean; /** Commit final styles to the element on finish. @default false */ commitStyles?: boolean; /** Persist the animation. @default false */ persist?: boolean; /** Initial playback rate. @default 1 */ playbackRate?: number; /** Called once the Animation instance is ready. */ onReady?: (animate: Animation) => void; /** Called when an animation error occurs. */ onError?: (e: unknown) => void; } type UseAnimateKeyframes = MaybeObservable; interface UseAnimateReturn extends Supportable { /** Current Animation instance. */ animate$: ReadonlyObservable; play: Fn; pause: Fn; reverse: Fn; finish: Fn; cancel: Fn; pending$: ReadonlyObservable; playState$: ReadonlyObservable; replaceState$: ReadonlyObservable; startTime$: Observable; currentTime$: Observable; timeline$: Observable; playbackRate$: Observable; } /** * Framework-agnostic reactive wrapper around the * [Web Animations API](https://developer.mozilla.org/en-US/docs/Web/API/Web_Animations_API). * * Must be called inside a `useScope` factory — resource setup (`update`) is * registered via `onMount` and cleanup via `onUnmount`. rAF sync, element * tracking, keyframe reactivity, and animation-event listening are all driven * by scope-aware `createObserve()` so the whole pipeline tears down on scope * disposal. */ declare function createAnimate(target: MaybeEventTarget, keyframes: UseAnimateKeyframes, options?: number | DeepMaybeObservable): UseAnimateReturn; export { type UseAnimateKeyframes, type UseAnimateOptions, type UseAnimateReturn, createAnimate };