import { animationControls } from './animation-controls.mjs'; import { useConstant } from '../../utils/use-constant.mjs'; import { useIsomorphicLayoutEffect } from '../../utils/use-isomorphic-effect.mjs'; /** * Creates `AnimationControls`, which can be used to manually start, stop * and sequence animations on one or more components. * * The returned `AnimationControls` should be passed to the `animate` property * of the components you want to animate. * * These components can then be animated with the `start` method. * * ```jsx * import * as React from 'react' * import { motion, useAnimation } from 'framer-motion' * * export function MyComponent(props) { * const controls = useAnimation() * * controls.start({ * x: 100, * transition: { duration: 0.5 }, * }) * * return * } * ``` * * @returns Animation controller with `start` and `stop` methods * * @public */ function useAnimationControls() { const controls = useConstant(animationControls); useIsomorphicLayoutEffect(controls.mount, []); return controls; } const useAnimation = useAnimationControls; export { useAnimation, useAnimationControls };