framer-motion
Version:
A simple and powerful React animation library
31 lines (28 loc) • 1.23 kB
JavaScript
import { useMotionValue } from './use-motion-value.mjs';
import { useMultiOnChange } from './use-on-change.mjs';
import sync from 'framesync';
function useCombineMotionValues(values, combineValues) {
/**
* Initialise the returned motion value. This remains the same between renders.
*/
var value = useMotionValue(combineValues());
/**
* Create a function that will update the template motion value with the latest values.
* This is pre-bound so whenever a motion value updates it can schedule its
* execution in Framesync. If it's already been scheduled it won't be fired twice
* in a single frame.
*/
var updateValue = function () { return value.set(combineValues()); };
/**
* Synchronously update the motion value with the latest values during the render.
* This ensures that within a React render, the styles applied to the DOM are up-to-date.
*/
updateValue();
/**
* Subscribe to all motion values found within the template. Whenever any of them change,
* schedule an update.
*/
useMultiOnChange(values, function () { return sync.update(updateValue, false, true); });
return value;
}
export { useCombineMotionValues };