UNPKG

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
"use strict"; /** * 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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