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.
249 lines • 23.1 kB
JavaScript
;
/**
* Animation Core System - Categorical Animation Engine
* Following category-theoretic principles: Animation as Functor Time → State
*/
Object.defineProperty(exports, "__esModule", { value: true });
exports.animation = exports.interpolators = exports.easings = void 0;
const signal_1 = require("../core/signal");
// Standard easing functions (Endofunctors on Time)
exports.easings = {
linear: (t) => t,
easeIn: (t) => t * t,
easeOut: (t) => 1 - Math.pow(1 - t, 2),
easeInOut: (t) => t < 0.5 ? 2 * t * t : 1 - Math.pow(-2 * t + 2, 2) / 2,
easeInQuad: (t) => t * t,
easeOutQuad: (t) => 1 - (1 - t) * (1 - t),
easeInOutQuad: (t) => t < 0.5 ? 2 * t * t : 1 - Math.pow(-2 * t + 2, 2) / 2,
easeInCubic: (t) => t * t * t,
easeOutCubic: (t) => 1 - Math.pow(1 - t, 3),
easeInOutCubic: (t) => t < 0.5 ? 4 * t * t * t : 1 - Math.pow(-2 * t + 2, 3) / 2,
easeInQuart: (t) => t * t * t * t,
easeOutQuart: (t) => 1 - Math.pow(1 - t, 4),
easeInOutQuart: (t) => t < 0.5 ? 8 * t * t * t * t : 1 - Math.pow(-2 * t + 2, 4) / 2,
easeInBack: (t) => {
const c1 = 1.70158;
const c3 = c1 + 1;
return c3 * t * t * t - c1 * t * t;
},
easeOutBack: (t) => {
const c1 = 1.70158;
const c3 = c1 + 1;
return 1 + c3 * Math.pow(t - 1, 3) + c1 * Math.pow(t - 1, 2);
},
easeInOutBack: (t) => {
const c1 = 1.70158;
const c2 = c1 * 1.525;
return t < 0.5
? (Math.pow(2 * t, 2) * ((c2 + 1) * 2 * t - c2)) / 2
: (Math.pow(2 * t - 2, 2) * ((c2 + 1) * (t * 2 - 2) + c2) + 2) / 2;
},
easeInBounce: (t) => 1 - exports.easings.easeOutBounce(1 - t),
easeOutBounce: (t) => {
const n1 = 7.5625;
const d1 = 2.75;
if (t < 1 / d1) {
return n1 * t * t;
}
else if (t < 2 / d1) {
return n1 * (t -= 1.5 / d1) * t + 0.75;
}
else if (t < 2.5 / d1) {
return n1 * (t -= 2.25 / d1) * t + 0.9375;
}
else {
return n1 * (t -= 2.625 / d1) * t + 0.984375;
}
},
easeInOutBounce: (t) => t < 0.5
? (1 - exports.easings.easeOutBounce(1 - 2 * t)) / 2
: (1 + exports.easings.easeOutBounce(2 * t - 1)) / 2,
};
// Standard interpolators
exports.interpolators = {
number: (from, to, t) => from + (to - from) * t,
string: (from, to, t) => t < 0.5 ? from : to,
boolean: (from, to, t) => t < 0.5 ? from : to,
array: (from, to, t, itemInterpolator) => {
const length = Math.max(from.length, to.length);
const result = [];
for (let i = 0; i < length; i++) {
const fromItem = from[i] ?? from[from.length - 1];
const toItem = to[i] ?? to[to.length - 1];
result[i] = itemInterpolator(fromItem, toItem, t);
}
return result;
},
object: (from, to, t, propertyInterpolators) => {
const result = {};
const keys = Array.from(new Set([...Object.keys(from), ...Object.keys(to)]));
for (const key of keys) {
const interpolator = propertyInterpolators[key] || exports.interpolators.string;
result[key] = interpolator(from[key], to[key], t);
}
return result;
},
// CSS-specific interpolators
color: (from, to, t) => {
// Simple color interpolation (can be enhanced with proper color space conversion)
const fromRgb = parseColor(from);
const toRgb = parseColor(to);
if (!fromRgb || !toRgb)
return t < 0.5 ? from : to;
const r = Math.round(fromRgb.r + (toRgb.r - fromRgb.r) * t);
const g = Math.round(fromRgb.g + (toRgb.g - fromRgb.g) * t);
const b = Math.round(fromRgb.b + (toRgb.b - fromRgb.b) * t);
const a = fromRgb.a + (toRgb.a - fromRgb.a) * t;
return `rgba(${r}, ${g}, ${b}, ${a})`;
},
transform: (from, to, t) => {
// Basic transform interpolation (can be enhanced with matrix decomposition)
return t < 0.5 ? from : to;
},
};
// Helper function to parse color strings
function parseColor(color) {
// Simple RGB/RGBA parser (can be enhanced)
const rgbMatch = color.match(/rgba?\((\d+),\s*(\d+),\s*(\d+)(?:,\s*([\d.]+))?\)/);
if (rgbMatch) {
return {
r: parseInt(rgbMatch[1]),
g: parseInt(rgbMatch[2]),
b: parseInt(rgbMatch[3]),
a: rgbMatch[4] ? parseFloat(rgbMatch[4]) : 1,
};
}
// Hex color parser
const hexMatch = color.match(/^#([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i);
if (hexMatch) {
return {
r: parseInt(hexMatch[1], 16),
g: parseInt(hexMatch[2], 16),
b: parseInt(hexMatch[3], 16),
a: 1,
};
}
return null;
}
// Core animation implementation
const animation = (from, to, duration, interpolator, easing = exports.easings.linear) => {
const id = `anim-${Date.now()}-${Math.random().toString(36).substr(2, 9)}`;
// Animation state signals
const stateSignal = (0, signal_1.signal)({
value: from,
progress: 0,
isComplete: false,
startTime: 0,
duration,
elapsedTime: 0,
});
const valueSignal = stateSignal.map((state) => state.value);
const progressSignal = stateSignal.map((state) => state.progress);
const isCompleteSignal = stateSignal.map((state) => state.isComplete);
let animationFrameId = null;
let isPaused = false;
let pausedTime = 0;
const updateAnimation = (currentTime) => {
const state = stateSignal.value();
if (isPaused || state.isComplete)
return;
const elapsedTime = currentTime - state.startTime - pausedTime;
const rawProgress = Math.min(elapsedTime / duration, 1);
const easedProgress = easing(rawProgress);
const value = interpolator(from, to, easedProgress);
const isComplete = rawProgress >= 1;
stateSignal._set({
value,
progress: rawProgress,
isComplete,
startTime: state.startTime,
duration,
elapsedTime,
});
if (!isComplete) {
animationFrameId = requestAnimationFrame(updateAnimation);
}
};
const instance = {
id,
duration,
from,
to,
interpolator,
easing,
state: stateSignal,
value: valueSignal,
progress: progressSignal,
isComplete: isCompleteSignal,
map: (f, newInterpolator) => {
return (0, exports.animation)(f(from), f(to), duration, newInterpolator, easing);
},
ease: (newEasing) => {
return (0, exports.animation)(from, to, duration, interpolator, newEasing);
},
start: () => {
const startTime = performance.now();
stateSignal._set({
...stateSignal.value(),
startTime,
isComplete: false,
});
isPaused = false;
pausedTime = 0;
animationFrameId = requestAnimationFrame(updateAnimation);
},
pause: () => {
isPaused = true;
if (animationFrameId) {
cancelAnimationFrame(animationFrameId);
animationFrameId = null;
}
},
resume: () => {
if (isPaused) {
const currentTime = performance.now();
const state = stateSignal.value();
pausedTime += currentTime - state.startTime - state.elapsedTime;
isPaused = false;
animationFrameId = requestAnimationFrame(updateAnimation);
}
},
stop: () => {
isPaused = true;
if (animationFrameId) {
cancelAnimationFrame(animationFrameId);
animationFrameId = null;
}
stateSignal._set({
...stateSignal.value(),
progress: 0,
value: from,
isComplete: true,
});
},
seek: (progress) => {
const clampedProgress = Math.max(0, Math.min(1, progress));
const easedProgress = easing(clampedProgress);
const value = interpolator(from, to, easedProgress);
stateSignal._set({
...stateSignal.value(),
progress: clampedProgress,
value,
isComplete: clampedProgress >= 1,
});
},
onComplete: (callback) => {
return isCompleteSignal.subscribe((isComplete) => {
if (isComplete) {
callback(valueSignal.value());
}
});
},
onUpdate: (callback) => {
return stateSignal.subscribe(callback);
},
};
return instance;
};
exports.animation = animation;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29yZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9hbmltYXRpb24vY29yZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7OztHQUdHOzs7QUFFSCwyQ0FBZ0Q7QUEyRGhELG1EQUFtRDtBQUN0QyxRQUFBLE9BQU8sR0FBRztJQUNyQixNQUFNLEVBQUUsQ0FBQyxDQUFTLEVBQVUsRUFBRSxDQUFDLENBQUM7SUFFaEMsTUFBTSxFQUFFLENBQUMsQ0FBUyxFQUFVLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQztJQUNwQyxPQUFPLEVBQUUsQ0FBQyxDQUFTLEVBQVUsRUFBRSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ3RELFNBQVMsRUFBRSxDQUFDLENBQVMsRUFBVSxFQUFFLENBQy9CLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUM7SUFFdkQsVUFBVSxFQUFFLENBQUMsQ0FBUyxFQUFVLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQztJQUN4QyxXQUFXLEVBQUUsQ0FBQyxDQUFTLEVBQVUsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDekQsYUFBYSxFQUFFLENBQUMsQ0FBUyxFQUFVLEVBQUUsQ0FDbkMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMs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