UNPKG

@mui/x-charts

Version:

The community edition of MUI X Charts components.

83 lines 3.73 kB
import * as React from 'react'; export interface UseAnimateParams<Props extends {}, Elem extends Element, T extends {} = Props> { /** * Function that returns the interpolation function for animating props. * * @param {object} lastProps Props to animate from, i.e., props when the animation was last stopped. If this is the first * animation, this value be `initialProps`. * @param {object} newProps Props to animate to. * * @returns {function} Interpolation function that takes a time value between 0 and 1 and returns the interpolated * props at time t. This function is called on every frame of the animation. */ createInterpolator: (lastProps: Props, newProps: Props) => (t: number) => Props; /** * Transforms the interpolated props to be passed to `applyProps`, which usually means transforming them to element * attributes, e.g., transforming an array of points into a `d` attribute for a path. * * @param {object} props The interpolated props. * * @returns {object} The transformed props. */ transformProps: (props: Props) => T; /** * Applies the transformed props to the element. Usually this will be a call to `element.setAttribute("x", x)` or * to `element.style.width = width` so that updating the element does not go through the React lifecycle (i.e., not * causing a re-render), with the objective of improving performance. * * This function is called on every frame of the animation. * @param {Element} element The element to apply the props to. * @param {object} props The transformed props to apply to the element. */ applyProps: (element: Elem, props: T) => void; /** * If `true`, the animation will be skipped and the final props will be applied immediately. */ skip?: boolean; /** * Initial props to animate from. If not provided, defaults to the props passed as the first argument of `useAnimate`. */ initialProps?: Props; /** * Optional ref to merge with the ref returned from this hook. */ ref?: React.Ref<Elem>; } export type UseAnimateReturn<Elem extends Element, T extends {}> = Omit<T, 'ref'> & { /** * Ref to be passed to the element to animate. */ ref: React.Ref<Elem>; }; /** * Hook to customize the animation of an element. * Animates a ref from `initialProps` to `props`. * * @param {object} props The props to animate to. * * @returns an object containing a ref that should be passed to the element to animate and the transformed props. * If `skip` is true, the transformed props are the `props` to animate to; if it is false, the transformed props are the * `initialProps`. * * The animated props are only accessible in `applyProps`. The props returned from this hook are not animated. * * When an animation starts, an interpolator is created using `createInterpolator`. * On every animation frame: * 1. The interpolator is called to get the interpolated props; * 2. `transformProps` is called to transform the interpolated props; * 3. `applyProps` is called to apply the transformed props to the element. * * If `props` change while an animation is progress, the animation will continue towards the new `props`. * * The animation can be skipped by setting `skip` to true. If a transition is in progress, it will immediately end * and `applyProps` be called with the final value. If there isn't a transition in progress, a new one won't be * started and `applyProps` will not be called. * */ export declare function useAnimate<Props extends {}, Elem extends Element, T extends {} = Props>(props: Props, { createInterpolator, transformProps, applyProps, skip, initialProps, ref }: UseAnimateParams<Props, Elem, T>): UseAnimateReturn<Elem, T>;