svg-scroll-draw 2.15.3 → 2.16.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/README.md +19 -16
- package/dist/angular/index.cjs +2 -2
- package/dist/angular/index.d.mts +7 -240
- package/dist/angular/index.d.ts +7 -240
- package/dist/angular/index.mjs +1 -3
- package/dist/aos/index.cjs +2 -2
- package/dist/aos/index.mjs +1 -2
- package/dist/aos/react/index.cjs +2 -2
- package/dist/aos/react/index.d.mts +1 -33
- package/dist/aos/react/index.d.ts +1 -33
- package/dist/aos/react/index.mjs +1 -2
- package/dist/astro/index.cjs +2 -2
- package/dist/astro/index.d.mts +4 -148
- package/dist/astro/index.d.ts +4 -148
- package/dist/astro/index.mjs +1 -3
- package/dist/cdn/aos.global.js +2 -2
- package/dist/cdn/scrollreveal.global.js +2 -2
- package/dist/cdn/svg-scroll-draw.dev.global.js +51 -39
- package/dist/cdn/svg-scroll-draw.global.js +2 -2
- package/dist/cdn/vivus.global.js +1 -1
- package/dist/chunk-4DOJSIEQ.mjs +1 -0
- package/dist/chunk-4MH5SQTH.mjs +1 -0
- package/dist/chunk-4T5R3ZTL.mjs +2 -0
- package/dist/chunk-5PJEKEEP.mjs +1 -0
- package/dist/chunk-AJ22VSHC.mjs +1 -0
- package/dist/chunk-BCV4RAIX.mjs +1 -0
- package/dist/chunk-DM6EDKWH.mjs +1 -0
- package/dist/chunk-E4M2PB7B.mjs +1 -0
- package/dist/chunk-JC5BD4RB.mjs +1 -0
- package/dist/chunk-KBFWDHF4.mjs +1 -0
- package/dist/chunk-KGAJQP2N.mjs +2 -0
- package/dist/chunk-LFSU6LR3.mjs +1 -0
- package/dist/chunk-OJFWQ6CU.mjs +1 -0
- package/dist/chunk-OMI46IXL.mjs +2 -0
- package/dist/chunk-OWMO2S3V.mjs +1 -0
- package/dist/chunk-PEFR3ZB7.mjs +1 -0
- package/dist/chunk-QJ4H2HW3.mjs +1 -0
- package/dist/chunk-SNCRC6BA.mjs +1 -0
- package/dist/chunk-WDIHLRZZ.mjs +3 -0
- package/dist/chunk-WQZKXAXK.mjs +2 -0
- package/dist/chunk-YWKPTYSG.mjs +1 -0
- package/dist/chunk-YZV4Z3EQ.mjs +1 -0
- package/dist/cinematic/index.cjs +1 -1
- package/dist/cinematic/index.mjs +1 -2
- package/dist/devtools/index.mjs +1 -1
- package/dist/engine-6AXEX8CL.d.ts +57 -0
- package/dist/engine-Ci08nM91.d.mts +57 -0
- package/dist/group/index.cjs +2 -2
- package/dist/group/index.d.mts +4 -207
- package/dist/group/index.d.ts +4 -207
- package/dist/group/index.mjs +1 -3
- package/dist/horizontal/index.cjs +1 -1
- package/dist/horizontal/index.d.mts +1 -33
- package/dist/horizontal/index.d.ts +1 -33
- package/dist/horizontal/index.mjs +1 -1
- package/dist/index-BDGQEK6X.d.mts +15 -0
- package/dist/index-BVuNgQSd.d.ts +14 -0
- package/dist/index-CGR7pSOR.d.mts +14 -0
- package/dist/index-DxjUOIbK.d.ts +15 -0
- package/dist/index.cjs +3 -3
- package/dist/index.d.mts +8 -294
- package/dist/index.d.ts +8 -294
- package/dist/index.mjs +1 -4
- package/dist/nuxt/index.cjs +2 -2
- package/dist/nuxt/index.d.mts +7 -507
- package/dist/nuxt/index.d.ts +7 -507
- package/dist/nuxt/index.mjs +1 -3
- package/dist/pin/index.cjs +1 -1
- package/dist/pin/index.mjs +1 -1
- package/dist/progress/index.cjs +1 -1
- package/dist/progress/index.d.mts +1 -33
- package/dist/progress/index.d.ts +1 -33
- package/dist/progress/index.mjs +1 -1
- package/dist/react/index.cjs +2 -2
- package/dist/react/index.d.mts +5 -212
- package/dist/react/index.d.ts +5 -212
- package/dist/react/index.mjs +1 -3
- package/dist/reveal/index.cjs +1 -1
- package/dist/reveal/index.d.mts +1 -5
- package/dist/reveal/index.d.ts +1 -5
- package/dist/reveal/index.mjs +1 -1
- package/dist/scroll-draw-BlJfbTDv.d.ts +5 -0
- package/dist/scroll-draw-CNlq4Z_L.d.mts +5 -0
- package/dist/scrollreveal/index.cjs +2 -2
- package/dist/scrollreveal/index.mjs +1 -2
- package/dist/scrollreveal/react/index.cjs +2 -2
- package/dist/scrollreveal/react/index.d.mts +1 -36
- package/dist/scrollreveal/react/index.d.ts +1 -36
- package/dist/scrollreveal/react/index.mjs +1 -2
- package/dist/snap/index.cjs +1 -1
- package/dist/snap/index.d.mts +1 -1
- package/dist/snap/index.d.ts +1 -1
- package/dist/snap/index.mjs +1 -1
- package/dist/solid/index.cjs +2 -2
- package/dist/solid/index.d.mts +6 -240
- package/dist/solid/index.d.ts +6 -240
- package/dist/solid/index.mjs +1 -3
- package/dist/svelte/index.cjs +2 -2
- package/dist/svelte/index.d.mts +6 -240
- package/dist/svelte/index.d.ts +6 -240
- package/dist/svelte/index.mjs +1 -3
- package/dist/text/index.cjs +1 -1
- package/dist/text/index.d.mts +1 -33
- package/dist/text/index.d.ts +1 -33
- package/dist/text/index.mjs +1 -1
- package/dist/timeline/index.cjs +7 -7
- package/dist/timeline/index.d.mts +1 -29
- package/dist/timeline/index.d.ts +1 -29
- package/dist/timeline/index.mjs +11 -11
- package/dist/types-DHU1zNEw.d.mts +147 -0
- package/dist/types-DHU1zNEw.d.ts +147 -0
- package/dist/video/index.cjs +1 -1
- package/dist/video/index.d.mts +1 -33
- package/dist/video/index.d.ts +1 -33
- package/dist/video/index.mjs +1 -1
- package/dist/vivus/index.cjs +2 -2
- package/dist/vivus/index.mjs +1 -2
- package/dist/vivus/react/index.cjs +2 -1
- package/dist/vivus/react/index.d.mts +1 -99
- package/dist/vivus/react/index.d.ts +1 -99
- package/dist/vivus/react/index.mjs +1 -1
- package/dist/vue/index.cjs +2 -2
- package/dist/vue/index.d.mts +6 -213
- package/dist/vue/index.d.ts +6 -213
- package/dist/vue/index.mjs +1 -3
- package/dist/web-component/index.cjs +2 -2
- package/dist/web-component/index.mjs +1 -3
- package/package.json +1 -1
package/dist/svelte/index.d.ts
CHANGED
|
@@ -1,242 +1,8 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
}
|
|
7
|
-
interface ScrollDrawOptions {
|
|
8
|
-
/**
|
|
9
|
-
* Apply a named preset as the base configuration. User-supplied options
|
|
10
|
-
* always override the preset. Available presets:
|
|
11
|
-
* - `'sketch'` — staggered ease-in draw, pencil feel
|
|
12
|
-
* - `'reveal'` — fade + ease-out, draws once on viewport entry
|
|
13
|
-
* - `'typewriter'` — fast linear draw with stagger
|
|
14
|
-
* - `'cinematic'` — slow ease-in-out with fade, dramatic entrance
|
|
15
|
-
* - `'spring'` — spring easing, bouncy organic feel
|
|
16
|
-
*/
|
|
17
|
-
preset?: PresetName;
|
|
18
|
-
selector?: string;
|
|
19
|
-
speed?: number;
|
|
20
|
-
fade?: boolean;
|
|
21
|
-
easing?: EasingName | ((t: number) => number);
|
|
22
|
-
trigger?: TriggerConfig;
|
|
23
|
-
stagger?: number;
|
|
24
|
-
direction?: 'forward' | 'reverse';
|
|
25
|
-
once?: boolean;
|
|
26
|
-
debug?: boolean;
|
|
27
|
-
/** Scroll axis to track. 'y' (default) for vertical, 'x' for horizontal. */
|
|
28
|
-
axis?: 'x' | 'y';
|
|
29
|
-
/** CSS selector or Element for a custom scroll container (default: window). */
|
|
30
|
-
scrollContainer?: string | Element;
|
|
31
|
-
/** Automatically reverse the animation when the user scrolls back up. */
|
|
32
|
-
autoReverse?: boolean;
|
|
33
|
-
/** Delay in milliseconds before the engine starts observing. */
|
|
34
|
-
delay?: number;
|
|
35
|
-
/** Animate stroke color. Single string = static override. Tuple = interpolate from → to. */
|
|
36
|
-
strokeColor?: string | [string, string];
|
|
37
|
-
/** Animate stroke width. Single number = static override. Tuple = interpolate from → to. */
|
|
38
|
-
strokeWidth?: number | [number, number];
|
|
39
|
-
/** Animate fill opacity. Single number = static override. Tuple [from, to] = interpolate as the path draws. Use [0, 1] to flood fill in sync with the stroke draw. */
|
|
40
|
-
fillOpacity?: number | [number, number];
|
|
41
|
-
/**
|
|
42
|
-
* Reveal the container using CSS clip-path instead of stroke-dashoffset.
|
|
43
|
-
* Works on any content — SVG, images, text, divs.
|
|
44
|
-
*
|
|
45
|
-
* Pass a direction string to control which edge the reveal starts from,
|
|
46
|
-
* or `true` as shorthand for `'left'`.
|
|
47
|
-
*
|
|
48
|
-
* Values: `'left' | 'right' | 'top' | 'bottom' | 'center'`
|
|
49
|
-
*/
|
|
50
|
-
clip?: boolean | 'left' | 'right' | 'top' | 'bottom' | 'center';
|
|
51
|
-
/** Fire callbacks at specific progress thresholds (0–1). Resets on replay(). */
|
|
52
|
-
waypoints?: Record<number, () => void>;
|
|
53
|
-
/** Scale animation speed by scroll velocity — faster scrolling = faster draw. Pass a number to control sensitivity (default 1). */
|
|
54
|
-
velocityScale?: boolean | number;
|
|
55
|
-
/** IntersectionObserver threshold (0–1). Default 0. */
|
|
56
|
-
threshold?: number;
|
|
57
|
-
/** IntersectionObserver rootMargin. Default "0px". */
|
|
58
|
-
rootMargin?: string;
|
|
59
|
-
/** Repeat the animation N times after completion. Use 'infinite' to loop forever. */
|
|
60
|
-
repeat?: number | 'infinite';
|
|
61
|
-
/** Milliseconds to wait between repeats. Default 0. */
|
|
62
|
-
repeatDelay?: number;
|
|
63
|
-
/**
|
|
64
|
-
* Target path `d` attribute to morph toward as the animation progresses.
|
|
65
|
-
* Paths must have compatible command structures (same number of numeric tokens).
|
|
66
|
-
*
|
|
67
|
-
* Only applies to `<path>` elements — silently no-ops on `<rect>`, `<circle>`,
|
|
68
|
-
* `<line>`, and other SVG shape elements.
|
|
69
|
-
*/
|
|
70
|
-
morphTo?: string;
|
|
71
|
-
onProgress?: (alpha: number) => void;
|
|
72
|
-
onStart?: () => void;
|
|
73
|
-
onComplete?: () => void;
|
|
74
|
-
/** Fires when scroll position enters the trigger zone (scrolling forward). */
|
|
75
|
-
onEnter?: () => void;
|
|
76
|
-
/** Fires when scroll position exits the trigger zone at the end (scrolling forward). */
|
|
77
|
-
onLeave?: () => void;
|
|
78
|
-
/** Fires when scroll position re-enters the trigger zone from the end (scrolling back). */
|
|
79
|
-
onEnterBack?: () => void;
|
|
80
|
-
/** Fires when scroll position exits the trigger zone at the start (scrolling back). */
|
|
81
|
-
onLeaveBack?: () => void;
|
|
82
|
-
/**
|
|
83
|
-
* Trigger the animation when the element enters the viewport instead of
|
|
84
|
-
* tying it to scroll position. The draw runs over `duration` milliseconds,
|
|
85
|
-
* replaying each time the element re-enters the viewport (use `once: true`
|
|
86
|
-
* to play only the first time).
|
|
87
|
-
*
|
|
88
|
-
* All visual options work in autoplay mode — `easing`, `stagger`, `fade`,
|
|
89
|
-
* `strokeColor`, `strokeWidth`, `fillOpacity`, `clip`, `morphTo`, `waypoints`,
|
|
90
|
-
* `repeat`, `repeatDelay`, `onStart`, `onComplete`, `onProgress`, etc.
|
|
91
|
-
*
|
|
92
|
-
* The full instance API (`pause`, `resume`, `seek`, `replay`, `getProgress`)
|
|
93
|
-
* also works — `seek(0.5)` pauses at 50% of the duration.
|
|
94
|
-
*/
|
|
95
|
-
autoplay?: boolean;
|
|
96
|
-
/**
|
|
97
|
-
* Duration of the autoplay animation in milliseconds. Only used when
|
|
98
|
-
* `autoplay: true`. Default `1000`.
|
|
99
|
-
*/
|
|
100
|
-
duration?: number;
|
|
101
|
-
/**
|
|
102
|
-
* Use the browser's native CSS scroll-driven animation
|
|
103
|
-
* (`animation-timeline: view()`) when the configuration is simple enough and
|
|
104
|
-
* the browser supports it. The browser drives the draw from the scroll
|
|
105
|
-
* position — zero per-frame JavaScript, zero scroll/resize listeners. (It
|
|
106
|
-
* still repaints on the main thread: browsers don't composite
|
|
107
|
-
* `stroke-dashoffset`.)
|
|
108
|
-
*
|
|
109
|
-
* Falls back to the JS engine automatically when unsupported or when the
|
|
110
|
-
* config uses a feature native CSS can't express (callbacks, stagger, morph,
|
|
111
|
-
* velocity scaling, custom triggers, `once`, custom easing functions, etc.).
|
|
112
|
-
*
|
|
113
|
-
* - `undefined` / `true` (default): use native when eligible.
|
|
114
|
-
* - `false`: always use the JS engine.
|
|
115
|
-
*/
|
|
116
|
-
native?: boolean;
|
|
117
|
-
}
|
|
118
|
-
interface ScrollDrawInstance {
|
|
119
|
-
destroy: () => void;
|
|
120
|
-
/** Reset and replay the animation from the beginning. */
|
|
121
|
-
replay: () => void;
|
|
122
|
-
/** Pause the animation at the current progress. */
|
|
123
|
-
pause: () => void;
|
|
124
|
-
/** Resume a paused animation. */
|
|
125
|
-
resume: () => void;
|
|
126
|
-
/** Jump to a specific progress value (0–1) and pause. */
|
|
127
|
-
seek: (progress: number) => void;
|
|
128
|
-
/** Returns current draw progress (0–1). */
|
|
129
|
-
getProgress: () => number;
|
|
130
|
-
/**
|
|
131
|
-
* Re-measure after a layout change: path lengths, and the scroll trigger window.
|
|
132
|
-
*
|
|
133
|
-
* The engine already re-measures on `resize`, on `orientationchange`, and via a
|
|
134
|
-
* `ResizeObserver` on the document element — but none of those fire for a layout
|
|
135
|
-
* change that leaves the document height alone, such as a tab switching, a
|
|
136
|
-
* sibling collapsing, or a font swapping inside a fixed-height box. Call this
|
|
137
|
-
* after one of those.
|
|
138
|
-
*
|
|
139
|
-
* Optional on this shared type because several instances here are fan-outs over
|
|
140
|
-
* other instances or SSR no-op stubs. `scrollDraw`, `scrollPin`,
|
|
141
|
-
* `scrollHorizontal`, `scrollDrawTimeline` and the group APIs all provide it;
|
|
142
|
-
* use `instance.refresh?.()` if you hold an instance of unknown origin.
|
|
143
|
-
*/
|
|
144
|
-
refresh?: () => void;
|
|
145
|
-
}
|
|
146
|
-
|
|
147
|
-
interface ScrollAnimateOptions {
|
|
148
|
-
props: Record<string, string | number | [string | number, string | number]>;
|
|
149
|
-
trigger?: TriggerConfig;
|
|
150
|
-
easing?: EasingName | ((t: number) => number);
|
|
151
|
-
speed?: number;
|
|
152
|
-
once?: boolean;
|
|
153
|
-
axis?: 'x' | 'y';
|
|
154
|
-
scrollContainer?: string | Element;
|
|
155
|
-
native?: boolean;
|
|
156
|
-
/**
|
|
157
|
-
* Scale animation speed by scroll velocity — faster scrolling = faster animation.
|
|
158
|
-
* Pass `true` for default sensitivity (1) or a number to control it.
|
|
159
|
-
* Higher values = more dramatic speed-up. Default sensitivity: 1.
|
|
160
|
-
*/
|
|
161
|
-
velocityScale?: boolean | number;
|
|
162
|
-
/**
|
|
163
|
-
* Honour `prefers-reduced-motion: reduce` by applying the final state and not
|
|
164
|
-
* animating. Default: `true`.
|
|
165
|
-
*
|
|
166
|
-
* Set to `false` only when the movement is *scroll-linked scrubbing* rather
|
|
167
|
-
* than autonomous motion — it advances solely as the user scrolls, 1:1 with
|
|
168
|
-
* their input, so it is direct manipulation rather than something that plays at
|
|
169
|
-
* them. `scrollHorizontal` sets this, because jumping to the final state there
|
|
170
|
-
* would leave every panel but the last unreachable inside the sticky
|
|
171
|
-
* `overflow: hidden` container.
|
|
172
|
-
*/
|
|
173
|
-
respectReducedMotion?: boolean;
|
|
174
|
-
/**
|
|
175
|
-
* Element whose geometry defines the trigger window, when that is not the
|
|
176
|
-
* element being animated. Defaults to the animated element.
|
|
177
|
-
*
|
|
178
|
-
* Needed whenever the animated element cannot supply the scroll length itself —
|
|
179
|
-
* the case that matters is a `position: sticky` stage, where the pinned element
|
|
180
|
-
* is exactly one viewport tall and all of the scroll room belongs to its
|
|
181
|
-
* container. Resolving `top top` → `bottom bottom` against the pinned element
|
|
182
|
-
* there yields tStart === tEnd, a zero-length window, and no movement at all.
|
|
183
|
-
*
|
|
184
|
-
* Setting this disables the native CSS fast path: `animation-timeline: view()`
|
|
185
|
-
* always measures the element the animation is attached to, so it cannot express
|
|
186
|
-
* a separate subject.
|
|
187
|
-
*/
|
|
188
|
-
triggerElement?: Element;
|
|
189
|
-
onProgress?: (alpha: number) => void;
|
|
190
|
-
onComplete?: () => void;
|
|
191
|
-
/** Fires when scroll enters the trigger zone (scrolling forward). */
|
|
192
|
-
onEnter?: () => void;
|
|
193
|
-
/** Fires when scroll exits the trigger zone at the end (scrolling forward). */
|
|
194
|
-
onLeave?: () => void;
|
|
195
|
-
/** Fires when scroll re-enters the trigger zone from the end (scrolling back). */
|
|
196
|
-
onEnterBack?: () => void;
|
|
197
|
-
/** Fires when scroll exits the trigger zone at the start (scrolling back). */
|
|
198
|
-
onLeaveBack?: () => void;
|
|
199
|
-
}
|
|
200
|
-
|
|
201
|
-
interface ScrollCounterOptions {
|
|
202
|
-
from?: number;
|
|
203
|
-
to: number;
|
|
204
|
-
format?: (value: number) => string;
|
|
205
|
-
easing?: EasingName | ((t: number) => number);
|
|
206
|
-
trigger?: TriggerConfig;
|
|
207
|
-
once?: boolean;
|
|
208
|
-
decimals?: number;
|
|
209
|
-
onComplete?: () => void;
|
|
210
|
-
}
|
|
211
|
-
|
|
212
|
-
interface ScrollVideoOptions {
|
|
213
|
-
trigger?: TriggerConfig;
|
|
214
|
-
from?: number;
|
|
215
|
-
to?: number;
|
|
216
|
-
easing?: EasingName | ((t: number) => number);
|
|
217
|
-
once?: boolean;
|
|
218
|
-
axis?: 'x' | 'y';
|
|
219
|
-
preload?: 'auto' | 'metadata';
|
|
220
|
-
onReady?: () => void;
|
|
221
|
-
onComplete?: () => void;
|
|
222
|
-
onProgress?: (alpha: number) => void;
|
|
223
|
-
}
|
|
224
|
-
|
|
225
|
-
interface ScrollTextOptions {
|
|
226
|
-
split?: 'chars' | 'words' | 'lines';
|
|
227
|
-
stagger?: number;
|
|
228
|
-
easing?: EasingName | ((t: number) => number);
|
|
229
|
-
from?: {
|
|
230
|
-
opacity?: number;
|
|
231
|
-
y?: number;
|
|
232
|
-
x?: number;
|
|
233
|
-
rotate?: number;
|
|
234
|
-
scale?: number;
|
|
235
|
-
};
|
|
236
|
-
trigger?: TriggerConfig;
|
|
237
|
-
once?: boolean;
|
|
238
|
-
onComplete?: () => void;
|
|
239
|
-
}
|
|
1
|
+
import { S as ScrollDrawInstance, a as ScrollDrawOptions } from '../types-DHU1zNEw.js';
|
|
2
|
+
import { S as ScrollAnimateOptions } from '../engine-6AXEX8CL.js';
|
|
3
|
+
import { S as ScrollCounterOptions } from '../index-DxjUOIbK.js';
|
|
4
|
+
import { ScrollVideoOptions } from '../video/index.js';
|
|
5
|
+
import { ScrollTextOptions } from '../text/index.js';
|
|
240
6
|
|
|
241
7
|
/**
|
|
242
8
|
* Svelte action — apply to any container element wrapping an SVG.
|
|
@@ -380,4 +146,4 @@ declare function createScrollText(options?: ScrollTextOptions): {
|
|
|
380
146
|
getInstance: () => ScrollDrawInstance | null;
|
|
381
147
|
};
|
|
382
148
|
|
|
383
|
-
export {
|
|
149
|
+
export { ScrollAnimateOptions, ScrollCounterOptions, ScrollDrawOptions, ScrollTextOptions, ScrollVideoOptions, createScrollAnimate, createScrollCounter, createScrollDraw, createScrollText, createScrollVideo, scrollAnimate, scrollCounterAction, scrollDraw, scrollTextAction, scrollVideoAction };
|
package/dist/svelte/index.mjs
CHANGED
|
@@ -1,3 +1 @@
|
|
|
1
|
-
|
|
2
|
-
<div style="position:absolute;${m?`left:${c}px;top:0;bottom:0;border-left:2px dashed #22c55e;`:`top:${c}px;left:0;right:0;border-top:2px dashed #22c55e;`}padding:2px 6px;color:#22c55e;background:rgba(0,0,0,.6)">\u25B6 start</div>
|
|
3
|
-
<div style="position:absolute;${m?`left:${u}px;top:0;bottom:0;border-left:2px dashed #ef4444;`:`top:${u}px;left:0;right:0;border-top:2px dashed #ef4444;`}padding:2px 6px;color:#ef4444;background:rgba(0,0,0,.6)">\u25A0 end</div>`;}return document.body.appendChild(t),window.addEventListener("scroll",l,{passive:true}),l(),{el:t,destroy(){window.removeEventListener("scroll",l),t.remove();}}}var $t=/[-+]?(?:\d*\.)?\d+(?:[eE][-+]?\d+)?/g,Pt=/[MmLlHhVvCcSsQqTtAaZz]/g;function Kt(e,n,r){if(!Be)return;let t=(e.match(Pt)??[]).join("").toUpperCase(),l=(n.match(Pt)??[]).join("").toUpperCase(),s=(e.match($t)??[]).length,c=(n.match($t)??[]).length;if(t!==l){we(`morphTo: command sequence differs (${t||"\u2205"} \u2192 ${l||"\u2205"}). Interpolation is coordinate-for-coordinate, so the result will not reach the target shape. Redraw both paths with the same commands.`,r);return}s!==c&&we(`morphTo: coordinate count differs (${s} \u2192 ${c}). Extra coordinates are ignored and missing ones hold their start value, so the result will not reach the target shape.`,r);}function ct(e,n,r){let t=(n.match(/[-+]?(?:\d*\.)?\d+(?:[eE][-+]?\d+)?/g)??[]).map(Number),l=0;return e.replace(/[-+]?(?:\d*\.)?\d+(?:[eE][-+]?\d+)?/g,s=>{let c=parseFloat(s),u=t[l++]??c;return String(+(c+(u-c)*r).toFixed(4))})}function Je(e,n={}){if(typeof window>"u")return {destroy:()=>{},replay:()=>{},pause:()=>{},resume:()=>{},seek:()=>{},getProgress:()=>0};let{preset:r,...t}=n,l=r?{...Et[r],...t}:t,s=window.matchMedia("(prefers-reduced-motion: reduce)").matches,{selector:c="path, polyline, line, polygon, rect, circle",speed:u=1,fade:m=false,easing:p="linear",trigger:T={},stagger:V=0,direction:A="forward",once:ne=false,debug:Pe=false,axis:B="y",scrollContainer:J,autoReverse:X=false,delay:G=0,strokeColor:M,strokeWidth:P,fillOpacity:L,waypoints:w,velocityScale:O=false,threshold:k=0,rootMargin:C="0px",repeat:S=0,repeatDelay:oe=0,morphTo:D,clip:se,autoplay:ie=false,duration:ee=1e3,native:ae=true,onProgress:d,onStart:x,onComplete:g,onEnter:$,onLeave:E,onEnterBack:R,onLeaveBack:fe}=l,Q=se===true?"left":typeof se=="string"?se:false,Ee=typeof p=="function"?p:re[p]??re.linear,Ce=de(T.start??"top bottom"),He=de(T.end??"bottom top"),ve=typeof J=="string"?document.querySelector(J):J??null,Se=Array.isArray(M)?M[0]:null,le=Array.isArray(M)?M[1]:typeof M=="string"?M:null,ce=Array.isArray(P)?P[0]:null,j=Array.isArray(P)?P[1]:typeof P=="number"?P:null,pe=Array.isArray(L)?L[0]:null,Z=Array.isArray(L)?L[1]:typeof L=="number"?L:null;function Ie(o){let a=o*100;switch(Q){case "right":return `inset(0 0 0 ${100-a}%)`;case "top":return `inset(0 0 ${100-a}% 0)`;case "bottom":return `inset(${100-a}% 0 0 0)`;case "center":return `circle(${o*150}% at 50% 50%)`;default:return `inset(0 ${100-a}% 0 0)`}}let z=Q?[]:Array.from(e.querySelectorAll(c)),I=[],i=[],f=0,ge=0,N=false,_=false,q=0,Ae=false,ye=-1,te=-1,Y=false,he=0,ke=0,Fe,ot=null;function mt(){ot?.destroy(),ot=null;}let Re=new Set,ft=NaN,Ne=true,Ge=-1,pt=performance.now(),Ve=NaN;function st(){return ve?B==="x"?ve.scrollLeft:ve.scrollTop:B==="x"?window.scrollX:window.scrollY}function dt(){return ve?B==="x"?ve.clientWidth:ve.clientHeight:B==="x"?window.innerWidth:window.innerHeight}function gt(){let o=Ze(e,ve,B);return xe(o,o.scroll,dt(),Ce,He)}function yt(){(({tStart:f,tEnd:ge}=gt())),Pe&&Be&&(mt(),ot=Zt(f,ge,B));}function it(o,a=gt){Le(e,{type:"draw",getProgress:()=>o.getProgress(),getTrigger:a});let b=o.destroy;return o.destroy=()=>{b.call(o),$e(e);},o}function Nt(o,a){if(e.style.setProperty("--scroll-draw-progress",String(o)),Q){let b=a==="reverse"?1-o:o;e.style.clipPath=Ie(b);return}z.forEach((b,ue)=>{b.style.strokeDashoffset=a==="reverse"?`${I[ue]*o}`:`${I[ue]*(1-o)}`,m&&(b.style.opacity=a==="reverse"?`${1-o}`:`${o}`),Se&&le?b.style.stroke=_e(Se,le,o):le&&(b.style.stroke=le),ce!==null&&j!==null?b.style.strokeWidth=`${ce+(j-ce)*o}`:j!==null&&(b.style.strokeWidth=`${j}`),pe!==null&&Z!==null?b.style.fillOpacity=`${pe+(Z-pe)*o}`:Z!==null&&(b.style.fillOpacity=`${Z}`),D&&b.tagName.toLowerCase()==="path"&&i[ue]&&b.setAttribute("d",ct(i[ue],D,o));});}function je(){if(e.style.setProperty("--scroll-draw-progress","0"),Q){e.style.clipPath=Ie(0);return}z.forEach((o,a)=>{o.style.strokeDasharray=`${I[a]}`,o.style.strokeDashoffset=A==="reverse"?"0":`${I[a]}`,m?o.style.opacity=A==="reverse"?"1":"0":o.style.opacity="",Se&&(o.style.stroke=Se),ce!==null&&(o.style.strokeWidth=`${ce}`),pe!==null&&(o.style.fillOpacity=`${pe}`),D&&o.tagName.toLowerCase()==="path"&&i[a]&&o.setAttribute("d",i[a]);});}if(z.forEach(o=>{Qt(o);let a=ze(o);I.push(a);let b=o.tagName.toLowerCase()==="path";b?i.push(o.getAttribute("d")??""):i.push(""),D&&(b?Kt(i[i.length-1],D,o):we(`morphTo only applies to <path> elements \u2014 ignored on <${o.tagName}>.`,o)),s?(o.style.strokeDasharray=`${a}`,o.style.strokeDashoffset=A==="reverse"?`${a}`:"0",m&&(o.style.opacity="1"),le&&(o.style.stroke=le),j!==null&&(o.style.strokeWidth=`${j}`),Z!==null&&(o.style.fillOpacity=`${Z}`),D&&o.tagName.toLowerCase()==="path"&&o.setAttribute("d",D)):(o.style.strokeDasharray=`${a}`,o.style.strokeDashoffset=A==="reverse"?"0":`${a}`,m?o.style.opacity=A==="reverse"?"1":"0":o.style.opacity="",Se&&(o.style.stroke=Se),ce!==null&&(o.style.strokeWidth=`${ce}`),pe!==null&&(o.style.fillOpacity=`${pe}`));}),Q){if(s)return e.style.clipPath=Ie(1),g?.(),{destroy:()=>{},replay:()=>{},pause:()=>{},resume:()=>{},seek:()=>{},getProgress:()=>1};e.style.clipPath=Ie(0);}else if(s)return g?.(),{destroy:()=>{},replay:()=>{},pause:()=>{},resume:()=>{},seek:()=>{},getProgress:()=>1};let ht=typeof p=="string"?Ke(p):null;function Ht(){return !(ae===false||!Xt()||!z.length||!ht||Q||B!=="y"||ve||u!==1||V!==0||ne||X||O!==false||D||w||S||G>0||d||x||g||$||E||R||fe||M!=null||P!=null||L!=null||(T.start??"top bottom").trim()!=="top bottom"||(T.end??"bottom top").trim()!=="bottom top")}function Vt(){let o=++Ut,a=`svg-scroll-draw-${o}`,b=`svg-scroll-draw-host-${o}`,ue=`--svg-scroll-draw-${o}`,De=A==="reverse"?"0":"var(--ssd-len)",Oe=A==="reverse"?"var(--ssd-len)":"0",Me=`stroke-dashoffset:${De};`,v=`stroke-dashoffset:${Oe};`;m&&(Me+=`opacity:${A==="reverse"?1:0};`,v+=`opacity:${A==="reverse"?0:1};`);let F=document.createElement("style");F.setAttribute("data-svg-scroll-draw",""),F.textContent=`@keyframes ${a}{from{${Me}}to{${v}}}.${b}{view-timeline-name:${ue};view-timeline-axis:block;}.${a}{animation-name:${a};animation-duration:auto;animation-timing-function:${ht};animation-fill-mode:both;animation-timeline:${ue};animation-range:cover 0% cover 100%;}`,document.head.appendChild(F),e.classList.add(b);function me(y,U){y.style.setProperty("--ssd-len",String(I[U])),y.style.strokeDasharray=`${I[U]}`,y.style.strokeDashoffset="",y.style.opacity="",y.style.animationPlayState="",y.classList.add(a);}z.forEach(me);let h=false,H=-1;function W(){if(H>=0)return H;let y=e.getBoundingClientRect(),{tStart:U,tEnd:Te}=xe({top:y.top,height:y.height},st(),dt(),Ce,He);return Ee(K(st(),U,Te,u))}return {destroy(){e.classList.remove(b),z.forEach(y=>{y.classList.remove(a),y.style.removeProperty("--ssd-len"),y.style.animationPlayState="";}),F.remove();},replay(){h=false,H=-1,z.forEach(me);},pause(){h=true,z.forEach(y=>{y.style.animationPlayState="paused";});},resume(){h&&(h=false,z.forEach(y=>{y.style.animationPlayState="running";}));},seek(y){let U=Math.min(1,Math.max(0,y));H=U,h=true,z.forEach((Te,be)=>{Te.classList.remove(a),Te.style.strokeDashoffset=A==="reverse"?`${I[be]*U}`:`${I[be]*(1-U)}`,m&&(Te.style.opacity=A==="reverse"?`${1-U}`:`${U}`);});},getProgress(){return W()},refresh(){z.forEach((y,U)=>{I[U]=ze(y),y.style.setProperty("--ssd-len",String(I[U])),y.style.strokeDasharray=`${I[U]}`;});}}}if(Ht())return it(Vt());function zt(){let o=Math.max(1,ee),a=0,b=0,ue=false;function De(h){let H=true;if(Q){let W=Math.min(1,Math.max(0,h/o)),y=Ee(W);he=y,e.style.setProperty("--scroll-draw-progress",String(y)),e.style.clipPath=Ie(A==="reverse"?1-y:y),d?.(y),W<1&&(H=false);}else z.forEach((W,y)=>{let U=y*V*o,Te=Math.min(1,Math.max(0,(h-U)/o)),be=Ee(Te);W.style.strokeDashoffset=A==="reverse"?`${I[y]*be}`:`${I[y]*(1-be)}`,m&&(W.style.opacity=A==="reverse"?`${1-be}`:`${be}`),Se&&le?W.style.stroke=_e(Se,le,be):le&&(W.style.stroke=le),ce!==null&&j!==null?W.style.strokeWidth=`${ce+(j-ce)*be}`:j!==null&&(W.style.strokeWidth=`${j}`),pe!==null&&Z!==null?W.style.fillOpacity=`${pe+(Z-pe)*be}`:Z!==null&&(W.style.fillOpacity=`${Z}`),D&&W.tagName.toLowerCase()==="path"&&i[y]&&W.setAttribute("d",ct(i[y],D,be)),y===0&&(he=be,d?.(be),e.style.setProperty("--scroll-draw-progress",String(be))),Te<1&&(H=false);});if(w){let W=Math.min(1,Math.max(0,h/o)),y=Ee(W);for(let U in w){let Te=parseFloat(U);y>=Te&&!Re.has(Te)&&(Re.add(Te),w[U]?.());}}return H}function Oe(h){if(Y)return;let H=h-a;_||(_=true,x?.());let W=De(H);if(W&&!N){N=true,De(o*(1+Math.max(0,z.length-1)*V)),g?.(),ke<(S==="infinite"?1/0:S??0)&&(ke++,Fe=setTimeout(()=>{a=performance.now(),_=false,N=false,Re.clear(),je(),q=requestAnimationFrame(Oe);},oe));return}W||(q=requestAnimationFrame(Oe));}function Me(){cancelAnimationFrame(q),clearTimeout(Fe),a=performance.now(),b=0,Y=false,_=false,N=false,ke=0,ue=true,he=0,Re.clear(),je(),q=requestAnimationFrame(Oe);}let v=new IntersectionObserver(h=>{h.forEach(H=>{H.isIntersecting&&!(ne&&N)?Me():!H.isIntersecting&&!ne&&!N&&(cancelAnimationFrame(q),clearTimeout(Fe),ue=false);});},{root:ve??null,threshold:k,rootMargin:C}),F;function me(){clearTimeout(F),F=setTimeout(()=>{z.forEach((h,H)=>{I[H]=ze(h),h.style.strokeDasharray=`${I[H]}`;});},150);}return window.addEventListener("resize",me),window.addEventListener("orientationchange",me),G>0?setTimeout(()=>v.observe(e),G):v.observe(e),{destroy(){cancelAnimationFrame(q),clearTimeout(Fe),v.disconnect(),window.removeEventListener("resize",me),window.removeEventListener("orientationchange",me),clearTimeout(F);},replay(){ke=0,Me();},pause(){Y||!ue||(Y=true,b=performance.now()-a,cancelAnimationFrame(q));},resume(){Y&&(Y=false,ue=true,a=performance.now()-b,q=requestAnimationFrame(Oe));},seek(h){let H=Math.min(1,Math.max(0,h));he=H,Y=true,b=H*o,a=performance.now()-b,cancelAnimationFrame(q),De(b);},getProgress(){return he},refresh(){clearTimeout(F),z.forEach((h,H)=>{I[H]=ze(h),h.style.strokeDasharray=`${I[H]}`;});}}}if(ie)return it(zt());yt();function Ye(){if(!Ae||Y)return;let o=performance.now(),a=st();if(!Ne&&O===false&&a===ft){q=requestAnimationFrame(Ye);return}Ne=false,ft=a;let b=u;if(O!==false){let v=o-pt,F=v>0?Math.abs(a-(Ge<0?a:Ge))/v:0;b=u*Math.max(.2,1+F*(typeof O=="number"?O:1)*.04);}Ge=a,pt=o;let ue=X?te===-1||a>=te?"forward":"reverse":A;te=a;let De=ge-f,Oe=true,Me=De===0?0:(a-f)/De;if(isNaN(Ve)||(Ve<=0&&Me>0?$?.():Ve>0&&Me<=0&&fe?.(),Ve<1&&Me>=1?E?.():Ve>=1&&Me<1&&R?.()),Ve=Me,Q){let v=Ee(K(a,f,ge,b));ne&&!X&&(ye=Math.max(ye,v),v=ye),he=v,e.style.setProperty("--scroll-draw-progress",String(v));let F=ue==="reverse"?1-v:v;e.style.clipPath=Ie(F),d?.(v),!_&&K(a,f,ge,b)>0&&(_=true,x?.()),v>=1&&!N?(N=true,g?.(),ke<(S==="infinite"?1/0:S??0)&&(ke++,Fe=setTimeout(()=>{ye=-1,_=false,N=false,e.style.clipPath=Ie(0);},oe))):v<1&&!ne&&(N=false),q=requestAnimationFrame(Ye);return}if(z.forEach((v,F)=>{let me=F*V*De,h=Ee(K(a,f+me,ge+me,b));ne&&!X&&(ye=Math.max(ye,h),h=ye),he=h,v.style.strokeDashoffset=ue==="reverse"?`${I[F]*h}`:`${I[F]*(1-h)}`,m&&(v.style.opacity=ue==="reverse"?`${1-h}`:`${h}`),Se&&le?v.style.stroke=_e(Se,le,h):le&&(v.style.stroke=le),ce!==null&&j!==null?v.style.strokeWidth=`${ce+(j-ce)*h}`:j!==null&&(v.style.strokeWidth=`${j}`),pe!==null&&Z!==null?v.style.fillOpacity=`${pe+(Z-pe)*h}`:Z!==null&&(v.style.fillOpacity=`${Z}`),D&&v.tagName.toLowerCase()==="path"&&i[F]&&v.setAttribute("d",ct(i[F],D,h)),F===0&&(d?.(h),e.style.setProperty("--scroll-draw-progress",String(h))),h<1&&(Oe=false);}),w){let v=Ee(K(a,f,ge,b));for(let F in w){let me=parseFloat(F);v>=me&&!Re.has(me)&&(Re.add(me),w[F]?.());}}!_&&K(a,f,ge,b)>0&&(_=true,x?.()),Oe&&!N?(N=true,g?.(),ke<(S==="infinite"?1/0:S??0)&&(ke++,Fe=setTimeout(()=>{ye=-1,_=false,N=false,Re.clear(),je(),Ne=true;},oe))):!Oe&&!ne&&(N=false),q=requestAnimationFrame(Ye);}let at=false;function Ue(){at||(at=true,q=requestAnimationFrame(function(){Ye();}));}function Xe(){at=false,cancelAnimationFrame(q);}let lt=new IntersectionObserver(o=>{o.forEach(a=>{Ae=a.isIntersecting,Ae&&!Y?(Ne=true,Ue()):Xe();});},{root:ve??null,threshold:k,rootMargin:C});function bt(){z.forEach((o,a)=>{I[a]=ze(o),o.style.strokeDasharray=`${I[a]}`;}),yt(),Ne=true;}let Qe;function qe(){clearTimeout(Qe),Qe=setTimeout(bt,150);}window.addEventListener("resize",qe),window.addEventListener("orientationchange",qe);let We;return typeof ResizeObserver<"u"&&(We=new ResizeObserver(()=>qe()),We.observe(document.body),We.observe(document.documentElement),We.observe(e)),G>0?setTimeout(()=>lt.observe(e),G):lt.observe(e),it({destroy(){cancelAnimationFrame(q),clearTimeout(Fe),Xe(),lt.disconnect(),We?.disconnect(),window.removeEventListener("resize",qe),window.removeEventListener("orientationchange",qe),clearTimeout(Qe),mt();},replay(){ye=-1,te=-1,Ge=-1,_=false,N=false,ke=0,Y=false,he=0,Re.clear(),clearTimeout(Fe),je(),Ne=true,Ae&&Ue();},pause(){Y=true,Xe();},resume(){Y&&(Y=false,Ne=true,Ae&&Ue());},seek(o){let a=Math.min(1,Math.max(0,o));he=a,ye=a,Y=true,Xe(),Nt(a,A),Ne=true;},getProgress(){return he},refresh(){clearTimeout(Qe),bt(),Ae&&!Y&&Ue();}},()=>({tStart:f,tEnd:ge}))}function Jt(e){return e.startsWith("#")||e.startsWith("rgb")||e.startsWith("hsl")}function Ct(e){let n=[],r=/([\w]+)\(([^)]*)\)/g,t;for(;(t=r.exec(e))!==null;){let l=[],s=[],c=t[2].trim();if(c)for(let u of c.split(/[\s,]+/)){let m=u.match(/^([-+]?[\d.eE]+)(.*)$/);l.push(m?parseFloat(m[1]):0),s.push(m?m[2]:"");}n.push({fn:t[1],nums:l,units:s});}return n}function er(e,n,r){let t=Ct(e),l=Ct(n);return t.length===0||t.length!==l.length?r<1?e:n:t.map((s,c)=>{let u=l[c];return s.fn!==u.fn||s.nums.length!==u.nums.length?r<1?`${s.fn}(${s.nums.map((m,p)=>`${m}${s.units[p]}`).join(", ")})`:`${u.fn}(${u.nums.map((m,p)=>`${m}${u.units[p]}`).join(", ")})`:`${s.fn}(${s.nums.map((m,p)=>`${m+(u.nums[p]-m)*r}${s.units[p]}`).join(", ")})`}).join(" ")}function It(e,n,r){if(typeof e=="number"&&typeof n=="number")return String(e+(n-e)*r);let t=String(e),l=String(n);if(Jt(t))return _e(t,l,r);if(t.includes("("))return er(t,l,r);let s=t.match(/^([-+]?[\d.]+)(.*)$/),c=l.match(/^([-+]?[\d.]+)(.*)$/);if(s&&c){let u=parseFloat(s[1]),m=parseFloat(c[1]);return `${u+(m-u)*r}${s[2]||c[2]}`}return r<1?t:l}function tr(e){return e.replace(/([A-Z])/g,n=>`-${n.toLowerCase()}`)}var rr=new Set(["opacity","transform","background-color","color","filter","scale","translate","rotate"]),nr=0,Ot="--scroll-draw-progress";function or(){return typeof CSS<"u"&&typeof CSS.supports=="function"&&CSS.supports("animation-timeline: view()")}function et(e,n){let r={destroy:()=>{},replay:()=>{},pause:()=>{},resume:()=>{},seek:()=>{},getProgress:()=>0};if(typeof window>"u")return r;let{props:t,trigger:l={},easing:s="ease-out",speed:c=1,once:u=false,axis:m="y",scrollContainer:p,native:T=true,velocityScale:V=false,respectReducedMotion:A=true,triggerElement:ne,onProgress:Pe,onComplete:B,onEnter:J,onLeave:X,onEnterBack:G,onLeaveBack:M}=n,P=A&&window.matchMedia("(prefers-reduced-motion: reduce)").matches,L=typeof s=="function"?s:re[s]??re["ease-out"],w=de(l.start??"top bottom"),O=de(l.end??"bottom top"),k=ne??e,C=typeof p=="string"?document.querySelector(p):p??null,S=Object.entries(t).map(([i,f])=>({prop:tr(i),from:Array.isArray(f)?f[0]:"",to:Array.isArray(f)?f[1]:f}));function oe(){let i=window.getComputedStyle(e);for(let f of S)f.from===""&&(f.from=i.getPropertyValue(f.prop).trim()||"0");}function D(){for(let i of S)e.style.setProperty(i.prop,String(i.to));}let se=new Map;for(let i of [...S.map(f=>f.prop),Ot])se.set(i,e.style.getPropertyValue(i));function ie(){for(let[i,f]of se)f?e.style.setProperty(i,f):e.style.removeProperty(i);}if(P)return D(),B?.(),{...r,destroy:ie,getProgress:()=>1};oe();let ee=typeof s=="string"?Ke(s):null;function ae(){if(!T||!or()||!ee||m!=="y"||C||k!==e||u||c!==1||Pe||B||J||X||G||M||V!==false||(l.start??"top bottom").trim()!=="top bottom"||(l.end??"bottom top").trim()!=="bottom top")return false;for(let i of S)if(!rr.has(i.prop))return false;return true}function d(){let i=`ssd-a-${++nr}`,f=S.map(te=>`${te.prop}:${te.from}`).join(";"),ge=S.map(te=>`${te.prop}:${te.to}`).join(";"),N=document.createElement("style");N.setAttribute("data-ssd-animate",""),N.textContent=`@keyframes ${i}{from{${f}}to{${ge}}}.${i}{animation-name:${i};animation-duration:auto;animation-timing-function:${ee};animation-fill-mode:both;animation-timeline:view();animation-range:cover 0% cover 100%;}`,document.head.appendChild(N),e.classList.add(i);let _=()=>m==="x"?window.scrollX:window.scrollY,q=()=>m==="x"?window.innerWidth:window.innerHeight,Ae=()=>{let te=e.getBoundingClientRect();return xe({top:te.top,height:te.height},_(),q(),w,O)};Le(e,{type:"animate",getProgress:()=>ye.getProgress(),getTrigger:Ae});let ye={destroy(){e.classList.remove(i),N.remove(),e.style.animationPlayState="",ie(),$e(e);},replay(){e.classList.remove(i),e.offsetWidth,e.classList.add(i);},pause(){e.style.animationPlayState="paused";},resume(){e.style.animationPlayState="";},seek(te){let Y=Math.min(1,Math.max(0,te));e.classList.remove(i);for(let he of S)e.style.setProperty(he.prop,It(he.from,he.to,Y));},getProgress(){let{tStart:te,tEnd:Y}=Ae();return L(K(_(),te,Y,c))}};return ye}if(ae())return d();let x=0,g=0,$=0,E=false,R=false,fe=-1,Q=0,Ee=false,Ce=NaN,He=-1,ve=0,Se=()=>C?m==="x"?C.scrollLeft:C.scrollTop:m==="x"?window.scrollX:window.scrollY,le=()=>C?m==="x"?C.clientWidth:C.clientHeight:m==="x"?window.innerWidth:window.innerHeight;function ce(){let i=Ze(k,C,m),f=xe(i,i.scroll,le(),w,O);x=f.tStart,g=f.tEnd;}function j(i){e.style.setProperty(Ot,String(i));for(let f of S)e.style.setProperty(f.prop,It(f.from,f.to,i));Pe?.(i);}function pe(i){if(isNaN(Ce)){Ce=i;return}Ce<=0&&i>0?J?.():Ce>0&&i<=0&&M?.(),Ce<1&&i>=1?X?.():Ce>=1&&i<1&&G?.(),Ce=i;}function Z(){if(!E||R)return;let i=performance.now(),f=Se(),ge=c;if(V!==false){let q=i-ve,Ae=q>0?Math.abs(f-(He<0?f:He))/q:0;ge=c*Math.max(.2,1+Ae*(typeof V=="number"?V:1)*.04);}He=f,ve=i;let N=g===x?0:(f-x)/(g-x);pe(N);let _=L(K(f,x,g,ge));u&&(fe=Math.max(fe,_),_=fe),Q=_,j(_),_>=1&&!Ee?(Ee=true,B?.()):_<1&&!u&&(Ee=false),$=requestAnimationFrame(Z);}ce(),g===x&&we("scrollAnimate: the trigger window has zero length (start and end resolve to the same scroll position), so this element will never animate. If the target is inside a position:sticky stage, measure the trigger from the container that holds the scroll room via `triggerElement`.",e);{let i=L(K(Se(),x,g,c));u&&i>0&&(fe=i),Q=i,j(i);}let Ie=new IntersectionObserver(i=>{i.forEach(f=>{E=f.isIntersecting,E&&!R?$=requestAnimationFrame(Z):cancelAnimationFrame($);});},{root:C??null}),z;function I(){clearTimeout(z),z=setTimeout(ce,150);}return window.addEventListener("resize",I),window.addEventListener("orientationchange",I),Ie.observe(e),Le(e,{type:"animate",getProgress:()=>Q,getTrigger:()=>({tStart:x,tEnd:g})}),{destroy(){cancelAnimationFrame($),Ie.disconnect(),window.removeEventListener("resize",I),window.removeEventListener("orientationchange",I),clearTimeout(z),ie(),$e(e);},replay(){fe=-1,Ee=false,Q=0,R=false,j(0);},pause(){R=true,cancelAnimationFrame($);},resume(){R&&(R=false,E&&($=requestAnimationFrame(Z)));},seek(i){let f=Math.min(1,Math.max(0,i));Q=f,fe=f,R=true,cancelAnimationFrame($),j(f);},getProgress(){return Q}}}var ut={destroy:()=>{},replay:()=>{},pause:()=>{},resume:()=>{},seek:()=>{},getProgress:()=>0};function tt(e,n){if(typeof window>"u")return ut;let r=typeof e=="string"?document.querySelector(e):e;if(!r)return we("scrollCounter: element not found:",e),ut;let t=r,{from:l=0,to:s,format:c,easing:u="ease-out",trigger:m={},once:p=true,decimals:T,onComplete:V}=n,A=T!==void 0?d=>d.toFixed(T):c??(d=>String(Math.round(d))),ne=typeof u=="function"?u:re[u]??re["ease-out"],Pe=de(m.start??"top 80%"),B=de(m.end??"top 20%");if(window.matchMedia("(prefers-reduced-motion: reduce)").matches)return t.textContent=A(s),V?.(),ut;let X=0,G=0,M=0,P=false,L=false,w=-1,O=0,k=false,C=()=>window.scrollY,S=()=>window.innerHeight;function oe(){let d=t.getBoundingClientRect(),x=xe({top:d.top,height:d.height},C(),S(),Pe,B);X=x.tStart,G=x.tEnd;}function D(d){t.textContent=A(l+(s-l)*d),t.style.setProperty("--scroll-draw-progress",String(d));}function se(){if(!P||L)return;let d=ne(K(C(),X,G,1));p&&(w=Math.max(w,d),d=w),O=d,D(d),d>=1&&!k?(k=true,V?.()):d<1&&!p&&(k=false),M=requestAnimationFrame(se);}oe();{let d=ne(K(C(),X,G,1));p&&d>0&&(w=d),O=d,D(d);}let ie=new IntersectionObserver(d=>{d.forEach(x=>{P=x.isIntersecting,P&&!L?M=requestAnimationFrame(se):cancelAnimationFrame(M);});}),ee;function ae(){clearTimeout(ee),ee=setTimeout(oe,150);}return window.addEventListener("resize",ae),window.addEventListener("orientationchange",ae),ie.observe(t),Le(t,{type:"counter",getProgress:()=>O,getTrigger:()=>({tStart:X,tEnd:G})}),{destroy(){cancelAnimationFrame(M),ie.disconnect(),window.removeEventListener("resize",ae),window.removeEventListener("orientationchange",ae),clearTimeout(ee),$e(t);},replay(){w=-1,k=false,O=0,L=false,D(0);},pause(){L=true,cancelAnimationFrame(M);},resume(){L&&(L=false,P&&(M=requestAnimationFrame(se)));},seek(d){let x=Math.min(1,Math.max(0,d));O=x,w=x,L=true,cancelAnimationFrame(M),D(x);},getProgress(){return O}}}var kt={destroy:()=>{},replay:()=>{},pause:()=>{},resume:()=>{},seek:()=>{},getProgress:()=>0};function rt(e,n={}){if(typeof window>"u")return kt;let r=typeof e=="string"?document.querySelector(e):e;if(!r||r.tagName.toLowerCase()!=="video")return we("scrollVideo: <video> element not found:",e),kt;let t=r,{trigger:l={},easing:s="linear",once:c=false,axis:u="y",preload:m="auto",onReady:p,onComplete:T,onProgress:V}=n,A=window.matchMedia("(prefers-reduced-motion: reduce)").matches,ne=typeof s=="function"?s:re[s]??re.linear,Pe=de(l.start??"top top"),B=de(l.end??"bottom top");t.pause(),t.hasAttribute("preload")||(t.preload=m);let J=n.from??0,X=n.to,G=0,M=0,P=0,L=false,w=false,O=-1,k=0,C=false,S=false,oe=()=>u==="x"?window.scrollX:window.scrollY,D=()=>u==="x"?window.innerWidth:window.innerHeight;function se(){let E=t.getBoundingClientRect(),R=u==="x"?E.left:E.top,fe=u==="x"?E.width:E.height,Q=xe({top:R,height:fe},oe(),D(),Pe,B);G=Q.tStart,M=Q.tEnd;}let ie=NaN;function ee(E){if(!S)return;let R=X??t.duration??0,fe=J+(R-J)*E;fe!==ie&&(ie=fe,t.currentTime=fe),t.style.setProperty("--scroll-draw-progress",String(E)),V?.(E);}function ae(){if(!L||w||!S||A)return;let E=ne(K(oe(),G,M,1));c&&(O=Math.max(O,E),E=O),k=E,ee(E),E>=1&&!C?(C=true,T?.()):E<1&&!c&&(C=false),P=requestAnimationFrame(ae);}function d(){if(S=true,X===void 0&&(X=t.duration),A){ee(1),p?.();return}se(),p?.(),L&&!w&&(P=requestAnimationFrame(ae));}t.readyState>=1?d():t.addEventListener("loadedmetadata",d,{once:true}),S||se();let x=new IntersectionObserver(E=>{E.forEach(R=>{L=R.isIntersecting,L&&!w&&S?P=requestAnimationFrame(ae):cancelAnimationFrame(P);});}),g;function $(){clearTimeout(g),g=setTimeout(se,150);}return window.addEventListener("resize",$),window.addEventListener("orientationchange",$),x.observe(t),Le(t,{type:"video",getProgress:()=>k,getTrigger:()=>({tStart:G,tEnd:M})}),{destroy(){cancelAnimationFrame(P),x.disconnect(),t.removeEventListener("loadedmetadata",d),window.removeEventListener("resize",$),window.removeEventListener("orientationchange",$),clearTimeout(g),$e(t);},replay(){O=-1,C=false,k=0,w=false,ie=NaN,ee(0);},pause(){w=true,cancelAnimationFrame(P);},resume(){w&&(w=false,L&&S&&(P=requestAnimationFrame(ae)));},seek(E){let R=Math.min(1,Math.max(0,E));k=R,O=R,w=true,cancelAnimationFrame(P),ie=NaN,ee(R);},getProgress(){return k}}}function Rt(e){let n=e.textContent??"";return e.textContent="",n.split(/(\s+)/).filter(Boolean).map(r=>{let t=document.createElement("span");return t.setAttribute("aria-hidden","true"),/^\s+$/.test(r)?(t.textContent=r,t.style.whiteSpace="pre"):(t.textContent=r,t.style.display="inline-block"),e.appendChild(t),/^\s+$/.test(r)?null:t}).filter(r=>r!==null)}function sr(e){let n=e.textContent??"";return e.textContent="",n.split("").map(r=>{let t=document.createElement("span");return t.setAttribute("aria-hidden","true"),t.textContent=r,r===" "?t.style.whiteSpace="pre":t.style.display="inline-block",e.appendChild(t),r===" "?null:t}).filter(r=>r!==null)}function Dt(e){let n=Rt(e),r=new Map;for(let s of n){let c=s.offsetTop;r.has(c)||r.set(c,[]),r.get(c).push(s);}let t=[],l=Array.from(r.keys()).sort((s,c)=>s-c);for(let s of l){let c=r.get(s),u=document.createElement("span");u.setAttribute("aria-hidden","true"),u.style.display="inline-block",c.forEach((m,p)=>{let T=m.nextElementSibling;u.appendChild(m),p<c.length-1&&T&&T.style.whiteSpace==="pre"&&u.appendChild(T);}),t.push(u);}return e.textContent="",t.forEach((s,c)=>{e.appendChild(s),c<t.length-1&&e.appendChild(document.createTextNode(" "));}),t}function ir(e,n,r,t){if(r<=1||t===0)return e;let l=(r-1)*t,s=n*t,c=s+(1-l);return c<=s?e>=s?1:0:Math.min(1,Math.max(0,(e-s)/(c-s)))}function ar(e,n){let r=[];if(n?.y!==void 0&&r.push(`translateY(${n.y*(1-e)}px)`),n?.x!==void 0&&r.push(`translateX(${n.x*(1-e)}px)`),n?.rotate!==void 0&&r.push(`rotate(${n.rotate*(1-e)}deg)`),n?.scale!==void 0){let t=n.scale+(1-n.scale)*e;r.push(`scale(${t})`);}return r.join(" ")||""}var Ft={destroy:()=>{},replay:()=>{},pause:()=>{},resume:()=>{},seek:()=>{},getProgress:()=>0};function nt(e,n={}){if(typeof window>"u")return Ft;let r=typeof e=="string"?document.querySelector(e):e;if(!r)return we("scrollText: element not found:",e),Ft;let t=r,{split:l="words",stagger:s=.04,easing:c="ease-out",from:u={opacity:0,y:24},trigger:m={},once:p=true,onComplete:T}=n,V=window.matchMedia("(prefers-reduced-motion: reduce)").matches,A=typeof c=="function"?c:re[c]??re["ease-out"],ne=de(m.start??"top 85%"),Pe=de(m.end??"top 40%"),B=t.innerHTML;t.setAttribute("aria-label",t.textContent??"");let J;l==="chars"?J=sr(t):l==="lines"?J=Dt(t):J=Rt(t);let X=J.length;function G(g,$){u?.opacity!==void 0&&(g.style.opacity=String(u.opacity+(1-u.opacity)*$));let E=ar($,u);E&&(g.style.transform=E);}function M(g){t.style.setProperty("--scroll-draw-progress",String(g)),J.forEach(($,E)=>{let R=A(ir(g,E,X,s));G($,R);});}if(V)return M(1),T?.(),{destroy(){t.innerHTML=B,t.removeAttribute("aria-label");},replay:()=>{},pause:()=>{},resume:()=>{},seek:()=>{},getProgress:()=>1};M(0);let P=0,L=0,w=0,O=false,k=false,C=-1,S=0,oe=false,D=()=>window.scrollY,se=()=>window.innerHeight;function ie(){let g=t.getBoundingClientRect(),$=xe({top:g.top,height:g.height},D(),se(),ne,Pe);P=$.tStart,L=$.tEnd;}function ee(){if(!O||k)return;let g=K(D(),P,L,1);p&&(C=Math.max(C,g),g=C),S=g,M(g),g>=1&&!oe?(oe=true,T?.()):g<1&&!p&&(oe=false),w=requestAnimationFrame(ee);}ie();let ae=new IntersectionObserver(g=>{g.forEach($=>{O=$.isIntersecting,O&&!k?w=requestAnimationFrame(ee):cancelAnimationFrame(w);});}),d;function x(){clearTimeout(d),d=setTimeout(()=>{if(l==="lines"){let g=S;t.innerHTML=B,t.setAttribute("aria-label",t.textContent??""),J=Dt(t),M(g);}ie();},150);}return window.addEventListener("resize",x),window.addEventListener("orientationchange",x),ae.observe(t),Le(t,{type:"text",getProgress:()=>S,getTrigger:()=>({tStart:P,tEnd:L})}),{destroy(){cancelAnimationFrame(w),ae.disconnect(),window.removeEventListener("resize",x),window.removeEventListener("orientationchange",x),clearTimeout(d),t.innerHTML=B,t.removeAttribute("aria-label"),$e(t);},replay(){C=-1,oe=false,S=0,k=false,M(0);},pause(){k=true,cancelAnimationFrame(w);},resume(){k&&(k=false,O&&(w=requestAnimationFrame(ee)));},seek(g){let $=Math.min(1,Math.max(0,g));S=$,C=$,k=true,cancelAnimationFrame(w),M($);},getProgress(){return S}}}function qr(e,n={}){let r=Je(e,n);return {update(t){r.destroy(),r=Je(e,t);},destroy(){r.destroy();}}}function Wr(e={}){let n=null;function r(t){return n=Je(t,e),{destroy(){n?.destroy(),n=null;}}}return {action:r,getInstance:()=>n}}function Br(e,n){let r=et(e,n);return {update(t){r.destroy(),r=et(e,t);},destroy(){r.destroy();}}}function Gr(e){let n=null;function r(t){return n=et(t,e),{destroy(){n?.destroy(),n=null;}}}return {action:r,getInstance:()=>n}}function jr(e,n){let r=tt(e,n);return {update(t){r.destroy(),r=tt(e,t);},destroy(){r.destroy();}}}function Yr(e){let n=null;function r(t){return n=tt(t,e),{destroy(){n?.destroy(),n=null;}}}return {action:r,getInstance:()=>n}}function Ur(e,n={}){let r=rt(e,n);return {update(t){r.destroy(),r=rt(e,t);},destroy(){r.destroy();}}}function Xr(e={}){let n=null;function r(t){return n=rt(t,e),{destroy(){n?.destroy(),n=null;}}}return {action:r,getInstance:()=>n}}function Qr(e,n={}){let r=nt(e,n);return {update(t){r.destroy(),r=nt(e,t);},destroy(){r.destroy();}}}function Zr(e={}){let n=null;function r(t){return n=nt(t,e),{destroy(){n?.destroy(),n=null;}}}return {action:r,getInstance:()=>n}}export{Gr as createScrollAnimate,Yr as createScrollCounter,Wr as createScrollDraw,Zr as createScrollText,Xr as createScrollVideo,Br as scrollAnimate,jr as scrollCounterAction,qr as scrollDraw,Qr as scrollTextAction,Ur as scrollVideoAction};
|
|
1
|
+
import {a as a$2}from'../chunk-JC5BD4RB.mjs';import {a as a$3}from'../chunk-SNCRC6BA.mjs';import {a as a$1}from'../chunk-4MH5SQTH.mjs';import {a}from'../chunk-QJ4H2HW3.mjs';import {b}from'../chunk-WDIHLRZZ.mjs';import'../chunk-OJFWQ6CU.mjs';import'../chunk-YWKPTYSG.mjs';import'../chunk-YZV4Z3EQ.mjs';import'../chunk-PEFR3ZB7.mjs';import'../chunk-DM6EDKWH.mjs';import'../chunk-4DOJSIEQ.mjs';import'../chunk-BCV4RAIX.mjs';import'../chunk-LFSU6LR3.mjs';function d(n,t={}){let e=b(n,t);return {update(r){e.destroy(),e=b(n,r);},destroy(){e.destroy();}}}function y(n={}){let t=null;function e(r){return t=b(r,n),{destroy(){t?.destroy(),t=null;}}}return {action:e,getInstance:()=>t}}function f(n,t){let e=a(n,t);return {update(r){e.destroy(),e=a(n,r);},destroy(){e.destroy();}}}function O(n){let t=null;function e(r){return t=a(r,n),{destroy(){t?.destroy(),t=null;}}}return {action:e,getInstance:()=>t}}function x(n,t){let e=a$1(n,t);return {update(r){e.destroy(),e=a$1(n,r);},destroy(){e.destroy();}}}function w(n){let t=null;function e(r){return t=a$1(r,n),{destroy(){t?.destroy(),t=null;}}}return {action:e,getInstance:()=>t}}function D(n,t={}){let e=a$2(n,t);return {update(r){e.destroy(),e=a$2(n,r);},destroy(){e.destroy();}}}function T(n={}){let t=null;function e(r){return t=a$2(r,n),{destroy(){t?.destroy(),t=null;}}}return {action:e,getInstance:()=>t}}function I(n,t={}){let e=a$3(n,t);return {update(r){e.destroy(),e=a$3(n,r);},destroy(){e.destroy();}}}function E(n={}){let t=null;function e(r){return t=a$3(r,n),{destroy(){t?.destroy(),t=null;}}}return {action:e,getInstance:()=>t}}export{O as createScrollAnimate,w as createScrollCounter,y as createScrollDraw,E as createScrollText,T as createScrollVideo,f as scrollAnimate,x as scrollCounterAction,d as scrollDraw,I as scrollTextAction,D as scrollVideoAction};
|
package/dist/text/index.cjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
'use strict';function
|
|
1
|
+
'use strict';function ee({bounces:e=3,decay:r=.5}={}){let n=Math.max(1,Math.round(e)),t=Math.max(.01,Math.min(.99,r)),l=Math.sqrt(t),o=0,i=[];for(let u=0;u<n;u++){let a=Math.pow(l,u);i.push(a),o+=a;}let c=[0],m=0;for(let u=0;u<n;u++)m+=i[u]/o,c.push(m);return u=>{if(u<=0)return 0;if(u>=1)return 1;for(let a=0;a<n;a++)if(u<=c[a+1]){let b=(u-c[a])/(c[a+1]-c[a]);if(a===0)return b*(2-b);let x=1-Math.pow(t,a);return x+(1-x)*(2*b-1)*(2*b-1)}return 1}}function te({amplitude:e=1,period:r=.4}={}){let n=Math.max(1,e),t=Math.max(.1,r),l=n<=1?t/4:t/(2*Math.PI)*Math.asin(1/n);return o=>o<=0?0:o>=1?1:n*Math.pow(2,-10*o)*Math.sin((o-l)*(2*Math.PI)/t)+1}var R={linear:e=>e,"ease-in":e=>e*e,"ease-out":e=>e*(2-e),"ease-in-out":e=>e<.5?2*e*e:-1+(4-2*e)*e,spring:e=>1-Math.cos(e*Math.PI*2.5)*Math.pow(1-e,2.2),bounce:ee(),elastic:te()};function O(e,r,n){return Math.min(n,Math.max(r,e))}function I(e="top bottom"){let r=e.trim();if(/^\d+(\.\d+)?%$/.test(r))return {element:"top",viewport:r};let[n="top",t="bottom"]=r.split(/\s+/).filter(Boolean);return {element:n,viewport:t}}function F(e,r,n,t){switch(t){case "top":return e+n;case "center":return e+n+r/2;case "bottom":return e+n+r;default:return e+n}}function V(e,r){if(/^\d+(\.\d+)?%$/.test(e))return r*(parseFloat(e)/100);switch(e){case "top":return 0;case "center":return r/2;case "bottom":return r;default:return r}}function $(e,r,n,t){return n===r?0:O((e-r)/(n-r)*t,0,1)}function N(e,r,n,t,l){let o=F(e.top,e.height,r,t.element)-V(t.viewport,n),i=F(e.top,e.height,r,l.element)-V(l.viewport,n);return {tStart:o,tEnd:i}}var k=Symbol.for("svg-scroll-draw.registry");function q(){let e=globalThis;return e[k]||(e[k]=new Map)}function z(e,r){q().set(e,r);}function W(e){q().delete(e);}var ne=typeof __SVG_SCROLL_DRAW_DEV__<"u"?__SVG_SCROLL_DRAW_DEV__:typeof process<"u"&&typeof process.env<"u"&&process.env.NODE_ENV!=="production";function G(e,...r){ne&&console.warn(`[svg-scroll-draw] ${e}`,...r);}function K(e){let r=e.textContent??"";return e.textContent="",r.split(/(\s+)/).filter(Boolean).map(n=>{let t=document.createElement("span");return t.setAttribute("aria-hidden","true"),/^\s+$/.test(n)?(t.textContent=n,t.style.whiteSpace="pre"):(t.textContent=n,t.style.display="inline-block"),e.appendChild(t),/^\s+$/.test(n)?null:t}).filter(n=>n!==null)}function re(e){let r=e.textContent??"";return e.textContent="",r.split("").map(n=>{let t=document.createElement("span");return t.setAttribute("aria-hidden","true"),t.textContent=n,n===" "?t.style.whiteSpace="pre":t.style.display="inline-block",e.appendChild(t),n===" "?null:t}).filter(n=>n!==null)}function B(e){let r=K(e),n=new Map;for(let o of r){let i=o.offsetTop;n.has(i)||n.set(i,[]),n.get(i).push(o);}let t=[],l=Array.from(n.keys()).sort((o,i)=>o-i);for(let o of l){let i=n.get(o),c=document.createElement("span");c.setAttribute("aria-hidden","true"),c.style.display="inline-block",i.forEach((m,u)=>{let a=m.nextElementSibling;c.appendChild(m),u<i.length-1&&a&&a.style.whiteSpace==="pre"&&c.appendChild(a);}),t.push(c);}return e.textContent="",t.forEach((o,i)=>{e.appendChild(o),i<t.length-1&&e.appendChild(document.createTextNode(" "));}),t}function oe(e,r,n,t){if(n<=1||t===0)return e;let l=(n-1)*t,o=r*t,i=o+(1-l);return i<=o?e>=o?1:0:Math.min(1,Math.max(0,(e-o)/(i-o)))}function ie(e,r){let n=[];if(r?.y!==void 0&&n.push(`translateY(${r.y*(1-e)}px)`),r?.x!==void 0&&n.push(`translateX(${r.x*(1-e)}px)`),r?.rotate!==void 0&&n.push(`rotate(${r.rotate*(1-e)}deg)`),r?.scale!==void 0){let t=r.scale+(1-r.scale)*e;n.push(`scale(${t})`);}return n.join(" ")||""}var j={destroy:()=>{},replay:()=>{},pause:()=>{},resume:()=>{},seek:()=>{},getProgress:()=>0};function ge(e,r={}){if(typeof window>"u")return j;let n=typeof e=="string"?document.querySelector(e):e;if(!n)return G("scrollText: element not found:",e),j;let t=n,{split:l="words",stagger:o=.04,easing:i="ease-out",from:c={opacity:0,y:24},trigger:m={},once:u=true,onComplete:a}=r,b=window.matchMedia("(prefers-reduced-motion: reduce)").matches,x=typeof i=="function"?i:R[i]??R["ease-out"],U=I(m.start??"top 85%"),X=I(m.end??"top 40%"),v=t.innerHTML;t.setAttribute("aria-label",t.textContent??"");let g;l==="chars"?g=re(t):l==="lines"?g=B(t):g=K(t);let Y=g.length;function J(s,p){c?.opacity!==void 0&&(s.style.opacity=String(c.opacity+(1-c.opacity)*p));let S=ie(p,c);S&&(s.style.transform=S);}function h(s){t.style.setProperty("--scroll-draw-progress",String(s)),g.forEach((p,S)=>{let Z=x(oe(s,S,Y,o));J(p,Z);});}if(b)return h(1),a?.(),{destroy(){t.innerHTML=v,t.removeAttribute("aria-label");},replay:()=>{},pause:()=>{},resume:()=>{},seek:()=>{},getProgress:()=>1};h(0);let _=0,L=0,d=0,E=false,f=false,w=-1,y=0,M=false,P=()=>window.scrollY,Q=()=>window.innerHeight;function D(){let s=t.getBoundingClientRect(),p=N({top:s.top,height:s.height},P(),Q(),U,X);_=p.tStart,L=p.tEnd;}function A(){if(!E||f)return;let s=$(P(),_,L,1);u&&(w=Math.max(w,s),s=w),y=s,h(s),s>=1&&!M?(M=true,a?.()):s<1&&!u&&(M=false),d=requestAnimationFrame(A);}D();let H=new IntersectionObserver(s=>{s.forEach(p=>{E=p.isIntersecting,E&&!f?d=requestAnimationFrame(A):cancelAnimationFrame(d);});}),C;function T(){clearTimeout(C),C=setTimeout(()=>{if(l==="lines"){let s=y;t.innerHTML=v,t.setAttribute("aria-label",t.textContent??""),g=B(t),h(s);}D();},150);}return window.addEventListener("resize",T),window.addEventListener("orientationchange",T),H.observe(t),z(t,{type:"text",getProgress:()=>y,getTrigger:()=>({tStart:_,tEnd:L})}),{destroy(){cancelAnimationFrame(d),H.disconnect(),window.removeEventListener("resize",T),window.removeEventListener("orientationchange",T),clearTimeout(C),t.innerHTML=v,t.removeAttribute("aria-label"),W(t);},replay(){w=-1,M=false,y=0,f=false,h(0);},pause(){f=true,cancelAnimationFrame(d);},resume(){f&&(f=false,E&&(d=requestAnimationFrame(A)));},seek(s){let p=Math.min(1,Math.max(0,s));y=p,w=p,f=true,cancelAnimationFrame(d),h(p);},getProgress(){return y}}}exports.scrollText=ge;
|
package/dist/text/index.d.mts
CHANGED
|
@@ -1,36 +1,4 @@
|
|
|
1
|
-
|
|
2
|
-
interface TriggerConfig {
|
|
3
|
-
start?: string;
|
|
4
|
-
end?: string;
|
|
5
|
-
}
|
|
6
|
-
interface ScrollDrawInstance {
|
|
7
|
-
destroy: () => void;
|
|
8
|
-
/** Reset and replay the animation from the beginning. */
|
|
9
|
-
replay: () => void;
|
|
10
|
-
/** Pause the animation at the current progress. */
|
|
11
|
-
pause: () => void;
|
|
12
|
-
/** Resume a paused animation. */
|
|
13
|
-
resume: () => void;
|
|
14
|
-
/** Jump to a specific progress value (0–1) and pause. */
|
|
15
|
-
seek: (progress: number) => void;
|
|
16
|
-
/** Returns current draw progress (0–1). */
|
|
17
|
-
getProgress: () => number;
|
|
18
|
-
/**
|
|
19
|
-
* Re-measure after a layout change: path lengths, and the scroll trigger window.
|
|
20
|
-
*
|
|
21
|
-
* The engine already re-measures on `resize`, on `orientationchange`, and via a
|
|
22
|
-
* `ResizeObserver` on the document element — but none of those fire for a layout
|
|
23
|
-
* change that leaves the document height alone, such as a tab switching, a
|
|
24
|
-
* sibling collapsing, or a font swapping inside a fixed-height box. Call this
|
|
25
|
-
* after one of those.
|
|
26
|
-
*
|
|
27
|
-
* Optional on this shared type because several instances here are fan-outs over
|
|
28
|
-
* other instances or SSR no-op stubs. `scrollDraw`, `scrollPin`,
|
|
29
|
-
* `scrollHorizontal`, `scrollDrawTimeline` and the group APIs all provide it;
|
|
30
|
-
* use `instance.refresh?.()` if you hold an instance of unknown origin.
|
|
31
|
-
*/
|
|
32
|
-
refresh?: () => void;
|
|
33
|
-
}
|
|
1
|
+
import { E as EasingName, T as TriggerConfig, S as ScrollDrawInstance } from '../types-DHU1zNEw.mjs';
|
|
34
2
|
|
|
35
3
|
interface ScrollTextOptions {
|
|
36
4
|
split?: 'chars' | 'words' | 'lines';
|
package/dist/text/index.d.ts
CHANGED
|
@@ -1,36 +1,4 @@
|
|
|
1
|
-
|
|
2
|
-
interface TriggerConfig {
|
|
3
|
-
start?: string;
|
|
4
|
-
end?: string;
|
|
5
|
-
}
|
|
6
|
-
interface ScrollDrawInstance {
|
|
7
|
-
destroy: () => void;
|
|
8
|
-
/** Reset and replay the animation from the beginning. */
|
|
9
|
-
replay: () => void;
|
|
10
|
-
/** Pause the animation at the current progress. */
|
|
11
|
-
pause: () => void;
|
|
12
|
-
/** Resume a paused animation. */
|
|
13
|
-
resume: () => void;
|
|
14
|
-
/** Jump to a specific progress value (0–1) and pause. */
|
|
15
|
-
seek: (progress: number) => void;
|
|
16
|
-
/** Returns current draw progress (0–1). */
|
|
17
|
-
getProgress: () => number;
|
|
18
|
-
/**
|
|
19
|
-
* Re-measure after a layout change: path lengths, and the scroll trigger window.
|
|
20
|
-
*
|
|
21
|
-
* The engine already re-measures on `resize`, on `orientationchange`, and via a
|
|
22
|
-
* `ResizeObserver` on the document element — but none of those fire for a layout
|
|
23
|
-
* change that leaves the document height alone, such as a tab switching, a
|
|
24
|
-
* sibling collapsing, or a font swapping inside a fixed-height box. Call this
|
|
25
|
-
* after one of those.
|
|
26
|
-
*
|
|
27
|
-
* Optional on this shared type because several instances here are fan-outs over
|
|
28
|
-
* other instances or SSR no-op stubs. `scrollDraw`, `scrollPin`,
|
|
29
|
-
* `scrollHorizontal`, `scrollDrawTimeline` and the group APIs all provide it;
|
|
30
|
-
* use `instance.refresh?.()` if you hold an instance of unknown origin.
|
|
31
|
-
*/
|
|
32
|
-
refresh?: () => void;
|
|
33
|
-
}
|
|
1
|
+
import { E as EasingName, T as TriggerConfig, S as ScrollDrawInstance } from '../types-DHU1zNEw.js';
|
|
34
2
|
|
|
35
3
|
interface ScrollTextOptions {
|
|
36
4
|
split?: 'chars' | 'words' | 'lines';
|
package/dist/text/index.mjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
|
|
1
|
+
export{a as scrollText}from'../chunk-SNCRC6BA.mjs';import'../chunk-PEFR3ZB7.mjs';import'../chunk-DM6EDKWH.mjs';import'../chunk-4DOJSIEQ.mjs';import'../chunk-BCV4RAIX.mjs';import'../chunk-LFSU6LR3.mjs';
|
package/dist/timeline/index.cjs
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
|
-
'use strict';function
|
|
1
|
+
'use strict';function Se({bounces:e=3,decay:n=.5}={}){let r=Math.max(1,Math.round(e)),o=Math.max(.01,Math.min(.99,n)),s=Math.sqrt(o),p=0,E=[];for(let c=0;c<r;c++){let m=Math.pow(s,c);E.push(m),p+=m;}let f=[0],w=0;for(let c=0;c<r;c++)w+=E[c]/p,f.push(w);return c=>{if(c<=0)return 0;if(c>=1)return 1;for(let m=0;m<r;m++)if(c<=f[m+1]){let b=(c-f[m])/(f[m+1]-f[m]);if(m===0)return b*(2-b);let T=1-Math.pow(o,m);return T+(1-T)*(2*b-1)*(2*b-1)}return 1}}function Re({amplitude:e=1,period:n=.4}={}){let r=Math.max(1,e),o=Math.max(.1,n),s=r<=1?o/4:o/(2*Math.PI)*Math.asin(1/r);return p=>p<=0?0:p>=1?1:r*Math.pow(2,-10*p)*Math.sin((p-s)*(2*Math.PI)/o)+1}var H={linear:e=>e,"ease-in":e=>e*e,"ease-out":e=>e*(2-e),"ease-in-out":e=>e<.5?2*e*e:-1+(4-2*e)*e,spring:e=>1-Math.cos(e*Math.PI*2.5)*Math.pow(1-e,2.2),bounce:Se(),elastic:Re()};function re(e,n,r){return Math.min(r,Math.max(n,e))}function K(e="top bottom"){let n=e.trim();if(/^\d+(\.\d+)?%$/.test(n))return {element:"top",viewport:n};let[r="top",o="bottom"]=n.split(/\s+/).filter(Boolean);return {element:r,viewport:o}}function oe(e,n,r,o){switch(o){case "top":return e+r;case "center":return e+r+n/2;case "bottom":return e+r+n;default:return e+r}}function ie(e,n){if(/^\d+(\.\d+)?%$/.test(e))return n*(parseFloat(e)/100);switch(e){case "top":return 0;case "center":return n/2;case "bottom":return n;default:return n}}function se(e,n,r,o){return r===n?0:re((e-n)/(r-n)*o,0,1)}function ae(e,n,r,o,s){let p=oe(e.top,e.height,n,o.element)-ie(o.viewport,r),E=oe(e.top,e.height,n,s.element)-ie(s.viewport,r);return {tStart:p,tEnd:E}}function U(e){let n=e.tagName.toLowerCase();if(n==="rect"){let r=parseFloat(e.getAttribute("width")??"0"),o=parseFloat(e.getAttribute("height")??"0");return 2*(r+o)}if(n==="circle"){let r=parseFloat(e.getAttribute("r")??"0");return 2*Math.PI*r}return e.getTotalLength()}function ue(){return typeof window>"u"||typeof window.matchMedia!="function"?false:window.matchMedia("(prefers-reduced-motion: reduce)").matches}function ce(e){if(typeof window>"u"||typeof window.matchMedia!="function")return ()=>{};let n=window.matchMedia("(prefers-reduced-motion: reduce)"),r=s=>e(!!s.matches);if(typeof n.addEventListener=="function")return n.addEventListener("change",r),()=>n.removeEventListener("change",r);let o=n;return o.addListener?.(r),()=>o.removeListener?.(r)}var De=typeof __SVG_SCROLL_DRAW_DEV__<"u"?__SVG_SCROLL_DRAW_DEV__:typeof process<"u"&&typeof process.env<"u"&&process.env.NODE_ENV!=="production";function le(e,...n){De&&console.warn(`[svg-scroll-draw] ${e}`,...n);}var de=Symbol.for("svg-scroll-draw.registry");function me(){let e=globalThis;return e[de]||(e[de]=new Map)}function pe(e,n){me().set(e,n);}function fe(e){me().delete(e);}var be=["#ff90e8","#ffc900","#5865F2","#22c55e","#f59e0b","#ef4444","#aaa","#60a5fa"];function je(e,n){let r={destroy:()=>{},replay:()=>{},pause:()=>{},resume:()=>{},seek:()=>{},getProgress:()=>0};if(typeof window>"u")return r;let o=typeof e=="string"?document.querySelector(e):e;if(!o)return le("timeline: Container not found:",e),r;let s=o,{trigger:p={},speed:E=1,once:f=false,axis:w="y",tracks:c,onComplete:m,repeat:b,repeatDelay:T=0,loop:V=false,loopDuration:ge=1500,debug:ye=false,label:he,respectReducedMotion:X=true}=n,we=K(p.start??"top bottom"),ve=K(p.end??"bottom top"),_=b==="infinite"?1/0:b??0,l,G=V===true?1/0:typeof V=="number"?V:0,g=false,C=0,L=G,O=X&&ue(),xe=ce(t=>{O=X&&t,O&&(g=false,clearTimeout(l),l=void 0);}),z=()=>G>0&&!O,Q=new Map,q=c.map(t=>{let a=typeof t.easing=="function"?t.easing:H[t.easing??"linear"]??H.linear,d=Array.from(s.querySelectorAll(t.selector)),u=d.map(i=>U(i));return d.forEach((i,y)=>{Q.has(i)||Q.set(i,i.getAttribute("style")??""),i.style.strokeDasharray=`${u[y]}`,i.style.strokeDashoffset=`${u[y]}`,t.fade&&(i.style.opacity="0");}),{...t,elements:d,lengths:u,easeFn:a}});function Me(){for(let[t,a]of Q)a?t.setAttribute("style",a):t.removeAttribute("style");}let N=0,W=0,I=false,v=false,x=0,R=false,D=-1,M=0,h=null;ye&&(h=document.createElement("div"),Object.assign(h.style,{position:"fixed",bottom:"16px",left:"16px",zIndex:"9999",background:"rgba(0,0,0,0.88)",backdropFilter:"blur(8px)",border:"1px solid rgba(255,255,255,0.1)",borderRadius:"10px",padding:"10px 14px",fontFamily:"monospace",fontSize:"11px",color:"#fff",minWidth:"240px",pointerEvents:"none",lineHeight:"1.4"}),document.body.appendChild(h));function Ee(t){if(!h)return;let a=he??(typeof e=="string"?e:"timeline"),d=c.map(({selector:u,from:i,to:y},B)=>{let S=be[B%be.length],F=y>i?Math.min(1,Math.max(0,(t-i)/(y-i))):0,P=Math.round(F*100);return `<div style="margin:4px 0">
|
|
2
2
|
<div style="display:flex;justify-content:space-between;align-items:center;margin-bottom:2px">
|
|
3
|
-
<span style="color:${
|
|
4
|
-
<span style="color:#666;margin-left:8px">${
|
|
3
|
+
<span style="color:${S};max-width:160px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap">${u}</span>
|
|
4
|
+
<span style="color:#666;margin-left:8px">${P}%</span>
|
|
5
5
|
</div>
|
|
6
6
|
<div style="height:3px;background:#2a2a2a;border-radius:2px;position:relative;overflow:hidden">
|
|
7
|
-
<div style="position:absolute;left:${i*100}%;width:${(
|
|
8
|
-
<div style="position:absolute;left:${i*100}%;width:${(
|
|
7
|
+
<div style="position:absolute;left:${i*100}%;width:${(y-i)*100}%;height:100%;background:${S}33;border-radius:2px"></div>
|
|
8
|
+
<div style="position:absolute;left:${i*100}%;width:${(y-i)*F*100}%;height:100%;background:${S};border-radius:2px;transition:width 0.05s linear"></div>
|
|
9
9
|
</div>
|
|
10
|
-
</div>`}).join("");
|
|
10
|
+
</div>`}).join("");h.innerHTML=`
|
|
11
11
|
<div style="color:#555;margin-bottom:8px;font-size:10px;text-transform:uppercase;letter-spacing:0.12em;border-bottom:1px solid rgba(255,255,255,0.06);padding-bottom:6px">
|
|
12
12
|
scrollDrawTimeline \xB7 ${a}
|
|
13
13
|
</div>
|
|
@@ -20,4 +20,4 @@
|
|
|
20
20
|
<div style="height:2px;background:#2a2a2a;border-radius:1px;overflow:hidden">
|
|
21
21
|
<div style="height:100%;background:#fff;border-radius:1px;width:${t*100}%;transition:width 0.05s linear"></div>
|
|
22
22
|
</div>
|
|
23
|
-
</div>`;}function
|
|
23
|
+
</div>`;}function J(){return w==="x"?window.scrollX:window.scrollY}function Te(){return w==="x"?window.innerWidth:window.innerHeight}function Y(){let t=s.getBoundingClientRect(),a=J(),d=w==="x"?t.left:t.top,u=w==="x"?t.width:t.height,i=ae({top:d,height:u},a,Te(),we,ve);N=i.tStart,W=i.tEnd;}function Z(t){s.style.setProperty("--scroll-draw-progress",String(t)),q.forEach(({elements:a,lengths:d,from:u,to:i,easeFn:y,fade:B})=>{let S=i-u,F=S>0?Math.min(1,Math.max(0,(t-u)/S)):0,P=y(F);a.forEach((ne,Le)=>{ne.style.strokeDashoffset=`${d[Le]*(1-P)}`,B&&(ne.style.opacity=String(P));});}),Ee(t);}function A(){D=-1,M=0,R=false,q.forEach(({elements:t,lengths:a,fade:d})=>{t.forEach((u,i)=>{u.style.strokeDashoffset=`${a[i]}`,d&&(u.style.opacity="0");});}),s.style.setProperty("--scroll-draw-progress","0");}function j(){if(!I||v)return;let t;g?t=Math.min(1,(performance.now()-C)/ge):(t=se(J(),N,W,E),(f||z())&&(D=Math.max(D,t),t=D)),M=t,Z(t),t>=1&&!R?(R=true,m?.(),z()&&!g&&!l?l=setTimeout(()=>{l=void 0,L!==1/0&&L--,A(),g=true,C=performance.now();},T):_>0&&f&&!g&&!l&&(l=setTimeout(()=>{l=void 0,_!==1/0&&_--,A();},T))):!g&&t<1&&!f&&(R=false),g&&t>=1&&!l&&(R=false,L>0&&z()?l=setTimeout(()=>{l=void 0,L!==1/0&&L--,A(),C=performance.now();},T):g=false),x=requestAnimationFrame(j);}Y();let ee=new IntersectionObserver(t=>{t.forEach(a=>{I=a.isIntersecting,I&&!v?x=requestAnimationFrame(j):cancelAnimationFrame(x);});},{threshold:0});ee.observe(s);function te(){q.forEach(({elements:t,lengths:a})=>{t.forEach((d,u)=>{a[u]=U(d),d.style.strokeDasharray=`${a[u]}`;});}),Y();}let $;function k(){clearTimeout($),$=setTimeout(te,150);}return window.addEventListener("resize",k),window.addEventListener("orientationchange",k),pe(s,{type:"draw",getProgress:()=>M,getTrigger:()=>({tStart:N,tEnd:W})}),{destroy(){cancelAnimationFrame(x),clearTimeout($),clearTimeout(l),ee.disconnect(),fe(s),window.removeEventListener("resize",k),window.removeEventListener("orientationchange",k),xe(),h&&(h.remove(),h=null),Me(),s.style.removeProperty("--scroll-draw-progress");},refresh(){clearTimeout($),te();},replay(){_=b==="infinite"?1/0:b??0,L=G,g=false,clearTimeout(l),l=void 0,A(),v=false;},pause(){v=true,cancelAnimationFrame(x);},resume(){v&&(v=false,I&&(x=requestAnimationFrame(j)));},seek(t){M=Math.min(1,Math.max(0,t)),D=M,v=true,cancelAnimationFrame(x),Z(M);},getProgress(){return M}}}exports.scrollDrawTimeline=je;
|
|
@@ -1,32 +1,4 @@
|
|
|
1
|
-
|
|
2
|
-
interface ScrollDrawInstance {
|
|
3
|
-
destroy: () => void;
|
|
4
|
-
/** Reset and replay the animation from the beginning. */
|
|
5
|
-
replay: () => void;
|
|
6
|
-
/** Pause the animation at the current progress. */
|
|
7
|
-
pause: () => void;
|
|
8
|
-
/** Resume a paused animation. */
|
|
9
|
-
resume: () => void;
|
|
10
|
-
/** Jump to a specific progress value (0–1) and pause. */
|
|
11
|
-
seek: (progress: number) => void;
|
|
12
|
-
/** Returns current draw progress (0–1). */
|
|
13
|
-
getProgress: () => number;
|
|
14
|
-
/**
|
|
15
|
-
* Re-measure after a layout change: path lengths, and the scroll trigger window.
|
|
16
|
-
*
|
|
17
|
-
* The engine already re-measures on `resize`, on `orientationchange`, and via a
|
|
18
|
-
* `ResizeObserver` on the document element — but none of those fire for a layout
|
|
19
|
-
* change that leaves the document height alone, such as a tab switching, a
|
|
20
|
-
* sibling collapsing, or a font swapping inside a fixed-height box. Call this
|
|
21
|
-
* after one of those.
|
|
22
|
-
*
|
|
23
|
-
* Optional on this shared type because several instances here are fan-outs over
|
|
24
|
-
* other instances or SSR no-op stubs. `scrollDraw`, `scrollPin`,
|
|
25
|
-
* `scrollHorizontal`, `scrollDrawTimeline` and the group APIs all provide it;
|
|
26
|
-
* use `instance.refresh?.()` if you hold an instance of unknown origin.
|
|
27
|
-
*/
|
|
28
|
-
refresh?: () => void;
|
|
29
|
-
}
|
|
1
|
+
import { E as EasingName, S as ScrollDrawInstance } from '../types-DHU1zNEw.mjs';
|
|
30
2
|
|
|
31
3
|
interface TimelineTrack {
|
|
32
4
|
/** CSS selector for paths within the container to animate on this track. */
|