resig.js
Version:
Universal reactive signal library with complete platform features: signals, animations, CRDTs, scheduling, DOM integration. Works identically across React, SolidJS, Svelte, Vue, and Qwik.
257 lines • 23.1 kB
JavaScript
;
/**
* Animation System - Main Export
* Categorical Animation Engine for Signal-Σ
*/
Object.defineProperty(exports, "__esModule", { value: true });
exports.fadeInOut = exports.animationBuilder = exports.resolveTarget = exports.element = exports.tl = exports.spring = exports.animated = exports.anim = exports.timelineBuilder = exports.presets = exports.gestureRecognizer = exports.physicsSpring = exports.pathAnimation = exports.keyframeAnimation = exports.animateOnScroll = exports.animateElements = exports.bounce = exports.shake = exports.rotate = exports.scale = exports.slideOut = exports.slideIn = exports.fadeOut = exports.fadeIn = exports.animatedElement = exports.gestureSignal = exports.loop = exports.sequenceSignal = exports.useAnimatedValue = exports.animatedArray = exports.animatedColor = exports.springNumber = exports.animatedNumber = exports.springSignal = exports.animatedSignal = exports.profileAnimations = exports.debugAnimations = exports.getAnimationStats = exports.scheduledTimeline = exports.animate = exports.scheduledAnimation = exports.getGlobalAnimationManager = exports.repeat = exports.stagger = exports.timeline = exports.sequence = exports.parallel = exports.interpolators = exports.easings = exports.animation = void 0;
exports.createPerformanceMonitor = exports.animationStateMachine = exports.morphPath = exports.slideInOut = void 0;
// Core animation imports for local use
const core_1 = require("./core");
// Core animation exports
var core_2 = require("./core");
Object.defineProperty(exports, "animation", { enumerable: true, get: function () { return core_2.animation; } });
Object.defineProperty(exports, "easings", { enumerable: true, get: function () { return core_2.easings; } });
Object.defineProperty(exports, "interpolators", { enumerable: true, get: function () { return core_2.interpolators; } });
// Composition imports for local use
const composer_1 = require("./composer");
// Composition exports
var composer_2 = require("./composer");
Object.defineProperty(exports, "parallel", { enumerable: true, get: function () { return composer_2.parallel; } });
Object.defineProperty(exports, "sequence", { enumerable: true, get: function () { return composer_2.sequence; } });
Object.defineProperty(exports, "timeline", { enumerable: true, get: function () { return composer_2.timeline; } });
Object.defineProperty(exports, "stagger", { enumerable: true, get: function () { return composer_2.stagger; } });
Object.defineProperty(exports, "repeat", { enumerable: true, get: function () { return composer_2.repeat; } });
// Scheduler integration exports
var scheduler_1 = require("./scheduler");
Object.defineProperty(exports, "getGlobalAnimationManager", { enumerable: true, get: function () { return scheduler_1.getGlobalAnimationManager; } });
Object.defineProperty(exports, "scheduledAnimation", { enumerable: true, get: function () { return scheduler_1.scheduledAnimation; } });
Object.defineProperty(exports, "animate", { enumerable: true, get: function () { return scheduler_1.animate; } });
Object.defineProperty(exports, "scheduledTimeline", { enumerable: true, get: function () { return scheduler_1.scheduledTimeline; } });
Object.defineProperty(exports, "getAnimationStats", { enumerable: true, get: function () { return scheduler_1.getAnimationStats; } });
Object.defineProperty(exports, "debugAnimations", { enumerable: true, get: function () { return scheduler_1.debugAnimations; } });
Object.defineProperty(exports, "profileAnimations", { enumerable: true, get: function () { return scheduler_1.profileAnimations; } });
// Signal integration exports
var signals_1 = require("./signals");
Object.defineProperty(exports, "animatedSignal", { enumerable: true, get: function () { return signals_1.animatedSignal; } });
Object.defineProperty(exports, "springSignal", { enumerable: true, get: function () { return signals_1.springSignal; } });
Object.defineProperty(exports, "animatedNumber", { enumerable: true, get: function () { return signals_1.animatedNumber; } });
Object.defineProperty(exports, "springNumber", { enumerable: true, get: function () { return signals_1.springNumber; } });
Object.defineProperty(exports, "animatedColor", { enumerable: true, get: function () { return signals_1.animatedColor; } });
Object.defineProperty(exports, "animatedArray", { enumerable: true, get: function () { return signals_1.animatedArray; } });
Object.defineProperty(exports, "useAnimatedValue", { enumerable: true, get: function () { return signals_1.useAnimatedValue; } });
Object.defineProperty(exports, "sequenceSignal", { enumerable: true, get: function () { return signals_1.sequence; } });
Object.defineProperty(exports, "loop", { enumerable: true, get: function () { return signals_1.loop; } });
Object.defineProperty(exports, "gestureSignal", { enumerable: true, get: function () { return signals_1.gestureSignal; } });
// DOM integration imports for local use
const dom_1 = require("./dom");
// Advanced animation imports for local use
const advanced_1 = require("./advanced");
// DOM integration exports
var dom_2 = require("./dom");
Object.defineProperty(exports, "animatedElement", { enumerable: true, get: function () { return dom_2.animatedElement; } });
Object.defineProperty(exports, "fadeIn", { enumerable: true, get: function () { return dom_2.fadeIn; } });
Object.defineProperty(exports, "fadeOut", { enumerable: true, get: function () { return dom_2.fadeOut; } });
Object.defineProperty(exports, "slideIn", { enumerable: true, get: function () { return dom_2.slideIn; } });
Object.defineProperty(exports, "slideOut", { enumerable: true, get: function () { return dom_2.slideOut; } });
Object.defineProperty(exports, "scale", { enumerable: true, get: function () { return dom_2.scale; } });
Object.defineProperty(exports, "rotate", { enumerable: true, get: function () { return dom_2.rotate; } });
Object.defineProperty(exports, "shake", { enumerable: true, get: function () { return dom_2.shake; } });
Object.defineProperty(exports, "bounce", { enumerable: true, get: function () { return dom_2.bounce; } });
Object.defineProperty(exports, "animateElements", { enumerable: true, get: function () { return dom_2.animateElements; } });
Object.defineProperty(exports, "animateOnScroll", { enumerable: true, get: function () { return dom_2.animateOnScroll; } });
// Advanced features exports
var advanced_2 = require("./advanced");
Object.defineProperty(exports, "keyframeAnimation", { enumerable: true, get: function () { return advanced_2.keyframeAnimation; } });
Object.defineProperty(exports, "pathAnimation", { enumerable: true, get: function () { return advanced_2.pathAnimation; } });
Object.defineProperty(exports, "physicsSpring", { enumerable: true, get: function () { return advanced_2.physicsSpring; } });
Object.defineProperty(exports, "gestureRecognizer", { enumerable: true, get: function () { return advanced_2.gestureRecognizer; } });
Object.defineProperty(exports, "presets", { enumerable: true, get: function () { return advanced_2.presets; } });
Object.defineProperty(exports, "timelineBuilder", { enumerable: true, get: function () { return advanced_2.timelineBuilder; } });
// Re-export commonly used functions with shorter names
var core_3 = require("./core");
Object.defineProperty(exports, "anim", { enumerable: true, get: function () { return core_3.animation; } });
var signals_2 = require("./signals");
Object.defineProperty(exports, "animated", { enumerable: true, get: function () { return signals_2.animatedSignal; } });
var signals_3 = require("./signals");
Object.defineProperty(exports, "spring", { enumerable: true, get: function () { return signals_3.springSignal; } });
var composer_3 = require("./composer");
Object.defineProperty(exports, "tl", { enumerable: true, get: function () { return composer_3.timeline; } });
var dom_3 = require("./dom");
Object.defineProperty(exports, "element", { enumerable: true, get: function () { return dom_3.animatedElement; } });
// Helper function to resolve animation targets
const resolveTarget = (target) => {
if (typeof target === 'function') {
return target();
}
if (target && typeof target === 'object' && 'value' in target) {
return target.value;
}
return target;
};
exports.resolveTarget = resolveTarget;
const animationBuilder = () => {
let fromValue;
let toValue;
let durationMs = 300;
let easingFn = core_1.easings.easeInOut;
let interpolatorFn;
const builder = {
from: (value) => {
fromValue = value;
return builder;
},
to: (value) => {
toValue = value;
return builder;
},
duration: (ms) => {
durationMs = ms;
return builder;
},
easing: (fn) => {
easingFn = fn;
return builder;
},
interpolator: (fn) => {
interpolatorFn = fn;
return builder;
},
build: () => {
if (fromValue === undefined || toValue === undefined || !interpolatorFn) {
throw new Error('Animation builder requires from, to, and interpolator values');
}
return (0, core_1.animation)(fromValue, toValue, durationMs, interpolatorFn, easingFn);
},
start: async () => {
const anim = builder.build();
return new Promise((resolve) => {
anim.onComplete(resolve);
anim.start();
});
},
};
return builder;
};
exports.animationBuilder = animationBuilder;
// Convenience functions for common animation patterns
const fadeInOut = (duration = 300) => {
return (0, composer_1.sequence)((0, core_1.animation)(0, 1, duration, core_1.interpolators.number), (0, core_1.animation)(1, 0, duration, core_1.interpolators.number)).start();
};
exports.fadeInOut = fadeInOut;
const slideInOut = (element, direction, duration = 300, delay = 1000) => {
const animated = (0, dom_1.animatedElement)(element);
return animated
.slideIn(direction, duration)
.then(() => new Promise((resolve) => setTimeout(resolve, delay)))
.then(() => animated.slideOut(direction, duration));
};
exports.slideInOut = slideInOut;
const morphPath = (from, to, duration = 1000) => {
// Ensure both paths have the same number of points
const maxLength = Math.max(from.length, to.length);
const normalizedFrom = [...from];
const normalizedTo = [...to];
// Pad shorter path by repeating last point
while (normalizedFrom.length < maxLength) {
normalizedFrom.push(normalizedFrom[normalizedFrom.length - 1]);
}
while (normalizedTo.length < maxLength) {
normalizedTo.push(normalizedTo[normalizedTo.length - 1]);
}
return (0, advanced_1.pathAnimation)(normalizedTo, duration);
};
exports.morphPath = morphPath;
const animationStateMachine = (initialState) => {
let currentState = initialState;
const states = {};
const transitions = {};
const instance = {
get currentState() {
return currentState;
},
states,
transitions,
transition: async (to) => {
if (!states[to]) {
throw new Error(`State "${to}" not found`);
}
const allowedTransitions = transitions[currentState] || [];
if (!allowedTransitions.includes(to)) {
throw new Error(`Transition from "${currentState}" to "${to}" not allowed`);
}
const animation = states[to];
return new Promise((resolve) => {
animation.onComplete(() => {
currentState = to;
resolve();
});
animation.start();
});
},
addState: (name, animation) => {
states[name] = animation;
},
addTransition: (from, to) => {
if (!transitions[from]) {
transitions[from] = [];
}
transitions[from].push(to);
},
};
return instance;
};
exports.animationStateMachine = animationStateMachine;
const createPerformanceMonitor = () => {
let isMonitoring = false;
let frameCount = 0;
let droppedFrames = 0;
let totalFrameTime = 0;
let lastFrameTime = 0;
let startTime = 0;
const monitor = () => {
if (!isMonitoring)
return;
const currentTime = performance.now();
if (lastFrameTime > 0) {
const frameTime = currentTime - lastFrameTime;
totalFrameTime += frameTime;
// Consider frame dropped if it took longer than 16.67ms (60fps)
if (frameTime > 16.67) {
droppedFrames++;
}
}
frameCount++;
lastFrameTime = currentTime;
requestAnimationFrame(monitor);
};
return {
get frameRate() {
const elapsed = (performance.now() - startTime) / 1000;
return elapsed > 0 ? frameCount / elapsed : 0;
},
get droppedFrames() {
return droppedFrames;
},
get averageFrameTime() {
return frameCount > 0 ? totalFrameTime / frameCount : 0;
},
start: () => {
isMonitoring = true;
startTime = performance.now();
requestAnimationFrame(monitor);
},
stop: () => {
isMonitoring = false;
},
reset: () => {
frameCount = 0;
droppedFrames = 0;
totalFrameTime = 0;
lastFrameTime = 0;
startTime = performance.now();
},
};
};
exports.createPerformanceMonitor = createPerformanceMonitor;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYW5pbWF0aW9uL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7O0dBR0c7Ozs7QUFFSCx1Q0FBdUM7QUFDdkMsaUNBT2dCO0FBRWhCLHlCQUF5QjtBQUN6QiwrQkFRZ0I7QUFIZCxpR0FBQSxTQUFTLE9BQUE7QUFDVCwrRkFBQSxPQUFPLE9BQUE7QUFDUCxxR0FBQSxhQUFhLE9BQUE7QUFHZixvQ0FBb0M7QUFDcEMseUNBRW9CO0FBRXBCLHNCQUFzQjtBQUN0Qix1Q0FTb0I7QUFMbEIsb0dBQUEsUUFBUSxPQUFBO0FBQ1Isb0dBQUEsUUFBUSxPQUFBO0FBQ1Isb0dBQUEsUUFBUSxPQUFBO0FBQ1IsbUdBQUEsT0FBTyxPQUFBO0FBQ1Asa0dBQUEsTUFBTSxPQUFBO0FBR1IsZ0NBQWdDO0FBQ2hDLHlDQVVxQjtBQVBuQixzSEFBQSx5QkFBeUIsT0FBQTtBQUN6QiwrR0FBQSxrQkFBa0IsT0FBQTtBQUNsQixvR0FBQSxPQUFPLE9BQUE7QUFDUCw4R0FBQSxpQkFBaUIsT0FBQTtBQUNqQiw4R0FBQSxpQkFBaUIsT0FBQTtBQUNqQiw0R0FBQSxlQUFlLE9BQUE7QUFDZiw4R0FBQSxpQkFBaUIsT0FBQTtBQUduQiw2QkFBNkI7QUFDN0IscUNBY21CO0FBVmpCLHlHQUFBLGNBQWMsT0FBQTtBQUNkLHVHQUFBLFlBQVksT0FBQTtBQUNaLHlHQUFBLGNBQWMsT0FBQTtBQUNkLHVHQUFBLFlBQVksT0FBQTtBQUNaLHdHQUFBLGFBQWEsT0FBQTtBQUNiLHdHQUFBLGFBQWEsT0FBQTtBQUNiLDJHQUFBLGdCQUFnQixPQUFBO0FBQ2hCLHlHQUFBLFFBQVEsT0FBa0I7QUFDMUIsK0ZBQUEsSUFBSSxPQUFBO0FBQ0osd0dBQUEsYUFBYSxPQUFBO0FBR2Ysd0NBQXdDO0FBQ3hDLCtCQUVlO0FBRWYsMkNBQTJDO0FBQzNDLHlDQUlvQjtBQUVwQiwwQkFBMEI7QUFDMUIs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