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.

299 lines 27.2 kB
"use strict"; /** * DOM Animation Adapter * Extends DOM adapter with animation capabilities for CSS properties and transforms */ Object.defineProperty(exports, "__esModule", { value: true }); exports.animateOnScroll = exports.animateElements = exports.bounce = exports.shake = exports.rotate = exports.scale = exports.slideOut = exports.slideIn = exports.fadeOut = exports.fadeIn = exports.animatedElement = void 0; const core_1 = require("./core"); const signals_1 = require("./signals"); // CSS property interpolators const cssInterpolators = { length: (from, to, t) => { const fromValue = parseFloat(from); const toValue = parseFloat(to); const unit = from.replace(/[\d.-]/g, '') || to.replace(/[\d.-]/g, '') || 'px'; const value = fromValue + (toValue - fromValue) * t; return `${value}${unit}`; }, color: core_1.interpolators.color, number: (from, to, t) => { const fromNum = typeof from === 'number' ? from : parseFloat(from); const toNum = typeof to === 'number' ? to : parseFloat(to); return String(fromNum + (toNum - fromNum) * t); }, transform: (from, to, t) => { const result = {}; const properties = [ 'translateX', 'translateY', 'translateZ', 'scaleX', 'scaleY', 'scaleZ', 'rotateX', 'rotateY', 'rotateZ', 'skewX', 'skewY', ]; properties.forEach((prop) => { const fromVal = from[prop] ?? 0; const toVal = to[prop] ?? 0; result[prop] = fromVal + (toVal - fromVal) * t; }); return result; }, }; // Transform to CSS string converter const transformToCSS = (transform) => { const parts = []; if (transform.translateX !== undefined || transform.translateY !== undefined || transform.translateZ !== undefined) { const x = transform.translateX ?? 0; const y = transform.translateY ?? 0; const z = transform.translateZ ?? 0; parts.push(`translate3d(${x}px, ${y}px, ${z}px)`); } if (transform.scaleX !== undefined || transform.scaleY !== undefined || transform.scaleZ !== undefined) { const x = transform.scaleX ?? 1; const y = transform.scaleY ?? 1; const z = transform.scaleZ ?? 1; parts.push(`scale3d(${x}, ${y}, ${z})`); } if (transform.rotateX !== undefined) parts.push(`rotateX(${transform.rotateX}deg)`); if (transform.rotateY !== undefined) parts.push(`rotateY(${transform.rotateY}deg)`); if (transform.rotateZ !== undefined) parts.push(`rotateZ(${transform.rotateZ}deg)`); if (transform.skewX !== undefined) parts.push(`skewX(${transform.skewX}deg)`); if (transform.skewY !== undefined) parts.push(`skewY(${transform.skewY}deg)`); return parts.join(' '); }; // Create animated DOM element const animatedElement = (element) => { // Initialize transform signal const transformSignal = (0, signals_1.animatedSignal)({}, cssInterpolators.transform, 300, core_1.easings.easeInOut); // Initialize opacity signal const opacitySignal = (0, signals_1.animatedSignal)(parseFloat(getComputedStyle(element).opacity) || 1, core_1.interpolators.number, 300, core_1.easings.easeInOut); // Initialize visibility signal const visibilitySignal = (0, signals_1.animatedSignal)(getComputedStyle(element).visibility !== 'hidden', core_1.interpolators.boolean, 0); // Style property signals cache const styleSignals = {}; // Subscribe to transform changes transformSignal.subscribe((transform) => { element.style.transform = transformToCSS(transform); }); // Subscribe to opacity changes opacitySignal.subscribe((opacity) => { element.style.opacity = String(opacity); }); // Subscribe to visibility changes visibilitySignal.subscribe((visible) => { element.style.visibility = visible ? 'visible' : 'hidden'; }); const getStyleSignal = (property) => { if (!styleSignals[property]) { const currentValue = getComputedStyle(element)[property] || '0'; const interpolator = property.includes('color') ? cssInterpolators.color : /^(width|height|top|left|right|bottom|margin|padding)/.test(property) ? cssInterpolators.length : cssInterpolators.number; const signal = (0, signals_1.animatedSignal)(currentValue, interpolator); signal.subscribe((value) => { element.style[property] = value; }); styleSignals[property] = signal; } return styleSignals[property]; }; const instance = { element, get style() { return new Proxy({}, { get: (_, property) => getStyleSignal(property), }); }, transform: transformSignal, opacity: opacitySignal, visibility: visibilitySignal, animate: async (config) => { const signal = getStyleSignal(config.property); await signal.animateTo(config.unit ? `${config.to}${config.unit}` : config.to, config.duration, config.easing); }, animateTransform: async (to, duration = 300, easing = core_1.easings.easeInOut) => { const current = transformSignal.value(); const target = { ...current, ...to }; await transformSignal.animateTo(target, duration, easing); }, fadeIn: async (duration = 300) => { visibilitySignal.setImmediate(true); await opacitySignal.animateTo(1, duration, core_1.easings.easeOut); }, fadeOut: async (duration = 300) => { await opacitySignal.animateTo(0, duration, core_1.easings.easeIn); visibilitySignal.setImmediate(false); }, slideIn: async (direction, duration = 300) => { const rect = element.getBoundingClientRect(); const startTransform = {}; switch (direction) { case 'left': startTransform.translateX = -rect.width; break; case 'right': startTransform.translateX = rect.width; break; case 'up': startTransform.translateY = -rect.height; break; case 'down': startTransform.translateY = rect.height; break; } transformSignal.setImmediate({ ...transformSignal.value(), ...startTransform, }); visibilitySignal.setImmediate(true); await instance.animateTransform({ translateX: 0, translateY: 0, }, duration, core_1.easings.easeOut); }, slideOut: async (direction, duration = 300) => { const rect = element.getBoundingClientRect(); const endTransform = {}; switch (direction) { case 'left': endTransform.translateX = -rect.width; break; case 'right': endTransform.translateX = rect.width; break; case 'up': endTransform.translateY = -rect.height; break; case 'down': endTransform.translateY = rect.height; break; } await instance.animateTransform(endTransform, duration, core_1.easings.easeIn); visibilitySignal.setImmediate(false); }, scale: async (to, duration = 300) => { await instance.animateTransform({ scaleX: to, scaleY: to, }, duration, core_1.easings.easeInOut); }, rotate: async (to, duration = 300) => { await instance.animateTransform({ rotateZ: to, }, duration, core_1.easings.easeInOut); }, shake: async (intensity = 10, duration = 600) => { const originalTransform = transformSignal.value(); const shakeCount = 6; const shakeDuration = duration / shakeCount; for (let i = 0; i < shakeCount; i++) { const direction = i % 2 === 0 ? 1 : -1; const amount = intensity * direction * (1 - i / shakeCount); await instance.animateTransform({ ...originalTransform, translateX: amount, }, shakeDuration, core_1.easings.easeInOut); } await instance.animateTransform(originalTransform, shakeDuration, core_1.easings.easeOut); }, bounce: async (intensity = 20, duration = 600) => { const originalTransform = transformSignal.value(); const bounceCount = 3; const bounceDuration = duration / (bounceCount * 2); for (let i = 0; i < bounceCount; i++) { const amount = intensity * (1 - i / bounceCount); // Up await instance.animateTransform({ ...originalTransform, translateY: -amount, }, bounceDuration, core_1.easings.easeOut); // Down await instance.animateTransform(originalTransform, bounceDuration, core_1.easings.easeIn); } }, }; return instance; }; exports.animatedElement = animatedElement; // Utility functions for common DOM animations const fadeIn = (element, duration = 300) => { return (0, exports.animatedElement)(element).fadeIn(duration); }; exports.fadeIn = fadeIn; const fadeOut = (element, duration = 300) => { return (0, exports.animatedElement)(element).fadeOut(duration); }; exports.fadeOut = fadeOut; const slideIn = (element, direction, duration = 300) => { return (0, exports.animatedElement)(element).slideIn(direction, duration); }; exports.slideIn = slideIn; const slideOut = (element, direction, duration = 300) => { return (0, exports.animatedElement)(element).slideOut(direction, duration); }; exports.slideOut = slideOut; const scale = (element, to, duration = 300) => { return (0, exports.animatedElement)(element).scale(to, duration); }; exports.scale = scale; const rotate = (element, to, duration = 300) => { return (0, exports.animatedElement)(element).rotate(to, duration); }; exports.rotate = rotate; const shake = (element, intensity = 10, duration = 600) => { return (0, exports.animatedElement)(element).shake(intensity, duration); }; exports.shake = shake; const bounce = (element, intensity = 20, duration = 600) => { return (0, exports.animatedElement)(element).bounce(intensity, duration); }; exports.bounce = bounce; // Batch animation utilities const animateElements = async (elements, animation, stagger = 0) => { const promises = elements.map((element, index) => { return new Promise((resolve) => { setTimeout(async () => { await animation((0, exports.animatedElement)(element)); resolve(); }, index * stagger); }); }); await Promise.all(promises); }; exports.animateElements = animateElements; // Intersection observer for scroll-triggered animations const animateOnScroll = (element, animation, options = { threshold: 0.1 }) => { let hasAnimated = false; const observer = new IntersectionObserver((entries) => { entries.forEach((entry) => { if (entry.isIntersecting && !hasAnimated) { hasAnimated = true; animation((0, exports.animatedElement)(element)); } }); }, options); observer.observe(element); return () => { observer.unobserve(element); observer.disconnect(); }; }; exports.animateOnScroll = animateOnScroll; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG9tLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2FuaW1hdGlvbi9kb20udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7R0FHRzs7O0FBRUgsaUNBQWdFO0FBQ2hFLHVDQUdtQjtBQXlEbkIsNkJBQTZCO0FBQzdCLE1BQU0sZ0JBQWdCLEdBQUc7SUFDdkIsTUFBTSxFQUFFLENBQUMsSUFBWSxFQUFFLEVBQVUsRUFBRSxDQUFTLEVBQVUsRUFBRTtRQUN0RCxNQUFNLFNBQVMsR0FBRyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDbkMsTUFBTSxPQUFPLEdBQUcsVUFBVSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQy9CLE1BQU0sSUFBSSxHQUNSLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxFQUFFLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxPQUFPLENBQUMsU0FBUyxFQUFFLEVBQUUsQ0FBQyxJQUFJLElBQUksQ0FBQztRQUNuRSxNQUFNLEtBQUssR0FBRyxTQUFTLEdBQUcsQ0FBQyxPQUFPLEdBQUcsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3BELE9BQU8sR0FBRyxLQUFLLEdBQUcsSUFBSSxFQUFFLENBQUM7SUFDM0IsQ0FBQztJQUVELEtBQUssRUFBRSxvQkFBYSxDQUFDLEtBQUs7SUFFMUIsTUFBTSxFQUFFLENBQUMsSUFBcUIsRUFBRSxFQUFtQixFQUFFLENBQVMsRUFBVSxFQUFFO1FBQ3hFLE1BQU0sT0FBTyxHQUFHLE9BQU8sSUFBSSxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDbkUsTUFBTSxLQUFLLEdBQUcsT0FBTyxFQUFFLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUMzRCxPQUFPLE1BQU0sQ0FBQyxPQUFPLEdB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