svg-scroll-draw 2.7.0 → 2.9.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/dist/angular/index.cjs +2 -2
- package/dist/angular/index.d.mts +6 -0
- package/dist/angular/index.d.ts +6 -0
- package/dist/angular/index.mjs +2 -2
- package/dist/astro/index.cjs +3 -3
- package/dist/astro/index.mjs +3 -3
- package/dist/cdn/svg-scroll-draw.global.js +3 -3
- package/dist/group/index.cjs +3 -3
- package/dist/group/index.d.mts +6 -0
- package/dist/group/index.d.ts +6 -0
- package/dist/group/index.mjs +3 -3
- package/dist/horizontal/index.cjs +1 -0
- package/dist/horizontal/index.d.mts +61 -0
- package/dist/horizontal/index.d.ts +61 -0
- package/dist/horizontal/index.mjs +1 -0
- package/dist/index.cjs +2 -2
- package/dist/index.d.mts +6 -0
- package/dist/index.d.ts +6 -0
- package/dist/index.mjs +2 -2
- package/dist/nuxt/index.cjs +3 -3
- package/dist/nuxt/index.d.mts +6 -0
- package/dist/nuxt/index.d.ts +6 -0
- package/dist/nuxt/index.mjs +3 -3
- package/dist/pin/index.cjs +1 -1
- package/dist/pin/index.mjs +1 -1
- package/dist/progress/index.cjs +1 -0
- package/dist/progress/index.d.mts +59 -0
- package/dist/progress/index.d.ts +59 -0
- package/dist/progress/index.mjs +1 -0
- package/dist/react/index.cjs +3 -3
- package/dist/react/index.d.mts +6 -0
- package/dist/react/index.d.ts +6 -0
- package/dist/react/index.mjs +3 -3
- package/dist/reveal/index.cjs +1 -0
- package/dist/reveal/index.d.mts +80 -0
- package/dist/reveal/index.d.ts +80 -0
- package/dist/reveal/index.mjs +1 -0
- package/dist/solid/index.cjs +2 -2
- package/dist/solid/index.d.mts +6 -0
- package/dist/solid/index.d.ts +6 -0
- package/dist/solid/index.mjs +2 -2
- package/dist/svelte/index.cjs +2 -2
- package/dist/svelte/index.d.mts +6 -0
- package/dist/svelte/index.d.ts +6 -0
- package/dist/svelte/index.mjs +2 -2
- package/dist/vue/index.cjs +2 -2
- package/dist/vue/index.d.mts +6 -0
- package/dist/vue/index.d.ts +6 -0
- package/dist/vue/index.mjs +2 -2
- package/package.json +16 -1
package/dist/pin/index.mjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
function F({bounces:t=3,decay:a=.5}={}){let s=Math.max(1,Math.round(t)),e=Math.max(.01,Math.min(.99,a)),l=Math.sqrt(e),u=0,
|
|
1
|
+
function F({bounces:t=3,decay:a=.5}={}){let s=Math.max(1,Math.round(t)),e=Math.max(.01,Math.min(.99,a)),l=Math.sqrt(e),u=0,g=[];for(let r=0;r<s;r++){let i=Math.pow(l,r);g.push(i),u+=i;}let c=[0],y=0;for(let r=0;r<s;r++)y+=g[r]/u,c.push(y);return r=>{if(r<=0)return 0;if(r>=1)return 1;for(let i=0;i<s;i++)if(r<=c[i+1]){let d=(r-c[i])/(c[i+1]-c[i]);if(i===0)return d*(2-d);let n=1-Math.pow(e,i);return n+(1-n)*(2*d-1)*(2*d-1)}return 1}}function q({amplitude:t=1,period:a=.4}={}){let s=Math.max(1,t),e=Math.max(.1,a),l=s<=1?e/4:e/(2*Math.PI)*Math.asin(1/s);return u=>u<=0?0:u>=1?1:s*Math.pow(2,-10*u)*Math.sin((u-l)*(2*Math.PI)/e)+1}({bounce:F(),elastic:q()});function B(t,a,s){return Math.min(s,Math.max(a,t))}var A=new Map;function O(t,a){A.set(t,a);}function N(t){A.delete(t);}var _={destroy:()=>{},refresh:()=>{},getProgress:()=>0};function U(t,a={}){if(typeof window>"u")return _;let s=typeof t=="string"?document.querySelector(t):t;if(!s)return process.env.NODE_ENV!=="production"&&console.warn("[svg-scroll-draw] scrollPin: element not found:",t),_;let e=s,{top:l=0,scrollContainer:u,onEnter:g,onLeave:c,onEnterBack:y,onLeaveBack:r,onProgress:i}=a,d=typeof u=="string"?document.querySelector(u):u??null,n={position:e.style.position,top:e.style.top,bottom:e.style.bottom,left:e.style.left,width:e.style.width,boxSizing:e.style.boxSizing},o=document.createElement("div");o.setAttribute("data-ssd-pin-wrapper",""),o.style.cssText="position:relative;",e.parentNode?.insertBefore(o,e),o.appendChild(e);let R=0,x=0,E=0,M="before",P=0,z=0,S=false;function h(){R=o.offsetWidth,x=e.offsetHeight,E=a.pinDistance??window.innerHeight,o.style.height=`${x+E}px`;}function I(p){if(M===p)return;let m=M;if(M=p,p==="before")e.style.position=n.position,e.style.top=n.top,e.style.bottom=n.bottom,e.style.left=n.left,e.style.width=n.width,e.style.boxSizing=n.boxSizing,m==="pinned"&&r?.();else if(p==="pinned"){let T=o.getBoundingClientRect();e.style.position="fixed",e.style.top=`${l}px`,e.style.bottom="",e.style.left=`${T.left}px`,e.style.width=`${R}px`,e.style.boxSizing="border-box",m==="before"?g?.():m==="after"&&y?.();}else e.style.position="absolute",e.style.top="",e.style.bottom="0",e.style.left="0",e.style.width="100%",e.style.boxSizing="border-box",m==="pinned"&&c?.();}function C(){S=false;let p=o.getBoundingClientRect(),m=p.top,T=p.bottom,$=B((l-m)/E,0,1);P=$,i?.($),m>l?I("before"):T-x<=l?I("after"):I("pinned");}function f(){S||(S=true,z=requestAnimationFrame(()=>C()));}let L=d??window;L.addEventListener("scroll",f,{passive:true});let b;function w(){clearTimeout(b),b=setTimeout(()=>{h(),f();},150);}window.addEventListener("resize",w),window.addEventListener("orientationchange",w);let v=null;return typeof ResizeObserver<"u"&&(v=new ResizeObserver(()=>{clearTimeout(b),b=setTimeout(()=>{h(),f();},100);}),v.observe(o),v.observe(document.documentElement)),h(),f(),O(o,{type:"pin",getProgress:()=>P,getTrigger:()=>({tStart:0,tEnd:1})}),{destroy(){cancelAnimationFrame(z),clearTimeout(b),L.removeEventListener("scroll",f),window.removeEventListener("resize",w),window.removeEventListener("orientationchange",w),v?.disconnect(),e.style.position=n.position,e.style.top=n.top,e.style.bottom=n.bottom,e.style.left=n.left,e.style.width=n.width,e.style.boxSizing=n.boxSizing,o.parentNode?.insertBefore(e,o),o.remove(),N(o);},refresh(){h(),f();},getProgress(){return P}}}export{U as scrollPin};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
'use strict';function X({bounces:e=3,decay:t=.5}={}){let r=Math.max(1,Math.round(e)),o=Math.max(.01,Math.min(.99,t)),m=Math.sqrt(o),a=0,p=[];for(let s=0;s<r;s++){let u=Math.pow(m,s);p.push(u),a+=u;}let l=[0],h=0;for(let s=0;s<r;s++)h+=p[s]/a,l.push(h);return s=>{if(s<=0)return 0;if(s>=1)return 1;for(let u=0;u<r;u++)if(s<=l[u+1]){let b=(s-l[u])/(l[u+1]-l[u]);if(u===0)return b*(2-b);let f=1-Math.pow(o,u);return f+(1-f)*(2*b-1)*(2*b-1)}return 1}}function j({amplitude:e=1,period:t=.4}={}){let r=Math.max(1,e),o=Math.max(.1,t),m=r<=1?o/4:o/(2*Math.PI)*Math.asin(1/r);return a=>a<=0?0:a>=1?1:r*Math.pow(2,-10*a)*Math.sin((a-m)*(2*Math.PI)/o)+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:X(),elastic:j()};function F(e="top bottom"){let t=e.trim();if(/^\d+(\.\d+)?%$/.test(t))return {element:"top",viewport:t};let[r="top",o="bottom"]=t.split(/\s+/).filter(Boolean);return {element:r,viewport:o}}function q(e,t,r,o){switch(o){case "top":return e+r;case "center":return e+r+t/2;case "bottom":return e+r+t;default:return e+r}}function _(e,t){if(/^\d+(\.\d+)?%$/.test(e))return t*(parseFloat(e)/100);switch(e){case "top":return 0;case "center":return t/2;case "bottom":return t;default:return t}}function J(e,t,r){return Math.min(r,Math.max(t,e))}function L(e,t,r,o){return r===t?0:J((e-t)/(r-t)*o,0,1)}function z(e,t,r,o,m){let a=q(e.top,e.height,t,o.element)-_(o.viewport,r),p=q(e.top,e.height,t,m.element)-_(m.viewport,r);return {tStart:a,tEnd:p}}var O=new Map;function V(e,t){O.set(e,t);}function D(e){O.delete(e);}var G={destroy:()=>{},replay:()=>{},pause:()=>{},resume:()=>{},seek:()=>{},getProgress:()=>0};function H(e,t={}){if(typeof window>"u")return G;let r=typeof e=="string"?document.querySelector(e):e;if(!r)return process.env.NODE_ENV!=="production"&&console.warn("[svg-scroll-draw] scrollProgress: element not found:",e),G;let o=r,{variable:m="--scroll-progress",easedVariable:a="--scroll-progress-eased",trigger:p={},easing:l="linear",speed:h=1,axis:s="y",scrollContainer:u,onProgress:b}=t,f=typeof l=="function"?l:R[l]??R.linear,B=F(p.start??"top bottom"),W=F(p.end??"bottom top"),c=typeof u=="string"?document.querySelector(u):u??null,x=0,E=0,g=0,M=false,d=false,w=0,I=()=>c?s==="x"?c.scrollLeft:c.scrollTop:s==="x"?window.scrollX:window.scrollY,k=()=>c?s==="x"?c.clientWidth:c.clientHeight:s==="x"?window.innerWidth:window.innerHeight;function P(){let n=o.getBoundingClientRect(),i,y;if(c){let $=c.getBoundingClientRect();i=s==="x"?n.left-$.left+c.scrollLeft:n.top-$.top+c.scrollTop,y=s==="x"?n.width:n.height;}else i=s==="x"?n.left:n.top,y=s==="x"?n.width:n.height;let N=z({top:i,height:y},I(),k(),B,W);x=N.tStart,E=N.tEnd;}function T(n,i){o.style.setProperty(m,String(n)),a!=null&&o.style.setProperty(a,String(i)),b?.(n,i);}function S(){if(!M||d)return;let n=L(I(),x,E,h),i=f(n);w=n,T(n,i),g=requestAnimationFrame(S);}P();{let n=L(I(),x,E,h),i=f(n);w=n,T(n,i);}let C=new IntersectionObserver(n=>{n.forEach(i=>{M=i.isIntersecting,M&&!d?g=requestAnimationFrame(S):cancelAnimationFrame(g);});},{root:c??null}),A;function v(){clearTimeout(A),A=setTimeout(P,150);}return window.addEventListener("resize",v),window.addEventListener("orientationchange",v),C.observe(r),V(r,{type:"animate",getProgress:()=>w,getTrigger:()=>({tStart:x,tEnd:E})}),{destroy(){cancelAnimationFrame(g),C.disconnect(),window.removeEventListener("resize",v),window.removeEventListener("orientationchange",v),clearTimeout(A),o.style.removeProperty(m),a!=null&&o.style.removeProperty(a),D(r);},replay(){P();},pause(){d=true,cancelAnimationFrame(g);},resume(){d&&(d=false,M&&(g=requestAnimationFrame(S)));},seek(n){let i=Math.min(1,Math.max(0,n)),y=f(i);w=i,d=true,cancelAnimationFrame(g),T(i,y);},getProgress(){return w}}}exports.scrollProgress=H;
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
type EasingName = 'linear' | 'ease-in' | 'ease-out' | 'ease-in-out' | 'spring' | 'bounce' | 'elastic';
|
|
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
|
+
|
|
20
|
+
interface ScrollProgressOptions {
|
|
21
|
+
/**
|
|
22
|
+
* CSS custom property to set on the target element (raw 0–1, unclamped on
|
|
23
|
+
* the eased side). Default: `'--scroll-progress'`.
|
|
24
|
+
*/
|
|
25
|
+
variable?: string;
|
|
26
|
+
/**
|
|
27
|
+
* Second property name for the eased value. Default: `'--scroll-progress-eased'`.
|
|
28
|
+
* Set to `null` to skip writing the eased variable.
|
|
29
|
+
*/
|
|
30
|
+
easedVariable?: string | null;
|
|
31
|
+
trigger?: TriggerConfig;
|
|
32
|
+
easing?: EasingName | ((t: number) => number);
|
|
33
|
+
speed?: number;
|
|
34
|
+
/** Scroll axis. Default: 'y'. */
|
|
35
|
+
axis?: 'x' | 'y';
|
|
36
|
+
/** Custom scroll container. Default: window. */
|
|
37
|
+
scrollContainer?: string | Element;
|
|
38
|
+
onProgress?: (raw: number, eased: number) => void;
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Expose scroll progress as CSS custom properties on a target element.
|
|
42
|
+
*
|
|
43
|
+
* The raw (linear) value and eased value are written every frame so CSS
|
|
44
|
+
* transitions, `calc()` expressions, and `@property` animations can drive
|
|
45
|
+
* visual effects with zero per-frame JS work beyond the variable update.
|
|
46
|
+
*
|
|
47
|
+
* @example
|
|
48
|
+
* // JS
|
|
49
|
+
* scrollProgress('#hero', { easing: 'ease-in-out' });
|
|
50
|
+
*
|
|
51
|
+
* // CSS
|
|
52
|
+
* #hero {
|
|
53
|
+
* opacity: calc(var(--scroll-progress));
|
|
54
|
+
* transform: translateY(calc((1 - var(--scroll-progress-eased)) * 40px));
|
|
55
|
+
* }
|
|
56
|
+
*/
|
|
57
|
+
declare function scrollProgress(target: string | Element, options?: ScrollProgressOptions): ScrollDrawInstance;
|
|
58
|
+
|
|
59
|
+
export { type ScrollProgressOptions, scrollProgress };
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
type EasingName = 'linear' | 'ease-in' | 'ease-out' | 'ease-in-out' | 'spring' | 'bounce' | 'elastic';
|
|
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
|
+
|
|
20
|
+
interface ScrollProgressOptions {
|
|
21
|
+
/**
|
|
22
|
+
* CSS custom property to set on the target element (raw 0–1, unclamped on
|
|
23
|
+
* the eased side). Default: `'--scroll-progress'`.
|
|
24
|
+
*/
|
|
25
|
+
variable?: string;
|
|
26
|
+
/**
|
|
27
|
+
* Second property name for the eased value. Default: `'--scroll-progress-eased'`.
|
|
28
|
+
* Set to `null` to skip writing the eased variable.
|
|
29
|
+
*/
|
|
30
|
+
easedVariable?: string | null;
|
|
31
|
+
trigger?: TriggerConfig;
|
|
32
|
+
easing?: EasingName | ((t: number) => number);
|
|
33
|
+
speed?: number;
|
|
34
|
+
/** Scroll axis. Default: 'y'. */
|
|
35
|
+
axis?: 'x' | 'y';
|
|
36
|
+
/** Custom scroll container. Default: window. */
|
|
37
|
+
scrollContainer?: string | Element;
|
|
38
|
+
onProgress?: (raw: number, eased: number) => void;
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Expose scroll progress as CSS custom properties on a target element.
|
|
42
|
+
*
|
|
43
|
+
* The raw (linear) value and eased value are written every frame so CSS
|
|
44
|
+
* transitions, `calc()` expressions, and `@property` animations can drive
|
|
45
|
+
* visual effects with zero per-frame JS work beyond the variable update.
|
|
46
|
+
*
|
|
47
|
+
* @example
|
|
48
|
+
* // JS
|
|
49
|
+
* scrollProgress('#hero', { easing: 'ease-in-out' });
|
|
50
|
+
*
|
|
51
|
+
* // CSS
|
|
52
|
+
* #hero {
|
|
53
|
+
* opacity: calc(var(--scroll-progress));
|
|
54
|
+
* transform: translateY(calc((1 - var(--scroll-progress-eased)) * 40px));
|
|
55
|
+
* }
|
|
56
|
+
*/
|
|
57
|
+
declare function scrollProgress(target: string | Element, options?: ScrollProgressOptions): ScrollDrawInstance;
|
|
58
|
+
|
|
59
|
+
export { type ScrollProgressOptions, scrollProgress };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
function X({bounces:e=3,decay:t=.5}={}){let r=Math.max(1,Math.round(e)),o=Math.max(.01,Math.min(.99,t)),m=Math.sqrt(o),a=0,p=[];for(let s=0;s<r;s++){let u=Math.pow(m,s);p.push(u),a+=u;}let l=[0],h=0;for(let s=0;s<r;s++)h+=p[s]/a,l.push(h);return s=>{if(s<=0)return 0;if(s>=1)return 1;for(let u=0;u<r;u++)if(s<=l[u+1]){let b=(s-l[u])/(l[u+1]-l[u]);if(u===0)return b*(2-b);let f=1-Math.pow(o,u);return f+(1-f)*(2*b-1)*(2*b-1)}return 1}}function j({amplitude:e=1,period:t=.4}={}){let r=Math.max(1,e),o=Math.max(.1,t),m=r<=1?o/4:o/(2*Math.PI)*Math.asin(1/r);return a=>a<=0?0:a>=1?1:r*Math.pow(2,-10*a)*Math.sin((a-m)*(2*Math.PI)/o)+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:X(),elastic:j()};function F(e="top bottom"){let t=e.trim();if(/^\d+(\.\d+)?%$/.test(t))return {element:"top",viewport:t};let[r="top",o="bottom"]=t.split(/\s+/).filter(Boolean);return {element:r,viewport:o}}function q(e,t,r,o){switch(o){case "top":return e+r;case "center":return e+r+t/2;case "bottom":return e+r+t;default:return e+r}}function _(e,t){if(/^\d+(\.\d+)?%$/.test(e))return t*(parseFloat(e)/100);switch(e){case "top":return 0;case "center":return t/2;case "bottom":return t;default:return t}}function J(e,t,r){return Math.min(r,Math.max(t,e))}function L(e,t,r,o){return r===t?0:J((e-t)/(r-t)*o,0,1)}function z(e,t,r,o,m){let a=q(e.top,e.height,t,o.element)-_(o.viewport,r),p=q(e.top,e.height,t,m.element)-_(m.viewport,r);return {tStart:a,tEnd:p}}var O=new Map;function V(e,t){O.set(e,t);}function D(e){O.delete(e);}var G={destroy:()=>{},replay:()=>{},pause:()=>{},resume:()=>{},seek:()=>{},getProgress:()=>0};function H(e,t={}){if(typeof window>"u")return G;let r=typeof e=="string"?document.querySelector(e):e;if(!r)return process.env.NODE_ENV!=="production"&&console.warn("[svg-scroll-draw] scrollProgress: element not found:",e),G;let o=r,{variable:m="--scroll-progress",easedVariable:a="--scroll-progress-eased",trigger:p={},easing:l="linear",speed:h=1,axis:s="y",scrollContainer:u,onProgress:b}=t,f=typeof l=="function"?l:R[l]??R.linear,B=F(p.start??"top bottom"),W=F(p.end??"bottom top"),c=typeof u=="string"?document.querySelector(u):u??null,x=0,E=0,g=0,M=false,d=false,w=0,I=()=>c?s==="x"?c.scrollLeft:c.scrollTop:s==="x"?window.scrollX:window.scrollY,k=()=>c?s==="x"?c.clientWidth:c.clientHeight:s==="x"?window.innerWidth:window.innerHeight;function P(){let n=o.getBoundingClientRect(),i,y;if(c){let $=c.getBoundingClientRect();i=s==="x"?n.left-$.left+c.scrollLeft:n.top-$.top+c.scrollTop,y=s==="x"?n.width:n.height;}else i=s==="x"?n.left:n.top,y=s==="x"?n.width:n.height;let N=z({top:i,height:y},I(),k(),B,W);x=N.tStart,E=N.tEnd;}function T(n,i){o.style.setProperty(m,String(n)),a!=null&&o.style.setProperty(a,String(i)),b?.(n,i);}function S(){if(!M||d)return;let n=L(I(),x,E,h),i=f(n);w=n,T(n,i),g=requestAnimationFrame(S);}P();{let n=L(I(),x,E,h),i=f(n);w=n,T(n,i);}let C=new IntersectionObserver(n=>{n.forEach(i=>{M=i.isIntersecting,M&&!d?g=requestAnimationFrame(S):cancelAnimationFrame(g);});},{root:c??null}),A;function v(){clearTimeout(A),A=setTimeout(P,150);}return window.addEventListener("resize",v),window.addEventListener("orientationchange",v),C.observe(r),V(r,{type:"animate",getProgress:()=>w,getTrigger:()=>({tStart:x,tEnd:E})}),{destroy(){cancelAnimationFrame(g),C.disconnect(),window.removeEventListener("resize",v),window.removeEventListener("orientationchange",v),clearTimeout(A),o.style.removeProperty(m),a!=null&&o.style.removeProperty(a),D(r);},replay(){P();},pause(){d=true,cancelAnimationFrame(g);},resume(){d&&(d=false,M&&(g=requestAnimationFrame(S)));},seek(n){let i=Math.min(1,Math.max(0,n)),y=f(i);w=i,d=true,cancelAnimationFrame(g),T(i,y);},getProgress(){return w}}}export{H as scrollProgress};
|
package/dist/react/index.cjs
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
'use strict';var _t=require('react'),jsxRuntime=require('react/jsx-runtime');function _interopDefault(e){return e&&e.__esModule?e:{default:e}}var _t__default=/*#__PURE__*/_interopDefault(_t);function At({bounces:e=3,decay:n=.5}={}){let r=Math.max(1,Math.round(e)),t=Math.max(.01,Math.min(.99,n)),i=Math.sqrt(t),o=0,
|
|
2
|
-
<div style="position:absolute;${
|
|
3
|
-
<div style="position:absolute;${l?`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",i,{passive:true}),i(),t}function Je(e,n,r){let t=(n.match(/[-+]?(?:\d*\.)?\d+(?:[eE][-+]?\d+)?/g)??[]).map(Number),i=0;return e.replace(/[-+]?(?:\d*\.)?\d+(?:[eE][-+]?\d+)?/g,o=>{let c=parseFloat(o),u=t[i++]??c;return String(+(c+(u-c)*r).toFixed(4))})}function at(e,n={}){if(typeof window>"u")return {destroy:()=>{},replay:()=>{},pause:()=>{},resume:()=>{},seek:()=>{},getProgress:()=>0};let{preset:r,...t}=n,i=r?{...ot[r],...t}:t,o=window.matchMedia("(prefers-reduced-motion: reduce)").matches,{selector:c="path, polyline, line, polygon, rect, circle",speed:u=1,fade:l=false,easing:g="linear",trigger:P={},stagger:N=0,direction:E="forward",once:J=false,debug:fe=false,axis:F="y",scrollContainer:_,autoReverse:q=false,delay:D=0,strokeColor:T,strokeWidth:A,fillOpacity:h,waypoints:y,velocityScale:C=false,threshold:$=0,rootMargin:k="0px",repeat:S=0,repeatDelay:O=0,morphTo:M,clip:R,autoplay:G=false,duration:W=1e3,native:Y=true,onProgress:d,onStart:I,onComplete:b,onEnter:w,onLeave:Z,onEnterBack:Se,onLeaveBack:be}=i,we=R===true?"left":typeof R=="string"?R:false,ge=typeof g=="function"?g:ne[g]??ne.linear,Re=oe(P.start??"top bottom"),ke=oe(P.end??"bottom top"),ee=typeof _=="string"?document.querySelector(_):_??null,a=Array.isArray(T)?T[0]:null,p=Array.isArray(T)?T[1]:typeof T=="string"?T:null,K=Array.isArray(A)?A[0]:null,B=Array.isArray(A)?A[1]:typeof A=="number"?A:null,te=Array.isArray(h)?h[0]:null,ie=Array.isArray(h)?h[1]:typeof h=="number"?h:null;function re(s){let m=s*100;switch(we){case "right":return `inset(0 0 0 ${100-m}%)`;case "top":return `inset(0 0 ${100-m}% 0)`;case "bottom":return `inset(${100-m}% 0 0 0)`;case "center":return `circle(${s*150}% at 50% 50%)`;default:return `inset(0 ${100-m}% 0 0)`}}let j=we?[]:Array.from(e.querySelectorAll(c)),H=[],pe=[],ye=0,Te=0,ae=false,he=false,se=0,ze=false,ve=-1,Ve=-1,le=false,Ce=0,xe=0,Ae,Ye=null,Me=new Set,qe=-1,Ke=performance.now(),Ne=NaN;function Fe(){return ee?F==="x"?ee.scrollLeft:ee.scrollTop:F==="x"?window.scrollX:window.scrollY}function Qe(){return ee?F==="x"?ee.clientWidth:ee.clientHeight:F==="x"?window.innerWidth:window.innerHeight}function et(){let s=e.getBoundingClientRect(),m,x,Q;if(ee){let ue=ee.getBoundingClientRect();m=F==="x"?s.left-ue.left+ee.scrollLeft:s.top-ue.top+ee.scrollTop,x=F==="x"?s.width:s.height,Q=Fe();}else m=F==="x"?s.left:s.top,x=F==="x"?s.width:s.height,Q=Fe();let ce=me({top:m,height:x},Q,Qe(),Re,ke);ye=ce.tStart,Te=ce.tEnd,fe&&process.env.NODE_ENV!=="production"&&(Ye?.remove(),Ye=kt(ye,Te,F));}function Et(s,m){if(e.style.setProperty("--scroll-draw-progress",String(s)),we){let x=m==="reverse"?1-s:s;e.style.clipPath=re(x);return}j.forEach((x,Q)=>{x.style.strokeDashoffset=m==="reverse"?`${H[Q]*s}`:`${H[Q]*(1-s)}`,l&&(x.style.opacity=m==="reverse"?`${1-s}`:`${s}`),a&&p?x.style.stroke=Oe(a,p,s):p&&(x.style.stroke=p),K!==null&&B!==null?x.style.strokeWidth=`${K+(B-K)*s}`:B!==null&&(x.style.strokeWidth=`${B}`),te!==null&&ie!==null?x.style.fillOpacity=`${te+(ie-te)*s}`:ie!==null&&(x.style.fillOpacity=`${ie}`),M&&x.tagName.toLowerCase()==="path"&&pe[Q]&&x.setAttribute("d",Je(pe[Q],M,s));});}function We(){if(e.style.setProperty("--scroll-draw-progress","0"),we){e.style.clipPath=re(0);return}j.forEach((s,m)=>{s.style.strokeDasharray=`${H[m]}`,s.style.strokeDashoffset=E==="reverse"?"0":`${H[m]}`,l?s.style.opacity=E==="reverse"?"1":"0":s.style.opacity="",a&&(s.style.stroke=a),K!==null&&(s.style.strokeWidth=`${K}`),te!==null&&(s.style.fillOpacity=`${te}`),M&&s.tagName.toLowerCase()==="path"&&pe[m]&&s.setAttribute("d",pe[m]);});}if(j.forEach(s=>{$t(s);let m=Ge(s);H.push(m),s.tagName.toLowerCase()==="path"?pe.push(s.getAttribute("d")??""):pe.push(""),o?(s.style.strokeDasharray=`${m}`,s.style.strokeDashoffset=E==="reverse"?`${m}`:"0",l&&(s.style.opacity="1"),p&&(s.style.stroke=p),B!==null&&(s.style.strokeWidth=`${B}`),ie!==null&&(s.style.fillOpacity=`${ie}`),M&&s.tagName.toLowerCase()==="path"&&s.setAttribute("d",M)):(s.style.strokeDasharray=`${m}`,s.style.strokeDashoffset=E==="reverse"?"0":`${m}`,l?s.style.opacity=E==="reverse"?"1":"0":s.style.opacity="",a&&(s.style.stroke=a),K!==null&&(s.style.strokeWidth=`${K}`),te!==null&&(s.style.fillOpacity=`${te}`));}),we){if(o)return e.style.clipPath=re(1),b?.(),{destroy:()=>{},replay:()=>{},pause:()=>{},resume:()=>{},seek:()=>{},getProgress:()=>1};e.style.clipPath=re(0);}else if(o)return b?.(),{destroy:()=>{},replay:()=>{},pause:()=>{},resume:()=>{},seek:()=>{},getProgress:()=>1};function St(){return !(Y===false||!Ct()||!j.length||typeof g!="string"||!(g in it)||we||F!=="y"||ee||u!==1||N!==0||J||q||C!==false||M||y||S||D>0||d||I||b||w||Z||Se||be||T!=null||A!=null||h!=null||(P.start??"top bottom").trim()!=="top bottom"||(P.end??"bottom top").trim()!=="bottom top")}function xt(){let s=`svg-scroll-draw-${++Lt}`,m=E==="reverse"?"0":"var(--ssd-len)",x=E==="reverse"?"var(--ssd-len)":"0",Q=`stroke-dashoffset:${m};`,ce=`stroke-dashoffset:${x};`;l&&(Q+=`opacity:${E==="reverse"?1:0};`,ce+=`opacity:${E==="reverse"?0:1};`);let ue=document.createElement("style");ue.setAttribute("data-svg-scroll-draw",""),ue.textContent=`@keyframes ${s}{from{${Q}}to{${ce}}}.${s}{animation-name:${s};animation-duration:auto;animation-timing-function:${it[g]};animation-fill-mode:both;animation-timeline:view();animation-range:cover 0% cover 100%;}`,document.head.appendChild(ue);function de(f,L){f.style.setProperty("--ssd-len",String(H[L])),f.style.strokeDasharray=`${H[L]}`,f.style.strokeDashoffset="",f.style.opacity="",f.style.animationPlayState="",f.classList.add(s);}j.forEach(de);let v=false,z=-1;function V(){if(z>=0)return z;let f=e.getBoundingClientRect(),{tStart:L,tEnd:X}=me({top:f.top,height:f.height},Fe(),Qe(),Re,ke);return ge(U(Fe(),L,X,u))}return {destroy(){j.forEach(f=>{f.classList.remove(s),f.style.removeProperty("--ssd-len"),f.style.animationPlayState="";}),ue.remove();},replay(){v=false,z=-1,j.forEach(de);},pause(){v=true,j.forEach(f=>{f.style.animationPlayState="paused";});},resume(){v&&(v=false,j.forEach(f=>{f.style.animationPlayState="running";}));},seek(f){let L=Math.min(1,Math.max(0,f));z=L,v=true,j.forEach((X,$e)=>{X.classList.remove(s),X.style.strokeDashoffset=E==="reverse"?`${H[$e]*L}`:`${H[$e]*(1-L)}`,l&&(X.style.opacity=E==="reverse"?`${1-L}`:`${L}`);});},getProgress(){return V()}}}if(St())return xt();function Tt(){let s=Math.max(1,W),m=0,x=0;function Q(V){let f=true;if(we){let L=Math.min(1,Math.max(0,V/s)),X=ge(L);Ce=X,e.style.setProperty("--scroll-draw-progress",String(X)),e.style.clipPath=re(E==="reverse"?1-X:X),d?.(X),L<1&&(f=false);}else j.forEach((L,X)=>{let $e=X*N*s,Ie=Math.min(1,Math.max(0,(V-$e)/s)),Ee=ge(Ie);L.style.strokeDashoffset=E==="reverse"?`${H[X]*Ee}`:`${H[X]*(1-Ee)}`,l&&(L.style.opacity=E==="reverse"?`${1-Ee}`:`${Ee}`),a&&p?L.style.stroke=Oe(a,p,Ee):p&&(L.style.stroke=p),K!==null&&B!==null?L.style.strokeWidth=`${K+(B-K)*Ee}`:B!==null&&(L.style.strokeWidth=`${B}`),te!==null&&ie!==null?L.style.fillOpacity=`${te+(ie-te)*Ee}`:ie!==null&&(L.style.fillOpacity=`${ie}`),M&&L.tagName.toLowerCase()==="path"&&pe[X]&&L.setAttribute("d",Je(pe[X],M,Ee)),X===0&&(d?.(Ee),e.style.setProperty("--scroll-draw-progress",String(Ee))),Ie<1&&(f=false);});if(y){let L=Math.min(1,Math.max(0,V/s)),X=ge(L);for(let $e in y){let Ie=parseFloat($e);X>=Ie&&!Me.has(Ie)&&(Me.add(Ie),y[$e]?.());}}return f}function ce(V){if(le)return;let f=V-m;he||(he=true,I?.());let L=Q(f);if(L&&!ae){ae=true,Q(s*(1+Math.max(0,j.length-1)*N)),b?.(),xe<(S==="infinite"?1/0:S??0)&&(xe++,Ae=setTimeout(()=>{m=performance.now(),he=false,ae=false,Me.clear(),We(),se=requestAnimationFrame(ce);},O));return}L||(se=requestAnimationFrame(ce));}function ue(){cancelAnimationFrame(se),clearTimeout(Ae),m=performance.now(),x=0,le=false,he=false,ae=false,xe=0,Me.clear(),We(),se=requestAnimationFrame(ce);}let de=new IntersectionObserver(V=>{V.forEach(f=>{f.isIntersecting&&!(J&&ae)?ue():!f.isIntersecting&&!J&&!ae&&(cancelAnimationFrame(se),clearTimeout(Ae),m=null);});},{root:ee??null,threshold:$,rootMargin:k}),v;function z(){clearTimeout(v),v=setTimeout(()=>{j.forEach((V,f)=>{H[f]=Ge(V),V.style.strokeDasharray=`${H[f]}`;});},150);}return window.addEventListener("resize",z),window.addEventListener("orientationchange",z),D>0?setTimeout(()=>de.observe(e),D):de.observe(e),{destroy(){cancelAnimationFrame(se),clearTimeout(Ae),de.disconnect(),window.removeEventListener("resize",z),window.removeEventListener("orientationchange",z),clearTimeout(v);},replay(){xe=0,ue();},pause(){le||(le=true,x=performance.now()-m,cancelAnimationFrame(se));},resume(){le&&(le=false,m=performance.now()-x,se=requestAnimationFrame(ce));},seek(V){let f=Math.min(1,Math.max(0,V));Ce=f,le=true,x=f*s,m=performance.now()-x,cancelAnimationFrame(se),Q(x);},getProgress(){return Ce}}}if(G)return Tt();et();function Be(){if(!ze||le)return;let s=performance.now(),m=Fe(),x=u;if(C!==false){let v=s-Ke,z=v>0?Math.abs(m-(qe<0?m:qe))/v:0;x=u*Math.max(.2,1+z*(typeof C=="number"?C:1)*.04);}qe=m,Ke=s;let Q=q?Ve===-1||m>=Ve?"forward":"reverse":E;Ve=m;let ce=Te-ye,ue=true,de=ce===0?0:(m-ye)/ce;if(isNaN(Ne)||(Ne<=0&&de>0?w?.():Ne>0&&de<=0&&be?.(),Ne<1&&de>=1?Z?.():Ne>=1&&de<1&&Se?.()),Ne=de,we){let v=ge(U(m,ye,Te,x));J&&!q&&(ve=Math.max(ve,v),v=ve),Ce=v,e.style.setProperty("--scroll-draw-progress",String(v));let z=Q==="reverse"?1-v:v;e.style.clipPath=re(z),d?.(v),!he&&U(m,ye,Te,x)>0&&(he=true,I?.()),v>=1&&!ae?(ae=true,b?.(),xe<(S==="infinite"?1/0:S??0)&&(xe++,Ae=setTimeout(()=>{ve=-1,he=false,ae=false,e.style.clipPath=re(0);},O))):v<1&&!J&&(ae=false),se=requestAnimationFrame(Be);return}if(j.forEach((v,z)=>{let V=z*N*ce,f=ge(U(m,ye+V,Te+V,x));J&&!q&&(ve=Math.max(ve,f),f=ve),Ce=f,v.style.strokeDashoffset=Q==="reverse"?`${H[z]*f}`:`${H[z]*(1-f)}`,l&&(v.style.opacity=Q==="reverse"?`${1-f}`:`${f}`),a&&p?v.style.stroke=Oe(a,p,f):p&&(v.style.stroke=p),K!==null&&B!==null?v.style.strokeWidth=`${K+(B-K)*f}`:B!==null&&(v.style.strokeWidth=`${B}`),te!==null&&ie!==null?v.style.fillOpacity=`${te+(ie-te)*f}`:ie!==null&&(v.style.fillOpacity=`${ie}`),M&&v.tagName.toLowerCase()==="path"&&pe[z]&&v.setAttribute("d",Je(pe[z],M,f)),z===0&&(d?.(f),e.style.setProperty("--scroll-draw-progress",String(f))),f<1&&(ue=false);}),y){let v=ge(U(m,ye,Te,x));for(let z in y){let V=parseFloat(z);v>=V&&!Me.has(V)&&(Me.add(V),y[z]?.());}}!he&&U(m,ye,Te,x)>0&&(he=true,I?.()),ue&&!ae?(ae=true,b?.(),xe<(S==="infinite"?1/0:S??0)&&(xe++,Ae=setTimeout(()=>{ve=-1,he=false,ae=false,Me.clear(),We();},O))):!ue&&!J&&(ae=false),se=requestAnimationFrame(Be);}let je=new IntersectionObserver(s=>{s.forEach(m=>{ze=m.isIntersecting,ze&&!le?se=requestAnimationFrame(Be):cancelAnimationFrame(se);});},{root:ee??null,threshold:$,rootMargin:k}),Ue;function _e(){clearTimeout(Ue),Ue=setTimeout(()=>{j.forEach((s,m)=>{H[m]=Ge(s),s.style.strokeDasharray=`${H[m]}`;}),et();},150);}return window.addEventListener("resize",_e),window.addEventListener("orientationchange",_e),D>0?setTimeout(()=>je.observe(e),D):je.observe(e),{destroy(){cancelAnimationFrame(se),clearTimeout(Ae),je.disconnect(),window.removeEventListener("resize",_e),window.removeEventListener("orientationchange",_e),clearTimeout(Ue),Ye?.remove();},replay(){ve=-1,Ve=-1,qe=-1,he=false,ae=false,xe=0,le=false,Me.clear(),clearTimeout(Ae),We();},pause(){le=true,cancelAnimationFrame(se);},resume(){le&&(le=false,ze&&(se=requestAnimationFrame(Be)));},seek(s){let m=Math.min(1,Math.max(0,s));Ce=m,ve=m,le=true,cancelAnimationFrame(se),Et(m,E);},getProgress(){return Ce}}}var lt=new Map;function Pe(e,n){lt.set(e,n);}function Le(e){lt.delete(e);}function Nt(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 i=[],o=[],c=t[2].trim();if(c)for(let u of c.split(/[\s,]+/)){let l=u.match(/^([-+]?[\d.eE]+)(.*)$/);i.push(l?parseFloat(l[1]):0),o.push(l?l[2]:"");}n.push({fn:t[1],nums:i,units:o});}return n}function It(e,n,r){let t=ct(e),i=ct(n);return t.length===0||t.length!==i.length?r<1?e:n:t.map((o,c)=>{let u=i[c];return o.fn!==u.fn||o.nums.length!==u.nums.length?r<1?`${o.fn}(${o.nums.map((l,g)=>`${l}${o.units[g]}`).join(", ")})`:`${u.fn}(${u.nums.map((l,g)=>`${l}${u.units[g]}`).join(", ")})`:`${o.fn}(${o.nums.map((l,g)=>`${l+(u.nums[g]-l)*r}${o.units[g]}`).join(", ")})`}).join(" ")}function ut(e,n,r){if(typeof e=="number"&&typeof n=="number")return String(e+(n-e)*r);let t=String(e),i=String(n);if(Nt(t))return Oe(t,i,r);if(t.includes("("))return It(t,i,r);let o=t.match(/^([-+]?[\d.]+)(.*)$/),c=i.match(/^([-+]?[\d.]+)(.*)$/);if(o&&c){let u=parseFloat(o[1]),l=parseFloat(c[1]);return `${u+(l-u)*r}${o[2]||c[2]}`}return r<1?t:i}function Ot(e){return e.replace(/([A-Z])/g,n=>`-${n.toLowerCase()}`)}var mt={linear:"linear","ease-in":"ease-in","ease-out":"ease-out","ease-in-out":"ease-in-out"},Rt=new Set(["opacity","transform","background-color","color","filter","scale","translate","rotate"]),Ft=0;function Dt(){return typeof CSS<"u"&&typeof CSS.supports=="function"&&CSS.supports("animation-timeline: view()")}function ft(e,n){let r={destroy:()=>{},replay:()=>{},pause:()=>{},resume:()=>{},seek:()=>{},getProgress:()=>0};if(typeof window>"u")return r;let{props:t,trigger:i={},easing:o="ease-out",speed:c=1,once:u=false,axis:l="y",scrollContainer:g,native:P=true,onProgress:N,onComplete:E,onEnter:J,onLeave:fe,onEnterBack:F,onLeaveBack:_}=n,q=window.matchMedia("(prefers-reduced-motion: reduce)").matches,D=typeof o=="function"?o:ne[o]??ne["ease-out"],T=oe(i.start??"top bottom"),A=oe(i.end??"bottom top"),h=typeof g=="string"?document.querySelector(g):g??null,y=Object.entries(t).map(([a,p])=>({prop:Ot(a),from:Array.isArray(p)?p[0]:"",to:Array.isArray(p)?p[1]:p}));function C(){let a=window.getComputedStyle(e);for(let p of y)p.from===""&&(p.from=a.getPropertyValue(p.prop).trim()||"0");}function $(){for(let a of y)e.style.setProperty(a.prop,String(a.to));}if(q)return $(),E?.(),r;C();function k(){if(!P||!Dt()||typeof o!="string"||!(o in mt)||l!=="y"||h||u||c!==1||N||E||J||fe||F||_||(i.start??"top bottom").trim()!=="top bottom"||(i.end??"bottom top").trim()!=="bottom top")return false;for(let a of y)if(!Rt.has(a.prop))return false;return true}function S(){let a=`ssd-a-${++Ft}`,p=y.map(re=>`${re.prop}:${re.from}`).join(";"),K=y.map(re=>`${re.prop}:${re.to}`).join(";"),B=document.createElement("style");B.setAttribute("data-ssd-animate",""),B.textContent=`@keyframes ${a}{from{${p}}to{${K}}}.${a}{animation-name:${a};animation-duration:auto;animation-timing-function:${mt[o]};animation-fill-mode:both;animation-timeline:view();animation-range:cover 0% cover 100%;}`,document.head.appendChild(B),e.classList.add(a);let te=()=>l==="x"?window.scrollX:window.scrollY,ie=()=>l==="x"?window.innerWidth:window.innerHeight;return {destroy(){e.classList.remove(a),B.remove();},replay(){e.classList.remove(a),e.offsetWidth,e.classList.add(a);},pause(){e.style.animationPlayState="paused";},resume(){e.style.animationPlayState="";},seek(re){let j=Math.min(1,Math.max(0,re));e.classList.remove(a);for(let H of y)e.style.setProperty(H.prop,ut(H.from,H.to,j));},getProgress(){let re=e.getBoundingClientRect(),j=te(),H=ie(),{tStart:pe,tEnd:ye}=me({top:re.top,height:re.height},j,H,T,A);return D(U(j,pe,ye,c))}}}if(k())return S();let O=0,M=0,R=0,G=false,W=false,Y=-1,d=0,I=false,b=NaN,w=()=>h?l==="x"?h.scrollLeft:h.scrollTop:l==="x"?window.scrollX:window.scrollY,Z=()=>h?l==="x"?h.clientWidth:h.clientHeight:l==="x"?window.innerWidth:window.innerHeight;function Se(){let a=e.getBoundingClientRect(),p,K;if(h){let te=h.getBoundingClientRect();p=l==="x"?a.left-te.left+h.scrollLeft:a.top-te.top+h.scrollTop,K=l==="x"?a.width:a.height;}else p=l==="x"?a.left:a.top,K=l==="x"?a.width:a.height;let B=me({top:p,height:K},w(),Z(),T,A);O=B.tStart,M=B.tEnd;}function be(a){e.style.setProperty("--scroll-draw-progress",String(a));for(let p of y)e.style.setProperty(p.prop,ut(p.from,p.to,a));N?.(a);}function we(a){if(isNaN(b)){b=a;return}b<=0&&a>0?J?.():b>0&&a<=0&&_?.(),b<1&&a>=1?fe?.():b>=1&&a<1&&F?.(),b=a;}function ge(){if(!G||W)return;let a=M===O?0:(w()-O)/(M-O);we(a);let p=D(U(w(),O,M,c));u&&(Y=Math.max(Y,p),p=Y),d=p,be(p),p>=1&&!I?(I=true,E?.()):p<1&&!u&&(I=false),R=requestAnimationFrame(ge);}Se();{let a=D(U(w(),O,M,c));u&&a>0&&(Y=a),d=a,be(a);}let Re=new IntersectionObserver(a=>{a.forEach(p=>{G=p.isIntersecting,G&&!W?R=requestAnimationFrame(ge):cancelAnimationFrame(R);});},{root:h??null}),ke;function ee(){clearTimeout(ke),ke=setTimeout(Se,150);}return window.addEventListener("resize",ee),window.addEventListener("orientationchange",ee),Re.observe(e),Pe(e,{type:"animate",getProgress:()=>d,getTrigger:()=>({tStart:O,tEnd:M})}),{destroy(){cancelAnimationFrame(R),Re.disconnect(),window.removeEventListener("resize",ee),window.removeEventListener("orientationchange",ee),clearTimeout(ke),Le(e);},replay(){Y=-1,I=false,d=0,W=false,be(0);},pause(){W=true,cancelAnimationFrame(R);},resume(){W&&(W=false,G&&(R=requestAnimationFrame(ge)));},seek(a){let p=Math.min(1,Math.max(0,a));d=p,Y=p,W=true,cancelAnimationFrame(R),be(p);},getProgress(){return d}}}var Ze={destroy:()=>{},replay:()=>{},pause:()=>{},resume:()=>{},seek:()=>{},getProgress:()=>0};function pt(e,n){if(typeof window>"u")return Ze;let r=typeof e=="string"?document.querySelector(e):e;if(!r)return process.env.NODE_ENV!=="production"&&console.warn("[svg-scroll-draw] scrollCounter: element not found:",e),Ze;let t=r,{from:i=0,to:o,format:c,easing:u="ease-out",trigger:l={},once:g=true,decimals:P,onComplete:N}=n,E=P!==void 0?d=>d.toFixed(P):c??(d=>String(Math.round(d))),J=typeof u=="function"?u:ne[u]??ne["ease-out"],fe=oe(l.start??"top 80%"),F=oe(l.end??"top 20%");if(window.matchMedia("(prefers-reduced-motion: reduce)").matches)return t.textContent=E(o),N?.(),Ze;t.textContent=E(i);let q=0,D=0,T=0,A=false,h=false,y=-1,C=0,$=false,k=()=>window.scrollY,S=()=>window.innerHeight;function O(){let d=t.getBoundingClientRect(),I=me({top:d.top,height:d.height},k(),S(),fe,F);q=I.tStart,D=I.tEnd;}function M(d){t.textContent=E(i+(o-i)*d),t.style.setProperty("--scroll-draw-progress",String(d));}function R(){if(!A||h)return;let d=J(U(k(),q,D,1));g&&(y=Math.max(y,d),d=y),C=d,M(d),d>=1&&!$?($=true,N?.()):d<1&&!g&&($=false),T=requestAnimationFrame(R);}O();{let d=J(U(k(),q,D,1));g&&d>0&&(y=d),C=d,M(d);}let G=new IntersectionObserver(d=>{d.forEach(I=>{A=I.isIntersecting,A&&!h?T=requestAnimationFrame(R):cancelAnimationFrame(T);});}),W;function Y(){clearTimeout(W),W=setTimeout(O,150);}return window.addEventListener("resize",Y),window.addEventListener("orientationchange",Y),G.observe(t),Pe(t,{type:"counter",getProgress:()=>C,getTrigger:()=>({tStart:q,tEnd:D})}),{destroy(){cancelAnimationFrame(T),G.disconnect(),window.removeEventListener("resize",Y),window.removeEventListener("orientationchange",Y),clearTimeout(W),Le(t);},replay(){y=-1,$=false,C=0,h=false,M(0);},pause(){h=true,cancelAnimationFrame(T);},resume(){h&&(h=false,A&&(T=requestAnimationFrame(R)));},seek(d){let I=Math.min(1,Math.max(0,d));C=I,y=I,h=true,cancelAnimationFrame(T),M(I);},getProgress(){return C}}}var dt={destroy:()=>{},replay:()=>{},pause:()=>{},resume:()=>{},seek:()=>{},getProgress:()=>0};function gt(e,n={}){if(typeof window>"u")return dt;let r=typeof e=="string"?document.querySelector(e):e;if(!r||r.tagName.toLowerCase()!=="video")return process.env.NODE_ENV!=="production"&&console.warn("[svg-scroll-draw] scrollVideo: <video> element not found:",e),dt;let t=r,{trigger:i={},easing:o="linear",once:c=false,axis:u="y",preload:l="auto",onReady:g,onComplete:P,onProgress:N}=n,E=window.matchMedia("(prefers-reduced-motion: reduce)").matches,J=typeof o=="function"?o:ne[o]??ne.linear,fe=oe(i.start??"top top"),F=oe(i.end??"bottom top");t.pause(),t.hasAttribute("preload")||(t.preload=l);let _=n.from??0,q=n.to,D=0,T=0,A=0,h=false,y=false,C=-1,$=0,k=false,S=false,O=()=>u==="x"?window.scrollX:window.scrollY,M=()=>u==="x"?window.innerWidth:window.innerHeight;function R(){let w=t.getBoundingClientRect(),Z=u==="x"?w.left:w.top,Se=u==="x"?w.width:w.height,be=me({top:Z,height:Se},O(),M(),fe,F);D=be.tStart,T=be.tEnd;}function G(w){if(!S)return;let Z=q??t.duration??0;t.currentTime=_+(Z-_)*w,t.style.setProperty("--scroll-draw-progress",String(w)),N?.(w);}function W(){if(!h||y||!S)return;let w=J(U(O(),D,T,1));c&&(C=Math.max(C,w),w=C),$=w,G(w),w>=1&&!k?(k=true,P?.()):w<1&&!c&&(k=false),A=requestAnimationFrame(W);}function Y(){if(S=true,q===void 0&&(q=t.duration),E){G(1),g?.();return}R(),g?.(),h&&!y&&(A=requestAnimationFrame(W));}t.readyState>=1?Y():t.addEventListener("loadedmetadata",Y,{once:true}),S||R();let d=new IntersectionObserver(w=>{w.forEach(Z=>{h=Z.isIntersecting,h&&!y&&S?A=requestAnimationFrame(W):cancelAnimationFrame(A);});}),I;function b(){clearTimeout(I),I=setTimeout(R,150);}return window.addEventListener("resize",b),window.addEventListener("orientationchange",b),d.observe(t),Pe(t,{type:"video",getProgress:()=>$,getTrigger:()=>({tStart:D,tEnd:T})}),{destroy(){cancelAnimationFrame(A),d.disconnect(),t.removeEventListener("loadedmetadata",Y),window.removeEventListener("resize",b),window.removeEventListener("orientationchange",b),clearTimeout(I),Le(t);},replay(){C=-1,k=false,$=0,y=false,G(0);},pause(){y=true,cancelAnimationFrame(A);},resume(){y&&(y=false,h&&S&&(A=requestAnimationFrame(W)));},seek(w){let Z=Math.min(1,Math.max(0,w));$=Z,C=Z,y=true,cancelAnimationFrame(A),G(Z);},getProgress(){return $}}}function bt(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 Ht(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 yt(e){let n=bt(e),r=new Map;for(let o of n){let c=o.offsetTop;r.has(c)||r.set(c,[]),r.get(c).push(o);}let t=[],i=Array.from(r.keys()).sort((o,c)=>o-c);for(let o of i){let c=r.get(o),u=document.createElement("span");u.setAttribute("aria-hidden","true"),u.style.display="inline-block";for(let l of c)u.appendChild(l);t.push(u);}e.textContent="";for(let o of t)e.appendChild(o),e.appendChild(document.createTextNode(" "));return t}function zt(e,n,r,t){if(r<=1||t===0)return e;let i=(r-1)*t,o=n*t,c=o+(1-i);return c<=o?e>=o?1:0:Math.min(1,Math.max(0,(e-o)/(c-o)))}function Vt(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 ht={destroy:()=>{},replay:()=>{},pause:()=>{},resume:()=>{},seek:()=>{},getProgress:()=>0};function wt(e,n={}){if(typeof window>"u")return ht;let r=typeof e=="string"?document.querySelector(e):e;if(!r)return process.env.NODE_ENV!=="production"&&console.warn("[svg-scroll-draw] scrollText: element not found:",e),ht;let t=r,{split:i="words",stagger:o=.04,easing:c="ease-out",from:u={opacity:0,y:24},trigger:l={},once:g=true,onComplete:P}=n,N=window.matchMedia("(prefers-reduced-motion: reduce)").matches,E=typeof c=="function"?c:ne[c]??ne["ease-out"],J=oe(l.start??"top 85%"),fe=oe(l.end??"top 40%"),F=t.innerHTML;t.setAttribute("aria-label",t.textContent??"");let _;i==="chars"?_=Ht(t):i==="lines"?_=yt(t):_=bt(t);let q=_.length;function D(b,w){u?.opacity!==void 0&&(b.style.opacity=String(u.opacity+(1-u.opacity)*w));let Z=Vt(w,u);Z&&(b.style.transform=Z);}function T(b){t.style.setProperty("--scroll-draw-progress",String(b)),_.forEach((w,Z)=>{let Se=E(zt(b,Z,q,o));D(w,Se);});}if(N)return T(1),P?.(),{destroy(){t.innerHTML=F,t.removeAttribute("aria-label");},replay:()=>{},pause:()=>{},resume:()=>{},seek:()=>{},getProgress:()=>1};T(0);let A=0,h=0,y=0,C=false,$=false,k=-1,S=0,O=false,M=()=>window.scrollY,R=()=>window.innerHeight;function G(){let b=t.getBoundingClientRect(),w=me({top:b.top,height:b.height},M(),R(),J,fe);A=w.tStart,h=w.tEnd;}function W(){if(!C||$)return;let b=U(M(),A,h,1);g&&(k=Math.max(k,b),b=k),S=b,T(b),b>=1&&!O?(O=true,P?.()):b<1&&!g&&(O=false),y=requestAnimationFrame(W);}G();let Y=new IntersectionObserver(b=>{b.forEach(w=>{C=w.isIntersecting,C&&!$?y=requestAnimationFrame(W):cancelAnimationFrame(y);});}),d;function I(){clearTimeout(d),d=setTimeout(()=>{if(i==="lines"){let b=S;t.innerHTML=F,t.setAttribute("aria-label",t.textContent??""),_=yt(t),T(b);}G();},150);}return window.addEventListener("resize",I),window.addEventListener("orientationchange",I),Y.observe(t),Pe(t,{type:"text",getProgress:()=>S,getTrigger:()=>({tStart:A,tEnd:h})}),{destroy(){cancelAnimationFrame(y),Y.disconnect(),window.removeEventListener("resize",I),window.removeEventListener("orientationchange",I),clearTimeout(d),t.innerHTML=F,t.removeAttribute("aria-label"),Le(t);},replay(){k=-1,O=false,S=0,$=false,T(0);},pause(){$=true,cancelAnimationFrame(y);},resume(){$&&($=false,C&&(y=requestAnimationFrame(W)));},seek(b){let w=Math.min(1,Math.max(0,b));S=w,k=w,$=true,cancelAnimationFrame(y),T(w);},getProgress(){return S}}}function Bt(e,n={}){let[r,t]=_t.useState(0),i=_t.useRef(n);i.current=n;let o=_t.useRef(-1);return _t.useEffect(()=>{if(typeof window>"u")return;if(window.matchMedia("(prefers-reduced-motion: reduce)").matches){t(1);return}let c=typeof e=="string"?document.querySelector(e):e.current;if(!c)return;let u=c,{axis:l="y",scrollContainer:g,trigger:P={}}=i.current,N=typeof g=="string"?document.querySelector(g):g??null,E=oe(P.start??"top bottom"),J=oe(P.end??"bottom top"),fe=0,F=0,_=false,q=0;function D(){return N?l==="x"?N.scrollLeft:N.scrollTop:l==="x"?window.scrollX:window.scrollY}function T(){return N?l==="x"?N.clientWidth:N.clientHeight:l==="x"?window.innerWidth:window.innerHeight}function A(){let k=u.getBoundingClientRect(),S=D(),O=l==="x"?k.left:k.top,M=l==="x"?k.width:k.height,R=me({top:O,height:M},S,T(),E,J);fe=R.tStart,F=R.tEnd;}function h(){if(!_)return;let{speed:k=1,easing:S="linear",once:O=false}=i.current,M=typeof S=="function"?S:ne[S]??ne.linear,R=U(D(),fe,F,k),G=M(R);O&&(o.current=Math.max(o.current,G),G=o.current),t(G),q=requestAnimationFrame(h);}let y=new IntersectionObserver(k=>{k.forEach(S=>{_=S.isIntersecting,_?q=requestAnimationFrame(h):cancelAnimationFrame(q);});},{root:N??null,threshold:0});A(),y.observe(u);let C;function $(){clearTimeout(C),C=setTimeout(A,150);}return window.addEventListener("resize",$),window.addEventListener("orientationchange",$),()=>{cancelAnimationFrame(q),clearTimeout(C),y.disconnect(),window.removeEventListener("resize",$),window.removeEventListener("orientationchange",$);}},[]),r}function br({children:e,className:n,style:r,...t}){let i=_t.useRef(null);return _t.useEffect(()=>{if(!i.current)return;let o=at(i.current,t);return ()=>o.destroy()},[]),jsxRuntime.jsx("div",{ref:i,className:n,style:r,children:e})}function wr({children:e,className:n,style:r,...t}){let i=_t.useRef(null);return _t.useEffect(()=>{if(!i.current)return;let o=ft(i.current,t);return ()=>o.destroy()},[]),jsxRuntime.jsx("div",{ref:i,className:n,style:r,children:e})}function vr({className:e,style:n,...r}){let t=_t.useRef(null);return _t.useEffect(()=>{if(!t.current)return;let i=pt(t.current,r);return ()=>i.destroy()},[]),jsxRuntime.jsx("span",{ref:t,className:e,style:n})}function Er({src:e,className:n,style:r,muted:t=true,playsInline:i=true,...o}){let c=_t.useRef(null);return _t.useEffect(()=>{if(!c.current)return;let u=gt(c.current,o);return ()=>u.destroy()},[]),jsxRuntime.jsx("video",{ref:c,src:e,className:n,style:r,muted:t,playsInline:i,preload:"auto"})}function Sr({children:e,as:n="p",className:r,style:t,...i}){let o=_t.useRef(null);return _t.useEffect(()=>{if(!o.current)return;let c=wt(o.current,i);return ()=>c.destroy()},[]),_t__default.default.createElement(n,{ref:o,className:r,style:t},e)}exports.ScrollAnimate=wr;exports.ScrollCounter=vr;exports.ScrollDraw=br;exports.ScrollText=Sr;exports.ScrollVideo=Er;exports.useScrollDrawProgress=Bt;
|
|
1
|
+
'use strict';var _t=require('react'),jsxRuntime=require('react/jsx-runtime');function _interopDefault(e){return e&&e.__esModule?e:{default:e}}var _t__default=/*#__PURE__*/_interopDefault(_t);function At({bounces:e=3,decay:n=.5}={}){let r=Math.max(1,Math.round(e)),t=Math.max(.01,Math.min(.99,n)),i=Math.sqrt(t),o=0,l=[];for(let y=0;y<r;y++){let L=Math.pow(i,y);l.push(L),o+=L;}let u=[0],c=0;for(let y=0;y<r;y++)c+=l[y]/o,u.push(c);return y=>{if(y<=0)return 0;if(y>=1)return 1;for(let L=0;L<r;L++)if(y<=u[L+1]){let C=(y-u[L])/(u[L+1]-u[L]);if(L===0)return C*(2-C);let S=1-Math.pow(t,L);return S+(1-S)*(2*C-1)*(2*C-1)}return 1}}function Mt({amplitude:e=1,period:n=.4}={}){let r=Math.max(1,e),t=Math.max(.1,n),i=r<=1?t/4:t/(2*Math.PI)*Math.asin(1/r);return o=>o<=0?0:o>=1?1:r*Math.pow(2,-10*o)*Math.sin((o-i)*(2*Math.PI)/t)+1}var re={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:At(),elastic:Mt()};function ne(e="top bottom"){let n=e.trim();if(/^\d+(\.\d+)?%$/.test(n))return {element:"top",viewport:n};let[r="top",t="bottom"]=n.split(/\s+/).filter(Boolean);return {element:r,viewport:t}}function tt(e,n,r,t){switch(t){case "top":return e+r;case "center":return e+r+n/2;case "bottom":return e+r+n;default:return e+r}}function rt(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 Ge(e){let n=e.tagName.toLowerCase();if(n==="rect"){let r=parseFloat(e.getAttribute("width")??"0"),t=parseFloat(e.getAttribute("height")??"0");return 2*(r+t)}if(n==="circle"){let r=parseFloat(e.getAttribute("r")??"0");return 2*Math.PI*r}return e.getTotalLength()}function Pt(e,n,r){return Math.min(r,Math.max(n,e))}function Z(e,n,r,t){return r===n?0:Pt((e-n)/(r-n)*t,0,1)}function pe(e,n,r,t,i){let o=tt(e.top,e.height,n,t.element)-rt(t.viewport,r),l=tt(e.top,e.height,n,i.element)-rt(i.viewport,r);return {tStart:o,tEnd:l}}function nt(e){let n=/^#([a-f\d])([a-f\d])([a-f\d])$/i.exec(e);if(n)return [parseInt(n[1]+n[1],16),parseInt(n[2]+n[2],16),parseInt(n[3]+n[3],16)];let r=/^#([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(e);if(r)return [parseInt(r[1],16),parseInt(r[2],16),parseInt(r[3],16)];let t=/^rgb\(\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*\)$/i.exec(e);return t?[parseInt(t[1]),parseInt(t[2]),parseInt(t[3])]:null}function Oe(e,n,r){let t=nt(e),i=nt(n);return !t||!i?e:`rgb(${Math.round(t[0]+(i[0]-t[0])*r)},${Math.round(t[1]+(i[1]-t[1])*r)},${Math.round(t[2]+(i[2]-t[2])*r)})`}var ot={sketch:{easing:"ease-in",stagger:.1,speed:.9,fade:false},reveal:{easing:"ease-out",fade:true,speed:1.2,once:true},typewriter:{easing:"linear",stagger:.05,speed:1.5},cinematic:{easing:"ease-in-out",fade:true,speed:.75},spring:{easing:"spring",speed:1.1}};function st(e,n){process.env.NODE_ENV!=="production"&&console.warn(`[svg-scroll-draw] ${e}`,n);}var it={linear:"linear","ease-in":"ease-in","ease-out":"ease-out","ease-in-out":"ease-in-out"},Lt=0;function Ct(){return typeof CSS<"u"&&typeof CSS.supports=="function"&&CSS.supports("animation-timeline: view()")}function $t(e){let n=e.getAttribute("stroke"),r=e.getAttribute("fill");!n||n==="none"?st("Element has no stroke \u2014 path will not be visible.",e):r&&r!=="none"&&r!=="transparent"&&st("Element has a fill \u2014 it may obscure the stroke animation.",e);}function kt(e,n,r){let t=document.createElement("div");t.setAttribute("data-svg-scroll-draw-debug",""),t.style.cssText="position:fixed;pointer-events:none;z-index:9999;font-family:monospace;font-size:11px;top:0;left:0;right:0;bottom:0;";function i(){let o=r==="x"?window.scrollX:window.scrollY,l=e-o,u=n-o,c=r==="x";t.innerHTML=`
|
|
2
|
+
<div style="position:absolute;${c?`left:${l}px;top:0;bottom:0;border-left:2px dashed #22c55e;`:`top:${l}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;${c?`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",i,{passive:true}),i(),t}function Je(e,n,r){let t=(n.match(/[-+]?(?:\d*\.)?\d+(?:[eE][-+]?\d+)?/g)??[]).map(Number),i=0;return e.replace(/[-+]?(?:\d*\.)?\d+(?:[eE][-+]?\d+)?/g,o=>{let l=parseFloat(o),u=t[i++]??l;return String(+(l+(u-l)*r).toFixed(4))})}function at(e,n={}){if(typeof window>"u")return {destroy:()=>{},replay:()=>{},pause:()=>{},resume:()=>{},seek:()=>{},getProgress:()=>0};let{preset:r,...t}=n,i=r?{...ot[r],...t}:t,o=window.matchMedia("(prefers-reduced-motion: reduce)").matches,{selector:l="path, polyline, line, polygon, rect, circle",speed:u=1,fade:c=false,easing:y="linear",trigger:L={},stagger:C=0,direction:S="forward",once:U=false,debug:de=false,axis:F="y",scrollContainer:_,autoReverse:H=false,delay:G=0,strokeColor:x,strokeWidth:M,fillOpacity:P,waypoints:p,velocityScale:v=false,threshold:N=0,rootMargin:I="0px",repeat:E=0,repeatDelay:J=0,morphTo:T,clip:R,autoplay:D=false,duration:K=1e3,native:X=true,onProgress:d,onStart:$,onComplete:b,onEnter:h,onLeave:Y,onEnterBack:Se,onLeaveBack:xe}=i,be=R===true?"left":typeof R=="string"?R:false,we=typeof y=="function"?y:re[y]??re.linear,Ce=ne(L.start??"top bottom"),He=ne(L.end??"bottom top"),oe=typeof _=="string"?document.querySelector(_):_??null,ge=Array.isArray(x)?x[0]:null,ee=Array.isArray(x)?x[1]:typeof x=="string"?x:null,te=Array.isArray(M)?M[0]:null,a=Array.isArray(M)?M[1]:typeof M=="number"?M:null,g=Array.isArray(P)?P[0]:null,z=Array.isArray(P)?P[1]:typeof P=="number"?P:null;function se(s){let m=s*100;switch(be){case "right":return `inset(0 0 0 ${100-m}%)`;case "top":return `inset(0 0 ${100-m}% 0)`;case "bottom":return `inset(${100-m}% 0 0 0)`;case "center":return `circle(${s*150}% at 50% 50%)`;default:return `inset(0 ${100-m}% 0 0)`}}let O=be?[]:Array.from(e.querySelectorAll(l)),B=[],V=[],le=0,ce=0,ie=false,ye=false,ae=0,ze=false,ve=-1,Ve=-1,ue=false,$e=0,Te=0,Ae,Ye=null,Me=new Set,qe=-1,Ke=performance.now(),Ne=NaN;function Re(){return oe?F==="x"?oe.scrollLeft:oe.scrollTop:F==="x"?window.scrollX:window.scrollY}function Qe(){return oe?F==="x"?oe.clientWidth:oe.clientHeight:F==="x"?window.innerWidth:window.innerHeight}function et(){let s=e.getBoundingClientRect(),m,A,Q;if(oe){let fe=oe.getBoundingClientRect();m=F==="x"?s.left-fe.left+oe.scrollLeft:s.top-fe.top+oe.scrollTop,A=F==="x"?s.width:s.height,Q=Re();}else m=F==="x"?s.left:s.top,A=F==="x"?s.width:s.height,Q=Re();let me=pe({top:m,height:A},Q,Qe(),Ce,He);le=me.tStart,ce=me.tEnd,de&&process.env.NODE_ENV!=="production"&&(Ye?.remove(),Ye=kt(le,ce,F));}function Et(s,m){if(e.style.setProperty("--scroll-draw-progress",String(s)),be){let A=m==="reverse"?1-s:s;e.style.clipPath=se(A);return}O.forEach((A,Q)=>{A.style.strokeDashoffset=m==="reverse"?`${B[Q]*s}`:`${B[Q]*(1-s)}`,c&&(A.style.opacity=m==="reverse"?`${1-s}`:`${s}`),ge&&ee?A.style.stroke=Oe(ge,ee,s):ee&&(A.style.stroke=ee),te!==null&&a!==null?A.style.strokeWidth=`${te+(a-te)*s}`:a!==null&&(A.style.strokeWidth=`${a}`),g!==null&&z!==null?A.style.fillOpacity=`${g+(z-g)*s}`:z!==null&&(A.style.fillOpacity=`${z}`),T&&A.tagName.toLowerCase()==="path"&&V[Q]&&A.setAttribute("d",Je(V[Q],T,s));});}function We(){if(e.style.setProperty("--scroll-draw-progress","0"),be){e.style.clipPath=se(0);return}O.forEach((s,m)=>{s.style.strokeDasharray=`${B[m]}`,s.style.strokeDashoffset=S==="reverse"?"0":`${B[m]}`,c?s.style.opacity=S==="reverse"?"1":"0":s.style.opacity="",ge&&(s.style.stroke=ge),te!==null&&(s.style.strokeWidth=`${te}`),g!==null&&(s.style.fillOpacity=`${g}`),T&&s.tagName.toLowerCase()==="path"&&V[m]&&s.setAttribute("d",V[m]);});}if(O.forEach(s=>{$t(s);let m=Ge(s);B.push(m),s.tagName.toLowerCase()==="path"?V.push(s.getAttribute("d")??""):V.push(""),o?(s.style.strokeDasharray=`${m}`,s.style.strokeDashoffset=S==="reverse"?`${m}`:"0",c&&(s.style.opacity="1"),ee&&(s.style.stroke=ee),a!==null&&(s.style.strokeWidth=`${a}`),z!==null&&(s.style.fillOpacity=`${z}`),T&&s.tagName.toLowerCase()==="path"&&s.setAttribute("d",T)):(s.style.strokeDasharray=`${m}`,s.style.strokeDashoffset=S==="reverse"?"0":`${m}`,c?s.style.opacity=S==="reverse"?"1":"0":s.style.opacity="",ge&&(s.style.stroke=ge),te!==null&&(s.style.strokeWidth=`${te}`),g!==null&&(s.style.fillOpacity=`${g}`));}),be){if(o)return e.style.clipPath=se(1),b?.(),{destroy:()=>{},replay:()=>{},pause:()=>{},resume:()=>{},seek:()=>{},getProgress:()=>1};e.style.clipPath=se(0);}else if(o)return b?.(),{destroy:()=>{},replay:()=>{},pause:()=>{},resume:()=>{},seek:()=>{},getProgress:()=>1};function St(){return !(X===false||!Ct()||!O.length||typeof y!="string"||!(y in it)||be||F!=="y"||oe||u!==1||C!==0||U||H||v!==false||T||p||E||G>0||d||$||b||h||Y||Se||xe||x!=null||M!=null||P!=null||(L.start??"top bottom").trim()!=="top bottom"||(L.end??"bottom top").trim()!=="bottom top")}function xt(){let s=`svg-scroll-draw-${++Lt}`,m=S==="reverse"?"0":"var(--ssd-len)",A=S==="reverse"?"var(--ssd-len)":"0",Q=`stroke-dashoffset:${m};`,me=`stroke-dashoffset:${A};`;c&&(Q+=`opacity:${S==="reverse"?1:0};`,me+=`opacity:${S==="reverse"?0:1};`);let fe=document.createElement("style");fe.setAttribute("data-svg-scroll-draw",""),fe.textContent=`@keyframes ${s}{from{${Q}}to{${me}}}.${s}{animation-name:${s};animation-duration:auto;animation-timing-function:${it[y]};animation-fill-mode:both;animation-timeline:view();animation-range:cover 0% cover 100%;}`,document.head.appendChild(fe);function he(f,k){f.style.setProperty("--ssd-len",String(B[k])),f.style.strokeDasharray=`${B[k]}`,f.style.strokeDashoffset="",f.style.opacity="",f.style.animationPlayState="",f.classList.add(s);}O.forEach(he);let w=false,q=-1;function W(){if(q>=0)return q;let f=e.getBoundingClientRect(),{tStart:k,tEnd:j}=pe({top:f.top,height:f.height},Re(),Qe(),Ce,He);return we(Z(Re(),k,j,u))}return {destroy(){O.forEach(f=>{f.classList.remove(s),f.style.removeProperty("--ssd-len"),f.style.animationPlayState="";}),fe.remove();},replay(){w=false,q=-1,O.forEach(he);},pause(){w=true,O.forEach(f=>{f.style.animationPlayState="paused";});},resume(){w&&(w=false,O.forEach(f=>{f.style.animationPlayState="running";}));},seek(f){let k=Math.min(1,Math.max(0,f));q=k,w=true,O.forEach((j,ke)=>{j.classList.remove(s),j.style.strokeDashoffset=S==="reverse"?`${B[ke]*k}`:`${B[ke]*(1-k)}`,c&&(j.style.opacity=S==="reverse"?`${1-k}`:`${k}`);});},getProgress(){return W()}}}if(St())return xt();function Tt(){let s=Math.max(1,K),m=0,A=0;function Q(W){let f=true;if(be){let k=Math.min(1,Math.max(0,W/s)),j=we(k);$e=j,e.style.setProperty("--scroll-draw-progress",String(j)),e.style.clipPath=se(S==="reverse"?1-j:j),d?.(j),k<1&&(f=false);}else O.forEach((k,j)=>{let ke=j*C*s,Ie=Math.min(1,Math.max(0,(W-ke)/s)),Ee=we(Ie);k.style.strokeDashoffset=S==="reverse"?`${B[j]*Ee}`:`${B[j]*(1-Ee)}`,c&&(k.style.opacity=S==="reverse"?`${1-Ee}`:`${Ee}`),ge&&ee?k.style.stroke=Oe(ge,ee,Ee):ee&&(k.style.stroke=ee),te!==null&&a!==null?k.style.strokeWidth=`${te+(a-te)*Ee}`:a!==null&&(k.style.strokeWidth=`${a}`),g!==null&&z!==null?k.style.fillOpacity=`${g+(z-g)*Ee}`:z!==null&&(k.style.fillOpacity=`${z}`),T&&k.tagName.toLowerCase()==="path"&&V[j]&&k.setAttribute("d",Je(V[j],T,Ee)),j===0&&(d?.(Ee),e.style.setProperty("--scroll-draw-progress",String(Ee))),Ie<1&&(f=false);});if(p){let k=Math.min(1,Math.max(0,W/s)),j=we(k);for(let ke in p){let Ie=parseFloat(ke);j>=Ie&&!Me.has(Ie)&&(Me.add(Ie),p[ke]?.());}}return f}function me(W){if(ue)return;let f=W-m;ye||(ye=true,$?.());let k=Q(f);if(k&&!ie){ie=true,Q(s*(1+Math.max(0,O.length-1)*C)),b?.(),Te<(E==="infinite"?1/0:E??0)&&(Te++,Ae=setTimeout(()=>{m=performance.now(),ye=false,ie=false,Me.clear(),We(),ae=requestAnimationFrame(me);},J));return}k||(ae=requestAnimationFrame(me));}function fe(){cancelAnimationFrame(ae),clearTimeout(Ae),m=performance.now(),A=0,ue=false,ye=false,ie=false,Te=0,Me.clear(),We(),ae=requestAnimationFrame(me);}let he=new IntersectionObserver(W=>{W.forEach(f=>{f.isIntersecting&&!(U&&ie)?fe():!f.isIntersecting&&!U&&!ie&&(cancelAnimationFrame(ae),clearTimeout(Ae),m=null);});},{root:oe??null,threshold:N,rootMargin:I}),w;function q(){clearTimeout(w),w=setTimeout(()=>{O.forEach((W,f)=>{B[f]=Ge(W),W.style.strokeDasharray=`${B[f]}`;});},150);}return window.addEventListener("resize",q),window.addEventListener("orientationchange",q),G>0?setTimeout(()=>he.observe(e),G):he.observe(e),{destroy(){cancelAnimationFrame(ae),clearTimeout(Ae),he.disconnect(),window.removeEventListener("resize",q),window.removeEventListener("orientationchange",q),clearTimeout(w);},replay(){Te=0,fe();},pause(){ue||(ue=true,A=performance.now()-m,cancelAnimationFrame(ae));},resume(){ue&&(ue=false,m=performance.now()-A,ae=requestAnimationFrame(me));},seek(W){let f=Math.min(1,Math.max(0,W));$e=f,ue=true,A=f*s,m=performance.now()-A,cancelAnimationFrame(ae),Q(A);},getProgress(){return $e}}}if(D)return Tt();et();function Be(){if(!ze||ue)return;let s=performance.now(),m=Re(),A=u;if(v!==false){let w=s-Ke,q=w>0?Math.abs(m-(qe<0?m:qe))/w:0;A=u*Math.max(.2,1+q*(typeof v=="number"?v:1)*.04);}qe=m,Ke=s;let Q=H?Ve===-1||m>=Ve?"forward":"reverse":S;Ve=m;let me=ce-le,fe=true,he=me===0?0:(m-le)/me;if(isNaN(Ne)||(Ne<=0&&he>0?h?.():Ne>0&&he<=0&&xe?.(),Ne<1&&he>=1?Y?.():Ne>=1&&he<1&&Se?.()),Ne=he,be){let w=we(Z(m,le,ce,A));U&&!H&&(ve=Math.max(ve,w),w=ve),$e=w,e.style.setProperty("--scroll-draw-progress",String(w));let q=Q==="reverse"?1-w:w;e.style.clipPath=se(q),d?.(w),!ye&&Z(m,le,ce,A)>0&&(ye=true,$?.()),w>=1&&!ie?(ie=true,b?.(),Te<(E==="infinite"?1/0:E??0)&&(Te++,Ae=setTimeout(()=>{ve=-1,ye=false,ie=false,e.style.clipPath=se(0);},J))):w<1&&!U&&(ie=false),ae=requestAnimationFrame(Be);return}if(O.forEach((w,q)=>{let W=q*C*me,f=we(Z(m,le+W,ce+W,A));U&&!H&&(ve=Math.max(ve,f),f=ve),$e=f,w.style.strokeDashoffset=Q==="reverse"?`${B[q]*f}`:`${B[q]*(1-f)}`,c&&(w.style.opacity=Q==="reverse"?`${1-f}`:`${f}`),ge&&ee?w.style.stroke=Oe(ge,ee,f):ee&&(w.style.stroke=ee),te!==null&&a!==null?w.style.strokeWidth=`${te+(a-te)*f}`:a!==null&&(w.style.strokeWidth=`${a}`),g!==null&&z!==null?w.style.fillOpacity=`${g+(z-g)*f}`:z!==null&&(w.style.fillOpacity=`${z}`),T&&w.tagName.toLowerCase()==="path"&&V[q]&&w.setAttribute("d",Je(V[q],T,f)),q===0&&(d?.(f),e.style.setProperty("--scroll-draw-progress",String(f))),f<1&&(fe=false);}),p){let w=we(Z(m,le,ce,A));for(let q in p){let W=parseFloat(q);w>=W&&!Me.has(W)&&(Me.add(W),p[q]?.());}}!ye&&Z(m,le,ce,A)>0&&(ye=true,$?.()),fe&&!ie?(ie=true,b?.(),Te<(E==="infinite"?1/0:E??0)&&(Te++,Ae=setTimeout(()=>{ve=-1,ye=false,ie=false,Me.clear(),We();},J))):!fe&&!U&&(ie=false),ae=requestAnimationFrame(Be);}let je=new IntersectionObserver(s=>{s.forEach(m=>{ze=m.isIntersecting,ze&&!ue?ae=requestAnimationFrame(Be):cancelAnimationFrame(ae);});},{root:oe??null,threshold:N,rootMargin:I}),Ue;function _e(){clearTimeout(Ue),Ue=setTimeout(()=>{O.forEach((s,m)=>{B[m]=Ge(s),s.style.strokeDasharray=`${B[m]}`;}),et();},150);}return window.addEventListener("resize",_e),window.addEventListener("orientationchange",_e),G>0?setTimeout(()=>je.observe(e),G):je.observe(e),{destroy(){cancelAnimationFrame(ae),clearTimeout(Ae),je.disconnect(),window.removeEventListener("resize",_e),window.removeEventListener("orientationchange",_e),clearTimeout(Ue),Ye?.remove();},replay(){ve=-1,Ve=-1,qe=-1,ye=false,ie=false,Te=0,ue=false,Me.clear(),clearTimeout(Ae),We();},pause(){ue=true,cancelAnimationFrame(ae);},resume(){ue&&(ue=false,ze&&(ae=requestAnimationFrame(Be)));},seek(s){let m=Math.min(1,Math.max(0,s));$e=m,ve=m,ue=true,cancelAnimationFrame(ae),Et(m,S);},getProgress(){return $e}}}var lt=new Map;function Pe(e,n){lt.set(e,n);}function Le(e){lt.delete(e);}function Nt(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 i=[],o=[],l=t[2].trim();if(l)for(let u of l.split(/[\s,]+/)){let c=u.match(/^([-+]?[\d.eE]+)(.*)$/);i.push(c?parseFloat(c[1]):0),o.push(c?c[2]:"");}n.push({fn:t[1],nums:i,units:o});}return n}function It(e,n,r){let t=ct(e),i=ct(n);return t.length===0||t.length!==i.length?r<1?e:n:t.map((o,l)=>{let u=i[l];return o.fn!==u.fn||o.nums.length!==u.nums.length?r<1?`${o.fn}(${o.nums.map((c,y)=>`${c}${o.units[y]}`).join(", ")})`:`${u.fn}(${u.nums.map((c,y)=>`${c}${u.units[y]}`).join(", ")})`:`${o.fn}(${o.nums.map((c,y)=>`${c+(u.nums[y]-c)*r}${o.units[y]}`).join(", ")})`}).join(" ")}function ut(e,n,r){if(typeof e=="number"&&typeof n=="number")return String(e+(n-e)*r);let t=String(e),i=String(n);if(Nt(t))return Oe(t,i,r);if(t.includes("("))return It(t,i,r);let o=t.match(/^([-+]?[\d.]+)(.*)$/),l=i.match(/^([-+]?[\d.]+)(.*)$/);if(o&&l){let u=parseFloat(o[1]),c=parseFloat(l[1]);return `${u+(c-u)*r}${o[2]||l[2]}`}return r<1?t:i}function Ot(e){return e.replace(/([A-Z])/g,n=>`-${n.toLowerCase()}`)}var mt={linear:"linear","ease-in":"ease-in","ease-out":"ease-out","ease-in-out":"ease-in-out"},Rt=new Set(["opacity","transform","background-color","color","filter","scale","translate","rotate"]),Ft=0;function Dt(){return typeof CSS<"u"&&typeof CSS.supports=="function"&&CSS.supports("animation-timeline: view()")}function ft(e,n){let r={destroy:()=>{},replay:()=>{},pause:()=>{},resume:()=>{},seek:()=>{},getProgress:()=>0};if(typeof window>"u")return r;let{props:t,trigger:i={},easing:o="ease-out",speed:l=1,once:u=false,axis:c="y",scrollContainer:y,native:L=true,velocityScale:C=false,onProgress:S,onComplete:U,onEnter:de,onLeave:F,onEnterBack:_,onLeaveBack:H}=n,G=window.matchMedia("(prefers-reduced-motion: reduce)").matches,x=typeof o=="function"?o:re[o]??re["ease-out"],M=ne(i.start??"top bottom"),P=ne(i.end??"bottom top"),p=typeof y=="string"?document.querySelector(y):y??null,v=Object.entries(t).map(([a,g])=>({prop:Ot(a),from:Array.isArray(g)?g[0]:"",to:Array.isArray(g)?g[1]:g}));function N(){let a=window.getComputedStyle(e);for(let g of v)g.from===""&&(g.from=a.getPropertyValue(g.prop).trim()||"0");}function I(){for(let a of v)e.style.setProperty(a.prop,String(a.to));}if(G)return I(),U?.(),r;N();function E(){if(!L||!Dt()||typeof o!="string"||!(o in mt)||c!=="y"||p||u||l!==1||S||U||de||F||_||H||C!==false||(i.start??"top bottom").trim()!=="top bottom"||(i.end??"bottom top").trim()!=="bottom top")return false;for(let a of v)if(!Rt.has(a.prop))return false;return true}function J(){let a=`ssd-a-${++Ft}`,g=v.map(V=>`${V.prop}:${V.from}`).join(";"),z=v.map(V=>`${V.prop}:${V.to}`).join(";"),se=document.createElement("style");se.setAttribute("data-ssd-animate",""),se.textContent=`@keyframes ${a}{from{${g}}to{${z}}}.${a}{animation-name:${a};animation-duration:auto;animation-timing-function:${mt[o]};animation-fill-mode:both;animation-timeline:view();animation-range:cover 0% cover 100%;}`,document.head.appendChild(se),e.classList.add(a);let O=()=>c==="x"?window.scrollX:window.scrollY,B=()=>c==="x"?window.innerWidth:window.innerHeight;return {destroy(){e.classList.remove(a),se.remove();},replay(){e.classList.remove(a),e.offsetWidth,e.classList.add(a);},pause(){e.style.animationPlayState="paused";},resume(){e.style.animationPlayState="";},seek(V){let le=Math.min(1,Math.max(0,V));e.classList.remove(a);for(let ce of v)e.style.setProperty(ce.prop,ut(ce.from,ce.to,le));},getProgress(){let V=e.getBoundingClientRect(),le=O(),ce=B(),{tStart:ie,tEnd:ye}=pe({top:V.top,height:V.height},le,ce,M,P);return x(Z(le,ie,ye,l))}}}if(E())return J();let T=0,R=0,D=0,K=false,X=false,d=-1,$=0,b=false,h=NaN,Y=-1,Se=0,xe=()=>p?c==="x"?p.scrollLeft:p.scrollTop:c==="x"?window.scrollX:window.scrollY,be=()=>p?c==="x"?p.clientWidth:p.clientHeight:c==="x"?window.innerWidth:window.innerHeight;function we(){let a=e.getBoundingClientRect(),g,z;if(p){let O=p.getBoundingClientRect();g=c==="x"?a.left-O.left+p.scrollLeft:a.top-O.top+p.scrollTop,z=c==="x"?a.width:a.height;}else g=c==="x"?a.left:a.top,z=c==="x"?a.width:a.height;let se=pe({top:g,height:z},xe(),be(),M,P);T=se.tStart,R=se.tEnd;}function Ce(a){e.style.setProperty("--scroll-draw-progress",String(a));for(let g of v)e.style.setProperty(g.prop,ut(g.from,g.to,a));S?.(a);}function He(a){if(isNaN(h)){h=a;return}h<=0&&a>0?de?.():h>0&&a<=0&&H?.(),h<1&&a>=1?F?.():h>=1&&a<1&&_?.(),h=a;}function oe(){if(!K||X)return;let a=performance.now(),g=xe(),z=l;if(C!==false){let B=a-Se,V=B>0?Math.abs(g-(Y<0?g:Y))/B:0;z=l*Math.max(.2,1+V*(typeof C=="number"?C:1)*.04);}Y=g,Se=a;let se=R===T?0:(g-T)/(R-T);He(se);let O=x(Z(g,T,R,z));u&&(d=Math.max(d,O),O=d),$=O,Ce(O),O>=1&&!b?(b=true,U?.()):O<1&&!u&&(b=false),D=requestAnimationFrame(oe);}we();{let a=x(Z(xe(),T,R,l));u&&a>0&&(d=a),$=a,Ce(a);}let ge=new IntersectionObserver(a=>{a.forEach(g=>{K=g.isIntersecting,K&&!X?D=requestAnimationFrame(oe):cancelAnimationFrame(D);});},{root:p??null}),ee;function te(){clearTimeout(ee),ee=setTimeout(we,150);}return window.addEventListener("resize",te),window.addEventListener("orientationchange",te),ge.observe(e),Pe(e,{type:"animate",getProgress:()=>$,getTrigger:()=>({tStart:T,tEnd:R})}),{destroy(){cancelAnimationFrame(D),ge.disconnect(),window.removeEventListener("resize",te),window.removeEventListener("orientationchange",te),clearTimeout(ee),Le(e);},replay(){d=-1,b=false,$=0,X=false,Ce(0);},pause(){X=true,cancelAnimationFrame(D);},resume(){X&&(X=false,K&&(D=requestAnimationFrame(oe)));},seek(a){let g=Math.min(1,Math.max(0,a));$=g,d=g,X=true,cancelAnimationFrame(D),Ce(g);},getProgress(){return $}}}var Ze={destroy:()=>{},replay:()=>{},pause:()=>{},resume:()=>{},seek:()=>{},getProgress:()=>0};function pt(e,n){if(typeof window>"u")return Ze;let r=typeof e=="string"?document.querySelector(e):e;if(!r)return process.env.NODE_ENV!=="production"&&console.warn("[svg-scroll-draw] scrollCounter: element not found:",e),Ze;let t=r,{from:i=0,to:o,format:l,easing:u="ease-out",trigger:c={},once:y=true,decimals:L,onComplete:C}=n,S=L!==void 0?d=>d.toFixed(L):l??(d=>String(Math.round(d))),U=typeof u=="function"?u:re[u]??re["ease-out"],de=ne(c.start??"top 80%"),F=ne(c.end??"top 20%");if(window.matchMedia("(prefers-reduced-motion: reduce)").matches)return t.textContent=S(o),C?.(),Ze;t.textContent=S(i);let H=0,G=0,x=0,M=false,P=false,p=-1,v=0,N=false,I=()=>window.scrollY,E=()=>window.innerHeight;function J(){let d=t.getBoundingClientRect(),$=pe({top:d.top,height:d.height},I(),E(),de,F);H=$.tStart,G=$.tEnd;}function T(d){t.textContent=S(i+(o-i)*d),t.style.setProperty("--scroll-draw-progress",String(d));}function R(){if(!M||P)return;let d=U(Z(I(),H,G,1));y&&(p=Math.max(p,d),d=p),v=d,T(d),d>=1&&!N?(N=true,C?.()):d<1&&!y&&(N=false),x=requestAnimationFrame(R);}J();{let d=U(Z(I(),H,G,1));y&&d>0&&(p=d),v=d,T(d);}let D=new IntersectionObserver(d=>{d.forEach($=>{M=$.isIntersecting,M&&!P?x=requestAnimationFrame(R):cancelAnimationFrame(x);});}),K;function X(){clearTimeout(K),K=setTimeout(J,150);}return window.addEventListener("resize",X),window.addEventListener("orientationchange",X),D.observe(t),Pe(t,{type:"counter",getProgress:()=>v,getTrigger:()=>({tStart:H,tEnd:G})}),{destroy(){cancelAnimationFrame(x),D.disconnect(),window.removeEventListener("resize",X),window.removeEventListener("orientationchange",X),clearTimeout(K),Le(t);},replay(){p=-1,N=false,v=0,P=false,T(0);},pause(){P=true,cancelAnimationFrame(x);},resume(){P&&(P=false,M&&(x=requestAnimationFrame(R)));},seek(d){let $=Math.min(1,Math.max(0,d));v=$,p=$,P=true,cancelAnimationFrame(x),T($);},getProgress(){return v}}}var dt={destroy:()=>{},replay:()=>{},pause:()=>{},resume:()=>{},seek:()=>{},getProgress:()=>0};function gt(e,n={}){if(typeof window>"u")return dt;let r=typeof e=="string"?document.querySelector(e):e;if(!r||r.tagName.toLowerCase()!=="video")return process.env.NODE_ENV!=="production"&&console.warn("[svg-scroll-draw] scrollVideo: <video> element not found:",e),dt;let t=r,{trigger:i={},easing:o="linear",once:l=false,axis:u="y",preload:c="auto",onReady:y,onComplete:L,onProgress:C}=n,S=window.matchMedia("(prefers-reduced-motion: reduce)").matches,U=typeof o=="function"?o:re[o]??re.linear,de=ne(i.start??"top top"),F=ne(i.end??"bottom top");t.pause(),t.hasAttribute("preload")||(t.preload=c);let _=n.from??0,H=n.to,G=0,x=0,M=0,P=false,p=false,v=-1,N=0,I=false,E=false,J=()=>u==="x"?window.scrollX:window.scrollY,T=()=>u==="x"?window.innerWidth:window.innerHeight;function R(){let h=t.getBoundingClientRect(),Y=u==="x"?h.left:h.top,Se=u==="x"?h.width:h.height,xe=pe({top:Y,height:Se},J(),T(),de,F);G=xe.tStart,x=xe.tEnd;}function D(h){if(!E)return;let Y=H??t.duration??0;t.currentTime=_+(Y-_)*h,t.style.setProperty("--scroll-draw-progress",String(h)),C?.(h);}function K(){if(!P||p||!E)return;let h=U(Z(J(),G,x,1));l&&(v=Math.max(v,h),h=v),N=h,D(h),h>=1&&!I?(I=true,L?.()):h<1&&!l&&(I=false),M=requestAnimationFrame(K);}function X(){if(E=true,H===void 0&&(H=t.duration),S){D(1),y?.();return}R(),y?.(),P&&!p&&(M=requestAnimationFrame(K));}t.readyState>=1?X():t.addEventListener("loadedmetadata",X,{once:true}),E||R();let d=new IntersectionObserver(h=>{h.forEach(Y=>{P=Y.isIntersecting,P&&!p&&E?M=requestAnimationFrame(K):cancelAnimationFrame(M);});}),$;function b(){clearTimeout($),$=setTimeout(R,150);}return window.addEventListener("resize",b),window.addEventListener("orientationchange",b),d.observe(t),Pe(t,{type:"video",getProgress:()=>N,getTrigger:()=>({tStart:G,tEnd:x})}),{destroy(){cancelAnimationFrame(M),d.disconnect(),t.removeEventListener("loadedmetadata",X),window.removeEventListener("resize",b),window.removeEventListener("orientationchange",b),clearTimeout($),Le(t);},replay(){v=-1,I=false,N=0,p=false,D(0);},pause(){p=true,cancelAnimationFrame(M);},resume(){p&&(p=false,P&&E&&(M=requestAnimationFrame(K)));},seek(h){let Y=Math.min(1,Math.max(0,h));N=Y,v=Y,p=true,cancelAnimationFrame(M),D(Y);},getProgress(){return N}}}function bt(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 Ht(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 yt(e){let n=bt(e),r=new Map;for(let o of n){let l=o.offsetTop;r.has(l)||r.set(l,[]),r.get(l).push(o);}let t=[],i=Array.from(r.keys()).sort((o,l)=>o-l);for(let o of i){let l=r.get(o),u=document.createElement("span");u.setAttribute("aria-hidden","true"),u.style.display="inline-block";for(let c of l)u.appendChild(c);t.push(u);}e.textContent="";for(let o of t)e.appendChild(o),e.appendChild(document.createTextNode(" "));return t}function zt(e,n,r,t){if(r<=1||t===0)return e;let i=(r-1)*t,o=n*t,l=o+(1-i);return l<=o?e>=o?1:0:Math.min(1,Math.max(0,(e-o)/(l-o)))}function Vt(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 ht={destroy:()=>{},replay:()=>{},pause:()=>{},resume:()=>{},seek:()=>{},getProgress:()=>0};function wt(e,n={}){if(typeof window>"u")return ht;let r=typeof e=="string"?document.querySelector(e):e;if(!r)return process.env.NODE_ENV!=="production"&&console.warn("[svg-scroll-draw] scrollText: element not found:",e),ht;let t=r,{split:i="words",stagger:o=.04,easing:l="ease-out",from:u={opacity:0,y:24},trigger:c={},once:y=true,onComplete:L}=n,C=window.matchMedia("(prefers-reduced-motion: reduce)").matches,S=typeof l=="function"?l:re[l]??re["ease-out"],U=ne(c.start??"top 85%"),de=ne(c.end??"top 40%"),F=t.innerHTML;t.setAttribute("aria-label",t.textContent??"");let _;i==="chars"?_=Ht(t):i==="lines"?_=yt(t):_=bt(t);let H=_.length;function G(b,h){u?.opacity!==void 0&&(b.style.opacity=String(u.opacity+(1-u.opacity)*h));let Y=Vt(h,u);Y&&(b.style.transform=Y);}function x(b){t.style.setProperty("--scroll-draw-progress",String(b)),_.forEach((h,Y)=>{let Se=S(zt(b,Y,H,o));G(h,Se);});}if(C)return x(1),L?.(),{destroy(){t.innerHTML=F,t.removeAttribute("aria-label");},replay:()=>{},pause:()=>{},resume:()=>{},seek:()=>{},getProgress:()=>1};x(0);let M=0,P=0,p=0,v=false,N=false,I=-1,E=0,J=false,T=()=>window.scrollY,R=()=>window.innerHeight;function D(){let b=t.getBoundingClientRect(),h=pe({top:b.top,height:b.height},T(),R(),U,de);M=h.tStart,P=h.tEnd;}function K(){if(!v||N)return;let b=Z(T(),M,P,1);y&&(I=Math.max(I,b),b=I),E=b,x(b),b>=1&&!J?(J=true,L?.()):b<1&&!y&&(J=false),p=requestAnimationFrame(K);}D();let X=new IntersectionObserver(b=>{b.forEach(h=>{v=h.isIntersecting,v&&!N?p=requestAnimationFrame(K):cancelAnimationFrame(p);});}),d;function $(){clearTimeout(d),d=setTimeout(()=>{if(i==="lines"){let b=E;t.innerHTML=F,t.setAttribute("aria-label",t.textContent??""),_=yt(t),x(b);}D();},150);}return window.addEventListener("resize",$),window.addEventListener("orientationchange",$),X.observe(t),Pe(t,{type:"text",getProgress:()=>E,getTrigger:()=>({tStart:M,tEnd:P})}),{destroy(){cancelAnimationFrame(p),X.disconnect(),window.removeEventListener("resize",$),window.removeEventListener("orientationchange",$),clearTimeout(d),t.innerHTML=F,t.removeAttribute("aria-label"),Le(t);},replay(){I=-1,J=false,E=0,N=false,x(0);},pause(){N=true,cancelAnimationFrame(p);},resume(){N&&(N=false,v&&(p=requestAnimationFrame(K)));},seek(b){let h=Math.min(1,Math.max(0,b));E=h,I=h,N=true,cancelAnimationFrame(p),x(h);},getProgress(){return E}}}function Bt(e,n={}){let[r,t]=_t.useState(0),i=_t.useRef(n);i.current=n;let o=_t.useRef(-1);return _t.useEffect(()=>{if(typeof window>"u")return;if(window.matchMedia("(prefers-reduced-motion: reduce)").matches){t(1);return}let l=typeof e=="string"?document.querySelector(e):e.current;if(!l)return;let u=l,{axis:c="y",scrollContainer:y,trigger:L={}}=i.current,C=typeof y=="string"?document.querySelector(y):y??null,S=ne(L.start??"top bottom"),U=ne(L.end??"bottom top"),de=0,F=0,_=false,H=0;function G(){return C?c==="x"?C.scrollLeft:C.scrollTop:c==="x"?window.scrollX:window.scrollY}function x(){return C?c==="x"?C.clientWidth:C.clientHeight:c==="x"?window.innerWidth:window.innerHeight}function M(){let I=u.getBoundingClientRect(),E=G(),J=c==="x"?I.left:I.top,T=c==="x"?I.width:I.height,R=pe({top:J,height:T},E,x(),S,U);de=R.tStart,F=R.tEnd;}function P(){if(!_)return;let{speed:I=1,easing:E="linear",once:J=false}=i.current,T=typeof E=="function"?E:re[E]??re.linear,R=Z(G(),de,F,I),D=T(R);J&&(o.current=Math.max(o.current,D),D=o.current),t(D),H=requestAnimationFrame(P);}let p=new IntersectionObserver(I=>{I.forEach(E=>{_=E.isIntersecting,_?H=requestAnimationFrame(P):cancelAnimationFrame(H);});},{root:C??null,threshold:0});M(),p.observe(u);let v;function N(){clearTimeout(v),v=setTimeout(M,150);}return window.addEventListener("resize",N),window.addEventListener("orientationchange",N),()=>{cancelAnimationFrame(H),clearTimeout(v),p.disconnect(),window.removeEventListener("resize",N),window.removeEventListener("orientationchange",N);}},[]),r}function br({children:e,className:n,style:r,...t}){let i=_t.useRef(null);return _t.useEffect(()=>{if(!i.current)return;let o=at(i.current,t);return ()=>o.destroy()},[]),jsxRuntime.jsx("div",{ref:i,className:n,style:r,children:e})}function wr({children:e,className:n,style:r,...t}){let i=_t.useRef(null);return _t.useEffect(()=>{if(!i.current)return;let o=ft(i.current,t);return ()=>o.destroy()},[]),jsxRuntime.jsx("div",{ref:i,className:n,style:r,children:e})}function vr({className:e,style:n,...r}){let t=_t.useRef(null);return _t.useEffect(()=>{if(!t.current)return;let i=pt(t.current,r);return ()=>i.destroy()},[]),jsxRuntime.jsx("span",{ref:t,className:e,style:n})}function Er({src:e,className:n,style:r,muted:t=true,playsInline:i=true,...o}){let l=_t.useRef(null);return _t.useEffect(()=>{if(!l.current)return;let u=gt(l.current,o);return ()=>u.destroy()},[]),jsxRuntime.jsx("video",{ref:l,src:e,className:n,style:r,muted:t,playsInline:i,preload:"auto"})}function Sr({children:e,as:n="p",className:r,style:t,...i}){let o=_t.useRef(null);return _t.useEffect(()=>{if(!o.current)return;let l=wt(o.current,i);return ()=>l.destroy()},[]),_t__default.default.createElement(n,{ref:o,className:r,style:t},e)}exports.ScrollAnimate=wr;exports.ScrollCounter=vr;exports.ScrollDraw=br;exports.ScrollText=Sr;exports.ScrollVideo=Er;exports.useScrollDrawProgress=Bt;
|
package/dist/react/index.d.mts
CHANGED
|
@@ -126,6 +126,12 @@ interface ScrollAnimateOptions {
|
|
|
126
126
|
axis?: 'x' | 'y';
|
|
127
127
|
scrollContainer?: string | Element;
|
|
128
128
|
native?: boolean;
|
|
129
|
+
/**
|
|
130
|
+
* Scale animation speed by scroll velocity — faster scrolling = faster animation.
|
|
131
|
+
* Pass `true` for default sensitivity (1) or a number to control it.
|
|
132
|
+
* Higher values = more dramatic speed-up. Default sensitivity: 1.
|
|
133
|
+
*/
|
|
134
|
+
velocityScale?: boolean | number;
|
|
129
135
|
onProgress?: (alpha: number) => void;
|
|
130
136
|
onComplete?: () => void;
|
|
131
137
|
/** Fires when scroll enters the trigger zone (scrolling forward). */
|
package/dist/react/index.d.ts
CHANGED
|
@@ -126,6 +126,12 @@ interface ScrollAnimateOptions {
|
|
|
126
126
|
axis?: 'x' | 'y';
|
|
127
127
|
scrollContainer?: string | Element;
|
|
128
128
|
native?: boolean;
|
|
129
|
+
/**
|
|
130
|
+
* Scale animation speed by scroll velocity — faster scrolling = faster animation.
|
|
131
|
+
* Pass `true` for default sensitivity (1) or a number to control it.
|
|
132
|
+
* Higher values = more dramatic speed-up. Default sensitivity: 1.
|
|
133
|
+
*/
|
|
134
|
+
velocityScale?: boolean | number;
|
|
129
135
|
onProgress?: (alpha: number) => void;
|
|
130
136
|
onComplete?: () => void;
|
|
131
137
|
/** Fires when scroll enters the trigger zone (scrolling forward). */
|
package/dist/react/index.mjs
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import _t,{useState,useRef,useEffect}from'react';import {jsx}from'react/jsx-runtime';function At({bounces:e=3,decay:n=.5}={}){let r=Math.max(1,Math.round(e)),t=Math.max(.01,Math.min(.99,n)),i=Math.sqrt(t),o=0,
|
|
2
|
-
<div style="position:absolute;${
|
|
3
|
-
<div style="position:absolute;${l?`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",i,{passive:true}),i(),t}function Je(e,n,r){let t=(n.match(/[-+]?(?:\d*\.)?\d+(?:[eE][-+]?\d+)?/g)??[]).map(Number),i=0;return e.replace(/[-+]?(?:\d*\.)?\d+(?:[eE][-+]?\d+)?/g,o=>{let c=parseFloat(o),u=t[i++]??c;return String(+(c+(u-c)*r).toFixed(4))})}function at(e,n={}){if(typeof window>"u")return {destroy:()=>{},replay:()=>{},pause:()=>{},resume:()=>{},seek:()=>{},getProgress:()=>0};let{preset:r,...t}=n,i=r?{...ot[r],...t}:t,o=window.matchMedia("(prefers-reduced-motion: reduce)").matches,{selector:c="path, polyline, line, polygon, rect, circle",speed:u=1,fade:l=false,easing:g="linear",trigger:P={},stagger:N=0,direction:E="forward",once:J=false,debug:fe=false,axis:F="y",scrollContainer:_,autoReverse:q=false,delay:D=0,strokeColor:T,strokeWidth:A,fillOpacity:h,waypoints:y,velocityScale:C=false,threshold:$=0,rootMargin:k="0px",repeat:S=0,repeatDelay:O=0,morphTo:M,clip:R,autoplay:G=false,duration:W=1e3,native:Y=true,onProgress:d,onStart:I,onComplete:b,onEnter:w,onLeave:Z,onEnterBack:Se,onLeaveBack:be}=i,we=R===true?"left":typeof R=="string"?R:false,ge=typeof g=="function"?g:ne[g]??ne.linear,Re=oe(P.start??"top bottom"),ke=oe(P.end??"bottom top"),ee=typeof _=="string"?document.querySelector(_):_??null,a=Array.isArray(T)?T[0]:null,p=Array.isArray(T)?T[1]:typeof T=="string"?T:null,K=Array.isArray(A)?A[0]:null,B=Array.isArray(A)?A[1]:typeof A=="number"?A:null,te=Array.isArray(h)?h[0]:null,ie=Array.isArray(h)?h[1]:typeof h=="number"?h:null;function re(s){let m=s*100;switch(we){case "right":return `inset(0 0 0 ${100-m}%)`;case "top":return `inset(0 0 ${100-m}% 0)`;case "bottom":return `inset(${100-m}% 0 0 0)`;case "center":return `circle(${s*150}% at 50% 50%)`;default:return `inset(0 ${100-m}% 0 0)`}}let j=we?[]:Array.from(e.querySelectorAll(c)),H=[],pe=[],ye=0,Te=0,ae=false,he=false,se=0,ze=false,ve=-1,Ve=-1,le=false,Ce=0,xe=0,Ae,Ye=null,Me=new Set,qe=-1,Ke=performance.now(),Ne=NaN;function Fe(){return ee?F==="x"?ee.scrollLeft:ee.scrollTop:F==="x"?window.scrollX:window.scrollY}function Qe(){return ee?F==="x"?ee.clientWidth:ee.clientHeight:F==="x"?window.innerWidth:window.innerHeight}function et(){let s=e.getBoundingClientRect(),m,x,Q;if(ee){let ue=ee.getBoundingClientRect();m=F==="x"?s.left-ue.left+ee.scrollLeft:s.top-ue.top+ee.scrollTop,x=F==="x"?s.width:s.height,Q=Fe();}else m=F==="x"?s.left:s.top,x=F==="x"?s.width:s.height,Q=Fe();let ce=me({top:m,height:x},Q,Qe(),Re,ke);ye=ce.tStart,Te=ce.tEnd,fe&&process.env.NODE_ENV!=="production"&&(Ye?.remove(),Ye=kt(ye,Te,F));}function Et(s,m){if(e.style.setProperty("--scroll-draw-progress",String(s)),we){let x=m==="reverse"?1-s:s;e.style.clipPath=re(x);return}j.forEach((x,Q)=>{x.style.strokeDashoffset=m==="reverse"?`${H[Q]*s}`:`${H[Q]*(1-s)}`,l&&(x.style.opacity=m==="reverse"?`${1-s}`:`${s}`),a&&p?x.style.stroke=Oe(a,p,s):p&&(x.style.stroke=p),K!==null&&B!==null?x.style.strokeWidth=`${K+(B-K)*s}`:B!==null&&(x.style.strokeWidth=`${B}`),te!==null&&ie!==null?x.style.fillOpacity=`${te+(ie-te)*s}`:ie!==null&&(x.style.fillOpacity=`${ie}`),M&&x.tagName.toLowerCase()==="path"&&pe[Q]&&x.setAttribute("d",Je(pe[Q],M,s));});}function We(){if(e.style.setProperty("--scroll-draw-progress","0"),we){e.style.clipPath=re(0);return}j.forEach((s,m)=>{s.style.strokeDasharray=`${H[m]}`,s.style.strokeDashoffset=E==="reverse"?"0":`${H[m]}`,l?s.style.opacity=E==="reverse"?"1":"0":s.style.opacity="",a&&(s.style.stroke=a),K!==null&&(s.style.strokeWidth=`${K}`),te!==null&&(s.style.fillOpacity=`${te}`),M&&s.tagName.toLowerCase()==="path"&&pe[m]&&s.setAttribute("d",pe[m]);});}if(j.forEach(s=>{$t(s);let m=Ge(s);H.push(m),s.tagName.toLowerCase()==="path"?pe.push(s.getAttribute("d")??""):pe.push(""),o?(s.style.strokeDasharray=`${m}`,s.style.strokeDashoffset=E==="reverse"?`${m}`:"0",l&&(s.style.opacity="1"),p&&(s.style.stroke=p),B!==null&&(s.style.strokeWidth=`${B}`),ie!==null&&(s.style.fillOpacity=`${ie}`),M&&s.tagName.toLowerCase()==="path"&&s.setAttribute("d",M)):(s.style.strokeDasharray=`${m}`,s.style.strokeDashoffset=E==="reverse"?"0":`${m}`,l?s.style.opacity=E==="reverse"?"1":"0":s.style.opacity="",a&&(s.style.stroke=a),K!==null&&(s.style.strokeWidth=`${K}`),te!==null&&(s.style.fillOpacity=`${te}`));}),we){if(o)return e.style.clipPath=re(1),b?.(),{destroy:()=>{},replay:()=>{},pause:()=>{},resume:()=>{},seek:()=>{},getProgress:()=>1};e.style.clipPath=re(0);}else if(o)return b?.(),{destroy:()=>{},replay:()=>{},pause:()=>{},resume:()=>{},seek:()=>{},getProgress:()=>1};function St(){return !(Y===false||!Ct()||!j.length||typeof g!="string"||!(g in it)||we||F!=="y"||ee||u!==1||N!==0||J||q||C!==false||M||y||S||D>0||d||I||b||w||Z||Se||be||T!=null||A!=null||h!=null||(P.start??"top bottom").trim()!=="top bottom"||(P.end??"bottom top").trim()!=="bottom top")}function xt(){let s=`svg-scroll-draw-${++Lt}`,m=E==="reverse"?"0":"var(--ssd-len)",x=E==="reverse"?"var(--ssd-len)":"0",Q=`stroke-dashoffset:${m};`,ce=`stroke-dashoffset:${x};`;l&&(Q+=`opacity:${E==="reverse"?1:0};`,ce+=`opacity:${E==="reverse"?0:1};`);let ue=document.createElement("style");ue.setAttribute("data-svg-scroll-draw",""),ue.textContent=`@keyframes ${s}{from{${Q}}to{${ce}}}.${s}{animation-name:${s};animation-duration:auto;animation-timing-function:${it[g]};animation-fill-mode:both;animation-timeline:view();animation-range:cover 0% cover 100%;}`,document.head.appendChild(ue);function de(f,L){f.style.setProperty("--ssd-len",String(H[L])),f.style.strokeDasharray=`${H[L]}`,f.style.strokeDashoffset="",f.style.opacity="",f.style.animationPlayState="",f.classList.add(s);}j.forEach(de);let v=false,z=-1;function V(){if(z>=0)return z;let f=e.getBoundingClientRect(),{tStart:L,tEnd:X}=me({top:f.top,height:f.height},Fe(),Qe(),Re,ke);return ge(U(Fe(),L,X,u))}return {destroy(){j.forEach(f=>{f.classList.remove(s),f.style.removeProperty("--ssd-len"),f.style.animationPlayState="";}),ue.remove();},replay(){v=false,z=-1,j.forEach(de);},pause(){v=true,j.forEach(f=>{f.style.animationPlayState="paused";});},resume(){v&&(v=false,j.forEach(f=>{f.style.animationPlayState="running";}));},seek(f){let L=Math.min(1,Math.max(0,f));z=L,v=true,j.forEach((X,$e)=>{X.classList.remove(s),X.style.strokeDashoffset=E==="reverse"?`${H[$e]*L}`:`${H[$e]*(1-L)}`,l&&(X.style.opacity=E==="reverse"?`${1-L}`:`${L}`);});},getProgress(){return V()}}}if(St())return xt();function Tt(){let s=Math.max(1,W),m=0,x=0;function Q(V){let f=true;if(we){let L=Math.min(1,Math.max(0,V/s)),X=ge(L);Ce=X,e.style.setProperty("--scroll-draw-progress",String(X)),e.style.clipPath=re(E==="reverse"?1-X:X),d?.(X),L<1&&(f=false);}else j.forEach((L,X)=>{let $e=X*N*s,Ie=Math.min(1,Math.max(0,(V-$e)/s)),Ee=ge(Ie);L.style.strokeDashoffset=E==="reverse"?`${H[X]*Ee}`:`${H[X]*(1-Ee)}`,l&&(L.style.opacity=E==="reverse"?`${1-Ee}`:`${Ee}`),a&&p?L.style.stroke=Oe(a,p,Ee):p&&(L.style.stroke=p),K!==null&&B!==null?L.style.strokeWidth=`${K+(B-K)*Ee}`:B!==null&&(L.style.strokeWidth=`${B}`),te!==null&&ie!==null?L.style.fillOpacity=`${te+(ie-te)*Ee}`:ie!==null&&(L.style.fillOpacity=`${ie}`),M&&L.tagName.toLowerCase()==="path"&&pe[X]&&L.setAttribute("d",Je(pe[X],M,Ee)),X===0&&(d?.(Ee),e.style.setProperty("--scroll-draw-progress",String(Ee))),Ie<1&&(f=false);});if(y){let L=Math.min(1,Math.max(0,V/s)),X=ge(L);for(let $e in y){let Ie=parseFloat($e);X>=Ie&&!Me.has(Ie)&&(Me.add(Ie),y[$e]?.());}}return f}function ce(V){if(le)return;let f=V-m;he||(he=true,I?.());let L=Q(f);if(L&&!ae){ae=true,Q(s*(1+Math.max(0,j.length-1)*N)),b?.(),xe<(S==="infinite"?1/0:S??0)&&(xe++,Ae=setTimeout(()=>{m=performance.now(),he=false,ae=false,Me.clear(),We(),se=requestAnimationFrame(ce);},O));return}L||(se=requestAnimationFrame(ce));}function ue(){cancelAnimationFrame(se),clearTimeout(Ae),m=performance.now(),x=0,le=false,he=false,ae=false,xe=0,Me.clear(),We(),se=requestAnimationFrame(ce);}let de=new IntersectionObserver(V=>{V.forEach(f=>{f.isIntersecting&&!(J&&ae)?ue():!f.isIntersecting&&!J&&!ae&&(cancelAnimationFrame(se),clearTimeout(Ae),m=null);});},{root:ee??null,threshold:$,rootMargin:k}),v;function z(){clearTimeout(v),v=setTimeout(()=>{j.forEach((V,f)=>{H[f]=Ge(V),V.style.strokeDasharray=`${H[f]}`;});},150);}return window.addEventListener("resize",z),window.addEventListener("orientationchange",z),D>0?setTimeout(()=>de.observe(e),D):de.observe(e),{destroy(){cancelAnimationFrame(se),clearTimeout(Ae),de.disconnect(),window.removeEventListener("resize",z),window.removeEventListener("orientationchange",z),clearTimeout(v);},replay(){xe=0,ue();},pause(){le||(le=true,x=performance.now()-m,cancelAnimationFrame(se));},resume(){le&&(le=false,m=performance.now()-x,se=requestAnimationFrame(ce));},seek(V){let f=Math.min(1,Math.max(0,V));Ce=f,le=true,x=f*s,m=performance.now()-x,cancelAnimationFrame(se),Q(x);},getProgress(){return Ce}}}if(G)return Tt();et();function Be(){if(!ze||le)return;let s=performance.now(),m=Fe(),x=u;if(C!==false){let v=s-Ke,z=v>0?Math.abs(m-(qe<0?m:qe))/v:0;x=u*Math.max(.2,1+z*(typeof C=="number"?C:1)*.04);}qe=m,Ke=s;let Q=q?Ve===-1||m>=Ve?"forward":"reverse":E;Ve=m;let ce=Te-ye,ue=true,de=ce===0?0:(m-ye)/ce;if(isNaN(Ne)||(Ne<=0&&de>0?w?.():Ne>0&&de<=0&&be?.(),Ne<1&&de>=1?Z?.():Ne>=1&&de<1&&Se?.()),Ne=de,we){let v=ge(U(m,ye,Te,x));J&&!q&&(ve=Math.max(ve,v),v=ve),Ce=v,e.style.setProperty("--scroll-draw-progress",String(v));let z=Q==="reverse"?1-v:v;e.style.clipPath=re(z),d?.(v),!he&&U(m,ye,Te,x)>0&&(he=true,I?.()),v>=1&&!ae?(ae=true,b?.(),xe<(S==="infinite"?1/0:S??0)&&(xe++,Ae=setTimeout(()=>{ve=-1,he=false,ae=false,e.style.clipPath=re(0);},O))):v<1&&!J&&(ae=false),se=requestAnimationFrame(Be);return}if(j.forEach((v,z)=>{let V=z*N*ce,f=ge(U(m,ye+V,Te+V,x));J&&!q&&(ve=Math.max(ve,f),f=ve),Ce=f,v.style.strokeDashoffset=Q==="reverse"?`${H[z]*f}`:`${H[z]*(1-f)}`,l&&(v.style.opacity=Q==="reverse"?`${1-f}`:`${f}`),a&&p?v.style.stroke=Oe(a,p,f):p&&(v.style.stroke=p),K!==null&&B!==null?v.style.strokeWidth=`${K+(B-K)*f}`:B!==null&&(v.style.strokeWidth=`${B}`),te!==null&&ie!==null?v.style.fillOpacity=`${te+(ie-te)*f}`:ie!==null&&(v.style.fillOpacity=`${ie}`),M&&v.tagName.toLowerCase()==="path"&&pe[z]&&v.setAttribute("d",Je(pe[z],M,f)),z===0&&(d?.(f),e.style.setProperty("--scroll-draw-progress",String(f))),f<1&&(ue=false);}),y){let v=ge(U(m,ye,Te,x));for(let z in y){let V=parseFloat(z);v>=V&&!Me.has(V)&&(Me.add(V),y[z]?.());}}!he&&U(m,ye,Te,x)>0&&(he=true,I?.()),ue&&!ae?(ae=true,b?.(),xe<(S==="infinite"?1/0:S??0)&&(xe++,Ae=setTimeout(()=>{ve=-1,he=false,ae=false,Me.clear(),We();},O))):!ue&&!J&&(ae=false),se=requestAnimationFrame(Be);}let je=new IntersectionObserver(s=>{s.forEach(m=>{ze=m.isIntersecting,ze&&!le?se=requestAnimationFrame(Be):cancelAnimationFrame(se);});},{root:ee??null,threshold:$,rootMargin:k}),Ue;function _e(){clearTimeout(Ue),Ue=setTimeout(()=>{j.forEach((s,m)=>{H[m]=Ge(s),s.style.strokeDasharray=`${H[m]}`;}),et();},150);}return window.addEventListener("resize",_e),window.addEventListener("orientationchange",_e),D>0?setTimeout(()=>je.observe(e),D):je.observe(e),{destroy(){cancelAnimationFrame(se),clearTimeout(Ae),je.disconnect(),window.removeEventListener("resize",_e),window.removeEventListener("orientationchange",_e),clearTimeout(Ue),Ye?.remove();},replay(){ve=-1,Ve=-1,qe=-1,he=false,ae=false,xe=0,le=false,Me.clear(),clearTimeout(Ae),We();},pause(){le=true,cancelAnimationFrame(se);},resume(){le&&(le=false,ze&&(se=requestAnimationFrame(Be)));},seek(s){let m=Math.min(1,Math.max(0,s));Ce=m,ve=m,le=true,cancelAnimationFrame(se),Et(m,E);},getProgress(){return Ce}}}var lt=new Map;function Pe(e,n){lt.set(e,n);}function Le(e){lt.delete(e);}function Nt(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 i=[],o=[],c=t[2].trim();if(c)for(let u of c.split(/[\s,]+/)){let l=u.match(/^([-+]?[\d.eE]+)(.*)$/);i.push(l?parseFloat(l[1]):0),o.push(l?l[2]:"");}n.push({fn:t[1],nums:i,units:o});}return n}function It(e,n,r){let t=ct(e),i=ct(n);return t.length===0||t.length!==i.length?r<1?e:n:t.map((o,c)=>{let u=i[c];return o.fn!==u.fn||o.nums.length!==u.nums.length?r<1?`${o.fn}(${o.nums.map((l,g)=>`${l}${o.units[g]}`).join(", ")})`:`${u.fn}(${u.nums.map((l,g)=>`${l}${u.units[g]}`).join(", ")})`:`${o.fn}(${o.nums.map((l,g)=>`${l+(u.nums[g]-l)*r}${o.units[g]}`).join(", ")})`}).join(" ")}function ut(e,n,r){if(typeof e=="number"&&typeof n=="number")return String(e+(n-e)*r);let t=String(e),i=String(n);if(Nt(t))return Oe(t,i,r);if(t.includes("("))return It(t,i,r);let o=t.match(/^([-+]?[\d.]+)(.*)$/),c=i.match(/^([-+]?[\d.]+)(.*)$/);if(o&&c){let u=parseFloat(o[1]),l=parseFloat(c[1]);return `${u+(l-u)*r}${o[2]||c[2]}`}return r<1?t:i}function Ot(e){return e.replace(/([A-Z])/g,n=>`-${n.toLowerCase()}`)}var mt={linear:"linear","ease-in":"ease-in","ease-out":"ease-out","ease-in-out":"ease-in-out"},Rt=new Set(["opacity","transform","background-color","color","filter","scale","translate","rotate"]),Ft=0;function Dt(){return typeof CSS<"u"&&typeof CSS.supports=="function"&&CSS.supports("animation-timeline: view()")}function ft(e,n){let r={destroy:()=>{},replay:()=>{},pause:()=>{},resume:()=>{},seek:()=>{},getProgress:()=>0};if(typeof window>"u")return r;let{props:t,trigger:i={},easing:o="ease-out",speed:c=1,once:u=false,axis:l="y",scrollContainer:g,native:P=true,onProgress:N,onComplete:E,onEnter:J,onLeave:fe,onEnterBack:F,onLeaveBack:_}=n,q=window.matchMedia("(prefers-reduced-motion: reduce)").matches,D=typeof o=="function"?o:ne[o]??ne["ease-out"],T=oe(i.start??"top bottom"),A=oe(i.end??"bottom top"),h=typeof g=="string"?document.querySelector(g):g??null,y=Object.entries(t).map(([a,p])=>({prop:Ot(a),from:Array.isArray(p)?p[0]:"",to:Array.isArray(p)?p[1]:p}));function C(){let a=window.getComputedStyle(e);for(let p of y)p.from===""&&(p.from=a.getPropertyValue(p.prop).trim()||"0");}function $(){for(let a of y)e.style.setProperty(a.prop,String(a.to));}if(q)return $(),E?.(),r;C();function k(){if(!P||!Dt()||typeof o!="string"||!(o in mt)||l!=="y"||h||u||c!==1||N||E||J||fe||F||_||(i.start??"top bottom").trim()!=="top bottom"||(i.end??"bottom top").trim()!=="bottom top")return false;for(let a of y)if(!Rt.has(a.prop))return false;return true}function S(){let a=`ssd-a-${++Ft}`,p=y.map(re=>`${re.prop}:${re.from}`).join(";"),K=y.map(re=>`${re.prop}:${re.to}`).join(";"),B=document.createElement("style");B.setAttribute("data-ssd-animate",""),B.textContent=`@keyframes ${a}{from{${p}}to{${K}}}.${a}{animation-name:${a};animation-duration:auto;animation-timing-function:${mt[o]};animation-fill-mode:both;animation-timeline:view();animation-range:cover 0% cover 100%;}`,document.head.appendChild(B),e.classList.add(a);let te=()=>l==="x"?window.scrollX:window.scrollY,ie=()=>l==="x"?window.innerWidth:window.innerHeight;return {destroy(){e.classList.remove(a),B.remove();},replay(){e.classList.remove(a),e.offsetWidth,e.classList.add(a);},pause(){e.style.animationPlayState="paused";},resume(){e.style.animationPlayState="";},seek(re){let j=Math.min(1,Math.max(0,re));e.classList.remove(a);for(let H of y)e.style.setProperty(H.prop,ut(H.from,H.to,j));},getProgress(){let re=e.getBoundingClientRect(),j=te(),H=ie(),{tStart:pe,tEnd:ye}=me({top:re.top,height:re.height},j,H,T,A);return D(U(j,pe,ye,c))}}}if(k())return S();let O=0,M=0,R=0,G=false,W=false,Y=-1,d=0,I=false,b=NaN,w=()=>h?l==="x"?h.scrollLeft:h.scrollTop:l==="x"?window.scrollX:window.scrollY,Z=()=>h?l==="x"?h.clientWidth:h.clientHeight:l==="x"?window.innerWidth:window.innerHeight;function Se(){let a=e.getBoundingClientRect(),p,K;if(h){let te=h.getBoundingClientRect();p=l==="x"?a.left-te.left+h.scrollLeft:a.top-te.top+h.scrollTop,K=l==="x"?a.width:a.height;}else p=l==="x"?a.left:a.top,K=l==="x"?a.width:a.height;let B=me({top:p,height:K},w(),Z(),T,A);O=B.tStart,M=B.tEnd;}function be(a){e.style.setProperty("--scroll-draw-progress",String(a));for(let p of y)e.style.setProperty(p.prop,ut(p.from,p.to,a));N?.(a);}function we(a){if(isNaN(b)){b=a;return}b<=0&&a>0?J?.():b>0&&a<=0&&_?.(),b<1&&a>=1?fe?.():b>=1&&a<1&&F?.(),b=a;}function ge(){if(!G||W)return;let a=M===O?0:(w()-O)/(M-O);we(a);let p=D(U(w(),O,M,c));u&&(Y=Math.max(Y,p),p=Y),d=p,be(p),p>=1&&!I?(I=true,E?.()):p<1&&!u&&(I=false),R=requestAnimationFrame(ge);}Se();{let a=D(U(w(),O,M,c));u&&a>0&&(Y=a),d=a,be(a);}let Re=new IntersectionObserver(a=>{a.forEach(p=>{G=p.isIntersecting,G&&!W?R=requestAnimationFrame(ge):cancelAnimationFrame(R);});},{root:h??null}),ke;function ee(){clearTimeout(ke),ke=setTimeout(Se,150);}return window.addEventListener("resize",ee),window.addEventListener("orientationchange",ee),Re.observe(e),Pe(e,{type:"animate",getProgress:()=>d,getTrigger:()=>({tStart:O,tEnd:M})}),{destroy(){cancelAnimationFrame(R),Re.disconnect(),window.removeEventListener("resize",ee),window.removeEventListener("orientationchange",ee),clearTimeout(ke),Le(e);},replay(){Y=-1,I=false,d=0,W=false,be(0);},pause(){W=true,cancelAnimationFrame(R);},resume(){W&&(W=false,G&&(R=requestAnimationFrame(ge)));},seek(a){let p=Math.min(1,Math.max(0,a));d=p,Y=p,W=true,cancelAnimationFrame(R),be(p);},getProgress(){return d}}}var Ze={destroy:()=>{},replay:()=>{},pause:()=>{},resume:()=>{},seek:()=>{},getProgress:()=>0};function pt(e,n){if(typeof window>"u")return Ze;let r=typeof e=="string"?document.querySelector(e):e;if(!r)return process.env.NODE_ENV!=="production"&&console.warn("[svg-scroll-draw] scrollCounter: element not found:",e),Ze;let t=r,{from:i=0,to:o,format:c,easing:u="ease-out",trigger:l={},once:g=true,decimals:P,onComplete:N}=n,E=P!==void 0?d=>d.toFixed(P):c??(d=>String(Math.round(d))),J=typeof u=="function"?u:ne[u]??ne["ease-out"],fe=oe(l.start??"top 80%"),F=oe(l.end??"top 20%");if(window.matchMedia("(prefers-reduced-motion: reduce)").matches)return t.textContent=E(o),N?.(),Ze;t.textContent=E(i);let q=0,D=0,T=0,A=false,h=false,y=-1,C=0,$=false,k=()=>window.scrollY,S=()=>window.innerHeight;function O(){let d=t.getBoundingClientRect(),I=me({top:d.top,height:d.height},k(),S(),fe,F);q=I.tStart,D=I.tEnd;}function M(d){t.textContent=E(i+(o-i)*d),t.style.setProperty("--scroll-draw-progress",String(d));}function R(){if(!A||h)return;let d=J(U(k(),q,D,1));g&&(y=Math.max(y,d),d=y),C=d,M(d),d>=1&&!$?($=true,N?.()):d<1&&!g&&($=false),T=requestAnimationFrame(R);}O();{let d=J(U(k(),q,D,1));g&&d>0&&(y=d),C=d,M(d);}let G=new IntersectionObserver(d=>{d.forEach(I=>{A=I.isIntersecting,A&&!h?T=requestAnimationFrame(R):cancelAnimationFrame(T);});}),W;function Y(){clearTimeout(W),W=setTimeout(O,150);}return window.addEventListener("resize",Y),window.addEventListener("orientationchange",Y),G.observe(t),Pe(t,{type:"counter",getProgress:()=>C,getTrigger:()=>({tStart:q,tEnd:D})}),{destroy(){cancelAnimationFrame(T),G.disconnect(),window.removeEventListener("resize",Y),window.removeEventListener("orientationchange",Y),clearTimeout(W),Le(t);},replay(){y=-1,$=false,C=0,h=false,M(0);},pause(){h=true,cancelAnimationFrame(T);},resume(){h&&(h=false,A&&(T=requestAnimationFrame(R)));},seek(d){let I=Math.min(1,Math.max(0,d));C=I,y=I,h=true,cancelAnimationFrame(T),M(I);},getProgress(){return C}}}var dt={destroy:()=>{},replay:()=>{},pause:()=>{},resume:()=>{},seek:()=>{},getProgress:()=>0};function gt(e,n={}){if(typeof window>"u")return dt;let r=typeof e=="string"?document.querySelector(e):e;if(!r||r.tagName.toLowerCase()!=="video")return process.env.NODE_ENV!=="production"&&console.warn("[svg-scroll-draw] scrollVideo: <video> element not found:",e),dt;let t=r,{trigger:i={},easing:o="linear",once:c=false,axis:u="y",preload:l="auto",onReady:g,onComplete:P,onProgress:N}=n,E=window.matchMedia("(prefers-reduced-motion: reduce)").matches,J=typeof o=="function"?o:ne[o]??ne.linear,fe=oe(i.start??"top top"),F=oe(i.end??"bottom top");t.pause(),t.hasAttribute("preload")||(t.preload=l);let _=n.from??0,q=n.to,D=0,T=0,A=0,h=false,y=false,C=-1,$=0,k=false,S=false,O=()=>u==="x"?window.scrollX:window.scrollY,M=()=>u==="x"?window.innerWidth:window.innerHeight;function R(){let w=t.getBoundingClientRect(),Z=u==="x"?w.left:w.top,Se=u==="x"?w.width:w.height,be=me({top:Z,height:Se},O(),M(),fe,F);D=be.tStart,T=be.tEnd;}function G(w){if(!S)return;let Z=q??t.duration??0;t.currentTime=_+(Z-_)*w,t.style.setProperty("--scroll-draw-progress",String(w)),N?.(w);}function W(){if(!h||y||!S)return;let w=J(U(O(),D,T,1));c&&(C=Math.max(C,w),w=C),$=w,G(w),w>=1&&!k?(k=true,P?.()):w<1&&!c&&(k=false),A=requestAnimationFrame(W);}function Y(){if(S=true,q===void 0&&(q=t.duration),E){G(1),g?.();return}R(),g?.(),h&&!y&&(A=requestAnimationFrame(W));}t.readyState>=1?Y():t.addEventListener("loadedmetadata",Y,{once:true}),S||R();let d=new IntersectionObserver(w=>{w.forEach(Z=>{h=Z.isIntersecting,h&&!y&&S?A=requestAnimationFrame(W):cancelAnimationFrame(A);});}),I;function b(){clearTimeout(I),I=setTimeout(R,150);}return window.addEventListener("resize",b),window.addEventListener("orientationchange",b),d.observe(t),Pe(t,{type:"video",getProgress:()=>$,getTrigger:()=>({tStart:D,tEnd:T})}),{destroy(){cancelAnimationFrame(A),d.disconnect(),t.removeEventListener("loadedmetadata",Y),window.removeEventListener("resize",b),window.removeEventListener("orientationchange",b),clearTimeout(I),Le(t);},replay(){C=-1,k=false,$=0,y=false,G(0);},pause(){y=true,cancelAnimationFrame(A);},resume(){y&&(y=false,h&&S&&(A=requestAnimationFrame(W)));},seek(w){let Z=Math.min(1,Math.max(0,w));$=Z,C=Z,y=true,cancelAnimationFrame(A),G(Z);},getProgress(){return $}}}function bt(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 Ht(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 yt(e){let n=bt(e),r=new Map;for(let o of n){let c=o.offsetTop;r.has(c)||r.set(c,[]),r.get(c).push(o);}let t=[],i=Array.from(r.keys()).sort((o,c)=>o-c);for(let o of i){let c=r.get(o),u=document.createElement("span");u.setAttribute("aria-hidden","true"),u.style.display="inline-block";for(let l of c)u.appendChild(l);t.push(u);}e.textContent="";for(let o of t)e.appendChild(o),e.appendChild(document.createTextNode(" "));return t}function zt(e,n,r,t){if(r<=1||t===0)return e;let i=(r-1)*t,o=n*t,c=o+(1-i);return c<=o?e>=o?1:0:Math.min(1,Math.max(0,(e-o)/(c-o)))}function Vt(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 ht={destroy:()=>{},replay:()=>{},pause:()=>{},resume:()=>{},seek:()=>{},getProgress:()=>0};function wt(e,n={}){if(typeof window>"u")return ht;let r=typeof e=="string"?document.querySelector(e):e;if(!r)return process.env.NODE_ENV!=="production"&&console.warn("[svg-scroll-draw] scrollText: element not found:",e),ht;let t=r,{split:i="words",stagger:o=.04,easing:c="ease-out",from:u={opacity:0,y:24},trigger:l={},once:g=true,onComplete:P}=n,N=window.matchMedia("(prefers-reduced-motion: reduce)").matches,E=typeof c=="function"?c:ne[c]??ne["ease-out"],J=oe(l.start??"top 85%"),fe=oe(l.end??"top 40%"),F=t.innerHTML;t.setAttribute("aria-label",t.textContent??"");let _;i==="chars"?_=Ht(t):i==="lines"?_=yt(t):_=bt(t);let q=_.length;function D(b,w){u?.opacity!==void 0&&(b.style.opacity=String(u.opacity+(1-u.opacity)*w));let Z=Vt(w,u);Z&&(b.style.transform=Z);}function T(b){t.style.setProperty("--scroll-draw-progress",String(b)),_.forEach((w,Z)=>{let Se=E(zt(b,Z,q,o));D(w,Se);});}if(N)return T(1),P?.(),{destroy(){t.innerHTML=F,t.removeAttribute("aria-label");},replay:()=>{},pause:()=>{},resume:()=>{},seek:()=>{},getProgress:()=>1};T(0);let A=0,h=0,y=0,C=false,$=false,k=-1,S=0,O=false,M=()=>window.scrollY,R=()=>window.innerHeight;function G(){let b=t.getBoundingClientRect(),w=me({top:b.top,height:b.height},M(),R(),J,fe);A=w.tStart,h=w.tEnd;}function W(){if(!C||$)return;let b=U(M(),A,h,1);g&&(k=Math.max(k,b),b=k),S=b,T(b),b>=1&&!O?(O=true,P?.()):b<1&&!g&&(O=false),y=requestAnimationFrame(W);}G();let Y=new IntersectionObserver(b=>{b.forEach(w=>{C=w.isIntersecting,C&&!$?y=requestAnimationFrame(W):cancelAnimationFrame(y);});}),d;function I(){clearTimeout(d),d=setTimeout(()=>{if(i==="lines"){let b=S;t.innerHTML=F,t.setAttribute("aria-label",t.textContent??""),_=yt(t),T(b);}G();},150);}return window.addEventListener("resize",I),window.addEventListener("orientationchange",I),Y.observe(t),Pe(t,{type:"text",getProgress:()=>S,getTrigger:()=>({tStart:A,tEnd:h})}),{destroy(){cancelAnimationFrame(y),Y.disconnect(),window.removeEventListener("resize",I),window.removeEventListener("orientationchange",I),clearTimeout(d),t.innerHTML=F,t.removeAttribute("aria-label"),Le(t);},replay(){k=-1,O=false,S=0,$=false,T(0);},pause(){$=true,cancelAnimationFrame(y);},resume(){$&&($=false,C&&(y=requestAnimationFrame(W)));},seek(b){let w=Math.min(1,Math.max(0,b));S=w,k=w,$=true,cancelAnimationFrame(y),T(w);},getProgress(){return S}}}function Bt(e,n={}){let[r,t]=useState(0),i=useRef(n);i.current=n;let o=useRef(-1);return useEffect(()=>{if(typeof window>"u")return;if(window.matchMedia("(prefers-reduced-motion: reduce)").matches){t(1);return}let c=typeof e=="string"?document.querySelector(e):e.current;if(!c)return;let u=c,{axis:l="y",scrollContainer:g,trigger:P={}}=i.current,N=typeof g=="string"?document.querySelector(g):g??null,E=oe(P.start??"top bottom"),J=oe(P.end??"bottom top"),fe=0,F=0,_=false,q=0;function D(){return N?l==="x"?N.scrollLeft:N.scrollTop:l==="x"?window.scrollX:window.scrollY}function T(){return N?l==="x"?N.clientWidth:N.clientHeight:l==="x"?window.innerWidth:window.innerHeight}function A(){let k=u.getBoundingClientRect(),S=D(),O=l==="x"?k.left:k.top,M=l==="x"?k.width:k.height,R=me({top:O,height:M},S,T(),E,J);fe=R.tStart,F=R.tEnd;}function h(){if(!_)return;let{speed:k=1,easing:S="linear",once:O=false}=i.current,M=typeof S=="function"?S:ne[S]??ne.linear,R=U(D(),fe,F,k),G=M(R);O&&(o.current=Math.max(o.current,G),G=o.current),t(G),q=requestAnimationFrame(h);}let y=new IntersectionObserver(k=>{k.forEach(S=>{_=S.isIntersecting,_?q=requestAnimationFrame(h):cancelAnimationFrame(q);});},{root:N??null,threshold:0});A(),y.observe(u);let C;function $(){clearTimeout(C),C=setTimeout(A,150);}return window.addEventListener("resize",$),window.addEventListener("orientationchange",$),()=>{cancelAnimationFrame(q),clearTimeout(C),y.disconnect(),window.removeEventListener("resize",$),window.removeEventListener("orientationchange",$);}},[]),r}function br({children:e,className:n,style:r,...t}){let i=useRef(null);return useEffect(()=>{if(!i.current)return;let o=at(i.current,t);return ()=>o.destroy()},[]),jsx("div",{ref:i,className:n,style:r,children:e})}function wr({children:e,className:n,style:r,...t}){let i=useRef(null);return useEffect(()=>{if(!i.current)return;let o=ft(i.current,t);return ()=>o.destroy()},[]),jsx("div",{ref:i,className:n,style:r,children:e})}function vr({className:e,style:n,...r}){let t=useRef(null);return useEffect(()=>{if(!t.current)return;let i=pt(t.current,r);return ()=>i.destroy()},[]),jsx("span",{ref:t,className:e,style:n})}function Er({src:e,className:n,style:r,muted:t=true,playsInline:i=true,...o}){let c=useRef(null);return useEffect(()=>{if(!c.current)return;let u=gt(c.current,o);return ()=>u.destroy()},[]),jsx("video",{ref:c,src:e,className:n,style:r,muted:t,playsInline:i,preload:"auto"})}function Sr({children:e,as:n="p",className:r,style:t,...i}){let o=useRef(null);return useEffect(()=>{if(!o.current)return;let c=wt(o.current,i);return ()=>c.destroy()},[]),_t.createElement(n,{ref:o,className:r,style:t},e)}export{wr as ScrollAnimate,vr as ScrollCounter,br as ScrollDraw,Sr as ScrollText,Er as ScrollVideo,Bt as useScrollDrawProgress};
|
|
1
|
+
import _t,{useState,useRef,useEffect}from'react';import {jsx}from'react/jsx-runtime';function At({bounces:e=3,decay:n=.5}={}){let r=Math.max(1,Math.round(e)),t=Math.max(.01,Math.min(.99,n)),i=Math.sqrt(t),o=0,l=[];for(let y=0;y<r;y++){let L=Math.pow(i,y);l.push(L),o+=L;}let u=[0],c=0;for(let y=0;y<r;y++)c+=l[y]/o,u.push(c);return y=>{if(y<=0)return 0;if(y>=1)return 1;for(let L=0;L<r;L++)if(y<=u[L+1]){let C=(y-u[L])/(u[L+1]-u[L]);if(L===0)return C*(2-C);let S=1-Math.pow(t,L);return S+(1-S)*(2*C-1)*(2*C-1)}return 1}}function Mt({amplitude:e=1,period:n=.4}={}){let r=Math.max(1,e),t=Math.max(.1,n),i=r<=1?t/4:t/(2*Math.PI)*Math.asin(1/r);return o=>o<=0?0:o>=1?1:r*Math.pow(2,-10*o)*Math.sin((o-i)*(2*Math.PI)/t)+1}var re={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:At(),elastic:Mt()};function ne(e="top bottom"){let n=e.trim();if(/^\d+(\.\d+)?%$/.test(n))return {element:"top",viewport:n};let[r="top",t="bottom"]=n.split(/\s+/).filter(Boolean);return {element:r,viewport:t}}function tt(e,n,r,t){switch(t){case "top":return e+r;case "center":return e+r+n/2;case "bottom":return e+r+n;default:return e+r}}function rt(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 Ge(e){let n=e.tagName.toLowerCase();if(n==="rect"){let r=parseFloat(e.getAttribute("width")??"0"),t=parseFloat(e.getAttribute("height")??"0");return 2*(r+t)}if(n==="circle"){let r=parseFloat(e.getAttribute("r")??"0");return 2*Math.PI*r}return e.getTotalLength()}function Pt(e,n,r){return Math.min(r,Math.max(n,e))}function Z(e,n,r,t){return r===n?0:Pt((e-n)/(r-n)*t,0,1)}function pe(e,n,r,t,i){let o=tt(e.top,e.height,n,t.element)-rt(t.viewport,r),l=tt(e.top,e.height,n,i.element)-rt(i.viewport,r);return {tStart:o,tEnd:l}}function nt(e){let n=/^#([a-f\d])([a-f\d])([a-f\d])$/i.exec(e);if(n)return [parseInt(n[1]+n[1],16),parseInt(n[2]+n[2],16),parseInt(n[3]+n[3],16)];let r=/^#([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(e);if(r)return [parseInt(r[1],16),parseInt(r[2],16),parseInt(r[3],16)];let t=/^rgb\(\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*\)$/i.exec(e);return t?[parseInt(t[1]),parseInt(t[2]),parseInt(t[3])]:null}function Oe(e,n,r){let t=nt(e),i=nt(n);return !t||!i?e:`rgb(${Math.round(t[0]+(i[0]-t[0])*r)},${Math.round(t[1]+(i[1]-t[1])*r)},${Math.round(t[2]+(i[2]-t[2])*r)})`}var ot={sketch:{easing:"ease-in",stagger:.1,speed:.9,fade:false},reveal:{easing:"ease-out",fade:true,speed:1.2,once:true},typewriter:{easing:"linear",stagger:.05,speed:1.5},cinematic:{easing:"ease-in-out",fade:true,speed:.75},spring:{easing:"spring",speed:1.1}};function st(e,n){process.env.NODE_ENV!=="production"&&console.warn(`[svg-scroll-draw] ${e}`,n);}var it={linear:"linear","ease-in":"ease-in","ease-out":"ease-out","ease-in-out":"ease-in-out"},Lt=0;function Ct(){return typeof CSS<"u"&&typeof CSS.supports=="function"&&CSS.supports("animation-timeline: view()")}function $t(e){let n=e.getAttribute("stroke"),r=e.getAttribute("fill");!n||n==="none"?st("Element has no stroke \u2014 path will not be visible.",e):r&&r!=="none"&&r!=="transparent"&&st("Element has a fill \u2014 it may obscure the stroke animation.",e);}function kt(e,n,r){let t=document.createElement("div");t.setAttribute("data-svg-scroll-draw-debug",""),t.style.cssText="position:fixed;pointer-events:none;z-index:9999;font-family:monospace;font-size:11px;top:0;left:0;right:0;bottom:0;";function i(){let o=r==="x"?window.scrollX:window.scrollY,l=e-o,u=n-o,c=r==="x";t.innerHTML=`
|
|
2
|
+
<div style="position:absolute;${c?`left:${l}px;top:0;bottom:0;border-left:2px dashed #22c55e;`:`top:${l}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;${c?`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",i,{passive:true}),i(),t}function Je(e,n,r){let t=(n.match(/[-+]?(?:\d*\.)?\d+(?:[eE][-+]?\d+)?/g)??[]).map(Number),i=0;return e.replace(/[-+]?(?:\d*\.)?\d+(?:[eE][-+]?\d+)?/g,o=>{let l=parseFloat(o),u=t[i++]??l;return String(+(l+(u-l)*r).toFixed(4))})}function at(e,n={}){if(typeof window>"u")return {destroy:()=>{},replay:()=>{},pause:()=>{},resume:()=>{},seek:()=>{},getProgress:()=>0};let{preset:r,...t}=n,i=r?{...ot[r],...t}:t,o=window.matchMedia("(prefers-reduced-motion: reduce)").matches,{selector:l="path, polyline, line, polygon, rect, circle",speed:u=1,fade:c=false,easing:y="linear",trigger:L={},stagger:C=0,direction:S="forward",once:U=false,debug:de=false,axis:F="y",scrollContainer:_,autoReverse:H=false,delay:G=0,strokeColor:x,strokeWidth:M,fillOpacity:P,waypoints:p,velocityScale:v=false,threshold:N=0,rootMargin:I="0px",repeat:E=0,repeatDelay:J=0,morphTo:T,clip:R,autoplay:D=false,duration:K=1e3,native:X=true,onProgress:d,onStart:$,onComplete:b,onEnter:h,onLeave:Y,onEnterBack:Se,onLeaveBack:xe}=i,be=R===true?"left":typeof R=="string"?R:false,we=typeof y=="function"?y:re[y]??re.linear,Ce=ne(L.start??"top bottom"),He=ne(L.end??"bottom top"),oe=typeof _=="string"?document.querySelector(_):_??null,ge=Array.isArray(x)?x[0]:null,ee=Array.isArray(x)?x[1]:typeof x=="string"?x:null,te=Array.isArray(M)?M[0]:null,a=Array.isArray(M)?M[1]:typeof M=="number"?M:null,g=Array.isArray(P)?P[0]:null,z=Array.isArray(P)?P[1]:typeof P=="number"?P:null;function se(s){let m=s*100;switch(be){case "right":return `inset(0 0 0 ${100-m}%)`;case "top":return `inset(0 0 ${100-m}% 0)`;case "bottom":return `inset(${100-m}% 0 0 0)`;case "center":return `circle(${s*150}% at 50% 50%)`;default:return `inset(0 ${100-m}% 0 0)`}}let O=be?[]:Array.from(e.querySelectorAll(l)),B=[],V=[],le=0,ce=0,ie=false,ye=false,ae=0,ze=false,ve=-1,Ve=-1,ue=false,$e=0,Te=0,Ae,Ye=null,Me=new Set,qe=-1,Ke=performance.now(),Ne=NaN;function Re(){return oe?F==="x"?oe.scrollLeft:oe.scrollTop:F==="x"?window.scrollX:window.scrollY}function Qe(){return oe?F==="x"?oe.clientWidth:oe.clientHeight:F==="x"?window.innerWidth:window.innerHeight}function et(){let s=e.getBoundingClientRect(),m,A,Q;if(oe){let fe=oe.getBoundingClientRect();m=F==="x"?s.left-fe.left+oe.scrollLeft:s.top-fe.top+oe.scrollTop,A=F==="x"?s.width:s.height,Q=Re();}else m=F==="x"?s.left:s.top,A=F==="x"?s.width:s.height,Q=Re();let me=pe({top:m,height:A},Q,Qe(),Ce,He);le=me.tStart,ce=me.tEnd,de&&process.env.NODE_ENV!=="production"&&(Ye?.remove(),Ye=kt(le,ce,F));}function Et(s,m){if(e.style.setProperty("--scroll-draw-progress",String(s)),be){let A=m==="reverse"?1-s:s;e.style.clipPath=se(A);return}O.forEach((A,Q)=>{A.style.strokeDashoffset=m==="reverse"?`${B[Q]*s}`:`${B[Q]*(1-s)}`,c&&(A.style.opacity=m==="reverse"?`${1-s}`:`${s}`),ge&&ee?A.style.stroke=Oe(ge,ee,s):ee&&(A.style.stroke=ee),te!==null&&a!==null?A.style.strokeWidth=`${te+(a-te)*s}`:a!==null&&(A.style.strokeWidth=`${a}`),g!==null&&z!==null?A.style.fillOpacity=`${g+(z-g)*s}`:z!==null&&(A.style.fillOpacity=`${z}`),T&&A.tagName.toLowerCase()==="path"&&V[Q]&&A.setAttribute("d",Je(V[Q],T,s));});}function We(){if(e.style.setProperty("--scroll-draw-progress","0"),be){e.style.clipPath=se(0);return}O.forEach((s,m)=>{s.style.strokeDasharray=`${B[m]}`,s.style.strokeDashoffset=S==="reverse"?"0":`${B[m]}`,c?s.style.opacity=S==="reverse"?"1":"0":s.style.opacity="",ge&&(s.style.stroke=ge),te!==null&&(s.style.strokeWidth=`${te}`),g!==null&&(s.style.fillOpacity=`${g}`),T&&s.tagName.toLowerCase()==="path"&&V[m]&&s.setAttribute("d",V[m]);});}if(O.forEach(s=>{$t(s);let m=Ge(s);B.push(m),s.tagName.toLowerCase()==="path"?V.push(s.getAttribute("d")??""):V.push(""),o?(s.style.strokeDasharray=`${m}`,s.style.strokeDashoffset=S==="reverse"?`${m}`:"0",c&&(s.style.opacity="1"),ee&&(s.style.stroke=ee),a!==null&&(s.style.strokeWidth=`${a}`),z!==null&&(s.style.fillOpacity=`${z}`),T&&s.tagName.toLowerCase()==="path"&&s.setAttribute("d",T)):(s.style.strokeDasharray=`${m}`,s.style.strokeDashoffset=S==="reverse"?"0":`${m}`,c?s.style.opacity=S==="reverse"?"1":"0":s.style.opacity="",ge&&(s.style.stroke=ge),te!==null&&(s.style.strokeWidth=`${te}`),g!==null&&(s.style.fillOpacity=`${g}`));}),be){if(o)return e.style.clipPath=se(1),b?.(),{destroy:()=>{},replay:()=>{},pause:()=>{},resume:()=>{},seek:()=>{},getProgress:()=>1};e.style.clipPath=se(0);}else if(o)return b?.(),{destroy:()=>{},replay:()=>{},pause:()=>{},resume:()=>{},seek:()=>{},getProgress:()=>1};function St(){return !(X===false||!Ct()||!O.length||typeof y!="string"||!(y in it)||be||F!=="y"||oe||u!==1||C!==0||U||H||v!==false||T||p||E||G>0||d||$||b||h||Y||Se||xe||x!=null||M!=null||P!=null||(L.start??"top bottom").trim()!=="top bottom"||(L.end??"bottom top").trim()!=="bottom top")}function xt(){let s=`svg-scroll-draw-${++Lt}`,m=S==="reverse"?"0":"var(--ssd-len)",A=S==="reverse"?"var(--ssd-len)":"0",Q=`stroke-dashoffset:${m};`,me=`stroke-dashoffset:${A};`;c&&(Q+=`opacity:${S==="reverse"?1:0};`,me+=`opacity:${S==="reverse"?0:1};`);let fe=document.createElement("style");fe.setAttribute("data-svg-scroll-draw",""),fe.textContent=`@keyframes ${s}{from{${Q}}to{${me}}}.${s}{animation-name:${s};animation-duration:auto;animation-timing-function:${it[y]};animation-fill-mode:both;animation-timeline:view();animation-range:cover 0% cover 100%;}`,document.head.appendChild(fe);function he(f,k){f.style.setProperty("--ssd-len",String(B[k])),f.style.strokeDasharray=`${B[k]}`,f.style.strokeDashoffset="",f.style.opacity="",f.style.animationPlayState="",f.classList.add(s);}O.forEach(he);let w=false,q=-1;function W(){if(q>=0)return q;let f=e.getBoundingClientRect(),{tStart:k,tEnd:j}=pe({top:f.top,height:f.height},Re(),Qe(),Ce,He);return we(Z(Re(),k,j,u))}return {destroy(){O.forEach(f=>{f.classList.remove(s),f.style.removeProperty("--ssd-len"),f.style.animationPlayState="";}),fe.remove();},replay(){w=false,q=-1,O.forEach(he);},pause(){w=true,O.forEach(f=>{f.style.animationPlayState="paused";});},resume(){w&&(w=false,O.forEach(f=>{f.style.animationPlayState="running";}));},seek(f){let k=Math.min(1,Math.max(0,f));q=k,w=true,O.forEach((j,ke)=>{j.classList.remove(s),j.style.strokeDashoffset=S==="reverse"?`${B[ke]*k}`:`${B[ke]*(1-k)}`,c&&(j.style.opacity=S==="reverse"?`${1-k}`:`${k}`);});},getProgress(){return W()}}}if(St())return xt();function Tt(){let s=Math.max(1,K),m=0,A=0;function Q(W){let f=true;if(be){let k=Math.min(1,Math.max(0,W/s)),j=we(k);$e=j,e.style.setProperty("--scroll-draw-progress",String(j)),e.style.clipPath=se(S==="reverse"?1-j:j),d?.(j),k<1&&(f=false);}else O.forEach((k,j)=>{let ke=j*C*s,Ie=Math.min(1,Math.max(0,(W-ke)/s)),Ee=we(Ie);k.style.strokeDashoffset=S==="reverse"?`${B[j]*Ee}`:`${B[j]*(1-Ee)}`,c&&(k.style.opacity=S==="reverse"?`${1-Ee}`:`${Ee}`),ge&&ee?k.style.stroke=Oe(ge,ee,Ee):ee&&(k.style.stroke=ee),te!==null&&a!==null?k.style.strokeWidth=`${te+(a-te)*Ee}`:a!==null&&(k.style.strokeWidth=`${a}`),g!==null&&z!==null?k.style.fillOpacity=`${g+(z-g)*Ee}`:z!==null&&(k.style.fillOpacity=`${z}`),T&&k.tagName.toLowerCase()==="path"&&V[j]&&k.setAttribute("d",Je(V[j],T,Ee)),j===0&&(d?.(Ee),e.style.setProperty("--scroll-draw-progress",String(Ee))),Ie<1&&(f=false);});if(p){let k=Math.min(1,Math.max(0,W/s)),j=we(k);for(let ke in p){let Ie=parseFloat(ke);j>=Ie&&!Me.has(Ie)&&(Me.add(Ie),p[ke]?.());}}return f}function me(W){if(ue)return;let f=W-m;ye||(ye=true,$?.());let k=Q(f);if(k&&!ie){ie=true,Q(s*(1+Math.max(0,O.length-1)*C)),b?.(),Te<(E==="infinite"?1/0:E??0)&&(Te++,Ae=setTimeout(()=>{m=performance.now(),ye=false,ie=false,Me.clear(),We(),ae=requestAnimationFrame(me);},J));return}k||(ae=requestAnimationFrame(me));}function fe(){cancelAnimationFrame(ae),clearTimeout(Ae),m=performance.now(),A=0,ue=false,ye=false,ie=false,Te=0,Me.clear(),We(),ae=requestAnimationFrame(me);}let he=new IntersectionObserver(W=>{W.forEach(f=>{f.isIntersecting&&!(U&&ie)?fe():!f.isIntersecting&&!U&&!ie&&(cancelAnimationFrame(ae),clearTimeout(Ae),m=null);});},{root:oe??null,threshold:N,rootMargin:I}),w;function q(){clearTimeout(w),w=setTimeout(()=>{O.forEach((W,f)=>{B[f]=Ge(W),W.style.strokeDasharray=`${B[f]}`;});},150);}return window.addEventListener("resize",q),window.addEventListener("orientationchange",q),G>0?setTimeout(()=>he.observe(e),G):he.observe(e),{destroy(){cancelAnimationFrame(ae),clearTimeout(Ae),he.disconnect(),window.removeEventListener("resize",q),window.removeEventListener("orientationchange",q),clearTimeout(w);},replay(){Te=0,fe();},pause(){ue||(ue=true,A=performance.now()-m,cancelAnimationFrame(ae));},resume(){ue&&(ue=false,m=performance.now()-A,ae=requestAnimationFrame(me));},seek(W){let f=Math.min(1,Math.max(0,W));$e=f,ue=true,A=f*s,m=performance.now()-A,cancelAnimationFrame(ae),Q(A);},getProgress(){return $e}}}if(D)return Tt();et();function Be(){if(!ze||ue)return;let s=performance.now(),m=Re(),A=u;if(v!==false){let w=s-Ke,q=w>0?Math.abs(m-(qe<0?m:qe))/w:0;A=u*Math.max(.2,1+q*(typeof v=="number"?v:1)*.04);}qe=m,Ke=s;let Q=H?Ve===-1||m>=Ve?"forward":"reverse":S;Ve=m;let me=ce-le,fe=true,he=me===0?0:(m-le)/me;if(isNaN(Ne)||(Ne<=0&&he>0?h?.():Ne>0&&he<=0&&xe?.(),Ne<1&&he>=1?Y?.():Ne>=1&&he<1&&Se?.()),Ne=he,be){let w=we(Z(m,le,ce,A));U&&!H&&(ve=Math.max(ve,w),w=ve),$e=w,e.style.setProperty("--scroll-draw-progress",String(w));let q=Q==="reverse"?1-w:w;e.style.clipPath=se(q),d?.(w),!ye&&Z(m,le,ce,A)>0&&(ye=true,$?.()),w>=1&&!ie?(ie=true,b?.(),Te<(E==="infinite"?1/0:E??0)&&(Te++,Ae=setTimeout(()=>{ve=-1,ye=false,ie=false,e.style.clipPath=se(0);},J))):w<1&&!U&&(ie=false),ae=requestAnimationFrame(Be);return}if(O.forEach((w,q)=>{let W=q*C*me,f=we(Z(m,le+W,ce+W,A));U&&!H&&(ve=Math.max(ve,f),f=ve),$e=f,w.style.strokeDashoffset=Q==="reverse"?`${B[q]*f}`:`${B[q]*(1-f)}`,c&&(w.style.opacity=Q==="reverse"?`${1-f}`:`${f}`),ge&&ee?w.style.stroke=Oe(ge,ee,f):ee&&(w.style.stroke=ee),te!==null&&a!==null?w.style.strokeWidth=`${te+(a-te)*f}`:a!==null&&(w.style.strokeWidth=`${a}`),g!==null&&z!==null?w.style.fillOpacity=`${g+(z-g)*f}`:z!==null&&(w.style.fillOpacity=`${z}`),T&&w.tagName.toLowerCase()==="path"&&V[q]&&w.setAttribute("d",Je(V[q],T,f)),q===0&&(d?.(f),e.style.setProperty("--scroll-draw-progress",String(f))),f<1&&(fe=false);}),p){let w=we(Z(m,le,ce,A));for(let q in p){let W=parseFloat(q);w>=W&&!Me.has(W)&&(Me.add(W),p[q]?.());}}!ye&&Z(m,le,ce,A)>0&&(ye=true,$?.()),fe&&!ie?(ie=true,b?.(),Te<(E==="infinite"?1/0:E??0)&&(Te++,Ae=setTimeout(()=>{ve=-1,ye=false,ie=false,Me.clear(),We();},J))):!fe&&!U&&(ie=false),ae=requestAnimationFrame(Be);}let je=new IntersectionObserver(s=>{s.forEach(m=>{ze=m.isIntersecting,ze&&!ue?ae=requestAnimationFrame(Be):cancelAnimationFrame(ae);});},{root:oe??null,threshold:N,rootMargin:I}),Ue;function _e(){clearTimeout(Ue),Ue=setTimeout(()=>{O.forEach((s,m)=>{B[m]=Ge(s),s.style.strokeDasharray=`${B[m]}`;}),et();},150);}return window.addEventListener("resize",_e),window.addEventListener("orientationchange",_e),G>0?setTimeout(()=>je.observe(e),G):je.observe(e),{destroy(){cancelAnimationFrame(ae),clearTimeout(Ae),je.disconnect(),window.removeEventListener("resize",_e),window.removeEventListener("orientationchange",_e),clearTimeout(Ue),Ye?.remove();},replay(){ve=-1,Ve=-1,qe=-1,ye=false,ie=false,Te=0,ue=false,Me.clear(),clearTimeout(Ae),We();},pause(){ue=true,cancelAnimationFrame(ae);},resume(){ue&&(ue=false,ze&&(ae=requestAnimationFrame(Be)));},seek(s){let m=Math.min(1,Math.max(0,s));$e=m,ve=m,ue=true,cancelAnimationFrame(ae),Et(m,S);},getProgress(){return $e}}}var lt=new Map;function Pe(e,n){lt.set(e,n);}function Le(e){lt.delete(e);}function Nt(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 i=[],o=[],l=t[2].trim();if(l)for(let u of l.split(/[\s,]+/)){let c=u.match(/^([-+]?[\d.eE]+)(.*)$/);i.push(c?parseFloat(c[1]):0),o.push(c?c[2]:"");}n.push({fn:t[1],nums:i,units:o});}return n}function It(e,n,r){let t=ct(e),i=ct(n);return t.length===0||t.length!==i.length?r<1?e:n:t.map((o,l)=>{let u=i[l];return o.fn!==u.fn||o.nums.length!==u.nums.length?r<1?`${o.fn}(${o.nums.map((c,y)=>`${c}${o.units[y]}`).join(", ")})`:`${u.fn}(${u.nums.map((c,y)=>`${c}${u.units[y]}`).join(", ")})`:`${o.fn}(${o.nums.map((c,y)=>`${c+(u.nums[y]-c)*r}${o.units[y]}`).join(", ")})`}).join(" ")}function ut(e,n,r){if(typeof e=="number"&&typeof n=="number")return String(e+(n-e)*r);let t=String(e),i=String(n);if(Nt(t))return Oe(t,i,r);if(t.includes("("))return It(t,i,r);let o=t.match(/^([-+]?[\d.]+)(.*)$/),l=i.match(/^([-+]?[\d.]+)(.*)$/);if(o&&l){let u=parseFloat(o[1]),c=parseFloat(l[1]);return `${u+(c-u)*r}${o[2]||l[2]}`}return r<1?t:i}function Ot(e){return e.replace(/([A-Z])/g,n=>`-${n.toLowerCase()}`)}var mt={linear:"linear","ease-in":"ease-in","ease-out":"ease-out","ease-in-out":"ease-in-out"},Rt=new Set(["opacity","transform","background-color","color","filter","scale","translate","rotate"]),Ft=0;function Dt(){return typeof CSS<"u"&&typeof CSS.supports=="function"&&CSS.supports("animation-timeline: view()")}function ft(e,n){let r={destroy:()=>{},replay:()=>{},pause:()=>{},resume:()=>{},seek:()=>{},getProgress:()=>0};if(typeof window>"u")return r;let{props:t,trigger:i={},easing:o="ease-out",speed:l=1,once:u=false,axis:c="y",scrollContainer:y,native:L=true,velocityScale:C=false,onProgress:S,onComplete:U,onEnter:de,onLeave:F,onEnterBack:_,onLeaveBack:H}=n,G=window.matchMedia("(prefers-reduced-motion: reduce)").matches,x=typeof o=="function"?o:re[o]??re["ease-out"],M=ne(i.start??"top bottom"),P=ne(i.end??"bottom top"),p=typeof y=="string"?document.querySelector(y):y??null,v=Object.entries(t).map(([a,g])=>({prop:Ot(a),from:Array.isArray(g)?g[0]:"",to:Array.isArray(g)?g[1]:g}));function N(){let a=window.getComputedStyle(e);for(let g of v)g.from===""&&(g.from=a.getPropertyValue(g.prop).trim()||"0");}function I(){for(let a of v)e.style.setProperty(a.prop,String(a.to));}if(G)return I(),U?.(),r;N();function E(){if(!L||!Dt()||typeof o!="string"||!(o in mt)||c!=="y"||p||u||l!==1||S||U||de||F||_||H||C!==false||(i.start??"top bottom").trim()!=="top bottom"||(i.end??"bottom top").trim()!=="bottom top")return false;for(let a of v)if(!Rt.has(a.prop))return false;return true}function J(){let a=`ssd-a-${++Ft}`,g=v.map(V=>`${V.prop}:${V.from}`).join(";"),z=v.map(V=>`${V.prop}:${V.to}`).join(";"),se=document.createElement("style");se.setAttribute("data-ssd-animate",""),se.textContent=`@keyframes ${a}{from{${g}}to{${z}}}.${a}{animation-name:${a};animation-duration:auto;animation-timing-function:${mt[o]};animation-fill-mode:both;animation-timeline:view();animation-range:cover 0% cover 100%;}`,document.head.appendChild(se),e.classList.add(a);let O=()=>c==="x"?window.scrollX:window.scrollY,B=()=>c==="x"?window.innerWidth:window.innerHeight;return {destroy(){e.classList.remove(a),se.remove();},replay(){e.classList.remove(a),e.offsetWidth,e.classList.add(a);},pause(){e.style.animationPlayState="paused";},resume(){e.style.animationPlayState="";},seek(V){let le=Math.min(1,Math.max(0,V));e.classList.remove(a);for(let ce of v)e.style.setProperty(ce.prop,ut(ce.from,ce.to,le));},getProgress(){let V=e.getBoundingClientRect(),le=O(),ce=B(),{tStart:ie,tEnd:ye}=pe({top:V.top,height:V.height},le,ce,M,P);return x(Z(le,ie,ye,l))}}}if(E())return J();let T=0,R=0,D=0,K=false,X=false,d=-1,$=0,b=false,h=NaN,Y=-1,Se=0,xe=()=>p?c==="x"?p.scrollLeft:p.scrollTop:c==="x"?window.scrollX:window.scrollY,be=()=>p?c==="x"?p.clientWidth:p.clientHeight:c==="x"?window.innerWidth:window.innerHeight;function we(){let a=e.getBoundingClientRect(),g,z;if(p){let O=p.getBoundingClientRect();g=c==="x"?a.left-O.left+p.scrollLeft:a.top-O.top+p.scrollTop,z=c==="x"?a.width:a.height;}else g=c==="x"?a.left:a.top,z=c==="x"?a.width:a.height;let se=pe({top:g,height:z},xe(),be(),M,P);T=se.tStart,R=se.tEnd;}function Ce(a){e.style.setProperty("--scroll-draw-progress",String(a));for(let g of v)e.style.setProperty(g.prop,ut(g.from,g.to,a));S?.(a);}function He(a){if(isNaN(h)){h=a;return}h<=0&&a>0?de?.():h>0&&a<=0&&H?.(),h<1&&a>=1?F?.():h>=1&&a<1&&_?.(),h=a;}function oe(){if(!K||X)return;let a=performance.now(),g=xe(),z=l;if(C!==false){let B=a-Se,V=B>0?Math.abs(g-(Y<0?g:Y))/B:0;z=l*Math.max(.2,1+V*(typeof C=="number"?C:1)*.04);}Y=g,Se=a;let se=R===T?0:(g-T)/(R-T);He(se);let O=x(Z(g,T,R,z));u&&(d=Math.max(d,O),O=d),$=O,Ce(O),O>=1&&!b?(b=true,U?.()):O<1&&!u&&(b=false),D=requestAnimationFrame(oe);}we();{let a=x(Z(xe(),T,R,l));u&&a>0&&(d=a),$=a,Ce(a);}let ge=new IntersectionObserver(a=>{a.forEach(g=>{K=g.isIntersecting,K&&!X?D=requestAnimationFrame(oe):cancelAnimationFrame(D);});},{root:p??null}),ee;function te(){clearTimeout(ee),ee=setTimeout(we,150);}return window.addEventListener("resize",te),window.addEventListener("orientationchange",te),ge.observe(e),Pe(e,{type:"animate",getProgress:()=>$,getTrigger:()=>({tStart:T,tEnd:R})}),{destroy(){cancelAnimationFrame(D),ge.disconnect(),window.removeEventListener("resize",te),window.removeEventListener("orientationchange",te),clearTimeout(ee),Le(e);},replay(){d=-1,b=false,$=0,X=false,Ce(0);},pause(){X=true,cancelAnimationFrame(D);},resume(){X&&(X=false,K&&(D=requestAnimationFrame(oe)));},seek(a){let g=Math.min(1,Math.max(0,a));$=g,d=g,X=true,cancelAnimationFrame(D),Ce(g);},getProgress(){return $}}}var Ze={destroy:()=>{},replay:()=>{},pause:()=>{},resume:()=>{},seek:()=>{},getProgress:()=>0};function pt(e,n){if(typeof window>"u")return Ze;let r=typeof e=="string"?document.querySelector(e):e;if(!r)return process.env.NODE_ENV!=="production"&&console.warn("[svg-scroll-draw] scrollCounter: element not found:",e),Ze;let t=r,{from:i=0,to:o,format:l,easing:u="ease-out",trigger:c={},once:y=true,decimals:L,onComplete:C}=n,S=L!==void 0?d=>d.toFixed(L):l??(d=>String(Math.round(d))),U=typeof u=="function"?u:re[u]??re["ease-out"],de=ne(c.start??"top 80%"),F=ne(c.end??"top 20%");if(window.matchMedia("(prefers-reduced-motion: reduce)").matches)return t.textContent=S(o),C?.(),Ze;t.textContent=S(i);let H=0,G=0,x=0,M=false,P=false,p=-1,v=0,N=false,I=()=>window.scrollY,E=()=>window.innerHeight;function J(){let d=t.getBoundingClientRect(),$=pe({top:d.top,height:d.height},I(),E(),de,F);H=$.tStart,G=$.tEnd;}function T(d){t.textContent=S(i+(o-i)*d),t.style.setProperty("--scroll-draw-progress",String(d));}function R(){if(!M||P)return;let d=U(Z(I(),H,G,1));y&&(p=Math.max(p,d),d=p),v=d,T(d),d>=1&&!N?(N=true,C?.()):d<1&&!y&&(N=false),x=requestAnimationFrame(R);}J();{let d=U(Z(I(),H,G,1));y&&d>0&&(p=d),v=d,T(d);}let D=new IntersectionObserver(d=>{d.forEach($=>{M=$.isIntersecting,M&&!P?x=requestAnimationFrame(R):cancelAnimationFrame(x);});}),K;function X(){clearTimeout(K),K=setTimeout(J,150);}return window.addEventListener("resize",X),window.addEventListener("orientationchange",X),D.observe(t),Pe(t,{type:"counter",getProgress:()=>v,getTrigger:()=>({tStart:H,tEnd:G})}),{destroy(){cancelAnimationFrame(x),D.disconnect(),window.removeEventListener("resize",X),window.removeEventListener("orientationchange",X),clearTimeout(K),Le(t);},replay(){p=-1,N=false,v=0,P=false,T(0);},pause(){P=true,cancelAnimationFrame(x);},resume(){P&&(P=false,M&&(x=requestAnimationFrame(R)));},seek(d){let $=Math.min(1,Math.max(0,d));v=$,p=$,P=true,cancelAnimationFrame(x),T($);},getProgress(){return v}}}var dt={destroy:()=>{},replay:()=>{},pause:()=>{},resume:()=>{},seek:()=>{},getProgress:()=>0};function gt(e,n={}){if(typeof window>"u")return dt;let r=typeof e=="string"?document.querySelector(e):e;if(!r||r.tagName.toLowerCase()!=="video")return process.env.NODE_ENV!=="production"&&console.warn("[svg-scroll-draw] scrollVideo: <video> element not found:",e),dt;let t=r,{trigger:i={},easing:o="linear",once:l=false,axis:u="y",preload:c="auto",onReady:y,onComplete:L,onProgress:C}=n,S=window.matchMedia("(prefers-reduced-motion: reduce)").matches,U=typeof o=="function"?o:re[o]??re.linear,de=ne(i.start??"top top"),F=ne(i.end??"bottom top");t.pause(),t.hasAttribute("preload")||(t.preload=c);let _=n.from??0,H=n.to,G=0,x=0,M=0,P=false,p=false,v=-1,N=0,I=false,E=false,J=()=>u==="x"?window.scrollX:window.scrollY,T=()=>u==="x"?window.innerWidth:window.innerHeight;function R(){let h=t.getBoundingClientRect(),Y=u==="x"?h.left:h.top,Se=u==="x"?h.width:h.height,xe=pe({top:Y,height:Se},J(),T(),de,F);G=xe.tStart,x=xe.tEnd;}function D(h){if(!E)return;let Y=H??t.duration??0;t.currentTime=_+(Y-_)*h,t.style.setProperty("--scroll-draw-progress",String(h)),C?.(h);}function K(){if(!P||p||!E)return;let h=U(Z(J(),G,x,1));l&&(v=Math.max(v,h),h=v),N=h,D(h),h>=1&&!I?(I=true,L?.()):h<1&&!l&&(I=false),M=requestAnimationFrame(K);}function X(){if(E=true,H===void 0&&(H=t.duration),S){D(1),y?.();return}R(),y?.(),P&&!p&&(M=requestAnimationFrame(K));}t.readyState>=1?X():t.addEventListener("loadedmetadata",X,{once:true}),E||R();let d=new IntersectionObserver(h=>{h.forEach(Y=>{P=Y.isIntersecting,P&&!p&&E?M=requestAnimationFrame(K):cancelAnimationFrame(M);});}),$;function b(){clearTimeout($),$=setTimeout(R,150);}return window.addEventListener("resize",b),window.addEventListener("orientationchange",b),d.observe(t),Pe(t,{type:"video",getProgress:()=>N,getTrigger:()=>({tStart:G,tEnd:x})}),{destroy(){cancelAnimationFrame(M),d.disconnect(),t.removeEventListener("loadedmetadata",X),window.removeEventListener("resize",b),window.removeEventListener("orientationchange",b),clearTimeout($),Le(t);},replay(){v=-1,I=false,N=0,p=false,D(0);},pause(){p=true,cancelAnimationFrame(M);},resume(){p&&(p=false,P&&E&&(M=requestAnimationFrame(K)));},seek(h){let Y=Math.min(1,Math.max(0,h));N=Y,v=Y,p=true,cancelAnimationFrame(M),D(Y);},getProgress(){return N}}}function bt(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 Ht(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 yt(e){let n=bt(e),r=new Map;for(let o of n){let l=o.offsetTop;r.has(l)||r.set(l,[]),r.get(l).push(o);}let t=[],i=Array.from(r.keys()).sort((o,l)=>o-l);for(let o of i){let l=r.get(o),u=document.createElement("span");u.setAttribute("aria-hidden","true"),u.style.display="inline-block";for(let c of l)u.appendChild(c);t.push(u);}e.textContent="";for(let o of t)e.appendChild(o),e.appendChild(document.createTextNode(" "));return t}function zt(e,n,r,t){if(r<=1||t===0)return e;let i=(r-1)*t,o=n*t,l=o+(1-i);return l<=o?e>=o?1:0:Math.min(1,Math.max(0,(e-o)/(l-o)))}function Vt(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 ht={destroy:()=>{},replay:()=>{},pause:()=>{},resume:()=>{},seek:()=>{},getProgress:()=>0};function wt(e,n={}){if(typeof window>"u")return ht;let r=typeof e=="string"?document.querySelector(e):e;if(!r)return process.env.NODE_ENV!=="production"&&console.warn("[svg-scroll-draw] scrollText: element not found:",e),ht;let t=r,{split:i="words",stagger:o=.04,easing:l="ease-out",from:u={opacity:0,y:24},trigger:c={},once:y=true,onComplete:L}=n,C=window.matchMedia("(prefers-reduced-motion: reduce)").matches,S=typeof l=="function"?l:re[l]??re["ease-out"],U=ne(c.start??"top 85%"),de=ne(c.end??"top 40%"),F=t.innerHTML;t.setAttribute("aria-label",t.textContent??"");let _;i==="chars"?_=Ht(t):i==="lines"?_=yt(t):_=bt(t);let H=_.length;function G(b,h){u?.opacity!==void 0&&(b.style.opacity=String(u.opacity+(1-u.opacity)*h));let Y=Vt(h,u);Y&&(b.style.transform=Y);}function x(b){t.style.setProperty("--scroll-draw-progress",String(b)),_.forEach((h,Y)=>{let Se=S(zt(b,Y,H,o));G(h,Se);});}if(C)return x(1),L?.(),{destroy(){t.innerHTML=F,t.removeAttribute("aria-label");},replay:()=>{},pause:()=>{},resume:()=>{},seek:()=>{},getProgress:()=>1};x(0);let M=0,P=0,p=0,v=false,N=false,I=-1,E=0,J=false,T=()=>window.scrollY,R=()=>window.innerHeight;function D(){let b=t.getBoundingClientRect(),h=pe({top:b.top,height:b.height},T(),R(),U,de);M=h.tStart,P=h.tEnd;}function K(){if(!v||N)return;let b=Z(T(),M,P,1);y&&(I=Math.max(I,b),b=I),E=b,x(b),b>=1&&!J?(J=true,L?.()):b<1&&!y&&(J=false),p=requestAnimationFrame(K);}D();let X=new IntersectionObserver(b=>{b.forEach(h=>{v=h.isIntersecting,v&&!N?p=requestAnimationFrame(K):cancelAnimationFrame(p);});}),d;function $(){clearTimeout(d),d=setTimeout(()=>{if(i==="lines"){let b=E;t.innerHTML=F,t.setAttribute("aria-label",t.textContent??""),_=yt(t),x(b);}D();},150);}return window.addEventListener("resize",$),window.addEventListener("orientationchange",$),X.observe(t),Pe(t,{type:"text",getProgress:()=>E,getTrigger:()=>({tStart:M,tEnd:P})}),{destroy(){cancelAnimationFrame(p),X.disconnect(),window.removeEventListener("resize",$),window.removeEventListener("orientationchange",$),clearTimeout(d),t.innerHTML=F,t.removeAttribute("aria-label"),Le(t);},replay(){I=-1,J=false,E=0,N=false,x(0);},pause(){N=true,cancelAnimationFrame(p);},resume(){N&&(N=false,v&&(p=requestAnimationFrame(K)));},seek(b){let h=Math.min(1,Math.max(0,b));E=h,I=h,N=true,cancelAnimationFrame(p),x(h);},getProgress(){return E}}}function Bt(e,n={}){let[r,t]=useState(0),i=useRef(n);i.current=n;let o=useRef(-1);return useEffect(()=>{if(typeof window>"u")return;if(window.matchMedia("(prefers-reduced-motion: reduce)").matches){t(1);return}let l=typeof e=="string"?document.querySelector(e):e.current;if(!l)return;let u=l,{axis:c="y",scrollContainer:y,trigger:L={}}=i.current,C=typeof y=="string"?document.querySelector(y):y??null,S=ne(L.start??"top bottom"),U=ne(L.end??"bottom top"),de=0,F=0,_=false,H=0;function G(){return C?c==="x"?C.scrollLeft:C.scrollTop:c==="x"?window.scrollX:window.scrollY}function x(){return C?c==="x"?C.clientWidth:C.clientHeight:c==="x"?window.innerWidth:window.innerHeight}function M(){let I=u.getBoundingClientRect(),E=G(),J=c==="x"?I.left:I.top,T=c==="x"?I.width:I.height,R=pe({top:J,height:T},E,x(),S,U);de=R.tStart,F=R.tEnd;}function P(){if(!_)return;let{speed:I=1,easing:E="linear",once:J=false}=i.current,T=typeof E=="function"?E:re[E]??re.linear,R=Z(G(),de,F,I),D=T(R);J&&(o.current=Math.max(o.current,D),D=o.current),t(D),H=requestAnimationFrame(P);}let p=new IntersectionObserver(I=>{I.forEach(E=>{_=E.isIntersecting,_?H=requestAnimationFrame(P):cancelAnimationFrame(H);});},{root:C??null,threshold:0});M(),p.observe(u);let v;function N(){clearTimeout(v),v=setTimeout(M,150);}return window.addEventListener("resize",N),window.addEventListener("orientationchange",N),()=>{cancelAnimationFrame(H),clearTimeout(v),p.disconnect(),window.removeEventListener("resize",N),window.removeEventListener("orientationchange",N);}},[]),r}function br({children:e,className:n,style:r,...t}){let i=useRef(null);return useEffect(()=>{if(!i.current)return;let o=at(i.current,t);return ()=>o.destroy()},[]),jsx("div",{ref:i,className:n,style:r,children:e})}function wr({children:e,className:n,style:r,...t}){let i=useRef(null);return useEffect(()=>{if(!i.current)return;let o=ft(i.current,t);return ()=>o.destroy()},[]),jsx("div",{ref:i,className:n,style:r,children:e})}function vr({className:e,style:n,...r}){let t=useRef(null);return useEffect(()=>{if(!t.current)return;let i=pt(t.current,r);return ()=>i.destroy()},[]),jsx("span",{ref:t,className:e,style:n})}function Er({src:e,className:n,style:r,muted:t=true,playsInline:i=true,...o}){let l=useRef(null);return useEffect(()=>{if(!l.current)return;let u=gt(l.current,o);return ()=>u.destroy()},[]),jsx("video",{ref:l,src:e,className:n,style:r,muted:t,playsInline:i,preload:"auto"})}function Sr({children:e,as:n="p",className:r,style:t,...i}){let o=useRef(null);return useEffect(()=>{if(!o.current)return;let l=wt(o.current,i);return ()=>l.destroy()},[]),_t.createElement(n,{ref:o,className:r,style:t},e)}export{wr as ScrollAnimate,vr as ScrollCounter,br as ScrollDraw,Sr as ScrollText,Er as ScrollVideo,Bt as useScrollDrawProgress};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
'use strict';function Ee({bounces:e=3,decay:n=.5}={}){let t=Math.max(1,Math.round(e)),r=Math.max(.01,Math.min(.99,n)),u=Math.sqrt(r),s=0,m=[];for(let c=0;c<t;c++){let p=Math.pow(u,c);m.push(p),s+=p;}let l=[0],a=0;for(let c=0;c<t;c++)a+=m[c]/s,l.push(a);return c=>{if(c<=0)return 0;if(c>=1)return 1;for(let p=0;p<t;p++)if(c<=l[p+1]){let d=(c-l[p])/(l[p+1]-l[p]);if(p===0)return d*(2-d);let v=1-Math.pow(r,p);return v+(1-v)*(2*d-1)*(2*d-1)}return 1}}function xe({amplitude:e=1,period:n=.4}={}){let t=Math.max(1,e),r=Math.max(.1,n),u=t<=1?r/4:r/(2*Math.PI)*Math.asin(1/t);return s=>s<=0?0:s>=1?1:t*Math.pow(2,-10*s)*Math.sin((s-u)*(2*Math.PI)/r)+1}var j={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:xe()};function G(e="top bottom"){let n=e.trim();if(/^\d+(\.\d+)?%$/.test(n))return {element:"top",viewport:n};let[t="top",r="bottom"]=n.split(/\s+/).filter(Boolean);return {element:t,viewport:r}}function te(e,n,t,r){switch(r){case "top":return e+t;case "center":return e+t+n/2;case "bottom":return e+t+n;default:return e+t}}function ne(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,t){return Math.min(t,Math.max(n,e))}function B(e,n,t,r){return t===n?0:Se((e-n)/(t-n)*r,0,1)}function U(e,n,t,r,u){let s=te(e.top,e.height,n,r.element)-ne(r.viewport,t),m=te(e.top,e.height,n,u.element)-ne(u.viewport,t);return {tStart:s,tEnd:m}}function re(e){let n=/^#([a-f\d])([a-f\d])([a-f\d])$/i.exec(e);if(n)return [parseInt(n[1]+n[1],16),parseInt(n[2]+n[2],16),parseInt(n[3]+n[3],16)];let t=/^#([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(e);if(t)return [parseInt(t[1],16),parseInt(t[2],16),parseInt(t[3],16)];let r=/^rgb\(\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*\)$/i.exec(e);return r?[parseInt(r[1]),parseInt(r[2]),parseInt(r[3])]:null}function oe(e,n,t){let r=re(e),u=re(n);return !r||!u?e:`rgb(${Math.round(r[0]+(u[0]-r[0])*t)},${Math.round(r[1]+(u[1]-r[1])*t)},${Math.round(r[2]+(u[2]-r[2])*t)})`}var se=new Map;function ie(e,n){se.set(e,n);}function ae(e){se.delete(e);}function Me(e){return e.startsWith("#")||e.startsWith("rgb")||e.startsWith("hsl")}function ue(e){let n=[],t=/([\w]+)\(([^)]*)\)/g,r;for(;(r=t.exec(e))!==null;){let u=[],s=[],m=r[2].trim();if(m)for(let l of m.split(/[\s,]+/)){let a=l.match(/^([-+]?[\d.eE]+)(.*)$/);u.push(a?parseFloat(a[1]):0),s.push(a?a[2]:"");}n.push({fn:r[1],nums:u,units:s});}return n}function Pe(e,n,t){let r=ue(e),u=ue(n);return r.length===0||r.length!==u.length?t<1?e:n:r.map((s,m)=>{let l=u[m];return s.fn!==l.fn||s.nums.length!==l.nums.length?t<1?`${s.fn}(${s.nums.map((a,c)=>`${a}${s.units[c]}`).join(", ")})`:`${l.fn}(${l.nums.map((a,c)=>`${a}${l.units[c]}`).join(", ")})`:`${s.fn}(${s.nums.map((a,c)=>`${a+(l.nums[c]-a)*t}${s.units[c]}`).join(", ")})`}).join(" ")}function ce(e,n,t){if(typeof e=="number"&&typeof n=="number")return String(e+(n-e)*t);let r=String(e),u=String(n);if(Me(r))return oe(r,u,t);if(r.includes("("))return Pe(r,u,t);let s=r.match(/^([-+]?[\d.]+)(.*)$/),m=u.match(/^([-+]?[\d.]+)(.*)$/);if(s&&m){let l=parseFloat(s[1]),a=parseFloat(m[1]);return `${l+(a-l)*t}${s[2]||m[2]}`}return t<1?r:u}function $e(e){return e.replace(/([A-Z])/g,n=>`-${n.toLowerCase()}`)}var le={linear:"linear","ease-in":"ease-in","ease-out":"ease-out","ease-in-out":"ease-in-out"},Ae=new Set(["opacity","transform","background-color","color","filter","scale","translate","rotate"]),Te=0;function Le(){return typeof CSS<"u"&&typeof CSS.supports=="function"&&CSS.supports("animation-timeline: view()")}function me(e,n){let t={destroy:()=>{},replay:()=>{},pause:()=>{},resume:()=>{},seek:()=>{},getProgress:()=>0};if(typeof window>"u")return t;let{props:r,trigger:u={},easing:s="ease-out",speed:m=1,once:l=false,axis:a="y",scrollContainer:c,native:p=true,velocityScale:d=false,onProgress:v,onComplete:R,onEnter:F,onLeave:P,onEnterBack:$,onLeaveBack:I}=n,k=window.matchMedia("(prefers-reduced-motion: reduce)").matches,H=typeof s=="function"?s:j[s]??j["ease-out"],Z=G(u.start??"top bottom"),J=G(u.end??"bottom top"),f=typeof c=="string"?document.querySelector(c):c??null,w=Object.entries(r).map(([o,i])=>({prop:$e(o),from:Array.isArray(i)?i[0]:"",to:Array.isArray(i)?i[1]:i}));function fe(){let o=window.getComputedStyle(e);for(let i of w)i.from===""&&(i.from=o.getPropertyValue(i.prop).trim()||"0");}function ge(){for(let o of w)e.style.setProperty(o.prop,String(o.to));}if(k)return ge(),R?.(),t;fe();function de(){if(!p||!Le()||typeof s!="string"||!(s in le)||a!=="y"||f||l||m!==1||v||R||F||P||$||I||d!==false||(u.start??"top bottom").trim()!=="top bottom"||(u.end??"bottom top").trim()!=="bottom top")return false;for(let o of w)if(!Ae.has(o.prop))return false;return true}function be(){let o=`ssd-a-${++Te}`,i=w.map(g=>`${g.prop}:${g.from}`).join(";"),y=w.map(g=>`${g.prop}:${g.to}`).join(";"),h=document.createElement("style");h.setAttribute("data-ssd-animate",""),h.textContent=`@keyframes ${o}{from{${i}}to{${y}}}.${o}{animation-name:${o};animation-duration:auto;animation-timing-function:${le[s]};animation-fill-mode:both;animation-timeline:view();animation-range:cover 0% cover 100%;}`,document.head.appendChild(h),e.classList.add(o);let b=()=>a==="x"?window.scrollX:window.scrollY,D=()=>a==="x"?window.innerWidth:window.innerHeight;return {destroy(){e.classList.remove(o),h.remove();},replay(){e.classList.remove(o),e.offsetWidth,e.classList.add(o);},pause(){e.style.animationPlayState="paused";},resume(){e.style.animationPlayState="";},seek(g){let N=Math.min(1,Math.max(0,g));e.classList.remove(o);for(let C of w)e.style.setProperty(C.prop,ce(C.from,C.to,N));},getProgress(){let g=e.getBoundingClientRect(),N=b(),C=D(),{tStart:ve,tEnd:we}=U({top:g.top,height:g.height},N,C,Z,J);return H(B(N,ve,we,m))}}}if(de())return be();let E=0,A=0,x=0,O=false,S=false,T=-1,L=0,V=false,M=NaN,Y=-1,K=0,q=()=>f?a==="x"?f.scrollLeft:f.scrollTop:a==="x"?window.scrollX:window.scrollY,he=()=>f?a==="x"?f.clientWidth:f.clientHeight:a==="x"?window.innerWidth:window.innerHeight;function Q(){let o=e.getBoundingClientRect(),i,y;if(f){let b=f.getBoundingClientRect();i=a==="x"?o.left-b.left+f.scrollLeft:o.top-b.top+f.scrollTop,y=a==="x"?o.width:o.height;}else i=a==="x"?o.left:o.top,y=a==="x"?o.width:o.height;let h=U({top:i,height:y},q(),he(),Z,J);E=h.tStart,A=h.tEnd;}function X(o){e.style.setProperty("--scroll-draw-progress",String(o));for(let i of w)e.style.setProperty(i.prop,ce(i.from,i.to,o));v?.(o);}function ye(o){if(isNaN(M)){M=o;return}M<=0&&o>0?F?.():M>0&&o<=0&&I?.(),M<1&&o>=1?P?.():M>=1&&o<1&&$?.(),M=o;}function z(){if(!O||S)return;let o=performance.now(),i=q(),y=m;if(d!==false){let D=o-K,g=D>0?Math.abs(i-(Y<0?i:Y))/D:0;y=m*Math.max(.2,1+g*(typeof d=="number"?d:1)*.04);}Y=i,K=o;let h=A===E?0:(i-E)/(A-E);ye(h);let b=H(B(i,E,A,y));l&&(T=Math.max(T,b),b=T),L=b,X(b),b>=1&&!V?(V=true,R?.()):b<1&&!l&&(V=false),x=requestAnimationFrame(z);}Q();{let o=H(B(q(),E,A,m));l&&o>0&&(T=o),L=o,X(o);}let ee=new IntersectionObserver(o=>{o.forEach(i=>{O=i.isIntersecting,O&&!S?x=requestAnimationFrame(z):cancelAnimationFrame(x);});},{root:f??null}),W;function _(){clearTimeout(W),W=setTimeout(Q,150);}return window.addEventListener("resize",_),window.addEventListener("orientationchange",_),ee.observe(e),ie(e,{type:"animate",getProgress:()=>L,getTrigger:()=>({tStart:E,tEnd:A})}),{destroy(){cancelAnimationFrame(x),ee.disconnect(),window.removeEventListener("resize",_),window.removeEventListener("orientationchange",_),clearTimeout(W),ae(e);},replay(){T=-1,V=false,L=0,S=false,X(0);},pause(){S=true,cancelAnimationFrame(x);},resume(){S&&(S=false,O&&(x=requestAnimationFrame(z)));},seek(o){let i=Math.min(1,Math.max(0,o));L=i,T=i,S=true,cancelAnimationFrame(x),X(i);},getProgress(){return L}}}var Re={fadeUp:{opacity:0,y:32},fadeDown:{opacity:0,y:-32},fadeLeft:{opacity:0,x:32},fadeRight:{opacity:0,x:-32},scale:{opacity:0,scale:.88},flip:{opacity:0,rotateX:20},flipX:{opacity:0,rotateY:20}};function Ie(e){let n={};e.opacity!==void 0&&(n.opacity=[e.opacity,1]);let t=[],r=[];return e.x!==void 0&&(t.push(`translateX(${e.x}px)`),r.push("translateX(0px)")),e.y!==void 0&&(t.push(`translateY(${e.y}px)`),r.push("translateY(0px)")),e.scale!==void 0&&(t.push(`scale(${e.scale})`),r.push("scale(1)")),e.rotate!==void 0&&(t.push(`rotate(${e.rotate}deg)`),r.push("rotate(0deg)")),e.rotateX!==void 0&&(t.push(`rotateX(${e.rotateX}deg)`),r.push("rotateX(0deg)")),e.rotateY!==void 0&&(t.push(`rotateY(${e.rotateY}deg)`),r.push("rotateY(0deg)")),t.length>0&&(n.transform=[t.join(" "),r.join(" ")]),n}function Ne(e){return typeof e=="string"?Array.from(document.querySelectorAll(e)):e instanceof NodeList?Array.from(e):e}var pe={destroy:()=>{}};function De(e,n={}){if(typeof window>"u")return pe;let t=Ne(e);if(!t.length)return process.env.NODE_ENV!=="production"&&console.warn("[svg-scroll-draw] scrollReveal: no elements found:",e),pe;let{preset:r="fadeUp",from:u,stagger:s=.08,easing:m="ease-out",once:l=true,trigger:a,onEnter:c,onLeave:p}=n,d={...Re[r],...u},v=Ie(d),R=Math.min(s*4,4),F=t.map((P,$)=>{let I=Math.max(50,88-$*R),k=Math.max(20,I-35);return me(P,{props:v,easing:m,once:l,native:false,trigger:a??{start:`top ${I}%`,end:`top ${k}%`},onEnter:$===0?c:void 0,onLeave:$===t.length-1?p:void 0})});return {destroy(){F.forEach(P=>P.destroy());}}}exports.scrollReveal=De;
|