motion-v
Version:
<h1 align="center"> <img width="35" height="35" alt="Motion logo" src="https://github.com/user-attachments/assets/00d6d1c3-72c4-4c2f-a664-69da13182ffc" /><br />Motion for Vue</h1>
26 lines (25 loc) • 758 B
JavaScript
import { cancelFrame, frame, motionValue } from "motion-dom";
import { getCurrentInstance, onUnmounted } from "vue";
function useCombineMotionValues(combineValues) {
const value = motionValue(combineValues());
const updateValue = () => value.set(combineValues());
const scheduleUpdate = () => frame.preRender(updateValue, false, true);
let subscriptions;
const subscribe = (values) => {
subscriptions = values.map((v) => v.on("change", scheduleUpdate));
};
const unsubscribe = () => {
subscriptions.forEach((unsubscribe$1) => unsubscribe$1());
cancelFrame(updateValue);
};
if (getCurrentInstance()) onUnmounted(() => {
unsubscribe();
});
return {
subscribe,
unsubscribe,
value,
updateValue
};
}
export { useCombineMotionValues };