svg-scroll-draw 2.7.0 → 2.10.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (76) hide show
  1. package/dist/angular/index.cjs +3 -3
  2. package/dist/angular/index.d.mts +48 -0
  3. package/dist/angular/index.d.ts +48 -0
  4. package/dist/angular/index.mjs +3 -3
  5. package/dist/astro/index.cjs +3 -3
  6. package/dist/astro/index.d.mts +20 -5
  7. package/dist/astro/index.d.ts +20 -5
  8. package/dist/astro/index.mjs +3 -3
  9. package/dist/cdn/svg-scroll-draw.dev.global.js +1878 -0
  10. package/dist/cdn/svg-scroll-draw.global.js +3 -3
  11. package/dist/cinematic/index.cjs +2 -2
  12. package/dist/cinematic/index.mjs +2 -2
  13. package/dist/cli/init.js +104 -101
  14. package/dist/devtools/index.cjs +1 -1
  15. package/dist/devtools/index.mjs +1 -1
  16. package/dist/group/index.cjs +3 -3
  17. package/dist/group/index.d.mts +48 -0
  18. package/dist/group/index.d.ts +48 -0
  19. package/dist/group/index.mjs +3 -3
  20. package/dist/horizontal/index.cjs +1 -0
  21. package/dist/horizontal/index.d.mts +108 -0
  22. package/dist/horizontal/index.d.ts +108 -0
  23. package/dist/horizontal/index.mjs +1 -0
  24. package/dist/index.cjs +4 -4
  25. package/dist/index.d.mts +48 -0
  26. package/dist/index.d.ts +48 -0
  27. package/dist/index.mjs +4 -4
  28. package/dist/nuxt/index.cjs +3 -3
  29. package/dist/nuxt/index.d.mts +33 -0
  30. package/dist/nuxt/index.d.ts +33 -0
  31. package/dist/nuxt/index.mjs +3 -3
  32. package/dist/pin/index.cjs +1 -1
  33. package/dist/pin/index.mjs +1 -1
  34. package/dist/progress/index.cjs +1 -0
  35. package/dist/progress/index.d.mts +74 -0
  36. package/dist/progress/index.d.ts +74 -0
  37. package/dist/progress/index.mjs +1 -0
  38. package/dist/react/index.cjs +3 -3
  39. package/dist/react/index.d.mts +33 -0
  40. package/dist/react/index.d.ts +33 -0
  41. package/dist/react/index.mjs +3 -3
  42. package/dist/reveal/index.cjs +1 -0
  43. package/dist/reveal/index.d.mts +80 -0
  44. package/dist/reveal/index.d.ts +80 -0
  45. package/dist/reveal/index.mjs +1 -0
  46. package/dist/snap/index.cjs +1 -1
  47. package/dist/snap/index.d.mts +8 -0
  48. package/dist/snap/index.d.ts +8 -0
  49. package/dist/snap/index.mjs +1 -1
  50. package/dist/solid/index.cjs +3 -3
  51. package/dist/solid/index.d.mts +48 -0
  52. package/dist/solid/index.d.ts +48 -0
  53. package/dist/solid/index.mjs +3 -3
  54. package/dist/svelte/index.cjs +3 -3
  55. package/dist/svelte/index.d.mts +48 -0
  56. package/dist/svelte/index.d.ts +48 -0
  57. package/dist/svelte/index.mjs +3 -3
  58. package/dist/text/index.cjs +1 -1
  59. package/dist/text/index.d.mts +15 -0
  60. package/dist/text/index.d.ts +15 -0
  61. package/dist/text/index.mjs +1 -1
  62. package/dist/timeline/index.cjs +8 -8
  63. package/dist/timeline/index.d.mts +31 -0
  64. package/dist/timeline/index.d.ts +31 -0
  65. package/dist/timeline/index.mjs +8 -8
  66. package/dist/video/index.cjs +1 -1
  67. package/dist/video/index.d.mts +15 -0
  68. package/dist/video/index.d.ts +15 -0
  69. package/dist/video/index.mjs +1 -1
  70. package/dist/vue/index.cjs +3 -3
  71. package/dist/vue/index.d.mts +33 -0
  72. package/dist/vue/index.d.ts +33 -0
  73. package/dist/vue/index.mjs +3 -3
  74. package/dist/web-component/index.cjs +3 -3
  75. package/dist/web-component/index.mjs +3 -3
  76. package/package.json +37 -5
@@ -1,3 +1,3 @@
1
- 'use strict';var solidJs=require('solid-js');function Tt({bounces:e=3,decay:r=.5}={}){let n=Math.max(1,Math.round(e)),t=Math.max(.01,Math.min(.99,r)),u=Math.sqrt(t),s=0,m=[];for(let h=0;h<n;h++){let $=Math.pow(u,h);m.push($),s+=$;}let l=[0],c=0;for(let h=0;h<n;h++)c+=m[h]/s,l.push(c);return h=>{if(h<=0)return 0;if(h>=1)return 1;for(let $=0;$<n;$++)if(h<=l[$+1]){let B=(h-l[$])/(l[$+1]-l[$]);if($===0)return B*(2-B);let S=1-Math.pow(t,$);return S+(1-S)*(2*B-1)*(2*B-1)}return 1}}function xt({amplitude:e=1,period:r=.4}={}){let n=Math.max(1,e),t=Math.max(.1,r),u=n<=1?t/4:t/(2*Math.PI)*Math.asin(1/n);return s=>s<=0?0:s>=1?1:n*Math.pow(2,-10*s)*Math.sin((s-u)*(2*Math.PI)/t)+1}var ie={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:Tt(),elastic:xt()};function ae(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 st(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 it(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 Ge(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 At(e,r,n){return Math.min(n,Math.max(r,e))}function K(e,r,n,t){return n===r?0:At((e-r)/(n-r)*t,0,1)}function pe(e,r,n,t,u){let s=st(e.top,e.height,r,t.element)-it(t.viewport,n),m=st(e.top,e.height,r,u.element)-it(u.viewport,n);return {tStart:s,tEnd:m}}function at(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 He(e,r,n){let t=at(e),u=at(r);return !t||!u?e:`rgb(${Math.round(t[0]+(u[0]-t[0])*n)},${Math.round(t[1]+(u[1]-t[1])*n)},${Math.round(t[2]+(u[2]-t[2])*n)})`}var lt={sketch:{easing:"ease-in",stagger:.1,speed:.9,fade:false},reveal:{easing:"ease-out",fade:true,speed:1.2,once:true},typewriter:{easing:"linear",stagger:.05,speed:1.5},cinematic:{easing:"ease-in-out",fade:true,speed:.75},spring:{easing:"spring",speed:1.1}};function ct(e,r){process.env.NODE_ENV!=="production"&&console.warn(`[svg-scroll-draw] ${e}`,r);}var ut={linear:"linear","ease-in":"ease-in","ease-out":"ease-out","ease-in-out":"ease-in-out"},Mt=0;function Lt(){return typeof CSS<"u"&&typeof CSS.supports=="function"&&CSS.supports("animation-timeline: view()")}function $t(e){let r=e.getAttribute("stroke"),n=e.getAttribute("fill");!r||r==="none"?ct("Element has no stroke \u2014 path will not be visible.",e):n&&n!=="none"&&n!=="transparent"&&ct("Element has a fill \u2014 it may obscure the stroke animation.",e);}function Ct(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 u(){let s=n==="x"?window.scrollX:window.scrollY,m=e-s,l=r-s,c=n==="x";t.innerHTML=`
2
- <div style="position:absolute;${c?`left:${m}px;top:0;bottom:0;border-left:2px dashed #22c55e;`:`top:${m}px;left:0;right:0;border-top:2px dashed #22c55e;`}padding:2px 6px;color:#22c55e;background:rgba(0,0,0,.6)">\u25B6 start</div>
3
- <div style="position:absolute;${c?`left:${l}px;top:0;bottom:0;border-left:2px dashed #ef4444;`:`top:${l}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",u,{passive:true}),u(),t}function Ue(e,r,n){let t=(r.match(/[-+]?(?:\d*\.)?\d+(?:[eE][-+]?\d+)?/g)??[]).map(Number),u=0;return e.replace(/[-+]?(?:\d*\.)?\d+(?:[eE][-+]?\d+)?/g,s=>{let m=parseFloat(s),l=t[u++]??m;return String(+(m+(l-m)*n).toFixed(4))})}function Ze(e,r={}){if(typeof window>"u")return {destroy:()=>{},replay:()=>{},pause:()=>{},resume:()=>{},seek:()=>{},getProgress:()=>0};let{preset:n,...t}=r,u=n?{...lt[n],...t}:t,s=window.matchMedia("(prefers-reduced-motion: reduce)").matches,{selector:m="path, polyline, line, polygon, rect, circle",speed:l=1,fade:c=false,easing:h="linear",trigger:$={},stagger:B=0,direction:S="forward",once:Q=false,debug:he=false,axis:R="y",scrollContainer:ee,autoReverse:te=false,delay:q=0,strokeColor:T,strokeWidth:A,fillOpacity:w,waypoints:b,velocityScale:P=false,threshold:I=0,rootMargin:G="0px",repeat:C=0,repeatDelay:F=0,morphTo:M,clip:V,autoplay:ne=false,duration:H=1e3,native:W=true,onProgress:d,onStart:L,onComplete:g,onEnter:y,onLeave:X,onEnterBack:xe,onLeaveBack:be}=u,we=V===true?"left":typeof V=="string"?V:false,de=typeof h=="function"?h:ie[h]??ie.linear,Ne=ae($.start??"top bottom"),ke=ae($.end??"bottom top"),U=typeof ee=="string"?document.querySelector(ee):ee??null,i=Array.isArray(T)?T[0]:null,p=Array.isArray(T)?T[1]:typeof T=="string"?T:null,Y=Array.isArray(A)?A[0]:null,N=Array.isArray(A)?A[1]:typeof A=="number"?A:null,Z=Array.isArray(w)?w[0]:null,oe=Array.isArray(w)?w[1]:typeof w=="number"?w:null;function J(o){let a=o*100;switch(we){case "right":return `inset(0 0 0 ${100-a}%)`;case "top":return `inset(0 0 ${100-a}% 0)`;case "bottom":return `inset(${100-a}% 0 0 0)`;case "center":return `circle(${o*150}% at 50% 50%)`;default:return `inset(0 ${100-a}% 0 0)`}}let _=we?[]:Array.from(e.querySelectorAll(m)),O=[],fe=[],ge=0,Me=0,se=false,ye=false,re=0,Ve=false,ve=-1,ze=-1,le=false,Ie=0,Ae=0,Le,Xe=null,$e=new Set,qe=-1,nt=performance.now(),De=NaN;function Re(){return U?R==="x"?U.scrollLeft:U.scrollTop:R==="x"?window.scrollX:window.scrollY}function rt(){return U?R==="x"?U.clientWidth:U.clientHeight:R==="x"?window.innerWidth:window.innerHeight}function ot(){let o=e.getBoundingClientRect(),a,E,j;if(U){let ue=U.getBoundingClientRect();a=R==="x"?o.left-ue.left+U.scrollLeft:o.top-ue.top+U.scrollTop,E=R==="x"?o.width:o.height,j=Re();}else a=R==="x"?o.left:o.top,E=R==="x"?o.width:o.height,j=Re();let ce=pe({top:a,height:E},j,rt(),Ne,ke);ge=ce.tStart,Me=ce.tEnd,he&&process.env.NODE_ENV!=="production"&&(Xe?.remove(),Xe=Ct(ge,Me,R));}function wt(o,a){if(e.style.setProperty("--scroll-draw-progress",String(o)),we){let E=a==="reverse"?1-o:o;e.style.clipPath=J(E);return}_.forEach((E,j)=>{E.style.strokeDashoffset=a==="reverse"?`${O[j]*o}`:`${O[j]*(1-o)}`,c&&(E.style.opacity=a==="reverse"?`${1-o}`:`${o}`),i&&p?E.style.stroke=He(i,p,o):p&&(E.style.stroke=p),Y!==null&&N!==null?E.style.strokeWidth=`${Y+(N-Y)*o}`:N!==null&&(E.style.strokeWidth=`${N}`),Z!==null&&oe!==null?E.style.fillOpacity=`${Z+(oe-Z)*o}`:oe!==null&&(E.style.fillOpacity=`${oe}`),M&&E.tagName.toLowerCase()==="path"&&fe[j]&&E.setAttribute("d",Ue(fe[j],M,o));});}function We(){if(e.style.setProperty("--scroll-draw-progress","0"),we){e.style.clipPath=J(0);return}_.forEach((o,a)=>{o.style.strokeDasharray=`${O[a]}`,o.style.strokeDashoffset=S==="reverse"?"0":`${O[a]}`,c?o.style.opacity=S==="reverse"?"1":"0":o.style.opacity="",i&&(o.style.stroke=i),Y!==null&&(o.style.strokeWidth=`${Y}`),Z!==null&&(o.style.fillOpacity=`${Z}`),M&&o.tagName.toLowerCase()==="path"&&fe[a]&&o.setAttribute("d",fe[a]);});}if(_.forEach(o=>{$t(o);let a=Ge(o);O.push(a),o.tagName.toLowerCase()==="path"?fe.push(o.getAttribute("d")??""):fe.push(""),s?(o.style.strokeDasharray=`${a}`,o.style.strokeDashoffset=S==="reverse"?`${a}`:"0",c&&(o.style.opacity="1"),p&&(o.style.stroke=p),N!==null&&(o.style.strokeWidth=`${N}`),oe!==null&&(o.style.fillOpacity=`${oe}`),M&&o.tagName.toLowerCase()==="path"&&o.setAttribute("d",M)):(o.style.strokeDasharray=`${a}`,o.style.strokeDashoffset=S==="reverse"?"0":`${a}`,c?o.style.opacity=S==="reverse"?"1":"0":o.style.opacity="",i&&(o.style.stroke=i),Y!==null&&(o.style.strokeWidth=`${Y}`),Z!==null&&(o.style.fillOpacity=`${Z}`));}),we){if(s)return e.style.clipPath=J(1),g?.(),{destroy:()=>{},replay:()=>{},pause:()=>{},resume:()=>{},seek:()=>{},getProgress:()=>1};e.style.clipPath=J(0);}else if(s)return g?.(),{destroy:()=>{},replay:()=>{},pause:()=>{},resume:()=>{},seek:()=>{},getProgress:()=>1};function vt(){return !(W===false||!Lt()||!_.length||typeof h!="string"||!(h in ut)||we||R!=="y"||U||l!==1||B!==0||Q||te||P!==false||M||b||C||q>0||d||L||g||y||X||xe||be||T!=null||A!=null||w!=null||($.start??"top bottom").trim()!=="top bottom"||($.end??"bottom top").trim()!=="bottom top")}function Et(){let o=`svg-scroll-draw-${++Mt}`,a=S==="reverse"?"0":"var(--ssd-len)",E=S==="reverse"?"var(--ssd-len)":"0",j=`stroke-dashoffset:${a};`,ce=`stroke-dashoffset:${E};`;c&&(j+=`opacity:${S==="reverse"?1:0};`,ce+=`opacity:${S==="reverse"?0:1};`);let ue=document.createElement("style");ue.setAttribute("data-svg-scroll-draw",""),ue.textContent=`@keyframes ${o}{from{${j}}to{${ce}}}.${o}{animation-name:${o};animation-duration:auto;animation-timing-function:${ut[h]};animation-fill-mode:both;animation-timeline:view();animation-range:cover 0% cover 100%;}`,document.head.appendChild(ue);function me(f,x){f.style.setProperty("--ssd-len",String(O[x])),f.style.strokeDasharray=`${O[x]}`,f.style.strokeDashoffset="",f.style.opacity="",f.style.animationPlayState="",f.classList.add(o);}_.forEach(me);let v=false,k=-1;function D(){if(k>=0)return k;let f=e.getBoundingClientRect(),{tStart:x,tEnd:z}=pe({top:f.top,height:f.height},Re(),rt(),Ne,ke);return de(K(Re(),x,z,l))}return {destroy(){_.forEach(f=>{f.classList.remove(o),f.style.removeProperty("--ssd-len"),f.style.animationPlayState="";}),ue.remove();},replay(){v=false,k=-1,_.forEach(me);},pause(){v=true,_.forEach(f=>{f.style.animationPlayState="paused";});},resume(){v&&(v=false,_.forEach(f=>{f.style.animationPlayState="running";}));},seek(f){let x=Math.min(1,Math.max(0,f));k=x,v=true,_.forEach((z,Oe)=>{z.classList.remove(o),z.style.strokeDashoffset=S==="reverse"?`${O[Oe]*x}`:`${O[Oe]*(1-x)}`,c&&(z.style.opacity=S==="reverse"?`${1-x}`:`${x}`);});},getProgress(){return D()}}}if(vt())return Et();function St(){let o=Math.max(1,H),a=0,E=0;function j(D){let f=true;if(we){let x=Math.min(1,Math.max(0,D/o)),z=de(x);Ie=z,e.style.setProperty("--scroll-draw-progress",String(z)),e.style.clipPath=J(S==="reverse"?1-z:z),d?.(z),x<1&&(f=false);}else _.forEach((x,z)=>{let Oe=z*B*o,Fe=Math.min(1,Math.max(0,(D-Oe)/o)),Ee=de(Fe);x.style.strokeDashoffset=S==="reverse"?`${O[z]*Ee}`:`${O[z]*(1-Ee)}`,c&&(x.style.opacity=S==="reverse"?`${1-Ee}`:`${Ee}`),i&&p?x.style.stroke=He(i,p,Ee):p&&(x.style.stroke=p),Y!==null&&N!==null?x.style.strokeWidth=`${Y+(N-Y)*Ee}`:N!==null&&(x.style.strokeWidth=`${N}`),Z!==null&&oe!==null?x.style.fillOpacity=`${Z+(oe-Z)*Ee}`:oe!==null&&(x.style.fillOpacity=`${oe}`),M&&x.tagName.toLowerCase()==="path"&&fe[z]&&x.setAttribute("d",Ue(fe[z],M,Ee)),z===0&&(d?.(Ee),e.style.setProperty("--scroll-draw-progress",String(Ee))),Fe<1&&(f=false);});if(b){let x=Math.min(1,Math.max(0,D/o)),z=de(x);for(let Oe in b){let Fe=parseFloat(Oe);z>=Fe&&!$e.has(Fe)&&($e.add(Fe),b[Oe]?.());}}return f}function ce(D){if(le)return;let f=D-a;ye||(ye=true,L?.());let x=j(f);if(x&&!se){se=true,j(o*(1+Math.max(0,_.length-1)*B)),g?.(),Ae<(C==="infinite"?1/0:C??0)&&(Ae++,Le=setTimeout(()=>{a=performance.now(),ye=false,se=false,$e.clear(),We(),re=requestAnimationFrame(ce);},F));return}x||(re=requestAnimationFrame(ce));}function ue(){cancelAnimationFrame(re),clearTimeout(Le),a=performance.now(),E=0,le=false,ye=false,se=false,Ae=0,$e.clear(),We(),re=requestAnimationFrame(ce);}let me=new IntersectionObserver(D=>{D.forEach(f=>{f.isIntersecting&&!(Q&&se)?ue():!f.isIntersecting&&!Q&&!se&&(cancelAnimationFrame(re),clearTimeout(Le),a=null);});},{root:U??null,threshold:I,rootMargin:G}),v;function k(){clearTimeout(v),v=setTimeout(()=>{_.forEach((D,f)=>{O[f]=Ge(D),D.style.strokeDasharray=`${O[f]}`;});},150);}return window.addEventListener("resize",k),window.addEventListener("orientationchange",k),q>0?setTimeout(()=>me.observe(e),q):me.observe(e),{destroy(){cancelAnimationFrame(re),clearTimeout(Le),me.disconnect(),window.removeEventListener("resize",k),window.removeEventListener("orientationchange",k),clearTimeout(v);},replay(){Ae=0,ue();},pause(){le||(le=true,E=performance.now()-a,cancelAnimationFrame(re));},resume(){le&&(le=false,a=performance.now()-E,re=requestAnimationFrame(ce));},seek(D){let f=Math.min(1,Math.max(0,D));Ie=f,le=true,E=f*o,a=performance.now()-E,cancelAnimationFrame(re),j(E);},getProgress(){return Ie}}}if(ne)return St();ot();function _e(){if(!Ve||le)return;let o=performance.now(),a=Re(),E=l;if(P!==false){let v=o-nt,k=v>0?Math.abs(a-(qe<0?a:qe))/v:0;E=l*Math.max(.2,1+k*(typeof P=="number"?P:1)*.04);}qe=a,nt=o;let j=te?ze===-1||a>=ze?"forward":"reverse":S;ze=a;let ce=Me-ge,ue=true,me=ce===0?0:(a-ge)/ce;if(isNaN(De)||(De<=0&&me>0?y?.():De>0&&me<=0&&be?.(),De<1&&me>=1?X?.():De>=1&&me<1&&xe?.()),De=me,we){let v=de(K(a,ge,Me,E));Q&&!te&&(ve=Math.max(ve,v),v=ve),Ie=v,e.style.setProperty("--scroll-draw-progress",String(v));let k=j==="reverse"?1-v:v;e.style.clipPath=J(k),d?.(v),!ye&&K(a,ge,Me,E)>0&&(ye=true,L?.()),v>=1&&!se?(se=true,g?.(),Ae<(C==="infinite"?1/0:C??0)&&(Ae++,Le=setTimeout(()=>{ve=-1,ye=false,se=false,e.style.clipPath=J(0);},F))):v<1&&!Q&&(se=false),re=requestAnimationFrame(_e);return}if(_.forEach((v,k)=>{let D=k*B*ce,f=de(K(a,ge+D,Me+D,E));Q&&!te&&(ve=Math.max(ve,f),f=ve),Ie=f,v.style.strokeDashoffset=j==="reverse"?`${O[k]*f}`:`${O[k]*(1-f)}`,c&&(v.style.opacity=j==="reverse"?`${1-f}`:`${f}`),i&&p?v.style.stroke=He(i,p,f):p&&(v.style.stroke=p),Y!==null&&N!==null?v.style.strokeWidth=`${Y+(N-Y)*f}`:N!==null&&(v.style.strokeWidth=`${N}`),Z!==null&&oe!==null?v.style.fillOpacity=`${Z+(oe-Z)*f}`:oe!==null&&(v.style.fillOpacity=`${oe}`),M&&v.tagName.toLowerCase()==="path"&&fe[k]&&v.setAttribute("d",Ue(fe[k],M,f)),k===0&&(d?.(f),e.style.setProperty("--scroll-draw-progress",String(f))),f<1&&(ue=false);}),b){let v=de(K(a,ge,Me,E));for(let k in b){let D=parseFloat(k);v>=D&&!$e.has(D)&&($e.add(D),b[k]?.());}}!ye&&K(a,ge,Me,E)>0&&(ye=true,L?.()),ue&&!se?(se=true,g?.(),Ae<(C==="infinite"?1/0:C??0)&&(Ae++,Le=setTimeout(()=>{ve=-1,ye=false,se=false,$e.clear(),We();},F))):!ue&&!Q&&(se=false),re=requestAnimationFrame(_e);}let Ye=new IntersectionObserver(o=>{o.forEach(a=>{Ve=a.isIntersecting,Ve&&!le?re=requestAnimationFrame(_e):cancelAnimationFrame(re);});},{root:U??null,threshold:I,rootMargin:G}),je;function Be(){clearTimeout(je),je=setTimeout(()=>{_.forEach((o,a)=>{O[a]=Ge(o),o.style.strokeDasharray=`${O[a]}`;}),ot();},150);}return window.addEventListener("resize",Be),window.addEventListener("orientationchange",Be),q>0?setTimeout(()=>Ye.observe(e),q):Ye.observe(e),{destroy(){cancelAnimationFrame(re),clearTimeout(Le),Ye.disconnect(),window.removeEventListener("resize",Be),window.removeEventListener("orientationchange",Be),clearTimeout(je),Xe?.remove();},replay(){ve=-1,ze=-1,qe=-1,ye=false,se=false,Ae=0,le=false,$e.clear(),clearTimeout(Le),We();},pause(){le=true,cancelAnimationFrame(re);},resume(){le&&(le=false,Ve&&(re=requestAnimationFrame(_e)));},seek(o){let a=Math.min(1,Math.max(0,o));Ie=a,ve=a,le=true,cancelAnimationFrame(re),wt(a,S);},getProgress(){return Ie}}}var ft=new Map;function Ce(e,r){ft.set(e,r);}function Pe(e){ft.delete(e);}function Pt(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 u=[],s=[],m=t[2].trim();if(m)for(let l of m.split(/[\s,]+/)){let c=l.match(/^([-+]?[\d.eE]+)(.*)$/);u.push(c?parseFloat(c[1]):0),s.push(c?c[2]:"");}r.push({fn:t[1],nums:u,units:s});}return r}function It(e,r,n){let t=mt(e),u=mt(r);return t.length===0||t.length!==u.length?n<1?e:r:t.map((s,m)=>{let l=u[m];return s.fn!==l.fn||s.nums.length!==l.nums.length?n<1?`${s.fn}(${s.nums.map((c,h)=>`${c}${s.units[h]}`).join(", ")})`:`${l.fn}(${l.nums.map((c,h)=>`${c}${l.units[h]}`).join(", ")})`:`${s.fn}(${s.nums.map((c,h)=>`${c+(l.nums[h]-c)*n}${s.units[h]}`).join(", ")})`}).join(" ")}function pt(e,r,n){if(typeof e=="number"&&typeof r=="number")return String(e+(r-e)*n);let t=String(e),u=String(r);if(Pt(t))return He(t,u,n);if(t.includes("("))return It(t,u,n);let s=t.match(/^([-+]?[\d.]+)(.*)$/),m=u.match(/^([-+]?[\d.]+)(.*)$/);if(s&&m){let l=parseFloat(s[1]),c=parseFloat(m[1]);return `${l+(c-l)*n}${s[2]||m[2]}`}return n<1?t:u}function Ot(e){return e.replace(/([A-Z])/g,r=>`-${r.toLowerCase()}`)}var dt={linear:"linear","ease-in":"ease-in","ease-out":"ease-out","ease-in-out":"ease-in-out"},kt=new Set(["opacity","transform","background-color","color","filter","scale","translate","rotate"]),Dt=0;function Ft(){return typeof CSS<"u"&&typeof CSS.supports=="function"&&CSS.supports("animation-timeline: view()")}function Je(e,r){let n={destroy:()=>{},replay:()=>{},pause:()=>{},resume:()=>{},seek:()=>{},getProgress:()=>0};if(typeof window>"u")return n;let{props:t,trigger:u={},easing:s="ease-out",speed:m=1,once:l=false,axis:c="y",scrollContainer:h,native:$=true,onProgress:B,onComplete:S,onEnter:Q,onLeave:he,onEnterBack:R,onLeaveBack:ee}=r,te=window.matchMedia("(prefers-reduced-motion: reduce)").matches,q=typeof s=="function"?s:ie[s]??ie["ease-out"],T=ae(u.start??"top bottom"),A=ae(u.end??"bottom top"),w=typeof h=="string"?document.querySelector(h):h??null,b=Object.entries(t).map(([i,p])=>({prop:Ot(i),from:Array.isArray(p)?p[0]:"",to:Array.isArray(p)?p[1]:p}));function P(){let i=window.getComputedStyle(e);for(let p of b)p.from===""&&(p.from=i.getPropertyValue(p.prop).trim()||"0");}function I(){for(let i of b)e.style.setProperty(i.prop,String(i.to));}if(te)return I(),S?.(),n;P();function G(){if(!$||!Ft()||typeof s!="string"||!(s in dt)||c!=="y"||w||l||m!==1||B||S||Q||he||R||ee||(u.start??"top bottom").trim()!=="top bottom"||(u.end??"bottom top").trim()!=="bottom top")return false;for(let i of b)if(!kt.has(i.prop))return false;return true}function C(){let i=`ssd-a-${++Dt}`,p=b.map(J=>`${J.prop}:${J.from}`).join(";"),Y=b.map(J=>`${J.prop}:${J.to}`).join(";"),N=document.createElement("style");N.setAttribute("data-ssd-animate",""),N.textContent=`@keyframes ${i}{from{${p}}to{${Y}}}.${i}{animation-name:${i};animation-duration:auto;animation-timing-function:${dt[s]};animation-fill-mode:both;animation-timeline:view();animation-range:cover 0% cover 100%;}`,document.head.appendChild(N),e.classList.add(i);let Z=()=>c==="x"?window.scrollX:window.scrollY,oe=()=>c==="x"?window.innerWidth:window.innerHeight;return {destroy(){e.classList.remove(i),N.remove();},replay(){e.classList.remove(i),e.offsetWidth,e.classList.add(i);},pause(){e.style.animationPlayState="paused";},resume(){e.style.animationPlayState="";},seek(J){let _=Math.min(1,Math.max(0,J));e.classList.remove(i);for(let O of b)e.style.setProperty(O.prop,pt(O.from,O.to,_));},getProgress(){let J=e.getBoundingClientRect(),_=Z(),O=oe(),{tStart:fe,tEnd:ge}=pe({top:J.top,height:J.height},_,O,T,A);return q(K(_,fe,ge,m))}}}if(G())return C();let F=0,M=0,V=0,ne=false,H=false,W=-1,d=0,L=false,g=NaN,y=()=>w?c==="x"?w.scrollLeft:w.scrollTop:c==="x"?window.scrollX:window.scrollY,X=()=>w?c==="x"?w.clientWidth:w.clientHeight:c==="x"?window.innerWidth:window.innerHeight;function xe(){let i=e.getBoundingClientRect(),p,Y;if(w){let Z=w.getBoundingClientRect();p=c==="x"?i.left-Z.left+w.scrollLeft:i.top-Z.top+w.scrollTop,Y=c==="x"?i.width:i.height;}else p=c==="x"?i.left:i.top,Y=c==="x"?i.width:i.height;let N=pe({top:p,height:Y},y(),X(),T,A);F=N.tStart,M=N.tEnd;}function be(i){e.style.setProperty("--scroll-draw-progress",String(i));for(let p of b)e.style.setProperty(p.prop,pt(p.from,p.to,i));B?.(i);}function we(i){if(isNaN(g)){g=i;return}g<=0&&i>0?Q?.():g>0&&i<=0&&ee?.(),g<1&&i>=1?he?.():g>=1&&i<1&&R?.(),g=i;}function de(){if(!ne||H)return;let i=M===F?0:(y()-F)/(M-F);we(i);let p=q(K(y(),F,M,m));l&&(W=Math.max(W,p),p=W),d=p,be(p),p>=1&&!L?(L=true,S?.()):p<1&&!l&&(L=false),V=requestAnimationFrame(de);}xe();{let i=q(K(y(),F,M,m));l&&i>0&&(W=i),d=i,be(i);}let Ne=new IntersectionObserver(i=>{i.forEach(p=>{ne=p.isIntersecting,ne&&!H?V=requestAnimationFrame(de):cancelAnimationFrame(V);});},{root:w??null}),ke;function U(){clearTimeout(ke),ke=setTimeout(xe,150);}return window.addEventListener("resize",U),window.addEventListener("orientationchange",U),Ne.observe(e),Ce(e,{type:"animate",getProgress:()=>d,getTrigger:()=>({tStart:F,tEnd:M})}),{destroy(){cancelAnimationFrame(V),Ne.disconnect(),window.removeEventListener("resize",U),window.removeEventListener("orientationchange",U),clearTimeout(ke),Pe(e);},replay(){W=-1,L=false,d=0,H=false,be(0);},pause(){H=true,cancelAnimationFrame(V);},resume(){H&&(H=false,ne&&(V=requestAnimationFrame(de)));},seek(i){let p=Math.min(1,Math.max(0,i));d=p,W=p,H=true,cancelAnimationFrame(V),be(p);},getProgress(){return d}}}var Ke={destroy:()=>{},replay:()=>{},pause:()=>{},resume:()=>{},seek:()=>{},getProgress:()=>0};function Qe(e,r){if(typeof window>"u")return Ke;let n=typeof e=="string"?document.querySelector(e):e;if(!n)return process.env.NODE_ENV!=="production"&&console.warn("[svg-scroll-draw] scrollCounter: element not found:",e),Ke;let t=n,{from:u=0,to:s,format:m,easing:l="ease-out",trigger:c={},once:h=true,decimals:$,onComplete:B}=r,S=$!==void 0?d=>d.toFixed($):m??(d=>String(Math.round(d))),Q=typeof l=="function"?l:ie[l]??ie["ease-out"],he=ae(c.start??"top 80%"),R=ae(c.end??"top 20%");if(window.matchMedia("(prefers-reduced-motion: reduce)").matches)return t.textContent=S(s),B?.(),Ke;t.textContent=S(u);let te=0,q=0,T=0,A=false,w=false,b=-1,P=0,I=false,G=()=>window.scrollY,C=()=>window.innerHeight;function F(){let d=t.getBoundingClientRect(),L=pe({top:d.top,height:d.height},G(),C(),he,R);te=L.tStart,q=L.tEnd;}function M(d){t.textContent=S(u+(s-u)*d),t.style.setProperty("--scroll-draw-progress",String(d));}function V(){if(!A||w)return;let d=Q(K(G(),te,q,1));h&&(b=Math.max(b,d),d=b),P=d,M(d),d>=1&&!I?(I=true,B?.()):d<1&&!h&&(I=false),T=requestAnimationFrame(V);}F();{let d=Q(K(G(),te,q,1));h&&d>0&&(b=d),P=d,M(d);}let ne=new IntersectionObserver(d=>{d.forEach(L=>{A=L.isIntersecting,A&&!w?T=requestAnimationFrame(V):cancelAnimationFrame(T);});}),H;function W(){clearTimeout(H),H=setTimeout(F,150);}return window.addEventListener("resize",W),window.addEventListener("orientationchange",W),ne.observe(t),Ce(t,{type:"counter",getProgress:()=>P,getTrigger:()=>({tStart:te,tEnd:q})}),{destroy(){cancelAnimationFrame(T),ne.disconnect(),window.removeEventListener("resize",W),window.removeEventListener("orientationchange",W),clearTimeout(H),Pe(t);},replay(){b=-1,I=false,P=0,w=false,M(0);},pause(){w=true,cancelAnimationFrame(T);},resume(){w&&(w=false,A&&(T=requestAnimationFrame(V)));},seek(d){let L=Math.min(1,Math.max(0,d));P=L,b=L,w=true,cancelAnimationFrame(T),M(L);},getProgress(){return P}}}var gt={destroy:()=>{},replay:()=>{},pause:()=>{},resume:()=>{},seek:()=>{},getProgress:()=>0};function et(e,r={}){if(typeof window>"u")return gt;let n=typeof e=="string"?document.querySelector(e):e;if(!n||n.tagName.toLowerCase()!=="video")return process.env.NODE_ENV!=="production"&&console.warn("[svg-scroll-draw] scrollVideo: <video> element not found:",e),gt;let t=n,{trigger:u={},easing:s="linear",once:m=false,axis:l="y",preload:c="auto",onReady:h,onComplete:$,onProgress:B}=r,S=window.matchMedia("(prefers-reduced-motion: reduce)").matches,Q=typeof s=="function"?s:ie[s]??ie.linear,he=ae(u.start??"top top"),R=ae(u.end??"bottom top");t.pause(),t.hasAttribute("preload")||(t.preload=c);let ee=r.from??0,te=r.to,q=0,T=0,A=0,w=false,b=false,P=-1,I=0,G=false,C=false,F=()=>l==="x"?window.scrollX:window.scrollY,M=()=>l==="x"?window.innerWidth:window.innerHeight;function V(){let y=t.getBoundingClientRect(),X=l==="x"?y.left:y.top,xe=l==="x"?y.width:y.height,be=pe({top:X,height:xe},F(),M(),he,R);q=be.tStart,T=be.tEnd;}function ne(y){if(!C)return;let X=te??t.duration??0;t.currentTime=ee+(X-ee)*y,t.style.setProperty("--scroll-draw-progress",String(y)),B?.(y);}function H(){if(!w||b||!C)return;let y=Q(K(F(),q,T,1));m&&(P=Math.max(P,y),y=P),I=y,ne(y),y>=1&&!G?(G=true,$?.()):y<1&&!m&&(G=false),A=requestAnimationFrame(H);}function W(){if(C=true,te===void 0&&(te=t.duration),S){ne(1),h?.();return}V(),h?.(),w&&!b&&(A=requestAnimationFrame(H));}t.readyState>=1?W():t.addEventListener("loadedmetadata",W,{once:true}),C||V();let d=new IntersectionObserver(y=>{y.forEach(X=>{w=X.isIntersecting,w&&!b&&C?A=requestAnimationFrame(H):cancelAnimationFrame(A);});}),L;function g(){clearTimeout(L),L=setTimeout(V,150);}return window.addEventListener("resize",g),window.addEventListener("orientationchange",g),d.observe(t),Ce(t,{type:"video",getProgress:()=>I,getTrigger:()=>({tStart:q,tEnd:T})}),{destroy(){cancelAnimationFrame(A),d.disconnect(),t.removeEventListener("loadedmetadata",W),window.removeEventListener("resize",g),window.removeEventListener("orientationchange",g),clearTimeout(L),Pe(t);},replay(){P=-1,G=false,I=0,b=false,ne(0);},pause(){b=true,cancelAnimationFrame(A);},resume(){b&&(b=false,w&&C&&(A=requestAnimationFrame(H)));},seek(y){let X=Math.min(1,Math.max(0,y));I=X,P=X,b=true,cancelAnimationFrame(A),ne(X);},getProgress(){return I}}}function bt(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 Ht(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 yt(e){let r=bt(e),n=new Map;for(let s of r){let m=s.offsetTop;n.has(m)||n.set(m,[]),n.get(m).push(s);}let t=[],u=Array.from(n.keys()).sort((s,m)=>s-m);for(let s of u){let m=n.get(s),l=document.createElement("span");l.setAttribute("aria-hidden","true"),l.style.display="inline-block";for(let c of m)l.appendChild(c);t.push(l);}e.textContent="";for(let s of t)e.appendChild(s),e.appendChild(document.createTextNode(" "));return t}function Nt(e,r,n,t){if(n<=1||t===0)return e;let u=(n-1)*t,s=r*t,m=s+(1-u);return m<=s?e>=s?1:0:Math.min(1,Math.max(0,(e-s)/(m-s)))}function Rt(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 ht={destroy:()=>{},replay:()=>{},pause:()=>{},resume:()=>{},seek:()=>{},getProgress:()=>0};function tt(e,r={}){if(typeof window>"u")return ht;let n=typeof e=="string"?document.querySelector(e):e;if(!n)return process.env.NODE_ENV!=="production"&&console.warn("[svg-scroll-draw] scrollText: element not found:",e),ht;let t=n,{split:u="words",stagger:s=.04,easing:m="ease-out",from:l={opacity:0,y:24},trigger:c={},once:h=true,onComplete:$}=r,B=window.matchMedia("(prefers-reduced-motion: reduce)").matches,S=typeof m=="function"?m:ie[m]??ie["ease-out"],Q=ae(c.start??"top 85%"),he=ae(c.end??"top 40%"),R=t.innerHTML;t.setAttribute("aria-label",t.textContent??"");let ee;u==="chars"?ee=Ht(t):u==="lines"?ee=yt(t):ee=bt(t);let te=ee.length;function q(g,y){l?.opacity!==void 0&&(g.style.opacity=String(l.opacity+(1-l.opacity)*y));let X=Rt(y,l);X&&(g.style.transform=X);}function T(g){t.style.setProperty("--scroll-draw-progress",String(g)),ee.forEach((y,X)=>{let xe=S(Nt(g,X,te,s));q(y,xe);});}if(B)return T(1),$?.(),{destroy(){t.innerHTML=R,t.removeAttribute("aria-label");},replay:()=>{},pause:()=>{},resume:()=>{},seek:()=>{},getProgress:()=>1};T(0);let A=0,w=0,b=0,P=false,I=false,G=-1,C=0,F=false,M=()=>window.scrollY,V=()=>window.innerHeight;function ne(){let g=t.getBoundingClientRect(),y=pe({top:g.top,height:g.height},M(),V(),Q,he);A=y.tStart,w=y.tEnd;}function H(){if(!P||I)return;let g=K(M(),A,w,1);h&&(G=Math.max(G,g),g=G),C=g,T(g),g>=1&&!F?(F=true,$?.()):g<1&&!h&&(F=false),b=requestAnimationFrame(H);}ne();let W=new IntersectionObserver(g=>{g.forEach(y=>{P=y.isIntersecting,P&&!I?b=requestAnimationFrame(H):cancelAnimationFrame(b);});}),d;function L(){clearTimeout(d),d=setTimeout(()=>{if(u==="lines"){let g=C;t.innerHTML=R,t.setAttribute("aria-label",t.textContent??""),ee=yt(t),T(g);}ne();},150);}return window.addEventListener("resize",L),window.addEventListener("orientationchange",L),W.observe(t),Ce(t,{type:"text",getProgress:()=>C,getTrigger:()=>({tStart:A,tEnd:w})}),{destroy(){cancelAnimationFrame(b),W.disconnect(),window.removeEventListener("resize",L),window.removeEventListener("orientationchange",L),clearTimeout(d),t.innerHTML=R,t.removeAttribute("aria-label"),Pe(t);},replay(){G=-1,F=false,C=0,I=false,T(0);},pause(){I=true,cancelAnimationFrame(b);},resume(){I&&(I=false,P&&(b=requestAnimationFrame(H)));},seek(g){let y=Math.min(1,Math.max(0,g));C=y,G=y,I=true,cancelAnimationFrame(b),T(y);},getProgress(){return C}}}function un(e={}){let r,n;return solidJs.onMount(()=>{r&&(n=Ze(r,e));}),solidJs.onCleanup(()=>{n?.destroy();}),t=>{r=t;}}function fn(e={}){let r,n;return solidJs.onMount(()=>{r&&(n=Ze(r,e));}),solidJs.onCleanup(()=>{n?.destroy(),n=void 0;}),{ref:t=>{r=t;},getInstance:()=>n}}function mn(e){let r,n;return solidJs.onMount(()=>{r&&(n=Je(r,e));}),solidJs.onCleanup(()=>{n?.destroy();}),t=>{r=t;}}function pn(e){let r,n;return solidJs.onMount(()=>{r&&(n=Je(r,e));}),solidJs.onCleanup(()=>{n?.destroy(),n=void 0;}),{ref:t=>{r=t;},getInstance:()=>n}}function dn(e){let r,n;return solidJs.onMount(()=>{r&&(n=Qe(r,e));}),solidJs.onCleanup(()=>{n?.destroy();}),t=>{r=t;}}function gn(e){let r,n;return solidJs.onMount(()=>{r&&(n=Qe(r,e));}),solidJs.onCleanup(()=>{n?.destroy(),n=void 0;}),{ref:t=>{r=t;},getInstance:()=>n}}function yn(e={}){let r,n;return solidJs.onMount(()=>{r&&(n=et(r,e));}),solidJs.onCleanup(()=>{n?.destroy();}),t=>{r=t;}}function hn(e={}){let r,n;return solidJs.onMount(()=>{r&&(n=et(r,e));}),solidJs.onCleanup(()=>{n?.destroy(),n=void 0;}),{ref:t=>{r=t;},getInstance:()=>n}}function bn(e={}){let r,n;return solidJs.onMount(()=>{r&&(n=tt(r,e));}),solidJs.onCleanup(()=>{n?.destroy();}),t=>{r=t;}}function wn(e={}){let r,n;return solidJs.onMount(()=>{r&&(n=tt(r,e));}),solidJs.onCleanup(()=>{n?.destroy(),n=void 0;}),{ref:t=>{r=t;},getInstance:()=>n}}exports.createScrollAnimate=pn;exports.createScrollCounter=gn;exports.createScrollDraw=fn;exports.createScrollText=wn;exports.createScrollVideo=hn;exports.useScrollAnimate=mn;exports.useScrollCounter=dn;exports.useScrollDraw=un;exports.useScrollText=bn;exports.useScrollVideo=yn;
1
+ 'use strict';var solidJs=require('solid-js');function Nt({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),s=0,c=[];for(let d=0;d<n;d++){let x=Math.pow(l,d);c.push(x),s+=x;}let u=[0],m=0;for(let d=0;d<n;d++)m+=c[d]/s,u.push(m);return d=>{if(d<=0)return 0;if(d>=1)return 1;for(let x=0;x<n;x++)if(d<=u[x+1]){let N=(d-u[x])/(u[x+1]-u[x]);if(x===0)return N*(2-N);let L=1-Math.pow(t,x);return L+(1-L)*(2*N-1)*(2*N-1)}return 1}}function Vt({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 s=>s<=0?0:s>=1?1:n*Math.pow(2,-10*s)*Math.sin((s-l)*(2*Math.PI)/t)+1}var ee={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:Nt(),elastic:Vt()};function pe(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 wt(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 vt(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 qe(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 zt(e,r,n){return Math.min(n,Math.max(r,e))}function Q(e,r,n,t){return n===r?0:zt((e-r)/(n-r)*t,0,1)}function Je(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 s=wt(e.top,e.height,r,t.element)-vt(t.viewport,n),c=wt(e.top,e.height,r,l.element)-vt(l.viewport,n);return {tStart:s,tEnd:c}}function Et(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 We(e,r,n){let t=Et(e),l=Et(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 St={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 Ke=typeof __SVG_SCROLL_DRAW_DEV__<"u"?__SVG_SCROLL_DRAW_DEV__:typeof process<"u"&&typeof process.env<"u"&&process.env.NODE_ENV!=="production";function ye(e,...r){Ke&&console.warn(`[svg-scroll-draw] ${e}`,...r);}var _t="cubic-bezier(0.333333, 0, 0.666667, 0.333333)",qt="cubic-bezier(0.333333, 0.666667, 0.666667, 1)",Tt=33;function Wt(){return typeof CSS<"u"&&typeof CSS.supports=="function"&&CSS.supports("animation-timing-function: linear(0, 1)")}function Bt(e){let r=[];for(let n=0;n<Tt;n++){let t=n/(Tt-1);r.push(String(Math.round(e(t)*1e5)/1e5));}return `linear(${r.join(",")})`}function et(e){switch(e){case "linear":return "linear";case "ease-in":return _t;case "ease-out":return qt;case "ease-in-out":return Wt()?Bt(ee["ease-in-out"]):null;default:return null}}var Gt=0;function jt(){return typeof CSS<"u"&&typeof CSS.supports=="function"&&CSS.supports("animation-timeline: view()")&&CSS.supports("view-timeline-name: --x")}function Ut(e){let r=e.getAttribute("stroke"),n=e.getAttribute("fill");!r||r==="none"?ye("Element has no stroke \u2014 path will not be visible.",e):n&&n!=="none"&&n!=="transparent"&&ye("Element has a fill \u2014 it may obscure the stroke animation.",e);}function Xt(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 s=n==="x"?window.scrollX:window.scrollY,c=e-s,u=r-s,m=n==="x";t.innerHTML=`
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 xt=/[-+]?(?:\d*\.)?\d+(?:[eE][-+]?\d+)?/g,Mt=/[MmLlHhVvCcSsQqTtAaZz]/g;function Yt(e,r,n){if(!Ke)return;let t=(e.match(Mt)??[]).join("").toUpperCase(),l=(r.match(Mt)??[]).join("").toUpperCase(),s=(e.match(xt)??[]).length,c=(r.match(xt)??[]).length;if(t!==l){ye(`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}s!==c&&ye(`morphTo: coordinate count differs (${s} \u2192 ${c}). Extra coordinates are ignored and missing ones hold their start value, so the result will not reach the target shape.`,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,s=>{let c=parseFloat(s),u=t[l++]??c;return String(+(c+(u-c)*n).toFixed(4))})}function it(e,r={}){if(typeof window>"u")return {destroy:()=>{},replay:()=>{},pause:()=>{},resume:()=>{},seek:()=>{},getProgress:()=>0};let{preset:n,...t}=r,l=n?{...St[n],...t}:t,s=window.matchMedia("(prefers-reduced-motion: reduce)").matches,{selector:c="path, polyline, line, polygon, rect, circle",speed:u=1,fade:m=false,easing:d="linear",trigger:x={},stagger:N=0,direction:L="forward",once:te=false,debug:Ae=false,axis:W="y",scrollContainer:Z,autoReverse:X=false,delay:B=0,strokeColor:M,strokeWidth:$,fillOpacity:A,waypoints:w,velocityScale:I=false,threshold:O=0,rootMargin:C="0px",repeat:S=0,repeatDelay:ne=0,morphTo:k,clip:re,autoplay:oe=false,duration:J=1e3,native:ue=true,onProgress:y,onStart:T,onComplete:g,onEnter:p,onLeave:H,onEnterBack:de,onLeaveBack:ve}=l,me=re===true?"left":typeof re=="string"?re:false,Ee=typeof d=="function"?d:ee[d]??ee.linear,Le=pe(x.start??"top bottom"),ze=pe(x.end??"bottom top"),he=typeof Z=="string"?document.querySelector(Z):Z??null,be=Array.isArray(M)?M[0]:null,se=Array.isArray(M)?M[1]:typeof M=="string"?M:null,ie=Array.isArray($)?$[0]:null,G=Array.isArray($)?$[1]:typeof $=="number"?$:null,fe=Array.isArray(A)?A[0]:null,Y=Array.isArray(A)?A[1]:typeof A=="number"?A:null;function $e(o){let a=o*100;switch(me){case "right":return `inset(0 0 0 ${100-a}%)`;case "top":return `inset(0 0 ${100-a}% 0)`;case "bottom":return `inset(${100-a}% 0 0 0)`;case "center":return `circle(${o*150}% at 50% 50%)`;default:return `inset(0 ${100-a}% 0 0)`}}let V=me?[]:Array.from(e.querySelectorAll(c)),P=[],i=[],f=0,we=0,F=false,z=false,_=0,j=false,ae=-1,Ce=-1,K=false,Se=0,ke=0,He,tt=null;function ft(){tt?.destroy(),tt=null;}let Fe=new Set,pt=NaN,Re=true,je=-1,dt=performance.now(),_e=NaN;function nt(){return he?W==="x"?he.scrollLeft:he.scrollTop:W==="x"?window.scrollX:window.scrollY}function gt(){return he?W==="x"?he.clientWidth:he.clientHeight:W==="x"?window.innerWidth:window.innerHeight}function yt(){let o=Je(e,he,W),a=xe(o,o.scroll,gt(),Le,ze);f=a.tStart,we=a.tEnd,Ae&&Ke&&(ft(),tt=Xt(f,we,W));}function Dt(o,a){if(e.style.setProperty("--scroll-draw-progress",String(o)),me){let v=a==="reverse"?1-o:o;e.style.clipPath=$e(v);return}V.forEach((v,le)=>{v.style.strokeDashoffset=a==="reverse"?`${P[le]*o}`:`${P[le]*(1-o)}`,m&&(v.style.opacity=a==="reverse"?`${1-o}`:`${o}`),be&&se?v.style.stroke=We(be,se,o):se&&(v.style.stroke=se),ie!==null&&G!==null?v.style.strokeWidth=`${ie+(G-ie)*o}`:G!==null&&(v.style.strokeWidth=`${G}`),fe!==null&&Y!==null?v.style.fillOpacity=`${fe+(Y-fe)*o}`:Y!==null&&(v.style.fillOpacity=`${Y}`),k&&v.tagName.toLowerCase()==="path"&&i[le]&&v.setAttribute("d",st(i[le],k,o));});}function Ue(){if(e.style.setProperty("--scroll-draw-progress","0"),me){e.style.clipPath=$e(0);return}V.forEach((o,a)=>{o.style.strokeDasharray=`${P[a]}`,o.style.strokeDashoffset=L==="reverse"?"0":`${P[a]}`,m?o.style.opacity=L==="reverse"?"1":"0":o.style.opacity="",be&&(o.style.stroke=be),ie!==null&&(o.style.strokeWidth=`${ie}`),fe!==null&&(o.style.fillOpacity=`${fe}`),k&&o.tagName.toLowerCase()==="path"&&i[a]&&o.setAttribute("d",i[a]);});}if(V.forEach(o=>{Ut(o);let a=qe(o);P.push(a);let v=o.tagName.toLowerCase()==="path";v?i.push(o.getAttribute("d")??""):i.push(""),k&&(v?Yt(i[i.length-1],k,o):ye(`morphTo only applies to <path> elements \u2014 ignored on <${o.tagName}>.`,o)),s?(o.style.strokeDasharray=`${a}`,o.style.strokeDashoffset=L==="reverse"?`${a}`:"0",m&&(o.style.opacity="1"),se&&(o.style.stroke=se),G!==null&&(o.style.strokeWidth=`${G}`),Y!==null&&(o.style.fillOpacity=`${Y}`),k&&o.tagName.toLowerCase()==="path"&&o.setAttribute("d",k)):(o.style.strokeDasharray=`${a}`,o.style.strokeDashoffset=L==="reverse"?"0":`${a}`,m?o.style.opacity=L==="reverse"?"1":"0":o.style.opacity="",be&&(o.style.stroke=be),ie!==null&&(o.style.strokeWidth=`${ie}`),fe!==null&&(o.style.fillOpacity=`${fe}`));}),me){if(s)return e.style.clipPath=$e(1),g?.(),{destroy:()=>{},replay:()=>{},pause:()=>{},resume:()=>{},seek:()=>{},getProgress:()=>1};e.style.clipPath=$e(0);}else if(s)return g?.(),{destroy:()=>{},replay:()=>{},pause:()=>{},resume:()=>{},seek:()=>{},getProgress:()=>1};let ht=typeof d=="string"?et(d):null;function Ht(){return !(ue===false||!jt()||!V.length||!ht||me||W!=="y"||he||u!==1||N!==0||te||X||I!==false||k||w||S||B>0||y||T||g||p||H||de||ve||M!=null||$!=null||A!=null||(x.start??"top bottom").trim()!=="top bottom"||(x.end??"bottom top").trim()!=="bottom top")}function Ft(){let o=++Gt,a=`svg-scroll-draw-${o}`,v=`svg-scroll-draw-host-${o}`,le=`--svg-scroll-draw-${o}`,De=L==="reverse"?"0":"var(--ssd-len)",Pe=L==="reverse"?"var(--ssd-len)":"0",Me=`stroke-dashoffset:${De};`,E=`stroke-dashoffset:${Pe};`;m&&(Me+=`opacity:${L==="reverse"?1:0};`,E+=`opacity:${L==="reverse"?0:1};`);let D=document.createElement("style");D.setAttribute("data-svg-scroll-draw",""),D.textContent=`@keyframes ${a}{from{${Me}}to{${E}}}.${v}{view-timeline-name:${le};view-timeline-axis:block;}.${a}{animation-name:${a};animation-duration:auto;animation-timing-function:${ht};animation-fill-mode:both;animation-timeline:${le};animation-range:cover 0% cover 100%;}`,document.head.appendChild(D),e.classList.add(v);function ce(h,U){h.style.setProperty("--ssd-len",String(P[U])),h.style.strokeDasharray=`${P[U]}`,h.style.strokeDashoffset="",h.style.opacity="",h.style.animationPlayState="",h.classList.add(a);}V.forEach(ce);let b=false,R=-1;function q(){if(R>=0)return R;let h=e.getBoundingClientRect(),{tStart:U,tEnd:Te}=xe({top:h.top,height:h.height},nt(),gt(),Le,ze);return Ee(Q(nt(),U,Te,u))}return {destroy(){e.classList.remove(v),V.forEach(h=>{h.classList.remove(a),h.style.removeProperty("--ssd-len"),h.style.animationPlayState="";}),D.remove();},replay(){b=false,R=-1,V.forEach(ce);},pause(){b=true,V.forEach(h=>{h.style.animationPlayState="paused";});},resume(){b&&(b=false,V.forEach(h=>{h.style.animationPlayState="running";}));},seek(h){let U=Math.min(1,Math.max(0,h));R=U,b=true,V.forEach((Te,ge)=>{Te.classList.remove(a),Te.style.strokeDashoffset=L==="reverse"?`${P[ge]*U}`:`${P[ge]*(1-U)}`,m&&(Te.style.opacity=L==="reverse"?`${1-U}`:`${U}`);});},getProgress(){return q()},refresh(){V.forEach((h,U)=>{P[U]=qe(h),h.style.setProperty("--ssd-len",String(P[U])),h.style.strokeDasharray=`${P[U]}`;});}}}if(Ht())return Ft();function Rt(){let o=Math.max(1,J),a=0,v=0,le=false;function De(b){let R=true;if(me){let q=Math.min(1,Math.max(0,b/o)),h=Ee(q);Se=h,e.style.setProperty("--scroll-draw-progress",String(h)),e.style.clipPath=$e(L==="reverse"?1-h:h),y?.(h),q<1&&(R=false);}else V.forEach((q,h)=>{let U=h*N*o,Te=Math.min(1,Math.max(0,(b-U)/o)),ge=Ee(Te);q.style.strokeDashoffset=L==="reverse"?`${P[h]*ge}`:`${P[h]*(1-ge)}`,m&&(q.style.opacity=L==="reverse"?`${1-ge}`:`${ge}`),be&&se?q.style.stroke=We(be,se,ge):se&&(q.style.stroke=se),ie!==null&&G!==null?q.style.strokeWidth=`${ie+(G-ie)*ge}`:G!==null&&(q.style.strokeWidth=`${G}`),fe!==null&&Y!==null?q.style.fillOpacity=`${fe+(Y-fe)*ge}`:Y!==null&&(q.style.fillOpacity=`${Y}`),k&&q.tagName.toLowerCase()==="path"&&i[h]&&q.setAttribute("d",st(i[h],k,ge)),h===0&&(Se=ge,y?.(ge),e.style.setProperty("--scroll-draw-progress",String(ge))),Te<1&&(R=false);});if(w){let q=Math.min(1,Math.max(0,b/o)),h=Ee(q);for(let U in w){let Te=parseFloat(U);h>=Te&&!Fe.has(Te)&&(Fe.add(Te),w[U]?.());}}return R}function Pe(b){if(K)return;let R=b-a;z||(z=true,T?.());let q=De(R);if(q&&!F){F=true,De(o*(1+Math.max(0,V.length-1)*N)),g?.(),ke<(S==="infinite"?1/0:S??0)&&(ke++,He=setTimeout(()=>{a=performance.now(),z=false,F=false,Fe.clear(),Ue(),_=requestAnimationFrame(Pe);},ne));return}q||(_=requestAnimationFrame(Pe));}function Me(){cancelAnimationFrame(_),clearTimeout(He),a=performance.now(),v=0,K=false,z=false,F=false,ke=0,le=true,Se=0,Fe.clear(),Ue(),_=requestAnimationFrame(Pe);}let E=new IntersectionObserver(b=>{b.forEach(R=>{R.isIntersecting&&!(te&&F)?Me():!R.isIntersecting&&!te&&!F&&(cancelAnimationFrame(_),clearTimeout(He),le=false);});},{root:he??null,threshold:O,rootMargin:C}),D;function ce(){clearTimeout(D),D=setTimeout(()=>{V.forEach((b,R)=>{P[R]=qe(b),b.style.strokeDasharray=`${P[R]}`;});},150);}return window.addEventListener("resize",ce),window.addEventListener("orientationchange",ce),B>0?setTimeout(()=>E.observe(e),B):E.observe(e),{destroy(){cancelAnimationFrame(_),clearTimeout(He),E.disconnect(),window.removeEventListener("resize",ce),window.removeEventListener("orientationchange",ce),clearTimeout(D);},replay(){ke=0,Me();},pause(){K||!le||(K=true,v=performance.now()-a,cancelAnimationFrame(_));},resume(){K&&(K=false,le=true,a=performance.now()-v,_=requestAnimationFrame(Pe));},seek(b){let R=Math.min(1,Math.max(0,b));Se=R,K=true,v=R*o,a=performance.now()-v,cancelAnimationFrame(_),De(v);},getProgress(){return Se},refresh(){clearTimeout(D),V.forEach((b,R)=>{P[R]=qe(b),b.style.strokeDasharray=`${P[R]}`;});}}}if(oe)return Rt();yt();function Xe(){if(!j||K)return;let o=performance.now(),a=nt();if(!Re&&I===false&&a===pt){_=requestAnimationFrame(Xe);return}Re=false,pt=a;let v=u;if(I!==false){let E=o-dt,D=E>0?Math.abs(a-(je<0?a:je))/E:0;v=u*Math.max(.2,1+D*(typeof I=="number"?I:1)*.04);}je=a,dt=o;let le=X?Ce===-1||a>=Ce?"forward":"reverse":L;Ce=a;let De=we-f,Pe=true,Me=De===0?0:(a-f)/De;if(isNaN(_e)||(_e<=0&&Me>0?p?.():_e>0&&Me<=0&&ve?.(),_e<1&&Me>=1?H?.():_e>=1&&Me<1&&de?.()),_e=Me,me){let E=Ee(Q(a,f,we,v));te&&!X&&(ae=Math.max(ae,E),E=ae),Se=E,e.style.setProperty("--scroll-draw-progress",String(E));let D=le==="reverse"?1-E:E;e.style.clipPath=$e(D),y?.(E),!z&&Q(a,f,we,v)>0&&(z=true,T?.()),E>=1&&!F?(F=true,g?.(),ke<(S==="infinite"?1/0:S??0)&&(ke++,He=setTimeout(()=>{ae=-1,z=false,F=false,e.style.clipPath=$e(0);},ne))):E<1&&!te&&(F=false),_=requestAnimationFrame(Xe);return}if(V.forEach((E,D)=>{let ce=D*N*De,b=Ee(Q(a,f+ce,we+ce,v));te&&!X&&(ae=Math.max(ae,b),b=ae),Se=b,E.style.strokeDashoffset=le==="reverse"?`${P[D]*b}`:`${P[D]*(1-b)}`,m&&(E.style.opacity=le==="reverse"?`${1-b}`:`${b}`),be&&se?E.style.stroke=We(be,se,b):se&&(E.style.stroke=se),ie!==null&&G!==null?E.style.strokeWidth=`${ie+(G-ie)*b}`:G!==null&&(E.style.strokeWidth=`${G}`),fe!==null&&Y!==null?E.style.fillOpacity=`${fe+(Y-fe)*b}`:Y!==null&&(E.style.fillOpacity=`${Y}`),k&&E.tagName.toLowerCase()==="path"&&i[D]&&E.setAttribute("d",st(i[D],k,b)),D===0&&(y?.(b),e.style.setProperty("--scroll-draw-progress",String(b))),b<1&&(Pe=false);}),w){let E=Ee(Q(a,f,we,v));for(let D in w){let ce=parseFloat(D);E>=ce&&!Fe.has(ce)&&(Fe.add(ce),w[D]?.());}}!z&&Q(a,f,we,v)>0&&(z=true,T?.()),Pe&&!F?(F=true,g?.(),ke<(S==="infinite"?1/0:S??0)&&(ke++,He=setTimeout(()=>{ae=-1,z=false,F=false,Fe.clear(),Ue(),Re=true;},ne))):!Pe&&!te&&(F=false),_=requestAnimationFrame(Xe);}let rt=false;function Ye(){rt||(rt=true,_=requestAnimationFrame(function(){Xe();}));}function Qe(){rt=false,cancelAnimationFrame(_);}let ot=new IntersectionObserver(o=>{o.forEach(a=>{j=a.isIntersecting,j&&!K?(Re=true,Ye()):Qe();});},{root:he??null,threshold:O,rootMargin:C});function bt(){V.forEach((o,a)=>{P[a]=qe(o),o.style.strokeDasharray=`${P[a]}`;}),yt(),Re=true;}let Ze;function Be(){clearTimeout(Ze),Ze=setTimeout(bt,150);}window.addEventListener("resize",Be),window.addEventListener("orientationchange",Be);let Ge;return typeof ResizeObserver<"u"&&(Ge=new ResizeObserver(()=>Be()),Ge.observe(document.body),Ge.observe(document.documentElement),Ge.observe(e)),B>0?setTimeout(()=>ot.observe(e),B):ot.observe(e),{destroy(){cancelAnimationFrame(_),clearTimeout(He),Qe(),ot.disconnect(),Ge?.disconnect(),window.removeEventListener("resize",Be),window.removeEventListener("orientationchange",Be),clearTimeout(Ze),ft();},replay(){ae=-1,Ce=-1,je=-1,z=false,F=false,ke=0,K=false,Se=0,Fe.clear(),clearTimeout(He),Ue(),Re=true,j&&Ye();},pause(){K=true,Qe();},resume(){K&&(K=false,Re=true,j&&Ye());},seek(o){let a=Math.min(1,Math.max(0,o));Se=a,ae=a,K=true,Qe(),Dt(a,L),Re=true;},getProgress(){return Se},refresh(){clearTimeout(Ze),bt(),j&&!K&&Ye();}}}var At=new Map;function Ne(e,r){At.set(e,r);}function Ve(e){At.delete(e);}function Qt(e){return e.startsWith("#")||e.startsWith("rgb")||e.startsWith("hsl")}function Lt(e){let r=[],n=/([\w]+)\(([^)]*)\)/g,t;for(;(t=n.exec(e))!==null;){let l=[],s=[],c=t[2].trim();if(c)for(let u of c.split(/[\s,]+/)){let m=u.match(/^([-+]?[\d.eE]+)(.*)$/);l.push(m?parseFloat(m[1]):0),s.push(m?m[2]:"");}r.push({fn:t[1],nums:l,units:s});}return r}function Zt(e,r,n){let t=Lt(e),l=Lt(r);return t.length===0||t.length!==l.length?n<1?e:r:t.map((s,c)=>{let u=l[c];return s.fn!==u.fn||s.nums.length!==u.nums.length?n<1?`${s.fn}(${s.nums.map((m,d)=>`${m}${s.units[d]}`).join(", ")})`:`${u.fn}(${u.nums.map((m,d)=>`${m}${u.units[d]}`).join(", ")})`:`${s.fn}(${s.nums.map((m,d)=>`${m+(u.nums[d]-m)*n}${s.units[d]}`).join(", ")})`}).join(" ")}function $t(e,r,n){if(typeof e=="number"&&typeof r=="number")return String(e+(r-e)*n);let t=String(e),l=String(r);if(Qt(t))return We(t,l,n);if(t.includes("("))return Zt(t,l,n);let s=t.match(/^([-+]?[\d.]+)(.*)$/),c=l.match(/^([-+]?[\d.]+)(.*)$/);if(s&&c){let u=parseFloat(s[1]),m=parseFloat(c[1]);return `${u+(m-u)*n}${s[2]||c[2]}`}return n<1?t:l}function Jt(e){return e.replace(/([A-Z])/g,r=>`-${r.toLowerCase()}`)}var Kt=new Set(["opacity","transform","background-color","color","filter","scale","translate","rotate"]),en=0,Ct="--scroll-draw-progress";function tn(){return typeof CSS<"u"&&typeof CSS.supports=="function"&&CSS.supports("animation-timeline: view()")}function at(e,r){let n={destroy:()=>{},replay:()=>{},pause:()=>{},resume:()=>{},seek:()=>{},getProgress:()=>0};if(typeof window>"u")return n;let{props:t,trigger:l={},easing:s="ease-out",speed:c=1,once:u=false,axis:m="y",scrollContainer:d,native:x=true,velocityScale:N=false,respectReducedMotion:L=true,triggerElement:te,onProgress:Ae,onComplete:W,onEnter:Z,onLeave:X,onEnterBack:B,onLeaveBack:M}=r,$=L&&window.matchMedia("(prefers-reduced-motion: reduce)").matches,A=typeof s=="function"?s:ee[s]??ee["ease-out"],w=pe(l.start??"top bottom"),I=pe(l.end??"bottom top"),O=te??e,C=typeof d=="string"?document.querySelector(d):d??null,S=Object.entries(t).map(([i,f])=>({prop:Jt(i),from:Array.isArray(f)?f[0]:"",to:Array.isArray(f)?f[1]:f}));function ne(){let i=window.getComputedStyle(e);for(let f of S)f.from===""&&(f.from=i.getPropertyValue(f.prop).trim()||"0");}function k(){for(let i of S)e.style.setProperty(i.prop,String(i.to));}let re=new Map;for(let i of [...S.map(f=>f.prop),Ct])re.set(i,e.style.getPropertyValue(i));function oe(){for(let[i,f]of re)f?e.style.setProperty(i,f):e.style.removeProperty(i);}if($)return k(),W?.(),{...n,destroy:oe,getProgress:()=>1};ne();let J=typeof s=="string"?et(s):null;function ue(){if(!x||!tn()||!J||m!=="y"||C||O!==e||u||c!==1||Ae||W||Z||X||B||M||N!==false||(l.start??"top bottom").trim()!=="top bottom"||(l.end??"bottom top").trim()!=="bottom top")return false;for(let i of S)if(!Kt.has(i.prop))return false;return true}function y(){let i=`ssd-a-${++en}`,f=S.map(j=>`${j.prop}:${j.from}`).join(";"),we=S.map(j=>`${j.prop}:${j.to}`).join(";"),F=document.createElement("style");F.setAttribute("data-ssd-animate",""),F.textContent=`@keyframes ${i}{from{${f}}to{${we}}}.${i}{animation-name:${i};animation-duration:auto;animation-timing-function:${J};animation-fill-mode:both;animation-timeline:view();animation-range:cover 0% cover 100%;}`,document.head.appendChild(F),e.classList.add(i);let z=()=>m==="x"?window.scrollX:window.scrollY,_=()=>m==="x"?window.innerWidth:window.innerHeight;return {destroy(){e.classList.remove(i),F.remove(),e.style.animationPlayState="",oe();},replay(){e.classList.remove(i),e.offsetWidth,e.classList.add(i);},pause(){e.style.animationPlayState="paused";},resume(){e.style.animationPlayState="";},seek(j){let ae=Math.min(1,Math.max(0,j));e.classList.remove(i);for(let Ce of S)e.style.setProperty(Ce.prop,$t(Ce.from,Ce.to,ae));},getProgress(){let j=e.getBoundingClientRect(),ae=z(),Ce=_(),{tStart:K,tEnd:Se}=xe({top:j.top,height:j.height},ae,Ce,w,I);return A(Q(ae,K,Se,c))}}}if(ue())return y();let T=0,g=0,p=0,H=false,de=false,ve=-1,me=0,Ee=false,Le=NaN,ze=-1,he=0,be=()=>C?m==="x"?C.scrollLeft:C.scrollTop:m==="x"?window.scrollX:window.scrollY,se=()=>C?m==="x"?C.clientWidth:C.clientHeight:m==="x"?window.innerWidth:window.innerHeight;function ie(){let i=Je(O,C,m),f=xe(i,i.scroll,se(),w,I);T=f.tStart,g=f.tEnd;}function G(i){e.style.setProperty(Ct,String(i));for(let f of S)e.style.setProperty(f.prop,$t(f.from,f.to,i));Ae?.(i);}function fe(i){if(isNaN(Le)){Le=i;return}Le<=0&&i>0?Z?.():Le>0&&i<=0&&M?.(),Le<1&&i>=1?X?.():Le>=1&&i<1&&B?.(),Le=i;}function Y(){if(!H||de)return;let i=performance.now(),f=be(),we=c;if(N!==false){let _=i-he,j=_>0?Math.abs(f-(ze<0?f:ze))/_:0;we=c*Math.max(.2,1+j*(typeof N=="number"?N:1)*.04);}ze=f,he=i;let F=g===T?0:(f-T)/(g-T);fe(F);let z=A(Q(f,T,g,we));u&&(ve=Math.max(ve,z),z=ve),me=z,G(z),z>=1&&!Ee?(Ee=true,W?.()):z<1&&!u&&(Ee=false),p=requestAnimationFrame(Y);}ie(),g===T&&ye("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=A(Q(be(),T,g,c));u&&i>0&&(ve=i),me=i,G(i);}let $e=new IntersectionObserver(i=>{i.forEach(f=>{H=f.isIntersecting,H&&!de?p=requestAnimationFrame(Y):cancelAnimationFrame(p);});},{root:C??null}),V;function P(){clearTimeout(V),V=setTimeout(ie,150);}return window.addEventListener("resize",P),window.addEventListener("orientationchange",P),$e.observe(e),Ne(e,{type:"animate",getProgress:()=>me,getTrigger:()=>({tStart:T,tEnd:g})}),{destroy(){cancelAnimationFrame(p),$e.disconnect(),window.removeEventListener("resize",P),window.removeEventListener("orientationchange",P),clearTimeout(V),oe(),Ve(e);},replay(){ve=-1,Ee=false,me=0,de=false,G(0);},pause(){de=true,cancelAnimationFrame(p);},resume(){de&&(de=false,H&&(p=requestAnimationFrame(Y)));},seek(i){let f=Math.min(1,Math.max(0,i));me=f,ve=f,de=true,cancelAnimationFrame(p),G(f);},getProgress(){return me}}}var lt={destroy:()=>{},replay:()=>{},pause:()=>{},resume:()=>{},seek:()=>{},getProgress:()=>0};function ct(e,r){if(typeof window>"u")return lt;let n=typeof e=="string"?document.querySelector(e):e;if(!n)return ye("scrollCounter: element not found:",e),lt;let t=n,{from:l=0,to:s,format:c,easing:u="ease-out",trigger:m={},once:d=true,decimals:x,onComplete:N}=r,L=x!==void 0?y=>y.toFixed(x):c??(y=>String(Math.round(y))),te=typeof u=="function"?u:ee[u]??ee["ease-out"],Ae=pe(m.start??"top 80%"),W=pe(m.end??"top 20%");if(window.matchMedia("(prefers-reduced-motion: reduce)").matches)return t.textContent=L(s),N?.(),lt;let X=0,B=0,M=0,$=false,A=false,w=-1,I=0,O=false,C=()=>window.scrollY,S=()=>window.innerHeight;function ne(){let y=t.getBoundingClientRect(),T=xe({top:y.top,height:y.height},C(),S(),Ae,W);X=T.tStart,B=T.tEnd;}function k(y){t.textContent=L(l+(s-l)*y),t.style.setProperty("--scroll-draw-progress",String(y));}function re(){if(!$||A)return;let y=te(Q(C(),X,B,1));d&&(w=Math.max(w,y),y=w),I=y,k(y),y>=1&&!O?(O=true,N?.()):y<1&&!d&&(O=false),M=requestAnimationFrame(re);}ne();{let y=te(Q(C(),X,B,1));d&&y>0&&(w=y),I=y,k(y);}let oe=new IntersectionObserver(y=>{y.forEach(T=>{$=T.isIntersecting,$&&!A?M=requestAnimationFrame(re):cancelAnimationFrame(M);});}),J;function ue(){clearTimeout(J),J=setTimeout(ne,150);}return window.addEventListener("resize",ue),window.addEventListener("orientationchange",ue),oe.observe(t),Ne(t,{type:"counter",getProgress:()=>I,getTrigger:()=>({tStart:X,tEnd:B})}),{destroy(){cancelAnimationFrame(M),oe.disconnect(),window.removeEventListener("resize",ue),window.removeEventListener("orientationchange",ue),clearTimeout(J),Ve(t);},replay(){w=-1,O=false,I=0,A=false,k(0);},pause(){A=true,cancelAnimationFrame(M);},resume(){A&&(A=false,$&&(M=requestAnimationFrame(re)));},seek(y){let T=Math.min(1,Math.max(0,y));I=T,w=T,A=true,cancelAnimationFrame(M),k(T);},getProgress(){return I}}}var Pt={destroy:()=>{},replay:()=>{},pause:()=>{},resume:()=>{},seek:()=>{},getProgress:()=>0};function ut(e,r={}){if(typeof window>"u")return Pt;let n=typeof e=="string"?document.querySelector(e):e;if(!n||n.tagName.toLowerCase()!=="video")return ye("scrollVideo: <video> element not found:",e),Pt;let t=n,{trigger:l={},easing:s="linear",once:c=false,axis:u="y",preload:m="auto",onReady:d,onComplete:x,onProgress:N}=r,L=window.matchMedia("(prefers-reduced-motion: reduce)").matches,te=typeof s=="function"?s:ee[s]??ee.linear,Ae=pe(l.start??"top top"),W=pe(l.end??"bottom top");t.pause(),t.hasAttribute("preload")||(t.preload=m);let Z=r.from??0,X=r.to,B=0,M=0,$=0,A=false,w=false,I=-1,O=0,C=false,S=false,ne=()=>u==="x"?window.scrollX:window.scrollY,k=()=>u==="x"?window.innerWidth:window.innerHeight;function re(){let p=t.getBoundingClientRect(),H=u==="x"?p.left:p.top,de=u==="x"?p.width:p.height,ve=xe({top:H,height:de},ne(),k(),Ae,W);B=ve.tStart,M=ve.tEnd;}function oe(p){if(!S)return;let H=X??t.duration??0;t.currentTime=Z+(H-Z)*p,t.style.setProperty("--scroll-draw-progress",String(p)),N?.(p);}function J(){if(!A||w||!S)return;let p=te(Q(ne(),B,M,1));c&&(I=Math.max(I,p),p=I),O=p,oe(p),p>=1&&!C?(C=true,x?.()):p<1&&!c&&(C=false),$=requestAnimationFrame(J);}function ue(){if(S=true,X===void 0&&(X=t.duration),L){oe(1),d?.();return}re(),d?.(),A&&!w&&($=requestAnimationFrame(J));}t.readyState>=1?ue():t.addEventListener("loadedmetadata",ue,{once:true}),S||re();let y=new IntersectionObserver(p=>{p.forEach(H=>{A=H.isIntersecting,A&&!w&&S?$=requestAnimationFrame(J):cancelAnimationFrame($);});}),T;function g(){clearTimeout(T),T=setTimeout(re,150);}return window.addEventListener("resize",g),window.addEventListener("orientationchange",g),y.observe(t),Ne(t,{type:"video",getProgress:()=>O,getTrigger:()=>({tStart:B,tEnd:M})}),{destroy(){cancelAnimationFrame($),y.disconnect(),t.removeEventListener("loadedmetadata",ue),window.removeEventListener("resize",g),window.removeEventListener("orientationchange",g),clearTimeout(T),Ve(t);},replay(){I=-1,C=false,O=0,w=false,oe(0);},pause(){w=true,cancelAnimationFrame($);},resume(){w&&(w=false,A&&S&&($=requestAnimationFrame(J)));},seek(p){let H=Math.min(1,Math.max(0,p));O=H,I=H,w=true,cancelAnimationFrame($),oe(H);},getProgress(){return O}}}function kt(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 nn(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 It(e){let r=kt(e),n=new Map;for(let s of r){let c=s.offsetTop;n.has(c)||n.set(c,[]),n.get(c).push(s);}let t=[],l=Array.from(n.keys()).sort((s,c)=>s-c);for(let s of l){let c=n.get(s),u=document.createElement("span");u.setAttribute("aria-hidden","true"),u.style.display="inline-block",c.forEach((m,d)=>{let x=m.nextElementSibling;u.appendChild(m),d<c.length-1&&x&&x.style.whiteSpace==="pre"&&u.appendChild(x);}),t.push(u);}return e.textContent="",t.forEach((s,c)=>{e.appendChild(s),c<t.length-1&&e.appendChild(document.createTextNode(" "));}),t}function rn(e,r,n,t){if(n<=1||t===0)return e;let l=(n-1)*t,s=r*t,c=s+(1-l);return c<=s?e>=s?1:0:Math.min(1,Math.max(0,(e-s)/(c-s)))}function on(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 Ot={destroy:()=>{},replay:()=>{},pause:()=>{},resume:()=>{},seek:()=>{},getProgress:()=>0};function mt(e,r={}){if(typeof window>"u")return Ot;let n=typeof e=="string"?document.querySelector(e):e;if(!n)return ye("scrollText: element not found:",e),Ot;let t=n,{split:l="words",stagger:s=.04,easing:c="ease-out",from:u={opacity:0,y:24},trigger:m={},once:d=true,onComplete:x}=r,N=window.matchMedia("(prefers-reduced-motion: reduce)").matches,L=typeof c=="function"?c:ee[c]??ee["ease-out"],te=pe(m.start??"top 85%"),Ae=pe(m.end??"top 40%"),W=t.innerHTML;t.setAttribute("aria-label",t.textContent??"");let Z;l==="chars"?Z=nn(t):l==="lines"?Z=It(t):Z=kt(t);let X=Z.length;function B(g,p){u?.opacity!==void 0&&(g.style.opacity=String(u.opacity+(1-u.opacity)*p));let H=on(p,u);H&&(g.style.transform=H);}function M(g){t.style.setProperty("--scroll-draw-progress",String(g)),Z.forEach((p,H)=>{let de=L(rn(g,H,X,s));B(p,de);});}if(N)return M(1),x?.(),{destroy(){t.innerHTML=W,t.removeAttribute("aria-label");},replay:()=>{},pause:()=>{},resume:()=>{},seek:()=>{},getProgress:()=>1};M(0);let $=0,A=0,w=0,I=false,O=false,C=-1,S=0,ne=false,k=()=>window.scrollY,re=()=>window.innerHeight;function oe(){let g=t.getBoundingClientRect(),p=xe({top:g.top,height:g.height},k(),re(),te,Ae);$=p.tStart,A=p.tEnd;}function J(){if(!I||O)return;let g=Q(k(),$,A,1);d&&(C=Math.max(C,g),g=C),S=g,M(g),g>=1&&!ne?(ne=true,x?.()):g<1&&!d&&(ne=false),w=requestAnimationFrame(J);}oe();let ue=new IntersectionObserver(g=>{g.forEach(p=>{I=p.isIntersecting,I&&!O?w=requestAnimationFrame(J):cancelAnimationFrame(w);});}),y;function T(){clearTimeout(y),y=setTimeout(()=>{if(l==="lines"){let g=S;t.innerHTML=W,t.setAttribute("aria-label",t.textContent??""),Z=It(t),M(g);}oe();},150);}return window.addEventListener("resize",T),window.addEventListener("orientationchange",T),ue.observe(t),Ne(t,{type:"text",getProgress:()=>S,getTrigger:()=>({tStart:$,tEnd:A})}),{destroy(){cancelAnimationFrame(w),ue.disconnect(),window.removeEventListener("resize",T),window.removeEventListener("orientationchange",T),clearTimeout(y),t.innerHTML=W,t.removeAttribute("aria-label"),Ve(t);},replay(){C=-1,ne=false,S=0,O=false,M(0);},pause(){O=true,cancelAnimationFrame(w);},resume(){O&&(O=false,I&&(w=requestAnimationFrame(J)));},seek(g){let p=Math.min(1,Math.max(0,g));S=p,C=p,O=true,cancelAnimationFrame(w),M(p);},getProgress(){return S}}}function zn(e={}){let r,n;return solidJs.onMount(()=>{r&&(n=it(r,e));}),solidJs.onCleanup(()=>{n?.destroy();}),t=>{r=t;}}function _n(e={}){let r,n;return solidJs.onMount(()=>{r&&(n=it(r,e));}),solidJs.onCleanup(()=>{n?.destroy(),n=void 0;}),{ref:t=>{r=t;},getInstance:()=>n}}function qn(e){let r,n;return solidJs.onMount(()=>{r&&(n=at(r,e));}),solidJs.onCleanup(()=>{n?.destroy();}),t=>{r=t;}}function Wn(e){let r,n;return solidJs.onMount(()=>{r&&(n=at(r,e));}),solidJs.onCleanup(()=>{n?.destroy(),n=void 0;}),{ref:t=>{r=t;},getInstance:()=>n}}function Bn(e){let r,n;return solidJs.onMount(()=>{r&&(n=ct(r,e));}),solidJs.onCleanup(()=>{n?.destroy();}),t=>{r=t;}}function Gn(e){let r,n;return solidJs.onMount(()=>{r&&(n=ct(r,e));}),solidJs.onCleanup(()=>{n?.destroy(),n=void 0;}),{ref:t=>{r=t;},getInstance:()=>n}}function jn(e={}){let r,n;return solidJs.onMount(()=>{r&&(n=ut(r,e));}),solidJs.onCleanup(()=>{n?.destroy();}),t=>{r=t;}}function Un(e={}){let r,n;return solidJs.onMount(()=>{r&&(n=ut(r,e));}),solidJs.onCleanup(()=>{n?.destroy(),n=void 0;}),{ref:t=>{r=t;},getInstance:()=>n}}function Xn(e={}){let r,n;return solidJs.onMount(()=>{r&&(n=mt(r,e));}),solidJs.onCleanup(()=>{n?.destroy();}),t=>{r=t;}}function Yn(e={}){let r,n;return solidJs.onMount(()=>{r&&(n=mt(r,e));}),solidJs.onCleanup(()=>{n?.destroy(),n=void 0;}),{ref:t=>{r=t;},getInstance:()=>n}}exports.createScrollAnimate=Wn;exports.createScrollCounter=Gn;exports.createScrollDraw=_n;exports.createScrollText=Yn;exports.createScrollVideo=Un;exports.useScrollAnimate=qn;exports.useScrollCounter=Bn;exports.useScrollDraw=zn;exports.useScrollText=Xn;exports.useScrollVideo=jn;
@@ -125,6 +125,21 @@ interface ScrollDrawInstance {
125
125
  seek: (progress: number) => void;
126
126
  /** Returns current draw progress (0–1). */
127
127
  getProgress: () => number;
128
+ /**
129
+ * Re-measure after a layout change: path lengths, and the scroll trigger window.
130
+ *
131
+ * The engine already re-measures on `resize`, on `orientationchange`, and via a
132
+ * `ResizeObserver` on the document element — but none of those fire for a layout
133
+ * change that leaves the document height alone, such as a tab switching, a
134
+ * sibling collapsing, or a font swapping inside a fixed-height box. Call this
135
+ * after one of those.
136
+ *
137
+ * Optional on this shared type because several instances here are fan-outs over
138
+ * other instances or SSR no-op stubs. `scrollDraw`, `scrollPin`,
139
+ * `scrollHorizontal`, `scrollDrawTimeline` and the group APIs all provide it;
140
+ * use `instance.refresh?.()` if you hold an instance of unknown origin.
141
+ */
142
+ refresh?: () => void;
128
143
  }
129
144
 
130
145
  interface ScrollAnimateOptions {
@@ -136,6 +151,39 @@ interface ScrollAnimateOptions {
136
151
  axis?: 'x' | 'y';
137
152
  scrollContainer?: string | Element;
138
153
  native?: boolean;
154
+ /**
155
+ * Scale animation speed by scroll velocity — faster scrolling = faster animation.
156
+ * Pass `true` for default sensitivity (1) or a number to control it.
157
+ * Higher values = more dramatic speed-up. Default sensitivity: 1.
158
+ */
159
+ velocityScale?: boolean | number;
160
+ /**
161
+ * Honour `prefers-reduced-motion: reduce` by applying the final state and not
162
+ * animating. Default: `true`.
163
+ *
164
+ * Set to `false` only when the movement is *scroll-linked scrubbing* rather
165
+ * than autonomous motion — it advances solely as the user scrolls, 1:1 with
166
+ * their input, so it is direct manipulation rather than something that plays at
167
+ * them. `scrollHorizontal` sets this, because jumping to the final state there
168
+ * would leave every panel but the last unreachable inside the sticky
169
+ * `overflow: hidden` container.
170
+ */
171
+ respectReducedMotion?: boolean;
172
+ /**
173
+ * Element whose geometry defines the trigger window, when that is not the
174
+ * element being animated. Defaults to the animated element.
175
+ *
176
+ * Needed whenever the animated element cannot supply the scroll length itself —
177
+ * the case that matters is a `position: sticky` stage, where the pinned element
178
+ * is exactly one viewport tall and all of the scroll room belongs to its
179
+ * container. Resolving `top top` → `bottom bottom` against the pinned element
180
+ * there yields tStart === tEnd, a zero-length window, and no movement at all.
181
+ *
182
+ * Setting this disables the native CSS fast path: `animation-timeline: view()`
183
+ * always measures the element the animation is attached to, so it cannot express
184
+ * a separate subject.
185
+ */
186
+ triggerElement?: Element;
139
187
  onProgress?: (alpha: number) => void;
140
188
  onComplete?: () => void;
141
189
  /** Fires when scroll enters the trigger zone (scrolling forward). */
@@ -125,6 +125,21 @@ interface ScrollDrawInstance {
125
125
  seek: (progress: number) => void;
126
126
  /** Returns current draw progress (0–1). */
127
127
  getProgress: () => number;
128
+ /**
129
+ * Re-measure after a layout change: path lengths, and the scroll trigger window.
130
+ *
131
+ * The engine already re-measures on `resize`, on `orientationchange`, and via a
132
+ * `ResizeObserver` on the document element — but none of those fire for a layout
133
+ * change that leaves the document height alone, such as a tab switching, a
134
+ * sibling collapsing, or a font swapping inside a fixed-height box. Call this
135
+ * after one of those.
136
+ *
137
+ * Optional on this shared type because several instances here are fan-outs over
138
+ * other instances or SSR no-op stubs. `scrollDraw`, `scrollPin`,
139
+ * `scrollHorizontal`, `scrollDrawTimeline` and the group APIs all provide it;
140
+ * use `instance.refresh?.()` if you hold an instance of unknown origin.
141
+ */
142
+ refresh?: () => void;
128
143
  }
129
144
 
130
145
  interface ScrollAnimateOptions {
@@ -136,6 +151,39 @@ interface ScrollAnimateOptions {
136
151
  axis?: 'x' | 'y';
137
152
  scrollContainer?: string | Element;
138
153
  native?: boolean;
154
+ /**
155
+ * Scale animation speed by scroll velocity — faster scrolling = faster animation.
156
+ * Pass `true` for default sensitivity (1) or a number to control it.
157
+ * Higher values = more dramatic speed-up. Default sensitivity: 1.
158
+ */
159
+ velocityScale?: boolean | number;
160
+ /**
161
+ * Honour `prefers-reduced-motion: reduce` by applying the final state and not
162
+ * animating. Default: `true`.
163
+ *
164
+ * Set to `false` only when the movement is *scroll-linked scrubbing* rather
165
+ * than autonomous motion — it advances solely as the user scrolls, 1:1 with
166
+ * their input, so it is direct manipulation rather than something that plays at
167
+ * them. `scrollHorizontal` sets this, because jumping to the final state there
168
+ * would leave every panel but the last unreachable inside the sticky
169
+ * `overflow: hidden` container.
170
+ */
171
+ respectReducedMotion?: boolean;
172
+ /**
173
+ * Element whose geometry defines the trigger window, when that is not the
174
+ * element being animated. Defaults to the animated element.
175
+ *
176
+ * Needed whenever the animated element cannot supply the scroll length itself —
177
+ * the case that matters is a `position: sticky` stage, where the pinned element
178
+ * is exactly one viewport tall and all of the scroll room belongs to its
179
+ * container. Resolving `top top` → `bottom bottom` against the pinned element
180
+ * there yields tStart === tEnd, a zero-length window, and no movement at all.
181
+ *
182
+ * Setting this disables the native CSS fast path: `animation-timeline: view()`
183
+ * always measures the element the animation is attached to, so it cannot express
184
+ * a separate subject.
185
+ */
186
+ triggerElement?: Element;
139
187
  onProgress?: (alpha: number) => void;
140
188
  onComplete?: () => void;
141
189
  /** Fires when scroll enters the trigger zone (scrolling forward). */
@@ -1,3 +1,3 @@
1
- import {onMount,onCleanup}from'solid-js';function Tt({bounces:e=3,decay:r=.5}={}){let n=Math.max(1,Math.round(e)),t=Math.max(.01,Math.min(.99,r)),u=Math.sqrt(t),s=0,m=[];for(let h=0;h<n;h++){let $=Math.pow(u,h);m.push($),s+=$;}let l=[0],c=0;for(let h=0;h<n;h++)c+=m[h]/s,l.push(c);return h=>{if(h<=0)return 0;if(h>=1)return 1;for(let $=0;$<n;$++)if(h<=l[$+1]){let B=(h-l[$])/(l[$+1]-l[$]);if($===0)return B*(2-B);let S=1-Math.pow(t,$);return S+(1-S)*(2*B-1)*(2*B-1)}return 1}}function xt({amplitude:e=1,period:r=.4}={}){let n=Math.max(1,e),t=Math.max(.1,r),u=n<=1?t/4:t/(2*Math.PI)*Math.asin(1/n);return s=>s<=0?0:s>=1?1:n*Math.pow(2,-10*s)*Math.sin((s-u)*(2*Math.PI)/t)+1}var ie={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:Tt(),elastic:xt()};function ae(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 st(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 it(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 Ge(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 At(e,r,n){return Math.min(n,Math.max(r,e))}function K(e,r,n,t){return n===r?0:At((e-r)/(n-r)*t,0,1)}function pe(e,r,n,t,u){let s=st(e.top,e.height,r,t.element)-it(t.viewport,n),m=st(e.top,e.height,r,u.element)-it(u.viewport,n);return {tStart:s,tEnd:m}}function at(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 He(e,r,n){let t=at(e),u=at(r);return !t||!u?e:`rgb(${Math.round(t[0]+(u[0]-t[0])*n)},${Math.round(t[1]+(u[1]-t[1])*n)},${Math.round(t[2]+(u[2]-t[2])*n)})`}var lt={sketch:{easing:"ease-in",stagger:.1,speed:.9,fade:false},reveal:{easing:"ease-out",fade:true,speed:1.2,once:true},typewriter:{easing:"linear",stagger:.05,speed:1.5},cinematic:{easing:"ease-in-out",fade:true,speed:.75},spring:{easing:"spring",speed:1.1}};function ct(e,r){process.env.NODE_ENV!=="production"&&console.warn(`[svg-scroll-draw] ${e}`,r);}var ut={linear:"linear","ease-in":"ease-in","ease-out":"ease-out","ease-in-out":"ease-in-out"},Mt=0;function Lt(){return typeof CSS<"u"&&typeof CSS.supports=="function"&&CSS.supports("animation-timeline: view()")}function $t(e){let r=e.getAttribute("stroke"),n=e.getAttribute("fill");!r||r==="none"?ct("Element has no stroke \u2014 path will not be visible.",e):n&&n!=="none"&&n!=="transparent"&&ct("Element has a fill \u2014 it may obscure the stroke animation.",e);}function Ct(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 u(){let s=n==="x"?window.scrollX:window.scrollY,m=e-s,l=r-s,c=n==="x";t.innerHTML=`
2
- <div style="position:absolute;${c?`left:${m}px;top:0;bottom:0;border-left:2px dashed #22c55e;`:`top:${m}px;left:0;right:0;border-top:2px dashed #22c55e;`}padding:2px 6px;color:#22c55e;background:rgba(0,0,0,.6)">\u25B6 start</div>
3
- <div style="position:absolute;${c?`left:${l}px;top:0;bottom:0;border-left:2px dashed #ef4444;`:`top:${l}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",u,{passive:true}),u(),t}function Ue(e,r,n){let t=(r.match(/[-+]?(?:\d*\.)?\d+(?:[eE][-+]?\d+)?/g)??[]).map(Number),u=0;return e.replace(/[-+]?(?:\d*\.)?\d+(?:[eE][-+]?\d+)?/g,s=>{let m=parseFloat(s),l=t[u++]??m;return String(+(m+(l-m)*n).toFixed(4))})}function Ze(e,r={}){if(typeof window>"u")return {destroy:()=>{},replay:()=>{},pause:()=>{},resume:()=>{},seek:()=>{},getProgress:()=>0};let{preset:n,...t}=r,u=n?{...lt[n],...t}:t,s=window.matchMedia("(prefers-reduced-motion: reduce)").matches,{selector:m="path, polyline, line, polygon, rect, circle",speed:l=1,fade:c=false,easing:h="linear",trigger:$={},stagger:B=0,direction:S="forward",once:Q=false,debug:he=false,axis:R="y",scrollContainer:ee,autoReverse:te=false,delay:q=0,strokeColor:T,strokeWidth:A,fillOpacity:w,waypoints:b,velocityScale:P=false,threshold:I=0,rootMargin:G="0px",repeat:C=0,repeatDelay:F=0,morphTo:M,clip:V,autoplay:ne=false,duration:H=1e3,native:W=true,onProgress:d,onStart:L,onComplete:g,onEnter:y,onLeave:X,onEnterBack:xe,onLeaveBack:be}=u,we=V===true?"left":typeof V=="string"?V:false,de=typeof h=="function"?h:ie[h]??ie.linear,Ne=ae($.start??"top bottom"),ke=ae($.end??"bottom top"),U=typeof ee=="string"?document.querySelector(ee):ee??null,i=Array.isArray(T)?T[0]:null,p=Array.isArray(T)?T[1]:typeof T=="string"?T:null,Y=Array.isArray(A)?A[0]:null,N=Array.isArray(A)?A[1]:typeof A=="number"?A:null,Z=Array.isArray(w)?w[0]:null,oe=Array.isArray(w)?w[1]:typeof w=="number"?w:null;function J(o){let a=o*100;switch(we){case "right":return `inset(0 0 0 ${100-a}%)`;case "top":return `inset(0 0 ${100-a}% 0)`;case "bottom":return `inset(${100-a}% 0 0 0)`;case "center":return `circle(${o*150}% at 50% 50%)`;default:return `inset(0 ${100-a}% 0 0)`}}let _=we?[]:Array.from(e.querySelectorAll(m)),O=[],fe=[],ge=0,Me=0,se=false,ye=false,re=0,Ve=false,ve=-1,ze=-1,le=false,Ie=0,Ae=0,Le,Xe=null,$e=new Set,qe=-1,nt=performance.now(),De=NaN;function Re(){return U?R==="x"?U.scrollLeft:U.scrollTop:R==="x"?window.scrollX:window.scrollY}function rt(){return U?R==="x"?U.clientWidth:U.clientHeight:R==="x"?window.innerWidth:window.innerHeight}function ot(){let o=e.getBoundingClientRect(),a,E,j;if(U){let ue=U.getBoundingClientRect();a=R==="x"?o.left-ue.left+U.scrollLeft:o.top-ue.top+U.scrollTop,E=R==="x"?o.width:o.height,j=Re();}else a=R==="x"?o.left:o.top,E=R==="x"?o.width:o.height,j=Re();let ce=pe({top:a,height:E},j,rt(),Ne,ke);ge=ce.tStart,Me=ce.tEnd,he&&process.env.NODE_ENV!=="production"&&(Xe?.remove(),Xe=Ct(ge,Me,R));}function wt(o,a){if(e.style.setProperty("--scroll-draw-progress",String(o)),we){let E=a==="reverse"?1-o:o;e.style.clipPath=J(E);return}_.forEach((E,j)=>{E.style.strokeDashoffset=a==="reverse"?`${O[j]*o}`:`${O[j]*(1-o)}`,c&&(E.style.opacity=a==="reverse"?`${1-o}`:`${o}`),i&&p?E.style.stroke=He(i,p,o):p&&(E.style.stroke=p),Y!==null&&N!==null?E.style.strokeWidth=`${Y+(N-Y)*o}`:N!==null&&(E.style.strokeWidth=`${N}`),Z!==null&&oe!==null?E.style.fillOpacity=`${Z+(oe-Z)*o}`:oe!==null&&(E.style.fillOpacity=`${oe}`),M&&E.tagName.toLowerCase()==="path"&&fe[j]&&E.setAttribute("d",Ue(fe[j],M,o));});}function We(){if(e.style.setProperty("--scroll-draw-progress","0"),we){e.style.clipPath=J(0);return}_.forEach((o,a)=>{o.style.strokeDasharray=`${O[a]}`,o.style.strokeDashoffset=S==="reverse"?"0":`${O[a]}`,c?o.style.opacity=S==="reverse"?"1":"0":o.style.opacity="",i&&(o.style.stroke=i),Y!==null&&(o.style.strokeWidth=`${Y}`),Z!==null&&(o.style.fillOpacity=`${Z}`),M&&o.tagName.toLowerCase()==="path"&&fe[a]&&o.setAttribute("d",fe[a]);});}if(_.forEach(o=>{$t(o);let a=Ge(o);O.push(a),o.tagName.toLowerCase()==="path"?fe.push(o.getAttribute("d")??""):fe.push(""),s?(o.style.strokeDasharray=`${a}`,o.style.strokeDashoffset=S==="reverse"?`${a}`:"0",c&&(o.style.opacity="1"),p&&(o.style.stroke=p),N!==null&&(o.style.strokeWidth=`${N}`),oe!==null&&(o.style.fillOpacity=`${oe}`),M&&o.tagName.toLowerCase()==="path"&&o.setAttribute("d",M)):(o.style.strokeDasharray=`${a}`,o.style.strokeDashoffset=S==="reverse"?"0":`${a}`,c?o.style.opacity=S==="reverse"?"1":"0":o.style.opacity="",i&&(o.style.stroke=i),Y!==null&&(o.style.strokeWidth=`${Y}`),Z!==null&&(o.style.fillOpacity=`${Z}`));}),we){if(s)return e.style.clipPath=J(1),g?.(),{destroy:()=>{},replay:()=>{},pause:()=>{},resume:()=>{},seek:()=>{},getProgress:()=>1};e.style.clipPath=J(0);}else if(s)return g?.(),{destroy:()=>{},replay:()=>{},pause:()=>{},resume:()=>{},seek:()=>{},getProgress:()=>1};function vt(){return !(W===false||!Lt()||!_.length||typeof h!="string"||!(h in ut)||we||R!=="y"||U||l!==1||B!==0||Q||te||P!==false||M||b||C||q>0||d||L||g||y||X||xe||be||T!=null||A!=null||w!=null||($.start??"top bottom").trim()!=="top bottom"||($.end??"bottom top").trim()!=="bottom top")}function Et(){let o=`svg-scroll-draw-${++Mt}`,a=S==="reverse"?"0":"var(--ssd-len)",E=S==="reverse"?"var(--ssd-len)":"0",j=`stroke-dashoffset:${a};`,ce=`stroke-dashoffset:${E};`;c&&(j+=`opacity:${S==="reverse"?1:0};`,ce+=`opacity:${S==="reverse"?0:1};`);let ue=document.createElement("style");ue.setAttribute("data-svg-scroll-draw",""),ue.textContent=`@keyframes ${o}{from{${j}}to{${ce}}}.${o}{animation-name:${o};animation-duration:auto;animation-timing-function:${ut[h]};animation-fill-mode:both;animation-timeline:view();animation-range:cover 0% cover 100%;}`,document.head.appendChild(ue);function me(f,x){f.style.setProperty("--ssd-len",String(O[x])),f.style.strokeDasharray=`${O[x]}`,f.style.strokeDashoffset="",f.style.opacity="",f.style.animationPlayState="",f.classList.add(o);}_.forEach(me);let v=false,k=-1;function D(){if(k>=0)return k;let f=e.getBoundingClientRect(),{tStart:x,tEnd:z}=pe({top:f.top,height:f.height},Re(),rt(),Ne,ke);return de(K(Re(),x,z,l))}return {destroy(){_.forEach(f=>{f.classList.remove(o),f.style.removeProperty("--ssd-len"),f.style.animationPlayState="";}),ue.remove();},replay(){v=false,k=-1,_.forEach(me);},pause(){v=true,_.forEach(f=>{f.style.animationPlayState="paused";});},resume(){v&&(v=false,_.forEach(f=>{f.style.animationPlayState="running";}));},seek(f){let x=Math.min(1,Math.max(0,f));k=x,v=true,_.forEach((z,Oe)=>{z.classList.remove(o),z.style.strokeDashoffset=S==="reverse"?`${O[Oe]*x}`:`${O[Oe]*(1-x)}`,c&&(z.style.opacity=S==="reverse"?`${1-x}`:`${x}`);});},getProgress(){return D()}}}if(vt())return Et();function St(){let o=Math.max(1,H),a=0,E=0;function j(D){let f=true;if(we){let x=Math.min(1,Math.max(0,D/o)),z=de(x);Ie=z,e.style.setProperty("--scroll-draw-progress",String(z)),e.style.clipPath=J(S==="reverse"?1-z:z),d?.(z),x<1&&(f=false);}else _.forEach((x,z)=>{let Oe=z*B*o,Fe=Math.min(1,Math.max(0,(D-Oe)/o)),Ee=de(Fe);x.style.strokeDashoffset=S==="reverse"?`${O[z]*Ee}`:`${O[z]*(1-Ee)}`,c&&(x.style.opacity=S==="reverse"?`${1-Ee}`:`${Ee}`),i&&p?x.style.stroke=He(i,p,Ee):p&&(x.style.stroke=p),Y!==null&&N!==null?x.style.strokeWidth=`${Y+(N-Y)*Ee}`:N!==null&&(x.style.strokeWidth=`${N}`),Z!==null&&oe!==null?x.style.fillOpacity=`${Z+(oe-Z)*Ee}`:oe!==null&&(x.style.fillOpacity=`${oe}`),M&&x.tagName.toLowerCase()==="path"&&fe[z]&&x.setAttribute("d",Ue(fe[z],M,Ee)),z===0&&(d?.(Ee),e.style.setProperty("--scroll-draw-progress",String(Ee))),Fe<1&&(f=false);});if(b){let x=Math.min(1,Math.max(0,D/o)),z=de(x);for(let Oe in b){let Fe=parseFloat(Oe);z>=Fe&&!$e.has(Fe)&&($e.add(Fe),b[Oe]?.());}}return f}function ce(D){if(le)return;let f=D-a;ye||(ye=true,L?.());let x=j(f);if(x&&!se){se=true,j(o*(1+Math.max(0,_.length-1)*B)),g?.(),Ae<(C==="infinite"?1/0:C??0)&&(Ae++,Le=setTimeout(()=>{a=performance.now(),ye=false,se=false,$e.clear(),We(),re=requestAnimationFrame(ce);},F));return}x||(re=requestAnimationFrame(ce));}function ue(){cancelAnimationFrame(re),clearTimeout(Le),a=performance.now(),E=0,le=false,ye=false,se=false,Ae=0,$e.clear(),We(),re=requestAnimationFrame(ce);}let me=new IntersectionObserver(D=>{D.forEach(f=>{f.isIntersecting&&!(Q&&se)?ue():!f.isIntersecting&&!Q&&!se&&(cancelAnimationFrame(re),clearTimeout(Le),a=null);});},{root:U??null,threshold:I,rootMargin:G}),v;function k(){clearTimeout(v),v=setTimeout(()=>{_.forEach((D,f)=>{O[f]=Ge(D),D.style.strokeDasharray=`${O[f]}`;});},150);}return window.addEventListener("resize",k),window.addEventListener("orientationchange",k),q>0?setTimeout(()=>me.observe(e),q):me.observe(e),{destroy(){cancelAnimationFrame(re),clearTimeout(Le),me.disconnect(),window.removeEventListener("resize",k),window.removeEventListener("orientationchange",k),clearTimeout(v);},replay(){Ae=0,ue();},pause(){le||(le=true,E=performance.now()-a,cancelAnimationFrame(re));},resume(){le&&(le=false,a=performance.now()-E,re=requestAnimationFrame(ce));},seek(D){let f=Math.min(1,Math.max(0,D));Ie=f,le=true,E=f*o,a=performance.now()-E,cancelAnimationFrame(re),j(E);},getProgress(){return Ie}}}if(ne)return St();ot();function _e(){if(!Ve||le)return;let o=performance.now(),a=Re(),E=l;if(P!==false){let v=o-nt,k=v>0?Math.abs(a-(qe<0?a:qe))/v:0;E=l*Math.max(.2,1+k*(typeof P=="number"?P:1)*.04);}qe=a,nt=o;let j=te?ze===-1||a>=ze?"forward":"reverse":S;ze=a;let ce=Me-ge,ue=true,me=ce===0?0:(a-ge)/ce;if(isNaN(De)||(De<=0&&me>0?y?.():De>0&&me<=0&&be?.(),De<1&&me>=1?X?.():De>=1&&me<1&&xe?.()),De=me,we){let v=de(K(a,ge,Me,E));Q&&!te&&(ve=Math.max(ve,v),v=ve),Ie=v,e.style.setProperty("--scroll-draw-progress",String(v));let k=j==="reverse"?1-v:v;e.style.clipPath=J(k),d?.(v),!ye&&K(a,ge,Me,E)>0&&(ye=true,L?.()),v>=1&&!se?(se=true,g?.(),Ae<(C==="infinite"?1/0:C??0)&&(Ae++,Le=setTimeout(()=>{ve=-1,ye=false,se=false,e.style.clipPath=J(0);},F))):v<1&&!Q&&(se=false),re=requestAnimationFrame(_e);return}if(_.forEach((v,k)=>{let D=k*B*ce,f=de(K(a,ge+D,Me+D,E));Q&&!te&&(ve=Math.max(ve,f),f=ve),Ie=f,v.style.strokeDashoffset=j==="reverse"?`${O[k]*f}`:`${O[k]*(1-f)}`,c&&(v.style.opacity=j==="reverse"?`${1-f}`:`${f}`),i&&p?v.style.stroke=He(i,p,f):p&&(v.style.stroke=p),Y!==null&&N!==null?v.style.strokeWidth=`${Y+(N-Y)*f}`:N!==null&&(v.style.strokeWidth=`${N}`),Z!==null&&oe!==null?v.style.fillOpacity=`${Z+(oe-Z)*f}`:oe!==null&&(v.style.fillOpacity=`${oe}`),M&&v.tagName.toLowerCase()==="path"&&fe[k]&&v.setAttribute("d",Ue(fe[k],M,f)),k===0&&(d?.(f),e.style.setProperty("--scroll-draw-progress",String(f))),f<1&&(ue=false);}),b){let v=de(K(a,ge,Me,E));for(let k in b){let D=parseFloat(k);v>=D&&!$e.has(D)&&($e.add(D),b[k]?.());}}!ye&&K(a,ge,Me,E)>0&&(ye=true,L?.()),ue&&!se?(se=true,g?.(),Ae<(C==="infinite"?1/0:C??0)&&(Ae++,Le=setTimeout(()=>{ve=-1,ye=false,se=false,$e.clear(),We();},F))):!ue&&!Q&&(se=false),re=requestAnimationFrame(_e);}let Ye=new IntersectionObserver(o=>{o.forEach(a=>{Ve=a.isIntersecting,Ve&&!le?re=requestAnimationFrame(_e):cancelAnimationFrame(re);});},{root:U??null,threshold:I,rootMargin:G}),je;function Be(){clearTimeout(je),je=setTimeout(()=>{_.forEach((o,a)=>{O[a]=Ge(o),o.style.strokeDasharray=`${O[a]}`;}),ot();},150);}return window.addEventListener("resize",Be),window.addEventListener("orientationchange",Be),q>0?setTimeout(()=>Ye.observe(e),q):Ye.observe(e),{destroy(){cancelAnimationFrame(re),clearTimeout(Le),Ye.disconnect(),window.removeEventListener("resize",Be),window.removeEventListener("orientationchange",Be),clearTimeout(je),Xe?.remove();},replay(){ve=-1,ze=-1,qe=-1,ye=false,se=false,Ae=0,le=false,$e.clear(),clearTimeout(Le),We();},pause(){le=true,cancelAnimationFrame(re);},resume(){le&&(le=false,Ve&&(re=requestAnimationFrame(_e)));},seek(o){let a=Math.min(1,Math.max(0,o));Ie=a,ve=a,le=true,cancelAnimationFrame(re),wt(a,S);},getProgress(){return Ie}}}var ft=new Map;function Ce(e,r){ft.set(e,r);}function Pe(e){ft.delete(e);}function Pt(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 u=[],s=[],m=t[2].trim();if(m)for(let l of m.split(/[\s,]+/)){let c=l.match(/^([-+]?[\d.eE]+)(.*)$/);u.push(c?parseFloat(c[1]):0),s.push(c?c[2]:"");}r.push({fn:t[1],nums:u,units:s});}return r}function It(e,r,n){let t=mt(e),u=mt(r);return t.length===0||t.length!==u.length?n<1?e:r:t.map((s,m)=>{let l=u[m];return s.fn!==l.fn||s.nums.length!==l.nums.length?n<1?`${s.fn}(${s.nums.map((c,h)=>`${c}${s.units[h]}`).join(", ")})`:`${l.fn}(${l.nums.map((c,h)=>`${c}${l.units[h]}`).join(", ")})`:`${s.fn}(${s.nums.map((c,h)=>`${c+(l.nums[h]-c)*n}${s.units[h]}`).join(", ")})`}).join(" ")}function pt(e,r,n){if(typeof e=="number"&&typeof r=="number")return String(e+(r-e)*n);let t=String(e),u=String(r);if(Pt(t))return He(t,u,n);if(t.includes("("))return It(t,u,n);let s=t.match(/^([-+]?[\d.]+)(.*)$/),m=u.match(/^([-+]?[\d.]+)(.*)$/);if(s&&m){let l=parseFloat(s[1]),c=parseFloat(m[1]);return `${l+(c-l)*n}${s[2]||m[2]}`}return n<1?t:u}function Ot(e){return e.replace(/([A-Z])/g,r=>`-${r.toLowerCase()}`)}var dt={linear:"linear","ease-in":"ease-in","ease-out":"ease-out","ease-in-out":"ease-in-out"},kt=new Set(["opacity","transform","background-color","color","filter","scale","translate","rotate"]),Dt=0;function Ft(){return typeof CSS<"u"&&typeof CSS.supports=="function"&&CSS.supports("animation-timeline: view()")}function Je(e,r){let n={destroy:()=>{},replay:()=>{},pause:()=>{},resume:()=>{},seek:()=>{},getProgress:()=>0};if(typeof window>"u")return n;let{props:t,trigger:u={},easing:s="ease-out",speed:m=1,once:l=false,axis:c="y",scrollContainer:h,native:$=true,onProgress:B,onComplete:S,onEnter:Q,onLeave:he,onEnterBack:R,onLeaveBack:ee}=r,te=window.matchMedia("(prefers-reduced-motion: reduce)").matches,q=typeof s=="function"?s:ie[s]??ie["ease-out"],T=ae(u.start??"top bottom"),A=ae(u.end??"bottom top"),w=typeof h=="string"?document.querySelector(h):h??null,b=Object.entries(t).map(([i,p])=>({prop:Ot(i),from:Array.isArray(p)?p[0]:"",to:Array.isArray(p)?p[1]:p}));function P(){let i=window.getComputedStyle(e);for(let p of b)p.from===""&&(p.from=i.getPropertyValue(p.prop).trim()||"0");}function I(){for(let i of b)e.style.setProperty(i.prop,String(i.to));}if(te)return I(),S?.(),n;P();function G(){if(!$||!Ft()||typeof s!="string"||!(s in dt)||c!=="y"||w||l||m!==1||B||S||Q||he||R||ee||(u.start??"top bottom").trim()!=="top bottom"||(u.end??"bottom top").trim()!=="bottom top")return false;for(let i of b)if(!kt.has(i.prop))return false;return true}function C(){let i=`ssd-a-${++Dt}`,p=b.map(J=>`${J.prop}:${J.from}`).join(";"),Y=b.map(J=>`${J.prop}:${J.to}`).join(";"),N=document.createElement("style");N.setAttribute("data-ssd-animate",""),N.textContent=`@keyframes ${i}{from{${p}}to{${Y}}}.${i}{animation-name:${i};animation-duration:auto;animation-timing-function:${dt[s]};animation-fill-mode:both;animation-timeline:view();animation-range:cover 0% cover 100%;}`,document.head.appendChild(N),e.classList.add(i);let Z=()=>c==="x"?window.scrollX:window.scrollY,oe=()=>c==="x"?window.innerWidth:window.innerHeight;return {destroy(){e.classList.remove(i),N.remove();},replay(){e.classList.remove(i),e.offsetWidth,e.classList.add(i);},pause(){e.style.animationPlayState="paused";},resume(){e.style.animationPlayState="";},seek(J){let _=Math.min(1,Math.max(0,J));e.classList.remove(i);for(let O of b)e.style.setProperty(O.prop,pt(O.from,O.to,_));},getProgress(){let J=e.getBoundingClientRect(),_=Z(),O=oe(),{tStart:fe,tEnd:ge}=pe({top:J.top,height:J.height},_,O,T,A);return q(K(_,fe,ge,m))}}}if(G())return C();let F=0,M=0,V=0,ne=false,H=false,W=-1,d=0,L=false,g=NaN,y=()=>w?c==="x"?w.scrollLeft:w.scrollTop:c==="x"?window.scrollX:window.scrollY,X=()=>w?c==="x"?w.clientWidth:w.clientHeight:c==="x"?window.innerWidth:window.innerHeight;function xe(){let i=e.getBoundingClientRect(),p,Y;if(w){let Z=w.getBoundingClientRect();p=c==="x"?i.left-Z.left+w.scrollLeft:i.top-Z.top+w.scrollTop,Y=c==="x"?i.width:i.height;}else p=c==="x"?i.left:i.top,Y=c==="x"?i.width:i.height;let N=pe({top:p,height:Y},y(),X(),T,A);F=N.tStart,M=N.tEnd;}function be(i){e.style.setProperty("--scroll-draw-progress",String(i));for(let p of b)e.style.setProperty(p.prop,pt(p.from,p.to,i));B?.(i);}function we(i){if(isNaN(g)){g=i;return}g<=0&&i>0?Q?.():g>0&&i<=0&&ee?.(),g<1&&i>=1?he?.():g>=1&&i<1&&R?.(),g=i;}function de(){if(!ne||H)return;let i=M===F?0:(y()-F)/(M-F);we(i);let p=q(K(y(),F,M,m));l&&(W=Math.max(W,p),p=W),d=p,be(p),p>=1&&!L?(L=true,S?.()):p<1&&!l&&(L=false),V=requestAnimationFrame(de);}xe();{let i=q(K(y(),F,M,m));l&&i>0&&(W=i),d=i,be(i);}let Ne=new IntersectionObserver(i=>{i.forEach(p=>{ne=p.isIntersecting,ne&&!H?V=requestAnimationFrame(de):cancelAnimationFrame(V);});},{root:w??null}),ke;function U(){clearTimeout(ke),ke=setTimeout(xe,150);}return window.addEventListener("resize",U),window.addEventListener("orientationchange",U),Ne.observe(e),Ce(e,{type:"animate",getProgress:()=>d,getTrigger:()=>({tStart:F,tEnd:M})}),{destroy(){cancelAnimationFrame(V),Ne.disconnect(),window.removeEventListener("resize",U),window.removeEventListener("orientationchange",U),clearTimeout(ke),Pe(e);},replay(){W=-1,L=false,d=0,H=false,be(0);},pause(){H=true,cancelAnimationFrame(V);},resume(){H&&(H=false,ne&&(V=requestAnimationFrame(de)));},seek(i){let p=Math.min(1,Math.max(0,i));d=p,W=p,H=true,cancelAnimationFrame(V),be(p);},getProgress(){return d}}}var Ke={destroy:()=>{},replay:()=>{},pause:()=>{},resume:()=>{},seek:()=>{},getProgress:()=>0};function Qe(e,r){if(typeof window>"u")return Ke;let n=typeof e=="string"?document.querySelector(e):e;if(!n)return process.env.NODE_ENV!=="production"&&console.warn("[svg-scroll-draw] scrollCounter: element not found:",e),Ke;let t=n,{from:u=0,to:s,format:m,easing:l="ease-out",trigger:c={},once:h=true,decimals:$,onComplete:B}=r,S=$!==void 0?d=>d.toFixed($):m??(d=>String(Math.round(d))),Q=typeof l=="function"?l:ie[l]??ie["ease-out"],he=ae(c.start??"top 80%"),R=ae(c.end??"top 20%");if(window.matchMedia("(prefers-reduced-motion: reduce)").matches)return t.textContent=S(s),B?.(),Ke;t.textContent=S(u);let te=0,q=0,T=0,A=false,w=false,b=-1,P=0,I=false,G=()=>window.scrollY,C=()=>window.innerHeight;function F(){let d=t.getBoundingClientRect(),L=pe({top:d.top,height:d.height},G(),C(),he,R);te=L.tStart,q=L.tEnd;}function M(d){t.textContent=S(u+(s-u)*d),t.style.setProperty("--scroll-draw-progress",String(d));}function V(){if(!A||w)return;let d=Q(K(G(),te,q,1));h&&(b=Math.max(b,d),d=b),P=d,M(d),d>=1&&!I?(I=true,B?.()):d<1&&!h&&(I=false),T=requestAnimationFrame(V);}F();{let d=Q(K(G(),te,q,1));h&&d>0&&(b=d),P=d,M(d);}let ne=new IntersectionObserver(d=>{d.forEach(L=>{A=L.isIntersecting,A&&!w?T=requestAnimationFrame(V):cancelAnimationFrame(T);});}),H;function W(){clearTimeout(H),H=setTimeout(F,150);}return window.addEventListener("resize",W),window.addEventListener("orientationchange",W),ne.observe(t),Ce(t,{type:"counter",getProgress:()=>P,getTrigger:()=>({tStart:te,tEnd:q})}),{destroy(){cancelAnimationFrame(T),ne.disconnect(),window.removeEventListener("resize",W),window.removeEventListener("orientationchange",W),clearTimeout(H),Pe(t);},replay(){b=-1,I=false,P=0,w=false,M(0);},pause(){w=true,cancelAnimationFrame(T);},resume(){w&&(w=false,A&&(T=requestAnimationFrame(V)));},seek(d){let L=Math.min(1,Math.max(0,d));P=L,b=L,w=true,cancelAnimationFrame(T),M(L);},getProgress(){return P}}}var gt={destroy:()=>{},replay:()=>{},pause:()=>{},resume:()=>{},seek:()=>{},getProgress:()=>0};function et(e,r={}){if(typeof window>"u")return gt;let n=typeof e=="string"?document.querySelector(e):e;if(!n||n.tagName.toLowerCase()!=="video")return process.env.NODE_ENV!=="production"&&console.warn("[svg-scroll-draw] scrollVideo: <video> element not found:",e),gt;let t=n,{trigger:u={},easing:s="linear",once:m=false,axis:l="y",preload:c="auto",onReady:h,onComplete:$,onProgress:B}=r,S=window.matchMedia("(prefers-reduced-motion: reduce)").matches,Q=typeof s=="function"?s:ie[s]??ie.linear,he=ae(u.start??"top top"),R=ae(u.end??"bottom top");t.pause(),t.hasAttribute("preload")||(t.preload=c);let ee=r.from??0,te=r.to,q=0,T=0,A=0,w=false,b=false,P=-1,I=0,G=false,C=false,F=()=>l==="x"?window.scrollX:window.scrollY,M=()=>l==="x"?window.innerWidth:window.innerHeight;function V(){let y=t.getBoundingClientRect(),X=l==="x"?y.left:y.top,xe=l==="x"?y.width:y.height,be=pe({top:X,height:xe},F(),M(),he,R);q=be.tStart,T=be.tEnd;}function ne(y){if(!C)return;let X=te??t.duration??0;t.currentTime=ee+(X-ee)*y,t.style.setProperty("--scroll-draw-progress",String(y)),B?.(y);}function H(){if(!w||b||!C)return;let y=Q(K(F(),q,T,1));m&&(P=Math.max(P,y),y=P),I=y,ne(y),y>=1&&!G?(G=true,$?.()):y<1&&!m&&(G=false),A=requestAnimationFrame(H);}function W(){if(C=true,te===void 0&&(te=t.duration),S){ne(1),h?.();return}V(),h?.(),w&&!b&&(A=requestAnimationFrame(H));}t.readyState>=1?W():t.addEventListener("loadedmetadata",W,{once:true}),C||V();let d=new IntersectionObserver(y=>{y.forEach(X=>{w=X.isIntersecting,w&&!b&&C?A=requestAnimationFrame(H):cancelAnimationFrame(A);});}),L;function g(){clearTimeout(L),L=setTimeout(V,150);}return window.addEventListener("resize",g),window.addEventListener("orientationchange",g),d.observe(t),Ce(t,{type:"video",getProgress:()=>I,getTrigger:()=>({tStart:q,tEnd:T})}),{destroy(){cancelAnimationFrame(A),d.disconnect(),t.removeEventListener("loadedmetadata",W),window.removeEventListener("resize",g),window.removeEventListener("orientationchange",g),clearTimeout(L),Pe(t);},replay(){P=-1,G=false,I=0,b=false,ne(0);},pause(){b=true,cancelAnimationFrame(A);},resume(){b&&(b=false,w&&C&&(A=requestAnimationFrame(H)));},seek(y){let X=Math.min(1,Math.max(0,y));I=X,P=X,b=true,cancelAnimationFrame(A),ne(X);},getProgress(){return I}}}function bt(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 Ht(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 yt(e){let r=bt(e),n=new Map;for(let s of r){let m=s.offsetTop;n.has(m)||n.set(m,[]),n.get(m).push(s);}let t=[],u=Array.from(n.keys()).sort((s,m)=>s-m);for(let s of u){let m=n.get(s),l=document.createElement("span");l.setAttribute("aria-hidden","true"),l.style.display="inline-block";for(let c of m)l.appendChild(c);t.push(l);}e.textContent="";for(let s of t)e.appendChild(s),e.appendChild(document.createTextNode(" "));return t}function Nt(e,r,n,t){if(n<=1||t===0)return e;let u=(n-1)*t,s=r*t,m=s+(1-u);return m<=s?e>=s?1:0:Math.min(1,Math.max(0,(e-s)/(m-s)))}function Rt(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 ht={destroy:()=>{},replay:()=>{},pause:()=>{},resume:()=>{},seek:()=>{},getProgress:()=>0};function tt(e,r={}){if(typeof window>"u")return ht;let n=typeof e=="string"?document.querySelector(e):e;if(!n)return process.env.NODE_ENV!=="production"&&console.warn("[svg-scroll-draw] scrollText: element not found:",e),ht;let t=n,{split:u="words",stagger:s=.04,easing:m="ease-out",from:l={opacity:0,y:24},trigger:c={},once:h=true,onComplete:$}=r,B=window.matchMedia("(prefers-reduced-motion: reduce)").matches,S=typeof m=="function"?m:ie[m]??ie["ease-out"],Q=ae(c.start??"top 85%"),he=ae(c.end??"top 40%"),R=t.innerHTML;t.setAttribute("aria-label",t.textContent??"");let ee;u==="chars"?ee=Ht(t):u==="lines"?ee=yt(t):ee=bt(t);let te=ee.length;function q(g,y){l?.opacity!==void 0&&(g.style.opacity=String(l.opacity+(1-l.opacity)*y));let X=Rt(y,l);X&&(g.style.transform=X);}function T(g){t.style.setProperty("--scroll-draw-progress",String(g)),ee.forEach((y,X)=>{let xe=S(Nt(g,X,te,s));q(y,xe);});}if(B)return T(1),$?.(),{destroy(){t.innerHTML=R,t.removeAttribute("aria-label");},replay:()=>{},pause:()=>{},resume:()=>{},seek:()=>{},getProgress:()=>1};T(0);let A=0,w=0,b=0,P=false,I=false,G=-1,C=0,F=false,M=()=>window.scrollY,V=()=>window.innerHeight;function ne(){let g=t.getBoundingClientRect(),y=pe({top:g.top,height:g.height},M(),V(),Q,he);A=y.tStart,w=y.tEnd;}function H(){if(!P||I)return;let g=K(M(),A,w,1);h&&(G=Math.max(G,g),g=G),C=g,T(g),g>=1&&!F?(F=true,$?.()):g<1&&!h&&(F=false),b=requestAnimationFrame(H);}ne();let W=new IntersectionObserver(g=>{g.forEach(y=>{P=y.isIntersecting,P&&!I?b=requestAnimationFrame(H):cancelAnimationFrame(b);});}),d;function L(){clearTimeout(d),d=setTimeout(()=>{if(u==="lines"){let g=C;t.innerHTML=R,t.setAttribute("aria-label",t.textContent??""),ee=yt(t),T(g);}ne();},150);}return window.addEventListener("resize",L),window.addEventListener("orientationchange",L),W.observe(t),Ce(t,{type:"text",getProgress:()=>C,getTrigger:()=>({tStart:A,tEnd:w})}),{destroy(){cancelAnimationFrame(b),W.disconnect(),window.removeEventListener("resize",L),window.removeEventListener("orientationchange",L),clearTimeout(d),t.innerHTML=R,t.removeAttribute("aria-label"),Pe(t);},replay(){G=-1,F=false,C=0,I=false,T(0);},pause(){I=true,cancelAnimationFrame(b);},resume(){I&&(I=false,P&&(b=requestAnimationFrame(H)));},seek(g){let y=Math.min(1,Math.max(0,g));C=y,G=y,I=true,cancelAnimationFrame(b),T(y);},getProgress(){return C}}}function un(e={}){let r,n;return onMount(()=>{r&&(n=Ze(r,e));}),onCleanup(()=>{n?.destroy();}),t=>{r=t;}}function fn(e={}){let r,n;return onMount(()=>{r&&(n=Ze(r,e));}),onCleanup(()=>{n?.destroy(),n=void 0;}),{ref:t=>{r=t;},getInstance:()=>n}}function mn(e){let r,n;return onMount(()=>{r&&(n=Je(r,e));}),onCleanup(()=>{n?.destroy();}),t=>{r=t;}}function pn(e){let r,n;return onMount(()=>{r&&(n=Je(r,e));}),onCleanup(()=>{n?.destroy(),n=void 0;}),{ref:t=>{r=t;},getInstance:()=>n}}function dn(e){let r,n;return onMount(()=>{r&&(n=Qe(r,e));}),onCleanup(()=>{n?.destroy();}),t=>{r=t;}}function gn(e){let r,n;return onMount(()=>{r&&(n=Qe(r,e));}),onCleanup(()=>{n?.destroy(),n=void 0;}),{ref:t=>{r=t;},getInstance:()=>n}}function yn(e={}){let r,n;return onMount(()=>{r&&(n=et(r,e));}),onCleanup(()=>{n?.destroy();}),t=>{r=t;}}function hn(e={}){let r,n;return onMount(()=>{r&&(n=et(r,e));}),onCleanup(()=>{n?.destroy(),n=void 0;}),{ref:t=>{r=t;},getInstance:()=>n}}function bn(e={}){let r,n;return onMount(()=>{r&&(n=tt(r,e));}),onCleanup(()=>{n?.destroy();}),t=>{r=t;}}function wn(e={}){let r,n;return onMount(()=>{r&&(n=tt(r,e));}),onCleanup(()=>{n?.destroy(),n=void 0;}),{ref:t=>{r=t;},getInstance:()=>n}}export{pn as createScrollAnimate,gn as createScrollCounter,fn as createScrollDraw,wn as createScrollText,hn as createScrollVideo,mn as useScrollAnimate,dn as useScrollCounter,un as useScrollDraw,bn as useScrollText,yn as useScrollVideo};
1
+ import {onMount,onCleanup}from'solid-js';function Nt({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),s=0,c=[];for(let d=0;d<n;d++){let x=Math.pow(l,d);c.push(x),s+=x;}let u=[0],m=0;for(let d=0;d<n;d++)m+=c[d]/s,u.push(m);return d=>{if(d<=0)return 0;if(d>=1)return 1;for(let x=0;x<n;x++)if(d<=u[x+1]){let N=(d-u[x])/(u[x+1]-u[x]);if(x===0)return N*(2-N);let L=1-Math.pow(t,x);return L+(1-L)*(2*N-1)*(2*N-1)}return 1}}function Vt({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 s=>s<=0?0:s>=1?1:n*Math.pow(2,-10*s)*Math.sin((s-l)*(2*Math.PI)/t)+1}var ee={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:Nt(),elastic:Vt()};function pe(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 wt(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 vt(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 qe(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 zt(e,r,n){return Math.min(n,Math.max(r,e))}function Q(e,r,n,t){return n===r?0:zt((e-r)/(n-r)*t,0,1)}function Je(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 s=wt(e.top,e.height,r,t.element)-vt(t.viewport,n),c=wt(e.top,e.height,r,l.element)-vt(l.viewport,n);return {tStart:s,tEnd:c}}function Et(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 We(e,r,n){let t=Et(e),l=Et(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 St={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 Ke=typeof __SVG_SCROLL_DRAW_DEV__<"u"?__SVG_SCROLL_DRAW_DEV__:typeof process<"u"&&typeof process.env<"u"&&process.env.NODE_ENV!=="production";function ye(e,...r){Ke&&console.warn(`[svg-scroll-draw] ${e}`,...r);}var _t="cubic-bezier(0.333333, 0, 0.666667, 0.333333)",qt="cubic-bezier(0.333333, 0.666667, 0.666667, 1)",Tt=33;function Wt(){return typeof CSS<"u"&&typeof CSS.supports=="function"&&CSS.supports("animation-timing-function: linear(0, 1)")}function Bt(e){let r=[];for(let n=0;n<Tt;n++){let t=n/(Tt-1);r.push(String(Math.round(e(t)*1e5)/1e5));}return `linear(${r.join(",")})`}function et(e){switch(e){case "linear":return "linear";case "ease-in":return _t;case "ease-out":return qt;case "ease-in-out":return Wt()?Bt(ee["ease-in-out"]):null;default:return null}}var Gt=0;function jt(){return typeof CSS<"u"&&typeof CSS.supports=="function"&&CSS.supports("animation-timeline: view()")&&CSS.supports("view-timeline-name: --x")}function Ut(e){let r=e.getAttribute("stroke"),n=e.getAttribute("fill");!r||r==="none"?ye("Element has no stroke \u2014 path will not be visible.",e):n&&n!=="none"&&n!=="transparent"&&ye("Element has a fill \u2014 it may obscure the stroke animation.",e);}function Xt(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 s=n==="x"?window.scrollX:window.scrollY,c=e-s,u=r-s,m=n==="x";t.innerHTML=`
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 xt=/[-+]?(?:\d*\.)?\d+(?:[eE][-+]?\d+)?/g,Mt=/[MmLlHhVvCcSsQqTtAaZz]/g;function Yt(e,r,n){if(!Ke)return;let t=(e.match(Mt)??[]).join("").toUpperCase(),l=(r.match(Mt)??[]).join("").toUpperCase(),s=(e.match(xt)??[]).length,c=(r.match(xt)??[]).length;if(t!==l){ye(`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}s!==c&&ye(`morphTo: coordinate count differs (${s} \u2192 ${c}). Extra coordinates are ignored and missing ones hold their start value, so the result will not reach the target shape.`,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,s=>{let c=parseFloat(s),u=t[l++]??c;return String(+(c+(u-c)*n).toFixed(4))})}function it(e,r={}){if(typeof window>"u")return {destroy:()=>{},replay:()=>{},pause:()=>{},resume:()=>{},seek:()=>{},getProgress:()=>0};let{preset:n,...t}=r,l=n?{...St[n],...t}:t,s=window.matchMedia("(prefers-reduced-motion: reduce)").matches,{selector:c="path, polyline, line, polygon, rect, circle",speed:u=1,fade:m=false,easing:d="linear",trigger:x={},stagger:N=0,direction:L="forward",once:te=false,debug:Ae=false,axis:W="y",scrollContainer:Z,autoReverse:X=false,delay:B=0,strokeColor:M,strokeWidth:$,fillOpacity:A,waypoints:w,velocityScale:I=false,threshold:O=0,rootMargin:C="0px",repeat:S=0,repeatDelay:ne=0,morphTo:k,clip:re,autoplay:oe=false,duration:J=1e3,native:ue=true,onProgress:y,onStart:T,onComplete:g,onEnter:p,onLeave:H,onEnterBack:de,onLeaveBack:ve}=l,me=re===true?"left":typeof re=="string"?re:false,Ee=typeof d=="function"?d:ee[d]??ee.linear,Le=pe(x.start??"top bottom"),ze=pe(x.end??"bottom top"),he=typeof Z=="string"?document.querySelector(Z):Z??null,be=Array.isArray(M)?M[0]:null,se=Array.isArray(M)?M[1]:typeof M=="string"?M:null,ie=Array.isArray($)?$[0]:null,G=Array.isArray($)?$[1]:typeof $=="number"?$:null,fe=Array.isArray(A)?A[0]:null,Y=Array.isArray(A)?A[1]:typeof A=="number"?A:null;function $e(o){let a=o*100;switch(me){case "right":return `inset(0 0 0 ${100-a}%)`;case "top":return `inset(0 0 ${100-a}% 0)`;case "bottom":return `inset(${100-a}% 0 0 0)`;case "center":return `circle(${o*150}% at 50% 50%)`;default:return `inset(0 ${100-a}% 0 0)`}}let V=me?[]:Array.from(e.querySelectorAll(c)),P=[],i=[],f=0,we=0,F=false,z=false,_=0,j=false,ae=-1,Ce=-1,K=false,Se=0,ke=0,He,tt=null;function ft(){tt?.destroy(),tt=null;}let Fe=new Set,pt=NaN,Re=true,je=-1,dt=performance.now(),_e=NaN;function nt(){return he?W==="x"?he.scrollLeft:he.scrollTop:W==="x"?window.scrollX:window.scrollY}function gt(){return he?W==="x"?he.clientWidth:he.clientHeight:W==="x"?window.innerWidth:window.innerHeight}function yt(){let o=Je(e,he,W),a=xe(o,o.scroll,gt(),Le,ze);f=a.tStart,we=a.tEnd,Ae&&Ke&&(ft(),tt=Xt(f,we,W));}function Dt(o,a){if(e.style.setProperty("--scroll-draw-progress",String(o)),me){let v=a==="reverse"?1-o:o;e.style.clipPath=$e(v);return}V.forEach((v,le)=>{v.style.strokeDashoffset=a==="reverse"?`${P[le]*o}`:`${P[le]*(1-o)}`,m&&(v.style.opacity=a==="reverse"?`${1-o}`:`${o}`),be&&se?v.style.stroke=We(be,se,o):se&&(v.style.stroke=se),ie!==null&&G!==null?v.style.strokeWidth=`${ie+(G-ie)*o}`:G!==null&&(v.style.strokeWidth=`${G}`),fe!==null&&Y!==null?v.style.fillOpacity=`${fe+(Y-fe)*o}`:Y!==null&&(v.style.fillOpacity=`${Y}`),k&&v.tagName.toLowerCase()==="path"&&i[le]&&v.setAttribute("d",st(i[le],k,o));});}function Ue(){if(e.style.setProperty("--scroll-draw-progress","0"),me){e.style.clipPath=$e(0);return}V.forEach((o,a)=>{o.style.strokeDasharray=`${P[a]}`,o.style.strokeDashoffset=L==="reverse"?"0":`${P[a]}`,m?o.style.opacity=L==="reverse"?"1":"0":o.style.opacity="",be&&(o.style.stroke=be),ie!==null&&(o.style.strokeWidth=`${ie}`),fe!==null&&(o.style.fillOpacity=`${fe}`),k&&o.tagName.toLowerCase()==="path"&&i[a]&&o.setAttribute("d",i[a]);});}if(V.forEach(o=>{Ut(o);let a=qe(o);P.push(a);let v=o.tagName.toLowerCase()==="path";v?i.push(o.getAttribute("d")??""):i.push(""),k&&(v?Yt(i[i.length-1],k,o):ye(`morphTo only applies to <path> elements \u2014 ignored on <${o.tagName}>.`,o)),s?(o.style.strokeDasharray=`${a}`,o.style.strokeDashoffset=L==="reverse"?`${a}`:"0",m&&(o.style.opacity="1"),se&&(o.style.stroke=se),G!==null&&(o.style.strokeWidth=`${G}`),Y!==null&&(o.style.fillOpacity=`${Y}`),k&&o.tagName.toLowerCase()==="path"&&o.setAttribute("d",k)):(o.style.strokeDasharray=`${a}`,o.style.strokeDashoffset=L==="reverse"?"0":`${a}`,m?o.style.opacity=L==="reverse"?"1":"0":o.style.opacity="",be&&(o.style.stroke=be),ie!==null&&(o.style.strokeWidth=`${ie}`),fe!==null&&(o.style.fillOpacity=`${fe}`));}),me){if(s)return e.style.clipPath=$e(1),g?.(),{destroy:()=>{},replay:()=>{},pause:()=>{},resume:()=>{},seek:()=>{},getProgress:()=>1};e.style.clipPath=$e(0);}else if(s)return g?.(),{destroy:()=>{},replay:()=>{},pause:()=>{},resume:()=>{},seek:()=>{},getProgress:()=>1};let ht=typeof d=="string"?et(d):null;function Ht(){return !(ue===false||!jt()||!V.length||!ht||me||W!=="y"||he||u!==1||N!==0||te||X||I!==false||k||w||S||B>0||y||T||g||p||H||de||ve||M!=null||$!=null||A!=null||(x.start??"top bottom").trim()!=="top bottom"||(x.end??"bottom top").trim()!=="bottom top")}function Ft(){let o=++Gt,a=`svg-scroll-draw-${o}`,v=`svg-scroll-draw-host-${o}`,le=`--svg-scroll-draw-${o}`,De=L==="reverse"?"0":"var(--ssd-len)",Pe=L==="reverse"?"var(--ssd-len)":"0",Me=`stroke-dashoffset:${De};`,E=`stroke-dashoffset:${Pe};`;m&&(Me+=`opacity:${L==="reverse"?1:0};`,E+=`opacity:${L==="reverse"?0:1};`);let D=document.createElement("style");D.setAttribute("data-svg-scroll-draw",""),D.textContent=`@keyframes ${a}{from{${Me}}to{${E}}}.${v}{view-timeline-name:${le};view-timeline-axis:block;}.${a}{animation-name:${a};animation-duration:auto;animation-timing-function:${ht};animation-fill-mode:both;animation-timeline:${le};animation-range:cover 0% cover 100%;}`,document.head.appendChild(D),e.classList.add(v);function ce(h,U){h.style.setProperty("--ssd-len",String(P[U])),h.style.strokeDasharray=`${P[U]}`,h.style.strokeDashoffset="",h.style.opacity="",h.style.animationPlayState="",h.classList.add(a);}V.forEach(ce);let b=false,R=-1;function q(){if(R>=0)return R;let h=e.getBoundingClientRect(),{tStart:U,tEnd:Te}=xe({top:h.top,height:h.height},nt(),gt(),Le,ze);return Ee(Q(nt(),U,Te,u))}return {destroy(){e.classList.remove(v),V.forEach(h=>{h.classList.remove(a),h.style.removeProperty("--ssd-len"),h.style.animationPlayState="";}),D.remove();},replay(){b=false,R=-1,V.forEach(ce);},pause(){b=true,V.forEach(h=>{h.style.animationPlayState="paused";});},resume(){b&&(b=false,V.forEach(h=>{h.style.animationPlayState="running";}));},seek(h){let U=Math.min(1,Math.max(0,h));R=U,b=true,V.forEach((Te,ge)=>{Te.classList.remove(a),Te.style.strokeDashoffset=L==="reverse"?`${P[ge]*U}`:`${P[ge]*(1-U)}`,m&&(Te.style.opacity=L==="reverse"?`${1-U}`:`${U}`);});},getProgress(){return q()},refresh(){V.forEach((h,U)=>{P[U]=qe(h),h.style.setProperty("--ssd-len",String(P[U])),h.style.strokeDasharray=`${P[U]}`;});}}}if(Ht())return Ft();function Rt(){let o=Math.max(1,J),a=0,v=0,le=false;function De(b){let R=true;if(me){let q=Math.min(1,Math.max(0,b/o)),h=Ee(q);Se=h,e.style.setProperty("--scroll-draw-progress",String(h)),e.style.clipPath=$e(L==="reverse"?1-h:h),y?.(h),q<1&&(R=false);}else V.forEach((q,h)=>{let U=h*N*o,Te=Math.min(1,Math.max(0,(b-U)/o)),ge=Ee(Te);q.style.strokeDashoffset=L==="reverse"?`${P[h]*ge}`:`${P[h]*(1-ge)}`,m&&(q.style.opacity=L==="reverse"?`${1-ge}`:`${ge}`),be&&se?q.style.stroke=We(be,se,ge):se&&(q.style.stroke=se),ie!==null&&G!==null?q.style.strokeWidth=`${ie+(G-ie)*ge}`:G!==null&&(q.style.strokeWidth=`${G}`),fe!==null&&Y!==null?q.style.fillOpacity=`${fe+(Y-fe)*ge}`:Y!==null&&(q.style.fillOpacity=`${Y}`),k&&q.tagName.toLowerCase()==="path"&&i[h]&&q.setAttribute("d",st(i[h],k,ge)),h===0&&(Se=ge,y?.(ge),e.style.setProperty("--scroll-draw-progress",String(ge))),Te<1&&(R=false);});if(w){let q=Math.min(1,Math.max(0,b/o)),h=Ee(q);for(let U in w){let Te=parseFloat(U);h>=Te&&!Fe.has(Te)&&(Fe.add(Te),w[U]?.());}}return R}function Pe(b){if(K)return;let R=b-a;z||(z=true,T?.());let q=De(R);if(q&&!F){F=true,De(o*(1+Math.max(0,V.length-1)*N)),g?.(),ke<(S==="infinite"?1/0:S??0)&&(ke++,He=setTimeout(()=>{a=performance.now(),z=false,F=false,Fe.clear(),Ue(),_=requestAnimationFrame(Pe);},ne));return}q||(_=requestAnimationFrame(Pe));}function Me(){cancelAnimationFrame(_),clearTimeout(He),a=performance.now(),v=0,K=false,z=false,F=false,ke=0,le=true,Se=0,Fe.clear(),Ue(),_=requestAnimationFrame(Pe);}let E=new IntersectionObserver(b=>{b.forEach(R=>{R.isIntersecting&&!(te&&F)?Me():!R.isIntersecting&&!te&&!F&&(cancelAnimationFrame(_),clearTimeout(He),le=false);});},{root:he??null,threshold:O,rootMargin:C}),D;function ce(){clearTimeout(D),D=setTimeout(()=>{V.forEach((b,R)=>{P[R]=qe(b),b.style.strokeDasharray=`${P[R]}`;});},150);}return window.addEventListener("resize",ce),window.addEventListener("orientationchange",ce),B>0?setTimeout(()=>E.observe(e),B):E.observe(e),{destroy(){cancelAnimationFrame(_),clearTimeout(He),E.disconnect(),window.removeEventListener("resize",ce),window.removeEventListener("orientationchange",ce),clearTimeout(D);},replay(){ke=0,Me();},pause(){K||!le||(K=true,v=performance.now()-a,cancelAnimationFrame(_));},resume(){K&&(K=false,le=true,a=performance.now()-v,_=requestAnimationFrame(Pe));},seek(b){let R=Math.min(1,Math.max(0,b));Se=R,K=true,v=R*o,a=performance.now()-v,cancelAnimationFrame(_),De(v);},getProgress(){return Se},refresh(){clearTimeout(D),V.forEach((b,R)=>{P[R]=qe(b),b.style.strokeDasharray=`${P[R]}`;});}}}if(oe)return Rt();yt();function Xe(){if(!j||K)return;let o=performance.now(),a=nt();if(!Re&&I===false&&a===pt){_=requestAnimationFrame(Xe);return}Re=false,pt=a;let v=u;if(I!==false){let E=o-dt,D=E>0?Math.abs(a-(je<0?a:je))/E:0;v=u*Math.max(.2,1+D*(typeof I=="number"?I:1)*.04);}je=a,dt=o;let le=X?Ce===-1||a>=Ce?"forward":"reverse":L;Ce=a;let De=we-f,Pe=true,Me=De===0?0:(a-f)/De;if(isNaN(_e)||(_e<=0&&Me>0?p?.():_e>0&&Me<=0&&ve?.(),_e<1&&Me>=1?H?.():_e>=1&&Me<1&&de?.()),_e=Me,me){let E=Ee(Q(a,f,we,v));te&&!X&&(ae=Math.max(ae,E),E=ae),Se=E,e.style.setProperty("--scroll-draw-progress",String(E));let D=le==="reverse"?1-E:E;e.style.clipPath=$e(D),y?.(E),!z&&Q(a,f,we,v)>0&&(z=true,T?.()),E>=1&&!F?(F=true,g?.(),ke<(S==="infinite"?1/0:S??0)&&(ke++,He=setTimeout(()=>{ae=-1,z=false,F=false,e.style.clipPath=$e(0);},ne))):E<1&&!te&&(F=false),_=requestAnimationFrame(Xe);return}if(V.forEach((E,D)=>{let ce=D*N*De,b=Ee(Q(a,f+ce,we+ce,v));te&&!X&&(ae=Math.max(ae,b),b=ae),Se=b,E.style.strokeDashoffset=le==="reverse"?`${P[D]*b}`:`${P[D]*(1-b)}`,m&&(E.style.opacity=le==="reverse"?`${1-b}`:`${b}`),be&&se?E.style.stroke=We(be,se,b):se&&(E.style.stroke=se),ie!==null&&G!==null?E.style.strokeWidth=`${ie+(G-ie)*b}`:G!==null&&(E.style.strokeWidth=`${G}`),fe!==null&&Y!==null?E.style.fillOpacity=`${fe+(Y-fe)*b}`:Y!==null&&(E.style.fillOpacity=`${Y}`),k&&E.tagName.toLowerCase()==="path"&&i[D]&&E.setAttribute("d",st(i[D],k,b)),D===0&&(y?.(b),e.style.setProperty("--scroll-draw-progress",String(b))),b<1&&(Pe=false);}),w){let E=Ee(Q(a,f,we,v));for(let D in w){let ce=parseFloat(D);E>=ce&&!Fe.has(ce)&&(Fe.add(ce),w[D]?.());}}!z&&Q(a,f,we,v)>0&&(z=true,T?.()),Pe&&!F?(F=true,g?.(),ke<(S==="infinite"?1/0:S??0)&&(ke++,He=setTimeout(()=>{ae=-1,z=false,F=false,Fe.clear(),Ue(),Re=true;},ne))):!Pe&&!te&&(F=false),_=requestAnimationFrame(Xe);}let rt=false;function Ye(){rt||(rt=true,_=requestAnimationFrame(function(){Xe();}));}function Qe(){rt=false,cancelAnimationFrame(_);}let ot=new IntersectionObserver(o=>{o.forEach(a=>{j=a.isIntersecting,j&&!K?(Re=true,Ye()):Qe();});},{root:he??null,threshold:O,rootMargin:C});function bt(){V.forEach((o,a)=>{P[a]=qe(o),o.style.strokeDasharray=`${P[a]}`;}),yt(),Re=true;}let Ze;function Be(){clearTimeout(Ze),Ze=setTimeout(bt,150);}window.addEventListener("resize",Be),window.addEventListener("orientationchange",Be);let Ge;return typeof ResizeObserver<"u"&&(Ge=new ResizeObserver(()=>Be()),Ge.observe(document.body),Ge.observe(document.documentElement),Ge.observe(e)),B>0?setTimeout(()=>ot.observe(e),B):ot.observe(e),{destroy(){cancelAnimationFrame(_),clearTimeout(He),Qe(),ot.disconnect(),Ge?.disconnect(),window.removeEventListener("resize",Be),window.removeEventListener("orientationchange",Be),clearTimeout(Ze),ft();},replay(){ae=-1,Ce=-1,je=-1,z=false,F=false,ke=0,K=false,Se=0,Fe.clear(),clearTimeout(He),Ue(),Re=true,j&&Ye();},pause(){K=true,Qe();},resume(){K&&(K=false,Re=true,j&&Ye());},seek(o){let a=Math.min(1,Math.max(0,o));Se=a,ae=a,K=true,Qe(),Dt(a,L),Re=true;},getProgress(){return Se},refresh(){clearTimeout(Ze),bt(),j&&!K&&Ye();}}}var At=new Map;function Ne(e,r){At.set(e,r);}function Ve(e){At.delete(e);}function Qt(e){return e.startsWith("#")||e.startsWith("rgb")||e.startsWith("hsl")}function Lt(e){let r=[],n=/([\w]+)\(([^)]*)\)/g,t;for(;(t=n.exec(e))!==null;){let l=[],s=[],c=t[2].trim();if(c)for(let u of c.split(/[\s,]+/)){let m=u.match(/^([-+]?[\d.eE]+)(.*)$/);l.push(m?parseFloat(m[1]):0),s.push(m?m[2]:"");}r.push({fn:t[1],nums:l,units:s});}return r}function Zt(e,r,n){let t=Lt(e),l=Lt(r);return t.length===0||t.length!==l.length?n<1?e:r:t.map((s,c)=>{let u=l[c];return s.fn!==u.fn||s.nums.length!==u.nums.length?n<1?`${s.fn}(${s.nums.map((m,d)=>`${m}${s.units[d]}`).join(", ")})`:`${u.fn}(${u.nums.map((m,d)=>`${m}${u.units[d]}`).join(", ")})`:`${s.fn}(${s.nums.map((m,d)=>`${m+(u.nums[d]-m)*n}${s.units[d]}`).join(", ")})`}).join(" ")}function $t(e,r,n){if(typeof e=="number"&&typeof r=="number")return String(e+(r-e)*n);let t=String(e),l=String(r);if(Qt(t))return We(t,l,n);if(t.includes("("))return Zt(t,l,n);let s=t.match(/^([-+]?[\d.]+)(.*)$/),c=l.match(/^([-+]?[\d.]+)(.*)$/);if(s&&c){let u=parseFloat(s[1]),m=parseFloat(c[1]);return `${u+(m-u)*n}${s[2]||c[2]}`}return n<1?t:l}function Jt(e){return e.replace(/([A-Z])/g,r=>`-${r.toLowerCase()}`)}var Kt=new Set(["opacity","transform","background-color","color","filter","scale","translate","rotate"]),en=0,Ct="--scroll-draw-progress";function tn(){return typeof CSS<"u"&&typeof CSS.supports=="function"&&CSS.supports("animation-timeline: view()")}function at(e,r){let n={destroy:()=>{},replay:()=>{},pause:()=>{},resume:()=>{},seek:()=>{},getProgress:()=>0};if(typeof window>"u")return n;let{props:t,trigger:l={},easing:s="ease-out",speed:c=1,once:u=false,axis:m="y",scrollContainer:d,native:x=true,velocityScale:N=false,respectReducedMotion:L=true,triggerElement:te,onProgress:Ae,onComplete:W,onEnter:Z,onLeave:X,onEnterBack:B,onLeaveBack:M}=r,$=L&&window.matchMedia("(prefers-reduced-motion: reduce)").matches,A=typeof s=="function"?s:ee[s]??ee["ease-out"],w=pe(l.start??"top bottom"),I=pe(l.end??"bottom top"),O=te??e,C=typeof d=="string"?document.querySelector(d):d??null,S=Object.entries(t).map(([i,f])=>({prop:Jt(i),from:Array.isArray(f)?f[0]:"",to:Array.isArray(f)?f[1]:f}));function ne(){let i=window.getComputedStyle(e);for(let f of S)f.from===""&&(f.from=i.getPropertyValue(f.prop).trim()||"0");}function k(){for(let i of S)e.style.setProperty(i.prop,String(i.to));}let re=new Map;for(let i of [...S.map(f=>f.prop),Ct])re.set(i,e.style.getPropertyValue(i));function oe(){for(let[i,f]of re)f?e.style.setProperty(i,f):e.style.removeProperty(i);}if($)return k(),W?.(),{...n,destroy:oe,getProgress:()=>1};ne();let J=typeof s=="string"?et(s):null;function ue(){if(!x||!tn()||!J||m!=="y"||C||O!==e||u||c!==1||Ae||W||Z||X||B||M||N!==false||(l.start??"top bottom").trim()!=="top bottom"||(l.end??"bottom top").trim()!=="bottom top")return false;for(let i of S)if(!Kt.has(i.prop))return false;return true}function y(){let i=`ssd-a-${++en}`,f=S.map(j=>`${j.prop}:${j.from}`).join(";"),we=S.map(j=>`${j.prop}:${j.to}`).join(";"),F=document.createElement("style");F.setAttribute("data-ssd-animate",""),F.textContent=`@keyframes ${i}{from{${f}}to{${we}}}.${i}{animation-name:${i};animation-duration:auto;animation-timing-function:${J};animation-fill-mode:both;animation-timeline:view();animation-range:cover 0% cover 100%;}`,document.head.appendChild(F),e.classList.add(i);let z=()=>m==="x"?window.scrollX:window.scrollY,_=()=>m==="x"?window.innerWidth:window.innerHeight;return {destroy(){e.classList.remove(i),F.remove(),e.style.animationPlayState="",oe();},replay(){e.classList.remove(i),e.offsetWidth,e.classList.add(i);},pause(){e.style.animationPlayState="paused";},resume(){e.style.animationPlayState="";},seek(j){let ae=Math.min(1,Math.max(0,j));e.classList.remove(i);for(let Ce of S)e.style.setProperty(Ce.prop,$t(Ce.from,Ce.to,ae));},getProgress(){let j=e.getBoundingClientRect(),ae=z(),Ce=_(),{tStart:K,tEnd:Se}=xe({top:j.top,height:j.height},ae,Ce,w,I);return A(Q(ae,K,Se,c))}}}if(ue())return y();let T=0,g=0,p=0,H=false,de=false,ve=-1,me=0,Ee=false,Le=NaN,ze=-1,he=0,be=()=>C?m==="x"?C.scrollLeft:C.scrollTop:m==="x"?window.scrollX:window.scrollY,se=()=>C?m==="x"?C.clientWidth:C.clientHeight:m==="x"?window.innerWidth:window.innerHeight;function ie(){let i=Je(O,C,m),f=xe(i,i.scroll,se(),w,I);T=f.tStart,g=f.tEnd;}function G(i){e.style.setProperty(Ct,String(i));for(let f of S)e.style.setProperty(f.prop,$t(f.from,f.to,i));Ae?.(i);}function fe(i){if(isNaN(Le)){Le=i;return}Le<=0&&i>0?Z?.():Le>0&&i<=0&&M?.(),Le<1&&i>=1?X?.():Le>=1&&i<1&&B?.(),Le=i;}function Y(){if(!H||de)return;let i=performance.now(),f=be(),we=c;if(N!==false){let _=i-he,j=_>0?Math.abs(f-(ze<0?f:ze))/_:0;we=c*Math.max(.2,1+j*(typeof N=="number"?N:1)*.04);}ze=f,he=i;let F=g===T?0:(f-T)/(g-T);fe(F);let z=A(Q(f,T,g,we));u&&(ve=Math.max(ve,z),z=ve),me=z,G(z),z>=1&&!Ee?(Ee=true,W?.()):z<1&&!u&&(Ee=false),p=requestAnimationFrame(Y);}ie(),g===T&&ye("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=A(Q(be(),T,g,c));u&&i>0&&(ve=i),me=i,G(i);}let $e=new IntersectionObserver(i=>{i.forEach(f=>{H=f.isIntersecting,H&&!de?p=requestAnimationFrame(Y):cancelAnimationFrame(p);});},{root:C??null}),V;function P(){clearTimeout(V),V=setTimeout(ie,150);}return window.addEventListener("resize",P),window.addEventListener("orientationchange",P),$e.observe(e),Ne(e,{type:"animate",getProgress:()=>me,getTrigger:()=>({tStart:T,tEnd:g})}),{destroy(){cancelAnimationFrame(p),$e.disconnect(),window.removeEventListener("resize",P),window.removeEventListener("orientationchange",P),clearTimeout(V),oe(),Ve(e);},replay(){ve=-1,Ee=false,me=0,de=false,G(0);},pause(){de=true,cancelAnimationFrame(p);},resume(){de&&(de=false,H&&(p=requestAnimationFrame(Y)));},seek(i){let f=Math.min(1,Math.max(0,i));me=f,ve=f,de=true,cancelAnimationFrame(p),G(f);},getProgress(){return me}}}var lt={destroy:()=>{},replay:()=>{},pause:()=>{},resume:()=>{},seek:()=>{},getProgress:()=>0};function ct(e,r){if(typeof window>"u")return lt;let n=typeof e=="string"?document.querySelector(e):e;if(!n)return ye("scrollCounter: element not found:",e),lt;let t=n,{from:l=0,to:s,format:c,easing:u="ease-out",trigger:m={},once:d=true,decimals:x,onComplete:N}=r,L=x!==void 0?y=>y.toFixed(x):c??(y=>String(Math.round(y))),te=typeof u=="function"?u:ee[u]??ee["ease-out"],Ae=pe(m.start??"top 80%"),W=pe(m.end??"top 20%");if(window.matchMedia("(prefers-reduced-motion: reduce)").matches)return t.textContent=L(s),N?.(),lt;let X=0,B=0,M=0,$=false,A=false,w=-1,I=0,O=false,C=()=>window.scrollY,S=()=>window.innerHeight;function ne(){let y=t.getBoundingClientRect(),T=xe({top:y.top,height:y.height},C(),S(),Ae,W);X=T.tStart,B=T.tEnd;}function k(y){t.textContent=L(l+(s-l)*y),t.style.setProperty("--scroll-draw-progress",String(y));}function re(){if(!$||A)return;let y=te(Q(C(),X,B,1));d&&(w=Math.max(w,y),y=w),I=y,k(y),y>=1&&!O?(O=true,N?.()):y<1&&!d&&(O=false),M=requestAnimationFrame(re);}ne();{let y=te(Q(C(),X,B,1));d&&y>0&&(w=y),I=y,k(y);}let oe=new IntersectionObserver(y=>{y.forEach(T=>{$=T.isIntersecting,$&&!A?M=requestAnimationFrame(re):cancelAnimationFrame(M);});}),J;function ue(){clearTimeout(J),J=setTimeout(ne,150);}return window.addEventListener("resize",ue),window.addEventListener("orientationchange",ue),oe.observe(t),Ne(t,{type:"counter",getProgress:()=>I,getTrigger:()=>({tStart:X,tEnd:B})}),{destroy(){cancelAnimationFrame(M),oe.disconnect(),window.removeEventListener("resize",ue),window.removeEventListener("orientationchange",ue),clearTimeout(J),Ve(t);},replay(){w=-1,O=false,I=0,A=false,k(0);},pause(){A=true,cancelAnimationFrame(M);},resume(){A&&(A=false,$&&(M=requestAnimationFrame(re)));},seek(y){let T=Math.min(1,Math.max(0,y));I=T,w=T,A=true,cancelAnimationFrame(M),k(T);},getProgress(){return I}}}var Pt={destroy:()=>{},replay:()=>{},pause:()=>{},resume:()=>{},seek:()=>{},getProgress:()=>0};function ut(e,r={}){if(typeof window>"u")return Pt;let n=typeof e=="string"?document.querySelector(e):e;if(!n||n.tagName.toLowerCase()!=="video")return ye("scrollVideo: <video> element not found:",e),Pt;let t=n,{trigger:l={},easing:s="linear",once:c=false,axis:u="y",preload:m="auto",onReady:d,onComplete:x,onProgress:N}=r,L=window.matchMedia("(prefers-reduced-motion: reduce)").matches,te=typeof s=="function"?s:ee[s]??ee.linear,Ae=pe(l.start??"top top"),W=pe(l.end??"bottom top");t.pause(),t.hasAttribute("preload")||(t.preload=m);let Z=r.from??0,X=r.to,B=0,M=0,$=0,A=false,w=false,I=-1,O=0,C=false,S=false,ne=()=>u==="x"?window.scrollX:window.scrollY,k=()=>u==="x"?window.innerWidth:window.innerHeight;function re(){let p=t.getBoundingClientRect(),H=u==="x"?p.left:p.top,de=u==="x"?p.width:p.height,ve=xe({top:H,height:de},ne(),k(),Ae,W);B=ve.tStart,M=ve.tEnd;}function oe(p){if(!S)return;let H=X??t.duration??0;t.currentTime=Z+(H-Z)*p,t.style.setProperty("--scroll-draw-progress",String(p)),N?.(p);}function J(){if(!A||w||!S)return;let p=te(Q(ne(),B,M,1));c&&(I=Math.max(I,p),p=I),O=p,oe(p),p>=1&&!C?(C=true,x?.()):p<1&&!c&&(C=false),$=requestAnimationFrame(J);}function ue(){if(S=true,X===void 0&&(X=t.duration),L){oe(1),d?.();return}re(),d?.(),A&&!w&&($=requestAnimationFrame(J));}t.readyState>=1?ue():t.addEventListener("loadedmetadata",ue,{once:true}),S||re();let y=new IntersectionObserver(p=>{p.forEach(H=>{A=H.isIntersecting,A&&!w&&S?$=requestAnimationFrame(J):cancelAnimationFrame($);});}),T;function g(){clearTimeout(T),T=setTimeout(re,150);}return window.addEventListener("resize",g),window.addEventListener("orientationchange",g),y.observe(t),Ne(t,{type:"video",getProgress:()=>O,getTrigger:()=>({tStart:B,tEnd:M})}),{destroy(){cancelAnimationFrame($),y.disconnect(),t.removeEventListener("loadedmetadata",ue),window.removeEventListener("resize",g),window.removeEventListener("orientationchange",g),clearTimeout(T),Ve(t);},replay(){I=-1,C=false,O=0,w=false,oe(0);},pause(){w=true,cancelAnimationFrame($);},resume(){w&&(w=false,A&&S&&($=requestAnimationFrame(J)));},seek(p){let H=Math.min(1,Math.max(0,p));O=H,I=H,w=true,cancelAnimationFrame($),oe(H);},getProgress(){return O}}}function kt(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 nn(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 It(e){let r=kt(e),n=new Map;for(let s of r){let c=s.offsetTop;n.has(c)||n.set(c,[]),n.get(c).push(s);}let t=[],l=Array.from(n.keys()).sort((s,c)=>s-c);for(let s of l){let c=n.get(s),u=document.createElement("span");u.setAttribute("aria-hidden","true"),u.style.display="inline-block",c.forEach((m,d)=>{let x=m.nextElementSibling;u.appendChild(m),d<c.length-1&&x&&x.style.whiteSpace==="pre"&&u.appendChild(x);}),t.push(u);}return e.textContent="",t.forEach((s,c)=>{e.appendChild(s),c<t.length-1&&e.appendChild(document.createTextNode(" "));}),t}function rn(e,r,n,t){if(n<=1||t===0)return e;let l=(n-1)*t,s=r*t,c=s+(1-l);return c<=s?e>=s?1:0:Math.min(1,Math.max(0,(e-s)/(c-s)))}function on(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 Ot={destroy:()=>{},replay:()=>{},pause:()=>{},resume:()=>{},seek:()=>{},getProgress:()=>0};function mt(e,r={}){if(typeof window>"u")return Ot;let n=typeof e=="string"?document.querySelector(e):e;if(!n)return ye("scrollText: element not found:",e),Ot;let t=n,{split:l="words",stagger:s=.04,easing:c="ease-out",from:u={opacity:0,y:24},trigger:m={},once:d=true,onComplete:x}=r,N=window.matchMedia("(prefers-reduced-motion: reduce)").matches,L=typeof c=="function"?c:ee[c]??ee["ease-out"],te=pe(m.start??"top 85%"),Ae=pe(m.end??"top 40%"),W=t.innerHTML;t.setAttribute("aria-label",t.textContent??"");let Z;l==="chars"?Z=nn(t):l==="lines"?Z=It(t):Z=kt(t);let X=Z.length;function B(g,p){u?.opacity!==void 0&&(g.style.opacity=String(u.opacity+(1-u.opacity)*p));let H=on(p,u);H&&(g.style.transform=H);}function M(g){t.style.setProperty("--scroll-draw-progress",String(g)),Z.forEach((p,H)=>{let de=L(rn(g,H,X,s));B(p,de);});}if(N)return M(1),x?.(),{destroy(){t.innerHTML=W,t.removeAttribute("aria-label");},replay:()=>{},pause:()=>{},resume:()=>{},seek:()=>{},getProgress:()=>1};M(0);let $=0,A=0,w=0,I=false,O=false,C=-1,S=0,ne=false,k=()=>window.scrollY,re=()=>window.innerHeight;function oe(){let g=t.getBoundingClientRect(),p=xe({top:g.top,height:g.height},k(),re(),te,Ae);$=p.tStart,A=p.tEnd;}function J(){if(!I||O)return;let g=Q(k(),$,A,1);d&&(C=Math.max(C,g),g=C),S=g,M(g),g>=1&&!ne?(ne=true,x?.()):g<1&&!d&&(ne=false),w=requestAnimationFrame(J);}oe();let ue=new IntersectionObserver(g=>{g.forEach(p=>{I=p.isIntersecting,I&&!O?w=requestAnimationFrame(J):cancelAnimationFrame(w);});}),y;function T(){clearTimeout(y),y=setTimeout(()=>{if(l==="lines"){let g=S;t.innerHTML=W,t.setAttribute("aria-label",t.textContent??""),Z=It(t),M(g);}oe();},150);}return window.addEventListener("resize",T),window.addEventListener("orientationchange",T),ue.observe(t),Ne(t,{type:"text",getProgress:()=>S,getTrigger:()=>({tStart:$,tEnd:A})}),{destroy(){cancelAnimationFrame(w),ue.disconnect(),window.removeEventListener("resize",T),window.removeEventListener("orientationchange",T),clearTimeout(y),t.innerHTML=W,t.removeAttribute("aria-label"),Ve(t);},replay(){C=-1,ne=false,S=0,O=false,M(0);},pause(){O=true,cancelAnimationFrame(w);},resume(){O&&(O=false,I&&(w=requestAnimationFrame(J)));},seek(g){let p=Math.min(1,Math.max(0,g));S=p,C=p,O=true,cancelAnimationFrame(w),M(p);},getProgress(){return S}}}function zn(e={}){let r,n;return onMount(()=>{r&&(n=it(r,e));}),onCleanup(()=>{n?.destroy();}),t=>{r=t;}}function _n(e={}){let r,n;return onMount(()=>{r&&(n=it(r,e));}),onCleanup(()=>{n?.destroy(),n=void 0;}),{ref:t=>{r=t;},getInstance:()=>n}}function qn(e){let r,n;return onMount(()=>{r&&(n=at(r,e));}),onCleanup(()=>{n?.destroy();}),t=>{r=t;}}function Wn(e){let r,n;return onMount(()=>{r&&(n=at(r,e));}),onCleanup(()=>{n?.destroy(),n=void 0;}),{ref:t=>{r=t;},getInstance:()=>n}}function Bn(e){let r,n;return onMount(()=>{r&&(n=ct(r,e));}),onCleanup(()=>{n?.destroy();}),t=>{r=t;}}function Gn(e){let r,n;return onMount(()=>{r&&(n=ct(r,e));}),onCleanup(()=>{n?.destroy(),n=void 0;}),{ref:t=>{r=t;},getInstance:()=>n}}function jn(e={}){let r,n;return onMount(()=>{r&&(n=ut(r,e));}),onCleanup(()=>{n?.destroy();}),t=>{r=t;}}function Un(e={}){let r,n;return onMount(()=>{r&&(n=ut(r,e));}),onCleanup(()=>{n?.destroy(),n=void 0;}),{ref:t=>{r=t;},getInstance:()=>n}}function Xn(e={}){let r,n;return onMount(()=>{r&&(n=mt(r,e));}),onCleanup(()=>{n?.destroy();}),t=>{r=t;}}function Yn(e={}){let r,n;return onMount(()=>{r&&(n=mt(r,e));}),onCleanup(()=>{n?.destroy(),n=void 0;}),{ref:t=>{r=t;},getInstance:()=>n}}export{Wn as createScrollAnimate,Gn as createScrollCounter,_n as createScrollDraw,Yn as createScrollText,Un as createScrollVideo,qn as useScrollAnimate,Bn as useScrollCounter,zn as useScrollDraw,Xn as useScrollText,jn as useScrollVideo};