{"version":3,"file":"use-animate.mjs","sources":["../../../../src/animation/hooks/use-animate.ts"],"sourcesContent":["\"use client\"\n\nimport { useMemo } from \"react\"\nimport { AnimationScope } from \"motion-dom\"\nimport { useConstant } from \"../../utils/use-constant\"\nimport { useUnmountEffect } from \"../../utils/use-unmount-effect\"\nimport { useReducedMotionConfig } from \"../../utils/reduced-motion/use-reduced-motion-config\"\nimport { createScopedAnimate } from \"../animate\"\n\nexport function useAnimate<T extends Element = any>() {\n    const scope: AnimationScope<T> = useConstant(() => ({\n        current: null!, // Will be hydrated by React\n        animations: [],\n    }))\n\n    const reduceMotion = useReducedMotionConfig() ?? undefined\n\n    const animate = useMemo(\n        () => createScopedAnimate({ scope, reduceMotion }),\n        [scope, reduceMotion]\n    )\n\n    useUnmountEffect(() => {\n        scope.animations.forEach((animation) => animation.stop())\n        scope.animations.length = 0\n    })\n\n    return [scope, animate] as [AnimationScope<T>, typeof animate]\n}\n"],"names":[],"mappings":";;;;;;;;AAUI;;AAEI;AACH;AAED;;;AAQI;AACA;AACJ;AAEA;AACJ;;"}