svg-scroll-draw 2.15.1 → 2.15.2
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.mjs +2 -2
- package/dist/aos/react/index.d.mts +44 -0
- package/dist/aos/react/index.d.ts +44 -0
- package/dist/horizontal/index.d.mts +108 -0
- package/dist/horizontal/index.d.ts +108 -0
- package/dist/lenis/index.d.mts +51 -0
- package/dist/lenis/index.d.ts +51 -0
- package/dist/nuxt/index.cjs +2 -2
- package/dist/nuxt/index.mjs +2 -2
- package/dist/react/index.cjs +2 -2
- package/dist/react/index.mjs +2 -2
- package/dist/solid/index.cjs +2 -2
- package/dist/solid/index.mjs +2 -2
- package/dist/svelte/index.cjs +2 -2
- package/dist/svelte/index.mjs +2 -2
- package/dist/video/index.cjs +1 -1
- package/dist/video/index.mjs +1 -1
- package/dist/vivus/react/index.d.mts +116 -0
- package/dist/vivus/react/index.d.ts +116 -0
- package/dist/vue/index.cjs +2 -2
- package/dist/vue/index.mjs +2 -2
- package/package.json +1 -1
package/dist/angular/index.cjs
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
'use strict';function jt({bounces:e=3,decay:r=.5}={}){let n=Math.max(1,Math.round(e)),t=Math.max(.01,Math.min(.99,r)),l=Math.sqrt(t),o=0,c=[];for(let p=0;p<n;p++){let T=Math.pow(l,p);c.push(T),o+=T;}let u=[0],m=0;for(let p=0;p<n;p++)m+=c[p]/o,u.push(m);return p=>{if(p<=0)return 0;if(p>=1)return 1;for(let T=0;T<n;T++)if(p<=u[T+1]){let z=(p-u[T])/(u[T+1]-u[T]);if(T===0)return z*(2-z);let
|
|
1
|
+
'use strict';function jt({bounces:e=3,decay:r=.5}={}){let n=Math.max(1,Math.round(e)),t=Math.max(.01,Math.min(.99,r)),l=Math.sqrt(t),o=0,c=[];for(let p=0;p<n;p++){let T=Math.pow(l,p);c.push(T),o+=T;}let u=[0],m=0;for(let p=0;p<n;p++)m+=c[p]/o,u.push(m);return p=>{if(p<=0)return 0;if(p>=1)return 1;for(let T=0;T<n;T++)if(p<=u[T+1]){let z=(p-u[T])/(u[T+1]-u[T]);if(T===0)return z*(2-z);let A=1-Math.pow(t,T);return A+(1-A)*(2*z-1)*(2*z-1)}return 1}}function Yt({amplitude:e=1,period:r=.4}={}){let n=Math.max(1,e),t=Math.max(.1,r),l=n<=1?t/4:t/(2*Math.PI)*Math.asin(1/n);return o=>o<=0?0:o>=1?1:n*Math.pow(2,-10*o)*Math.sin((o-l)*(2*Math.PI)/t)+1}var 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:jt(),elastic:Yt()};function de(e="top bottom"){let r=e.trim();if(/^\d+(\.\d+)?%$/.test(r))return {element:"top",viewport:r};let[n="top",t="bottom"]=r.split(/\s+/).filter(Boolean);return {element:n,viewport:t}}function dt(e,r,n,t){switch(t){case "top":return e+n;case "center":return e+n+r/2;case "bottom":return e+n+r;default:return e+n}}function gt(e,r){if(/^\d+(\.\d+)?%$/.test(e))return r*(parseFloat(e)/100);switch(e){case "top":return 0;case "center":return r/2;case "bottom":return r;default:return r}}function _e(e){let r=e.tagName.toLowerCase();if(r==="rect"){let n=parseFloat(e.getAttribute("width")??"0"),t=parseFloat(e.getAttribute("height")??"0");return 2*(n+t)}if(r==="circle"){let n=parseFloat(e.getAttribute("r")??"0");return 2*Math.PI*n}return e.getTotalLength()}function Ut(e,r,n){return Math.min(n,Math.max(r,e))}function K(e,r,n,t){return n===r?0:Ut((e-r)/(n-r)*t,0,1)}function Ze(e,r,n){let t=e.getBoundingClientRect(),l=n==="x"?t.width:t.height;return r?{top:n==="x"?t.left-r.getBoundingClientRect().left+r.scrollLeft:t.top-r.getBoundingClientRect().top+r.scrollTop,height:l,scroll:0}:{top:n==="x"?t.left:t.top,height:l,scroll:n==="x"?window.scrollX:window.scrollY}}function xe(e,r,n,t,l){let o=dt(e.top,e.height,r,t.element)-gt(t.viewport,n),c=dt(e.top,e.height,r,l.element)-gt(l.viewport,n);return {tStart:o,tEnd:c}}function ht(e){let r=/^#([a-f\d])([a-f\d])([a-f\d])$/i.exec(e);if(r)return [parseInt(r[1]+r[1],16),parseInt(r[2]+r[2],16),parseInt(r[3]+r[3],16)];let n=/^#([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(e);if(n)return [parseInt(n[1],16),parseInt(n[2],16),parseInt(n[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 Ve(e,r,n){let t=ht(e),l=ht(r);return !t||!l?e:`rgb(${Math.round(t[0]+(l[0]-t[0])*n)},${Math.round(t[1]+(l[1]-t[1])*n)},${Math.round(t[2]+(l[2]-t[2])*n)})`}var yt={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}};var Be=typeof __SVG_SCROLL_DRAW_DEV__<"u"?__SVG_SCROLL_DRAW_DEV__:typeof process<"u"&&typeof process.env<"u"&&process.env.NODE_ENV!=="production";function we(e,...r){Be&&console.warn(`[svg-scroll-draw] ${e}`,...r);}var Xt="cubic-bezier(0.333333, 0, 0.666667, 0.333333)",Qt="cubic-bezier(0.333333, 0.666667, 0.666667, 1)",bt=33;function Zt(){return typeof CSS<"u"&&typeof CSS.supports=="function"&&CSS.supports("animation-timing-function: linear(0, 1)")}function Kt(e){let r=[];for(let n=0;n<bt;n++){let t=n/(bt-1);r.push(String(Math.round(e(t)*1e5)/1e5));}return `linear(${r.join(",")})`}function Ke(e){switch(e){case "linear":return "linear";case "ease-in":return Xt;case "ease-out":return Qt;case "ease-in-out":return Zt()?Kt(re["ease-in-out"]):null;default:return null}}var wt=Symbol.for("svg-scroll-draw.registry");function vt(){let e=globalThis;return e[wt]||(e[wt]=new Map)}function Le(e,r){vt().set(e,r);}function Pe(e){vt().delete(e);}var Jt=0;function er(){return typeof CSS<"u"&&typeof CSS.supports=="function"&&CSS.supports("animation-timeline: view()")&&CSS.supports("view-timeline-name: --x")}function Et(e,r){let n="";try{n=getComputedStyle(e).getPropertyValue(r).trim();}catch{}return n||(e.getAttribute(r)??"").trim()}var St=new Set(["","none","transparent","rgba(0, 0, 0, 0)"]);function tr(e){if(!Be)return;let r=Et(e,"stroke");if(!r||r==="none"){we("Element has no stroke \u2014 path will not be visible.",e);return}let n=(e.getAttribute("fill")??"").trim();n&&!St.has(n)&&!St.has(Et(e,"fill"))&&we("Element has a fill \u2014 it may obscure the stroke animation.",e);}function rr(e,r,n){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 l(){let o=n==="x"?window.scrollX:window.scrollY,c=e-o,u=r-o,m=n==="x";t.innerHTML=`
|
|
2
2
|
<div style="position:absolute;${m?`left:${c}px;top:0;bottom:0;border-left:2px dashed #22c55e;`:`top:${c}px;left:0;right:0;border-top:2px dashed #22c55e;`}padding:2px 6px;color:#22c55e;background:rgba(0,0,0,.6)">\u25B6 start</div>
|
|
3
|
-
<div style="position:absolute;${m?`left:${u}px;top:0;bottom:0;border-left:2px dashed #ef4444;`:`top:${u}px;left:0;right:0;border-top:2px dashed #ef4444;`}padding:2px 6px;color:#ef4444;background:rgba(0,0,0,.6)">\u25A0 end</div>`;}return document.body.appendChild(t),window.addEventListener("scroll",l,{passive:true}),l(),{el:t,destroy(){window.removeEventListener("scroll",l),t.remove();}}}var Tt=/[-+]?(?:\d*\.)?\d+(?:[eE][-+]?\d+)?/g,xt=/[MmLlHhVvCcSsQqTtAaZz]/g;function nr(e,r,n){if(!Be)return;let t=(e.match(xt)??[]).join("").toUpperCase(),l=(r.match(xt)??[]).join("").toUpperCase(),o=(e.match(Tt)??[]).length,c=(r.match(Tt)??[]).length;if(t!==l){we(`morphTo: command sequence differs (${t||"\u2205"} \u2192 ${l||"\u2205"}). Interpolation is coordinate-for-coordinate, so the result will not reach the target shape. Redraw both paths with the same commands.`,n);return}o!==c&&we(`morphTo: coordinate count differs (${o} \u2192 ${c}). Extra coordinates are ignored and missing ones hold their start value, so the result will not reach the target shape.`,n);}function st(e,r,n){let t=(r.match(/[-+]?(?:\d*\.)?\d+(?:[eE][-+]?\d+)?/g)??[]).map(Number),l=0;return e.replace(/[-+]?(?:\d*\.)?\d+(?:[eE][-+]?\d+)?/g,o=>{let c=parseFloat(o),u=t[l++]??c;return String(+(c+(u-c)*n).toFixed(4))})}function At(e,r={}){if(typeof window>"u")return {destroy:()=>{},replay:()=>{},pause:()=>{},resume:()=>{},seek:()=>{},getProgress:()=>0};let{preset:n,...t}=r,l=n?{...yt[n],...t}:t,o=window.matchMedia("(prefers-reduced-motion: reduce)").matches,{selector:c="path, polyline, line, polygon, rect, circle",speed:u=1,fade:m=false,easing:p="linear",trigger:T={},stagger:z=0,direction:P="forward",once:ne=false,debug:$e=false,axis:B="y",scrollContainer:J,autoReverse:X=false,delay:G=0,strokeColor:A,strokeWidth:$,fillOpacity:M,waypoints:w,velocityScale:I=false,threshold:O=0,rootMargin:C="0px",repeat:E=0,repeatDelay:se=0,morphTo:D,clip:oe,autoplay:ie=false,duration:ee=1e3,native:ae=true,onProgress:d,onStart:x,onComplete:g,onEnter:L,onLeave:S,onEnterBack:N,onLeaveBack:fe}=l,Q=oe===true?"left":typeof oe=="string"?oe:false,Se=typeof p=="function"?p:re[p]??re.linear,Ce=de(T.start??"top bottom"),He=de(T.end??"bottom top"),ve=typeof J=="string"?document.querySelector(J):J??null,Ee=Array.isArray(A)?A[0]:null,le=Array.isArray(A)?A[1]:typeof A=="string"?A:null,ce=Array.isArray($)?$[0]:null,j=Array.isArray($)?$[1]:typeof $=="number"?$:null,pe=Array.isArray(M)?M[0]:null,Z=Array.isArray(M)?M[1]:typeof M=="number"?M:null;function ke(s){let a=s*100;switch(Q){case "right":return `inset(0 0 0 ${100-a}%)`;case "top":return `inset(0 0 ${100-a}% 0)`;case "bottom":return `inset(${100-a}% 0 0 0)`;case "center":return `circle(${s*150}% at 50% 50%)`;default:return `inset(0 ${100-a}% 0 0)`}}let _=Q?[]:Array.from(e.querySelectorAll(c)),k=[],i=[],f=0,ge=0,R=false,V=false,q=0,Ae=false,he=-1,te=-1,Y=false,ye=0,Oe=0,Fe,Je=null;function it(){Je?.destroy(),Je=null;}let Ne=new Set,at=NaN,Re=true,Ge=-1,lt=performance.now(),ze=NaN;function et(){return ve?B==="x"?ve.scrollLeft:ve.scrollTop:B==="x"?window.scrollX:window.scrollY}function ct(){return ve?B==="x"?ve.clientWidth:ve.clientHeight:B==="x"?window.innerWidth:window.innerHeight}function ut(){let s=Ze(e,ve,B);return xe(s,s.scroll,ct(),Ce,He)}function mt(){(({tStart:f,tEnd:ge}=ut())),$e&&Be&&(it(),Je=rr(f,ge,B));}function tt(s,a=ut){Le(e,{type:"draw",getProgress:()=>s.getProgress(),getTrigger:a});let b=s.destroy;return s.destroy=()=>{b.call(s),Pe(e);},s}function qt(s,a){if(e.style.setProperty("--scroll-draw-progress",String(s)),Q){let b=a==="reverse"?1-s:s;e.style.clipPath=ke(b);return}_.forEach((b,ue)=>{b.style.strokeDashoffset=a==="reverse"?`${k[ue]*s}`:`${k[ue]*(1-s)}`,m&&(b.style.opacity=a==="reverse"?`${1-s}`:`${s}`),Ee&&le?b.style.stroke=Ve(Ee,le,s):le&&(b.style.stroke=le),ce!==null&&j!==null?b.style.strokeWidth=`${ce+(j-ce)*s}`:j!==null&&(b.style.strokeWidth=`${j}`),pe!==null&&Z!==null?b.style.fillOpacity=`${pe+(Z-pe)*s}`:Z!==null&&(b.style.fillOpacity=`${Z}`),D&&b.tagName.toLowerCase()==="path"&&i[ue]&&b.setAttribute("d",st(i[ue],D,s));});}function je(){if(e.style.setProperty("--scroll-draw-progress","0"),Q){e.style.clipPath=ke(0);return}_.forEach((s,a)=>{s.style.strokeDasharray=`${k[a]}`,s.style.strokeDashoffset=P==="reverse"?"0":`${k[a]}`,m?s.style.opacity=P==="reverse"?"1":"0":s.style.opacity="",Ee&&(s.style.stroke=Ee),ce!==null&&(s.style.strokeWidth=`${ce}`),pe!==null&&(s.style.fillOpacity=`${pe}`),D&&s.tagName.toLowerCase()==="path"&&i[a]&&s.setAttribute("d",i[a]);});}if(_.forEach(s=>{tr(s);let a=_e(s);k.push(a);let b=s.tagName.toLowerCase()==="path";b?i.push(s.getAttribute("d")??""):i.push(""),D&&(b?nr(i[i.length-1],D,s):we(`morphTo only applies to <path> elements \u2014 ignored on <${s.tagName}>.`,s)),o?(s.style.strokeDasharray=`${a}`,s.style.strokeDashoffset=P==="reverse"?`${a}`:"0",m&&(s.style.opacity="1"),le&&(s.style.stroke=le),j!==null&&(s.style.strokeWidth=`${j}`),Z!==null&&(s.style.fillOpacity=`${Z}`),D&&s.tagName.toLowerCase()==="path"&&s.setAttribute("d",D)):(s.style.strokeDasharray=`${a}`,s.style.strokeDashoffset=P==="reverse"?"0":`${a}`,m?s.style.opacity=P==="reverse"?"1":"0":s.style.opacity="",Ee&&(s.style.stroke=Ee),ce!==null&&(s.style.strokeWidth=`${ce}`),pe!==null&&(s.style.fillOpacity=`${pe}`));}),Q){if(o)return e.style.clipPath=ke(1),g?.(),{destroy:()=>{},replay:()=>{},pause:()=>{},resume:()=>{},seek:()=>{},getProgress:()=>1};e.style.clipPath=ke(0);}else if(o)return g?.(),{destroy:()=>{},replay:()=>{},pause:()=>{},resume:()=>{},seek:()=>{},getProgress:()=>1};let ft=typeof p=="string"?Ke(p):null;function Wt(){return !(ae===false||!er()||!_.length||!ft||Q||B!=="y"||ve||u!==1||z!==0||ne||X||I!==false||D||w||E||G>0||d||x||g||L||S||N||fe||A!=null||$!=null||M!=null||(T.start??"top bottom").trim()!=="top bottom"||(T.end??"bottom top").trim()!=="bottom top")}function Bt(){let s=++Jt,a=`svg-scroll-draw-${s}`,b=`svg-scroll-draw-host-${s}`,ue=`--svg-scroll-draw-${s}`,De=P==="reverse"?"0":"var(--ssd-len)",Ie=P==="reverse"?"var(--ssd-len)":"0",Me=`stroke-dashoffset:${De};`,v=`stroke-dashoffset:${Ie};`;m&&(Me+=`opacity:${P==="reverse"?1:0};`,v+=`opacity:${P==="reverse"?0:1};`);let F=document.createElement("style");F.setAttribute("data-svg-scroll-draw",""),F.textContent=`@keyframes ${a}{from{${Me}}to{${v}}}.${b}{view-timeline-name:${ue};view-timeline-axis:block;}.${a}{animation-name:${a};animation-duration:auto;animation-timing-function:${ft};animation-fill-mode:both;animation-timeline:${ue};animation-range:cover 0% cover 100%;}`,document.head.appendChild(F),e.classList.add(b);function me(h,U){h.style.setProperty("--ssd-len",String(k[U])),h.style.strokeDasharray=`${k[U]}`,h.style.strokeDashoffset="",h.style.opacity="",h.style.animationPlayState="",h.classList.add(a);}_.forEach(me);let y=false,H=-1;function W(){if(H>=0)return H;let h=e.getBoundingClientRect(),{tStart:U,tEnd:Te}=xe({top:h.top,height:h.height},et(),ct(),Ce,He);return Se(K(et(),U,Te,u))}return {destroy(){e.classList.remove(b),_.forEach(h=>{h.classList.remove(a),h.style.removeProperty("--ssd-len"),h.style.animationPlayState="";}),F.remove();},replay(){y=false,H=-1,_.forEach(me);},pause(){y=true,_.forEach(h=>{h.style.animationPlayState="paused";});},resume(){y&&(y=false,_.forEach(h=>{h.style.animationPlayState="running";}));},seek(h){let U=Math.min(1,Math.max(0,h));H=U,y=true,_.forEach((Te,be)=>{Te.classList.remove(a),Te.style.strokeDashoffset=P==="reverse"?`${k[be]*U}`:`${k[be]*(1-U)}`,m&&(Te.style.opacity=P==="reverse"?`${1-U}`:`${U}`);});},getProgress(){return W()},refresh(){_.forEach((h,U)=>{k[U]=_e(h),h.style.setProperty("--ssd-len",String(k[U])),h.style.strokeDasharray=`${k[U]}`;});}}}if(Wt())return tt(Bt());function Gt(){let s=Math.max(1,ee),a=0,b=0,ue=false;function De(y){let H=true;if(Q){let W=Math.min(1,Math.max(0,y/s)),h=Se(W);ye=h,e.style.setProperty("--scroll-draw-progress",String(h)),e.style.clipPath=ke(P==="reverse"?1-h:h),d?.(h),W<1&&(H=false);}else _.forEach((W,h)=>{let U=h*z*s,Te=Math.min(1,Math.max(0,(y-U)/s)),be=Se(Te);W.style.strokeDashoffset=P==="reverse"?`${k[h]*be}`:`${k[h]*(1-be)}`,m&&(W.style.opacity=P==="reverse"?`${1-be}`:`${be}`),Ee&&le?W.style.stroke=Ve(Ee,le,be):le&&(W.style.stroke=le),ce!==null&&j!==null?W.style.strokeWidth=`${ce+(j-ce)*be}`:j!==null&&(W.style.strokeWidth=`${j}`),pe!==null&&Z!==null?W.style.fillOpacity=`${pe+(Z-pe)*be}`:Z!==null&&(W.style.fillOpacity=`${Z}`),D&&W.tagName.toLowerCase()==="path"&&i[h]&&W.setAttribute("d",st(i[h],D,be)),h===0&&(ye=be,d?.(be),e.style.setProperty("--scroll-draw-progress",String(be))),Te<1&&(H=false);});if(w){let W=Math.min(1,Math.max(0,y/s)),h=Se(W);for(let U in w){let Te=parseFloat(U);h>=Te&&!Ne.has(Te)&&(Ne.add(Te),w[U]?.());}}return H}function Ie(y){if(Y)return;let H=y-a;V||(V=true,x?.());let W=De(H);if(W&&!R){R=true,De(s*(1+Math.max(0,_.length-1)*z)),g?.(),Oe<(E==="infinite"?1/0:E??0)&&(Oe++,Fe=setTimeout(()=>{a=performance.now(),V=false,R=false,Ne.clear(),je(),q=requestAnimationFrame(Ie);},se));return}W||(q=requestAnimationFrame(Ie));}function Me(){cancelAnimationFrame(q),clearTimeout(Fe),a=performance.now(),b=0,Y=false,V=false,R=false,Oe=0,ue=true,ye=0,Ne.clear(),je(),q=requestAnimationFrame(Ie);}let v=new IntersectionObserver(y=>{y.forEach(H=>{H.isIntersecting&&!(ne&&R)?Me():!H.isIntersecting&&!ne&&!R&&(cancelAnimationFrame(q),clearTimeout(Fe),ue=false);});},{root:ve??null,threshold:O,rootMargin:C}),F;function me(){clearTimeout(F),F=setTimeout(()=>{_.forEach((y,H)=>{k[H]=_e(y),y.style.strokeDasharray=`${k[H]}`;});},150);}return window.addEventListener("resize",me),window.addEventListener("orientationchange",me),G>0?setTimeout(()=>v.observe(e),G):v.observe(e),{destroy(){cancelAnimationFrame(q),clearTimeout(Fe),v.disconnect(),window.removeEventListener("resize",me),window.removeEventListener("orientationchange",me),clearTimeout(F);},replay(){Oe=0,Me();},pause(){Y||!ue||(Y=true,b=performance.now()-a,cancelAnimationFrame(q));},resume(){Y&&(Y=false,ue=true,a=performance.now()-b,q=requestAnimationFrame(Ie));},seek(y){let H=Math.min(1,Math.max(0,y));ye=H,Y=true,b=H*s,a=performance.now()-b,cancelAnimationFrame(q),De(b);},getProgress(){return ye},refresh(){clearTimeout(F),_.forEach((y,H)=>{k[H]=_e(y),y.style.strokeDasharray=`${k[H]}`;});}}}if(ie)return tt(Gt());mt();function Ye(){if(!Ae||Y)return;let s=performance.now(),a=et();if(!Re&&I===false&&a===at){q=requestAnimationFrame(Ye);return}Re=false,at=a;let b=u;if(I!==false){let v=s-lt,F=v>0?Math.abs(a-(Ge<0?a:Ge))/v:0;b=u*Math.max(.2,1+F*(typeof I=="number"?I:1)*.04);}Ge=a,lt=s;let ue=X?te===-1||a>=te?"forward":"reverse":P;te=a;let De=ge-f,Ie=true,Me=De===0?0:(a-f)/De;if(isNaN(ze)||(ze<=0&&Me>0?L?.():ze>0&&Me<=0&&fe?.(),ze<1&&Me>=1?S?.():ze>=1&&Me<1&&N?.()),ze=Me,Q){let v=Se(K(a,f,ge,b));ne&&!X&&(he=Math.max(he,v),v=he),ye=v,e.style.setProperty("--scroll-draw-progress",String(v));let F=ue==="reverse"?1-v:v;e.style.clipPath=ke(F),d?.(v),!V&&K(a,f,ge,b)>0&&(V=true,x?.()),v>=1&&!R?(R=true,g?.(),Oe<(E==="infinite"?1/0:E??0)&&(Oe++,Fe=setTimeout(()=>{he=-1,V=false,R=false,e.style.clipPath=ke(0);},se))):v<1&&!ne&&(R=false),q=requestAnimationFrame(Ye);return}if(_.forEach((v,F)=>{let me=F*z*De,y=Se(K(a,f+me,ge+me,b));ne&&!X&&(he=Math.max(he,y),y=he),ye=y,v.style.strokeDashoffset=ue==="reverse"?`${k[F]*y}`:`${k[F]*(1-y)}`,m&&(v.style.opacity=ue==="reverse"?`${1-y}`:`${y}`),Ee&&le?v.style.stroke=Ve(Ee,le,y):le&&(v.style.stroke=le),ce!==null&&j!==null?v.style.strokeWidth=`${ce+(j-ce)*y}`:j!==null&&(v.style.strokeWidth=`${j}`),pe!==null&&Z!==null?v.style.fillOpacity=`${pe+(Z-pe)*y}`:Z!==null&&(v.style.fillOpacity=`${Z}`),D&&v.tagName.toLowerCase()==="path"&&i[F]&&v.setAttribute("d",st(i[F],D,y)),F===0&&(d?.(y),e.style.setProperty("--scroll-draw-progress",String(y))),y<1&&(Ie=false);}),w){let v=Se(K(a,f,ge,b));for(let F in w){let me=parseFloat(F);v>=me&&!Ne.has(me)&&(Ne.add(me),w[F]?.());}}!V&&K(a,f,ge,b)>0&&(V=true,x?.()),Ie&&!R?(R=true,g?.(),Oe<(E==="infinite"?1/0:E??0)&&(Oe++,Fe=setTimeout(()=>{he=-1,V=false,R=false,Ne.clear(),je(),Re=true;},se))):!Ie&&!ne&&(R=false),q=requestAnimationFrame(Ye);}let rt=false;function Ue(){rt||(rt=true,q=requestAnimationFrame(function(){Ye();}));}function Xe(){rt=false,cancelAnimationFrame(q);}let nt=new IntersectionObserver(s=>{s.forEach(a=>{Ae=a.isIntersecting,Ae&&!Y?(Re=true,Ue()):Xe();});},{root:ve??null,threshold:O,rootMargin:C});function pt(){_.forEach((s,a)=>{k[a]=_e(s),s.style.strokeDasharray=`${k[a]}`;}),mt(),Re=true;}let Qe;function qe(){clearTimeout(Qe),Qe=setTimeout(pt,150);}window.addEventListener("resize",qe),window.addEventListener("orientationchange",qe);let We;return typeof ResizeObserver<"u"&&(We=new ResizeObserver(()=>qe()),We.observe(document.body),We.observe(document.documentElement),We.observe(e)),G>0?setTimeout(()=>nt.observe(e),G):nt.observe(e),tt({destroy(){cancelAnimationFrame(q),clearTimeout(Fe),Xe(),nt.disconnect(),We?.disconnect(),window.removeEventListener("resize",qe),window.removeEventListener("orientationchange",qe),clearTimeout(Qe),it();},replay(){he=-1,te=-1,Ge=-1,V=false,R=false,Oe=0,Y=false,ye=0,Ne.clear(),clearTimeout(Fe),je(),Re=true,Ae&&Ue();},pause(){Y=true,Xe();},resume(){Y&&(Y=false,Re=true,Ae&&Ue());},seek(s){let a=Math.min(1,Math.max(0,s));ye=a,he=a,Y=true,Xe(),qt(a,P),Re=true;},getProgress(){return ye},refresh(){clearTimeout(Qe),pt(),Ae&&!Y&&Ue();}},()=>({tStart:f,tEnd:ge}))}function sr(e){return e.startsWith("#")||e.startsWith("rgb")||e.startsWith("hsl")}function Mt(e){let r=[],n=/([\w]+)\(([^)]*)\)/g,t;for(;(t=n.exec(e))!==null;){let l=[],o=[],c=t[2].trim();if(c)for(let u of c.split(/[\s,]+/)){let m=u.match(/^([-+]?[\d.eE]+)(.*)$/);l.push(m?parseFloat(m[1]):0),o.push(m?m[2]:"");}r.push({fn:t[1],nums:l,units:o});}return r}function or(e,r,n){let t=Mt(e),l=Mt(r);return t.length===0||t.length!==l.length?n<1?e:r:t.map((o,c)=>{let u=l[c];return o.fn!==u.fn||o.nums.length!==u.nums.length?n<1?`${o.fn}(${o.nums.map((m,p)=>`${m}${o.units[p]}`).join(", ")})`:`${u.fn}(${u.nums.map((m,p)=>`${m}${u.units[p]}`).join(", ")})`:`${o.fn}(${o.nums.map((m,p)=>`${m+(u.nums[p]-m)*n}${o.units[p]}`).join(", ")})`}).join(" ")}function Lt(e,r,n){if(typeof e=="number"&&typeof r=="number")return String(e+(r-e)*n);let t=String(e),l=String(r);if(sr(t))return Ve(t,l,n);if(t.includes("("))return or(t,l,n);let o=t.match(/^([-+]?[\d.]+)(.*)$/),c=l.match(/^([-+]?[\d.]+)(.*)$/);if(o&&c){let u=parseFloat(o[1]),m=parseFloat(c[1]);return `${u+(m-u)*n}${o[2]||c[2]}`}return n<1?t:l}function ir(e){return e.replace(/([A-Z])/g,r=>`-${r.toLowerCase()}`)}var ar=new Set(["opacity","transform","background-color","color","filter","scale","translate","rotate"]),lr=0,Pt="--scroll-draw-progress";function cr(){return typeof CSS<"u"&&typeof CSS.supports=="function"&&CSS.supports("animation-timeline: view()")}function $t(e,r){let n={destroy:()=>{},replay:()=>{},pause:()=>{},resume:()=>{},seek:()=>{},getProgress:()=>0};if(typeof window>"u")return n;let{props:t,trigger:l={},easing:o="ease-out",speed:c=1,once:u=false,axis:m="y",scrollContainer:p,native:T=true,velocityScale:z=false,respectReducedMotion:P=true,triggerElement:ne,onProgress:$e,onComplete:B,onEnter:J,onLeave:X,onEnterBack:G,onLeaveBack:A}=r,$=P&&window.matchMedia("(prefers-reduced-motion: reduce)").matches,M=typeof o=="function"?o:re[o]??re["ease-out"],w=de(l.start??"top bottom"),I=de(l.end??"bottom top"),O=ne??e,C=typeof p=="string"?document.querySelector(p):p??null,E=Object.entries(t).map(([i,f])=>({prop:ir(i),from:Array.isArray(f)?f[0]:"",to:Array.isArray(f)?f[1]:f}));function se(){let i=window.getComputedStyle(e);for(let f of E)f.from===""&&(f.from=i.getPropertyValue(f.prop).trim()||"0");}function D(){for(let i of E)e.style.setProperty(i.prop,String(i.to));}let oe=new Map;for(let i of [...E.map(f=>f.prop),Pt])oe.set(i,e.style.getPropertyValue(i));function ie(){for(let[i,f]of oe)f?e.style.setProperty(i,f):e.style.removeProperty(i);}if($)return D(),B?.(),{...n,destroy:ie,getProgress:()=>1};se();let ee=typeof o=="string"?Ke(o):null;function ae(){if(!T||!cr()||!ee||m!=="y"||C||O!==e||u||c!==1||$e||B||J||X||G||A||z!==false||(l.start??"top bottom").trim()!=="top bottom"||(l.end??"bottom top").trim()!=="bottom top")return false;for(let i of E)if(!ar.has(i.prop))return false;return true}function d(){let i=`ssd-a-${++lr}`,f=E.map(te=>`${te.prop}:${te.from}`).join(";"),ge=E.map(te=>`${te.prop}:${te.to}`).join(";"),R=document.createElement("style");R.setAttribute("data-ssd-animate",""),R.textContent=`@keyframes ${i}{from{${f}}to{${ge}}}.${i}{animation-name:${i};animation-duration:auto;animation-timing-function:${ee};animation-fill-mode:both;animation-timeline:view();animation-range:cover 0% cover 100%;}`,document.head.appendChild(R),e.classList.add(i);let V=()=>m==="x"?window.scrollX:window.scrollY,q=()=>m==="x"?window.innerWidth:window.innerHeight,Ae=()=>{let te=e.getBoundingClientRect();return xe({top:te.top,height:te.height},V(),q(),w,I)};Le(e,{type:"animate",getProgress:()=>he.getProgress(),getTrigger:Ae});let he={destroy(){e.classList.remove(i),R.remove(),e.style.animationPlayState="",ie(),Pe(e);},replay(){e.classList.remove(i),e.offsetWidth,e.classList.add(i);},pause(){e.style.animationPlayState="paused";},resume(){e.style.animationPlayState="";},seek(te){let Y=Math.min(1,Math.max(0,te));e.classList.remove(i);for(let ye of E)e.style.setProperty(ye.prop,Lt(ye.from,ye.to,Y));},getProgress(){let{tStart:te,tEnd:Y}=Ae();return M(K(V(),te,Y,c))}};return he}if(ae())return d();let x=0,g=0,L=0,S=false,N=false,fe=-1,Q=0,Se=false,Ce=NaN,He=-1,ve=0,Ee=()=>C?m==="x"?C.scrollLeft:C.scrollTop:m==="x"?window.scrollX:window.scrollY,le=()=>C?m==="x"?C.clientWidth:C.clientHeight:m==="x"?window.innerWidth:window.innerHeight;function ce(){let i=Ze(O,C,m),f=xe(i,i.scroll,le(),w,I);x=f.tStart,g=f.tEnd;}function j(i){e.style.setProperty(Pt,String(i));for(let f of E)e.style.setProperty(f.prop,Lt(f.from,f.to,i));$e?.(i);}function pe(i){if(isNaN(Ce)){Ce=i;return}Ce<=0&&i>0?J?.():Ce>0&&i<=0&&A?.(),Ce<1&&i>=1?X?.():Ce>=1&&i<1&&G?.(),Ce=i;}function Z(){if(!S||N)return;let i=performance.now(),f=Ee(),ge=c;if(z!==false){let q=i-ve,Ae=q>0?Math.abs(f-(He<0?f:He))/q:0;ge=c*Math.max(.2,1+Ae*(typeof z=="number"?z:1)*.04);}He=f,ve=i;let R=g===x?0:(f-x)/(g-x);pe(R);let V=M(K(f,x,g,ge));u&&(fe=Math.max(fe,V),V=fe),Q=V,j(V),V>=1&&!Se?(Se=true,B?.()):V<1&&!u&&(Se=false),L=requestAnimationFrame(Z);}ce(),g===x&&we("scrollAnimate: the trigger window has zero length (start and end resolve to the same scroll position), so this element will never animate. If the target is inside a position:sticky stage, measure the trigger from the container that holds the scroll room via `triggerElement`.",e);{let i=M(K(Ee(),x,g,c));u&&i>0&&(fe=i),Q=i,j(i);}let ke=new IntersectionObserver(i=>{i.forEach(f=>{S=f.isIntersecting,S&&!N?L=requestAnimationFrame(Z):cancelAnimationFrame(L);});},{root:C??null}),_;function k(){clearTimeout(_),_=setTimeout(ce,150);}return window.addEventListener("resize",k),window.addEventListener("orientationchange",k),ke.observe(e),Le(e,{type:"animate",getProgress:()=>Q,getTrigger:()=>({tStart:x,tEnd:g})}),{destroy(){cancelAnimationFrame(L),ke.disconnect(),window.removeEventListener("resize",k),window.removeEventListener("orientationchange",k),clearTimeout(_),ie(),Pe(e);},replay(){fe=-1,Se=false,Q=0,N=false,j(0);},pause(){N=true,cancelAnimationFrame(L);},resume(){N&&(N=false,S&&(L=requestAnimationFrame(Z)));},seek(i){let f=Math.min(1,Math.max(0,i));Q=f,fe=f,N=true,cancelAnimationFrame(L),j(f);},getProgress(){return Q}}}var ot={destroy:()=>{},replay:()=>{},pause:()=>{},resume:()=>{},seek:()=>{},getProgress:()=>0};function Ct(e,r){if(typeof window>"u")return ot;let n=typeof e=="string"?document.querySelector(e):e;if(!n)return we("scrollCounter: element not found:",e),ot;let t=n,{from:l=0,to:o,format:c,easing:u="ease-out",trigger:m={},once:p=true,decimals:T,onComplete:z}=r,P=T!==void 0?d=>d.toFixed(T):c??(d=>String(Math.round(d))),ne=typeof u=="function"?u:re[u]??re["ease-out"],$e=de(m.start??"top 80%"),B=de(m.end??"top 20%");if(window.matchMedia("(prefers-reduced-motion: reduce)").matches)return t.textContent=P(o),z?.(),ot;let X=0,G=0,A=0,$=false,M=false,w=-1,I=0,O=false,C=()=>window.scrollY,E=()=>window.innerHeight;function se(){let d=t.getBoundingClientRect(),x=xe({top:d.top,height:d.height},C(),E(),$e,B);X=x.tStart,G=x.tEnd;}function D(d){t.textContent=P(l+(o-l)*d),t.style.setProperty("--scroll-draw-progress",String(d));}function oe(){if(!$||M)return;let d=ne(K(C(),X,G,1));p&&(w=Math.max(w,d),d=w),I=d,D(d),d>=1&&!O?(O=true,z?.()):d<1&&!p&&(O=false),A=requestAnimationFrame(oe);}se();{let d=ne(K(C(),X,G,1));p&&d>0&&(w=d),I=d,D(d);}let ie=new IntersectionObserver(d=>{d.forEach(x=>{$=x.isIntersecting,$&&!M?A=requestAnimationFrame(oe):cancelAnimationFrame(A);});}),ee;function ae(){clearTimeout(ee),ee=setTimeout(se,150);}return window.addEventListener("resize",ae),window.addEventListener("orientationchange",ae),ie.observe(t),Le(t,{type:"counter",getProgress:()=>I,getTrigger:()=>({tStart:X,tEnd:G})}),{destroy(){cancelAnimationFrame(A),ie.disconnect(),window.removeEventListener("resize",ae),window.removeEventListener("orientationchange",ae),clearTimeout(ee),Pe(t);},replay(){w=-1,O=false,I=0,M=false,D(0);},pause(){M=true,cancelAnimationFrame(A);},resume(){M&&(M=false,$&&(A=requestAnimationFrame(oe)));},seek(d){let x=Math.min(1,Math.max(0,d));I=x,w=x,M=true,cancelAnimationFrame(A),D(x);},getProgress(){return I}}}var kt={destroy:()=>{},replay:()=>{},pause:()=>{},resume:()=>{},seek:()=>{},getProgress:()=>0};function It(e,r={}){if(typeof window>"u")return kt;let n=typeof e=="string"?document.querySelector(e):e;if(!n||n.tagName.toLowerCase()!=="video")return we("scrollVideo: <video> element not found:",e),kt;let t=n,{trigger:l={},easing:o="linear",once:c=false,axis:u="y",preload:m="auto",onReady:p,onComplete:T,onProgress:z}=r,P=window.matchMedia("(prefers-reduced-motion: reduce)").matches,ne=typeof o=="function"?o:re[o]??re.linear,$e=de(l.start??"top top"),B=de(l.end??"bottom top");t.pause(),t.hasAttribute("preload")||(t.preload=m);let J=r.from??0,X=r.to,G=0,A=0,$=0,M=false,w=false,I=-1,O=0,C=false,E=false,se=()=>u==="x"?window.scrollX:window.scrollY,D=()=>u==="x"?window.innerWidth:window.innerHeight;function oe(){let S=t.getBoundingClientRect(),N=u==="x"?S.left:S.top,fe=u==="x"?S.width:S.height,Q=xe({top:N,height:fe},se(),D(),$e,B);G=Q.tStart,A=Q.tEnd;}let ie=NaN;function ee(S){if(!E)return;let N=X??t.duration??0,fe=J+(N-J)*S;fe!==ie&&(ie=fe,t.currentTime=fe),t.style.setProperty("--scroll-draw-progress",String(S)),z?.(S);}function ae(){if(!M||w||!E)return;let S=ne(K(se(),G,A,1));c&&(I=Math.max(I,S),S=I),O=S,ee(S),S>=1&&!C?(C=true,T?.()):S<1&&!c&&(C=false),$=requestAnimationFrame(ae);}function d(){if(E=true,X===void 0&&(X=t.duration),P){ee(1),p?.();return}oe(),p?.(),M&&!w&&($=requestAnimationFrame(ae));}t.readyState>=1?d():t.addEventListener("loadedmetadata",d,{once:true}),E||oe();let x=new IntersectionObserver(S=>{S.forEach(N=>{M=N.isIntersecting,M&&!w&&E?$=requestAnimationFrame(ae):cancelAnimationFrame($);});}),g;function L(){clearTimeout(g),g=setTimeout(oe,150);}return window.addEventListener("resize",L),window.addEventListener("orientationchange",L),x.observe(t),Le(t,{type:"video",getProgress:()=>O,getTrigger:()=>({tStart:G,tEnd:A})}),{destroy(){cancelAnimationFrame($),x.disconnect(),t.removeEventListener("loadedmetadata",d),window.removeEventListener("resize",L),window.removeEventListener("orientationchange",L),clearTimeout(g),Pe(t);},replay(){I=-1,C=false,O=0,w=false,ie=NaN,ee(0);},pause(){w=true,cancelAnimationFrame($);},resume(){w&&(w=false,M&&E&&($=requestAnimationFrame(ae)));},seek(S){let N=Math.min(1,Math.max(0,S));O=N,I=N,w=true,cancelAnimationFrame($),ie=NaN,ee(N);},getProgress(){return O}}}function Ft(e){let r=e.textContent??"";return e.textContent="",r.split(/(\s+)/).filter(Boolean).map(n=>{let t=document.createElement("span");return t.setAttribute("aria-hidden","true"),/^\s+$/.test(n)?(t.textContent=n,t.style.whiteSpace="pre"):(t.textContent=n,t.style.display="inline-block"),e.appendChild(t),/^\s+$/.test(n)?null:t}).filter(n=>n!==null)}function ur(e){let r=e.textContent??"";return e.textContent="",r.split("").map(n=>{let t=document.createElement("span");return t.setAttribute("aria-hidden","true"),t.textContent=n,n===" "?t.style.whiteSpace="pre":t.style.display="inline-block",e.appendChild(t),n===" "?null:t}).filter(n=>n!==null)}function Ot(e){let r=Ft(e),n=new Map;for(let o of r){let c=o.offsetTop;n.has(c)||n.set(c,[]),n.get(c).push(o);}let t=[],l=Array.from(n.keys()).sort((o,c)=>o-c);for(let o of l){let c=n.get(o),u=document.createElement("span");u.setAttribute("aria-hidden","true"),u.style.display="inline-block",c.forEach((m,p)=>{let T=m.nextElementSibling;u.appendChild(m),p<c.length-1&&T&&T.style.whiteSpace==="pre"&&u.appendChild(T);}),t.push(u);}return e.textContent="",t.forEach((o,c)=>{e.appendChild(o),c<t.length-1&&e.appendChild(document.createTextNode(" "));}),t}function mr(e,r,n,t){if(n<=1||t===0)return e;let l=(n-1)*t,o=r*t,c=o+(1-l);return c<=o?e>=o?1:0:Math.min(1,Math.max(0,(e-o)/(c-o)))}function fr(e,r){let n=[];if(r?.y!==void 0&&n.push(`translateY(${r.y*(1-e)}px)`),r?.x!==void 0&&n.push(`translateX(${r.x*(1-e)}px)`),r?.rotate!==void 0&&n.push(`rotate(${r.rotate*(1-e)}deg)`),r?.scale!==void 0){let t=r.scale+(1-r.scale)*e;n.push(`scale(${t})`);}return n.join(" ")||""}var Dt={destroy:()=>{},replay:()=>{},pause:()=>{},resume:()=>{},seek:()=>{},getProgress:()=>0};function Nt(e,r={}){if(typeof window>"u")return Dt;let n=typeof e=="string"?document.querySelector(e):e;if(!n)return we("scrollText: element not found:",e),Dt;let t=n,{split:l="words",stagger:o=.04,easing:c="ease-out",from:u={opacity:0,y:24},trigger:m={},once:p=true,onComplete:T}=r,z=window.matchMedia("(prefers-reduced-motion: reduce)").matches,P=typeof c=="function"?c:re[c]??re["ease-out"],ne=de(m.start??"top 85%"),$e=de(m.end??"top 40%"),B=t.innerHTML;t.setAttribute("aria-label",t.textContent??"");let J;l==="chars"?J=ur(t):l==="lines"?J=Ot(t):J=Ft(t);let X=J.length;function G(g,L){u?.opacity!==void 0&&(g.style.opacity=String(u.opacity+(1-u.opacity)*L));let S=fr(L,u);S&&(g.style.transform=S);}function A(g){t.style.setProperty("--scroll-draw-progress",String(g)),J.forEach((L,S)=>{let N=P(mr(g,S,X,o));G(L,N);});}if(z)return A(1),T?.(),{destroy(){t.innerHTML=B,t.removeAttribute("aria-label");},replay:()=>{},pause:()=>{},resume:()=>{},seek:()=>{},getProgress:()=>1};A(0);let $=0,M=0,w=0,I=false,O=false,C=-1,E=0,se=false,D=()=>window.scrollY,oe=()=>window.innerHeight;function ie(){let g=t.getBoundingClientRect(),L=xe({top:g.top,height:g.height},D(),oe(),ne,$e);$=L.tStart,M=L.tEnd;}function ee(){if(!I||O)return;let g=K(D(),$,M,1);p&&(C=Math.max(C,g),g=C),E=g,A(g),g>=1&&!se?(se=true,T?.()):g<1&&!p&&(se=false),w=requestAnimationFrame(ee);}ie();let ae=new IntersectionObserver(g=>{g.forEach(L=>{I=L.isIntersecting,I&&!O?w=requestAnimationFrame(ee):cancelAnimationFrame(w);});}),d;function x(){clearTimeout(d),d=setTimeout(()=>{if(l==="lines"){let g=E;t.innerHTML=B,t.setAttribute("aria-label",t.textContent??""),J=Ot(t),A(g);}ie();},150);}return window.addEventListener("resize",x),window.addEventListener("orientationchange",x),ae.observe(t),Le(t,{type:"text",getProgress:()=>E,getTrigger:()=>({tStart:$,tEnd:M})}),{destroy(){cancelAnimationFrame(w),ae.disconnect(),window.removeEventListener("resize",x),window.removeEventListener("orientationchange",x),clearTimeout(d),t.innerHTML=B,t.removeAttribute("aria-label"),Pe(t);},replay(){C=-1,se=false,E=0,O=false,A(0);},pause(){O=true,cancelAnimationFrame(w);},resume(){O&&(O=false,I&&(w=requestAnimationFrame(ee)));},seek(g){let L=Math.min(1,Math.max(0,g));E=L,C=L,O=true,cancelAnimationFrame(w),A(L);},getProgress(){return E}}}var Rt=class{constructor(){this.instance=null;}init(r,n={}){return this.destroy(),this.instance=At(r,n),this}replay(){return this.instance?.replay(),this}pause(){return this.instance?.pause(),this}resume(){return this.instance?.resume(),this}seek(r){return this.instance?.seek(r),this}getProgress(){return this.instance?.getProgress()??0}destroy(){return this.instance?.destroy(),this.instance=null,this}},Ht=class{constructor(){this.instance=null;}init(r,n){return this.destroy(),this.instance=$t(r,n),this}replay(){return this.instance?.replay(),this}pause(){return this.instance?.pause(),this}resume(){return this.instance?.resume(),this}seek(r){return this.instance?.seek(r),this}getProgress(){return this.instance?.getProgress()??0}destroy(){return this.instance?.destroy(),this.instance=null,this}},zt=class{constructor(){this.instance=null;}init(r,n){return this.destroy(),this.instance=Ct(r,n),this}replay(){return this.instance?.replay(),this}pause(){return this.instance?.pause(),this}resume(){return this.instance?.resume(),this}seek(r){return this.instance?.seek(r),this}getProgress(){return this.instance?.getProgress()??0}destroy(){return this.instance?.destroy(),this.instance=null,this}},_t=class{constructor(){this.instance=null;}init(r,n={}){return this.destroy(),this.instance=It(r,n),this}replay(){return this.instance?.replay(),this}pause(){return this.instance?.pause(),this}resume(){return this.instance?.resume(),this}seek(r){return this.instance?.seek(r),this}getProgress(){return this.instance?.getProgress()??0}destroy(){return this.instance?.destroy(),this.instance=null,this}},Vt=class{constructor(){this.instance=null;}init(r,n={}){return this.destroy(),this.instance=Nt(r,n),this}replay(){return this.instance?.replay(),this}pause(){return this.instance?.pause(),this}resume(){return this.instance?.resume(),this}seek(r){return this.instance?.seek(r),this}getProgress(){return this.instance?.getProgress()??0}destroy(){return this.instance?.destroy(),this.instance=null,this}};exports.ScrollAnimateRef=Ht;exports.ScrollCounterRef=zt;exports.ScrollDrawRef=Rt;exports.ScrollTextRef=Vt;exports.ScrollVideoRef=_t;
|
|
3
|
+
<div style="position:absolute;${m?`left:${u}px;top:0;bottom:0;border-left:2px dashed #ef4444;`:`top:${u}px;left:0;right:0;border-top:2px dashed #ef4444;`}padding:2px 6px;color:#ef4444;background:rgba(0,0,0,.6)">\u25A0 end</div>`;}return document.body.appendChild(t),window.addEventListener("scroll",l,{passive:true}),l(),{el:t,destroy(){window.removeEventListener("scroll",l),t.remove();}}}var Tt=/[-+]?(?:\d*\.)?\d+(?:[eE][-+]?\d+)?/g,xt=/[MmLlHhVvCcSsQqTtAaZz]/g;function nr(e,r,n){if(!Be)return;let t=(e.match(xt)??[]).join("").toUpperCase(),l=(r.match(xt)??[]).join("").toUpperCase(),o=(e.match(Tt)??[]).length,c=(r.match(Tt)??[]).length;if(t!==l){we(`morphTo: command sequence differs (${t||"\u2205"} \u2192 ${l||"\u2205"}). Interpolation is coordinate-for-coordinate, so the result will not reach the target shape. Redraw both paths with the same commands.`,n);return}o!==c&&we(`morphTo: coordinate count differs (${o} \u2192 ${c}). Extra coordinates are ignored and missing ones hold their start value, so the result will not reach the target shape.`,n);}function st(e,r,n){let t=(r.match(/[-+]?(?:\d*\.)?\d+(?:[eE][-+]?\d+)?/g)??[]).map(Number),l=0;return e.replace(/[-+]?(?:\d*\.)?\d+(?:[eE][-+]?\d+)?/g,o=>{let c=parseFloat(o),u=t[l++]??c;return String(+(c+(u-c)*n).toFixed(4))})}function At(e,r={}){if(typeof window>"u")return {destroy:()=>{},replay:()=>{},pause:()=>{},resume:()=>{},seek:()=>{},getProgress:()=>0};let{preset:n,...t}=r,l=n?{...yt[n],...t}:t,o=window.matchMedia("(prefers-reduced-motion: reduce)").matches,{selector:c="path, polyline, line, polygon, rect, circle",speed:u=1,fade:m=false,easing:p="linear",trigger:T={},stagger:z=0,direction:A="forward",once:ne=false,debug:$e=false,axis:B="y",scrollContainer:J,autoReverse:X=false,delay:G=0,strokeColor:M,strokeWidth:$,fillOpacity:L,waypoints:w,velocityScale:I=false,threshold:O=0,rootMargin:C="0px",repeat:E=0,repeatDelay:se=0,morphTo:D,clip:oe,autoplay:ie=false,duration:ee=1e3,native:ae=true,onProgress:d,onStart:x,onComplete:g,onEnter:P,onLeave:S,onEnterBack:N,onLeaveBack:fe}=l,Q=oe===true?"left":typeof oe=="string"?oe:false,Se=typeof p=="function"?p:re[p]??re.linear,Ce=de(T.start??"top bottom"),He=de(T.end??"bottom top"),ve=typeof J=="string"?document.querySelector(J):J??null,Ee=Array.isArray(M)?M[0]:null,le=Array.isArray(M)?M[1]:typeof M=="string"?M:null,ce=Array.isArray($)?$[0]:null,j=Array.isArray($)?$[1]:typeof $=="number"?$:null,pe=Array.isArray(L)?L[0]:null,Z=Array.isArray(L)?L[1]:typeof L=="number"?L:null;function ke(s){let a=s*100;switch(Q){case "right":return `inset(0 0 0 ${100-a}%)`;case "top":return `inset(0 0 ${100-a}% 0)`;case "bottom":return `inset(${100-a}% 0 0 0)`;case "center":return `circle(${s*150}% at 50% 50%)`;default:return `inset(0 ${100-a}% 0 0)`}}let _=Q?[]:Array.from(e.querySelectorAll(c)),k=[],i=[],f=0,ge=0,R=false,V=false,q=0,Ae=false,he=-1,te=-1,Y=false,ye=0,Oe=0,Fe,Je=null;function it(){Je?.destroy(),Je=null;}let Ne=new Set,at=NaN,Re=true,Ge=-1,lt=performance.now(),ze=NaN;function et(){return ve?B==="x"?ve.scrollLeft:ve.scrollTop:B==="x"?window.scrollX:window.scrollY}function ct(){return ve?B==="x"?ve.clientWidth:ve.clientHeight:B==="x"?window.innerWidth:window.innerHeight}function ut(){let s=Ze(e,ve,B);return xe(s,s.scroll,ct(),Ce,He)}function mt(){(({tStart:f,tEnd:ge}=ut())),$e&&Be&&(it(),Je=rr(f,ge,B));}function tt(s,a=ut){Le(e,{type:"draw",getProgress:()=>s.getProgress(),getTrigger:a});let b=s.destroy;return s.destroy=()=>{b.call(s),Pe(e);},s}function qt(s,a){if(e.style.setProperty("--scroll-draw-progress",String(s)),Q){let b=a==="reverse"?1-s:s;e.style.clipPath=ke(b);return}_.forEach((b,ue)=>{b.style.strokeDashoffset=a==="reverse"?`${k[ue]*s}`:`${k[ue]*(1-s)}`,m&&(b.style.opacity=a==="reverse"?`${1-s}`:`${s}`),Ee&&le?b.style.stroke=Ve(Ee,le,s):le&&(b.style.stroke=le),ce!==null&&j!==null?b.style.strokeWidth=`${ce+(j-ce)*s}`:j!==null&&(b.style.strokeWidth=`${j}`),pe!==null&&Z!==null?b.style.fillOpacity=`${pe+(Z-pe)*s}`:Z!==null&&(b.style.fillOpacity=`${Z}`),D&&b.tagName.toLowerCase()==="path"&&i[ue]&&b.setAttribute("d",st(i[ue],D,s));});}function je(){if(e.style.setProperty("--scroll-draw-progress","0"),Q){e.style.clipPath=ke(0);return}_.forEach((s,a)=>{s.style.strokeDasharray=`${k[a]}`,s.style.strokeDashoffset=A==="reverse"?"0":`${k[a]}`,m?s.style.opacity=A==="reverse"?"1":"0":s.style.opacity="",Ee&&(s.style.stroke=Ee),ce!==null&&(s.style.strokeWidth=`${ce}`),pe!==null&&(s.style.fillOpacity=`${pe}`),D&&s.tagName.toLowerCase()==="path"&&i[a]&&s.setAttribute("d",i[a]);});}if(_.forEach(s=>{tr(s);let a=_e(s);k.push(a);let b=s.tagName.toLowerCase()==="path";b?i.push(s.getAttribute("d")??""):i.push(""),D&&(b?nr(i[i.length-1],D,s):we(`morphTo only applies to <path> elements \u2014 ignored on <${s.tagName}>.`,s)),o?(s.style.strokeDasharray=`${a}`,s.style.strokeDashoffset=A==="reverse"?`${a}`:"0",m&&(s.style.opacity="1"),le&&(s.style.stroke=le),j!==null&&(s.style.strokeWidth=`${j}`),Z!==null&&(s.style.fillOpacity=`${Z}`),D&&s.tagName.toLowerCase()==="path"&&s.setAttribute("d",D)):(s.style.strokeDasharray=`${a}`,s.style.strokeDashoffset=A==="reverse"?"0":`${a}`,m?s.style.opacity=A==="reverse"?"1":"0":s.style.opacity="",Ee&&(s.style.stroke=Ee),ce!==null&&(s.style.strokeWidth=`${ce}`),pe!==null&&(s.style.fillOpacity=`${pe}`));}),Q){if(o)return e.style.clipPath=ke(1),g?.(),{destroy:()=>{},replay:()=>{},pause:()=>{},resume:()=>{},seek:()=>{},getProgress:()=>1};e.style.clipPath=ke(0);}else if(o)return g?.(),{destroy:()=>{},replay:()=>{},pause:()=>{},resume:()=>{},seek:()=>{},getProgress:()=>1};let ft=typeof p=="string"?Ke(p):null;function Wt(){return !(ae===false||!er()||!_.length||!ft||Q||B!=="y"||ve||u!==1||z!==0||ne||X||I!==false||D||w||E||G>0||d||x||g||P||S||N||fe||M!=null||$!=null||L!=null||(T.start??"top bottom").trim()!=="top bottom"||(T.end??"bottom top").trim()!=="bottom top")}function Bt(){let s=++Jt,a=`svg-scroll-draw-${s}`,b=`svg-scroll-draw-host-${s}`,ue=`--svg-scroll-draw-${s}`,De=A==="reverse"?"0":"var(--ssd-len)",Ie=A==="reverse"?"var(--ssd-len)":"0",Me=`stroke-dashoffset:${De};`,v=`stroke-dashoffset:${Ie};`;m&&(Me+=`opacity:${A==="reverse"?1:0};`,v+=`opacity:${A==="reverse"?0:1};`);let F=document.createElement("style");F.setAttribute("data-svg-scroll-draw",""),F.textContent=`@keyframes ${a}{from{${Me}}to{${v}}}.${b}{view-timeline-name:${ue};view-timeline-axis:block;}.${a}{animation-name:${a};animation-duration:auto;animation-timing-function:${ft};animation-fill-mode:both;animation-timeline:${ue};animation-range:cover 0% cover 100%;}`,document.head.appendChild(F),e.classList.add(b);function me(h,U){h.style.setProperty("--ssd-len",String(k[U])),h.style.strokeDasharray=`${k[U]}`,h.style.strokeDashoffset="",h.style.opacity="",h.style.animationPlayState="",h.classList.add(a);}_.forEach(me);let y=false,H=-1;function W(){if(H>=0)return H;let h=e.getBoundingClientRect(),{tStart:U,tEnd:Te}=xe({top:h.top,height:h.height},et(),ct(),Ce,He);return Se(K(et(),U,Te,u))}return {destroy(){e.classList.remove(b),_.forEach(h=>{h.classList.remove(a),h.style.removeProperty("--ssd-len"),h.style.animationPlayState="";}),F.remove();},replay(){y=false,H=-1,_.forEach(me);},pause(){y=true,_.forEach(h=>{h.style.animationPlayState="paused";});},resume(){y&&(y=false,_.forEach(h=>{h.style.animationPlayState="running";}));},seek(h){let U=Math.min(1,Math.max(0,h));H=U,y=true,_.forEach((Te,be)=>{Te.classList.remove(a),Te.style.strokeDashoffset=A==="reverse"?`${k[be]*U}`:`${k[be]*(1-U)}`,m&&(Te.style.opacity=A==="reverse"?`${1-U}`:`${U}`);});},getProgress(){return W()},refresh(){_.forEach((h,U)=>{k[U]=_e(h),h.style.setProperty("--ssd-len",String(k[U])),h.style.strokeDasharray=`${k[U]}`;});}}}if(Wt())return tt(Bt());function Gt(){let s=Math.max(1,ee),a=0,b=0,ue=false;function De(y){let H=true;if(Q){let W=Math.min(1,Math.max(0,y/s)),h=Se(W);ye=h,e.style.setProperty("--scroll-draw-progress",String(h)),e.style.clipPath=ke(A==="reverse"?1-h:h),d?.(h),W<1&&(H=false);}else _.forEach((W,h)=>{let U=h*z*s,Te=Math.min(1,Math.max(0,(y-U)/s)),be=Se(Te);W.style.strokeDashoffset=A==="reverse"?`${k[h]*be}`:`${k[h]*(1-be)}`,m&&(W.style.opacity=A==="reverse"?`${1-be}`:`${be}`),Ee&&le?W.style.stroke=Ve(Ee,le,be):le&&(W.style.stroke=le),ce!==null&&j!==null?W.style.strokeWidth=`${ce+(j-ce)*be}`:j!==null&&(W.style.strokeWidth=`${j}`),pe!==null&&Z!==null?W.style.fillOpacity=`${pe+(Z-pe)*be}`:Z!==null&&(W.style.fillOpacity=`${Z}`),D&&W.tagName.toLowerCase()==="path"&&i[h]&&W.setAttribute("d",st(i[h],D,be)),h===0&&(ye=be,d?.(be),e.style.setProperty("--scroll-draw-progress",String(be))),Te<1&&(H=false);});if(w){let W=Math.min(1,Math.max(0,y/s)),h=Se(W);for(let U in w){let Te=parseFloat(U);h>=Te&&!Ne.has(Te)&&(Ne.add(Te),w[U]?.());}}return H}function Ie(y){if(Y)return;let H=y-a;V||(V=true,x?.());let W=De(H);if(W&&!R){R=true,De(s*(1+Math.max(0,_.length-1)*z)),g?.(),Oe<(E==="infinite"?1/0:E??0)&&(Oe++,Fe=setTimeout(()=>{a=performance.now(),V=false,R=false,Ne.clear(),je(),q=requestAnimationFrame(Ie);},se));return}W||(q=requestAnimationFrame(Ie));}function Me(){cancelAnimationFrame(q),clearTimeout(Fe),a=performance.now(),b=0,Y=false,V=false,R=false,Oe=0,ue=true,ye=0,Ne.clear(),je(),q=requestAnimationFrame(Ie);}let v=new IntersectionObserver(y=>{y.forEach(H=>{H.isIntersecting&&!(ne&&R)?Me():!H.isIntersecting&&!ne&&!R&&(cancelAnimationFrame(q),clearTimeout(Fe),ue=false);});},{root:ve??null,threshold:O,rootMargin:C}),F;function me(){clearTimeout(F),F=setTimeout(()=>{_.forEach((y,H)=>{k[H]=_e(y),y.style.strokeDasharray=`${k[H]}`;});},150);}return window.addEventListener("resize",me),window.addEventListener("orientationchange",me),G>0?setTimeout(()=>v.observe(e),G):v.observe(e),{destroy(){cancelAnimationFrame(q),clearTimeout(Fe),v.disconnect(),window.removeEventListener("resize",me),window.removeEventListener("orientationchange",me),clearTimeout(F);},replay(){Oe=0,Me();},pause(){Y||!ue||(Y=true,b=performance.now()-a,cancelAnimationFrame(q));},resume(){Y&&(Y=false,ue=true,a=performance.now()-b,q=requestAnimationFrame(Ie));},seek(y){let H=Math.min(1,Math.max(0,y));ye=H,Y=true,b=H*s,a=performance.now()-b,cancelAnimationFrame(q),De(b);},getProgress(){return ye},refresh(){clearTimeout(F),_.forEach((y,H)=>{k[H]=_e(y),y.style.strokeDasharray=`${k[H]}`;});}}}if(ie)return tt(Gt());mt();function Ye(){if(!Ae||Y)return;let s=performance.now(),a=et();if(!Re&&I===false&&a===at){q=requestAnimationFrame(Ye);return}Re=false,at=a;let b=u;if(I!==false){let v=s-lt,F=v>0?Math.abs(a-(Ge<0?a:Ge))/v:0;b=u*Math.max(.2,1+F*(typeof I=="number"?I:1)*.04);}Ge=a,lt=s;let ue=X?te===-1||a>=te?"forward":"reverse":A;te=a;let De=ge-f,Ie=true,Me=De===0?0:(a-f)/De;if(isNaN(ze)||(ze<=0&&Me>0?P?.():ze>0&&Me<=0&&fe?.(),ze<1&&Me>=1?S?.():ze>=1&&Me<1&&N?.()),ze=Me,Q){let v=Se(K(a,f,ge,b));ne&&!X&&(he=Math.max(he,v),v=he),ye=v,e.style.setProperty("--scroll-draw-progress",String(v));let F=ue==="reverse"?1-v:v;e.style.clipPath=ke(F),d?.(v),!V&&K(a,f,ge,b)>0&&(V=true,x?.()),v>=1&&!R?(R=true,g?.(),Oe<(E==="infinite"?1/0:E??0)&&(Oe++,Fe=setTimeout(()=>{he=-1,V=false,R=false,e.style.clipPath=ke(0);},se))):v<1&&!ne&&(R=false),q=requestAnimationFrame(Ye);return}if(_.forEach((v,F)=>{let me=F*z*De,y=Se(K(a,f+me,ge+me,b));ne&&!X&&(he=Math.max(he,y),y=he),ye=y,v.style.strokeDashoffset=ue==="reverse"?`${k[F]*y}`:`${k[F]*(1-y)}`,m&&(v.style.opacity=ue==="reverse"?`${1-y}`:`${y}`),Ee&&le?v.style.stroke=Ve(Ee,le,y):le&&(v.style.stroke=le),ce!==null&&j!==null?v.style.strokeWidth=`${ce+(j-ce)*y}`:j!==null&&(v.style.strokeWidth=`${j}`),pe!==null&&Z!==null?v.style.fillOpacity=`${pe+(Z-pe)*y}`:Z!==null&&(v.style.fillOpacity=`${Z}`),D&&v.tagName.toLowerCase()==="path"&&i[F]&&v.setAttribute("d",st(i[F],D,y)),F===0&&(d?.(y),e.style.setProperty("--scroll-draw-progress",String(y))),y<1&&(Ie=false);}),w){let v=Se(K(a,f,ge,b));for(let F in w){let me=parseFloat(F);v>=me&&!Ne.has(me)&&(Ne.add(me),w[F]?.());}}!V&&K(a,f,ge,b)>0&&(V=true,x?.()),Ie&&!R?(R=true,g?.(),Oe<(E==="infinite"?1/0:E??0)&&(Oe++,Fe=setTimeout(()=>{he=-1,V=false,R=false,Ne.clear(),je(),Re=true;},se))):!Ie&&!ne&&(R=false),q=requestAnimationFrame(Ye);}let rt=false;function Ue(){rt||(rt=true,q=requestAnimationFrame(function(){Ye();}));}function Xe(){rt=false,cancelAnimationFrame(q);}let nt=new IntersectionObserver(s=>{s.forEach(a=>{Ae=a.isIntersecting,Ae&&!Y?(Re=true,Ue()):Xe();});},{root:ve??null,threshold:O,rootMargin:C});function pt(){_.forEach((s,a)=>{k[a]=_e(s),s.style.strokeDasharray=`${k[a]}`;}),mt(),Re=true;}let Qe;function qe(){clearTimeout(Qe),Qe=setTimeout(pt,150);}window.addEventListener("resize",qe),window.addEventListener("orientationchange",qe);let We;return typeof ResizeObserver<"u"&&(We=new ResizeObserver(()=>qe()),We.observe(document.body),We.observe(document.documentElement),We.observe(e)),G>0?setTimeout(()=>nt.observe(e),G):nt.observe(e),tt({destroy(){cancelAnimationFrame(q),clearTimeout(Fe),Xe(),nt.disconnect(),We?.disconnect(),window.removeEventListener("resize",qe),window.removeEventListener("orientationchange",qe),clearTimeout(Qe),it();},replay(){he=-1,te=-1,Ge=-1,V=false,R=false,Oe=0,Y=false,ye=0,Ne.clear(),clearTimeout(Fe),je(),Re=true,Ae&&Ue();},pause(){Y=true,Xe();},resume(){Y&&(Y=false,Re=true,Ae&&Ue());},seek(s){let a=Math.min(1,Math.max(0,s));ye=a,he=a,Y=true,Xe(),qt(a,A),Re=true;},getProgress(){return ye},refresh(){clearTimeout(Qe),pt(),Ae&&!Y&&Ue();}},()=>({tStart:f,tEnd:ge}))}function sr(e){return e.startsWith("#")||e.startsWith("rgb")||e.startsWith("hsl")}function Mt(e){let r=[],n=/([\w]+)\(([^)]*)\)/g,t;for(;(t=n.exec(e))!==null;){let l=[],o=[],c=t[2].trim();if(c)for(let u of c.split(/[\s,]+/)){let m=u.match(/^([-+]?[\d.eE]+)(.*)$/);l.push(m?parseFloat(m[1]):0),o.push(m?m[2]:"");}r.push({fn:t[1],nums:l,units:o});}return r}function or(e,r,n){let t=Mt(e),l=Mt(r);return t.length===0||t.length!==l.length?n<1?e:r:t.map((o,c)=>{let u=l[c];return o.fn!==u.fn||o.nums.length!==u.nums.length?n<1?`${o.fn}(${o.nums.map((m,p)=>`${m}${o.units[p]}`).join(", ")})`:`${u.fn}(${u.nums.map((m,p)=>`${m}${u.units[p]}`).join(", ")})`:`${o.fn}(${o.nums.map((m,p)=>`${m+(u.nums[p]-m)*n}${o.units[p]}`).join(", ")})`}).join(" ")}function Lt(e,r,n){if(typeof e=="number"&&typeof r=="number")return String(e+(r-e)*n);let t=String(e),l=String(r);if(sr(t))return Ve(t,l,n);if(t.includes("("))return or(t,l,n);let o=t.match(/^([-+]?[\d.]+)(.*)$/),c=l.match(/^([-+]?[\d.]+)(.*)$/);if(o&&c){let u=parseFloat(o[1]),m=parseFloat(c[1]);return `${u+(m-u)*n}${o[2]||c[2]}`}return n<1?t:l}function ir(e){return e.replace(/([A-Z])/g,r=>`-${r.toLowerCase()}`)}var ar=new Set(["opacity","transform","background-color","color","filter","scale","translate","rotate"]),lr=0,Pt="--scroll-draw-progress";function cr(){return typeof CSS<"u"&&typeof CSS.supports=="function"&&CSS.supports("animation-timeline: view()")}function $t(e,r){let n={destroy:()=>{},replay:()=>{},pause:()=>{},resume:()=>{},seek:()=>{},getProgress:()=>0};if(typeof window>"u")return n;let{props:t,trigger:l={},easing:o="ease-out",speed:c=1,once:u=false,axis:m="y",scrollContainer:p,native:T=true,velocityScale:z=false,respectReducedMotion:A=true,triggerElement:ne,onProgress:$e,onComplete:B,onEnter:J,onLeave:X,onEnterBack:G,onLeaveBack:M}=r,$=A&&window.matchMedia("(prefers-reduced-motion: reduce)").matches,L=typeof o=="function"?o:re[o]??re["ease-out"],w=de(l.start??"top bottom"),I=de(l.end??"bottom top"),O=ne??e,C=typeof p=="string"?document.querySelector(p):p??null,E=Object.entries(t).map(([i,f])=>({prop:ir(i),from:Array.isArray(f)?f[0]:"",to:Array.isArray(f)?f[1]:f}));function se(){let i=window.getComputedStyle(e);for(let f of E)f.from===""&&(f.from=i.getPropertyValue(f.prop).trim()||"0");}function D(){for(let i of E)e.style.setProperty(i.prop,String(i.to));}let oe=new Map;for(let i of [...E.map(f=>f.prop),Pt])oe.set(i,e.style.getPropertyValue(i));function ie(){for(let[i,f]of oe)f?e.style.setProperty(i,f):e.style.removeProperty(i);}if($)return D(),B?.(),{...n,destroy:ie,getProgress:()=>1};se();let ee=typeof o=="string"?Ke(o):null;function ae(){if(!T||!cr()||!ee||m!=="y"||C||O!==e||u||c!==1||$e||B||J||X||G||M||z!==false||(l.start??"top bottom").trim()!=="top bottom"||(l.end??"bottom top").trim()!=="bottom top")return false;for(let i of E)if(!ar.has(i.prop))return false;return true}function d(){let i=`ssd-a-${++lr}`,f=E.map(te=>`${te.prop}:${te.from}`).join(";"),ge=E.map(te=>`${te.prop}:${te.to}`).join(";"),R=document.createElement("style");R.setAttribute("data-ssd-animate",""),R.textContent=`@keyframes ${i}{from{${f}}to{${ge}}}.${i}{animation-name:${i};animation-duration:auto;animation-timing-function:${ee};animation-fill-mode:both;animation-timeline:view();animation-range:cover 0% cover 100%;}`,document.head.appendChild(R),e.classList.add(i);let V=()=>m==="x"?window.scrollX:window.scrollY,q=()=>m==="x"?window.innerWidth:window.innerHeight,Ae=()=>{let te=e.getBoundingClientRect();return xe({top:te.top,height:te.height},V(),q(),w,I)};Le(e,{type:"animate",getProgress:()=>he.getProgress(),getTrigger:Ae});let he={destroy(){e.classList.remove(i),R.remove(),e.style.animationPlayState="",ie(),Pe(e);},replay(){e.classList.remove(i),e.offsetWidth,e.classList.add(i);},pause(){e.style.animationPlayState="paused";},resume(){e.style.animationPlayState="";},seek(te){let Y=Math.min(1,Math.max(0,te));e.classList.remove(i);for(let ye of E)e.style.setProperty(ye.prop,Lt(ye.from,ye.to,Y));},getProgress(){let{tStart:te,tEnd:Y}=Ae();return L(K(V(),te,Y,c))}};return he}if(ae())return d();let x=0,g=0,P=0,S=false,N=false,fe=-1,Q=0,Se=false,Ce=NaN,He=-1,ve=0,Ee=()=>C?m==="x"?C.scrollLeft:C.scrollTop:m==="x"?window.scrollX:window.scrollY,le=()=>C?m==="x"?C.clientWidth:C.clientHeight:m==="x"?window.innerWidth:window.innerHeight;function ce(){let i=Ze(O,C,m),f=xe(i,i.scroll,le(),w,I);x=f.tStart,g=f.tEnd;}function j(i){e.style.setProperty(Pt,String(i));for(let f of E)e.style.setProperty(f.prop,Lt(f.from,f.to,i));$e?.(i);}function pe(i){if(isNaN(Ce)){Ce=i;return}Ce<=0&&i>0?J?.():Ce>0&&i<=0&&M?.(),Ce<1&&i>=1?X?.():Ce>=1&&i<1&&G?.(),Ce=i;}function Z(){if(!S||N)return;let i=performance.now(),f=Ee(),ge=c;if(z!==false){let q=i-ve,Ae=q>0?Math.abs(f-(He<0?f:He))/q:0;ge=c*Math.max(.2,1+Ae*(typeof z=="number"?z:1)*.04);}He=f,ve=i;let R=g===x?0:(f-x)/(g-x);pe(R);let V=L(K(f,x,g,ge));u&&(fe=Math.max(fe,V),V=fe),Q=V,j(V),V>=1&&!Se?(Se=true,B?.()):V<1&&!u&&(Se=false),P=requestAnimationFrame(Z);}ce(),g===x&&we("scrollAnimate: the trigger window has zero length (start and end resolve to the same scroll position), so this element will never animate. If the target is inside a position:sticky stage, measure the trigger from the container that holds the scroll room via `triggerElement`.",e);{let i=L(K(Ee(),x,g,c));u&&i>0&&(fe=i),Q=i,j(i);}let ke=new IntersectionObserver(i=>{i.forEach(f=>{S=f.isIntersecting,S&&!N?P=requestAnimationFrame(Z):cancelAnimationFrame(P);});},{root:C??null}),_;function k(){clearTimeout(_),_=setTimeout(ce,150);}return window.addEventListener("resize",k),window.addEventListener("orientationchange",k),ke.observe(e),Le(e,{type:"animate",getProgress:()=>Q,getTrigger:()=>({tStart:x,tEnd:g})}),{destroy(){cancelAnimationFrame(P),ke.disconnect(),window.removeEventListener("resize",k),window.removeEventListener("orientationchange",k),clearTimeout(_),ie(),Pe(e);},replay(){fe=-1,Se=false,Q=0,N=false,j(0);},pause(){N=true,cancelAnimationFrame(P);},resume(){N&&(N=false,S&&(P=requestAnimationFrame(Z)));},seek(i){let f=Math.min(1,Math.max(0,i));Q=f,fe=f,N=true,cancelAnimationFrame(P),j(f);},getProgress(){return Q}}}var ot={destroy:()=>{},replay:()=>{},pause:()=>{},resume:()=>{},seek:()=>{},getProgress:()=>0};function Ct(e,r){if(typeof window>"u")return ot;let n=typeof e=="string"?document.querySelector(e):e;if(!n)return we("scrollCounter: element not found:",e),ot;let t=n,{from:l=0,to:o,format:c,easing:u="ease-out",trigger:m={},once:p=true,decimals:T,onComplete:z}=r,A=T!==void 0?d=>d.toFixed(T):c??(d=>String(Math.round(d))),ne=typeof u=="function"?u:re[u]??re["ease-out"],$e=de(m.start??"top 80%"),B=de(m.end??"top 20%");if(window.matchMedia("(prefers-reduced-motion: reduce)").matches)return t.textContent=A(o),z?.(),ot;let X=0,G=0,M=0,$=false,L=false,w=-1,I=0,O=false,C=()=>window.scrollY,E=()=>window.innerHeight;function se(){let d=t.getBoundingClientRect(),x=xe({top:d.top,height:d.height},C(),E(),$e,B);X=x.tStart,G=x.tEnd;}function D(d){t.textContent=A(l+(o-l)*d),t.style.setProperty("--scroll-draw-progress",String(d));}function oe(){if(!$||L)return;let d=ne(K(C(),X,G,1));p&&(w=Math.max(w,d),d=w),I=d,D(d),d>=1&&!O?(O=true,z?.()):d<1&&!p&&(O=false),M=requestAnimationFrame(oe);}se();{let d=ne(K(C(),X,G,1));p&&d>0&&(w=d),I=d,D(d);}let ie=new IntersectionObserver(d=>{d.forEach(x=>{$=x.isIntersecting,$&&!L?M=requestAnimationFrame(oe):cancelAnimationFrame(M);});}),ee;function ae(){clearTimeout(ee),ee=setTimeout(se,150);}return window.addEventListener("resize",ae),window.addEventListener("orientationchange",ae),ie.observe(t),Le(t,{type:"counter",getProgress:()=>I,getTrigger:()=>({tStart:X,tEnd:G})}),{destroy(){cancelAnimationFrame(M),ie.disconnect(),window.removeEventListener("resize",ae),window.removeEventListener("orientationchange",ae),clearTimeout(ee),Pe(t);},replay(){w=-1,O=false,I=0,L=false,D(0);},pause(){L=true,cancelAnimationFrame(M);},resume(){L&&(L=false,$&&(M=requestAnimationFrame(oe)));},seek(d){let x=Math.min(1,Math.max(0,d));I=x,w=x,L=true,cancelAnimationFrame(M),D(x);},getProgress(){return I}}}var kt={destroy:()=>{},replay:()=>{},pause:()=>{},resume:()=>{},seek:()=>{},getProgress:()=>0};function It(e,r={}){if(typeof window>"u")return kt;let n=typeof e=="string"?document.querySelector(e):e;if(!n||n.tagName.toLowerCase()!=="video")return we("scrollVideo: <video> element not found:",e),kt;let t=n,{trigger:l={},easing:o="linear",once:c=false,axis:u="y",preload:m="auto",onReady:p,onComplete:T,onProgress:z}=r,A=window.matchMedia("(prefers-reduced-motion: reduce)").matches,ne=typeof o=="function"?o:re[o]??re.linear,$e=de(l.start??"top top"),B=de(l.end??"bottom top");t.pause(),t.hasAttribute("preload")||(t.preload=m);let J=r.from??0,X=r.to,G=0,M=0,$=0,L=false,w=false,I=-1,O=0,C=false,E=false,se=()=>u==="x"?window.scrollX:window.scrollY,D=()=>u==="x"?window.innerWidth:window.innerHeight;function oe(){let S=t.getBoundingClientRect(),N=u==="x"?S.left:S.top,fe=u==="x"?S.width:S.height,Q=xe({top:N,height:fe},se(),D(),$e,B);G=Q.tStart,M=Q.tEnd;}let ie=NaN;function ee(S){if(!E)return;let N=X??t.duration??0,fe=J+(N-J)*S;fe!==ie&&(ie=fe,t.currentTime=fe),t.style.setProperty("--scroll-draw-progress",String(S)),z?.(S);}function ae(){if(!L||w||!E||A)return;let S=ne(K(se(),G,M,1));c&&(I=Math.max(I,S),S=I),O=S,ee(S),S>=1&&!C?(C=true,T?.()):S<1&&!c&&(C=false),$=requestAnimationFrame(ae);}function d(){if(E=true,X===void 0&&(X=t.duration),A){ee(1),p?.();return}oe(),p?.(),L&&!w&&($=requestAnimationFrame(ae));}t.readyState>=1?d():t.addEventListener("loadedmetadata",d,{once:true}),E||oe();let x=new IntersectionObserver(S=>{S.forEach(N=>{L=N.isIntersecting,L&&!w&&E?$=requestAnimationFrame(ae):cancelAnimationFrame($);});}),g;function P(){clearTimeout(g),g=setTimeout(oe,150);}return window.addEventListener("resize",P),window.addEventListener("orientationchange",P),x.observe(t),Le(t,{type:"video",getProgress:()=>O,getTrigger:()=>({tStart:G,tEnd:M})}),{destroy(){cancelAnimationFrame($),x.disconnect(),t.removeEventListener("loadedmetadata",d),window.removeEventListener("resize",P),window.removeEventListener("orientationchange",P),clearTimeout(g),Pe(t);},replay(){I=-1,C=false,O=0,w=false,ie=NaN,ee(0);},pause(){w=true,cancelAnimationFrame($);},resume(){w&&(w=false,L&&E&&($=requestAnimationFrame(ae)));},seek(S){let N=Math.min(1,Math.max(0,S));O=N,I=N,w=true,cancelAnimationFrame($),ie=NaN,ee(N);},getProgress(){return O}}}function Ft(e){let r=e.textContent??"";return e.textContent="",r.split(/(\s+)/).filter(Boolean).map(n=>{let t=document.createElement("span");return t.setAttribute("aria-hidden","true"),/^\s+$/.test(n)?(t.textContent=n,t.style.whiteSpace="pre"):(t.textContent=n,t.style.display="inline-block"),e.appendChild(t),/^\s+$/.test(n)?null:t}).filter(n=>n!==null)}function ur(e){let r=e.textContent??"";return e.textContent="",r.split("").map(n=>{let t=document.createElement("span");return t.setAttribute("aria-hidden","true"),t.textContent=n,n===" "?t.style.whiteSpace="pre":t.style.display="inline-block",e.appendChild(t),n===" "?null:t}).filter(n=>n!==null)}function Ot(e){let r=Ft(e),n=new Map;for(let o of r){let c=o.offsetTop;n.has(c)||n.set(c,[]),n.get(c).push(o);}let t=[],l=Array.from(n.keys()).sort((o,c)=>o-c);for(let o of l){let c=n.get(o),u=document.createElement("span");u.setAttribute("aria-hidden","true"),u.style.display="inline-block",c.forEach((m,p)=>{let T=m.nextElementSibling;u.appendChild(m),p<c.length-1&&T&&T.style.whiteSpace==="pre"&&u.appendChild(T);}),t.push(u);}return e.textContent="",t.forEach((o,c)=>{e.appendChild(o),c<t.length-1&&e.appendChild(document.createTextNode(" "));}),t}function mr(e,r,n,t){if(n<=1||t===0)return e;let l=(n-1)*t,o=r*t,c=o+(1-l);return c<=o?e>=o?1:0:Math.min(1,Math.max(0,(e-o)/(c-o)))}function fr(e,r){let n=[];if(r?.y!==void 0&&n.push(`translateY(${r.y*(1-e)}px)`),r?.x!==void 0&&n.push(`translateX(${r.x*(1-e)}px)`),r?.rotate!==void 0&&n.push(`rotate(${r.rotate*(1-e)}deg)`),r?.scale!==void 0){let t=r.scale+(1-r.scale)*e;n.push(`scale(${t})`);}return n.join(" ")||""}var Dt={destroy:()=>{},replay:()=>{},pause:()=>{},resume:()=>{},seek:()=>{},getProgress:()=>0};function Nt(e,r={}){if(typeof window>"u")return Dt;let n=typeof e=="string"?document.querySelector(e):e;if(!n)return we("scrollText: element not found:",e),Dt;let t=n,{split:l="words",stagger:o=.04,easing:c="ease-out",from:u={opacity:0,y:24},trigger:m={},once:p=true,onComplete:T}=r,z=window.matchMedia("(prefers-reduced-motion: reduce)").matches,A=typeof c=="function"?c:re[c]??re["ease-out"],ne=de(m.start??"top 85%"),$e=de(m.end??"top 40%"),B=t.innerHTML;t.setAttribute("aria-label",t.textContent??"");let J;l==="chars"?J=ur(t):l==="lines"?J=Ot(t):J=Ft(t);let X=J.length;function G(g,P){u?.opacity!==void 0&&(g.style.opacity=String(u.opacity+(1-u.opacity)*P));let S=fr(P,u);S&&(g.style.transform=S);}function M(g){t.style.setProperty("--scroll-draw-progress",String(g)),J.forEach((P,S)=>{let N=A(mr(g,S,X,o));G(P,N);});}if(z)return M(1),T?.(),{destroy(){t.innerHTML=B,t.removeAttribute("aria-label");},replay:()=>{},pause:()=>{},resume:()=>{},seek:()=>{},getProgress:()=>1};M(0);let $=0,L=0,w=0,I=false,O=false,C=-1,E=0,se=false,D=()=>window.scrollY,oe=()=>window.innerHeight;function ie(){let g=t.getBoundingClientRect(),P=xe({top:g.top,height:g.height},D(),oe(),ne,$e);$=P.tStart,L=P.tEnd;}function ee(){if(!I||O)return;let g=K(D(),$,L,1);p&&(C=Math.max(C,g),g=C),E=g,M(g),g>=1&&!se?(se=true,T?.()):g<1&&!p&&(se=false),w=requestAnimationFrame(ee);}ie();let ae=new IntersectionObserver(g=>{g.forEach(P=>{I=P.isIntersecting,I&&!O?w=requestAnimationFrame(ee):cancelAnimationFrame(w);});}),d;function x(){clearTimeout(d),d=setTimeout(()=>{if(l==="lines"){let g=E;t.innerHTML=B,t.setAttribute("aria-label",t.textContent??""),J=Ot(t),M(g);}ie();},150);}return window.addEventListener("resize",x),window.addEventListener("orientationchange",x),ae.observe(t),Le(t,{type:"text",getProgress:()=>E,getTrigger:()=>({tStart:$,tEnd:L})}),{destroy(){cancelAnimationFrame(w),ae.disconnect(),window.removeEventListener("resize",x),window.removeEventListener("orientationchange",x),clearTimeout(d),t.innerHTML=B,t.removeAttribute("aria-label"),Pe(t);},replay(){C=-1,se=false,E=0,O=false,M(0);},pause(){O=true,cancelAnimationFrame(w);},resume(){O&&(O=false,I&&(w=requestAnimationFrame(ee)));},seek(g){let P=Math.min(1,Math.max(0,g));E=P,C=P,O=true,cancelAnimationFrame(w),M(P);},getProgress(){return E}}}var Rt=class{constructor(){this.instance=null;}init(r,n={}){return this.destroy(),this.instance=At(r,n),this}replay(){return this.instance?.replay(),this}pause(){return this.instance?.pause(),this}resume(){return this.instance?.resume(),this}seek(r){return this.instance?.seek(r),this}getProgress(){return this.instance?.getProgress()??0}destroy(){return this.instance?.destroy(),this.instance=null,this}},Ht=class{constructor(){this.instance=null;}init(r,n){return this.destroy(),this.instance=$t(r,n),this}replay(){return this.instance?.replay(),this}pause(){return this.instance?.pause(),this}resume(){return this.instance?.resume(),this}seek(r){return this.instance?.seek(r),this}getProgress(){return this.instance?.getProgress()??0}destroy(){return this.instance?.destroy(),this.instance=null,this}},zt=class{constructor(){this.instance=null;}init(r,n){return this.destroy(),this.instance=Ct(r,n),this}replay(){return this.instance?.replay(),this}pause(){return this.instance?.pause(),this}resume(){return this.instance?.resume(),this}seek(r){return this.instance?.seek(r),this}getProgress(){return this.instance?.getProgress()??0}destroy(){return this.instance?.destroy(),this.instance=null,this}},_t=class{constructor(){this.instance=null;}init(r,n={}){return this.destroy(),this.instance=It(r,n),this}replay(){return this.instance?.replay(),this}pause(){return this.instance?.pause(),this}resume(){return this.instance?.resume(),this}seek(r){return this.instance?.seek(r),this}getProgress(){return this.instance?.getProgress()??0}destroy(){return this.instance?.destroy(),this.instance=null,this}},Vt=class{constructor(){this.instance=null;}init(r,n={}){return this.destroy(),this.instance=Nt(r,n),this}replay(){return this.instance?.replay(),this}pause(){return this.instance?.pause(),this}resume(){return this.instance?.resume(),this}seek(r){return this.instance?.seek(r),this}getProgress(){return this.instance?.getProgress()??0}destroy(){return this.instance?.destroy(),this.instance=null,this}};exports.ScrollAnimateRef=Ht;exports.ScrollCounterRef=zt;exports.ScrollDrawRef=Rt;exports.ScrollTextRef=Vt;exports.ScrollVideoRef=_t;
|
package/dist/angular/index.mjs
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
function jt({bounces:e=3,decay:r=.5}={}){let n=Math.max(1,Math.round(e)),t=Math.max(.01,Math.min(.99,r)),l=Math.sqrt(t),o=0,c=[];for(let p=0;p<n;p++){let T=Math.pow(l,p);c.push(T),o+=T;}let u=[0],m=0;for(let p=0;p<n;p++)m+=c[p]/o,u.push(m);return p=>{if(p<=0)return 0;if(p>=1)return 1;for(let T=0;T<n;T++)if(p<=u[T+1]){let z=(p-u[T])/(u[T+1]-u[T]);if(T===0)return z*(2-z);let
|
|
1
|
+
function jt({bounces:e=3,decay:r=.5}={}){let n=Math.max(1,Math.round(e)),t=Math.max(.01,Math.min(.99,r)),l=Math.sqrt(t),o=0,c=[];for(let p=0;p<n;p++){let T=Math.pow(l,p);c.push(T),o+=T;}let u=[0],m=0;for(let p=0;p<n;p++)m+=c[p]/o,u.push(m);return p=>{if(p<=0)return 0;if(p>=1)return 1;for(let T=0;T<n;T++)if(p<=u[T+1]){let z=(p-u[T])/(u[T+1]-u[T]);if(T===0)return z*(2-z);let A=1-Math.pow(t,T);return A+(1-A)*(2*z-1)*(2*z-1)}return 1}}function Yt({amplitude:e=1,period:r=.4}={}){let n=Math.max(1,e),t=Math.max(.1,r),l=n<=1?t/4:t/(2*Math.PI)*Math.asin(1/n);return o=>o<=0?0:o>=1?1:n*Math.pow(2,-10*o)*Math.sin((o-l)*(2*Math.PI)/t)+1}var 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:jt(),elastic:Yt()};function de(e="top bottom"){let r=e.trim();if(/^\d+(\.\d+)?%$/.test(r))return {element:"top",viewport:r};let[n="top",t="bottom"]=r.split(/\s+/).filter(Boolean);return {element:n,viewport:t}}function dt(e,r,n,t){switch(t){case "top":return e+n;case "center":return e+n+r/2;case "bottom":return e+n+r;default:return e+n}}function gt(e,r){if(/^\d+(\.\d+)?%$/.test(e))return r*(parseFloat(e)/100);switch(e){case "top":return 0;case "center":return r/2;case "bottom":return r;default:return r}}function _e(e){let r=e.tagName.toLowerCase();if(r==="rect"){let n=parseFloat(e.getAttribute("width")??"0"),t=parseFloat(e.getAttribute("height")??"0");return 2*(n+t)}if(r==="circle"){let n=parseFloat(e.getAttribute("r")??"0");return 2*Math.PI*n}return e.getTotalLength()}function Ut(e,r,n){return Math.min(n,Math.max(r,e))}function K(e,r,n,t){return n===r?0:Ut((e-r)/(n-r)*t,0,1)}function Ze(e,r,n){let t=e.getBoundingClientRect(),l=n==="x"?t.width:t.height;return r?{top:n==="x"?t.left-r.getBoundingClientRect().left+r.scrollLeft:t.top-r.getBoundingClientRect().top+r.scrollTop,height:l,scroll:0}:{top:n==="x"?t.left:t.top,height:l,scroll:n==="x"?window.scrollX:window.scrollY}}function xe(e,r,n,t,l){let o=dt(e.top,e.height,r,t.element)-gt(t.viewport,n),c=dt(e.top,e.height,r,l.element)-gt(l.viewport,n);return {tStart:o,tEnd:c}}function ht(e){let r=/^#([a-f\d])([a-f\d])([a-f\d])$/i.exec(e);if(r)return [parseInt(r[1]+r[1],16),parseInt(r[2]+r[2],16),parseInt(r[3]+r[3],16)];let n=/^#([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(e);if(n)return [parseInt(n[1],16),parseInt(n[2],16),parseInt(n[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 Ve(e,r,n){let t=ht(e),l=ht(r);return !t||!l?e:`rgb(${Math.round(t[0]+(l[0]-t[0])*n)},${Math.round(t[1]+(l[1]-t[1])*n)},${Math.round(t[2]+(l[2]-t[2])*n)})`}var yt={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}};var Be=typeof __SVG_SCROLL_DRAW_DEV__<"u"?__SVG_SCROLL_DRAW_DEV__:typeof process<"u"&&typeof process.env<"u"&&process.env.NODE_ENV!=="production";function we(e,...r){Be&&console.warn(`[svg-scroll-draw] ${e}`,...r);}var Xt="cubic-bezier(0.333333, 0, 0.666667, 0.333333)",Qt="cubic-bezier(0.333333, 0.666667, 0.666667, 1)",bt=33;function Zt(){return typeof CSS<"u"&&typeof CSS.supports=="function"&&CSS.supports("animation-timing-function: linear(0, 1)")}function Kt(e){let r=[];for(let n=0;n<bt;n++){let t=n/(bt-1);r.push(String(Math.round(e(t)*1e5)/1e5));}return `linear(${r.join(",")})`}function Ke(e){switch(e){case "linear":return "linear";case "ease-in":return Xt;case "ease-out":return Qt;case "ease-in-out":return Zt()?Kt(re["ease-in-out"]):null;default:return null}}var wt=Symbol.for("svg-scroll-draw.registry");function vt(){let e=globalThis;return e[wt]||(e[wt]=new Map)}function Le(e,r){vt().set(e,r);}function Pe(e){vt().delete(e);}var Jt=0;function er(){return typeof CSS<"u"&&typeof CSS.supports=="function"&&CSS.supports("animation-timeline: view()")&&CSS.supports("view-timeline-name: --x")}function Et(e,r){let n="";try{n=getComputedStyle(e).getPropertyValue(r).trim();}catch{}return n||(e.getAttribute(r)??"").trim()}var St=new Set(["","none","transparent","rgba(0, 0, 0, 0)"]);function tr(e){if(!Be)return;let r=Et(e,"stroke");if(!r||r==="none"){we("Element has no stroke \u2014 path will not be visible.",e);return}let n=(e.getAttribute("fill")??"").trim();n&&!St.has(n)&&!St.has(Et(e,"fill"))&&we("Element has a fill \u2014 it may obscure the stroke animation.",e);}function rr(e,r,n){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 l(){let o=n==="x"?window.scrollX:window.scrollY,c=e-o,u=r-o,m=n==="x";t.innerHTML=`
|
|
2
2
|
<div style="position:absolute;${m?`left:${c}px;top:0;bottom:0;border-left:2px dashed #22c55e;`:`top:${c}px;left:0;right:0;border-top:2px dashed #22c55e;`}padding:2px 6px;color:#22c55e;background:rgba(0,0,0,.6)">\u25B6 start</div>
|
|
3
|
-
<div style="position:absolute;${m?`left:${u}px;top:0;bottom:0;border-left:2px dashed #ef4444;`:`top:${u}px;left:0;right:0;border-top:2px dashed #ef4444;`}padding:2px 6px;color:#ef4444;background:rgba(0,0,0,.6)">\u25A0 end</div>`;}return document.body.appendChild(t),window.addEventListener("scroll",l,{passive:true}),l(),{el:t,destroy(){window.removeEventListener("scroll",l),t.remove();}}}var Tt=/[-+]?(?:\d*\.)?\d+(?:[eE][-+]?\d+)?/g,xt=/[MmLlHhVvCcSsQqTtAaZz]/g;function nr(e,r,n){if(!Be)return;let t=(e.match(xt)??[]).join("").toUpperCase(),l=(r.match(xt)??[]).join("").toUpperCase(),o=(e.match(Tt)??[]).length,c=(r.match(Tt)??[]).length;if(t!==l){we(`morphTo: command sequence differs (${t||"\u2205"} \u2192 ${l||"\u2205"}). Interpolation is coordinate-for-coordinate, so the result will not reach the target shape. Redraw both paths with the same commands.`,n);return}o!==c&&we(`morphTo: coordinate count differs (${o} \u2192 ${c}). Extra coordinates are ignored and missing ones hold their start value, so the result will not reach the target shape.`,n);}function st(e,r,n){let t=(r.match(/[-+]?(?:\d*\.)?\d+(?:[eE][-+]?\d+)?/g)??[]).map(Number),l=0;return e.replace(/[-+]?(?:\d*\.)?\d+(?:[eE][-+]?\d+)?/g,o=>{let c=parseFloat(o),u=t[l++]??c;return String(+(c+(u-c)*n).toFixed(4))})}function At(e,r={}){if(typeof window>"u")return {destroy:()=>{},replay:()=>{},pause:()=>{},resume:()=>{},seek:()=>{},getProgress:()=>0};let{preset:n,...t}=r,l=n?{...yt[n],...t}:t,o=window.matchMedia("(prefers-reduced-motion: reduce)").matches,{selector:c="path, polyline, line, polygon, rect, circle",speed:u=1,fade:m=false,easing:p="linear",trigger:T={},stagger:z=0,direction:P="forward",once:ne=false,debug:$e=false,axis:B="y",scrollContainer:J,autoReverse:X=false,delay:G=0,strokeColor:A,strokeWidth:$,fillOpacity:M,waypoints:w,velocityScale:I=false,threshold:O=0,rootMargin:C="0px",repeat:E=0,repeatDelay:se=0,morphTo:D,clip:oe,autoplay:ie=false,duration:ee=1e3,native:ae=true,onProgress:d,onStart:x,onComplete:g,onEnter:L,onLeave:S,onEnterBack:N,onLeaveBack:fe}=l,Q=oe===true?"left":typeof oe=="string"?oe:false,Se=typeof p=="function"?p:re[p]??re.linear,Ce=de(T.start??"top bottom"),He=de(T.end??"bottom top"),ve=typeof J=="string"?document.querySelector(J):J??null,Ee=Array.isArray(A)?A[0]:null,le=Array.isArray(A)?A[1]:typeof A=="string"?A:null,ce=Array.isArray($)?$[0]:null,j=Array.isArray($)?$[1]:typeof $=="number"?$:null,pe=Array.isArray(M)?M[0]:null,Z=Array.isArray(M)?M[1]:typeof M=="number"?M:null;function ke(s){let a=s*100;switch(Q){case "right":return `inset(0 0 0 ${100-a}%)`;case "top":return `inset(0 0 ${100-a}% 0)`;case "bottom":return `inset(${100-a}% 0 0 0)`;case "center":return `circle(${s*150}% at 50% 50%)`;default:return `inset(0 ${100-a}% 0 0)`}}let _=Q?[]:Array.from(e.querySelectorAll(c)),k=[],i=[],f=0,ge=0,R=false,V=false,q=0,Ae=false,he=-1,te=-1,Y=false,ye=0,Oe=0,Fe,Je=null;function it(){Je?.destroy(),Je=null;}let Ne=new Set,at=NaN,Re=true,Ge=-1,lt=performance.now(),ze=NaN;function et(){return ve?B==="x"?ve.scrollLeft:ve.scrollTop:B==="x"?window.scrollX:window.scrollY}function ct(){return ve?B==="x"?ve.clientWidth:ve.clientHeight:B==="x"?window.innerWidth:window.innerHeight}function ut(){let s=Ze(e,ve,B);return xe(s,s.scroll,ct(),Ce,He)}function mt(){(({tStart:f,tEnd:ge}=ut())),$e&&Be&&(it(),Je=rr(f,ge,B));}function tt(s,a=ut){Le(e,{type:"draw",getProgress:()=>s.getProgress(),getTrigger:a});let b=s.destroy;return s.destroy=()=>{b.call(s),Pe(e);},s}function qt(s,a){if(e.style.setProperty("--scroll-draw-progress",String(s)),Q){let b=a==="reverse"?1-s:s;e.style.clipPath=ke(b);return}_.forEach((b,ue)=>{b.style.strokeDashoffset=a==="reverse"?`${k[ue]*s}`:`${k[ue]*(1-s)}`,m&&(b.style.opacity=a==="reverse"?`${1-s}`:`${s}`),Ee&&le?b.style.stroke=Ve(Ee,le,s):le&&(b.style.stroke=le),ce!==null&&j!==null?b.style.strokeWidth=`${ce+(j-ce)*s}`:j!==null&&(b.style.strokeWidth=`${j}`),pe!==null&&Z!==null?b.style.fillOpacity=`${pe+(Z-pe)*s}`:Z!==null&&(b.style.fillOpacity=`${Z}`),D&&b.tagName.toLowerCase()==="path"&&i[ue]&&b.setAttribute("d",st(i[ue],D,s));});}function je(){if(e.style.setProperty("--scroll-draw-progress","0"),Q){e.style.clipPath=ke(0);return}_.forEach((s,a)=>{s.style.strokeDasharray=`${k[a]}`,s.style.strokeDashoffset=P==="reverse"?"0":`${k[a]}`,m?s.style.opacity=P==="reverse"?"1":"0":s.style.opacity="",Ee&&(s.style.stroke=Ee),ce!==null&&(s.style.strokeWidth=`${ce}`),pe!==null&&(s.style.fillOpacity=`${pe}`),D&&s.tagName.toLowerCase()==="path"&&i[a]&&s.setAttribute("d",i[a]);});}if(_.forEach(s=>{tr(s);let a=_e(s);k.push(a);let b=s.tagName.toLowerCase()==="path";b?i.push(s.getAttribute("d")??""):i.push(""),D&&(b?nr(i[i.length-1],D,s):we(`morphTo only applies to <path> elements \u2014 ignored on <${s.tagName}>.`,s)),o?(s.style.strokeDasharray=`${a}`,s.style.strokeDashoffset=P==="reverse"?`${a}`:"0",m&&(s.style.opacity="1"),le&&(s.style.stroke=le),j!==null&&(s.style.strokeWidth=`${j}`),Z!==null&&(s.style.fillOpacity=`${Z}`),D&&s.tagName.toLowerCase()==="path"&&s.setAttribute("d",D)):(s.style.strokeDasharray=`${a}`,s.style.strokeDashoffset=P==="reverse"?"0":`${a}`,m?s.style.opacity=P==="reverse"?"1":"0":s.style.opacity="",Ee&&(s.style.stroke=Ee),ce!==null&&(s.style.strokeWidth=`${ce}`),pe!==null&&(s.style.fillOpacity=`${pe}`));}),Q){if(o)return e.style.clipPath=ke(1),g?.(),{destroy:()=>{},replay:()=>{},pause:()=>{},resume:()=>{},seek:()=>{},getProgress:()=>1};e.style.clipPath=ke(0);}else if(o)return g?.(),{destroy:()=>{},replay:()=>{},pause:()=>{},resume:()=>{},seek:()=>{},getProgress:()=>1};let ft=typeof p=="string"?Ke(p):null;function Wt(){return !(ae===false||!er()||!_.length||!ft||Q||B!=="y"||ve||u!==1||z!==0||ne||X||I!==false||D||w||E||G>0||d||x||g||L||S||N||fe||A!=null||$!=null||M!=null||(T.start??"top bottom").trim()!=="top bottom"||(T.end??"bottom top").trim()!=="bottom top")}function Bt(){let s=++Jt,a=`svg-scroll-draw-${s}`,b=`svg-scroll-draw-host-${s}`,ue=`--svg-scroll-draw-${s}`,De=P==="reverse"?"0":"var(--ssd-len)",Ie=P==="reverse"?"var(--ssd-len)":"0",Me=`stroke-dashoffset:${De};`,v=`stroke-dashoffset:${Ie};`;m&&(Me+=`opacity:${P==="reverse"?1:0};`,v+=`opacity:${P==="reverse"?0:1};`);let F=document.createElement("style");F.setAttribute("data-svg-scroll-draw",""),F.textContent=`@keyframes ${a}{from{${Me}}to{${v}}}.${b}{view-timeline-name:${ue};view-timeline-axis:block;}.${a}{animation-name:${a};animation-duration:auto;animation-timing-function:${ft};animation-fill-mode:both;animation-timeline:${ue};animation-range:cover 0% cover 100%;}`,document.head.appendChild(F),e.classList.add(b);function me(h,U){h.style.setProperty("--ssd-len",String(k[U])),h.style.strokeDasharray=`${k[U]}`,h.style.strokeDashoffset="",h.style.opacity="",h.style.animationPlayState="",h.classList.add(a);}_.forEach(me);let y=false,H=-1;function W(){if(H>=0)return H;let h=e.getBoundingClientRect(),{tStart:U,tEnd:Te}=xe({top:h.top,height:h.height},et(),ct(),Ce,He);return Se(K(et(),U,Te,u))}return {destroy(){e.classList.remove(b),_.forEach(h=>{h.classList.remove(a),h.style.removeProperty("--ssd-len"),h.style.animationPlayState="";}),F.remove();},replay(){y=false,H=-1,_.forEach(me);},pause(){y=true,_.forEach(h=>{h.style.animationPlayState="paused";});},resume(){y&&(y=false,_.forEach(h=>{h.style.animationPlayState="running";}));},seek(h){let U=Math.min(1,Math.max(0,h));H=U,y=true,_.forEach((Te,be)=>{Te.classList.remove(a),Te.style.strokeDashoffset=P==="reverse"?`${k[be]*U}`:`${k[be]*(1-U)}`,m&&(Te.style.opacity=P==="reverse"?`${1-U}`:`${U}`);});},getProgress(){return W()},refresh(){_.forEach((h,U)=>{k[U]=_e(h),h.style.setProperty("--ssd-len",String(k[U])),h.style.strokeDasharray=`${k[U]}`;});}}}if(Wt())return tt(Bt());function Gt(){let s=Math.max(1,ee),a=0,b=0,ue=false;function De(y){let H=true;if(Q){let W=Math.min(1,Math.max(0,y/s)),h=Se(W);ye=h,e.style.setProperty("--scroll-draw-progress",String(h)),e.style.clipPath=ke(P==="reverse"?1-h:h),d?.(h),W<1&&(H=false);}else _.forEach((W,h)=>{let U=h*z*s,Te=Math.min(1,Math.max(0,(y-U)/s)),be=Se(Te);W.style.strokeDashoffset=P==="reverse"?`${k[h]*be}`:`${k[h]*(1-be)}`,m&&(W.style.opacity=P==="reverse"?`${1-be}`:`${be}`),Ee&&le?W.style.stroke=Ve(Ee,le,be):le&&(W.style.stroke=le),ce!==null&&j!==null?W.style.strokeWidth=`${ce+(j-ce)*be}`:j!==null&&(W.style.strokeWidth=`${j}`),pe!==null&&Z!==null?W.style.fillOpacity=`${pe+(Z-pe)*be}`:Z!==null&&(W.style.fillOpacity=`${Z}`),D&&W.tagName.toLowerCase()==="path"&&i[h]&&W.setAttribute("d",st(i[h],D,be)),h===0&&(ye=be,d?.(be),e.style.setProperty("--scroll-draw-progress",String(be))),Te<1&&(H=false);});if(w){let W=Math.min(1,Math.max(0,y/s)),h=Se(W);for(let U in w){let Te=parseFloat(U);h>=Te&&!Ne.has(Te)&&(Ne.add(Te),w[U]?.());}}return H}function Ie(y){if(Y)return;let H=y-a;V||(V=true,x?.());let W=De(H);if(W&&!R){R=true,De(s*(1+Math.max(0,_.length-1)*z)),g?.(),Oe<(E==="infinite"?1/0:E??0)&&(Oe++,Fe=setTimeout(()=>{a=performance.now(),V=false,R=false,Ne.clear(),je(),q=requestAnimationFrame(Ie);},se));return}W||(q=requestAnimationFrame(Ie));}function Me(){cancelAnimationFrame(q),clearTimeout(Fe),a=performance.now(),b=0,Y=false,V=false,R=false,Oe=0,ue=true,ye=0,Ne.clear(),je(),q=requestAnimationFrame(Ie);}let v=new IntersectionObserver(y=>{y.forEach(H=>{H.isIntersecting&&!(ne&&R)?Me():!H.isIntersecting&&!ne&&!R&&(cancelAnimationFrame(q),clearTimeout(Fe),ue=false);});},{root:ve??null,threshold:O,rootMargin:C}),F;function me(){clearTimeout(F),F=setTimeout(()=>{_.forEach((y,H)=>{k[H]=_e(y),y.style.strokeDasharray=`${k[H]}`;});},150);}return window.addEventListener("resize",me),window.addEventListener("orientationchange",me),G>0?setTimeout(()=>v.observe(e),G):v.observe(e),{destroy(){cancelAnimationFrame(q),clearTimeout(Fe),v.disconnect(),window.removeEventListener("resize",me),window.removeEventListener("orientationchange",me),clearTimeout(F);},replay(){Oe=0,Me();},pause(){Y||!ue||(Y=true,b=performance.now()-a,cancelAnimationFrame(q));},resume(){Y&&(Y=false,ue=true,a=performance.now()-b,q=requestAnimationFrame(Ie));},seek(y){let H=Math.min(1,Math.max(0,y));ye=H,Y=true,b=H*s,a=performance.now()-b,cancelAnimationFrame(q),De(b);},getProgress(){return ye},refresh(){clearTimeout(F),_.forEach((y,H)=>{k[H]=_e(y),y.style.strokeDasharray=`${k[H]}`;});}}}if(ie)return tt(Gt());mt();function Ye(){if(!Ae||Y)return;let s=performance.now(),a=et();if(!Re&&I===false&&a===at){q=requestAnimationFrame(Ye);return}Re=false,at=a;let b=u;if(I!==false){let v=s-lt,F=v>0?Math.abs(a-(Ge<0?a:Ge))/v:0;b=u*Math.max(.2,1+F*(typeof I=="number"?I:1)*.04);}Ge=a,lt=s;let ue=X?te===-1||a>=te?"forward":"reverse":P;te=a;let De=ge-f,Ie=true,Me=De===0?0:(a-f)/De;if(isNaN(ze)||(ze<=0&&Me>0?L?.():ze>0&&Me<=0&&fe?.(),ze<1&&Me>=1?S?.():ze>=1&&Me<1&&N?.()),ze=Me,Q){let v=Se(K(a,f,ge,b));ne&&!X&&(he=Math.max(he,v),v=he),ye=v,e.style.setProperty("--scroll-draw-progress",String(v));let F=ue==="reverse"?1-v:v;e.style.clipPath=ke(F),d?.(v),!V&&K(a,f,ge,b)>0&&(V=true,x?.()),v>=1&&!R?(R=true,g?.(),Oe<(E==="infinite"?1/0:E??0)&&(Oe++,Fe=setTimeout(()=>{he=-1,V=false,R=false,e.style.clipPath=ke(0);},se))):v<1&&!ne&&(R=false),q=requestAnimationFrame(Ye);return}if(_.forEach((v,F)=>{let me=F*z*De,y=Se(K(a,f+me,ge+me,b));ne&&!X&&(he=Math.max(he,y),y=he),ye=y,v.style.strokeDashoffset=ue==="reverse"?`${k[F]*y}`:`${k[F]*(1-y)}`,m&&(v.style.opacity=ue==="reverse"?`${1-y}`:`${y}`),Ee&&le?v.style.stroke=Ve(Ee,le,y):le&&(v.style.stroke=le),ce!==null&&j!==null?v.style.strokeWidth=`${ce+(j-ce)*y}`:j!==null&&(v.style.strokeWidth=`${j}`),pe!==null&&Z!==null?v.style.fillOpacity=`${pe+(Z-pe)*y}`:Z!==null&&(v.style.fillOpacity=`${Z}`),D&&v.tagName.toLowerCase()==="path"&&i[F]&&v.setAttribute("d",st(i[F],D,y)),F===0&&(d?.(y),e.style.setProperty("--scroll-draw-progress",String(y))),y<1&&(Ie=false);}),w){let v=Se(K(a,f,ge,b));for(let F in w){let me=parseFloat(F);v>=me&&!Ne.has(me)&&(Ne.add(me),w[F]?.());}}!V&&K(a,f,ge,b)>0&&(V=true,x?.()),Ie&&!R?(R=true,g?.(),Oe<(E==="infinite"?1/0:E??0)&&(Oe++,Fe=setTimeout(()=>{he=-1,V=false,R=false,Ne.clear(),je(),Re=true;},se))):!Ie&&!ne&&(R=false),q=requestAnimationFrame(Ye);}let rt=false;function Ue(){rt||(rt=true,q=requestAnimationFrame(function(){Ye();}));}function Xe(){rt=false,cancelAnimationFrame(q);}let nt=new IntersectionObserver(s=>{s.forEach(a=>{Ae=a.isIntersecting,Ae&&!Y?(Re=true,Ue()):Xe();});},{root:ve??null,threshold:O,rootMargin:C});function pt(){_.forEach((s,a)=>{k[a]=_e(s),s.style.strokeDasharray=`${k[a]}`;}),mt(),Re=true;}let Qe;function qe(){clearTimeout(Qe),Qe=setTimeout(pt,150);}window.addEventListener("resize",qe),window.addEventListener("orientationchange",qe);let We;return typeof ResizeObserver<"u"&&(We=new ResizeObserver(()=>qe()),We.observe(document.body),We.observe(document.documentElement),We.observe(e)),G>0?setTimeout(()=>nt.observe(e),G):nt.observe(e),tt({destroy(){cancelAnimationFrame(q),clearTimeout(Fe),Xe(),nt.disconnect(),We?.disconnect(),window.removeEventListener("resize",qe),window.removeEventListener("orientationchange",qe),clearTimeout(Qe),it();},replay(){he=-1,te=-1,Ge=-1,V=false,R=false,Oe=0,Y=false,ye=0,Ne.clear(),clearTimeout(Fe),je(),Re=true,Ae&&Ue();},pause(){Y=true,Xe();},resume(){Y&&(Y=false,Re=true,Ae&&Ue());},seek(s){let a=Math.min(1,Math.max(0,s));ye=a,he=a,Y=true,Xe(),qt(a,P),Re=true;},getProgress(){return ye},refresh(){clearTimeout(Qe),pt(),Ae&&!Y&&Ue();}},()=>({tStart:f,tEnd:ge}))}function sr(e){return e.startsWith("#")||e.startsWith("rgb")||e.startsWith("hsl")}function Mt(e){let r=[],n=/([\w]+)\(([^)]*)\)/g,t;for(;(t=n.exec(e))!==null;){let l=[],o=[],c=t[2].trim();if(c)for(let u of c.split(/[\s,]+/)){let m=u.match(/^([-+]?[\d.eE]+)(.*)$/);l.push(m?parseFloat(m[1]):0),o.push(m?m[2]:"");}r.push({fn:t[1],nums:l,units:o});}return r}function or(e,r,n){let t=Mt(e),l=Mt(r);return t.length===0||t.length!==l.length?n<1?e:r:t.map((o,c)=>{let u=l[c];return o.fn!==u.fn||o.nums.length!==u.nums.length?n<1?`${o.fn}(${o.nums.map((m,p)=>`${m}${o.units[p]}`).join(", ")})`:`${u.fn}(${u.nums.map((m,p)=>`${m}${u.units[p]}`).join(", ")})`:`${o.fn}(${o.nums.map((m,p)=>`${m+(u.nums[p]-m)*n}${o.units[p]}`).join(", ")})`}).join(" ")}function Lt(e,r,n){if(typeof e=="number"&&typeof r=="number")return String(e+(r-e)*n);let t=String(e),l=String(r);if(sr(t))return Ve(t,l,n);if(t.includes("("))return or(t,l,n);let o=t.match(/^([-+]?[\d.]+)(.*)$/),c=l.match(/^([-+]?[\d.]+)(.*)$/);if(o&&c){let u=parseFloat(o[1]),m=parseFloat(c[1]);return `${u+(m-u)*n}${o[2]||c[2]}`}return n<1?t:l}function ir(e){return e.replace(/([A-Z])/g,r=>`-${r.toLowerCase()}`)}var ar=new Set(["opacity","transform","background-color","color","filter","scale","translate","rotate"]),lr=0,Pt="--scroll-draw-progress";function cr(){return typeof CSS<"u"&&typeof CSS.supports=="function"&&CSS.supports("animation-timeline: view()")}function $t(e,r){let n={destroy:()=>{},replay:()=>{},pause:()=>{},resume:()=>{},seek:()=>{},getProgress:()=>0};if(typeof window>"u")return n;let{props:t,trigger:l={},easing:o="ease-out",speed:c=1,once:u=false,axis:m="y",scrollContainer:p,native:T=true,velocityScale:z=false,respectReducedMotion:P=true,triggerElement:ne,onProgress:$e,onComplete:B,onEnter:J,onLeave:X,onEnterBack:G,onLeaveBack:A}=r,$=P&&window.matchMedia("(prefers-reduced-motion: reduce)").matches,M=typeof o=="function"?o:re[o]??re["ease-out"],w=de(l.start??"top bottom"),I=de(l.end??"bottom top"),O=ne??e,C=typeof p=="string"?document.querySelector(p):p??null,E=Object.entries(t).map(([i,f])=>({prop:ir(i),from:Array.isArray(f)?f[0]:"",to:Array.isArray(f)?f[1]:f}));function se(){let i=window.getComputedStyle(e);for(let f of E)f.from===""&&(f.from=i.getPropertyValue(f.prop).trim()||"0");}function D(){for(let i of E)e.style.setProperty(i.prop,String(i.to));}let oe=new Map;for(let i of [...E.map(f=>f.prop),Pt])oe.set(i,e.style.getPropertyValue(i));function ie(){for(let[i,f]of oe)f?e.style.setProperty(i,f):e.style.removeProperty(i);}if($)return D(),B?.(),{...n,destroy:ie,getProgress:()=>1};se();let ee=typeof o=="string"?Ke(o):null;function ae(){if(!T||!cr()||!ee||m!=="y"||C||O!==e||u||c!==1||$e||B||J||X||G||A||z!==false||(l.start??"top bottom").trim()!=="top bottom"||(l.end??"bottom top").trim()!=="bottom top")return false;for(let i of E)if(!ar.has(i.prop))return false;return true}function d(){let i=`ssd-a-${++lr}`,f=E.map(te=>`${te.prop}:${te.from}`).join(";"),ge=E.map(te=>`${te.prop}:${te.to}`).join(";"),R=document.createElement("style");R.setAttribute("data-ssd-animate",""),R.textContent=`@keyframes ${i}{from{${f}}to{${ge}}}.${i}{animation-name:${i};animation-duration:auto;animation-timing-function:${ee};animation-fill-mode:both;animation-timeline:view();animation-range:cover 0% cover 100%;}`,document.head.appendChild(R),e.classList.add(i);let V=()=>m==="x"?window.scrollX:window.scrollY,q=()=>m==="x"?window.innerWidth:window.innerHeight,Ae=()=>{let te=e.getBoundingClientRect();return xe({top:te.top,height:te.height},V(),q(),w,I)};Le(e,{type:"animate",getProgress:()=>he.getProgress(),getTrigger:Ae});let he={destroy(){e.classList.remove(i),R.remove(),e.style.animationPlayState="",ie(),Pe(e);},replay(){e.classList.remove(i),e.offsetWidth,e.classList.add(i);},pause(){e.style.animationPlayState="paused";},resume(){e.style.animationPlayState="";},seek(te){let Y=Math.min(1,Math.max(0,te));e.classList.remove(i);for(let ye of E)e.style.setProperty(ye.prop,Lt(ye.from,ye.to,Y));},getProgress(){let{tStart:te,tEnd:Y}=Ae();return M(K(V(),te,Y,c))}};return he}if(ae())return d();let x=0,g=0,L=0,S=false,N=false,fe=-1,Q=0,Se=false,Ce=NaN,He=-1,ve=0,Ee=()=>C?m==="x"?C.scrollLeft:C.scrollTop:m==="x"?window.scrollX:window.scrollY,le=()=>C?m==="x"?C.clientWidth:C.clientHeight:m==="x"?window.innerWidth:window.innerHeight;function ce(){let i=Ze(O,C,m),f=xe(i,i.scroll,le(),w,I);x=f.tStart,g=f.tEnd;}function j(i){e.style.setProperty(Pt,String(i));for(let f of E)e.style.setProperty(f.prop,Lt(f.from,f.to,i));$e?.(i);}function pe(i){if(isNaN(Ce)){Ce=i;return}Ce<=0&&i>0?J?.():Ce>0&&i<=0&&A?.(),Ce<1&&i>=1?X?.():Ce>=1&&i<1&&G?.(),Ce=i;}function Z(){if(!S||N)return;let i=performance.now(),f=Ee(),ge=c;if(z!==false){let q=i-ve,Ae=q>0?Math.abs(f-(He<0?f:He))/q:0;ge=c*Math.max(.2,1+Ae*(typeof z=="number"?z:1)*.04);}He=f,ve=i;let R=g===x?0:(f-x)/(g-x);pe(R);let V=M(K(f,x,g,ge));u&&(fe=Math.max(fe,V),V=fe),Q=V,j(V),V>=1&&!Se?(Se=true,B?.()):V<1&&!u&&(Se=false),L=requestAnimationFrame(Z);}ce(),g===x&&we("scrollAnimate: the trigger window has zero length (start and end resolve to the same scroll position), so this element will never animate. If the target is inside a position:sticky stage, measure the trigger from the container that holds the scroll room via `triggerElement`.",e);{let i=M(K(Ee(),x,g,c));u&&i>0&&(fe=i),Q=i,j(i);}let ke=new IntersectionObserver(i=>{i.forEach(f=>{S=f.isIntersecting,S&&!N?L=requestAnimationFrame(Z):cancelAnimationFrame(L);});},{root:C??null}),_;function k(){clearTimeout(_),_=setTimeout(ce,150);}return window.addEventListener("resize",k),window.addEventListener("orientationchange",k),ke.observe(e),Le(e,{type:"animate",getProgress:()=>Q,getTrigger:()=>({tStart:x,tEnd:g})}),{destroy(){cancelAnimationFrame(L),ke.disconnect(),window.removeEventListener("resize",k),window.removeEventListener("orientationchange",k),clearTimeout(_),ie(),Pe(e);},replay(){fe=-1,Se=false,Q=0,N=false,j(0);},pause(){N=true,cancelAnimationFrame(L);},resume(){N&&(N=false,S&&(L=requestAnimationFrame(Z)));},seek(i){let f=Math.min(1,Math.max(0,i));Q=f,fe=f,N=true,cancelAnimationFrame(L),j(f);},getProgress(){return Q}}}var ot={destroy:()=>{},replay:()=>{},pause:()=>{},resume:()=>{},seek:()=>{},getProgress:()=>0};function Ct(e,r){if(typeof window>"u")return ot;let n=typeof e=="string"?document.querySelector(e):e;if(!n)return we("scrollCounter: element not found:",e),ot;let t=n,{from:l=0,to:o,format:c,easing:u="ease-out",trigger:m={},once:p=true,decimals:T,onComplete:z}=r,P=T!==void 0?d=>d.toFixed(T):c??(d=>String(Math.round(d))),ne=typeof u=="function"?u:re[u]??re["ease-out"],$e=de(m.start??"top 80%"),B=de(m.end??"top 20%");if(window.matchMedia("(prefers-reduced-motion: reduce)").matches)return t.textContent=P(o),z?.(),ot;let X=0,G=0,A=0,$=false,M=false,w=-1,I=0,O=false,C=()=>window.scrollY,E=()=>window.innerHeight;function se(){let d=t.getBoundingClientRect(),x=xe({top:d.top,height:d.height},C(),E(),$e,B);X=x.tStart,G=x.tEnd;}function D(d){t.textContent=P(l+(o-l)*d),t.style.setProperty("--scroll-draw-progress",String(d));}function oe(){if(!$||M)return;let d=ne(K(C(),X,G,1));p&&(w=Math.max(w,d),d=w),I=d,D(d),d>=1&&!O?(O=true,z?.()):d<1&&!p&&(O=false),A=requestAnimationFrame(oe);}se();{let d=ne(K(C(),X,G,1));p&&d>0&&(w=d),I=d,D(d);}let ie=new IntersectionObserver(d=>{d.forEach(x=>{$=x.isIntersecting,$&&!M?A=requestAnimationFrame(oe):cancelAnimationFrame(A);});}),ee;function ae(){clearTimeout(ee),ee=setTimeout(se,150);}return window.addEventListener("resize",ae),window.addEventListener("orientationchange",ae),ie.observe(t),Le(t,{type:"counter",getProgress:()=>I,getTrigger:()=>({tStart:X,tEnd:G})}),{destroy(){cancelAnimationFrame(A),ie.disconnect(),window.removeEventListener("resize",ae),window.removeEventListener("orientationchange",ae),clearTimeout(ee),Pe(t);},replay(){w=-1,O=false,I=0,M=false,D(0);},pause(){M=true,cancelAnimationFrame(A);},resume(){M&&(M=false,$&&(A=requestAnimationFrame(oe)));},seek(d){let x=Math.min(1,Math.max(0,d));I=x,w=x,M=true,cancelAnimationFrame(A),D(x);},getProgress(){return I}}}var kt={destroy:()=>{},replay:()=>{},pause:()=>{},resume:()=>{},seek:()=>{},getProgress:()=>0};function It(e,r={}){if(typeof window>"u")return kt;let n=typeof e=="string"?document.querySelector(e):e;if(!n||n.tagName.toLowerCase()!=="video")return we("scrollVideo: <video> element not found:",e),kt;let t=n,{trigger:l={},easing:o="linear",once:c=false,axis:u="y",preload:m="auto",onReady:p,onComplete:T,onProgress:z}=r,P=window.matchMedia("(prefers-reduced-motion: reduce)").matches,ne=typeof o=="function"?o:re[o]??re.linear,$e=de(l.start??"top top"),B=de(l.end??"bottom top");t.pause(),t.hasAttribute("preload")||(t.preload=m);let J=r.from??0,X=r.to,G=0,A=0,$=0,M=false,w=false,I=-1,O=0,C=false,E=false,se=()=>u==="x"?window.scrollX:window.scrollY,D=()=>u==="x"?window.innerWidth:window.innerHeight;function oe(){let S=t.getBoundingClientRect(),N=u==="x"?S.left:S.top,fe=u==="x"?S.width:S.height,Q=xe({top:N,height:fe},se(),D(),$e,B);G=Q.tStart,A=Q.tEnd;}let ie=NaN;function ee(S){if(!E)return;let N=X??t.duration??0,fe=J+(N-J)*S;fe!==ie&&(ie=fe,t.currentTime=fe),t.style.setProperty("--scroll-draw-progress",String(S)),z?.(S);}function ae(){if(!M||w||!E)return;let S=ne(K(se(),G,A,1));c&&(I=Math.max(I,S),S=I),O=S,ee(S),S>=1&&!C?(C=true,T?.()):S<1&&!c&&(C=false),$=requestAnimationFrame(ae);}function d(){if(E=true,X===void 0&&(X=t.duration),P){ee(1),p?.();return}oe(),p?.(),M&&!w&&($=requestAnimationFrame(ae));}t.readyState>=1?d():t.addEventListener("loadedmetadata",d,{once:true}),E||oe();let x=new IntersectionObserver(S=>{S.forEach(N=>{M=N.isIntersecting,M&&!w&&E?$=requestAnimationFrame(ae):cancelAnimationFrame($);});}),g;function L(){clearTimeout(g),g=setTimeout(oe,150);}return window.addEventListener("resize",L),window.addEventListener("orientationchange",L),x.observe(t),Le(t,{type:"video",getProgress:()=>O,getTrigger:()=>({tStart:G,tEnd:A})}),{destroy(){cancelAnimationFrame($),x.disconnect(),t.removeEventListener("loadedmetadata",d),window.removeEventListener("resize",L),window.removeEventListener("orientationchange",L),clearTimeout(g),Pe(t);},replay(){I=-1,C=false,O=0,w=false,ie=NaN,ee(0);},pause(){w=true,cancelAnimationFrame($);},resume(){w&&(w=false,M&&E&&($=requestAnimationFrame(ae)));},seek(S){let N=Math.min(1,Math.max(0,S));O=N,I=N,w=true,cancelAnimationFrame($),ie=NaN,ee(N);},getProgress(){return O}}}function Ft(e){let r=e.textContent??"";return e.textContent="",r.split(/(\s+)/).filter(Boolean).map(n=>{let t=document.createElement("span");return t.setAttribute("aria-hidden","true"),/^\s+$/.test(n)?(t.textContent=n,t.style.whiteSpace="pre"):(t.textContent=n,t.style.display="inline-block"),e.appendChild(t),/^\s+$/.test(n)?null:t}).filter(n=>n!==null)}function ur(e){let r=e.textContent??"";return e.textContent="",r.split("").map(n=>{let t=document.createElement("span");return t.setAttribute("aria-hidden","true"),t.textContent=n,n===" "?t.style.whiteSpace="pre":t.style.display="inline-block",e.appendChild(t),n===" "?null:t}).filter(n=>n!==null)}function Ot(e){let r=Ft(e),n=new Map;for(let o of r){let c=o.offsetTop;n.has(c)||n.set(c,[]),n.get(c).push(o);}let t=[],l=Array.from(n.keys()).sort((o,c)=>o-c);for(let o of l){let c=n.get(o),u=document.createElement("span");u.setAttribute("aria-hidden","true"),u.style.display="inline-block",c.forEach((m,p)=>{let T=m.nextElementSibling;u.appendChild(m),p<c.length-1&&T&&T.style.whiteSpace==="pre"&&u.appendChild(T);}),t.push(u);}return e.textContent="",t.forEach((o,c)=>{e.appendChild(o),c<t.length-1&&e.appendChild(document.createTextNode(" "));}),t}function mr(e,r,n,t){if(n<=1||t===0)return e;let l=(n-1)*t,o=r*t,c=o+(1-l);return c<=o?e>=o?1:0:Math.min(1,Math.max(0,(e-o)/(c-o)))}function fr(e,r){let n=[];if(r?.y!==void 0&&n.push(`translateY(${r.y*(1-e)}px)`),r?.x!==void 0&&n.push(`translateX(${r.x*(1-e)}px)`),r?.rotate!==void 0&&n.push(`rotate(${r.rotate*(1-e)}deg)`),r?.scale!==void 0){let t=r.scale+(1-r.scale)*e;n.push(`scale(${t})`);}return n.join(" ")||""}var Dt={destroy:()=>{},replay:()=>{},pause:()=>{},resume:()=>{},seek:()=>{},getProgress:()=>0};function Nt(e,r={}){if(typeof window>"u")return Dt;let n=typeof e=="string"?document.querySelector(e):e;if(!n)return we("scrollText: element not found:",e),Dt;let t=n,{split:l="words",stagger:o=.04,easing:c="ease-out",from:u={opacity:0,y:24},trigger:m={},once:p=true,onComplete:T}=r,z=window.matchMedia("(prefers-reduced-motion: reduce)").matches,P=typeof c=="function"?c:re[c]??re["ease-out"],ne=de(m.start??"top 85%"),$e=de(m.end??"top 40%"),B=t.innerHTML;t.setAttribute("aria-label",t.textContent??"");let J;l==="chars"?J=ur(t):l==="lines"?J=Ot(t):J=Ft(t);let X=J.length;function G(g,L){u?.opacity!==void 0&&(g.style.opacity=String(u.opacity+(1-u.opacity)*L));let S=fr(L,u);S&&(g.style.transform=S);}function A(g){t.style.setProperty("--scroll-draw-progress",String(g)),J.forEach((L,S)=>{let N=P(mr(g,S,X,o));G(L,N);});}if(z)return A(1),T?.(),{destroy(){t.innerHTML=B,t.removeAttribute("aria-label");},replay:()=>{},pause:()=>{},resume:()=>{},seek:()=>{},getProgress:()=>1};A(0);let $=0,M=0,w=0,I=false,O=false,C=-1,E=0,se=false,D=()=>window.scrollY,oe=()=>window.innerHeight;function ie(){let g=t.getBoundingClientRect(),L=xe({top:g.top,height:g.height},D(),oe(),ne,$e);$=L.tStart,M=L.tEnd;}function ee(){if(!I||O)return;let g=K(D(),$,M,1);p&&(C=Math.max(C,g),g=C),E=g,A(g),g>=1&&!se?(se=true,T?.()):g<1&&!p&&(se=false),w=requestAnimationFrame(ee);}ie();let ae=new IntersectionObserver(g=>{g.forEach(L=>{I=L.isIntersecting,I&&!O?w=requestAnimationFrame(ee):cancelAnimationFrame(w);});}),d;function x(){clearTimeout(d),d=setTimeout(()=>{if(l==="lines"){let g=E;t.innerHTML=B,t.setAttribute("aria-label",t.textContent??""),J=Ot(t),A(g);}ie();},150);}return window.addEventListener("resize",x),window.addEventListener("orientationchange",x),ae.observe(t),Le(t,{type:"text",getProgress:()=>E,getTrigger:()=>({tStart:$,tEnd:M})}),{destroy(){cancelAnimationFrame(w),ae.disconnect(),window.removeEventListener("resize",x),window.removeEventListener("orientationchange",x),clearTimeout(d),t.innerHTML=B,t.removeAttribute("aria-label"),Pe(t);},replay(){C=-1,se=false,E=0,O=false,A(0);},pause(){O=true,cancelAnimationFrame(w);},resume(){O&&(O=false,I&&(w=requestAnimationFrame(ee)));},seek(g){let L=Math.min(1,Math.max(0,g));E=L,C=L,O=true,cancelAnimationFrame(w),A(L);},getProgress(){return E}}}var Rt=class{constructor(){this.instance=null;}init(r,n={}){return this.destroy(),this.instance=At(r,n),this}replay(){return this.instance?.replay(),this}pause(){return this.instance?.pause(),this}resume(){return this.instance?.resume(),this}seek(r){return this.instance?.seek(r),this}getProgress(){return this.instance?.getProgress()??0}destroy(){return this.instance?.destroy(),this.instance=null,this}},Ht=class{constructor(){this.instance=null;}init(r,n){return this.destroy(),this.instance=$t(r,n),this}replay(){return this.instance?.replay(),this}pause(){return this.instance?.pause(),this}resume(){return this.instance?.resume(),this}seek(r){return this.instance?.seek(r),this}getProgress(){return this.instance?.getProgress()??0}destroy(){return this.instance?.destroy(),this.instance=null,this}},zt=class{constructor(){this.instance=null;}init(r,n){return this.destroy(),this.instance=Ct(r,n),this}replay(){return this.instance?.replay(),this}pause(){return this.instance?.pause(),this}resume(){return this.instance?.resume(),this}seek(r){return this.instance?.seek(r),this}getProgress(){return this.instance?.getProgress()??0}destroy(){return this.instance?.destroy(),this.instance=null,this}},_t=class{constructor(){this.instance=null;}init(r,n={}){return this.destroy(),this.instance=It(r,n),this}replay(){return this.instance?.replay(),this}pause(){return this.instance?.pause(),this}resume(){return this.instance?.resume(),this}seek(r){return this.instance?.seek(r),this}getProgress(){return this.instance?.getProgress()??0}destroy(){return this.instance?.destroy(),this.instance=null,this}},Vt=class{constructor(){this.instance=null;}init(r,n={}){return this.destroy(),this.instance=Nt(r,n),this}replay(){return this.instance?.replay(),this}pause(){return this.instance?.pause(),this}resume(){return this.instance?.resume(),this}seek(r){return this.instance?.seek(r),this}getProgress(){return this.instance?.getProgress()??0}destroy(){return this.instance?.destroy(),this.instance=null,this}};export{Ht as ScrollAnimateRef,zt as ScrollCounterRef,Rt as ScrollDrawRef,Vt as ScrollTextRef,_t as ScrollVideoRef};
|
|
3
|
+
<div style="position:absolute;${m?`left:${u}px;top:0;bottom:0;border-left:2px dashed #ef4444;`:`top:${u}px;left:0;right:0;border-top:2px dashed #ef4444;`}padding:2px 6px;color:#ef4444;background:rgba(0,0,0,.6)">\u25A0 end</div>`;}return document.body.appendChild(t),window.addEventListener("scroll",l,{passive:true}),l(),{el:t,destroy(){window.removeEventListener("scroll",l),t.remove();}}}var Tt=/[-+]?(?:\d*\.)?\d+(?:[eE][-+]?\d+)?/g,xt=/[MmLlHhVvCcSsQqTtAaZz]/g;function nr(e,r,n){if(!Be)return;let t=(e.match(xt)??[]).join("").toUpperCase(),l=(r.match(xt)??[]).join("").toUpperCase(),o=(e.match(Tt)??[]).length,c=(r.match(Tt)??[]).length;if(t!==l){we(`morphTo: command sequence differs (${t||"\u2205"} \u2192 ${l||"\u2205"}). Interpolation is coordinate-for-coordinate, so the result will not reach the target shape. Redraw both paths with the same commands.`,n);return}o!==c&&we(`morphTo: coordinate count differs (${o} \u2192 ${c}). Extra coordinates are ignored and missing ones hold their start value, so the result will not reach the target shape.`,n);}function st(e,r,n){let t=(r.match(/[-+]?(?:\d*\.)?\d+(?:[eE][-+]?\d+)?/g)??[]).map(Number),l=0;return e.replace(/[-+]?(?:\d*\.)?\d+(?:[eE][-+]?\d+)?/g,o=>{let c=parseFloat(o),u=t[l++]??c;return String(+(c+(u-c)*n).toFixed(4))})}function At(e,r={}){if(typeof window>"u")return {destroy:()=>{},replay:()=>{},pause:()=>{},resume:()=>{},seek:()=>{},getProgress:()=>0};let{preset:n,...t}=r,l=n?{...yt[n],...t}:t,o=window.matchMedia("(prefers-reduced-motion: reduce)").matches,{selector:c="path, polyline, line, polygon, rect, circle",speed:u=1,fade:m=false,easing:p="linear",trigger:T={},stagger:z=0,direction:A="forward",once:ne=false,debug:$e=false,axis:B="y",scrollContainer:J,autoReverse:X=false,delay:G=0,strokeColor:M,strokeWidth:$,fillOpacity:L,waypoints:w,velocityScale:I=false,threshold:O=0,rootMargin:C="0px",repeat:E=0,repeatDelay:se=0,morphTo:D,clip:oe,autoplay:ie=false,duration:ee=1e3,native:ae=true,onProgress:d,onStart:x,onComplete:g,onEnter:P,onLeave:S,onEnterBack:N,onLeaveBack:fe}=l,Q=oe===true?"left":typeof oe=="string"?oe:false,Se=typeof p=="function"?p:re[p]??re.linear,Ce=de(T.start??"top bottom"),He=de(T.end??"bottom top"),ve=typeof J=="string"?document.querySelector(J):J??null,Ee=Array.isArray(M)?M[0]:null,le=Array.isArray(M)?M[1]:typeof M=="string"?M:null,ce=Array.isArray($)?$[0]:null,j=Array.isArray($)?$[1]:typeof $=="number"?$:null,pe=Array.isArray(L)?L[0]:null,Z=Array.isArray(L)?L[1]:typeof L=="number"?L:null;function ke(s){let a=s*100;switch(Q){case "right":return `inset(0 0 0 ${100-a}%)`;case "top":return `inset(0 0 ${100-a}% 0)`;case "bottom":return `inset(${100-a}% 0 0 0)`;case "center":return `circle(${s*150}% at 50% 50%)`;default:return `inset(0 ${100-a}% 0 0)`}}let _=Q?[]:Array.from(e.querySelectorAll(c)),k=[],i=[],f=0,ge=0,R=false,V=false,q=0,Ae=false,he=-1,te=-1,Y=false,ye=0,Oe=0,Fe,Je=null;function it(){Je?.destroy(),Je=null;}let Ne=new Set,at=NaN,Re=true,Ge=-1,lt=performance.now(),ze=NaN;function et(){return ve?B==="x"?ve.scrollLeft:ve.scrollTop:B==="x"?window.scrollX:window.scrollY}function ct(){return ve?B==="x"?ve.clientWidth:ve.clientHeight:B==="x"?window.innerWidth:window.innerHeight}function ut(){let s=Ze(e,ve,B);return xe(s,s.scroll,ct(),Ce,He)}function mt(){(({tStart:f,tEnd:ge}=ut())),$e&&Be&&(it(),Je=rr(f,ge,B));}function tt(s,a=ut){Le(e,{type:"draw",getProgress:()=>s.getProgress(),getTrigger:a});let b=s.destroy;return s.destroy=()=>{b.call(s),Pe(e);},s}function qt(s,a){if(e.style.setProperty("--scroll-draw-progress",String(s)),Q){let b=a==="reverse"?1-s:s;e.style.clipPath=ke(b);return}_.forEach((b,ue)=>{b.style.strokeDashoffset=a==="reverse"?`${k[ue]*s}`:`${k[ue]*(1-s)}`,m&&(b.style.opacity=a==="reverse"?`${1-s}`:`${s}`),Ee&&le?b.style.stroke=Ve(Ee,le,s):le&&(b.style.stroke=le),ce!==null&&j!==null?b.style.strokeWidth=`${ce+(j-ce)*s}`:j!==null&&(b.style.strokeWidth=`${j}`),pe!==null&&Z!==null?b.style.fillOpacity=`${pe+(Z-pe)*s}`:Z!==null&&(b.style.fillOpacity=`${Z}`),D&&b.tagName.toLowerCase()==="path"&&i[ue]&&b.setAttribute("d",st(i[ue],D,s));});}function je(){if(e.style.setProperty("--scroll-draw-progress","0"),Q){e.style.clipPath=ke(0);return}_.forEach((s,a)=>{s.style.strokeDasharray=`${k[a]}`,s.style.strokeDashoffset=A==="reverse"?"0":`${k[a]}`,m?s.style.opacity=A==="reverse"?"1":"0":s.style.opacity="",Ee&&(s.style.stroke=Ee),ce!==null&&(s.style.strokeWidth=`${ce}`),pe!==null&&(s.style.fillOpacity=`${pe}`),D&&s.tagName.toLowerCase()==="path"&&i[a]&&s.setAttribute("d",i[a]);});}if(_.forEach(s=>{tr(s);let a=_e(s);k.push(a);let b=s.tagName.toLowerCase()==="path";b?i.push(s.getAttribute("d")??""):i.push(""),D&&(b?nr(i[i.length-1],D,s):we(`morphTo only applies to <path> elements \u2014 ignored on <${s.tagName}>.`,s)),o?(s.style.strokeDasharray=`${a}`,s.style.strokeDashoffset=A==="reverse"?`${a}`:"0",m&&(s.style.opacity="1"),le&&(s.style.stroke=le),j!==null&&(s.style.strokeWidth=`${j}`),Z!==null&&(s.style.fillOpacity=`${Z}`),D&&s.tagName.toLowerCase()==="path"&&s.setAttribute("d",D)):(s.style.strokeDasharray=`${a}`,s.style.strokeDashoffset=A==="reverse"?"0":`${a}`,m?s.style.opacity=A==="reverse"?"1":"0":s.style.opacity="",Ee&&(s.style.stroke=Ee),ce!==null&&(s.style.strokeWidth=`${ce}`),pe!==null&&(s.style.fillOpacity=`${pe}`));}),Q){if(o)return e.style.clipPath=ke(1),g?.(),{destroy:()=>{},replay:()=>{},pause:()=>{},resume:()=>{},seek:()=>{},getProgress:()=>1};e.style.clipPath=ke(0);}else if(o)return g?.(),{destroy:()=>{},replay:()=>{},pause:()=>{},resume:()=>{},seek:()=>{},getProgress:()=>1};let ft=typeof p=="string"?Ke(p):null;function Wt(){return !(ae===false||!er()||!_.length||!ft||Q||B!=="y"||ve||u!==1||z!==0||ne||X||I!==false||D||w||E||G>0||d||x||g||P||S||N||fe||M!=null||$!=null||L!=null||(T.start??"top bottom").trim()!=="top bottom"||(T.end??"bottom top").trim()!=="bottom top")}function Bt(){let s=++Jt,a=`svg-scroll-draw-${s}`,b=`svg-scroll-draw-host-${s}`,ue=`--svg-scroll-draw-${s}`,De=A==="reverse"?"0":"var(--ssd-len)",Ie=A==="reverse"?"var(--ssd-len)":"0",Me=`stroke-dashoffset:${De};`,v=`stroke-dashoffset:${Ie};`;m&&(Me+=`opacity:${A==="reverse"?1:0};`,v+=`opacity:${A==="reverse"?0:1};`);let F=document.createElement("style");F.setAttribute("data-svg-scroll-draw",""),F.textContent=`@keyframes ${a}{from{${Me}}to{${v}}}.${b}{view-timeline-name:${ue};view-timeline-axis:block;}.${a}{animation-name:${a};animation-duration:auto;animation-timing-function:${ft};animation-fill-mode:both;animation-timeline:${ue};animation-range:cover 0% cover 100%;}`,document.head.appendChild(F),e.classList.add(b);function me(h,U){h.style.setProperty("--ssd-len",String(k[U])),h.style.strokeDasharray=`${k[U]}`,h.style.strokeDashoffset="",h.style.opacity="",h.style.animationPlayState="",h.classList.add(a);}_.forEach(me);let y=false,H=-1;function W(){if(H>=0)return H;let h=e.getBoundingClientRect(),{tStart:U,tEnd:Te}=xe({top:h.top,height:h.height},et(),ct(),Ce,He);return Se(K(et(),U,Te,u))}return {destroy(){e.classList.remove(b),_.forEach(h=>{h.classList.remove(a),h.style.removeProperty("--ssd-len"),h.style.animationPlayState="";}),F.remove();},replay(){y=false,H=-1,_.forEach(me);},pause(){y=true,_.forEach(h=>{h.style.animationPlayState="paused";});},resume(){y&&(y=false,_.forEach(h=>{h.style.animationPlayState="running";}));},seek(h){let U=Math.min(1,Math.max(0,h));H=U,y=true,_.forEach((Te,be)=>{Te.classList.remove(a),Te.style.strokeDashoffset=A==="reverse"?`${k[be]*U}`:`${k[be]*(1-U)}`,m&&(Te.style.opacity=A==="reverse"?`${1-U}`:`${U}`);});},getProgress(){return W()},refresh(){_.forEach((h,U)=>{k[U]=_e(h),h.style.setProperty("--ssd-len",String(k[U])),h.style.strokeDasharray=`${k[U]}`;});}}}if(Wt())return tt(Bt());function Gt(){let s=Math.max(1,ee),a=0,b=0,ue=false;function De(y){let H=true;if(Q){let W=Math.min(1,Math.max(0,y/s)),h=Se(W);ye=h,e.style.setProperty("--scroll-draw-progress",String(h)),e.style.clipPath=ke(A==="reverse"?1-h:h),d?.(h),W<1&&(H=false);}else _.forEach((W,h)=>{let U=h*z*s,Te=Math.min(1,Math.max(0,(y-U)/s)),be=Se(Te);W.style.strokeDashoffset=A==="reverse"?`${k[h]*be}`:`${k[h]*(1-be)}`,m&&(W.style.opacity=A==="reverse"?`${1-be}`:`${be}`),Ee&&le?W.style.stroke=Ve(Ee,le,be):le&&(W.style.stroke=le),ce!==null&&j!==null?W.style.strokeWidth=`${ce+(j-ce)*be}`:j!==null&&(W.style.strokeWidth=`${j}`),pe!==null&&Z!==null?W.style.fillOpacity=`${pe+(Z-pe)*be}`:Z!==null&&(W.style.fillOpacity=`${Z}`),D&&W.tagName.toLowerCase()==="path"&&i[h]&&W.setAttribute("d",st(i[h],D,be)),h===0&&(ye=be,d?.(be),e.style.setProperty("--scroll-draw-progress",String(be))),Te<1&&(H=false);});if(w){let W=Math.min(1,Math.max(0,y/s)),h=Se(W);for(let U in w){let Te=parseFloat(U);h>=Te&&!Ne.has(Te)&&(Ne.add(Te),w[U]?.());}}return H}function Ie(y){if(Y)return;let H=y-a;V||(V=true,x?.());let W=De(H);if(W&&!R){R=true,De(s*(1+Math.max(0,_.length-1)*z)),g?.(),Oe<(E==="infinite"?1/0:E??0)&&(Oe++,Fe=setTimeout(()=>{a=performance.now(),V=false,R=false,Ne.clear(),je(),q=requestAnimationFrame(Ie);},se));return}W||(q=requestAnimationFrame(Ie));}function Me(){cancelAnimationFrame(q),clearTimeout(Fe),a=performance.now(),b=0,Y=false,V=false,R=false,Oe=0,ue=true,ye=0,Ne.clear(),je(),q=requestAnimationFrame(Ie);}let v=new IntersectionObserver(y=>{y.forEach(H=>{H.isIntersecting&&!(ne&&R)?Me():!H.isIntersecting&&!ne&&!R&&(cancelAnimationFrame(q),clearTimeout(Fe),ue=false);});},{root:ve??null,threshold:O,rootMargin:C}),F;function me(){clearTimeout(F),F=setTimeout(()=>{_.forEach((y,H)=>{k[H]=_e(y),y.style.strokeDasharray=`${k[H]}`;});},150);}return window.addEventListener("resize",me),window.addEventListener("orientationchange",me),G>0?setTimeout(()=>v.observe(e),G):v.observe(e),{destroy(){cancelAnimationFrame(q),clearTimeout(Fe),v.disconnect(),window.removeEventListener("resize",me),window.removeEventListener("orientationchange",me),clearTimeout(F);},replay(){Oe=0,Me();},pause(){Y||!ue||(Y=true,b=performance.now()-a,cancelAnimationFrame(q));},resume(){Y&&(Y=false,ue=true,a=performance.now()-b,q=requestAnimationFrame(Ie));},seek(y){let H=Math.min(1,Math.max(0,y));ye=H,Y=true,b=H*s,a=performance.now()-b,cancelAnimationFrame(q),De(b);},getProgress(){return ye},refresh(){clearTimeout(F),_.forEach((y,H)=>{k[H]=_e(y),y.style.strokeDasharray=`${k[H]}`;});}}}if(ie)return tt(Gt());mt();function Ye(){if(!Ae||Y)return;let s=performance.now(),a=et();if(!Re&&I===false&&a===at){q=requestAnimationFrame(Ye);return}Re=false,at=a;let b=u;if(I!==false){let v=s-lt,F=v>0?Math.abs(a-(Ge<0?a:Ge))/v:0;b=u*Math.max(.2,1+F*(typeof I=="number"?I:1)*.04);}Ge=a,lt=s;let ue=X?te===-1||a>=te?"forward":"reverse":A;te=a;let De=ge-f,Ie=true,Me=De===0?0:(a-f)/De;if(isNaN(ze)||(ze<=0&&Me>0?P?.():ze>0&&Me<=0&&fe?.(),ze<1&&Me>=1?S?.():ze>=1&&Me<1&&N?.()),ze=Me,Q){let v=Se(K(a,f,ge,b));ne&&!X&&(he=Math.max(he,v),v=he),ye=v,e.style.setProperty("--scroll-draw-progress",String(v));let F=ue==="reverse"?1-v:v;e.style.clipPath=ke(F),d?.(v),!V&&K(a,f,ge,b)>0&&(V=true,x?.()),v>=1&&!R?(R=true,g?.(),Oe<(E==="infinite"?1/0:E??0)&&(Oe++,Fe=setTimeout(()=>{he=-1,V=false,R=false,e.style.clipPath=ke(0);},se))):v<1&&!ne&&(R=false),q=requestAnimationFrame(Ye);return}if(_.forEach((v,F)=>{let me=F*z*De,y=Se(K(a,f+me,ge+me,b));ne&&!X&&(he=Math.max(he,y),y=he),ye=y,v.style.strokeDashoffset=ue==="reverse"?`${k[F]*y}`:`${k[F]*(1-y)}`,m&&(v.style.opacity=ue==="reverse"?`${1-y}`:`${y}`),Ee&&le?v.style.stroke=Ve(Ee,le,y):le&&(v.style.stroke=le),ce!==null&&j!==null?v.style.strokeWidth=`${ce+(j-ce)*y}`:j!==null&&(v.style.strokeWidth=`${j}`),pe!==null&&Z!==null?v.style.fillOpacity=`${pe+(Z-pe)*y}`:Z!==null&&(v.style.fillOpacity=`${Z}`),D&&v.tagName.toLowerCase()==="path"&&i[F]&&v.setAttribute("d",st(i[F],D,y)),F===0&&(d?.(y),e.style.setProperty("--scroll-draw-progress",String(y))),y<1&&(Ie=false);}),w){let v=Se(K(a,f,ge,b));for(let F in w){let me=parseFloat(F);v>=me&&!Ne.has(me)&&(Ne.add(me),w[F]?.());}}!V&&K(a,f,ge,b)>0&&(V=true,x?.()),Ie&&!R?(R=true,g?.(),Oe<(E==="infinite"?1/0:E??0)&&(Oe++,Fe=setTimeout(()=>{he=-1,V=false,R=false,Ne.clear(),je(),Re=true;},se))):!Ie&&!ne&&(R=false),q=requestAnimationFrame(Ye);}let rt=false;function Ue(){rt||(rt=true,q=requestAnimationFrame(function(){Ye();}));}function Xe(){rt=false,cancelAnimationFrame(q);}let nt=new IntersectionObserver(s=>{s.forEach(a=>{Ae=a.isIntersecting,Ae&&!Y?(Re=true,Ue()):Xe();});},{root:ve??null,threshold:O,rootMargin:C});function pt(){_.forEach((s,a)=>{k[a]=_e(s),s.style.strokeDasharray=`${k[a]}`;}),mt(),Re=true;}let Qe;function qe(){clearTimeout(Qe),Qe=setTimeout(pt,150);}window.addEventListener("resize",qe),window.addEventListener("orientationchange",qe);let We;return typeof ResizeObserver<"u"&&(We=new ResizeObserver(()=>qe()),We.observe(document.body),We.observe(document.documentElement),We.observe(e)),G>0?setTimeout(()=>nt.observe(e),G):nt.observe(e),tt({destroy(){cancelAnimationFrame(q),clearTimeout(Fe),Xe(),nt.disconnect(),We?.disconnect(),window.removeEventListener("resize",qe),window.removeEventListener("orientationchange",qe),clearTimeout(Qe),it();},replay(){he=-1,te=-1,Ge=-1,V=false,R=false,Oe=0,Y=false,ye=0,Ne.clear(),clearTimeout(Fe),je(),Re=true,Ae&&Ue();},pause(){Y=true,Xe();},resume(){Y&&(Y=false,Re=true,Ae&&Ue());},seek(s){let a=Math.min(1,Math.max(0,s));ye=a,he=a,Y=true,Xe(),qt(a,A),Re=true;},getProgress(){return ye},refresh(){clearTimeout(Qe),pt(),Ae&&!Y&&Ue();}},()=>({tStart:f,tEnd:ge}))}function sr(e){return e.startsWith("#")||e.startsWith("rgb")||e.startsWith("hsl")}function Mt(e){let r=[],n=/([\w]+)\(([^)]*)\)/g,t;for(;(t=n.exec(e))!==null;){let l=[],o=[],c=t[2].trim();if(c)for(let u of c.split(/[\s,]+/)){let m=u.match(/^([-+]?[\d.eE]+)(.*)$/);l.push(m?parseFloat(m[1]):0),o.push(m?m[2]:"");}r.push({fn:t[1],nums:l,units:o});}return r}function or(e,r,n){let t=Mt(e),l=Mt(r);return t.length===0||t.length!==l.length?n<1?e:r:t.map((o,c)=>{let u=l[c];return o.fn!==u.fn||o.nums.length!==u.nums.length?n<1?`${o.fn}(${o.nums.map((m,p)=>`${m}${o.units[p]}`).join(", ")})`:`${u.fn}(${u.nums.map((m,p)=>`${m}${u.units[p]}`).join(", ")})`:`${o.fn}(${o.nums.map((m,p)=>`${m+(u.nums[p]-m)*n}${o.units[p]}`).join(", ")})`}).join(" ")}function Lt(e,r,n){if(typeof e=="number"&&typeof r=="number")return String(e+(r-e)*n);let t=String(e),l=String(r);if(sr(t))return Ve(t,l,n);if(t.includes("("))return or(t,l,n);let o=t.match(/^([-+]?[\d.]+)(.*)$/),c=l.match(/^([-+]?[\d.]+)(.*)$/);if(o&&c){let u=parseFloat(o[1]),m=parseFloat(c[1]);return `${u+(m-u)*n}${o[2]||c[2]}`}return n<1?t:l}function ir(e){return e.replace(/([A-Z])/g,r=>`-${r.toLowerCase()}`)}var ar=new Set(["opacity","transform","background-color","color","filter","scale","translate","rotate"]),lr=0,Pt="--scroll-draw-progress";function cr(){return typeof CSS<"u"&&typeof CSS.supports=="function"&&CSS.supports("animation-timeline: view()")}function $t(e,r){let n={destroy:()=>{},replay:()=>{},pause:()=>{},resume:()=>{},seek:()=>{},getProgress:()=>0};if(typeof window>"u")return n;let{props:t,trigger:l={},easing:o="ease-out",speed:c=1,once:u=false,axis:m="y",scrollContainer:p,native:T=true,velocityScale:z=false,respectReducedMotion:A=true,triggerElement:ne,onProgress:$e,onComplete:B,onEnter:J,onLeave:X,onEnterBack:G,onLeaveBack:M}=r,$=A&&window.matchMedia("(prefers-reduced-motion: reduce)").matches,L=typeof o=="function"?o:re[o]??re["ease-out"],w=de(l.start??"top bottom"),I=de(l.end??"bottom top"),O=ne??e,C=typeof p=="string"?document.querySelector(p):p??null,E=Object.entries(t).map(([i,f])=>({prop:ir(i),from:Array.isArray(f)?f[0]:"",to:Array.isArray(f)?f[1]:f}));function se(){let i=window.getComputedStyle(e);for(let f of E)f.from===""&&(f.from=i.getPropertyValue(f.prop).trim()||"0");}function D(){for(let i of E)e.style.setProperty(i.prop,String(i.to));}let oe=new Map;for(let i of [...E.map(f=>f.prop),Pt])oe.set(i,e.style.getPropertyValue(i));function ie(){for(let[i,f]of oe)f?e.style.setProperty(i,f):e.style.removeProperty(i);}if($)return D(),B?.(),{...n,destroy:ie,getProgress:()=>1};se();let ee=typeof o=="string"?Ke(o):null;function ae(){if(!T||!cr()||!ee||m!=="y"||C||O!==e||u||c!==1||$e||B||J||X||G||M||z!==false||(l.start??"top bottom").trim()!=="top bottom"||(l.end??"bottom top").trim()!=="bottom top")return false;for(let i of E)if(!ar.has(i.prop))return false;return true}function d(){let i=`ssd-a-${++lr}`,f=E.map(te=>`${te.prop}:${te.from}`).join(";"),ge=E.map(te=>`${te.prop}:${te.to}`).join(";"),R=document.createElement("style");R.setAttribute("data-ssd-animate",""),R.textContent=`@keyframes ${i}{from{${f}}to{${ge}}}.${i}{animation-name:${i};animation-duration:auto;animation-timing-function:${ee};animation-fill-mode:both;animation-timeline:view();animation-range:cover 0% cover 100%;}`,document.head.appendChild(R),e.classList.add(i);let V=()=>m==="x"?window.scrollX:window.scrollY,q=()=>m==="x"?window.innerWidth:window.innerHeight,Ae=()=>{let te=e.getBoundingClientRect();return xe({top:te.top,height:te.height},V(),q(),w,I)};Le(e,{type:"animate",getProgress:()=>he.getProgress(),getTrigger:Ae});let he={destroy(){e.classList.remove(i),R.remove(),e.style.animationPlayState="",ie(),Pe(e);},replay(){e.classList.remove(i),e.offsetWidth,e.classList.add(i);},pause(){e.style.animationPlayState="paused";},resume(){e.style.animationPlayState="";},seek(te){let Y=Math.min(1,Math.max(0,te));e.classList.remove(i);for(let ye of E)e.style.setProperty(ye.prop,Lt(ye.from,ye.to,Y));},getProgress(){let{tStart:te,tEnd:Y}=Ae();return L(K(V(),te,Y,c))}};return he}if(ae())return d();let x=0,g=0,P=0,S=false,N=false,fe=-1,Q=0,Se=false,Ce=NaN,He=-1,ve=0,Ee=()=>C?m==="x"?C.scrollLeft:C.scrollTop:m==="x"?window.scrollX:window.scrollY,le=()=>C?m==="x"?C.clientWidth:C.clientHeight:m==="x"?window.innerWidth:window.innerHeight;function ce(){let i=Ze(O,C,m),f=xe(i,i.scroll,le(),w,I);x=f.tStart,g=f.tEnd;}function j(i){e.style.setProperty(Pt,String(i));for(let f of E)e.style.setProperty(f.prop,Lt(f.from,f.to,i));$e?.(i);}function pe(i){if(isNaN(Ce)){Ce=i;return}Ce<=0&&i>0?J?.():Ce>0&&i<=0&&M?.(),Ce<1&&i>=1?X?.():Ce>=1&&i<1&&G?.(),Ce=i;}function Z(){if(!S||N)return;let i=performance.now(),f=Ee(),ge=c;if(z!==false){let q=i-ve,Ae=q>0?Math.abs(f-(He<0?f:He))/q:0;ge=c*Math.max(.2,1+Ae*(typeof z=="number"?z:1)*.04);}He=f,ve=i;let R=g===x?0:(f-x)/(g-x);pe(R);let V=L(K(f,x,g,ge));u&&(fe=Math.max(fe,V),V=fe),Q=V,j(V),V>=1&&!Se?(Se=true,B?.()):V<1&&!u&&(Se=false),P=requestAnimationFrame(Z);}ce(),g===x&&we("scrollAnimate: the trigger window has zero length (start and end resolve to the same scroll position), so this element will never animate. If the target is inside a position:sticky stage, measure the trigger from the container that holds the scroll room via `triggerElement`.",e);{let i=L(K(Ee(),x,g,c));u&&i>0&&(fe=i),Q=i,j(i);}let ke=new IntersectionObserver(i=>{i.forEach(f=>{S=f.isIntersecting,S&&!N?P=requestAnimationFrame(Z):cancelAnimationFrame(P);});},{root:C??null}),_;function k(){clearTimeout(_),_=setTimeout(ce,150);}return window.addEventListener("resize",k),window.addEventListener("orientationchange",k),ke.observe(e),Le(e,{type:"animate",getProgress:()=>Q,getTrigger:()=>({tStart:x,tEnd:g})}),{destroy(){cancelAnimationFrame(P),ke.disconnect(),window.removeEventListener("resize",k),window.removeEventListener("orientationchange",k),clearTimeout(_),ie(),Pe(e);},replay(){fe=-1,Se=false,Q=0,N=false,j(0);},pause(){N=true,cancelAnimationFrame(P);},resume(){N&&(N=false,S&&(P=requestAnimationFrame(Z)));},seek(i){let f=Math.min(1,Math.max(0,i));Q=f,fe=f,N=true,cancelAnimationFrame(P),j(f);},getProgress(){return Q}}}var ot={destroy:()=>{},replay:()=>{},pause:()=>{},resume:()=>{},seek:()=>{},getProgress:()=>0};function Ct(e,r){if(typeof window>"u")return ot;let n=typeof e=="string"?document.querySelector(e):e;if(!n)return we("scrollCounter: element not found:",e),ot;let t=n,{from:l=0,to:o,format:c,easing:u="ease-out",trigger:m={},once:p=true,decimals:T,onComplete:z}=r,A=T!==void 0?d=>d.toFixed(T):c??(d=>String(Math.round(d))),ne=typeof u=="function"?u:re[u]??re["ease-out"],$e=de(m.start??"top 80%"),B=de(m.end??"top 20%");if(window.matchMedia("(prefers-reduced-motion: reduce)").matches)return t.textContent=A(o),z?.(),ot;let X=0,G=0,M=0,$=false,L=false,w=-1,I=0,O=false,C=()=>window.scrollY,E=()=>window.innerHeight;function se(){let d=t.getBoundingClientRect(),x=xe({top:d.top,height:d.height},C(),E(),$e,B);X=x.tStart,G=x.tEnd;}function D(d){t.textContent=A(l+(o-l)*d),t.style.setProperty("--scroll-draw-progress",String(d));}function oe(){if(!$||L)return;let d=ne(K(C(),X,G,1));p&&(w=Math.max(w,d),d=w),I=d,D(d),d>=1&&!O?(O=true,z?.()):d<1&&!p&&(O=false),M=requestAnimationFrame(oe);}se();{let d=ne(K(C(),X,G,1));p&&d>0&&(w=d),I=d,D(d);}let ie=new IntersectionObserver(d=>{d.forEach(x=>{$=x.isIntersecting,$&&!L?M=requestAnimationFrame(oe):cancelAnimationFrame(M);});}),ee;function ae(){clearTimeout(ee),ee=setTimeout(se,150);}return window.addEventListener("resize",ae),window.addEventListener("orientationchange",ae),ie.observe(t),Le(t,{type:"counter",getProgress:()=>I,getTrigger:()=>({tStart:X,tEnd:G})}),{destroy(){cancelAnimationFrame(M),ie.disconnect(),window.removeEventListener("resize",ae),window.removeEventListener("orientationchange",ae),clearTimeout(ee),Pe(t);},replay(){w=-1,O=false,I=0,L=false,D(0);},pause(){L=true,cancelAnimationFrame(M);},resume(){L&&(L=false,$&&(M=requestAnimationFrame(oe)));},seek(d){let x=Math.min(1,Math.max(0,d));I=x,w=x,L=true,cancelAnimationFrame(M),D(x);},getProgress(){return I}}}var kt={destroy:()=>{},replay:()=>{},pause:()=>{},resume:()=>{},seek:()=>{},getProgress:()=>0};function It(e,r={}){if(typeof window>"u")return kt;let n=typeof e=="string"?document.querySelector(e):e;if(!n||n.tagName.toLowerCase()!=="video")return we("scrollVideo: <video> element not found:",e),kt;let t=n,{trigger:l={},easing:o="linear",once:c=false,axis:u="y",preload:m="auto",onReady:p,onComplete:T,onProgress:z}=r,A=window.matchMedia("(prefers-reduced-motion: reduce)").matches,ne=typeof o=="function"?o:re[o]??re.linear,$e=de(l.start??"top top"),B=de(l.end??"bottom top");t.pause(),t.hasAttribute("preload")||(t.preload=m);let J=r.from??0,X=r.to,G=0,M=0,$=0,L=false,w=false,I=-1,O=0,C=false,E=false,se=()=>u==="x"?window.scrollX:window.scrollY,D=()=>u==="x"?window.innerWidth:window.innerHeight;function oe(){let S=t.getBoundingClientRect(),N=u==="x"?S.left:S.top,fe=u==="x"?S.width:S.height,Q=xe({top:N,height:fe},se(),D(),$e,B);G=Q.tStart,M=Q.tEnd;}let ie=NaN;function ee(S){if(!E)return;let N=X??t.duration??0,fe=J+(N-J)*S;fe!==ie&&(ie=fe,t.currentTime=fe),t.style.setProperty("--scroll-draw-progress",String(S)),z?.(S);}function ae(){if(!L||w||!E||A)return;let S=ne(K(se(),G,M,1));c&&(I=Math.max(I,S),S=I),O=S,ee(S),S>=1&&!C?(C=true,T?.()):S<1&&!c&&(C=false),$=requestAnimationFrame(ae);}function d(){if(E=true,X===void 0&&(X=t.duration),A){ee(1),p?.();return}oe(),p?.(),L&&!w&&($=requestAnimationFrame(ae));}t.readyState>=1?d():t.addEventListener("loadedmetadata",d,{once:true}),E||oe();let x=new IntersectionObserver(S=>{S.forEach(N=>{L=N.isIntersecting,L&&!w&&E?$=requestAnimationFrame(ae):cancelAnimationFrame($);});}),g;function P(){clearTimeout(g),g=setTimeout(oe,150);}return window.addEventListener("resize",P),window.addEventListener("orientationchange",P),x.observe(t),Le(t,{type:"video",getProgress:()=>O,getTrigger:()=>({tStart:G,tEnd:M})}),{destroy(){cancelAnimationFrame($),x.disconnect(),t.removeEventListener("loadedmetadata",d),window.removeEventListener("resize",P),window.removeEventListener("orientationchange",P),clearTimeout(g),Pe(t);},replay(){I=-1,C=false,O=0,w=false,ie=NaN,ee(0);},pause(){w=true,cancelAnimationFrame($);},resume(){w&&(w=false,L&&E&&($=requestAnimationFrame(ae)));},seek(S){let N=Math.min(1,Math.max(0,S));O=N,I=N,w=true,cancelAnimationFrame($),ie=NaN,ee(N);},getProgress(){return O}}}function Ft(e){let r=e.textContent??"";return e.textContent="",r.split(/(\s+)/).filter(Boolean).map(n=>{let t=document.createElement("span");return t.setAttribute("aria-hidden","true"),/^\s+$/.test(n)?(t.textContent=n,t.style.whiteSpace="pre"):(t.textContent=n,t.style.display="inline-block"),e.appendChild(t),/^\s+$/.test(n)?null:t}).filter(n=>n!==null)}function ur(e){let r=e.textContent??"";return e.textContent="",r.split("").map(n=>{let t=document.createElement("span");return t.setAttribute("aria-hidden","true"),t.textContent=n,n===" "?t.style.whiteSpace="pre":t.style.display="inline-block",e.appendChild(t),n===" "?null:t}).filter(n=>n!==null)}function Ot(e){let r=Ft(e),n=new Map;for(let o of r){let c=o.offsetTop;n.has(c)||n.set(c,[]),n.get(c).push(o);}let t=[],l=Array.from(n.keys()).sort((o,c)=>o-c);for(let o of l){let c=n.get(o),u=document.createElement("span");u.setAttribute("aria-hidden","true"),u.style.display="inline-block",c.forEach((m,p)=>{let T=m.nextElementSibling;u.appendChild(m),p<c.length-1&&T&&T.style.whiteSpace==="pre"&&u.appendChild(T);}),t.push(u);}return e.textContent="",t.forEach((o,c)=>{e.appendChild(o),c<t.length-1&&e.appendChild(document.createTextNode(" "));}),t}function mr(e,r,n,t){if(n<=1||t===0)return e;let l=(n-1)*t,o=r*t,c=o+(1-l);return c<=o?e>=o?1:0:Math.min(1,Math.max(0,(e-o)/(c-o)))}function fr(e,r){let n=[];if(r?.y!==void 0&&n.push(`translateY(${r.y*(1-e)}px)`),r?.x!==void 0&&n.push(`translateX(${r.x*(1-e)}px)`),r?.rotate!==void 0&&n.push(`rotate(${r.rotate*(1-e)}deg)`),r?.scale!==void 0){let t=r.scale+(1-r.scale)*e;n.push(`scale(${t})`);}return n.join(" ")||""}var Dt={destroy:()=>{},replay:()=>{},pause:()=>{},resume:()=>{},seek:()=>{},getProgress:()=>0};function Nt(e,r={}){if(typeof window>"u")return Dt;let n=typeof e=="string"?document.querySelector(e):e;if(!n)return we("scrollText: element not found:",e),Dt;let t=n,{split:l="words",stagger:o=.04,easing:c="ease-out",from:u={opacity:0,y:24},trigger:m={},once:p=true,onComplete:T}=r,z=window.matchMedia("(prefers-reduced-motion: reduce)").matches,A=typeof c=="function"?c:re[c]??re["ease-out"],ne=de(m.start??"top 85%"),$e=de(m.end??"top 40%"),B=t.innerHTML;t.setAttribute("aria-label",t.textContent??"");let J;l==="chars"?J=ur(t):l==="lines"?J=Ot(t):J=Ft(t);let X=J.length;function G(g,P){u?.opacity!==void 0&&(g.style.opacity=String(u.opacity+(1-u.opacity)*P));let S=fr(P,u);S&&(g.style.transform=S);}function M(g){t.style.setProperty("--scroll-draw-progress",String(g)),J.forEach((P,S)=>{let N=A(mr(g,S,X,o));G(P,N);});}if(z)return M(1),T?.(),{destroy(){t.innerHTML=B,t.removeAttribute("aria-label");},replay:()=>{},pause:()=>{},resume:()=>{},seek:()=>{},getProgress:()=>1};M(0);let $=0,L=0,w=0,I=false,O=false,C=-1,E=0,se=false,D=()=>window.scrollY,oe=()=>window.innerHeight;function ie(){let g=t.getBoundingClientRect(),P=xe({top:g.top,height:g.height},D(),oe(),ne,$e);$=P.tStart,L=P.tEnd;}function ee(){if(!I||O)return;let g=K(D(),$,L,1);p&&(C=Math.max(C,g),g=C),E=g,M(g),g>=1&&!se?(se=true,T?.()):g<1&&!p&&(se=false),w=requestAnimationFrame(ee);}ie();let ae=new IntersectionObserver(g=>{g.forEach(P=>{I=P.isIntersecting,I&&!O?w=requestAnimationFrame(ee):cancelAnimationFrame(w);});}),d;function x(){clearTimeout(d),d=setTimeout(()=>{if(l==="lines"){let g=E;t.innerHTML=B,t.setAttribute("aria-label",t.textContent??""),J=Ot(t),M(g);}ie();},150);}return window.addEventListener("resize",x),window.addEventListener("orientationchange",x),ae.observe(t),Le(t,{type:"text",getProgress:()=>E,getTrigger:()=>({tStart:$,tEnd:L})}),{destroy(){cancelAnimationFrame(w),ae.disconnect(),window.removeEventListener("resize",x),window.removeEventListener("orientationchange",x),clearTimeout(d),t.innerHTML=B,t.removeAttribute("aria-label"),Pe(t);},replay(){C=-1,se=false,E=0,O=false,M(0);},pause(){O=true,cancelAnimationFrame(w);},resume(){O&&(O=false,I&&(w=requestAnimationFrame(ee)));},seek(g){let P=Math.min(1,Math.max(0,g));E=P,C=P,O=true,cancelAnimationFrame(w),M(P);},getProgress(){return E}}}var Rt=class{constructor(){this.instance=null;}init(r,n={}){return this.destroy(),this.instance=At(r,n),this}replay(){return this.instance?.replay(),this}pause(){return this.instance?.pause(),this}resume(){return this.instance?.resume(),this}seek(r){return this.instance?.seek(r),this}getProgress(){return this.instance?.getProgress()??0}destroy(){return this.instance?.destroy(),this.instance=null,this}},Ht=class{constructor(){this.instance=null;}init(r,n){return this.destroy(),this.instance=$t(r,n),this}replay(){return this.instance?.replay(),this}pause(){return this.instance?.pause(),this}resume(){return this.instance?.resume(),this}seek(r){return this.instance?.seek(r),this}getProgress(){return this.instance?.getProgress()??0}destroy(){return this.instance?.destroy(),this.instance=null,this}},zt=class{constructor(){this.instance=null;}init(r,n){return this.destroy(),this.instance=Ct(r,n),this}replay(){return this.instance?.replay(),this}pause(){return this.instance?.pause(),this}resume(){return this.instance?.resume(),this}seek(r){return this.instance?.seek(r),this}getProgress(){return this.instance?.getProgress()??0}destroy(){return this.instance?.destroy(),this.instance=null,this}},_t=class{constructor(){this.instance=null;}init(r,n={}){return this.destroy(),this.instance=It(r,n),this}replay(){return this.instance?.replay(),this}pause(){return this.instance?.pause(),this}resume(){return this.instance?.resume(),this}seek(r){return this.instance?.seek(r),this}getProgress(){return this.instance?.getProgress()??0}destroy(){return this.instance?.destroy(),this.instance=null,this}},Vt=class{constructor(){this.instance=null;}init(r,n={}){return this.destroy(),this.instance=Nt(r,n),this}replay(){return this.instance?.replay(),this}pause(){return this.instance?.pause(),this}resume(){return this.instance?.resume(),this}seek(r){return this.instance?.seek(r),this}getProgress(){return this.instance?.getProgress()??0}destroy(){return this.instance?.destroy(),this.instance=null,this}};export{Ht as ScrollAnimateRef,zt as ScrollCounterRef,Rt as ScrollDrawRef,Vt as ScrollTextRef,_t as ScrollVideoRef};
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
type AOSAnchorPlacement = 'top-bottom' | 'top-center' | 'top-top' | 'center-bottom' | 'center-center' | 'center-top' | 'bottom-bottom' | 'bottom-center' | 'bottom-top';
|
|
2
|
+
interface AOSOptions {
|
|
3
|
+
/** Px from the trigger point before the animation starts. Default 120. */
|
|
4
|
+
offset?: number;
|
|
5
|
+
/** Ms to wait before animating in. Default 0. */
|
|
6
|
+
delay?: number;
|
|
7
|
+
/** Animation length in ms. Default 400. */
|
|
8
|
+
duration?: number;
|
|
9
|
+
/** An AOS easing name (`'ease-out-back'`…) or any CSS timing function. Default `'ease'`. */
|
|
10
|
+
easing?: string;
|
|
11
|
+
/** Animate only the first time the element scrolls in. Default false. */
|
|
12
|
+
once?: boolean;
|
|
13
|
+
/** Animate out again when the element scrolls past the top. Default false. */
|
|
14
|
+
mirror?: boolean;
|
|
15
|
+
/** Which edge of the element meets which edge of the window. Default `'top-bottom'`. */
|
|
16
|
+
anchorPlacement?: AOSAnchorPlacement;
|
|
17
|
+
/** Skip animations entirely: a boolean, a predicate, or a viewport class. */
|
|
18
|
+
disable?: boolean | 'phone' | 'tablet' | 'mobile' | (() => boolean);
|
|
19
|
+
/** Document event that starts AOS. Default `'DOMContentLoaded'`. */
|
|
20
|
+
startEvent?: string;
|
|
21
|
+
/** Do not watch the DOM for new `[data-aos]` elements. Default false. */
|
|
22
|
+
disableMutationObserver?: boolean;
|
|
23
|
+
/** Class added at init. Default `'aos-init'`. */
|
|
24
|
+
initClassName?: string;
|
|
25
|
+
/** Class added while animated in. Default `'aos-animate'`. */
|
|
26
|
+
animatedClassName?: string;
|
|
27
|
+
/** Also add the `data-aos` value as classes (for animate.css-style sets). Default false. */
|
|
28
|
+
useClassNames?: boolean;
|
|
29
|
+
/** Accepted for compatibility; scroll handling is batched per frame instead. */
|
|
30
|
+
throttleDelay?: number;
|
|
31
|
+
/** Accepted for compatibility; resize handling is debounced internally. */
|
|
32
|
+
debounceDelay?: number;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
/** Start AOS for the page, and stop it on unmount. Options are read once, on mount. */
|
|
36
|
+
declare function useAOS(options?: AOSOptions, refreshKey?: unknown): void;
|
|
37
|
+
type AOSInitProps = AOSOptions & {
|
|
38
|
+
/** Re-measure trigger positions whenever this changes (e.g. the pathname). */
|
|
39
|
+
refreshKey?: unknown;
|
|
40
|
+
};
|
|
41
|
+
/** `useAOS` as a component, for a layout that cannot call hooks itself. Renders nothing. */
|
|
42
|
+
declare function AOSInit({ refreshKey, ...options }: AOSInitProps): null;
|
|
43
|
+
|
|
44
|
+
export { AOSInit, type AOSInitProps, useAOS };
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
type AOSAnchorPlacement = 'top-bottom' | 'top-center' | 'top-top' | 'center-bottom' | 'center-center' | 'center-top' | 'bottom-bottom' | 'bottom-center' | 'bottom-top';
|
|
2
|
+
interface AOSOptions {
|
|
3
|
+
/** Px from the trigger point before the animation starts. Default 120. */
|
|
4
|
+
offset?: number;
|
|
5
|
+
/** Ms to wait before animating in. Default 0. */
|
|
6
|
+
delay?: number;
|
|
7
|
+
/** Animation length in ms. Default 400. */
|
|
8
|
+
duration?: number;
|
|
9
|
+
/** An AOS easing name (`'ease-out-back'`…) or any CSS timing function. Default `'ease'`. */
|
|
10
|
+
easing?: string;
|
|
11
|
+
/** Animate only the first time the element scrolls in. Default false. */
|
|
12
|
+
once?: boolean;
|
|
13
|
+
/** Animate out again when the element scrolls past the top. Default false. */
|
|
14
|
+
mirror?: boolean;
|
|
15
|
+
/** Which edge of the element meets which edge of the window. Default `'top-bottom'`. */
|
|
16
|
+
anchorPlacement?: AOSAnchorPlacement;
|
|
17
|
+
/** Skip animations entirely: a boolean, a predicate, or a viewport class. */
|
|
18
|
+
disable?: boolean | 'phone' | 'tablet' | 'mobile' | (() => boolean);
|
|
19
|
+
/** Document event that starts AOS. Default `'DOMContentLoaded'`. */
|
|
20
|
+
startEvent?: string;
|
|
21
|
+
/** Do not watch the DOM for new `[data-aos]` elements. Default false. */
|
|
22
|
+
disableMutationObserver?: boolean;
|
|
23
|
+
/** Class added at init. Default `'aos-init'`. */
|
|
24
|
+
initClassName?: string;
|
|
25
|
+
/** Class added while animated in. Default `'aos-animate'`. */
|
|
26
|
+
animatedClassName?: string;
|
|
27
|
+
/** Also add the `data-aos` value as classes (for animate.css-style sets). Default false. */
|
|
28
|
+
useClassNames?: boolean;
|
|
29
|
+
/** Accepted for compatibility; scroll handling is batched per frame instead. */
|
|
30
|
+
throttleDelay?: number;
|
|
31
|
+
/** Accepted for compatibility; resize handling is debounced internally. */
|
|
32
|
+
debounceDelay?: number;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
/** Start AOS for the page, and stop it on unmount. Options are read once, on mount. */
|
|
36
|
+
declare function useAOS(options?: AOSOptions, refreshKey?: unknown): void;
|
|
37
|
+
type AOSInitProps = AOSOptions & {
|
|
38
|
+
/** Re-measure trigger positions whenever this changes (e.g. the pathname). */
|
|
39
|
+
refreshKey?: unknown;
|
|
40
|
+
};
|
|
41
|
+
/** `useAOS` as a component, for a layout that cannot call hooks itself. Renders nothing. */
|
|
42
|
+
declare function AOSInit({ refreshKey, ...options }: AOSInitProps): null;
|
|
43
|
+
|
|
44
|
+
export { AOSInit, type AOSInitProps, useAOS };
|
|
@@ -0,0 +1,108 @@
|
|
|
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
|
+
* Re-measure after a layout change: path lengths, and the scroll trigger window.
|
|
20
|
+
*
|
|
21
|
+
* The engine already re-measures on `resize`, on `orientationchange`, and via a
|
|
22
|
+
* `ResizeObserver` on the document element — but none of those fire for a layout
|
|
23
|
+
* change that leaves the document height alone, such as a tab switching, a
|
|
24
|
+
* sibling collapsing, or a font swapping inside a fixed-height box. Call this
|
|
25
|
+
* after one of those.
|
|
26
|
+
*
|
|
27
|
+
* Optional on this shared type because several instances here are fan-outs over
|
|
28
|
+
* other instances or SSR no-op stubs. `scrollDraw`, `scrollPin`,
|
|
29
|
+
* `scrollHorizontal`, `scrollDrawTimeline` and the group APIs all provide it;
|
|
30
|
+
* use `instance.refresh?.()` if you hold an instance of unknown origin.
|
|
31
|
+
*/
|
|
32
|
+
refresh?: () => void;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
interface ScrollHorizontalOptions {
|
|
36
|
+
/**
|
|
37
|
+
* Total horizontal travel distance in pixels.
|
|
38
|
+
*
|
|
39
|
+
* Default: `track.scrollWidth` minus the width it is seen through — the
|
|
40
|
+
* viewport, or the `scrollContainer`'s client width when one is given.
|
|
41
|
+
*/
|
|
42
|
+
distance?: number;
|
|
43
|
+
/**
|
|
44
|
+
* Trigger window for the scroll → horizontal mapping.
|
|
45
|
+
* Default: `{ start: 'top top', end: 'bottom bottom' }` — full container height.
|
|
46
|
+
*/
|
|
47
|
+
trigger?: TriggerConfig;
|
|
48
|
+
/** Easing for the horizontal movement. Default: `'linear'` (scrub feel). */
|
|
49
|
+
easing?: EasingName | ((t: number) => number);
|
|
50
|
+
/** Custom scroll container. Default: window. */
|
|
51
|
+
scrollContainer?: string | Element;
|
|
52
|
+
/**
|
|
53
|
+
* Element whose height defines the scroll window for the scrub.
|
|
54
|
+
*
|
|
55
|
+
* Default: the container of the track's nearest `position: sticky` ancestor —
|
|
56
|
+
* the `.outer` element in the CSS setup below, which is where the scroll room
|
|
57
|
+
* actually lives. Falls back to the track itself when there is no sticky
|
|
58
|
+
* ancestor.
|
|
59
|
+
*
|
|
60
|
+
* Why this is not the track: a sticky stage pins the track at exactly one
|
|
61
|
+
* viewport tall, so measuring `top top` → `bottom bottom` against it gives
|
|
62
|
+
* tStart === tEnd — a zero-length window, and a track that never moves.
|
|
63
|
+
*/
|
|
64
|
+
triggerElement?: string | Element;
|
|
65
|
+
/**
|
|
66
|
+
* Honour `prefers-reduced-motion: reduce` by holding the track at its final
|
|
67
|
+
* position instead of scrubbing. Default: **`false`** — unlike every other
|
|
68
|
+
* API here, which defaults to `true`.
|
|
69
|
+
*
|
|
70
|
+
* The reasoning: this transform is scroll-linked scrubbing, not autonomous
|
|
71
|
+
* motion. It advances only as the user scrolls, 1:1 with their input, so it is
|
|
72
|
+
* direct manipulation rather than something that plays at them. And the
|
|
73
|
+
* alternative is worse than the motion — the panels are only reachable *via*
|
|
74
|
+
* the transform, inside a sticky `overflow: hidden` container, so applying a
|
|
75
|
+
* final state (or none at all) silently hides all of the content except one
|
|
76
|
+
* panel from exactly the users who asked for less motion.
|
|
77
|
+
*
|
|
78
|
+
* Set to `true` if your layout has an accessible non-transform fallback and you
|
|
79
|
+
* would rather drop the movement.
|
|
80
|
+
*/
|
|
81
|
+
respectReducedMotion?: boolean;
|
|
82
|
+
onProgress?: (progress: number) => void;
|
|
83
|
+
}
|
|
84
|
+
interface ScrollHorizontalInstance extends ScrollDrawInstance {
|
|
85
|
+
/** Recalculate travel distance after layout change. */
|
|
86
|
+
refresh: () => void;
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* Drive horizontal movement (translateX) from vertical scroll.
|
|
90
|
+
*
|
|
91
|
+
* The Apple / Stripe "scroll to reveal horizontal sections" pattern.
|
|
92
|
+
* You handle the sticky + overflow CSS; `scrollHorizontal` drives the translateX.
|
|
93
|
+
*
|
|
94
|
+
* Minimal CSS setup:
|
|
95
|
+
* .outer { height: 400vh; }
|
|
96
|
+
* .sticky { position: sticky; top: 0; height: 100vh; overflow: hidden; }
|
|
97
|
+
* .track { display: flex; width: max-content; }
|
|
98
|
+
*
|
|
99
|
+
* @example
|
|
100
|
+
* scrollHorizontal('.track', {
|
|
101
|
+
* distance: 3 * window.innerWidth,
|
|
102
|
+
* trigger: { start: 'top top', end: 'bottom bottom' },
|
|
103
|
+
* easing: 'linear',
|
|
104
|
+
* });
|
|
105
|
+
*/
|
|
106
|
+
declare function scrollHorizontal(track: string | Element, options?: ScrollHorizontalOptions): ScrollHorizontalInstance;
|
|
107
|
+
|
|
108
|
+
export { type ScrollHorizontalInstance, type ScrollHorizontalOptions, scrollHorizontal };
|