use-scroll-animate 6.0.1 → 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.
Files changed (81) hide show
  1. package/CHANGELOG.md +20 -0
  2. package/README.md +39 -1
  3. package/README_ja.md +31 -0
  4. package/README_zh.md +31 -0
  5. package/dist/chunks/{core-mV_TPgG_.js → core-BVQW34aX.js} +10 -202
  6. package/dist/chunks/core-BVQW34aX.js.map +1 -0
  7. package/dist/chunks/{core-qpECfEkb.cjs → core-BYLtO0Po.cjs} +13 -209
  8. package/dist/chunks/core-BYLtO0Po.cjs.map +1 -0
  9. package/dist/chunks/presets-BJ09NeTo.js +226 -0
  10. package/dist/chunks/presets-BJ09NeTo.js.map +1 -0
  11. package/dist/chunks/presets-D2ksQNzJ.cjs +233 -0
  12. package/dist/chunks/presets-D2ksQNzJ.cjs.map +1 -0
  13. package/dist/chunks/{stagger-CLc3j58T.cjs → stagger-CvhYlKrF.cjs} +2 -2
  14. package/dist/chunks/{stagger-CLc3j58T.cjs.map → stagger-CvhYlKrF.cjs.map} +1 -1
  15. package/dist/chunks/{stagger-BFAhKknX.js → stagger-Dh4V-OL0.js} +2 -2
  16. package/dist/chunks/{stagger-BFAhKknX.js.map → stagger-Dh4V-OL0.js.map} +1 -1
  17. package/dist/components/lite.cjs +4 -0
  18. package/dist/components/lite.cjs.map +1 -1
  19. package/dist/components/lite.js +4 -0
  20. package/dist/components/lite.js.map +1 -1
  21. package/dist/components/reveal.cjs +4 -0
  22. package/dist/components/reveal.cjs.map +1 -1
  23. package/dist/components/reveal.js +4 -0
  24. package/dist/components/reveal.js.map +1 -1
  25. package/dist/components.umd.js +2 -2
  26. package/dist/components.umd.js.map +1 -1
  27. package/dist/element.cjs +2 -1
  28. package/dist/element.cjs.map +1 -1
  29. package/dist/element.d.cts +16 -2
  30. package/dist/element.d.ts +16 -2
  31. package/dist/element.js +2 -1
  32. package/dist/element.js.map +1 -1
  33. package/dist/element.umd.js +1 -1
  34. package/dist/element.umd.js.map +1 -1
  35. package/dist/index.cjs +22 -19
  36. package/dist/index.cjs.map +1 -1
  37. package/dist/index.d.cts +34 -9
  38. package/dist/index.d.ts +34 -9
  39. package/dist/index.js +4 -3
  40. package/dist/index.js.map +1 -1
  41. package/dist/index.umd.js +2 -2
  42. package/dist/index.umd.js.map +1 -1
  43. package/dist/presets/extended.cjs +243 -0
  44. package/dist/presets/extended.cjs.map +1 -0
  45. package/dist/presets/extended.d.cts +37 -0
  46. package/dist/presets/extended.d.ts +37 -0
  47. package/dist/presets/extended.js +239 -0
  48. package/dist/presets/extended.js.map +1 -0
  49. package/dist/presets-extended.umd.js +2 -0
  50. package/dist/presets-extended.umd.js.map +1 -0
  51. package/dist/react.cjs +3 -2
  52. package/dist/react.cjs.map +1 -1
  53. package/dist/react.d.cts +16 -2
  54. package/dist/react.d.ts +16 -2
  55. package/dist/react.js +3 -2
  56. package/dist/react.js.map +1 -1
  57. package/dist/solid.cjs +3 -2
  58. package/dist/solid.cjs.map +1 -1
  59. package/dist/solid.d.cts +16 -2
  60. package/dist/solid.d.ts +16 -2
  61. package/dist/solid.js +3 -2
  62. package/dist/solid.js.map +1 -1
  63. package/dist/svelte.cjs +3 -2
  64. package/dist/svelte.cjs.map +1 -1
  65. package/dist/svelte.d.cts +16 -2
  66. package/dist/svelte.d.ts +16 -2
  67. package/dist/svelte.js +3 -2
  68. package/dist/svelte.js.map +1 -1
  69. package/dist/vue.cjs +3 -2
  70. package/dist/vue.cjs.map +1 -1
  71. package/dist/vue.d.cts +16 -2
  72. package/dist/vue.d.ts +16 -2
  73. package/dist/vue.js +3 -2
  74. package/dist/vue.js.map +1 -1
  75. package/docs/API.md +7 -2
  76. package/docs/ROADMAP.md +12 -11
  77. package/docs/components.md +1 -1
  78. package/docs/presets.md +310 -0
  79. package/package.json +15 -2
  80. package/dist/chunks/core-mV_TPgG_.js.map +0 -1
  81. package/dist/chunks/core-qpECfEkb.cjs.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"presets-BJ09NeTo.js","sources":["../../src/presets.ts"],"sourcesContent":["/**\n * use-scroll-animate - Animation Presets\n * Defines keyframes for all built-in animation presets\n */\n\nimport type { AnimationPreset, CorePreset, CustomAnimation, EasingType, ExtendedPreset, PresetKeyframes } from './types';\n\ntype KeyframeMap = PresetKeyframes;\n\nconst CORE: Record<CorePreset, KeyframeMap> = {\n 'fade-in': {\n from: { opacity: 0 },\n to: { opacity: 1 },\n },\n 'fade-in-up': {\n from: { opacity: 0, transform: 'translateY(40px)' },\n to: { opacity: 1, transform: 'translateY(0px)' },\n },\n 'fade-in-down': {\n from: { opacity: 0, transform: 'translateY(-40px)' },\n to: { opacity: 1, transform: 'translateY(0px)' },\n },\n 'fade-in-left': {\n from: { opacity: 0, transform: 'translateX(-40px)' },\n to: { opacity: 1, transform: 'translateX(0px)' },\n },\n 'fade-in-right': {\n from: { opacity: 0, transform: 'translateX(40px)' },\n to: { opacity: 1, transform: 'translateX(0px)' },\n },\n 'zoom-in': {\n from: { opacity: 0, transform: 'scale(0.8)' },\n to: { opacity: 1, transform: 'scale(1)' },\n },\n 'zoom-out': {\n from: { opacity: 0, transform: 'scale(1.2)' },\n to: { opacity: 1, transform: 'scale(1)' },\n },\n 'flip-x': {\n from: { opacity: 0, transform: 'rotateX(-90deg)' },\n to: { opacity: 1, transform: 'rotateX(0deg)' },\n },\n 'flip-y': {\n from: { opacity: 0, transform: 'rotateY(-90deg)' },\n to: { opacity: 1, transform: 'rotateY(0deg)' },\n },\n 'slide-up': {\n from: { transform: 'translateY(100%)' },\n to: { transform: 'translateY(0px)' },\n },\n 'slide-down': {\n from: { transform: 'translateY(-100%)' },\n to: { transform: 'translateY(0px)' },\n },\n 'slide-left': {\n from: { transform: 'translateX(-100%)' },\n to: { transform: 'translateX(0px)' },\n },\n 'slide-right': {\n from: { transform: 'translateX(100%)' },\n to: { transform: 'translateX(0px)' },\n },\n 'bounce': {\n from: { opacity: 0, transform: 'translateY(-60px)' },\n to: { opacity: 1, transform: 'translateY(0px)' },\n },\n 'rotate-in': {\n from: { opacity: 0, transform: 'rotate(-180deg) scale(0.5)' },\n to: { opacity: 1, transform: 'rotate(0deg) scale(1)' },\n },\n 'blur-in': {\n from: { opacity: 0, filter: 'blur(12px)' },\n to: { opacity: 1, filter: 'blur(0px)' },\n },\n 'skew-in': {\n from: { opacity: 0, transform: 'skewX(20deg) translateX(30px)' },\n to: { opacity: 1, transform: 'skewX(0deg) translateX(0px)' },\n },\n 'scale-x': {\n from: { transform: 'scaleX(0)' },\n to: { transform: 'scaleX(1)' },\n },\n 'scale-y': {\n from: { transform: 'scaleY(0)' },\n to: { transform: 'scaleY(1)' },\n },\n 'shimmer': {\n from: { opacity: 0.5, filter: 'brightness(1)' },\n to: { opacity: 1, filter: 'brightness(1.5)' },\n },\n 'pulse': {\n from: { transform: 'scale(1)' },\n to: { transform: 'scale(1.05)' },\n },\n 'swing': {\n from: { transform: 'rotate(-10deg)' },\n to: { transform: 'rotate(10deg)' },\n },\n 'scale-up': {\n from: { opacity: 0, transform: 'scale(0.5)' },\n to: { opacity: 1, transform: 'scale(1)' },\n },\n 'blur-in-up': {\n from: { opacity: 0, filter: 'blur(12px)', transform: 'translateY(40px)' },\n to: { opacity: 1, filter: 'blur(0px)', transform: 'translateY(0px)' },\n },\n 'flip-up': {\n from: { opacity: 0, transform: 'perspective(800px) rotateX(60deg)' },\n to: { opacity: 1, transform: 'perspective(800px) rotateX(0deg)' },\n },\n 'flip-down': {\n from: { opacity: 0, transform: 'perspective(800px) rotateX(-60deg)' },\n to: { opacity: 1, transform: 'perspective(800px) rotateX(0deg)' },\n },\n 'rotate-left': {\n from: { opacity: 0, transform: 'rotate(-15deg) translateX(-40px)' },\n to: { opacity: 1, transform: 'rotate(0deg) translateX(0px)' },\n },\n 'rotate-right': {\n from: { opacity: 0, transform: 'rotate(15deg) translateX(40px)' },\n to: { opacity: 1, transform: 'rotate(0deg) translateX(0px)' },\n },\n // clip-path reveals: content is uncovered without moving or fading\n 'clip-up': {\n from: { clipPath: 'inset(100% 0% 0% 0%)' },\n to: { clipPath: 'inset(0% 0% 0% 0%)' },\n },\n 'clip-down': {\n from: { clipPath: 'inset(0% 0% 100% 0%)' },\n to: { clipPath: 'inset(0% 0% 0% 0%)' },\n },\n 'clip-left': {\n from: { clipPath: 'inset(0% 0% 0% 100%)' },\n to: { clipPath: 'inset(0% 0% 0% 0%)' },\n },\n 'clip-right': {\n from: { clipPath: 'inset(0% 100% 0% 0%)' },\n to: { clipPath: 'inset(0% 0% 0% 0%)' },\n },\n 'clip-circle': {\n from: { clipPath: 'circle(0% at 50% 50%)' },\n to: { clipPath: 'circle(75% at 50% 50%)' },\n },\n};\n\n/**\n * One preset table per page, shared through a global symbol so every copy of\n * the library (ESM entries, the UMD bundle, `presets/extended`) sees presets\n * registered by any other copy. `<usa-reveal>` / `<usa-stagger>` read it too.\n */\nconst share = (core: Record<string, KeyframeMap>): Record<string, KeyframeMap> => {\n const g = globalThis as any;\n const key = Symbol.for('use-scroll-animate.presets');\n return (g[key] = Object.assign(g[key] || {}, core));\n};\n\n/**\n * Every registered preset: the 33 core presets, plus the 6.1 extended set once\n * `use-scroll-animate/presets/extended` is loaded, plus your own.\n */\nexport const PRESETS = /*#__PURE__*/ share(CORE) as Record<CorePreset, KeyframeMap> & Partial<Record<ExtendedPreset, KeyframeMap>>;\n\n/**\n * Add (or replace) presets by name: `registerPresets({ 'my-pop': { from, to, frames? } })`.\n * They work everywhere a preset name does (`animation`, `exit`, `data-sa-animation`,\n * `<scroll-animate>`, `<usa-reveal effect>`).\n */\nexport function registerPresets(presets: Record<string, PresetKeyframes>): void {\n Object.assign(PRESETS, presets);\n}\n\n/** The same keyframes played backwards (exit animations). */\nexport function reversePreset(p: KeyframeMap): KeyframeMap {\n return { from: p.to, to: p.from, frames: p.frames && p.frames.map((f) => ({ ...f, offset: 1 - f.offset })).reverse() };\n}\n\nconst lookup = (name: string): KeyframeMap | undefined => (PRESETS as Record<string, KeyframeMap>)[name.trim()];\n\nexport function resolvePreset(animation: AnimationPreset | AnimationPreset[] | CustomAnimation): KeyframeMap {\n if (typeof animation === 'string') {\n return lookup(animation) ?? PRESETS['fade-in-up'];\n }\n \n if (Array.isArray(animation)) {\n const combined: KeyframeMap = { from: {}, to: {} };\n animation.forEach(name => {\n const preset = lookup(name);\n if (preset) {\n Object.entries(preset.from).forEach(([key, val]) => {\n if (key === 'transform' && combined.from[key]) {\n combined.from[key] = `${combined.from[key]} ${val}`;\n } else {\n combined.from[key] = val;\n }\n });\n Object.entries(preset.to).forEach(([key, val]) => {\n if (key === 'transform' && combined.to[key]) {\n combined.to[key] = `${combined.to[key]} ${val}`;\n } else {\n combined.to[key] = val;\n }\n });\n }\n });\n return combined;\n }\n \n return animation;\n}\n\n/** Easing to CSS cubic-bezier mapping */\nexport const EASING_MAP: Record<string, string> = {\n linear: 'linear',\n ease: 'ease',\n 'ease-in': 'ease-in',\n 'ease-out': 'ease-out',\n 'ease-in-out': 'ease-in-out',\n spring: 'cubic-bezier(0.34, 1.56, 0.64, 1)',\n 'soft-spring': 'cubic-bezier(0.175, 0.885, 0.32, 1.275)',\n 'heavy-bounce': 'cubic-bezier(0.68, -0.55, 0.265, 1.55)',\n};\n\nexport function resolveEasing(easing: EasingType): string {\n if (typeof easing === 'string') {\n return EASING_MAP[easing] ?? easing;\n }\n if (Array.isArray(easing)) {\n return `cubic-bezier(${easing.join(', ')})`;\n }\n if (typeof easing === 'function') {\n // Functions cannot be expressed as a CSS easing string; the core samples\n // them into a `linear()` easing (or keyframes on older browsers).\n return 'linear';\n }\n return 'ease';\n}\n"],"names":[],"mappings":"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"}
@@ -0,0 +1,233 @@
1
+ 'use strict';
2
+
3
+ /**
4
+ * use-scroll-animate - Animation Presets
5
+ * Defines keyframes for all built-in animation presets
6
+ */
7
+ const CORE = {
8
+ 'fade-in': {
9
+ from: { opacity: 0 },
10
+ to: { opacity: 1 },
11
+ },
12
+ 'fade-in-up': {
13
+ from: { opacity: 0, transform: 'translateY(40px)' },
14
+ to: { opacity: 1, transform: 'translateY(0px)' },
15
+ },
16
+ 'fade-in-down': {
17
+ from: { opacity: 0, transform: 'translateY(-40px)' },
18
+ to: { opacity: 1, transform: 'translateY(0px)' },
19
+ },
20
+ 'fade-in-left': {
21
+ from: { opacity: 0, transform: 'translateX(-40px)' },
22
+ to: { opacity: 1, transform: 'translateX(0px)' },
23
+ },
24
+ 'fade-in-right': {
25
+ from: { opacity: 0, transform: 'translateX(40px)' },
26
+ to: { opacity: 1, transform: 'translateX(0px)' },
27
+ },
28
+ 'zoom-in': {
29
+ from: { opacity: 0, transform: 'scale(0.8)' },
30
+ to: { opacity: 1, transform: 'scale(1)' },
31
+ },
32
+ 'zoom-out': {
33
+ from: { opacity: 0, transform: 'scale(1.2)' },
34
+ to: { opacity: 1, transform: 'scale(1)' },
35
+ },
36
+ 'flip-x': {
37
+ from: { opacity: 0, transform: 'rotateX(-90deg)' },
38
+ to: { opacity: 1, transform: 'rotateX(0deg)' },
39
+ },
40
+ 'flip-y': {
41
+ from: { opacity: 0, transform: 'rotateY(-90deg)' },
42
+ to: { opacity: 1, transform: 'rotateY(0deg)' },
43
+ },
44
+ 'slide-up': {
45
+ from: { transform: 'translateY(100%)' },
46
+ to: { transform: 'translateY(0px)' },
47
+ },
48
+ 'slide-down': {
49
+ from: { transform: 'translateY(-100%)' },
50
+ to: { transform: 'translateY(0px)' },
51
+ },
52
+ 'slide-left': {
53
+ from: { transform: 'translateX(-100%)' },
54
+ to: { transform: 'translateX(0px)' },
55
+ },
56
+ 'slide-right': {
57
+ from: { transform: 'translateX(100%)' },
58
+ to: { transform: 'translateX(0px)' },
59
+ },
60
+ 'bounce': {
61
+ from: { opacity: 0, transform: 'translateY(-60px)' },
62
+ to: { opacity: 1, transform: 'translateY(0px)' },
63
+ },
64
+ 'rotate-in': {
65
+ from: { opacity: 0, transform: 'rotate(-180deg) scale(0.5)' },
66
+ to: { opacity: 1, transform: 'rotate(0deg) scale(1)' },
67
+ },
68
+ 'blur-in': {
69
+ from: { opacity: 0, filter: 'blur(12px)' },
70
+ to: { opacity: 1, filter: 'blur(0px)' },
71
+ },
72
+ 'skew-in': {
73
+ from: { opacity: 0, transform: 'skewX(20deg) translateX(30px)' },
74
+ to: { opacity: 1, transform: 'skewX(0deg) translateX(0px)' },
75
+ },
76
+ 'scale-x': {
77
+ from: { transform: 'scaleX(0)' },
78
+ to: { transform: 'scaleX(1)' },
79
+ },
80
+ 'scale-y': {
81
+ from: { transform: 'scaleY(0)' },
82
+ to: { transform: 'scaleY(1)' },
83
+ },
84
+ 'shimmer': {
85
+ from: { opacity: 0.5, filter: 'brightness(1)' },
86
+ to: { opacity: 1, filter: 'brightness(1.5)' },
87
+ },
88
+ 'pulse': {
89
+ from: { transform: 'scale(1)' },
90
+ to: { transform: 'scale(1.05)' },
91
+ },
92
+ 'swing': {
93
+ from: { transform: 'rotate(-10deg)' },
94
+ to: { transform: 'rotate(10deg)' },
95
+ },
96
+ 'scale-up': {
97
+ from: { opacity: 0, transform: 'scale(0.5)' },
98
+ to: { opacity: 1, transform: 'scale(1)' },
99
+ },
100
+ 'blur-in-up': {
101
+ from: { opacity: 0, filter: 'blur(12px)', transform: 'translateY(40px)' },
102
+ to: { opacity: 1, filter: 'blur(0px)', transform: 'translateY(0px)' },
103
+ },
104
+ 'flip-up': {
105
+ from: { opacity: 0, transform: 'perspective(800px) rotateX(60deg)' },
106
+ to: { opacity: 1, transform: 'perspective(800px) rotateX(0deg)' },
107
+ },
108
+ 'flip-down': {
109
+ from: { opacity: 0, transform: 'perspective(800px) rotateX(-60deg)' },
110
+ to: { opacity: 1, transform: 'perspective(800px) rotateX(0deg)' },
111
+ },
112
+ 'rotate-left': {
113
+ from: { opacity: 0, transform: 'rotate(-15deg) translateX(-40px)' },
114
+ to: { opacity: 1, transform: 'rotate(0deg) translateX(0px)' },
115
+ },
116
+ 'rotate-right': {
117
+ from: { opacity: 0, transform: 'rotate(15deg) translateX(40px)' },
118
+ to: { opacity: 1, transform: 'rotate(0deg) translateX(0px)' },
119
+ },
120
+ // clip-path reveals: content is uncovered without moving or fading
121
+ 'clip-up': {
122
+ from: { clipPath: 'inset(100% 0% 0% 0%)' },
123
+ to: { clipPath: 'inset(0% 0% 0% 0%)' },
124
+ },
125
+ 'clip-down': {
126
+ from: { clipPath: 'inset(0% 0% 100% 0%)' },
127
+ to: { clipPath: 'inset(0% 0% 0% 0%)' },
128
+ },
129
+ 'clip-left': {
130
+ from: { clipPath: 'inset(0% 0% 0% 100%)' },
131
+ to: { clipPath: 'inset(0% 0% 0% 0%)' },
132
+ },
133
+ 'clip-right': {
134
+ from: { clipPath: 'inset(0% 100% 0% 0%)' },
135
+ to: { clipPath: 'inset(0% 0% 0% 0%)' },
136
+ },
137
+ 'clip-circle': {
138
+ from: { clipPath: 'circle(0% at 50% 50%)' },
139
+ to: { clipPath: 'circle(75% at 50% 50%)' },
140
+ },
141
+ };
142
+ /**
143
+ * One preset table per page, shared through a global symbol so every copy of
144
+ * the library (ESM entries, the UMD bundle, `presets/extended`) sees presets
145
+ * registered by any other copy. `<usa-reveal>` / `<usa-stagger>` read it too.
146
+ */
147
+ const share = (core) => {
148
+ const g = globalThis;
149
+ const key = Symbol.for('use-scroll-animate.presets');
150
+ return (g[key] = Object.assign(g[key] || {}, core));
151
+ };
152
+ /**
153
+ * Every registered preset: the 33 core presets, plus the 6.1 extended set once
154
+ * `use-scroll-animate/presets/extended` is loaded, plus your own.
155
+ */
156
+ const PRESETS = /*#__PURE__*/ share(CORE);
157
+ /**
158
+ * Add (or replace) presets by name: `registerPresets({ 'my-pop': { from, to, frames? } })`.
159
+ * They work everywhere a preset name does (`animation`, `exit`, `data-sa-animation`,
160
+ * `<scroll-animate>`, `<usa-reveal effect>`).
161
+ */
162
+ function registerPresets(presets) {
163
+ Object.assign(PRESETS, presets);
164
+ }
165
+ /** The same keyframes played backwards (exit animations). */
166
+ function reversePreset(p) {
167
+ return { from: p.to, to: p.from, frames: p.frames && p.frames.map((f) => ({ ...f, offset: 1 - f.offset })).reverse() };
168
+ }
169
+ const lookup = (name) => PRESETS[name.trim()];
170
+ function resolvePreset(animation) {
171
+ if (typeof animation === 'string') {
172
+ return lookup(animation) ?? PRESETS['fade-in-up'];
173
+ }
174
+ if (Array.isArray(animation)) {
175
+ const combined = { from: {}, to: {} };
176
+ animation.forEach(name => {
177
+ const preset = lookup(name);
178
+ if (preset) {
179
+ Object.entries(preset.from).forEach(([key, val]) => {
180
+ if (key === 'transform' && combined.from[key]) {
181
+ combined.from[key] = `${combined.from[key]} ${val}`;
182
+ }
183
+ else {
184
+ combined.from[key] = val;
185
+ }
186
+ });
187
+ Object.entries(preset.to).forEach(([key, val]) => {
188
+ if (key === 'transform' && combined.to[key]) {
189
+ combined.to[key] = `${combined.to[key]} ${val}`;
190
+ }
191
+ else {
192
+ combined.to[key] = val;
193
+ }
194
+ });
195
+ }
196
+ });
197
+ return combined;
198
+ }
199
+ return animation;
200
+ }
201
+ /** Easing to CSS cubic-bezier mapping */
202
+ const EASING_MAP = {
203
+ linear: 'linear',
204
+ ease: 'ease',
205
+ 'ease-in': 'ease-in',
206
+ 'ease-out': 'ease-out',
207
+ 'ease-in-out': 'ease-in-out',
208
+ spring: 'cubic-bezier(0.34, 1.56, 0.64, 1)',
209
+ 'soft-spring': 'cubic-bezier(0.175, 0.885, 0.32, 1.275)',
210
+ 'heavy-bounce': 'cubic-bezier(0.68, -0.55, 0.265, 1.55)',
211
+ };
212
+ function resolveEasing(easing) {
213
+ if (typeof easing === 'string') {
214
+ return EASING_MAP[easing] ?? easing;
215
+ }
216
+ if (Array.isArray(easing)) {
217
+ return `cubic-bezier(${easing.join(', ')})`;
218
+ }
219
+ if (typeof easing === 'function') {
220
+ // Functions cannot be expressed as a CSS easing string; the core samples
221
+ // them into a `linear()` easing (or keyframes on older browsers).
222
+ return 'linear';
223
+ }
224
+ return 'ease';
225
+ }
226
+
227
+ exports.EASING_MAP = EASING_MAP;
228
+ exports.PRESETS = PRESETS;
229
+ exports.registerPresets = registerPresets;
230
+ exports.resolveEasing = resolveEasing;
231
+ exports.resolvePreset = resolvePreset;
232
+ exports.reversePreset = reversePreset;
233
+ //# sourceMappingURL=presets-D2ksQNzJ.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"presets-D2ksQNzJ.cjs","sources":["../../src/presets.ts"],"sourcesContent":["/**\n * use-scroll-animate - Animation Presets\n * Defines keyframes for all built-in animation presets\n */\n\nimport type { AnimationPreset, CorePreset, CustomAnimation, EasingType, ExtendedPreset, PresetKeyframes } from './types';\n\ntype KeyframeMap = PresetKeyframes;\n\nconst CORE: Record<CorePreset, KeyframeMap> = {\n 'fade-in': {\n from: { opacity: 0 },\n to: { opacity: 1 },\n },\n 'fade-in-up': {\n from: { opacity: 0, transform: 'translateY(40px)' },\n to: { opacity: 1, transform: 'translateY(0px)' },\n },\n 'fade-in-down': {\n from: { opacity: 0, transform: 'translateY(-40px)' },\n to: { opacity: 1, transform: 'translateY(0px)' },\n },\n 'fade-in-left': {\n from: { opacity: 0, transform: 'translateX(-40px)' },\n to: { opacity: 1, transform: 'translateX(0px)' },\n },\n 'fade-in-right': {\n from: { opacity: 0, transform: 'translateX(40px)' },\n to: { opacity: 1, transform: 'translateX(0px)' },\n },\n 'zoom-in': {\n from: { opacity: 0, transform: 'scale(0.8)' },\n to: { opacity: 1, transform: 'scale(1)' },\n },\n 'zoom-out': {\n from: { opacity: 0, transform: 'scale(1.2)' },\n to: { opacity: 1, transform: 'scale(1)' },\n },\n 'flip-x': {\n from: { opacity: 0, transform: 'rotateX(-90deg)' },\n to: { opacity: 1, transform: 'rotateX(0deg)' },\n },\n 'flip-y': {\n from: { opacity: 0, transform: 'rotateY(-90deg)' },\n to: { opacity: 1, transform: 'rotateY(0deg)' },\n },\n 'slide-up': {\n from: { transform: 'translateY(100%)' },\n to: { transform: 'translateY(0px)' },\n },\n 'slide-down': {\n from: { transform: 'translateY(-100%)' },\n to: { transform: 'translateY(0px)' },\n },\n 'slide-left': {\n from: { transform: 'translateX(-100%)' },\n to: { transform: 'translateX(0px)' },\n },\n 'slide-right': {\n from: { transform: 'translateX(100%)' },\n to: { transform: 'translateX(0px)' },\n },\n 'bounce': {\n from: { opacity: 0, transform: 'translateY(-60px)' },\n to: { opacity: 1, transform: 'translateY(0px)' },\n },\n 'rotate-in': {\n from: { opacity: 0, transform: 'rotate(-180deg) scale(0.5)' },\n to: { opacity: 1, transform: 'rotate(0deg) scale(1)' },\n },\n 'blur-in': {\n from: { opacity: 0, filter: 'blur(12px)' },\n to: { opacity: 1, filter: 'blur(0px)' },\n },\n 'skew-in': {\n from: { opacity: 0, transform: 'skewX(20deg) translateX(30px)' },\n to: { opacity: 1, transform: 'skewX(0deg) translateX(0px)' },\n },\n 'scale-x': {\n from: { transform: 'scaleX(0)' },\n to: { transform: 'scaleX(1)' },\n },\n 'scale-y': {\n from: { transform: 'scaleY(0)' },\n to: { transform: 'scaleY(1)' },\n },\n 'shimmer': {\n from: { opacity: 0.5, filter: 'brightness(1)' },\n to: { opacity: 1, filter: 'brightness(1.5)' },\n },\n 'pulse': {\n from: { transform: 'scale(1)' },\n to: { transform: 'scale(1.05)' },\n },\n 'swing': {\n from: { transform: 'rotate(-10deg)' },\n to: { transform: 'rotate(10deg)' },\n },\n 'scale-up': {\n from: { opacity: 0, transform: 'scale(0.5)' },\n to: { opacity: 1, transform: 'scale(1)' },\n },\n 'blur-in-up': {\n from: { opacity: 0, filter: 'blur(12px)', transform: 'translateY(40px)' },\n to: { opacity: 1, filter: 'blur(0px)', transform: 'translateY(0px)' },\n },\n 'flip-up': {\n from: { opacity: 0, transform: 'perspective(800px) rotateX(60deg)' },\n to: { opacity: 1, transform: 'perspective(800px) rotateX(0deg)' },\n },\n 'flip-down': {\n from: { opacity: 0, transform: 'perspective(800px) rotateX(-60deg)' },\n to: { opacity: 1, transform: 'perspective(800px) rotateX(0deg)' },\n },\n 'rotate-left': {\n from: { opacity: 0, transform: 'rotate(-15deg) translateX(-40px)' },\n to: { opacity: 1, transform: 'rotate(0deg) translateX(0px)' },\n },\n 'rotate-right': {\n from: { opacity: 0, transform: 'rotate(15deg) translateX(40px)' },\n to: { opacity: 1, transform: 'rotate(0deg) translateX(0px)' },\n },\n // clip-path reveals: content is uncovered without moving or fading\n 'clip-up': {\n from: { clipPath: 'inset(100% 0% 0% 0%)' },\n to: { clipPath: 'inset(0% 0% 0% 0%)' },\n },\n 'clip-down': {\n from: { clipPath: 'inset(0% 0% 100% 0%)' },\n to: { clipPath: 'inset(0% 0% 0% 0%)' },\n },\n 'clip-left': {\n from: { clipPath: 'inset(0% 0% 0% 100%)' },\n to: { clipPath: 'inset(0% 0% 0% 0%)' },\n },\n 'clip-right': {\n from: { clipPath: 'inset(0% 100% 0% 0%)' },\n to: { clipPath: 'inset(0% 0% 0% 0%)' },\n },\n 'clip-circle': {\n from: { clipPath: 'circle(0% at 50% 50%)' },\n to: { clipPath: 'circle(75% at 50% 50%)' },\n },\n};\n\n/**\n * One preset table per page, shared through a global symbol so every copy of\n * the library (ESM entries, the UMD bundle, `presets/extended`) sees presets\n * registered by any other copy. `<usa-reveal>` / `<usa-stagger>` read it too.\n */\nconst share = (core: Record<string, KeyframeMap>): Record<string, KeyframeMap> => {\n const g = globalThis as any;\n const key = Symbol.for('use-scroll-animate.presets');\n return (g[key] = Object.assign(g[key] || {}, core));\n};\n\n/**\n * Every registered preset: the 33 core presets, plus the 6.1 extended set once\n * `use-scroll-animate/presets/extended` is loaded, plus your own.\n */\nexport const PRESETS = /*#__PURE__*/ share(CORE) as Record<CorePreset, KeyframeMap> & Partial<Record<ExtendedPreset, KeyframeMap>>;\n\n/**\n * Add (or replace) presets by name: `registerPresets({ 'my-pop': { from, to, frames? } })`.\n * They work everywhere a preset name does (`animation`, `exit`, `data-sa-animation`,\n * `<scroll-animate>`, `<usa-reveal effect>`).\n */\nexport function registerPresets(presets: Record<string, PresetKeyframes>): void {\n Object.assign(PRESETS, presets);\n}\n\n/** The same keyframes played backwards (exit animations). */\nexport function reversePreset(p: KeyframeMap): KeyframeMap {\n return { from: p.to, to: p.from, frames: p.frames && p.frames.map((f) => ({ ...f, offset: 1 - f.offset })).reverse() };\n}\n\nconst lookup = (name: string): KeyframeMap | undefined => (PRESETS as Record<string, KeyframeMap>)[name.trim()];\n\nexport function resolvePreset(animation: AnimationPreset | AnimationPreset[] | CustomAnimation): KeyframeMap {\n if (typeof animation === 'string') {\n return lookup(animation) ?? PRESETS['fade-in-up'];\n }\n \n if (Array.isArray(animation)) {\n const combined: KeyframeMap = { from: {}, to: {} };\n animation.forEach(name => {\n const preset = lookup(name);\n if (preset) {\n Object.entries(preset.from).forEach(([key, val]) => {\n if (key === 'transform' && combined.from[key]) {\n combined.from[key] = `${combined.from[key]} ${val}`;\n } else {\n combined.from[key] = val;\n }\n });\n Object.entries(preset.to).forEach(([key, val]) => {\n if (key === 'transform' && combined.to[key]) {\n combined.to[key] = `${combined.to[key]} ${val}`;\n } else {\n combined.to[key] = val;\n }\n });\n }\n });\n return combined;\n }\n \n return animation;\n}\n\n/** Easing to CSS cubic-bezier mapping */\nexport const EASING_MAP: Record<string, string> = {\n linear: 'linear',\n ease: 'ease',\n 'ease-in': 'ease-in',\n 'ease-out': 'ease-out',\n 'ease-in-out': 'ease-in-out',\n spring: 'cubic-bezier(0.34, 1.56, 0.64, 1)',\n 'soft-spring': 'cubic-bezier(0.175, 0.885, 0.32, 1.275)',\n 'heavy-bounce': 'cubic-bezier(0.68, -0.55, 0.265, 1.55)',\n};\n\nexport function resolveEasing(easing: EasingType): string {\n if (typeof easing === 'string') {\n return EASING_MAP[easing] ?? easing;\n }\n if (Array.isArray(easing)) {\n return `cubic-bezier(${easing.join(', ')})`;\n }\n if (typeof easing === 'function') {\n // Functions cannot be expressed as a CSS easing string; the core samples\n // them into a `linear()` easing (or keyframes on older browsers).\n return 'linear';\n }\n return 'ease';\n}\n"],"names":[],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- var core = require('./core-qpECfEkb.cjs');
3
+ var core = require('./core-BYLtO0Po.cjs');
4
4
 
5
5
  /**
6
6
  * use-scroll-animate - Staggered children
@@ -83,4 +83,4 @@ function staggerChildren(container, options = {}, instance) {
83
83
  }
84
84
 
85
85
  exports.staggerChildren = staggerChildren;
86
- //# sourceMappingURL=stagger-CLc3j58T.cjs.map
86
+ //# sourceMappingURL=stagger-CvhYlKrF.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"stagger-CLc3j58T.cjs","sources":["../../src/stagger.ts"],"sourcesContent":["/**\n * use-scroll-animate - Staggered children\n * Reveal a container's children one after another when the container scrolls\n * into view, optionally also animating children that are added later.\n */\n\nimport type { AnimateOptions, ScrollAnimateInstance } from './types';\nimport { createScrollAnimate, hasDOM, prepareElement, stopAnimation, supportsObserver } from './core';\n\nexport interface StaggerOptions extends AnimateOptions {\n /** Delay between consecutive children in ms (default: 80) */\n stagger?: number;\n /**\n * Watch the container with a MutationObserver and animate children added\n * later (e.g. infinite lists). Children added after the container was\n * revealed animate when they scroll into view, staggered per batch.\n * (default: false)\n */\n observeChildren?: boolean;\n}\n\nlet fallback: ScrollAnimateInstance | null = null;\n\n/**\n * Animate the children of `container` with a stagger once it enters the\n * viewport. Returns a cleanup function. SSR-safe (no-op without a DOM).\n *\n * @example\n * const stop = staggerChildren(document.querySelector('ul'), { stagger: 60, observeChildren: true });\n */\nexport function staggerChildren(\n container: Element | null | undefined,\n options: StaggerOptions = {},\n instance?: ScrollAnimateInstance\n): () => void {\n if (!container || !hasDOM() || !supportsObserver()) return () => undefined; // leave content visible\n const sa = instance || fallback || (fallback = createScrollAnimate());\n const { stagger = 80, delay = 0, threshold = 0.1, rootMargin = '0px', observeChildren = false, ...rest } = options;\n\n let items = Array.from(container.children);\n let revealed = false;\n const late: Element[] = [];\n items.forEach((child) => prepareElement(child));\n\n const io = new IntersectionObserver(\n (entries) => {\n if (revealed || !entries.some((entry) => entry.isIntersecting)) return;\n revealed = true;\n io.disconnect();\n items.forEach((child, i) => {\n if (child.parentNode === container) sa.animate(child, { ...rest, delay: delay + i * stagger });\n });\n items = [];\n },\n { threshold, rootMargin }\n );\n io.observe(container);\n\n let mo: MutationObserver | undefined;\n if (observeChildren && typeof MutationObserver !== 'undefined') {\n mo = new MutationObserver((records) => {\n records.forEach((record) => {\n record.addedNodes.forEach((node) => {\n if (!(node instanceof Element) || node.parentNode !== container) return;\n if (!revealed) {\n prepareElement(node);\n items.push(node);\n } else {\n // The core engine staggers siblings relative to the batch that\n // enters the viewport together.\n late.push(node);\n sa.observe(node, { ...rest, delay, stagger, threshold, rootMargin });\n }\n });\n record.removedNodes.forEach((node) => {\n if (!(node instanceof Element)) return;\n items = items.filter((el) => el !== node);\n const i = late.indexOf(node);\n if (i >= 0) {\n late.splice(i, 1);\n sa.unobserve(node);\n }\n });\n });\n });\n mo.observe(container, { childList: true });\n }\n\n return () => {\n io.disconnect();\n mo?.disconnect();\n // Stopped before the container was revealed: never leave the children hidden.\n if (!revealed) {\n revealed = true;\n items.forEach((child) => stopAnimation(child));\n items = [];\n }\n late.forEach((el) => sa.unobserve(el));\n late.length = 0;\n };\n}\n"],"names":["hasDOM","supportsObserver","createScrollAnimate","prepareElement","stopAnimation"],"mappings":"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"}
1
+ {"version":3,"file":"stagger-CvhYlKrF.cjs","sources":["../../src/stagger.ts"],"sourcesContent":["/**\n * use-scroll-animate - Staggered children\n * Reveal a container's children one after another when the container scrolls\n * into view, optionally also animating children that are added later.\n */\n\nimport type { AnimateOptions, ScrollAnimateInstance } from './types';\nimport { createScrollAnimate, hasDOM, prepareElement, stopAnimation, supportsObserver } from './core';\n\nexport interface StaggerOptions extends AnimateOptions {\n /** Delay between consecutive children in ms (default: 80) */\n stagger?: number;\n /**\n * Watch the container with a MutationObserver and animate children added\n * later (e.g. infinite lists). Children added after the container was\n * revealed animate when they scroll into view, staggered per batch.\n * (default: false)\n */\n observeChildren?: boolean;\n}\n\nlet fallback: ScrollAnimateInstance | null = null;\n\n/**\n * Animate the children of `container` with a stagger once it enters the\n * viewport. Returns a cleanup function. SSR-safe (no-op without a DOM).\n *\n * @example\n * const stop = staggerChildren(document.querySelector('ul'), { stagger: 60, observeChildren: true });\n */\nexport function staggerChildren(\n container: Element | null | undefined,\n options: StaggerOptions = {},\n instance?: ScrollAnimateInstance\n): () => void {\n if (!container || !hasDOM() || !supportsObserver()) return () => undefined; // leave content visible\n const sa = instance || fallback || (fallback = createScrollAnimate());\n const { stagger = 80, delay = 0, threshold = 0.1, rootMargin = '0px', observeChildren = false, ...rest } = options;\n\n let items = Array.from(container.children);\n let revealed = false;\n const late: Element[] = [];\n items.forEach((child) => prepareElement(child));\n\n const io = new IntersectionObserver(\n (entries) => {\n if (revealed || !entries.some((entry) => entry.isIntersecting)) return;\n revealed = true;\n io.disconnect();\n items.forEach((child, i) => {\n if (child.parentNode === container) sa.animate(child, { ...rest, delay: delay + i * stagger });\n });\n items = [];\n },\n { threshold, rootMargin }\n );\n io.observe(container);\n\n let mo: MutationObserver | undefined;\n if (observeChildren && typeof MutationObserver !== 'undefined') {\n mo = new MutationObserver((records) => {\n records.forEach((record) => {\n record.addedNodes.forEach((node) => {\n if (!(node instanceof Element) || node.parentNode !== container) return;\n if (!revealed) {\n prepareElement(node);\n items.push(node);\n } else {\n // The core engine staggers siblings relative to the batch that\n // enters the viewport together.\n late.push(node);\n sa.observe(node, { ...rest, delay, stagger, threshold, rootMargin });\n }\n });\n record.removedNodes.forEach((node) => {\n if (!(node instanceof Element)) return;\n items = items.filter((el) => el !== node);\n const i = late.indexOf(node);\n if (i >= 0) {\n late.splice(i, 1);\n sa.unobserve(node);\n }\n });\n });\n });\n mo.observe(container, { childList: true });\n }\n\n return () => {\n io.disconnect();\n mo?.disconnect();\n // Stopped before the container was revealed: never leave the children hidden.\n if (!revealed) {\n revealed = true;\n items.forEach((child) => stopAnimation(child));\n items = [];\n }\n late.forEach((el) => sa.unobserve(el));\n late.length = 0;\n };\n}\n"],"names":["hasDOM","supportsObserver","createScrollAnimate","prepareElement","stopAnimation"],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import { h as hasDOM, s as supportsObserver, c as createScrollAnimate, p as prepareElement, a as stopAnimation } from './core-mV_TPgG_.js';
1
+ import { h as hasDOM, s as supportsObserver, c as createScrollAnimate, p as prepareElement, a as stopAnimation } from './core-BVQW34aX.js';
2
2
 
3
3
  /**
4
4
  * use-scroll-animate - Staggered children
@@ -81,4 +81,4 @@ function staggerChildren(container, options = {}, instance) {
81
81
  }
82
82
 
83
83
  export { staggerChildren as s };
84
- //# sourceMappingURL=stagger-BFAhKknX.js.map
84
+ //# sourceMappingURL=stagger-Dh4V-OL0.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"stagger-BFAhKknX.js","sources":["../../src/stagger.ts"],"sourcesContent":["/**\n * use-scroll-animate - Staggered children\n * Reveal a container's children one after another when the container scrolls\n * into view, optionally also animating children that are added later.\n */\n\nimport type { AnimateOptions, ScrollAnimateInstance } from './types';\nimport { createScrollAnimate, hasDOM, prepareElement, stopAnimation, supportsObserver } from './core';\n\nexport interface StaggerOptions extends AnimateOptions {\n /** Delay between consecutive children in ms (default: 80) */\n stagger?: number;\n /**\n * Watch the container with a MutationObserver and animate children added\n * later (e.g. infinite lists). Children added after the container was\n * revealed animate when they scroll into view, staggered per batch.\n * (default: false)\n */\n observeChildren?: boolean;\n}\n\nlet fallback: ScrollAnimateInstance | null = null;\n\n/**\n * Animate the children of `container` with a stagger once it enters the\n * viewport. Returns a cleanup function. SSR-safe (no-op without a DOM).\n *\n * @example\n * const stop = staggerChildren(document.querySelector('ul'), { stagger: 60, observeChildren: true });\n */\nexport function staggerChildren(\n container: Element | null | undefined,\n options: StaggerOptions = {},\n instance?: ScrollAnimateInstance\n): () => void {\n if (!container || !hasDOM() || !supportsObserver()) return () => undefined; // leave content visible\n const sa = instance || fallback || (fallback = createScrollAnimate());\n const { stagger = 80, delay = 0, threshold = 0.1, rootMargin = '0px', observeChildren = false, ...rest } = options;\n\n let items = Array.from(container.children);\n let revealed = false;\n const late: Element[] = [];\n items.forEach((child) => prepareElement(child));\n\n const io = new IntersectionObserver(\n (entries) => {\n if (revealed || !entries.some((entry) => entry.isIntersecting)) return;\n revealed = true;\n io.disconnect();\n items.forEach((child, i) => {\n if (child.parentNode === container) sa.animate(child, { ...rest, delay: delay + i * stagger });\n });\n items = [];\n },\n { threshold, rootMargin }\n );\n io.observe(container);\n\n let mo: MutationObserver | undefined;\n if (observeChildren && typeof MutationObserver !== 'undefined') {\n mo = new MutationObserver((records) => {\n records.forEach((record) => {\n record.addedNodes.forEach((node) => {\n if (!(node instanceof Element) || node.parentNode !== container) return;\n if (!revealed) {\n prepareElement(node);\n items.push(node);\n } else {\n // The core engine staggers siblings relative to the batch that\n // enters the viewport together.\n late.push(node);\n sa.observe(node, { ...rest, delay, stagger, threshold, rootMargin });\n }\n });\n record.removedNodes.forEach((node) => {\n if (!(node instanceof Element)) return;\n items = items.filter((el) => el !== node);\n const i = late.indexOf(node);\n if (i >= 0) {\n late.splice(i, 1);\n sa.unobserve(node);\n }\n });\n });\n });\n mo.observe(container, { childList: true });\n }\n\n return () => {\n io.disconnect();\n mo?.disconnect();\n // Stopped before the container was revealed: never leave the children hidden.\n if (!revealed) {\n revealed = true;\n items.forEach((child) => stopAnimation(child));\n items = [];\n }\n late.forEach((el) => sa.unobserve(el));\n late.length = 0;\n };\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"stagger-Dh4V-OL0.js","sources":["../../src/stagger.ts"],"sourcesContent":["/**\n * use-scroll-animate - Staggered children\n * Reveal a container's children one after another when the container scrolls\n * into view, optionally also animating children that are added later.\n */\n\nimport type { AnimateOptions, ScrollAnimateInstance } from './types';\nimport { createScrollAnimate, hasDOM, prepareElement, stopAnimation, supportsObserver } from './core';\n\nexport interface StaggerOptions extends AnimateOptions {\n /** Delay between consecutive children in ms (default: 80) */\n stagger?: number;\n /**\n * Watch the container with a MutationObserver and animate children added\n * later (e.g. infinite lists). Children added after the container was\n * revealed animate when they scroll into view, staggered per batch.\n * (default: false)\n */\n observeChildren?: boolean;\n}\n\nlet fallback: ScrollAnimateInstance | null = null;\n\n/**\n * Animate the children of `container` with a stagger once it enters the\n * viewport. Returns a cleanup function. SSR-safe (no-op without a DOM).\n *\n * @example\n * const stop = staggerChildren(document.querySelector('ul'), { stagger: 60, observeChildren: true });\n */\nexport function staggerChildren(\n container: Element | null | undefined,\n options: StaggerOptions = {},\n instance?: ScrollAnimateInstance\n): () => void {\n if (!container || !hasDOM() || !supportsObserver()) return () => undefined; // leave content visible\n const sa = instance || fallback || (fallback = createScrollAnimate());\n const { stagger = 80, delay = 0, threshold = 0.1, rootMargin = '0px', observeChildren = false, ...rest } = options;\n\n let items = Array.from(container.children);\n let revealed = false;\n const late: Element[] = [];\n items.forEach((child) => prepareElement(child));\n\n const io = new IntersectionObserver(\n (entries) => {\n if (revealed || !entries.some((entry) => entry.isIntersecting)) return;\n revealed = true;\n io.disconnect();\n items.forEach((child, i) => {\n if (child.parentNode === container) sa.animate(child, { ...rest, delay: delay + i * stagger });\n });\n items = [];\n },\n { threshold, rootMargin }\n );\n io.observe(container);\n\n let mo: MutationObserver | undefined;\n if (observeChildren && typeof MutationObserver !== 'undefined') {\n mo = new MutationObserver((records) => {\n records.forEach((record) => {\n record.addedNodes.forEach((node) => {\n if (!(node instanceof Element) || node.parentNode !== container) return;\n if (!revealed) {\n prepareElement(node);\n items.push(node);\n } else {\n // The core engine staggers siblings relative to the batch that\n // enters the viewport together.\n late.push(node);\n sa.observe(node, { ...rest, delay, stagger, threshold, rootMargin });\n }\n });\n record.removedNodes.forEach((node) => {\n if (!(node instanceof Element)) return;\n items = items.filter((el) => el !== node);\n const i = late.indexOf(node);\n if (i >= 0) {\n late.splice(i, 1);\n sa.unobserve(node);\n }\n });\n });\n });\n mo.observe(container, { childList: true });\n }\n\n return () => {\n io.disconnect();\n mo?.disconnect();\n // Stopped before the container was revealed: never leave the children hidden.\n if (!revealed) {\n revealed = true;\n items.forEach((child) => stopAnimation(child));\n items = [];\n }\n late.forEach((el) => sa.unobserve(el));\n late.length = 0;\n };\n}\n"],"names":[],"mappings":"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"}
@@ -579,6 +579,10 @@ function revealFrom(effect, distance = 32) {
579
579
  }
580
580
  /** Keyframes from the effect to the natural state. */
581
581
  function revealKeyframes(effect, distance) {
582
+ // Any preset registered with the scroll library (core, `presets/extended`, your own)
583
+ const p = REVEAL_EFFECTS.includes(effect) ? null : globalThis[Symbol.for('use-scroll-animate.presets')]?.[effect];
584
+ if (p)
585
+ return [p.from, ...(p.frames || []), p.to];
582
586
  const from = revealFrom(effect, distance);
583
587
  const to = {};
584
588
  for (const k of Object.keys(from)) {