56 lines
1.4 KiB
JavaScript
56 lines
1.4 KiB
JavaScript
import sync from "framesync";
|
|
import { d as motionValue } from "./navigations.js";
|
|
const useCombineMotionValues = (values, combineValues) => {
|
|
let subscriptions = [];
|
|
let vals = values;
|
|
const unsubscribe = () => {
|
|
subscriptions.forEach((unsubscribe2) => unsubscribe2());
|
|
};
|
|
const subscribe = () => {
|
|
subscriptions = vals.map((val) => val.onChange(handler));
|
|
updateValue();
|
|
};
|
|
const value = motionValue(combineValues(), () => {
|
|
unsubscribe();
|
|
subscribe();
|
|
return unsubscribe;
|
|
});
|
|
let updateValue = () => {
|
|
value.set(combineValues());
|
|
};
|
|
const handler = () => {
|
|
sync.update(updateValue, false, true);
|
|
};
|
|
value.reset = (_values, _combineValues) => {
|
|
vals = _values;
|
|
unsubscribe();
|
|
updateValue = () => {
|
|
value.set(_combineValues());
|
|
};
|
|
subscribe();
|
|
};
|
|
return value;
|
|
};
|
|
const useMotionTemplate = (fragments, ...values) => {
|
|
let numFragments = fragments.length;
|
|
const buildValue = () => {
|
|
let output = ``;
|
|
for (let i = 0; i < numFragments; i++) {
|
|
output += fragments[i];
|
|
const value2 = values[i];
|
|
if (value2) output += values[i].get();
|
|
}
|
|
return output;
|
|
};
|
|
const value = useCombineMotionValues(values, buildValue);
|
|
value.resetInner = value.reset;
|
|
value.reset = (f, ...vs) => {
|
|
numFragments = f.length;
|
|
value.resetInner(vs, buildValue);
|
|
};
|
|
return value;
|
|
};
|
|
export {
|
|
useMotionTemplate as u
|
|
};
|