use-scroll-animate 6.0.0 → 6.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +29 -0
- package/README.md +39 -1
- package/README_ja.md +31 -0
- package/README_zh.md +31 -0
- package/dist/chunks/{core-mV_TPgG_.js → core-BVQW34aX.js} +10 -202
- package/dist/chunks/core-BVQW34aX.js.map +1 -0
- package/dist/chunks/{core-qpECfEkb.cjs → core-BYLtO0Po.cjs} +13 -209
- package/dist/chunks/core-BYLtO0Po.cjs.map +1 -0
- package/dist/chunks/presets-BJ09NeTo.js +226 -0
- package/dist/chunks/presets-BJ09NeTo.js.map +1 -0
- package/dist/chunks/presets-D2ksQNzJ.cjs +233 -0
- package/dist/chunks/presets-D2ksQNzJ.cjs.map +1 -0
- package/dist/chunks/{stagger-CLc3j58T.cjs → stagger-CvhYlKrF.cjs} +2 -2
- package/dist/chunks/{stagger-CLc3j58T.cjs.map → stagger-CvhYlKrF.cjs.map} +1 -1
- package/dist/chunks/{stagger-BFAhKknX.js → stagger-Dh4V-OL0.js} +2 -2
- package/dist/chunks/{stagger-BFAhKknX.js.map → stagger-Dh4V-OL0.js.map} +1 -1
- package/dist/components/lite.cjs +4 -0
- package/dist/components/lite.cjs.map +1 -1
- package/dist/components/lite.js +4 -0
- package/dist/components/lite.js.map +1 -1
- package/dist/components/reveal.cjs +4 -0
- package/dist/components/reveal.cjs.map +1 -1
- package/dist/components/reveal.js +4 -0
- package/dist/components/reveal.js.map +1 -1
- package/dist/components.umd.js +2 -2
- package/dist/components.umd.js.map +1 -1
- package/dist/element.cjs +2 -1
- package/dist/element.cjs.map +1 -1
- package/dist/element.d.cts +16 -2
- package/dist/element.d.ts +16 -2
- package/dist/element.js +2 -1
- package/dist/element.js.map +1 -1
- package/dist/element.umd.js +1 -1
- package/dist/element.umd.js.map +1 -1
- package/dist/index.cjs +22 -19
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +34 -9
- package/dist/index.d.ts +34 -9
- package/dist/index.js +4 -3
- package/dist/index.js.map +1 -1
- package/dist/index.umd.js +2 -2
- package/dist/index.umd.js.map +1 -1
- package/dist/presets/extended.cjs +243 -0
- package/dist/presets/extended.cjs.map +1 -0
- package/dist/presets/extended.d.cts +37 -0
- package/dist/presets/extended.d.ts +37 -0
- package/dist/presets/extended.js +239 -0
- package/dist/presets/extended.js.map +1 -0
- package/dist/presets-extended.umd.js +2 -0
- package/dist/presets-extended.umd.js.map +1 -0
- package/dist/react.cjs +3 -2
- package/dist/react.cjs.map +1 -1
- package/dist/react.d.cts +16 -2
- package/dist/react.d.ts +16 -2
- package/dist/react.js +3 -2
- package/dist/react.js.map +1 -1
- package/dist/solid.cjs +3 -2
- package/dist/solid.cjs.map +1 -1
- package/dist/solid.d.cts +16 -2
- package/dist/solid.d.ts +16 -2
- package/dist/solid.js +3 -2
- package/dist/solid.js.map +1 -1
- package/dist/svelte.cjs +3 -2
- package/dist/svelte.cjs.map +1 -1
- package/dist/svelte.d.cts +16 -2
- package/dist/svelte.d.ts +16 -2
- package/dist/svelte.js +3 -2
- package/dist/svelte.js.map +1 -1
- package/dist/vue.cjs +3 -2
- package/dist/vue.cjs.map +1 -1
- package/dist/vue.d.cts +16 -2
- package/dist/vue.d.ts +16 -2
- package/dist/vue.js +3 -2
- package/dist/vue.js.map +1 -1
- package/docs/API.md +7 -2
- package/docs/ROADMAP.md +12 -11
- package/docs/components.md +1 -1
- package/docs/presets.md +310 -0
- package/package.json +15 -2
- package/dist/chunks/core-mV_TPgG_.js.map +0 -1
- package/dist/chunks/core-qpECfEkb.cjs.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"presets-extended.umd.js","sources":["../src/extended-presets-data.ts","../src/extended-presets-umd.ts"],"sourcesContent":["/**\n * use-scroll-animate — extended preset data (\"Scroll presets 2.0\", v6.1).\n * GENERATED by the release tooling from one source list; edit with care and keep\n * `ExtendedPreset` (src/types.ts) and showcase/catalog-extended.js in sync (tests check it).\n * Pure data: no side effects. Register with `registerPresets(EXTENDED_PRESETS)` or import\n * 'use-scroll-animate/presets/extended' (registers on import).\n */\nimport type { ExtendedPreset, PresetKeyframes } from './types';\n\nexport const EXTENDED_PRESETS: Record<ExtendedPreset, PresetKeyframes> = {\n // Fade\n 'fade-in-up-sm': { from: { opacity: 0, transform: 'translateY(16px)' }, to: { opacity: 1, transform: 'translateY(0px)' } },\n 'fade-in-down-sm': { from: { opacity: 0, transform: 'translateY(-16px)' }, to: { opacity: 1, transform: 'translateY(0px)' } },\n 'fade-in-left-sm': { from: { opacity: 0, transform: 'translateX(-16px)' }, to: { opacity: 1, transform: 'translateX(0px)' } },\n 'fade-in-right-sm': { from: { opacity: 0, transform: 'translateX(16px)' }, to: { opacity: 1, transform: 'translateX(0px)' } },\n 'fade-in-up-lg': { from: { opacity: 0, transform: 'translateY(120px)' }, to: { opacity: 1, transform: 'translateY(0px)' } },\n 'fade-in-down-lg': { from: { opacity: 0, transform: 'translateY(-120px)' }, to: { opacity: 1, transform: 'translateY(0px)' } },\n 'fade-in-left-lg': { from: { opacity: 0, transform: 'translateX(-120px)' }, to: { opacity: 1, transform: 'translateX(0px)' } },\n 'fade-in-right-lg': { from: { opacity: 0, transform: 'translateX(120px)' }, to: { opacity: 1, transform: 'translateX(0px)' } },\n 'fade-in-up-left': { from: { opacity: 0, transform: 'translate(-40px, 40px)' }, to: { opacity: 1, transform: 'translate(0px, 0px)' } },\n 'fade-in-up-right': { from: { opacity: 0, transform: 'translate(40px, 40px)' }, to: { opacity: 1, transform: 'translate(0px, 0px)' } },\n 'fade-in-down-left': { from: { opacity: 0, transform: 'translate(-40px, -40px)' }, to: { opacity: 1, transform: 'translate(0px, 0px)' } },\n 'fade-in-down-right': { from: { opacity: 0, transform: 'translate(40px, -40px)' }, to: { opacity: 1, transform: 'translate(0px, 0px)' } },\n 'fade-in-scale': { from: { opacity: 0, transform: 'translateY(20px) scale(0.95)' }, to: { opacity: 1, transform: 'translateY(0px) scale(1)' } },\n 'fade-in-half': { from: { opacity: 0.5 }, to: { opacity: 1 } },\n // Zoom & scale\n 'zoom-in-up': { from: { opacity: 0, transform: 'translateY(60px) scale(0.6)' }, to: { opacity: 1, transform: 'translateY(0px) scale(1)' } },\n 'zoom-in-down': { from: { opacity: 0, transform: 'translateY(-60px) scale(0.6)' }, to: { opacity: 1, transform: 'translateY(0px) scale(1)' } },\n 'zoom-in-left': { from: { opacity: 0, transform: 'translateX(-60px) scale(0.6)' }, to: { opacity: 1, transform: 'translateX(0px) scale(1)' } },\n 'zoom-in-right': { from: { opacity: 0, transform: 'translateX(60px) scale(0.6)' }, to: { opacity: 1, transform: 'translateX(0px) scale(1)' } },\n 'zoom-out-up': { from: { opacity: 0, transform: 'translateY(60px) scale(1.4)' }, to: { opacity: 1, transform: 'translateY(0px) scale(1)' } },\n 'zoom-out-down': { from: { opacity: 0, transform: 'translateY(-60px) scale(1.4)' }, to: { opacity: 1, transform: 'translateY(0px) scale(1)' } },\n 'zoom-out-left': { from: { opacity: 0, transform: 'translateX(-60px) scale(1.4)' }, to: { opacity: 1, transform: 'translateX(0px) scale(1)' } },\n 'zoom-out-right': { from: { opacity: 0, transform: 'translateX(60px) scale(1.4)' }, to: { opacity: 1, transform: 'translateX(0px) scale(1)' } },\n 'zoom-in-big': { from: { opacity: 0, transform: 'scale(0)' }, to: { opacity: 1, transform: 'scale(1)' } },\n 'zoom-out-big': { from: { opacity: 0, transform: 'scale(2)' }, to: { opacity: 1, transform: 'scale(1)' } },\n 'zoom-bounce': { from: { opacity: 0, transform: 'scale(0.3)' }, to: { opacity: 1, transform: 'scale(1)' }, frames: [{ offset: 0.5, opacity: 1, transform: 'scale(1.1)' }, { offset: 0.75, transform: 'scale(0.95)' }] },\n 'zoom-in-rotate': { from: { opacity: 0, transform: 'rotate(-30deg) scale(0.5)' }, to: { opacity: 1, transform: 'rotate(0deg) scale(1)' } },\n 'scale-x-left': { from: { transform: 'scaleX(0)', transformOrigin: 'left center' }, to: { transform: 'scaleX(1)', transformOrigin: 'left center' } },\n 'scale-x-right': { from: { transform: 'scaleX(0)', transformOrigin: 'right center' }, to: { transform: 'scaleX(1)', transformOrigin: 'right center' } },\n 'scale-y-top': { from: { transform: 'scaleY(0)', transformOrigin: 'center top' }, to: { transform: 'scaleY(1)', transformOrigin: 'center top' } },\n 'scale-y-bottom': { from: { transform: 'scaleY(0)', transformOrigin: 'center bottom' }, to: { transform: 'scaleY(1)', transformOrigin: 'center bottom' } },\n 'stretch-x': { from: { opacity: 0, transform: 'scale(1.6, 0.6)' }, to: { opacity: 1, transform: 'scale(1, 1)' } },\n 'stretch-y': { from: { opacity: 0, transform: 'scale(0.6, 1.6)' }, to: { opacity: 1, transform: 'scale(1, 1)' } },\n // Flip 3D\n 'flip-x-reverse': { from: { opacity: 0, transform: 'perspective(800px) rotateX(90deg)' }, to: { opacity: 1, transform: 'perspective(800px) rotateX(0deg)' } },\n 'flip-y-reverse': { from: { opacity: 0, transform: 'perspective(800px) rotateY(90deg)' }, to: { opacity: 1, transform: 'perspective(800px) rotateY(0deg)' } },\n 'flip-y-full': { from: { opacity: 0, transform: 'perspective(800px) rotateY(-180deg)' }, to: { opacity: 1, transform: 'perspective(800px) rotateY(0deg)' } },\n 'flip-diagonal': { from: { opacity: 0, transform: 'perspective(800px) rotate3d(1, 1, 0, 90deg)' }, to: { opacity: 1, transform: 'perspective(800px) rotate3d(1, 1, 0, 0deg)' } },\n 'flip-diagonal-reverse': { from: { opacity: 0, transform: 'perspective(800px) rotate3d(1, -1, 0, 90deg)' }, to: { opacity: 1, transform: 'perspective(800px) rotate3d(1, -1, 0, 0deg)' } },\n 'flip-left': { from: { opacity: 0, transform: 'perspective(800px) rotateY(-70deg)', transformOrigin: 'left center' }, to: { opacity: 1, transform: 'perspective(800px) rotateY(0deg)', transformOrigin: 'left center' } },\n 'flip-right': { from: { opacity: 0, transform: 'perspective(800px) rotateY(70deg)', transformOrigin: 'right center' }, to: { opacity: 1, transform: 'perspective(800px) rotateY(0deg)', transformOrigin: 'right center' } },\n 'unfold-down': { from: { opacity: 0, transform: 'perspective(800px) rotateX(-90deg)', transformOrigin: 'center top' }, to: { opacity: 1, transform: 'perspective(800px) rotateX(0deg)', transformOrigin: 'center top' } },\n 'unfold-up': { from: { opacity: 0, transform: 'perspective(800px) rotateX(90deg)', transformOrigin: 'center bottom' }, to: { opacity: 1, transform: 'perspective(800px) rotateX(0deg)', transformOrigin: 'center bottom' } },\n 'door-open-left': { from: { transform: 'perspective(800px) rotateY(-100deg)', transformOrigin: 'left center' }, to: { transform: 'perspective(800px) rotateY(0deg)', transformOrigin: 'left center' } },\n 'door-open-right': { from: { transform: 'perspective(800px) rotateY(100deg)', transformOrigin: 'right center' }, to: { transform: 'perspective(800px) rotateY(0deg)', transformOrigin: 'right center' } },\n 'fold-in': { from: { opacity: 0, transform: 'perspective(800px) rotateX(80deg) scaleY(0.4)' }, to: { opacity: 1, transform: 'perspective(800px) rotateX(0deg) scaleY(1)' } },\n 'flip-x-bounce': { from: { opacity: 0, transform: 'perspective(800px) rotateX(90deg)' }, to: { opacity: 1, transform: 'perspective(800px) rotateX(0deg)' }, frames: [{ offset: 0.4, opacity: 1, transform: 'perspective(800px) rotateX(-20deg)' }, { offset: 0.6, transform: 'perspective(800px) rotateX(10deg)' }, { offset: 0.8, transform: 'perspective(800px) rotateX(-5deg)' }] },\n 'flip-y-bounce': { from: { opacity: 0, transform: 'perspective(800px) rotateY(90deg)' }, to: { opacity: 1, transform: 'perspective(800px) rotateY(0deg)' }, frames: [{ offset: 0.4, opacity: 1, transform: 'perspective(800px) rotateY(-20deg)' }, { offset: 0.6, transform: 'perspective(800px) rotateY(10deg)' }, { offset: 0.8, transform: 'perspective(800px) rotateY(-5deg)' }] },\n 'swing-in-top': { from: { opacity: 0, transform: 'perspective(800px) rotateX(-100deg)', transformOrigin: 'center top' }, to: { opacity: 1, transform: 'perspective(800px) rotateX(0deg)', transformOrigin: 'center top' }, frames: [{ offset: 0.6, opacity: 1, transform: 'perspective(800px) rotateX(12deg)' }, { offset: 0.8, transform: 'perspective(800px) rotateX(-5deg)' }] },\n 'swing-in-bottom': { from: { opacity: 0, transform: 'perspective(800px) rotateX(100deg)', transformOrigin: 'center bottom' }, to: { opacity: 1, transform: 'perspective(800px) rotateX(0deg)', transformOrigin: 'center bottom' }, frames: [{ offset: 0.6, opacity: 1, transform: 'perspective(800px) rotateX(-12deg)' }, { offset: 0.8, transform: 'perspective(800px) rotateX(5deg)' }] },\n 'swing-in-left': { from: { opacity: 0, transform: 'perspective(800px) rotateY(100deg)', transformOrigin: 'left center' }, to: { opacity: 1, transform: 'perspective(800px) rotateY(0deg)', transformOrigin: 'left center' }, frames: [{ offset: 0.6, opacity: 1, transform: 'perspective(800px) rotateY(-12deg)' }, { offset: 0.8, transform: 'perspective(800px) rotateY(5deg)' }] },\n 'swing-in-right': { from: { opacity: 0, transform: 'perspective(800px) rotateY(-100deg)', transformOrigin: 'right center' }, to: { opacity: 1, transform: 'perspective(800px) rotateY(0deg)', transformOrigin: 'right center' }, frames: [{ offset: 0.6, opacity: 1, transform: 'perspective(800px) rotateY(12deg)' }, { offset: 0.8, transform: 'perspective(800px) rotateY(-5deg)' }] },\n // Slide\n 'slide-up-spring': { from: { transform: 'translateY(100%)' }, to: { transform: 'translateY(0%)' }, frames: [{ offset: 0.7, transform: 'translateY(-8%)' }] },\n 'slide-down-spring': { from: { transform: 'translateY(-100%)' }, to: { transform: 'translateY(0%)' }, frames: [{ offset: 0.7, transform: 'translateY(8%)' }] },\n 'slide-left-spring': { from: { transform: 'translateX(-100%)' }, to: { transform: 'translateX(0%)' }, frames: [{ offset: 0.7, transform: 'translateX(8%)' }] },\n 'slide-right-spring': { from: { transform: 'translateX(100%)' }, to: { transform: 'translateX(0%)' }, frames: [{ offset: 0.7, transform: 'translateX(-8%)' }] },\n 'slide-up-sm': { from: { transform: 'translateY(30%)' }, to: { transform: 'translateY(0%)' } },\n 'slide-down-sm': { from: { transform: 'translateY(-30%)' }, to: { transform: 'translateY(0%)' } },\n 'back-in-up': { from: { opacity: 0, transform: 'translateY(120px) scale(0.7)' }, to: { opacity: 1, transform: 'translateY(0px) scale(1)' }, frames: [{ offset: 0.7, opacity: 0.8, transform: 'translateY(0px) scale(0.7)' }] },\n 'back-in-down': { from: { opacity: 0, transform: 'translateY(-120px) scale(0.7)' }, to: { opacity: 1, transform: 'translateY(0px) scale(1)' }, frames: [{ offset: 0.7, opacity: 0.8, transform: 'translateY(0px) scale(0.7)' }] },\n 'back-in-left': { from: { opacity: 0, transform: 'translateX(-120px) scale(0.7)' }, to: { opacity: 1, transform: 'translateX(0px) scale(1)' }, frames: [{ offset: 0.7, opacity: 0.8, transform: 'translateX(0px) scale(0.7)' }] },\n 'back-in-right': { from: { opacity: 0, transform: 'translateX(120px) scale(0.7)' }, to: { opacity: 1, transform: 'translateX(0px) scale(1)' }, frames: [{ offset: 0.7, opacity: 0.8, transform: 'translateX(0px) scale(0.7)' }] },\n 'light-speed-in-left': { from: { opacity: 0, transform: 'translateX(-100%) skewX(30deg)' }, to: { opacity: 1, transform: 'translateX(0%) skewX(0deg)' }, frames: [{ offset: 0.6, opacity: 1, transform: 'translateX(0%) skewX(-20deg)' }, { offset: 0.8, transform: 'translateX(0%) skewX(5deg)' }] },\n 'light-speed-in-right': { from: { opacity: 0, transform: 'translateX(100%) skewX(-30deg)' }, to: { opacity: 1, transform: 'translateX(0%) skewX(0deg)' }, frames: [{ offset: 0.6, opacity: 1, transform: 'translateX(0%) skewX(20deg)' }, { offset: 0.8, transform: 'translateX(0%) skewX(-5deg)' }] },\n 'rise-in': { from: { opacity: 0, transform: 'translateY(80px) scale(0.96)' }, to: { opacity: 1, transform: 'translateY(0px) scale(1)' } },\n 'sink-in': { from: { opacity: 0, transform: 'translateY(-80px) scale(1.04)' }, to: { opacity: 1, transform: 'translateY(0px) scale(1)' } },\n 'float-in-up': { from: { opacity: 0, transform: 'translateY(40px) rotate(-3deg)' }, to: { opacity: 1, transform: 'translateY(0px) rotate(0deg)' }, frames: [{ offset: 0.6, opacity: 1, transform: 'translateY(-6px) rotate(1deg)' }] },\n 'float-in-down': { from: { opacity: 0, transform: 'translateY(-40px) rotate(3deg)' }, to: { opacity: 1, transform: 'translateY(0px) rotate(0deg)' }, frames: [{ offset: 0.6, opacity: 1, transform: 'translateY(6px) rotate(-1deg)' }] },\n // Rotate & skew\n 'roll-in-left': { from: { opacity: 0, transform: 'translateX(-120%) rotate(-120deg)' }, to: { opacity: 1, transform: 'translateX(0%) rotate(0deg)' } },\n 'roll-in-right': { from: { opacity: 0, transform: 'translateX(120%) rotate(120deg)' }, to: { opacity: 1, transform: 'translateX(0%) rotate(0deg)' } },\n 'spiral-in': { from: { opacity: 0, transform: 'rotate(-540deg) scale(0)' }, to: { opacity: 1, transform: 'rotate(0deg) scale(1)' } },\n 'spiral-in-reverse': { from: { opacity: 0, transform: 'rotate(540deg) scale(0)' }, to: { opacity: 1, transform: 'rotate(0deg) scale(1)' } },\n 'spin-in': { from: { opacity: 0, transform: 'rotate(-360deg)' }, to: { opacity: 1, transform: 'rotate(0deg)' } },\n 'rotate-in-up-left': { from: { opacity: 0, transform: 'rotate(45deg)', transformOrigin: 'left bottom' }, to: { opacity: 1, transform: 'rotate(0deg)', transformOrigin: 'left bottom' } },\n 'rotate-in-up-right': { from: { opacity: 0, transform: 'rotate(-45deg)', transformOrigin: 'right bottom' }, to: { opacity: 1, transform: 'rotate(0deg)', transformOrigin: 'right bottom' } },\n 'rotate-in-down-left': { from: { opacity: 0, transform: 'rotate(-45deg)', transformOrigin: 'left bottom' }, to: { opacity: 1, transform: 'rotate(0deg)', transformOrigin: 'left bottom' } },\n 'rotate-in-down-right': { from: { opacity: 0, transform: 'rotate(45deg)', transformOrigin: 'right bottom' }, to: { opacity: 1, transform: 'rotate(0deg)', transformOrigin: 'right bottom' } },\n 'skew-in-left': { from: { opacity: 0, transform: 'translateX(-80px) skewX(30deg)' }, to: { opacity: 1, transform: 'translateX(0px) skewX(0deg)' } },\n 'skew-in-y': { from: { opacity: 0, transform: 'translateY(40px) skewY(12deg)' }, to: { opacity: 1, transform: 'translateY(0px) skewY(0deg)' } },\n 'shear-in': { from: { opacity: 0, transform: 'skew(20deg, 10deg)' }, to: { opacity: 1, transform: 'skew(0deg, 0deg)' } },\n 'shear-in-reverse': { from: { opacity: 0, transform: 'skew(-20deg, -10deg)' }, to: { opacity: 1, transform: 'skew(0deg, 0deg)' } },\n 'twist-in': { from: { opacity: 0, transform: 'rotate(-20deg) skewX(10deg) scale(0.8)' }, to: { opacity: 1, transform: 'rotate(0deg) skewX(0deg) scale(1)' } },\n 'tilt-in-left': { from: { opacity: 0, transform: 'translateY(30px) rotate(-8deg)' }, to: { opacity: 1, transform: 'translateY(0px) rotate(0deg)' } },\n 'tilt-in-right': { from: { opacity: 0, transform: 'translateY(30px) rotate(8deg)' }, to: { opacity: 1, transform: 'translateY(0px) rotate(0deg)' } },\n // Blur & mask\n 'blur-in-down': { from: { opacity: 0, filter: 'blur(12px)', transform: 'translateY(-40px)' }, to: { opacity: 1, filter: 'blur(0px)', transform: 'translateY(0px)' } },\n 'blur-in-left': { from: { opacity: 0, filter: 'blur(12px)', transform: 'translateX(-40px)' }, to: { opacity: 1, filter: 'blur(0px)', transform: 'translateX(0px)' } },\n 'blur-in-right': { from: { opacity: 0, filter: 'blur(12px)', transform: 'translateX(40px)' }, to: { opacity: 1, filter: 'blur(0px)', transform: 'translateX(0px)' } },\n 'blur-in-strong': { from: { opacity: 0, filter: 'blur(24px)' }, to: { opacity: 1, filter: 'blur(0px)' } },\n 'blur-in-zoom': { from: { opacity: 0, filter: 'blur(14px)', transform: 'scale(1.2)' }, to: { opacity: 1, filter: 'blur(0px)', transform: 'scale(1)' } },\n 'blur-in-scale': { from: { opacity: 0, filter: 'blur(14px)', transform: 'scale(0.8)' }, to: { opacity: 1, filter: 'blur(0px)', transform: 'scale(1)' } },\n 'blur-in-x': { from: { opacity: 0, filter: 'blur(10px)', transform: 'scaleX(1.3)' }, to: { opacity: 1, filter: 'blur(0px)', transform: 'scaleX(1)' } },\n 'mask-up': { from: { transform: 'translateY(100%)', clipPath: 'inset(0% 0% 100% 0%)' }, to: { transform: 'translateY(0%)', clipPath: 'inset(0% 0% 0% 0%)' } },\n 'mask-down': { from: { transform: 'translateY(-100%)', clipPath: 'inset(100% 0% 0% 0%)' }, to: { transform: 'translateY(0%)', clipPath: 'inset(0% 0% 0% 0%)' } },\n 'mask-left': { from: { transform: 'translateX(100%)', clipPath: 'inset(0% 100% 0% 0%)' }, to: { transform: 'translateX(0%)', clipPath: 'inset(0% 0% 0% 0%)' } },\n 'mask-right': { from: { transform: 'translateX(-100%)', clipPath: 'inset(0% 0% 0% 100%)' }, to: { transform: 'translateX(0%)', clipPath: 'inset(0% 0% 0% 0%)' } },\n 'blur-mask-up': { from: { transform: 'translateY(60%)', clipPath: 'inset(0% 0% 60% 0%)', filter: 'blur(8px)' }, to: { transform: 'translateY(0%)', clipPath: 'inset(0% 0% 0% 0%)', filter: 'blur(0px)' } },\n // Clip reveal\n 'clip-circle-top': { from: { clipPath: 'circle(0% at 50% 0%)' }, to: { clipPath: 'circle(150% at 50% 0%)' } },\n 'clip-circle-bottom': { from: { clipPath: 'circle(0% at 50% 100%)' }, to: { clipPath: 'circle(150% at 50% 100%)' } },\n 'clip-circle-left': { from: { clipPath: 'circle(0% at 0% 50%)' }, to: { clipPath: 'circle(150% at 0% 50%)' } },\n 'clip-circle-right': { from: { clipPath: 'circle(0% at 100% 50%)' }, to: { clipPath: 'circle(150% at 100% 50%)' } },\n 'clip-circle-corner': { from: { clipPath: 'circle(0% at 0% 0%)' }, to: { clipPath: 'circle(150% at 0% 0%)' } },\n 'clip-ellipse': { from: { clipPath: 'ellipse(0% 0% at 50% 50%)' }, to: { clipPath: 'ellipse(75% 75% at 50% 50%)' } },\n 'clip-diamond': { from: { clipPath: 'polygon(50% 50%, 50% 50%, 50% 50%, 50% 50%)' }, to: { clipPath: 'polygon(50% -50%, 150% 50%, 50% 150%, -50% 50%)' } },\n 'clip-split-x': { from: { clipPath: 'inset(0% 50% 0% 50%)' }, to: { clipPath: 'inset(0% 0% 0% 0%)' } },\n 'clip-split-y': { from: { clipPath: 'inset(50% 0% 50% 0%)' }, to: { clipPath: 'inset(0% 0% 0% 0%)' } },\n 'clip-box': { from: { clipPath: 'inset(50% 50% 50% 50%)' }, to: { clipPath: 'inset(0% 0% 0% 0%)' } },\n 'clip-pill': { from: { clipPath: 'inset(35% 35% 35% 35% round 50%)' }, to: { clipPath: 'inset(0% 0% 0% 0% round 0%)' } },\n 'clip-blinds': { from: { clipPath: 'polygon(0% 0%, 100% 0%, 100% 0%, 0% 0%, 0% 25%, 100% 25%, 100% 25%, 0% 25%, 0% 50%, 100% 50%, 100% 50%, 0% 50%, 0% 75%, 100% 75%, 100% 75%, 0% 75%)' }, to: { clipPath: 'polygon(0% 0%, 100% 0%, 100% 25%, 0% 25%, 0% 25%, 100% 25%, 100% 50%, 0% 50%, 0% 50%, 100% 50%, 100% 75%, 0% 75%, 0% 75%, 100% 75%, 100% 100%, 0% 100%)' } },\n 'clip-blinds-x': { from: { clipPath: 'polygon(0% 0%, 0% 100%, 0% 100%, 0% 0%, 25% 0%, 25% 100%, 25% 100%, 25% 0%, 50% 0%, 50% 100%, 50% 100%, 50% 0%, 75% 0%, 75% 100%, 75% 100%, 75% 0%)' }, to: { clipPath: 'polygon(0% 0%, 0% 100%, 25% 100%, 25% 0%, 25% 0%, 25% 100%, 50% 100%, 50% 0%, 50% 0%, 50% 100%, 75% 100%, 75% 0%, 75% 0%, 75% 100%, 100% 100%, 100% 0%)' } },\n 'clip-diagonal': { from: { clipPath: 'polygon(0% 0%, 0% 0%, 0% 0%)' }, to: { clipPath: 'polygon(0% 0%, 200% 0%, 0% 200%)' } },\n 'clip-diagonal-reverse': { from: { clipPath: 'polygon(100% 100%, 100% 100%, 100% 100%)' }, to: { clipPath: 'polygon(100% 100%, -100% 100%, 100% -100%)' } },\n 'clip-slant-right': { from: { clipPath: 'polygon(0% 0%, 0% 0%, -20% 100%, -20% 100%)' }, to: { clipPath: 'polygon(0% 0%, 120% 0%, 100% 100%, -20% 100%)' } },\n 'clip-slant-left': { from: { clipPath: 'polygon(100% 0%, 120% 0%, 120% 100%, 100% 100%)' }, to: { clipPath: 'polygon(-20% 0%, 120% 0%, 120% 100%, 0% 100%)' } },\n // Bounce & elastic\n 'bounce-in': { from: { opacity: 0, transform: 'scale(0.3)' }, to: { opacity: 1, transform: 'scale(1)' }, frames: [{ offset: 0.2, transform: 'scale(1.1)' }, { offset: 0.4, transform: 'scale(0.9)' }, { offset: 0.6, opacity: 1, transform: 'scale(1.03)' }, { offset: 0.8, transform: 'scale(0.97)' }] },\n 'bounce-in-up': { from: { opacity: 0, transform: 'translateY(120px)' }, to: { opacity: 1, transform: 'translateY(0px)' }, frames: [{ offset: 0.6, opacity: 1, transform: 'translateY(-20px)' }, { offset: 0.75, transform: 'translateY(10px)' }, { offset: 0.9, transform: 'translateY(-5px)' }] },\n 'bounce-in-down': { from: { opacity: 0, transform: 'translateY(-120px)' }, to: { opacity: 1, transform: 'translateY(0px)' }, frames: [{ offset: 0.6, opacity: 1, transform: 'translateY(20px)' }, { offset: 0.75, transform: 'translateY(-10px)' }, { offset: 0.9, transform: 'translateY(5px)' }] },\n 'bounce-in-left': { from: { opacity: 0, transform: 'translateX(-120px)' }, to: { opacity: 1, transform: 'translateX(0px)' }, frames: [{ offset: 0.6, opacity: 1, transform: 'translateX(20px)' }, { offset: 0.75, transform: 'translateX(-10px)' }, { offset: 0.9, transform: 'translateX(5px)' }] },\n 'bounce-in-right': { from: { opacity: 0, transform: 'translateX(120px)' }, to: { opacity: 1, transform: 'translateX(0px)' }, frames: [{ offset: 0.6, opacity: 1, transform: 'translateX(-20px)' }, { offset: 0.75, transform: 'translateX(10px)' }, { offset: 0.9, transform: 'translateX(-5px)' }] },\n 'elastic-in': { from: { opacity: 0, transform: 'scale(0)' }, to: { opacity: 1, transform: 'scale(1)' }, frames: [{ offset: 0.4, opacity: 1, transform: 'scale(1.2)' }, { offset: 0.6, transform: 'scale(0.88)' }, { offset: 0.75, transform: 'scale(1.06)' }, { offset: 0.9, transform: 'scale(0.98)' }] },\n 'elastic-in-x': { from: { opacity: 0, transform: 'scaleX(0)' }, to: { opacity: 1, transform: 'scaleX(1)' }, frames: [{ offset: 0.4, opacity: 1, transform: 'scaleX(1.25)' }, { offset: 0.6, transform: 'scaleX(0.85)' }, { offset: 0.8, transform: 'scaleX(1.08)' }] },\n 'rubber-in': { from: { opacity: 0, transform: 'scale(0.4, 0.4)' }, to: { opacity: 1, transform: 'scale(1, 1)' }, frames: [{ offset: 0.3, opacity: 1, transform: 'scale(1.25, 0.75)' }, { offset: 0.4, transform: 'scale(0.75, 1.25)' }, { offset: 0.5, transform: 'scale(1.15, 0.85)' }, { offset: 0.65, transform: 'scale(0.95, 1.05)' }, { offset: 0.75, transform: 'scale(1.05, 0.95)' }] },\n 'jello-in': { from: { opacity: 0, transform: 'skewX(-12.5deg) skewY(-12.5deg)' }, to: { opacity: 1, transform: 'skewX(0deg) skewY(0deg)' }, frames: [{ offset: 0.22, opacity: 1, transform: 'skewX(6.25deg) skewY(6.25deg)' }, { offset: 0.33, transform: 'skewX(-3.125deg) skewY(-3.125deg)' }, { offset: 0.44, transform: 'skewX(1.5625deg) skewY(1.5625deg)' }, { offset: 0.55, transform: 'skewX(-0.78deg) skewY(-0.78deg)' }, { offset: 0.66, transform: 'skewX(0.39deg) skewY(0.39deg)' }] },\n 'wobble-in': { from: { opacity: 0, transform: 'translateX(-25%) rotate(-5deg)' }, to: { opacity: 1, transform: 'translateX(0%) rotate(0deg)' }, frames: [{ offset: 0.3, opacity: 1, transform: 'translateX(20%) rotate(3deg)' }, { offset: 0.45, transform: 'translateX(-15%) rotate(-3deg)' }, { offset: 0.6, transform: 'translateX(10%) rotate(2deg)' }, { offset: 0.75, transform: 'translateX(-5%) rotate(-1deg)' }] },\n 'tada-in': { from: { opacity: 0, transform: 'scale(0.9) rotate(-3deg)' }, to: { opacity: 1, transform: 'scale(1) rotate(0deg)' }, frames: [{ offset: 0.3, opacity: 1, transform: 'scale(1.1) rotate(3deg)' }, { offset: 0.4, transform: 'scale(1.1) rotate(-3deg)' }, { offset: 0.5, transform: 'scale(1.1) rotate(3deg)' }, { offset: 0.6, transform: 'scale(1.1) rotate(-3deg)' }, { offset: 0.7, transform: 'scale(1.1) rotate(3deg)' }] },\n 'heartbeat-in': { from: { opacity: 0, transform: 'scale(0.6)' }, to: { opacity: 1, transform: 'scale(1)' }, frames: [{ offset: 0.25, opacity: 1, transform: 'scale(1.15)' }, { offset: 0.4, transform: 'scale(0.95)' }, { offset: 0.6, transform: 'scale(1.1)' }, { offset: 0.8, transform: 'scale(0.98)' }] },\n 'drop-in': { from: { opacity: 0, transform: 'translateY(-150px)' }, to: { opacity: 1, transform: 'translateY(0px)' }, frames: [{ offset: 0.4, opacity: 1, transform: 'translateY(0px)' }, { offset: 0.55, transform: 'translateY(-30px)' }, { offset: 0.7, transform: 'translateY(0px)' }, { offset: 0.82, transform: 'translateY(-8px)' }, { offset: 0.92, transform: 'translateY(0px)' }] },\n 'pop-in': { from: { opacity: 0, transform: 'scale(0.5)' }, to: { opacity: 1, transform: 'scale(1)' }, frames: [{ offset: 0.6, opacity: 1, transform: 'scale(1.12)' }] },\n 'squash-in': { from: { opacity: 0, transform: 'translateY(-80px) scale(0.8, 1.2)' }, to: { opacity: 1, transform: 'translateY(0px) scale(1, 1)' }, frames: [{ offset: 0.5, opacity: 1, transform: 'translateY(0px) scale(1.25, 0.75)' }, { offset: 0.7, transform: 'translateY(-10px) scale(0.95, 1.05)' }, { offset: 0.85, transform: 'translateY(0px) scale(1.03, 0.97)' }] },\n 'shake-in': { from: { opacity: 0, transform: 'translateX(-30px)' }, to: { opacity: 1, transform: 'translateX(0px)' }, frames: [{ offset: 0.2, opacity: 1, transform: 'translateX(20px)' }, { offset: 0.4, transform: 'translateX(-14px)' }, { offset: 0.6, transform: 'translateX(8px)' }, { offset: 0.8, transform: 'translateX(-4px)' }] },\n 'swing-in': { from: { opacity: 0, transform: 'rotate(-30deg)', transformOrigin: 'center top' }, to: { opacity: 1, transform: 'rotate(0deg)', transformOrigin: 'center top' }, frames: [{ offset: 0.4, opacity: 1, transform: 'rotate(15deg)' }, { offset: 0.6, transform: 'rotate(-10deg)' }, { offset: 0.8, transform: 'rotate(5deg)' }] },\n // Color & light\n 'brightness-in': { from: { opacity: 0, filter: 'brightness(3)' }, to: { opacity: 1, filter: 'brightness(1)' } },\n 'darken-in': { from: { filter: 'brightness(0)' }, to: { filter: 'brightness(1)' } },\n 'color-in': { from: { filter: 'grayscale(1)' }, to: { filter: 'grayscale(0)' } },\n 'saturate-in': { from: { opacity: 0, filter: 'saturate(3)' }, to: { opacity: 1, filter: 'saturate(1)' } },\n 'hue-in': { from: { opacity: 0, filter: 'hue-rotate(-180deg)' }, to: { opacity: 1, filter: 'hue-rotate(0deg)' } },\n 'sepia-in': { from: { filter: 'sepia(1)' }, to: { filter: 'sepia(0)' } },\n 'invert-in': { from: { opacity: 0, filter: 'invert(1)' }, to: { opacity: 1, filter: 'invert(0)' } },\n 'contrast-in': { from: { opacity: 0, filter: 'contrast(0)' }, to: { opacity: 1, filter: 'contrast(1)' } },\n 'exposure-in': { from: { opacity: 0, filter: 'brightness(4) contrast(0.5)' }, to: { opacity: 1, filter: 'brightness(1) contrast(1)' } },\n 'vintage-in': { from: { opacity: 0, filter: 'sepia(1) contrast(1.4) blur(2px)' }, to: { opacity: 1, filter: 'sepia(0) contrast(1) blur(0px)' } },\n 'blur-bright-in': { from: { opacity: 0, filter: 'blur(8px) brightness(2)' }, to: { opacity: 1, filter: 'blur(0px) brightness(1)' } },\n 'shadow-lift': { from: { opacity: 0, transform: 'translateY(16px) scale(0.98)', filter: 'drop-shadow(0px 0px 0px rgba(0, 0, 0, 0))' }, to: { opacity: 1, transform: 'translateY(0px) scale(1)', filter: 'drop-shadow(0px 18px 22px rgba(0, 0, 0, 0.35))' } },\n 'neon-glow-in': { from: { opacity: 0, filter: 'brightness(0.6) drop-shadow(0px 0px 0px rgba(124, 92, 255, 0))' }, to: { opacity: 1, filter: 'brightness(1) drop-shadow(0px 0px 10px rgba(124, 92, 255, 0.6))' }, frames: [{ offset: 0.5, opacity: 1, filter: 'brightness(1.5) drop-shadow(0px 0px 22px rgba(124, 92, 255, 0.95))' }] },\n 'glow-in': { from: { opacity: 0, filter: 'brightness(2) drop-shadow(0px 0px 18px rgba(255, 255, 255, 0.9))' }, to: { opacity: 1, filter: 'brightness(1) drop-shadow(0px 0px 0px rgba(255, 255, 255, 0))' } },\n // Depth & perspective\n 'perspective-in-up': { from: { opacity: 0, transform: 'perspective(800px) translateY(60px) rotateX(30deg)' }, to: { opacity: 1, transform: 'perspective(800px) translateY(0px) rotateX(0deg)' } },\n 'perspective-in-down': { from: { opacity: 0, transform: 'perspective(800px) translateY(-60px) rotateX(-30deg)' }, to: { opacity: 1, transform: 'perspective(800px) translateY(0px) rotateX(0deg)' } },\n 'perspective-in-left': { from: { opacity: 0, transform: 'perspective(800px) translateX(-60px) rotateY(-30deg)' }, to: { opacity: 1, transform: 'perspective(800px) translateX(0px) rotateY(0deg)' } },\n 'perspective-in-right': { from: { opacity: 0, transform: 'perspective(800px) translateX(60px) rotateY(30deg)' }, to: { opacity: 1, transform: 'perspective(800px) translateX(0px) rotateY(0deg)' } },\n 'depth-push': { from: { opacity: 0, transform: 'perspective(800px) translateZ(300px)' }, to: { opacity: 1, transform: 'perspective(800px) translateZ(0px)' } },\n 'depth-pull': { from: { opacity: 0, transform: 'perspective(800px) translateZ(-400px)' }, to: { opacity: 1, transform: 'perspective(800px) translateZ(0px)' } },\n 'depth-in-up': { from: { opacity: 0, transform: 'perspective(800px) translateY(80px) translateZ(-300px)' }, to: { opacity: 1, transform: 'perspective(800px) translateY(0px) translateZ(0px)' } },\n 'swoop-in-left': { from: { opacity: 0, transform: 'perspective(800px) translateX(-100px) translateZ(-200px) rotateY(60deg)' }, to: { opacity: 1, transform: 'perspective(800px) translateX(0px) translateZ(0px) rotateY(0deg)' } },\n 'swoop-in-right': { from: { opacity: 0, transform: 'perspective(800px) translateX(100px) translateZ(-200px) rotateY(-60deg)' }, to: { opacity: 1, transform: 'perspective(800px) translateX(0px) translateZ(0px) rotateY(0deg)' } },\n 'card-tilt-in': { from: { opacity: 0, transform: 'perspective(800px) rotateX(20deg) rotateY(-20deg) scale(0.9)' }, to: { opacity: 1, transform: 'perspective(800px) rotateX(0deg) rotateY(0deg) scale(1)' } },\n // Glitch & special\n 'glitch-in': { from: { opacity: 0, transform: 'translate(-12px, 0px) skewX(0deg)', clipPath: 'inset(40% 0% 45% 0%)' }, to: { opacity: 1, transform: 'translate(0px, 0px) skewX(0deg)', clipPath: 'inset(0% 0% 0% 0%)' }, frames: [{ offset: 0.15, opacity: 1, transform: 'translate(10px, 0px) skewX(-12deg)', clipPath: 'inset(10% 0% 70% 0%)' }, { offset: 0.3, transform: 'translate(-6px, 0px) skewX(8deg)', clipPath: 'inset(60% 0% 10% 0%)' }, { offset: 0.45, transform: 'translate(4px, 0px) skewX(0deg)', clipPath: 'inset(20% 0% 35% 0%)' }, { offset: 0.6, transform: 'translate(-2px, 0px) skewX(-4deg)', clipPath: 'inset(0% 0% 0% 0%)' }] },\n 'glitch-in-color': { from: { opacity: 0, transform: 'translate(-10px, 4px)', filter: 'hue-rotate(90deg) saturate(3)' }, to: { opacity: 1, transform: 'translate(0px, 0px)', filter: 'hue-rotate(0deg) saturate(1)' }, frames: [{ offset: 0.2, opacity: 1, transform: 'translate(8px, -3px)', filter: 'hue-rotate(-60deg) saturate(2.5)' }, { offset: 0.4, transform: 'translate(-5px, 2px)', filter: 'hue-rotate(40deg) saturate(2)' }, { offset: 0.6, transform: 'translate(3px, 0px)', filter: 'hue-rotate(-20deg) saturate(1.5)' }] },\n 'typewriter': { from: { clipPath: 'inset(0% 100% 0% 0%)', easing: 'steps(16, end)' }, to: { clipPath: 'inset(0% 0% 0% 0%)' } },\n 'typewriter-lines': { from: { clipPath: 'inset(0% 0% 100% 0%)', easing: 'steps(5, end)' }, to: { clipPath: 'inset(0% 0% 0% 0%)' } },\n 'hinge-in': { from: { opacity: 0, transform: 'translateY(60px) rotate(60deg)', transformOrigin: 'left top' }, to: { opacity: 1, transform: 'translateY(0px) rotate(0deg)', transformOrigin: 'left top' }, frames: [{ offset: 0.4, opacity: 1, transform: 'translateY(0px) rotate(-12deg)' }, { offset: 0.6, transform: 'translateY(0px) rotate(8deg)' }, { offset: 0.8, transform: 'translateY(0px) rotate(-4deg)' }] },\n 'flicker-in': { from: { opacity: 0 }, to: { opacity: 1 }, frames: [{ offset: 0.2, opacity: 0.7 }, { offset: 0.32, opacity: 0.2 }, { offset: 0.55, opacity: 0.9 }, { offset: 0.68, opacity: 0.45 }] },\n 'scan-in': { from: { clipPath: 'inset(0% 0% 100% 0%)', filter: 'brightness(2.5)' }, to: { clipPath: 'inset(0% 0% 0% 0%)', filter: 'brightness(1)' }, frames: [{ offset: 0.7, clipPath: 'inset(0% 0% 0% 0%)', filter: 'brightness(1.6)' }] },\n 'materialize': { from: { opacity: 0, filter: 'blur(10px) brightness(2.2)', transform: 'scale(1.08)' }, to: { opacity: 1, filter: 'blur(0px) brightness(1)', transform: 'scale(1)' } },\n 'teleport-in': { from: { opacity: 0, transform: 'scale(0.02, 2)', filter: 'brightness(3)' }, to: { opacity: 1, transform: 'scale(1, 1)', filter: 'brightness(1)' }, frames: [{ offset: 0.5, opacity: 1, transform: 'scale(1.2, 0.8)', filter: 'brightness(1.6)' }, { offset: 0.75, transform: 'scale(0.95, 1.05)', filter: 'brightness(1.1)' }] },\n // Stagger-ready\n 'stagger-fade-up': { from: { opacity: 0, transform: 'translateY(12px)' }, to: { opacity: 1, transform: 'translateY(0px)' } },\n 'stagger-pop': { from: { opacity: 0, transform: 'scale(0.85)' }, to: { opacity: 1, transform: 'scale(1)' } },\n 'stagger-rise': { from: { opacity: 0, transform: 'translateY(24px) scale(0.98)' }, to: { opacity: 1, transform: 'translateY(0px) scale(1)' } },\n 'stagger-slide': { from: { opacity: 0, transform: 'translateX(24px)' }, to: { opacity: 1, transform: 'translateX(0px)' } },\n 'stagger-flip': { from: { opacity: 0, transform: 'perspective(800px) rotateX(-50deg)', transformOrigin: 'center top' }, to: { opacity: 1, transform: 'perspective(800px) rotateX(0deg)', transformOrigin: 'center top' } },\n 'stagger-blur': { from: { opacity: 0, filter: 'blur(6px)', transform: 'translateY(8px)' }, to: { opacity: 1, filter: 'blur(0px)', transform: 'translateY(0px)' } },\n 'stagger-zoom': { from: { opacity: 0, transform: 'scale(1.15)' }, to: { opacity: 1, transform: 'scale(1)' } },\n 'stagger-drop': { from: { opacity: 0, transform: 'translateY(-16px) rotate(-3deg)' }, to: { opacity: 1, transform: 'translateY(0px) rotate(0deg)' } },\n // Scroll-linked\n 'scrub-parallax-up': { from: { transform: 'translateY(80px)' }, to: { transform: 'translateY(-80px)' } },\n 'scrub-parallax-down': { from: { transform: 'translateY(-80px)' }, to: { transform: 'translateY(80px)' } },\n 'scrub-rotate': { from: { transform: 'rotate(-25deg)' }, to: { transform: 'rotate(25deg)' } },\n 'scrub-spin': { from: { transform: 'rotate(0deg)' }, to: { transform: 'rotate(360deg)' } },\n 'scrub-scale': { from: { transform: 'scale(0.7)' }, to: { transform: 'scale(1.1)' } },\n 'scrub-shrink': { from: { transform: 'scale(1.15)' }, to: { transform: 'scale(0.85)' } },\n 'scrub-pan-left': { from: { transform: 'translateX(30%)' }, to: { transform: 'translateX(-30%)' } },\n 'scrub-pan-right': { from: { transform: 'translateX(-30%)' }, to: { transform: 'translateX(30%)' } },\n 'scrub-tilt': { from: { transform: 'perspective(800px) rotateX(25deg)' }, to: { transform: 'perspective(800px) rotateX(-25deg)' } },\n 'scrub-fade-through': { from: { opacity: 0 }, to: { opacity: 0 }, frames: [{ offset: 0.3, opacity: 1 }, { offset: 0.7, opacity: 1 }] },\n 'scrub-blur-through': { from: { filter: 'blur(8px)' }, to: { filter: 'blur(8px)' }, frames: [{ offset: 0.4, filter: 'blur(0px)' }, { offset: 0.6, filter: 'blur(0px)' }] },\n 'scrub-reveal-x': { from: { clipPath: 'inset(0% 100% 0% 0%)' }, to: { clipPath: 'inset(0% 0% 0% 0%)' } },\n};\n\n/** Extended preset names by category (the Animation Store filters). */\nexport const EXTENDED_PRESET_CATEGORIES: Record<string, ExtendedPreset[]> = {\n fade: ['fade-in-up-sm', 'fade-in-down-sm', 'fade-in-left-sm', 'fade-in-right-sm', 'fade-in-up-lg', 'fade-in-down-lg', 'fade-in-left-lg', 'fade-in-right-lg', 'fade-in-up-left', 'fade-in-up-right', 'fade-in-down-left', 'fade-in-down-right', 'fade-in-scale', 'fade-in-half'],\n zoom: ['zoom-in-up', 'zoom-in-down', 'zoom-in-left', 'zoom-in-right', 'zoom-out-up', 'zoom-out-down', 'zoom-out-left', 'zoom-out-right', 'zoom-in-big', 'zoom-out-big', 'zoom-bounce', 'zoom-in-rotate', 'scale-x-left', 'scale-x-right', 'scale-y-top', 'scale-y-bottom', 'stretch-x', 'stretch-y'],\n flip: ['flip-x-reverse', 'flip-y-reverse', 'flip-y-full', 'flip-diagonal', 'flip-diagonal-reverse', 'flip-left', 'flip-right', 'unfold-down', 'unfold-up', 'door-open-left', 'door-open-right', 'fold-in', 'flip-x-bounce', 'flip-y-bounce', 'swing-in-top', 'swing-in-bottom', 'swing-in-left', 'swing-in-right'],\n slide: ['slide-up-spring', 'slide-down-spring', 'slide-left-spring', 'slide-right-spring', 'slide-up-sm', 'slide-down-sm', 'back-in-up', 'back-in-down', 'back-in-left', 'back-in-right', 'light-speed-in-left', 'light-speed-in-right', 'rise-in', 'sink-in', 'float-in-up', 'float-in-down'],\n rotate: ['roll-in-left', 'roll-in-right', 'spiral-in', 'spiral-in-reverse', 'spin-in', 'rotate-in-up-left', 'rotate-in-up-right', 'rotate-in-down-left', 'rotate-in-down-right', 'skew-in-left', 'skew-in-y', 'shear-in', 'shear-in-reverse', 'twist-in', 'tilt-in-left', 'tilt-in-right'],\n blur: ['blur-in-down', 'blur-in-left', 'blur-in-right', 'blur-in-strong', 'blur-in-zoom', 'blur-in-scale', 'blur-in-x', 'mask-up', 'mask-down', 'mask-left', 'mask-right', 'blur-mask-up'],\n clip: ['clip-circle-top', 'clip-circle-bottom', 'clip-circle-left', 'clip-circle-right', 'clip-circle-corner', 'clip-ellipse', 'clip-diamond', 'clip-split-x', 'clip-split-y', 'clip-box', 'clip-pill', 'clip-blinds', 'clip-blinds-x', 'clip-diagonal', 'clip-diagonal-reverse', 'clip-slant-right', 'clip-slant-left'],\n elastic: ['bounce-in', 'bounce-in-up', 'bounce-in-down', 'bounce-in-left', 'bounce-in-right', 'elastic-in', 'elastic-in-x', 'rubber-in', 'jello-in', 'wobble-in', 'tada-in', 'heartbeat-in', 'drop-in', 'pop-in', 'squash-in', 'shake-in', 'swing-in'],\n light: ['brightness-in', 'darken-in', 'color-in', 'saturate-in', 'hue-in', 'sepia-in', 'invert-in', 'contrast-in', 'exposure-in', 'vintage-in', 'blur-bright-in', 'shadow-lift', 'neon-glow-in', 'glow-in'],\n depth: ['perspective-in-up', 'perspective-in-down', 'perspective-in-left', 'perspective-in-right', 'depth-push', 'depth-pull', 'depth-in-up', 'swoop-in-left', 'swoop-in-right', 'card-tilt-in'],\n special: ['glitch-in', 'glitch-in-color', 'typewriter', 'typewriter-lines', 'hinge-in', 'flicker-in', 'scan-in', 'materialize', 'teleport-in'],\n stagger: ['stagger-fade-up', 'stagger-pop', 'stagger-rise', 'stagger-slide', 'stagger-flip', 'stagger-blur', 'stagger-zoom', 'stagger-drop'],\n scrub: ['scrub-parallax-up', 'scrub-parallax-down', 'scrub-rotate', 'scrub-spin', 'scrub-scale', 'scrub-shrink', 'scrub-pan-left', 'scrub-pan-right', 'scrub-tilt', 'scrub-fade-through', 'scrub-blur-through', 'scrub-reveal-x'],\n};\n","/**\n * dist/presets-extended.umd.js — `<script>` build of the extended presets.\n * Adds them to the page-wide preset table shared by every copy of the library\n * (load it before or after dist/index.umd.js). Global: `ScrollAnimatePresets`.\n */\nimport { EXTENDED_PRESETS, EXTENDED_PRESET_CATEGORIES } from './extended-presets-data';\n\nconst g = globalThis as any;\nconst key = Symbol.for('use-scroll-animate.presets');\ng[key] = Object.assign(g[key] || {}, EXTENDED_PRESETS);\n\nexport { EXTENDED_PRESETS, EXTENDED_PRESET_CATEGORIES };\n"],"names":["EXTENDED_PRESETS","from","opacity","transform","to","frames","offset","transformOrigin","filter","clipPath","typewriter","easing","materialize","g","globalThis","key","Symbol","for","Object","assign","fade","zoom","flip","slide","rotate","blur","clip","elastic","light","depth","special","stagger","scrub"],"mappings":"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"}
|
package/dist/react.cjs
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var core = require('./chunks/core-
|
|
4
|
-
var stagger = require('./chunks/stagger-
|
|
3
|
+
var core = require('./chunks/core-BYLtO0Po.cjs');
|
|
4
|
+
var stagger = require('./chunks/stagger-CvhYlKrF.cjs');
|
|
5
|
+
require('./chunks/presets-D2ksQNzJ.cjs');
|
|
5
6
|
|
|
6
7
|
/**
|
|
7
8
|
* use-scroll-animate - React Integration
|
package/dist/react.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"react.cjs","sources":["../src/react.ts"],"sourcesContent":["/**\n * use-scroll-animate - React Integration\n * Provides useScrollAnimate and useScrollStagger hooks for React applications.\n * `useScrollStagger({ observeChildren: true })` also animates children added later.\n *\n * Both hooks are thin wrappers around the core engine, so they share its\n * behaviour: `once`, `offset`, custom easing functions, progress,\n * `prefers-reduced-motion` support, and proper cleanup on unmount.\n */\n\nimport type { AnimateOptions, ScrollAnimateInstance } from './types';\nimport { createScrollAnimate } from './core';\nimport { staggerChildren, type StaggerOptions } from './stagger';\n\ntype ReactRef<T> = { current: T | null };\n\nconst CALLBACKS = ['onStart', 'onComplete', 'onEnter', 'onLeave', 'onProgress'] as const;\n\n/**\n * Wrap the callbacks that exist at mount so they always call the latest\n * version from the most recent render (avoids stale closures without\n * re-creating observers on every render).\n * @internal\n */\nexport function withLatestCallbacks(latest: ReactRef<AnimateOptions>): AnimateOptions {\n const initial = latest.current || {};\n const opts: AnimateOptions = { ...initial };\n CALLBACKS.forEach((name) => {\n if (typeof initial[name] === 'function') {\n (opts as any)[name] = (...args: unknown[]) => (latest.current?.[name] as any)?.(...args);\n }\n });\n return opts;\n}\n\nexport function createReactHooks(React: {\n useRef: <T>(initial: T | null) => ReactRef<T>;\n useEffect: (effect: () => (() => void) | void, deps?: unknown[]) => void;\n}) {\n // Created lazily on the client so importing on the server is side-effect free.\n let instance: ScrollAnimateInstance | null = null;\n const getInstance = () => instance || (instance = createScrollAnimate());\n\n function useScrollAnimate(options: AnimateOptions = {}) {\n const ref = React.useRef<Element>(null);\n const optionsRef = React.useRef<AnimateOptions>(options);\n optionsRef.current = options;\n\n React.useEffect(() => {\n const el = ref.current;\n if (!el) return;\n const sa = getInstance();\n sa.observe(el, withLatestCallbacks(optionsRef));\n return () => sa.unobserve(el);\n }, []);\n\n return ref;\n }\n\n function useScrollStagger(options: StaggerOptions = {}) {\n const ref = React.useRef<Element>(null);\n const optionsRef = React.useRef<AnimateOptions>(options);\n optionsRef.current = options;\n\n React.useEffect(() => {\n const container = ref.current;\n if (!container) return;\n return staggerChildren(container, withLatestCallbacks(optionsRef) as StaggerOptions, getInstance());\n }, []);\n\n return ref;\n }\n\n return { useScrollAnimate, useScrollStagger };\n}\n"],"names":["createScrollAnimate","staggerChildren"],"mappings":"
|
|
1
|
+
{"version":3,"file":"react.cjs","sources":["../src/react.ts"],"sourcesContent":["/**\n * use-scroll-animate - React Integration\n * Provides useScrollAnimate and useScrollStagger hooks for React applications.\n * `useScrollStagger({ observeChildren: true })` also animates children added later.\n *\n * Both hooks are thin wrappers around the core engine, so they share its\n * behaviour: `once`, `offset`, custom easing functions, progress,\n * `prefers-reduced-motion` support, and proper cleanup on unmount.\n */\n\nimport type { AnimateOptions, ScrollAnimateInstance } from './types';\nimport { createScrollAnimate } from './core';\nimport { staggerChildren, type StaggerOptions } from './stagger';\n\ntype ReactRef<T> = { current: T | null };\n\nconst CALLBACKS = ['onStart', 'onComplete', 'onEnter', 'onLeave', 'onProgress'] as const;\n\n/**\n * Wrap the callbacks that exist at mount so they always call the latest\n * version from the most recent render (avoids stale closures without\n * re-creating observers on every render).\n * @internal\n */\nexport function withLatestCallbacks(latest: ReactRef<AnimateOptions>): AnimateOptions {\n const initial = latest.current || {};\n const opts: AnimateOptions = { ...initial };\n CALLBACKS.forEach((name) => {\n if (typeof initial[name] === 'function') {\n (opts as any)[name] = (...args: unknown[]) => (latest.current?.[name] as any)?.(...args);\n }\n });\n return opts;\n}\n\nexport function createReactHooks(React: {\n useRef: <T>(initial: T | null) => ReactRef<T>;\n useEffect: (effect: () => (() => void) | void, deps?: unknown[]) => void;\n}) {\n // Created lazily on the client so importing on the server is side-effect free.\n let instance: ScrollAnimateInstance | null = null;\n const getInstance = () => instance || (instance = createScrollAnimate());\n\n function useScrollAnimate(options: AnimateOptions = {}) {\n const ref = React.useRef<Element>(null);\n const optionsRef = React.useRef<AnimateOptions>(options);\n optionsRef.current = options;\n\n React.useEffect(() => {\n const el = ref.current;\n if (!el) return;\n const sa = getInstance();\n sa.observe(el, withLatestCallbacks(optionsRef));\n return () => sa.unobserve(el);\n }, []);\n\n return ref;\n }\n\n function useScrollStagger(options: StaggerOptions = {}) {\n const ref = React.useRef<Element>(null);\n const optionsRef = React.useRef<AnimateOptions>(options);\n optionsRef.current = options;\n\n React.useEffect(() => {\n const container = ref.current;\n if (!container) return;\n return staggerChildren(container, withLatestCallbacks(optionsRef) as StaggerOptions, getInstance());\n }, []);\n\n return ref;\n }\n\n return { useScrollAnimate, useScrollStagger };\n}\n"],"names":["createScrollAnimate","staggerChildren"],"mappings":";;;;;;AAAA;;;;;;;;AAQG;AAQH,MAAM,SAAS,GAAG,CAAC,SAAS,EAAE,YAAY,EAAE,SAAS,EAAE,SAAS,EAAE,YAAY,CAAU;AAExF;;;;;AAKG;AACG,SAAU,mBAAmB,CAAC,MAAgC,EAAA;AAClE,IAAA,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,IAAI,EAAE;AACpC,IAAA,MAAM,IAAI,GAAmB,EAAE,GAAG,OAAO,EAAE;AAC3C,IAAA,SAAS,CAAC,OAAO,CAAC,CAAC,IAAI,KAAI;QACzB,IAAI,OAAO,OAAO,CAAC,IAAI,CAAC,KAAK,UAAU,EAAE;YACtC,IAAY,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,IAAe,KAAM,MAAM,CAAC,OAAO,GAAG,IAAI,CAAS,GAAG,GAAG,IAAI,CAAC;QAC1F;AACF,IAAA,CAAC,CAAC;AACF,IAAA,OAAO,IAAI;AACb;AAEM,SAAU,gBAAgB,CAAC,KAGhC,EAAA;;IAEC,IAAI,QAAQ,GAAiC,IAAI;AACjD,IAAA,MAAM,WAAW,GAAG,MAAM,QAAQ,KAAK,QAAQ,GAAGA,wBAAmB,EAAE,CAAC;IAExE,SAAS,gBAAgB,CAAC,OAAA,GAA0B,EAAE,EAAA;QACpD,MAAM,GAAG,GAAG,KAAK,CAAC,MAAM,CAAU,IAAI,CAAC;QACvC,MAAM,UAAU,GAAG,KAAK,CAAC,MAAM,CAAiB,OAAO,CAAC;AACxD,QAAA,UAAU,CAAC,OAAO,GAAG,OAAO;AAE5B,QAAA,KAAK,CAAC,SAAS,CAAC,MAAK;AACnB,YAAA,MAAM,EAAE,GAAG,GAAG,CAAC,OAAO;AACtB,YAAA,IAAI,CAAC,EAAE;gBAAE;AACT,YAAA,MAAM,EAAE,GAAG,WAAW,EAAE;YACxB,EAAE,CAAC,OAAO,CAAC,EAAE,EAAE,mBAAmB,CAAC,UAAU,CAAC,CAAC;YAC/C,OAAO,MAAM,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC;QAC/B,CAAC,EAAE,EAAE,CAAC;AAEN,QAAA,OAAO,GAAG;IACZ;IAEA,SAAS,gBAAgB,CAAC,OAAA,GAA0B,EAAE,EAAA;QACpD,MAAM,GAAG,GAAG,KAAK,CAAC,MAAM,CAAU,IAAI,CAAC;QACvC,MAAM,UAAU,GAAG,KAAK,CAAC,MAAM,CAAiB,OAAO,CAAC;AACxD,QAAA,UAAU,CAAC,OAAO,GAAG,OAAO;AAE5B,QAAA,KAAK,CAAC,SAAS,CAAC,MAAK;AACnB,YAAA,MAAM,SAAS,GAAG,GAAG,CAAC,OAAO;AAC7B,YAAA,IAAI,CAAC,SAAS;gBAAE;AAChB,YAAA,OAAOC,uBAAe,CAAC,SAAS,EAAE,mBAAmB,CAAC,UAAU,CAAmB,EAAE,WAAW,EAAE,CAAC;QACrG,CAAC,EAAE,EAAE,CAAC;AAEN,QAAA,OAAO,GAAG;IACZ;AAEA,IAAA,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE;AAC/C;;;;;"}
|
package/dist/react.d.cts
CHANGED
|
@@ -2,8 +2,14 @@
|
|
|
2
2
|
* use-scroll-animate - Core Type Definitions
|
|
3
3
|
* A lightweight, high-performance scroll animation library
|
|
4
4
|
*/
|
|
5
|
-
/**
|
|
6
|
-
type
|
|
5
|
+
/** The 33 core presets (always available in `PRESETS`). */
|
|
6
|
+
type CorePreset = 'fade-in' | 'fade-in-up' | 'fade-in-down' | 'fade-in-left' | 'fade-in-right' | 'zoom-in' | 'zoom-out' | 'flip-x' | 'flip-y' | 'slide-up' | 'slide-down' | 'slide-left' | 'slide-right' | 'bounce' | 'rotate-in' | 'blur-in' | 'skew-in' | 'scale-x' | 'scale-y' | 'shimmer' | 'pulse' | 'swing' | 'scale-up' | 'blur-in-up' | 'flip-up' | 'flip-down' | 'rotate-left' | 'rotate-right' | 'clip-up' | 'clip-down' | 'clip-left' | 'clip-right' | 'clip-circle';
|
|
7
|
+
/**
|
|
8
|
+
* Every built-in preset name: the core set plus the 6.1 extended set, which is
|
|
9
|
+
* available once `use-scroll-animate/presets/extended` is loaded (or after
|
|
10
|
+
* `registerPresets(EXTENDED_PRESETS)`).
|
|
11
|
+
*/
|
|
12
|
+
type AnimationPreset = CorePreset | ExtendedPreset;
|
|
7
13
|
/**
|
|
8
14
|
* How `onProgress` / `progressVar` progress is measured.
|
|
9
15
|
* - `'ratio'` (default): the element's visible ratio (IntersectionObserver `intersectionRatio`).
|
|
@@ -22,16 +28,24 @@ type ProgressMode = 'ratio' | 'scroll';
|
|
|
22
28
|
* since those only mean something for a time-based animation.
|
|
23
29
|
*/
|
|
24
30
|
type ScrollEngine = 'auto' | 'js' | 'css';
|
|
31
|
+
/** The 6.1 extended presets (`use-scroll-animate/presets/extended`). */
|
|
32
|
+
type ExtendedPreset = 'fade-in-up-sm' | 'fade-in-down-sm' | 'fade-in-left-sm' | 'fade-in-right-sm' | 'fade-in-up-lg' | 'fade-in-down-lg' | 'fade-in-left-lg' | 'fade-in-right-lg' | 'fade-in-up-left' | 'fade-in-up-right' | 'fade-in-down-left' | 'fade-in-down-right' | 'fade-in-scale' | 'fade-in-half' | 'zoom-in-up' | 'zoom-in-down' | 'zoom-in-left' | 'zoom-in-right' | 'zoom-out-up' | 'zoom-out-down' | 'zoom-out-left' | 'zoom-out-right' | 'zoom-in-big' | 'zoom-out-big' | 'zoom-bounce' | 'zoom-in-rotate' | 'scale-x-left' | 'scale-x-right' | 'scale-y-top' | 'scale-y-bottom' | 'stretch-x' | 'stretch-y' | 'flip-x-reverse' | 'flip-y-reverse' | 'flip-y-full' | 'flip-diagonal' | 'flip-diagonal-reverse' | 'flip-left' | 'flip-right' | 'unfold-down' | 'unfold-up' | 'door-open-left' | 'door-open-right' | 'fold-in' | 'flip-x-bounce' | 'flip-y-bounce' | 'swing-in-top' | 'swing-in-bottom' | 'swing-in-left' | 'swing-in-right' | 'slide-up-spring' | 'slide-down-spring' | 'slide-left-spring' | 'slide-right-spring' | 'slide-up-sm' | 'slide-down-sm' | 'back-in-up' | 'back-in-down' | 'back-in-left' | 'back-in-right' | 'light-speed-in-left' | 'light-speed-in-right' | 'rise-in' | 'sink-in' | 'float-in-up' | 'float-in-down' | 'roll-in-left' | 'roll-in-right' | 'spiral-in' | 'spiral-in-reverse' | 'spin-in' | 'rotate-in-up-left' | 'rotate-in-up-right' | 'rotate-in-down-left' | 'rotate-in-down-right' | 'skew-in-left' | 'skew-in-y' | 'shear-in' | 'shear-in-reverse' | 'twist-in' | 'tilt-in-left' | 'tilt-in-right' | 'blur-in-down' | 'blur-in-left' | 'blur-in-right' | 'blur-in-strong' | 'blur-in-zoom' | 'blur-in-scale' | 'blur-in-x' | 'mask-up' | 'mask-down' | 'mask-left' | 'mask-right' | 'blur-mask-up' | 'clip-circle-top' | 'clip-circle-bottom' | 'clip-circle-left' | 'clip-circle-right' | 'clip-circle-corner' | 'clip-ellipse' | 'clip-diamond' | 'clip-split-x' | 'clip-split-y' | 'clip-box' | 'clip-pill' | 'clip-blinds' | 'clip-blinds-x' | 'clip-diagonal' | 'clip-diagonal-reverse' | 'clip-slant-right' | 'clip-slant-left' | 'bounce-in' | 'bounce-in-up' | 'bounce-in-down' | 'bounce-in-left' | 'bounce-in-right' | 'elastic-in' | 'elastic-in-x' | 'rubber-in' | 'jello-in' | 'wobble-in' | 'tada-in' | 'heartbeat-in' | 'drop-in' | 'pop-in' | 'squash-in' | 'shake-in' | 'swing-in' | 'brightness-in' | 'darken-in' | 'color-in' | 'saturate-in' | 'hue-in' | 'sepia-in' | 'invert-in' | 'contrast-in' | 'exposure-in' | 'vintage-in' | 'blur-bright-in' | 'shadow-lift' | 'neon-glow-in' | 'glow-in' | 'perspective-in-up' | 'perspective-in-down' | 'perspective-in-left' | 'perspective-in-right' | 'depth-push' | 'depth-pull' | 'depth-in-up' | 'swoop-in-left' | 'swoop-in-right' | 'card-tilt-in' | 'glitch-in' | 'glitch-in-color' | 'typewriter' | 'typewriter-lines' | 'hinge-in' | 'flicker-in' | 'scan-in' | 'materialize' | 'teleport-in' | 'stagger-fade-up' | 'stagger-pop' | 'stagger-rise' | 'stagger-slide' | 'stagger-flip' | 'stagger-blur' | 'stagger-zoom' | 'stagger-drop' | 'scrub-parallax-up' | 'scrub-parallax-down' | 'scrub-rotate' | 'scrub-spin' | 'scrub-scale' | 'scrub-shrink' | 'scrub-pan-left' | 'scrub-pan-right' | 'scrub-tilt' | 'scrub-fade-through' | 'scrub-blur-through' | 'scrub-reveal-x';
|
|
25
33
|
/** Easing function types */
|
|
26
34
|
type EasingType = 'linear' | 'ease' | 'ease-in' | 'ease-out' | 'ease-in-out' | 'spring' | 'soft-spring' | 'heavy-bounce' | [number, number, number, number] | ((t: number) => number) | string;
|
|
27
35
|
/** Keyframe definition for custom animations */
|
|
28
36
|
interface AnimationKeyframe {
|
|
29
37
|
[property: string]: string | number;
|
|
30
38
|
}
|
|
39
|
+
/** One intermediate keyframe of a preset: `offset` is 0 < offset < 1. */
|
|
40
|
+
interface AnimationFrame extends AnimationKeyframe {
|
|
41
|
+
offset: number;
|
|
42
|
+
}
|
|
31
43
|
/** Custom animation definition */
|
|
32
44
|
interface CustomAnimation {
|
|
33
45
|
from: AnimationKeyframe;
|
|
34
46
|
to: AnimationKeyframe;
|
|
47
|
+
/** Optional intermediate keyframes (overshoot, bounce, …), played between `from` and `to`. */
|
|
48
|
+
frames?: AnimationFrame[];
|
|
35
49
|
}
|
|
36
50
|
/** Per-element animation options */
|
|
37
51
|
interface AnimateOptions {
|
package/dist/react.d.ts
CHANGED
|
@@ -2,8 +2,14 @@
|
|
|
2
2
|
* use-scroll-animate - Core Type Definitions
|
|
3
3
|
* A lightweight, high-performance scroll animation library
|
|
4
4
|
*/
|
|
5
|
-
/**
|
|
6
|
-
type
|
|
5
|
+
/** The 33 core presets (always available in `PRESETS`). */
|
|
6
|
+
type CorePreset = 'fade-in' | 'fade-in-up' | 'fade-in-down' | 'fade-in-left' | 'fade-in-right' | 'zoom-in' | 'zoom-out' | 'flip-x' | 'flip-y' | 'slide-up' | 'slide-down' | 'slide-left' | 'slide-right' | 'bounce' | 'rotate-in' | 'blur-in' | 'skew-in' | 'scale-x' | 'scale-y' | 'shimmer' | 'pulse' | 'swing' | 'scale-up' | 'blur-in-up' | 'flip-up' | 'flip-down' | 'rotate-left' | 'rotate-right' | 'clip-up' | 'clip-down' | 'clip-left' | 'clip-right' | 'clip-circle';
|
|
7
|
+
/**
|
|
8
|
+
* Every built-in preset name: the core set plus the 6.1 extended set, which is
|
|
9
|
+
* available once `use-scroll-animate/presets/extended` is loaded (or after
|
|
10
|
+
* `registerPresets(EXTENDED_PRESETS)`).
|
|
11
|
+
*/
|
|
12
|
+
type AnimationPreset = CorePreset | ExtendedPreset;
|
|
7
13
|
/**
|
|
8
14
|
* How `onProgress` / `progressVar` progress is measured.
|
|
9
15
|
* - `'ratio'` (default): the element's visible ratio (IntersectionObserver `intersectionRatio`).
|
|
@@ -22,16 +28,24 @@ type ProgressMode = 'ratio' | 'scroll';
|
|
|
22
28
|
* since those only mean something for a time-based animation.
|
|
23
29
|
*/
|
|
24
30
|
type ScrollEngine = 'auto' | 'js' | 'css';
|
|
31
|
+
/** The 6.1 extended presets (`use-scroll-animate/presets/extended`). */
|
|
32
|
+
type ExtendedPreset = 'fade-in-up-sm' | 'fade-in-down-sm' | 'fade-in-left-sm' | 'fade-in-right-sm' | 'fade-in-up-lg' | 'fade-in-down-lg' | 'fade-in-left-lg' | 'fade-in-right-lg' | 'fade-in-up-left' | 'fade-in-up-right' | 'fade-in-down-left' | 'fade-in-down-right' | 'fade-in-scale' | 'fade-in-half' | 'zoom-in-up' | 'zoom-in-down' | 'zoom-in-left' | 'zoom-in-right' | 'zoom-out-up' | 'zoom-out-down' | 'zoom-out-left' | 'zoom-out-right' | 'zoom-in-big' | 'zoom-out-big' | 'zoom-bounce' | 'zoom-in-rotate' | 'scale-x-left' | 'scale-x-right' | 'scale-y-top' | 'scale-y-bottom' | 'stretch-x' | 'stretch-y' | 'flip-x-reverse' | 'flip-y-reverse' | 'flip-y-full' | 'flip-diagonal' | 'flip-diagonal-reverse' | 'flip-left' | 'flip-right' | 'unfold-down' | 'unfold-up' | 'door-open-left' | 'door-open-right' | 'fold-in' | 'flip-x-bounce' | 'flip-y-bounce' | 'swing-in-top' | 'swing-in-bottom' | 'swing-in-left' | 'swing-in-right' | 'slide-up-spring' | 'slide-down-spring' | 'slide-left-spring' | 'slide-right-spring' | 'slide-up-sm' | 'slide-down-sm' | 'back-in-up' | 'back-in-down' | 'back-in-left' | 'back-in-right' | 'light-speed-in-left' | 'light-speed-in-right' | 'rise-in' | 'sink-in' | 'float-in-up' | 'float-in-down' | 'roll-in-left' | 'roll-in-right' | 'spiral-in' | 'spiral-in-reverse' | 'spin-in' | 'rotate-in-up-left' | 'rotate-in-up-right' | 'rotate-in-down-left' | 'rotate-in-down-right' | 'skew-in-left' | 'skew-in-y' | 'shear-in' | 'shear-in-reverse' | 'twist-in' | 'tilt-in-left' | 'tilt-in-right' | 'blur-in-down' | 'blur-in-left' | 'blur-in-right' | 'blur-in-strong' | 'blur-in-zoom' | 'blur-in-scale' | 'blur-in-x' | 'mask-up' | 'mask-down' | 'mask-left' | 'mask-right' | 'blur-mask-up' | 'clip-circle-top' | 'clip-circle-bottom' | 'clip-circle-left' | 'clip-circle-right' | 'clip-circle-corner' | 'clip-ellipse' | 'clip-diamond' | 'clip-split-x' | 'clip-split-y' | 'clip-box' | 'clip-pill' | 'clip-blinds' | 'clip-blinds-x' | 'clip-diagonal' | 'clip-diagonal-reverse' | 'clip-slant-right' | 'clip-slant-left' | 'bounce-in' | 'bounce-in-up' | 'bounce-in-down' | 'bounce-in-left' | 'bounce-in-right' | 'elastic-in' | 'elastic-in-x' | 'rubber-in' | 'jello-in' | 'wobble-in' | 'tada-in' | 'heartbeat-in' | 'drop-in' | 'pop-in' | 'squash-in' | 'shake-in' | 'swing-in' | 'brightness-in' | 'darken-in' | 'color-in' | 'saturate-in' | 'hue-in' | 'sepia-in' | 'invert-in' | 'contrast-in' | 'exposure-in' | 'vintage-in' | 'blur-bright-in' | 'shadow-lift' | 'neon-glow-in' | 'glow-in' | 'perspective-in-up' | 'perspective-in-down' | 'perspective-in-left' | 'perspective-in-right' | 'depth-push' | 'depth-pull' | 'depth-in-up' | 'swoop-in-left' | 'swoop-in-right' | 'card-tilt-in' | 'glitch-in' | 'glitch-in-color' | 'typewriter' | 'typewriter-lines' | 'hinge-in' | 'flicker-in' | 'scan-in' | 'materialize' | 'teleport-in' | 'stagger-fade-up' | 'stagger-pop' | 'stagger-rise' | 'stagger-slide' | 'stagger-flip' | 'stagger-blur' | 'stagger-zoom' | 'stagger-drop' | 'scrub-parallax-up' | 'scrub-parallax-down' | 'scrub-rotate' | 'scrub-spin' | 'scrub-scale' | 'scrub-shrink' | 'scrub-pan-left' | 'scrub-pan-right' | 'scrub-tilt' | 'scrub-fade-through' | 'scrub-blur-through' | 'scrub-reveal-x';
|
|
25
33
|
/** Easing function types */
|
|
26
34
|
type EasingType = 'linear' | 'ease' | 'ease-in' | 'ease-out' | 'ease-in-out' | 'spring' | 'soft-spring' | 'heavy-bounce' | [number, number, number, number] | ((t: number) => number) | string;
|
|
27
35
|
/** Keyframe definition for custom animations */
|
|
28
36
|
interface AnimationKeyframe {
|
|
29
37
|
[property: string]: string | number;
|
|
30
38
|
}
|
|
39
|
+
/** One intermediate keyframe of a preset: `offset` is 0 < offset < 1. */
|
|
40
|
+
interface AnimationFrame extends AnimationKeyframe {
|
|
41
|
+
offset: number;
|
|
42
|
+
}
|
|
31
43
|
/** Custom animation definition */
|
|
32
44
|
interface CustomAnimation {
|
|
33
45
|
from: AnimationKeyframe;
|
|
34
46
|
to: AnimationKeyframe;
|
|
47
|
+
/** Optional intermediate keyframes (overshoot, bounce, …), played between `from` and `to`. */
|
|
48
|
+
frames?: AnimationFrame[];
|
|
35
49
|
}
|
|
36
50
|
/** Per-element animation options */
|
|
37
51
|
interface AnimateOptions {
|
package/dist/react.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
import { c as createScrollAnimate } from './chunks/core-
|
|
2
|
-
import { s as staggerChildren } from './chunks/stagger-
|
|
1
|
+
import { c as createScrollAnimate } from './chunks/core-BVQW34aX.js';
|
|
2
|
+
import { s as staggerChildren } from './chunks/stagger-Dh4V-OL0.js';
|
|
3
|
+
import './chunks/presets-BJ09NeTo.js';
|
|
3
4
|
|
|
4
5
|
/**
|
|
5
6
|
* use-scroll-animate - React Integration
|
package/dist/react.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"react.js","sources":["../src/react.ts"],"sourcesContent":["/**\n * use-scroll-animate - React Integration\n * Provides useScrollAnimate and useScrollStagger hooks for React applications.\n * `useScrollStagger({ observeChildren: true })` also animates children added later.\n *\n * Both hooks are thin wrappers around the core engine, so they share its\n * behaviour: `once`, `offset`, custom easing functions, progress,\n * `prefers-reduced-motion` support, and proper cleanup on unmount.\n */\n\nimport type { AnimateOptions, ScrollAnimateInstance } from './types';\nimport { createScrollAnimate } from './core';\nimport { staggerChildren, type StaggerOptions } from './stagger';\n\ntype ReactRef<T> = { current: T | null };\n\nconst CALLBACKS = ['onStart', 'onComplete', 'onEnter', 'onLeave', 'onProgress'] as const;\n\n/**\n * Wrap the callbacks that exist at mount so they always call the latest\n * version from the most recent render (avoids stale closures without\n * re-creating observers on every render).\n * @internal\n */\nexport function withLatestCallbacks(latest: ReactRef<AnimateOptions>): AnimateOptions {\n const initial = latest.current || {};\n const opts: AnimateOptions = { ...initial };\n CALLBACKS.forEach((name) => {\n if (typeof initial[name] === 'function') {\n (opts as any)[name] = (...args: unknown[]) => (latest.current?.[name] as any)?.(...args);\n }\n });\n return opts;\n}\n\nexport function createReactHooks(React: {\n useRef: <T>(initial: T | null) => ReactRef<T>;\n useEffect: (effect: () => (() => void) | void, deps?: unknown[]) => void;\n}) {\n // Created lazily on the client so importing on the server is side-effect free.\n let instance: ScrollAnimateInstance | null = null;\n const getInstance = () => instance || (instance = createScrollAnimate());\n\n function useScrollAnimate(options: AnimateOptions = {}) {\n const ref = React.useRef<Element>(null);\n const optionsRef = React.useRef<AnimateOptions>(options);\n optionsRef.current = options;\n\n React.useEffect(() => {\n const el = ref.current;\n if (!el) return;\n const sa = getInstance();\n sa.observe(el, withLatestCallbacks(optionsRef));\n return () => sa.unobserve(el);\n }, []);\n\n return ref;\n }\n\n function useScrollStagger(options: StaggerOptions = {}) {\n const ref = React.useRef<Element>(null);\n const optionsRef = React.useRef<AnimateOptions>(options);\n optionsRef.current = options;\n\n React.useEffect(() => {\n const container = ref.current;\n if (!container) return;\n return staggerChildren(container, withLatestCallbacks(optionsRef) as StaggerOptions, getInstance());\n }, []);\n\n return ref;\n }\n\n return { useScrollAnimate, useScrollStagger };\n}\n"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"react.js","sources":["../src/react.ts"],"sourcesContent":["/**\n * use-scroll-animate - React Integration\n * Provides useScrollAnimate and useScrollStagger hooks for React applications.\n * `useScrollStagger({ observeChildren: true })` also animates children added later.\n *\n * Both hooks are thin wrappers around the core engine, so they share its\n * behaviour: `once`, `offset`, custom easing functions, progress,\n * `prefers-reduced-motion` support, and proper cleanup on unmount.\n */\n\nimport type { AnimateOptions, ScrollAnimateInstance } from './types';\nimport { createScrollAnimate } from './core';\nimport { staggerChildren, type StaggerOptions } from './stagger';\n\ntype ReactRef<T> = { current: T | null };\n\nconst CALLBACKS = ['onStart', 'onComplete', 'onEnter', 'onLeave', 'onProgress'] as const;\n\n/**\n * Wrap the callbacks that exist at mount so they always call the latest\n * version from the most recent render (avoids stale closures without\n * re-creating observers on every render).\n * @internal\n */\nexport function withLatestCallbacks(latest: ReactRef<AnimateOptions>): AnimateOptions {\n const initial = latest.current || {};\n const opts: AnimateOptions = { ...initial };\n CALLBACKS.forEach((name) => {\n if (typeof initial[name] === 'function') {\n (opts as any)[name] = (...args: unknown[]) => (latest.current?.[name] as any)?.(...args);\n }\n });\n return opts;\n}\n\nexport function createReactHooks(React: {\n useRef: <T>(initial: T | null) => ReactRef<T>;\n useEffect: (effect: () => (() => void) | void, deps?: unknown[]) => void;\n}) {\n // Created lazily on the client so importing on the server is side-effect free.\n let instance: ScrollAnimateInstance | null = null;\n const getInstance = () => instance || (instance = createScrollAnimate());\n\n function useScrollAnimate(options: AnimateOptions = {}) {\n const ref = React.useRef<Element>(null);\n const optionsRef = React.useRef<AnimateOptions>(options);\n optionsRef.current = options;\n\n React.useEffect(() => {\n const el = ref.current;\n if (!el) return;\n const sa = getInstance();\n sa.observe(el, withLatestCallbacks(optionsRef));\n return () => sa.unobserve(el);\n }, []);\n\n return ref;\n }\n\n function useScrollStagger(options: StaggerOptions = {}) {\n const ref = React.useRef<Element>(null);\n const optionsRef = React.useRef<AnimateOptions>(options);\n optionsRef.current = options;\n\n React.useEffect(() => {\n const container = ref.current;\n if (!container) return;\n return staggerChildren(container, withLatestCallbacks(optionsRef) as StaggerOptions, getInstance());\n }, []);\n\n return ref;\n }\n\n return { useScrollAnimate, useScrollStagger };\n}\n"],"names":[],"mappings":";;;;AAAA;;;;;;;;AAQG;AAQH,MAAM,SAAS,GAAG,CAAC,SAAS,EAAE,YAAY,EAAE,SAAS,EAAE,SAAS,EAAE,YAAY,CAAU;AAExF;;;;;AAKG;AACG,SAAU,mBAAmB,CAAC,MAAgC,EAAA;AAClE,IAAA,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,IAAI,EAAE;AACpC,IAAA,MAAM,IAAI,GAAmB,EAAE,GAAG,OAAO,EAAE;AAC3C,IAAA,SAAS,CAAC,OAAO,CAAC,CAAC,IAAI,KAAI;QACzB,IAAI,OAAO,OAAO,CAAC,IAAI,CAAC,KAAK,UAAU,EAAE;YACtC,IAAY,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,IAAe,KAAM,MAAM,CAAC,OAAO,GAAG,IAAI,CAAS,GAAG,GAAG,IAAI,CAAC;QAC1F;AACF,IAAA,CAAC,CAAC;AACF,IAAA,OAAO,IAAI;AACb;AAEM,SAAU,gBAAgB,CAAC,KAGhC,EAAA;;IAEC,IAAI,QAAQ,GAAiC,IAAI;AACjD,IAAA,MAAM,WAAW,GAAG,MAAM,QAAQ,KAAK,QAAQ,GAAG,mBAAmB,EAAE,CAAC;IAExE,SAAS,gBAAgB,CAAC,OAAA,GAA0B,EAAE,EAAA;QACpD,MAAM,GAAG,GAAG,KAAK,CAAC,MAAM,CAAU,IAAI,CAAC;QACvC,MAAM,UAAU,GAAG,KAAK,CAAC,MAAM,CAAiB,OAAO,CAAC;AACxD,QAAA,UAAU,CAAC,OAAO,GAAG,OAAO;AAE5B,QAAA,KAAK,CAAC,SAAS,CAAC,MAAK;AACnB,YAAA,MAAM,EAAE,GAAG,GAAG,CAAC,OAAO;AACtB,YAAA,IAAI,CAAC,EAAE;gBAAE;AACT,YAAA,MAAM,EAAE,GAAG,WAAW,EAAE;YACxB,EAAE,CAAC,OAAO,CAAC,EAAE,EAAE,mBAAmB,CAAC,UAAU,CAAC,CAAC;YAC/C,OAAO,MAAM,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC;QAC/B,CAAC,EAAE,EAAE,CAAC;AAEN,QAAA,OAAO,GAAG;IACZ;IAEA,SAAS,gBAAgB,CAAC,OAAA,GAA0B,EAAE,EAAA;QACpD,MAAM,GAAG,GAAG,KAAK,CAAC,MAAM,CAAU,IAAI,CAAC;QACvC,MAAM,UAAU,GAAG,KAAK,CAAC,MAAM,CAAiB,OAAO,CAAC;AACxD,QAAA,UAAU,CAAC,OAAO,GAAG,OAAO;AAE5B,QAAA,KAAK,CAAC,SAAS,CAAC,MAAK;AACnB,YAAA,MAAM,SAAS,GAAG,GAAG,CAAC,OAAO;AAC7B,YAAA,IAAI,CAAC,SAAS;gBAAE;AAChB,YAAA,OAAO,eAAe,CAAC,SAAS,EAAE,mBAAmB,CAAC,UAAU,CAAmB,EAAE,WAAW,EAAE,CAAC;QACrG,CAAC,EAAE,EAAE,CAAC;AAEN,QAAA,OAAO,GAAG;IACZ;AAEA,IAAA,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE;AAC/C;;;;"}
|
package/dist/solid.cjs
CHANGED
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
3
|
var solidJs = require('solid-js');
|
|
4
|
-
var core = require('./chunks/core-
|
|
5
|
-
var stagger = require('./chunks/stagger-
|
|
4
|
+
var core = require('./chunks/core-BYLtO0Po.cjs');
|
|
5
|
+
var stagger = require('./chunks/stagger-CvhYlKrF.cjs');
|
|
6
|
+
require('./chunks/presets-D2ksQNzJ.cjs');
|
|
6
7
|
|
|
7
8
|
/**
|
|
8
9
|
* use-scroll-animate - Solid integration
|
package/dist/solid.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"solid.cjs","sources":["../src/solid.ts"],"sourcesContent":["/**\n * use-scroll-animate - Solid integration\n *\n * ```tsx\n * import { scrollAnimate, scrollStagger, useScrollAnimate } from 'use-scroll-animate/solid';\n * false && scrollAnimate; // keep the directive import (TypeScript)\n *\n * <div use:scrollAnimate={{ animation: 'zoom-in' }}>…</div>\n * <ul use:scrollStagger={{ stagger: 60 }}>…</ul>\n * <div ref={useScrollAnimate({ animation: 'fade-in-up' })}>…</div>\n * ```\n *\n * `solid-js` is an optional peer dependency (only needed for this entry).\n */\n\nimport { createRenderEffect, onCleanup, onMount } from 'solid-js';\nimport type { AnimateOptions, ScrollAnimateInstance } from './types';\nimport { createScrollAnimate } from './core';\nimport { staggerChildren, type StaggerOptions } from './stagger';\n\nexport interface SolidScrollAnimateOptions extends AnimateOptions {\n instance?: ScrollAnimateInstance;\n}\nexport interface SolidScrollStaggerOptions extends StaggerOptions {\n instance?: ScrollAnimateInstance;\n}\n\ndeclare module 'solid-js' {\n // eslint-disable-next-line @typescript-eslint/no-namespace\n namespace JSX {\n interface Directives {\n scrollAnimate: SolidScrollAnimateOptions | true;\n scrollStagger: SolidScrollStaggerOptions | true;\n }\n }\n}\n\nlet shared: ScrollAnimateInstance | null = null;\nconst getInstance = (own?: ScrollAnimateInstance) => own || shared || (shared = createScrollAnimate());\n\nfunction read<T>(accessor?: () => T | true | undefined): T {\n const v = accessor?.();\n return (v && v !== true ? v : {}) as T;\n}\n\nconst CALLBACKS = ['onStart', 'onComplete', 'onEnter', 'onLeave', 'onProgress'] as const;\n\n/** Callbacks always call the latest options' version. */\nfunction liveCallbacks(opts: AnimateOptions, latest: () => AnimateOptions): AnimateOptions {\n const out: AnimateOptions = { ...opts };\n CALLBACKS.forEach((name) => {\n if (typeof opts[name] === 'function') (out as any)[name] = (...args: unknown[]) => (latest()[name] as any)?.(...args);\n });\n return out;\n}\n\n/**\n * Directive: `<div use:scrollAnimate={{ animation: 'fade-in' }} />`.\n * 4.0.1: the accessor is tracked — when signals it reads change, callbacks\n * update right away and the other options are re-applied if the element has\n * not animated yet (no manual `refresh()` needed).\n */\nexport function scrollAnimate(el: Element, accessor?: () => SolidScrollAnimateOptions | true | undefined): void {\n let latest: SolidScrollAnimateOptions = {};\n let mounted = false;\n let sa: ScrollAnimateInstance | null = null;\n const apply = () => {\n const { instance, ...opts } = latest;\n const record = sa?.getObservedElements().find((r) => r.element === el);\n if (sa && record?.animated) return; // finished: callbacks stay live\n sa?.unobserve(el);\n sa = getInstance(instance);\n sa.observe(el, liveCallbacks(opts, () => latest));\n };\n createRenderEffect(() => {\n latest = read<SolidScrollAnimateOptions>(accessor);\n if (mounted) apply();\n });\n // Wait until the element is in the document (directives/refs run before insertion).\n onMount(() => {\n mounted = true;\n apply();\n });\n onCleanup(() => sa?.unobserve(el));\n}\n\n/** Directive: `<ul use:scrollStagger={{ stagger: 60, observeChildren: true }} />` */\nexport function scrollStagger(el: Element, accessor?: () => SolidScrollStaggerOptions | true | undefined): void {\n const { instance, ...opts } = read<SolidScrollStaggerOptions>(accessor);\n let stop: (() => void) | undefined;\n onMount(() => {\n stop = staggerChildren(el, opts, getInstance(instance));\n });\n onCleanup(() => stop?.());\n}\n\n/** Primitive returning a `ref` callback: `<div ref={useScrollAnimate({ animation: 'fade-in-up' })} />` */\nexport function useScrollAnimate(options: SolidScrollAnimateOptions = {}): (el: Element) => void {\n let el: Element | undefined;\n const { instance, ...opts } = options;\n const sa = getInstance(instance);\n onMount(() => el && sa.observe(el, opts));\n onCleanup(() => el && sa.unobserve(el));\n return (node: Element) => {\n el = node;\n };\n}\n"],"names":["createScrollAnimate","createRenderEffect","onMount","onCleanup","staggerChildren"],"mappings":"
|
|
1
|
+
{"version":3,"file":"solid.cjs","sources":["../src/solid.ts"],"sourcesContent":["/**\n * use-scroll-animate - Solid integration\n *\n * ```tsx\n * import { scrollAnimate, scrollStagger, useScrollAnimate } from 'use-scroll-animate/solid';\n * false && scrollAnimate; // keep the directive import (TypeScript)\n *\n * <div use:scrollAnimate={{ animation: 'zoom-in' }}>…</div>\n * <ul use:scrollStagger={{ stagger: 60 }}>…</ul>\n * <div ref={useScrollAnimate({ animation: 'fade-in-up' })}>…</div>\n * ```\n *\n * `solid-js` is an optional peer dependency (only needed for this entry).\n */\n\nimport { createRenderEffect, onCleanup, onMount } from 'solid-js';\nimport type { AnimateOptions, ScrollAnimateInstance } from './types';\nimport { createScrollAnimate } from './core';\nimport { staggerChildren, type StaggerOptions } from './stagger';\n\nexport interface SolidScrollAnimateOptions extends AnimateOptions {\n instance?: ScrollAnimateInstance;\n}\nexport interface SolidScrollStaggerOptions extends StaggerOptions {\n instance?: ScrollAnimateInstance;\n}\n\ndeclare module 'solid-js' {\n // eslint-disable-next-line @typescript-eslint/no-namespace\n namespace JSX {\n interface Directives {\n scrollAnimate: SolidScrollAnimateOptions | true;\n scrollStagger: SolidScrollStaggerOptions | true;\n }\n }\n}\n\nlet shared: ScrollAnimateInstance | null = null;\nconst getInstance = (own?: ScrollAnimateInstance) => own || shared || (shared = createScrollAnimate());\n\nfunction read<T>(accessor?: () => T | true | undefined): T {\n const v = accessor?.();\n return (v && v !== true ? v : {}) as T;\n}\n\nconst CALLBACKS = ['onStart', 'onComplete', 'onEnter', 'onLeave', 'onProgress'] as const;\n\n/** Callbacks always call the latest options' version. */\nfunction liveCallbacks(opts: AnimateOptions, latest: () => AnimateOptions): AnimateOptions {\n const out: AnimateOptions = { ...opts };\n CALLBACKS.forEach((name) => {\n if (typeof opts[name] === 'function') (out as any)[name] = (...args: unknown[]) => (latest()[name] as any)?.(...args);\n });\n return out;\n}\n\n/**\n * Directive: `<div use:scrollAnimate={{ animation: 'fade-in' }} />`.\n * 4.0.1: the accessor is tracked — when signals it reads change, callbacks\n * update right away and the other options are re-applied if the element has\n * not animated yet (no manual `refresh()` needed).\n */\nexport function scrollAnimate(el: Element, accessor?: () => SolidScrollAnimateOptions | true | undefined): void {\n let latest: SolidScrollAnimateOptions = {};\n let mounted = false;\n let sa: ScrollAnimateInstance | null = null;\n const apply = () => {\n const { instance, ...opts } = latest;\n const record = sa?.getObservedElements().find((r) => r.element === el);\n if (sa && record?.animated) return; // finished: callbacks stay live\n sa?.unobserve(el);\n sa = getInstance(instance);\n sa.observe(el, liveCallbacks(opts, () => latest));\n };\n createRenderEffect(() => {\n latest = read<SolidScrollAnimateOptions>(accessor);\n if (mounted) apply();\n });\n // Wait until the element is in the document (directives/refs run before insertion).\n onMount(() => {\n mounted = true;\n apply();\n });\n onCleanup(() => sa?.unobserve(el));\n}\n\n/** Directive: `<ul use:scrollStagger={{ stagger: 60, observeChildren: true }} />` */\nexport function scrollStagger(el: Element, accessor?: () => SolidScrollStaggerOptions | true | undefined): void {\n const { instance, ...opts } = read<SolidScrollStaggerOptions>(accessor);\n let stop: (() => void) | undefined;\n onMount(() => {\n stop = staggerChildren(el, opts, getInstance(instance));\n });\n onCleanup(() => stop?.());\n}\n\n/** Primitive returning a `ref` callback: `<div ref={useScrollAnimate({ animation: 'fade-in-up' })} />` */\nexport function useScrollAnimate(options: SolidScrollAnimateOptions = {}): (el: Element) => void {\n let el: Element | undefined;\n const { instance, ...opts } = options;\n const sa = getInstance(instance);\n onMount(() => el && sa.observe(el, opts));\n onCleanup(() => el && sa.unobserve(el));\n return (node: Element) => {\n el = node;\n };\n}\n"],"names":["createScrollAnimate","createRenderEffect","onMount","onCleanup","staggerChildren"],"mappings":"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"}
|
package/dist/solid.d.cts
CHANGED
|
@@ -2,8 +2,14 @@
|
|
|
2
2
|
* use-scroll-animate - Core Type Definitions
|
|
3
3
|
* A lightweight, high-performance scroll animation library
|
|
4
4
|
*/
|
|
5
|
-
/**
|
|
6
|
-
type
|
|
5
|
+
/** The 33 core presets (always available in `PRESETS`). */
|
|
6
|
+
type CorePreset = 'fade-in' | 'fade-in-up' | 'fade-in-down' | 'fade-in-left' | 'fade-in-right' | 'zoom-in' | 'zoom-out' | 'flip-x' | 'flip-y' | 'slide-up' | 'slide-down' | 'slide-left' | 'slide-right' | 'bounce' | 'rotate-in' | 'blur-in' | 'skew-in' | 'scale-x' | 'scale-y' | 'shimmer' | 'pulse' | 'swing' | 'scale-up' | 'blur-in-up' | 'flip-up' | 'flip-down' | 'rotate-left' | 'rotate-right' | 'clip-up' | 'clip-down' | 'clip-left' | 'clip-right' | 'clip-circle';
|
|
7
|
+
/**
|
|
8
|
+
* Every built-in preset name: the core set plus the 6.1 extended set, which is
|
|
9
|
+
* available once `use-scroll-animate/presets/extended` is loaded (or after
|
|
10
|
+
* `registerPresets(EXTENDED_PRESETS)`).
|
|
11
|
+
*/
|
|
12
|
+
type AnimationPreset = CorePreset | ExtendedPreset;
|
|
7
13
|
/**
|
|
8
14
|
* How `onProgress` / `progressVar` progress is measured.
|
|
9
15
|
* - `'ratio'` (default): the element's visible ratio (IntersectionObserver `intersectionRatio`).
|
|
@@ -22,16 +28,24 @@ type ProgressMode = 'ratio' | 'scroll';
|
|
|
22
28
|
* since those only mean something for a time-based animation.
|
|
23
29
|
*/
|
|
24
30
|
type ScrollEngine = 'auto' | 'js' | 'css';
|
|
31
|
+
/** The 6.1 extended presets (`use-scroll-animate/presets/extended`). */
|
|
32
|
+
type ExtendedPreset = 'fade-in-up-sm' | 'fade-in-down-sm' | 'fade-in-left-sm' | 'fade-in-right-sm' | 'fade-in-up-lg' | 'fade-in-down-lg' | 'fade-in-left-lg' | 'fade-in-right-lg' | 'fade-in-up-left' | 'fade-in-up-right' | 'fade-in-down-left' | 'fade-in-down-right' | 'fade-in-scale' | 'fade-in-half' | 'zoom-in-up' | 'zoom-in-down' | 'zoom-in-left' | 'zoom-in-right' | 'zoom-out-up' | 'zoom-out-down' | 'zoom-out-left' | 'zoom-out-right' | 'zoom-in-big' | 'zoom-out-big' | 'zoom-bounce' | 'zoom-in-rotate' | 'scale-x-left' | 'scale-x-right' | 'scale-y-top' | 'scale-y-bottom' | 'stretch-x' | 'stretch-y' | 'flip-x-reverse' | 'flip-y-reverse' | 'flip-y-full' | 'flip-diagonal' | 'flip-diagonal-reverse' | 'flip-left' | 'flip-right' | 'unfold-down' | 'unfold-up' | 'door-open-left' | 'door-open-right' | 'fold-in' | 'flip-x-bounce' | 'flip-y-bounce' | 'swing-in-top' | 'swing-in-bottom' | 'swing-in-left' | 'swing-in-right' | 'slide-up-spring' | 'slide-down-spring' | 'slide-left-spring' | 'slide-right-spring' | 'slide-up-sm' | 'slide-down-sm' | 'back-in-up' | 'back-in-down' | 'back-in-left' | 'back-in-right' | 'light-speed-in-left' | 'light-speed-in-right' | 'rise-in' | 'sink-in' | 'float-in-up' | 'float-in-down' | 'roll-in-left' | 'roll-in-right' | 'spiral-in' | 'spiral-in-reverse' | 'spin-in' | 'rotate-in-up-left' | 'rotate-in-up-right' | 'rotate-in-down-left' | 'rotate-in-down-right' | 'skew-in-left' | 'skew-in-y' | 'shear-in' | 'shear-in-reverse' | 'twist-in' | 'tilt-in-left' | 'tilt-in-right' | 'blur-in-down' | 'blur-in-left' | 'blur-in-right' | 'blur-in-strong' | 'blur-in-zoom' | 'blur-in-scale' | 'blur-in-x' | 'mask-up' | 'mask-down' | 'mask-left' | 'mask-right' | 'blur-mask-up' | 'clip-circle-top' | 'clip-circle-bottom' | 'clip-circle-left' | 'clip-circle-right' | 'clip-circle-corner' | 'clip-ellipse' | 'clip-diamond' | 'clip-split-x' | 'clip-split-y' | 'clip-box' | 'clip-pill' | 'clip-blinds' | 'clip-blinds-x' | 'clip-diagonal' | 'clip-diagonal-reverse' | 'clip-slant-right' | 'clip-slant-left' | 'bounce-in' | 'bounce-in-up' | 'bounce-in-down' | 'bounce-in-left' | 'bounce-in-right' | 'elastic-in' | 'elastic-in-x' | 'rubber-in' | 'jello-in' | 'wobble-in' | 'tada-in' | 'heartbeat-in' | 'drop-in' | 'pop-in' | 'squash-in' | 'shake-in' | 'swing-in' | 'brightness-in' | 'darken-in' | 'color-in' | 'saturate-in' | 'hue-in' | 'sepia-in' | 'invert-in' | 'contrast-in' | 'exposure-in' | 'vintage-in' | 'blur-bright-in' | 'shadow-lift' | 'neon-glow-in' | 'glow-in' | 'perspective-in-up' | 'perspective-in-down' | 'perspective-in-left' | 'perspective-in-right' | 'depth-push' | 'depth-pull' | 'depth-in-up' | 'swoop-in-left' | 'swoop-in-right' | 'card-tilt-in' | 'glitch-in' | 'glitch-in-color' | 'typewriter' | 'typewriter-lines' | 'hinge-in' | 'flicker-in' | 'scan-in' | 'materialize' | 'teleport-in' | 'stagger-fade-up' | 'stagger-pop' | 'stagger-rise' | 'stagger-slide' | 'stagger-flip' | 'stagger-blur' | 'stagger-zoom' | 'stagger-drop' | 'scrub-parallax-up' | 'scrub-parallax-down' | 'scrub-rotate' | 'scrub-spin' | 'scrub-scale' | 'scrub-shrink' | 'scrub-pan-left' | 'scrub-pan-right' | 'scrub-tilt' | 'scrub-fade-through' | 'scrub-blur-through' | 'scrub-reveal-x';
|
|
25
33
|
/** Easing function types */
|
|
26
34
|
type EasingType = 'linear' | 'ease' | 'ease-in' | 'ease-out' | 'ease-in-out' | 'spring' | 'soft-spring' | 'heavy-bounce' | [number, number, number, number] | ((t: number) => number) | string;
|
|
27
35
|
/** Keyframe definition for custom animations */
|
|
28
36
|
interface AnimationKeyframe {
|
|
29
37
|
[property: string]: string | number;
|
|
30
38
|
}
|
|
39
|
+
/** One intermediate keyframe of a preset: `offset` is 0 < offset < 1. */
|
|
40
|
+
interface AnimationFrame extends AnimationKeyframe {
|
|
41
|
+
offset: number;
|
|
42
|
+
}
|
|
31
43
|
/** Custom animation definition */
|
|
32
44
|
interface CustomAnimation {
|
|
33
45
|
from: AnimationKeyframe;
|
|
34
46
|
to: AnimationKeyframe;
|
|
47
|
+
/** Optional intermediate keyframes (overshoot, bounce, …), played between `from` and `to`. */
|
|
48
|
+
frames?: AnimationFrame[];
|
|
35
49
|
}
|
|
36
50
|
/** Per-element animation options */
|
|
37
51
|
interface AnimateOptions {
|
package/dist/solid.d.ts
CHANGED
|
@@ -2,8 +2,14 @@
|
|
|
2
2
|
* use-scroll-animate - Core Type Definitions
|
|
3
3
|
* A lightweight, high-performance scroll animation library
|
|
4
4
|
*/
|
|
5
|
-
/**
|
|
6
|
-
type
|
|
5
|
+
/** The 33 core presets (always available in `PRESETS`). */
|
|
6
|
+
type CorePreset = 'fade-in' | 'fade-in-up' | 'fade-in-down' | 'fade-in-left' | 'fade-in-right' | 'zoom-in' | 'zoom-out' | 'flip-x' | 'flip-y' | 'slide-up' | 'slide-down' | 'slide-left' | 'slide-right' | 'bounce' | 'rotate-in' | 'blur-in' | 'skew-in' | 'scale-x' | 'scale-y' | 'shimmer' | 'pulse' | 'swing' | 'scale-up' | 'blur-in-up' | 'flip-up' | 'flip-down' | 'rotate-left' | 'rotate-right' | 'clip-up' | 'clip-down' | 'clip-left' | 'clip-right' | 'clip-circle';
|
|
7
|
+
/**
|
|
8
|
+
* Every built-in preset name: the core set plus the 6.1 extended set, which is
|
|
9
|
+
* available once `use-scroll-animate/presets/extended` is loaded (or after
|
|
10
|
+
* `registerPresets(EXTENDED_PRESETS)`).
|
|
11
|
+
*/
|
|
12
|
+
type AnimationPreset = CorePreset | ExtendedPreset;
|
|
7
13
|
/**
|
|
8
14
|
* How `onProgress` / `progressVar` progress is measured.
|
|
9
15
|
* - `'ratio'` (default): the element's visible ratio (IntersectionObserver `intersectionRatio`).
|
|
@@ -22,16 +28,24 @@ type ProgressMode = 'ratio' | 'scroll';
|
|
|
22
28
|
* since those only mean something for a time-based animation.
|
|
23
29
|
*/
|
|
24
30
|
type ScrollEngine = 'auto' | 'js' | 'css';
|
|
31
|
+
/** The 6.1 extended presets (`use-scroll-animate/presets/extended`). */
|
|
32
|
+
type ExtendedPreset = 'fade-in-up-sm' | 'fade-in-down-sm' | 'fade-in-left-sm' | 'fade-in-right-sm' | 'fade-in-up-lg' | 'fade-in-down-lg' | 'fade-in-left-lg' | 'fade-in-right-lg' | 'fade-in-up-left' | 'fade-in-up-right' | 'fade-in-down-left' | 'fade-in-down-right' | 'fade-in-scale' | 'fade-in-half' | 'zoom-in-up' | 'zoom-in-down' | 'zoom-in-left' | 'zoom-in-right' | 'zoom-out-up' | 'zoom-out-down' | 'zoom-out-left' | 'zoom-out-right' | 'zoom-in-big' | 'zoom-out-big' | 'zoom-bounce' | 'zoom-in-rotate' | 'scale-x-left' | 'scale-x-right' | 'scale-y-top' | 'scale-y-bottom' | 'stretch-x' | 'stretch-y' | 'flip-x-reverse' | 'flip-y-reverse' | 'flip-y-full' | 'flip-diagonal' | 'flip-diagonal-reverse' | 'flip-left' | 'flip-right' | 'unfold-down' | 'unfold-up' | 'door-open-left' | 'door-open-right' | 'fold-in' | 'flip-x-bounce' | 'flip-y-bounce' | 'swing-in-top' | 'swing-in-bottom' | 'swing-in-left' | 'swing-in-right' | 'slide-up-spring' | 'slide-down-spring' | 'slide-left-spring' | 'slide-right-spring' | 'slide-up-sm' | 'slide-down-sm' | 'back-in-up' | 'back-in-down' | 'back-in-left' | 'back-in-right' | 'light-speed-in-left' | 'light-speed-in-right' | 'rise-in' | 'sink-in' | 'float-in-up' | 'float-in-down' | 'roll-in-left' | 'roll-in-right' | 'spiral-in' | 'spiral-in-reverse' | 'spin-in' | 'rotate-in-up-left' | 'rotate-in-up-right' | 'rotate-in-down-left' | 'rotate-in-down-right' | 'skew-in-left' | 'skew-in-y' | 'shear-in' | 'shear-in-reverse' | 'twist-in' | 'tilt-in-left' | 'tilt-in-right' | 'blur-in-down' | 'blur-in-left' | 'blur-in-right' | 'blur-in-strong' | 'blur-in-zoom' | 'blur-in-scale' | 'blur-in-x' | 'mask-up' | 'mask-down' | 'mask-left' | 'mask-right' | 'blur-mask-up' | 'clip-circle-top' | 'clip-circle-bottom' | 'clip-circle-left' | 'clip-circle-right' | 'clip-circle-corner' | 'clip-ellipse' | 'clip-diamond' | 'clip-split-x' | 'clip-split-y' | 'clip-box' | 'clip-pill' | 'clip-blinds' | 'clip-blinds-x' | 'clip-diagonal' | 'clip-diagonal-reverse' | 'clip-slant-right' | 'clip-slant-left' | 'bounce-in' | 'bounce-in-up' | 'bounce-in-down' | 'bounce-in-left' | 'bounce-in-right' | 'elastic-in' | 'elastic-in-x' | 'rubber-in' | 'jello-in' | 'wobble-in' | 'tada-in' | 'heartbeat-in' | 'drop-in' | 'pop-in' | 'squash-in' | 'shake-in' | 'swing-in' | 'brightness-in' | 'darken-in' | 'color-in' | 'saturate-in' | 'hue-in' | 'sepia-in' | 'invert-in' | 'contrast-in' | 'exposure-in' | 'vintage-in' | 'blur-bright-in' | 'shadow-lift' | 'neon-glow-in' | 'glow-in' | 'perspective-in-up' | 'perspective-in-down' | 'perspective-in-left' | 'perspective-in-right' | 'depth-push' | 'depth-pull' | 'depth-in-up' | 'swoop-in-left' | 'swoop-in-right' | 'card-tilt-in' | 'glitch-in' | 'glitch-in-color' | 'typewriter' | 'typewriter-lines' | 'hinge-in' | 'flicker-in' | 'scan-in' | 'materialize' | 'teleport-in' | 'stagger-fade-up' | 'stagger-pop' | 'stagger-rise' | 'stagger-slide' | 'stagger-flip' | 'stagger-blur' | 'stagger-zoom' | 'stagger-drop' | 'scrub-parallax-up' | 'scrub-parallax-down' | 'scrub-rotate' | 'scrub-spin' | 'scrub-scale' | 'scrub-shrink' | 'scrub-pan-left' | 'scrub-pan-right' | 'scrub-tilt' | 'scrub-fade-through' | 'scrub-blur-through' | 'scrub-reveal-x';
|
|
25
33
|
/** Easing function types */
|
|
26
34
|
type EasingType = 'linear' | 'ease' | 'ease-in' | 'ease-out' | 'ease-in-out' | 'spring' | 'soft-spring' | 'heavy-bounce' | [number, number, number, number] | ((t: number) => number) | string;
|
|
27
35
|
/** Keyframe definition for custom animations */
|
|
28
36
|
interface AnimationKeyframe {
|
|
29
37
|
[property: string]: string | number;
|
|
30
38
|
}
|
|
39
|
+
/** One intermediate keyframe of a preset: `offset` is 0 < offset < 1. */
|
|
40
|
+
interface AnimationFrame extends AnimationKeyframe {
|
|
41
|
+
offset: number;
|
|
42
|
+
}
|
|
31
43
|
/** Custom animation definition */
|
|
32
44
|
interface CustomAnimation {
|
|
33
45
|
from: AnimationKeyframe;
|
|
34
46
|
to: AnimationKeyframe;
|
|
47
|
+
/** Optional intermediate keyframes (overshoot, bounce, …), played between `from` and `to`. */
|
|
48
|
+
frames?: AnimationFrame[];
|
|
35
49
|
}
|
|
36
50
|
/** Per-element animation options */
|
|
37
51
|
interface AnimateOptions {
|
package/dist/solid.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { createRenderEffect, onMount, onCleanup } from 'solid-js';
|
|
2
|
-
import { c as createScrollAnimate } from './chunks/core-
|
|
3
|
-
import { s as staggerChildren } from './chunks/stagger-
|
|
2
|
+
import { c as createScrollAnimate } from './chunks/core-BVQW34aX.js';
|
|
3
|
+
import { s as staggerChildren } from './chunks/stagger-Dh4V-OL0.js';
|
|
4
|
+
import './chunks/presets-BJ09NeTo.js';
|
|
4
5
|
|
|
5
6
|
/**
|
|
6
7
|
* use-scroll-animate - Solid integration
|
package/dist/solid.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"solid.js","sources":["../src/solid.ts"],"sourcesContent":["/**\n * use-scroll-animate - Solid integration\n *\n * ```tsx\n * import { scrollAnimate, scrollStagger, useScrollAnimate } from 'use-scroll-animate/solid';\n * false && scrollAnimate; // keep the directive import (TypeScript)\n *\n * <div use:scrollAnimate={{ animation: 'zoom-in' }}>…</div>\n * <ul use:scrollStagger={{ stagger: 60 }}>…</ul>\n * <div ref={useScrollAnimate({ animation: 'fade-in-up' })}>…</div>\n * ```\n *\n * `solid-js` is an optional peer dependency (only needed for this entry).\n */\n\nimport { createRenderEffect, onCleanup, onMount } from 'solid-js';\nimport type { AnimateOptions, ScrollAnimateInstance } from './types';\nimport { createScrollAnimate } from './core';\nimport { staggerChildren, type StaggerOptions } from './stagger';\n\nexport interface SolidScrollAnimateOptions extends AnimateOptions {\n instance?: ScrollAnimateInstance;\n}\nexport interface SolidScrollStaggerOptions extends StaggerOptions {\n instance?: ScrollAnimateInstance;\n}\n\ndeclare module 'solid-js' {\n // eslint-disable-next-line @typescript-eslint/no-namespace\n namespace JSX {\n interface Directives {\n scrollAnimate: SolidScrollAnimateOptions | true;\n scrollStagger: SolidScrollStaggerOptions | true;\n }\n }\n}\n\nlet shared: ScrollAnimateInstance | null = null;\nconst getInstance = (own?: ScrollAnimateInstance) => own || shared || (shared = createScrollAnimate());\n\nfunction read<T>(accessor?: () => T | true | undefined): T {\n const v = accessor?.();\n return (v && v !== true ? v : {}) as T;\n}\n\nconst CALLBACKS = ['onStart', 'onComplete', 'onEnter', 'onLeave', 'onProgress'] as const;\n\n/** Callbacks always call the latest options' version. */\nfunction liveCallbacks(opts: AnimateOptions, latest: () => AnimateOptions): AnimateOptions {\n const out: AnimateOptions = { ...opts };\n CALLBACKS.forEach((name) => {\n if (typeof opts[name] === 'function') (out as any)[name] = (...args: unknown[]) => (latest()[name] as any)?.(...args);\n });\n return out;\n}\n\n/**\n * Directive: `<div use:scrollAnimate={{ animation: 'fade-in' }} />`.\n * 4.0.1: the accessor is tracked — when signals it reads change, callbacks\n * update right away and the other options are re-applied if the element has\n * not animated yet (no manual `refresh()` needed).\n */\nexport function scrollAnimate(el: Element, accessor?: () => SolidScrollAnimateOptions | true | undefined): void {\n let latest: SolidScrollAnimateOptions = {};\n let mounted = false;\n let sa: ScrollAnimateInstance | null = null;\n const apply = () => {\n const { instance, ...opts } = latest;\n const record = sa?.getObservedElements().find((r) => r.element === el);\n if (sa && record?.animated) return; // finished: callbacks stay live\n sa?.unobserve(el);\n sa = getInstance(instance);\n sa.observe(el, liveCallbacks(opts, () => latest));\n };\n createRenderEffect(() => {\n latest = read<SolidScrollAnimateOptions>(accessor);\n if (mounted) apply();\n });\n // Wait until the element is in the document (directives/refs run before insertion).\n onMount(() => {\n mounted = true;\n apply();\n });\n onCleanup(() => sa?.unobserve(el));\n}\n\n/** Directive: `<ul use:scrollStagger={{ stagger: 60, observeChildren: true }} />` */\nexport function scrollStagger(el: Element, accessor?: () => SolidScrollStaggerOptions | true | undefined): void {\n const { instance, ...opts } = read<SolidScrollStaggerOptions>(accessor);\n let stop: (() => void) | undefined;\n onMount(() => {\n stop = staggerChildren(el, opts, getInstance(instance));\n });\n onCleanup(() => stop?.());\n}\n\n/** Primitive returning a `ref` callback: `<div ref={useScrollAnimate({ animation: 'fade-in-up' })} />` */\nexport function useScrollAnimate(options: SolidScrollAnimateOptions = {}): (el: Element) => void {\n let el: Element | undefined;\n const { instance, ...opts } = options;\n const sa = getInstance(instance);\n onMount(() => el && sa.observe(el, opts));\n onCleanup(() => el && sa.unobserve(el));\n return (node: Element) => {\n el = node;\n };\n}\n"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"solid.js","sources":["../src/solid.ts"],"sourcesContent":["/**\n * use-scroll-animate - Solid integration\n *\n * ```tsx\n * import { scrollAnimate, scrollStagger, useScrollAnimate } from 'use-scroll-animate/solid';\n * false && scrollAnimate; // keep the directive import (TypeScript)\n *\n * <div use:scrollAnimate={{ animation: 'zoom-in' }}>…</div>\n * <ul use:scrollStagger={{ stagger: 60 }}>…</ul>\n * <div ref={useScrollAnimate({ animation: 'fade-in-up' })}>…</div>\n * ```\n *\n * `solid-js` is an optional peer dependency (only needed for this entry).\n */\n\nimport { createRenderEffect, onCleanup, onMount } from 'solid-js';\nimport type { AnimateOptions, ScrollAnimateInstance } from './types';\nimport { createScrollAnimate } from './core';\nimport { staggerChildren, type StaggerOptions } from './stagger';\n\nexport interface SolidScrollAnimateOptions extends AnimateOptions {\n instance?: ScrollAnimateInstance;\n}\nexport interface SolidScrollStaggerOptions extends StaggerOptions {\n instance?: ScrollAnimateInstance;\n}\n\ndeclare module 'solid-js' {\n // eslint-disable-next-line @typescript-eslint/no-namespace\n namespace JSX {\n interface Directives {\n scrollAnimate: SolidScrollAnimateOptions | true;\n scrollStagger: SolidScrollStaggerOptions | true;\n }\n }\n}\n\nlet shared: ScrollAnimateInstance | null = null;\nconst getInstance = (own?: ScrollAnimateInstance) => own || shared || (shared = createScrollAnimate());\n\nfunction read<T>(accessor?: () => T | true | undefined): T {\n const v = accessor?.();\n return (v && v !== true ? v : {}) as T;\n}\n\nconst CALLBACKS = ['onStart', 'onComplete', 'onEnter', 'onLeave', 'onProgress'] as const;\n\n/** Callbacks always call the latest options' version. */\nfunction liveCallbacks(opts: AnimateOptions, latest: () => AnimateOptions): AnimateOptions {\n const out: AnimateOptions = { ...opts };\n CALLBACKS.forEach((name) => {\n if (typeof opts[name] === 'function') (out as any)[name] = (...args: unknown[]) => (latest()[name] as any)?.(...args);\n });\n return out;\n}\n\n/**\n * Directive: `<div use:scrollAnimate={{ animation: 'fade-in' }} />`.\n * 4.0.1: the accessor is tracked — when signals it reads change, callbacks\n * update right away and the other options are re-applied if the element has\n * not animated yet (no manual `refresh()` needed).\n */\nexport function scrollAnimate(el: Element, accessor?: () => SolidScrollAnimateOptions | true | undefined): void {\n let latest: SolidScrollAnimateOptions = {};\n let mounted = false;\n let sa: ScrollAnimateInstance | null = null;\n const apply = () => {\n const { instance, ...opts } = latest;\n const record = sa?.getObservedElements().find((r) => r.element === el);\n if (sa && record?.animated) return; // finished: callbacks stay live\n sa?.unobserve(el);\n sa = getInstance(instance);\n sa.observe(el, liveCallbacks(opts, () => latest));\n };\n createRenderEffect(() => {\n latest = read<SolidScrollAnimateOptions>(accessor);\n if (mounted) apply();\n });\n // Wait until the element is in the document (directives/refs run before insertion).\n onMount(() => {\n mounted = true;\n apply();\n });\n onCleanup(() => sa?.unobserve(el));\n}\n\n/** Directive: `<ul use:scrollStagger={{ stagger: 60, observeChildren: true }} />` */\nexport function scrollStagger(el: Element, accessor?: () => SolidScrollStaggerOptions | true | undefined): void {\n const { instance, ...opts } = read<SolidScrollStaggerOptions>(accessor);\n let stop: (() => void) | undefined;\n onMount(() => {\n stop = staggerChildren(el, opts, getInstance(instance));\n });\n onCleanup(() => stop?.());\n}\n\n/** Primitive returning a `ref` callback: `<div ref={useScrollAnimate({ animation: 'fade-in-up' })} />` */\nexport function useScrollAnimate(options: SolidScrollAnimateOptions = {}): (el: Element) => void {\n let el: Element | undefined;\n const { instance, ...opts } = options;\n const sa = getInstance(instance);\n onMount(() => el && sa.observe(el, opts));\n onCleanup(() => el && sa.unobserve(el));\n return (node: Element) => {\n el = node;\n };\n}\n"],"names":[],"mappings":"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"}
|
package/dist/svelte.cjs
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var core = require('./chunks/core-
|
|
4
|
-
var stagger = require('./chunks/stagger-
|
|
3
|
+
var core = require('./chunks/core-BYLtO0Po.cjs');
|
|
4
|
+
var stagger = require('./chunks/stagger-CvhYlKrF.cjs');
|
|
5
|
+
require('./chunks/presets-D2ksQNzJ.cjs');
|
|
5
6
|
|
|
6
7
|
/**
|
|
7
8
|
* use-scroll-animate - Svelte integration
|
package/dist/svelte.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"svelte.cjs","sources":["../src/svelte.ts"],"sourcesContent":["/**\n * use-scroll-animate - Svelte integration\n *\n * Svelte actions (no import from `svelte` needed, works with Svelte 3, 4 and 5):\n *\n * ```svelte\n * <script>\n * import { scrollAnimate, scrollStagger } from 'use-scroll-animate/svelte';\n * </script>\n * <div use:scrollAnimate={{ animation: 'fade-in-up', duration: 800 }}>…</div>\n * <ul use:scrollStagger={{ stagger: 60 }}>…</ul>\n * ```\n */\n\nimport type { AnimateOptions, ScrollAnimateInstance } from './types';\nimport { createScrollAnimate } from './core';\nimport { staggerChildren, type StaggerOptions } from './stagger';\n\nexport interface ScrollAnimateActionOptions extends AnimateOptions {\n /** Instance to register with (default: a shared instance created on first use) */\n instance?: ScrollAnimateInstance;\n}\n\nexport interface ScrollStaggerActionOptions extends StaggerOptions {\n instance?: ScrollAnimateInstance;\n}\n\n/** Shape of a Svelte action's return value. */\nexport interface ActionReturn<P> {\n update?: (parameter: P) => void;\n destroy?: () => void;\n}\n\nlet shared: ScrollAnimateInstance | null = null;\nconst getInstance = (own?: ScrollAnimateInstance) => own || shared || (shared = createScrollAnimate());\n\nconst CALLBACKS = ['onStart', 'onComplete', 'onEnter', 'onLeave', 'onProgress'] as const;\n\n/** Callbacks always call the latest parameter's version. */\nfunction liveCallbacks(opts: AnimateOptions, latest: () => AnimateOptions): AnimateOptions {\n const out: AnimateOptions = { ...opts };\n CALLBACKS.forEach((name) => {\n if (typeof opts[name] === 'function') (out as any)[name] = (...args: unknown[]) => (latest()[name] as any)?.(...args);\n });\n return out;\n}\n\n/**\n * Animate `node` when it scrolls into view. Changing the parameter updates the\n * callbacks right away; other options are applied if the element has not\n * animated yet.\n */\nexport function scrollAnimate(\n node: Element,\n options: ScrollAnimateActionOptions = {}\n): ActionReturn<ScrollAnimateActionOptions | undefined> {\n let current = options;\n const { instance, ...opts } = options;\n const sa = getInstance(instance);\n sa.observe(node, liveCallbacks(opts, () => current));\n\n return {\n update(next = {}) {\n current = next;\n const record = sa.getObservedElements().find((r) => r.element === node);\n if (record && !record.animated) {\n const { instance: _ignored, ...nextOpts } = next;\n sa.unobserve(node);\n sa.observe(node, liveCallbacks(nextOpts, () => current));\n }\n },\n destroy() {\n sa.unobserve(node);\n },\n };\n}\n\n/** Stagger the children of `node` when it scrolls into view (`observeChildren: true` also animates children added later). */\nexport function scrollStagger(\n node: Element,\n options: ScrollStaggerActionOptions = {}\n): ActionReturn<ScrollStaggerActionOptions | undefined> {\n const { instance, ...opts } = options;\n const stop = staggerChildren(node, opts, getInstance(instance));\n return { destroy: stop };\n}\n"],"names":["createScrollAnimate","staggerChildren"],"mappings":"
|
|
1
|
+
{"version":3,"file":"svelte.cjs","sources":["../src/svelte.ts"],"sourcesContent":["/**\n * use-scroll-animate - Svelte integration\n *\n * Svelte actions (no import from `svelte` needed, works with Svelte 3, 4 and 5):\n *\n * ```svelte\n * <script>\n * import { scrollAnimate, scrollStagger } from 'use-scroll-animate/svelte';\n * </script>\n * <div use:scrollAnimate={{ animation: 'fade-in-up', duration: 800 }}>…</div>\n * <ul use:scrollStagger={{ stagger: 60 }}>…</ul>\n * ```\n */\n\nimport type { AnimateOptions, ScrollAnimateInstance } from './types';\nimport { createScrollAnimate } from './core';\nimport { staggerChildren, type StaggerOptions } from './stagger';\n\nexport interface ScrollAnimateActionOptions extends AnimateOptions {\n /** Instance to register with (default: a shared instance created on first use) */\n instance?: ScrollAnimateInstance;\n}\n\nexport interface ScrollStaggerActionOptions extends StaggerOptions {\n instance?: ScrollAnimateInstance;\n}\n\n/** Shape of a Svelte action's return value. */\nexport interface ActionReturn<P> {\n update?: (parameter: P) => void;\n destroy?: () => void;\n}\n\nlet shared: ScrollAnimateInstance | null = null;\nconst getInstance = (own?: ScrollAnimateInstance) => own || shared || (shared = createScrollAnimate());\n\nconst CALLBACKS = ['onStart', 'onComplete', 'onEnter', 'onLeave', 'onProgress'] as const;\n\n/** Callbacks always call the latest parameter's version. */\nfunction liveCallbacks(opts: AnimateOptions, latest: () => AnimateOptions): AnimateOptions {\n const out: AnimateOptions = { ...opts };\n CALLBACKS.forEach((name) => {\n if (typeof opts[name] === 'function') (out as any)[name] = (...args: unknown[]) => (latest()[name] as any)?.(...args);\n });\n return out;\n}\n\n/**\n * Animate `node` when it scrolls into view. Changing the parameter updates the\n * callbacks right away; other options are applied if the element has not\n * animated yet.\n */\nexport function scrollAnimate(\n node: Element,\n options: ScrollAnimateActionOptions = {}\n): ActionReturn<ScrollAnimateActionOptions | undefined> {\n let current = options;\n const { instance, ...opts } = options;\n const sa = getInstance(instance);\n sa.observe(node, liveCallbacks(opts, () => current));\n\n return {\n update(next = {}) {\n current = next;\n const record = sa.getObservedElements().find((r) => r.element === node);\n if (record && !record.animated) {\n const { instance: _ignored, ...nextOpts } = next;\n sa.unobserve(node);\n sa.observe(node, liveCallbacks(nextOpts, () => current));\n }\n },\n destroy() {\n sa.unobserve(node);\n },\n };\n}\n\n/** Stagger the children of `node` when it scrolls into view (`observeChildren: true` also animates children added later). */\nexport function scrollStagger(\n node: Element,\n options: ScrollStaggerActionOptions = {}\n): ActionReturn<ScrollStaggerActionOptions | undefined> {\n const { instance, ...opts } = options;\n const stop = staggerChildren(node, opts, getInstance(instance));\n return { destroy: stop };\n}\n"],"names":["createScrollAnimate","staggerChildren"],"mappings":";;;;;;AAAA;;;;;;;;;;;;AAYG;AAqBH,IAAI,MAAM,GAAiC,IAAI;AAC/C,MAAM,WAAW,GAAG,CAAC,GAA2B,KAAK,GAAG,IAAI,MAAM,KAAK,MAAM,GAAGA,wBAAmB,EAAE,CAAC;AAEtG,MAAM,SAAS,GAAG,CAAC,SAAS,EAAE,YAAY,EAAE,SAAS,EAAE,SAAS,EAAE,YAAY,CAAU;AAExF;AACA,SAAS,aAAa,CAAC,IAAoB,EAAE,MAA4B,EAAA;AACvE,IAAA,MAAM,GAAG,GAAmB,EAAE,GAAG,IAAI,EAAE;AACvC,IAAA,SAAS,CAAC,OAAO,CAAC,CAAC,IAAI,KAAI;AACzB,QAAA,IAAI,OAAO,IAAI,CAAC,IAAI,CAAC,KAAK,UAAU;YAAG,GAAW,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,IAAe,KAAM,MAAM,EAAE,CAAC,IAAI,CAAS,GAAG,GAAG,IAAI,CAAC;AACvH,IAAA,CAAC,CAAC;AACF,IAAA,OAAO,GAAG;AACZ;AAEA;;;;AAIG;SACa,aAAa,CAC3B,IAAa,EACb,UAAsC,EAAE,EAAA;IAExC,IAAI,OAAO,GAAG,OAAO;IACrB,MAAM,EAAE,QAAQ,EAAE,GAAG,IAAI,EAAE,GAAG,OAAO;AACrC,IAAA,MAAM,EAAE,GAAG,WAAW,CAAC,QAAQ,CAAC;AAChC,IAAA,EAAE,CAAC,OAAO,CAAC,IAAI,EAAE,aAAa,CAAC,IAAI,EAAE,MAAM,OAAO,CAAC,CAAC;IAEpD,OAAO;QACL,MAAM,CAAC,IAAI,GAAG,EAAE,EAAA;YACd,OAAO,GAAG,IAAI;YACd,MAAM,MAAM,GAAG,EAAE,CAAC,mBAAmB,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,OAAO,KAAK,IAAI,CAAC;AACvE,YAAA,IAAI,MAAM,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE;gBAC9B,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,GAAG,QAAQ,EAAE,GAAG,IAAI;AAChD,gBAAA,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC;AAClB,gBAAA,EAAE,CAAC,OAAO,CAAC,IAAI,EAAE,aAAa,CAAC,QAAQ,EAAE,MAAM,OAAO,CAAC,CAAC;YAC1D;QACF,CAAC;QACD,OAAO,GAAA;AACL,YAAA,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC;QACpB,CAAC;KACF;AACH;AAEA;SACgB,aAAa,CAC3B,IAAa,EACb,UAAsC,EAAE,EAAA;IAExC,MAAM,EAAE,QAAQ,EAAE,GAAG,IAAI,EAAE,GAAG,OAAO;AACrC,IAAA,MAAM,IAAI,GAAGC,uBAAe,CAAC,IAAI,EAAE,IAAI,EAAE,WAAW,CAAC,QAAQ,CAAC,CAAC;AAC/D,IAAA,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE;AAC1B;;;;;"}
|