svg-scroll-draw 2.16.0 → 2.17.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.
@@ -1,3 +1,3 @@
1
- 'use strict';var solidJs=require('solid-js');function Bt({bounces:e=3,decay:n=.5}={}){let r=Math.max(1,Math.round(e)),t=Math.max(.01,Math.min(.99,n)),l=Math.sqrt(t),s=0,c=[];for(let p=0;p<r;p++){let T=Math.pow(l,p);c.push(T),s+=T;}let u=[0],m=0;for(let p=0;p<r;p++)m+=c[p]/s,u.push(m);return p=>{if(p<=0)return 0;if(p>=1)return 1;for(let T=0;T<r;T++)if(p<=u[T+1]){let V=(p-u[T])/(u[T+1]-u[T]);if(T===0)return V*(2-V);let M=1-Math.pow(t,T);return M+(1-M)*(2*V-1)*(2*V-1)}return 1}}function Gt({amplitude:e=1,period:n=.4}={}){let r=Math.max(1,e),t=Math.max(.1,n),l=r<=1?t/4:t/(2*Math.PI)*Math.asin(1/r);return s=>s<=0?0:s>=1?1:r*Math.pow(2,-10*s)*Math.sin((s-l)*(2*Math.PI)/t)+1}var re={linear:e=>e,"ease-in":e=>e*e,"ease-out":e=>e*(2-e),"ease-in-out":e=>e<.5?2*e*e:-1+(4-2*e)*e,spring:e=>1-Math.cos(e*Math.PI*2.5)*Math.pow(1-e,2.2),bounce:Bt(),elastic:Gt()};function Et(e,n,r){return Math.min(r,Math.max(n,e))}function de(e="top bottom"){let n=e.trim();if(/^\d+(\.\d+)?%$/.test(n))return {element:"top",viewport:n};let[r="top",t="bottom"]=n.split(/\s+/).filter(Boolean);return {element:r,viewport:t}}function St(e,n,r,t){switch(t){case "top":return e+r;case "center":return e+r+n/2;case "bottom":return e+r+n;default:return e+r}}function Tt(e,n){if(/^\d+(\.\d+)?%$/.test(e))return n*(parseFloat(e)/100);switch(e){case "top":return 0;case "center":return n/2;case "bottom":return n;default:return n}}function K(e,n,r,t){return r===n?0:Et((e-n)/(r-n)*t,0,1)}function xe(e,n,r,t,l){let s=St(e.top,e.height,n,t.element)-Tt(t.viewport,r),c=St(e.top,e.height,n,l.element)-Tt(l.viewport,r);return {tStart:s,tEnd:c}}function Je(e,n,r){let t=e.getBoundingClientRect(),l=r==="x"?t.width:t.height;return n?{top:r==="x"?t.left-n.getBoundingClientRect().left+n.scrollLeft:t.top-n.getBoundingClientRect().top+n.scrollTop,height:l,scroll:0}:{top:r==="x"?t.left:t.top,height:l,scroll:r==="x"?window.scrollX:window.scrollY}}function qe(e){let n=e.tagName.toLowerCase();if(n==="rect"){let r=parseFloat(e.getAttribute("width")??"0"),t=parseFloat(e.getAttribute("height")??"0");return 2*(r+t)}if(n==="circle"){let r=parseFloat(e.getAttribute("r")??"0");return 2*Math.PI*r}return e.getTotalLength()}function xt(e){let n=/^#([a-f\d])([a-f\d])([a-f\d])$/i.exec(e);if(n)return [parseInt(n[1]+n[1],16),parseInt(n[2]+n[2],16),parseInt(n[3]+n[3],16)];let r=/^#([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(e);if(r)return [parseInt(r[1],16),parseInt(r[2],16),parseInt(r[3],16)];let t=/^rgb\(\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*\)$/i.exec(e);return t?[parseInt(t[1]),parseInt(t[2]),parseInt(t[3])]:null}function We(e,n,r){let t=xt(e),l=xt(n);return !t||!l?e:`rgb(${Math.round(t[0]+(l[0]-t[0])*r)},${Math.round(t[1]+(l[1]-t[1])*r)},${Math.round(t[2]+(l[2]-t[2])*r)})`}var Mt={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 je=typeof __SVG_SCROLL_DRAW_DEV__<"u"?__SVG_SCROLL_DRAW_DEV__:typeof process<"u"&&typeof process.env<"u"&&process.env.NODE_ENV!=="production";function we(e,...n){je&&console.warn(`[svg-scroll-draw] ${e}`,...n);}var jt="cubic-bezier(0.333333, 0, 0.666667, 0.333333)",Ut="cubic-bezier(0.333333, 0.666667, 0.666667, 1)",At=33;function Yt(){return typeof CSS<"u"&&typeof CSS.supports=="function"&&CSS.supports("animation-timing-function: linear(0, 1)")}function Xt(e){let n=[];for(let r=0;r<At;r++){let t=r/(At-1);n.push(String(Math.round(e(t)*1e5)/1e5));}return `linear(${n.join(",")})`}function et(e){switch(e){case "linear":return "linear";case "ease-in":return jt;case "ease-out":return Ut;case "ease-in-out":return Yt()?Xt(re["ease-in-out"]):null;default:return null}}var Lt=Symbol.for("svg-scroll-draw.registry");function $t(){let e=globalThis;return e[Lt]||(e[Lt]=new Map)}function Le(e,n){$t().set(e,n);}function $e(e){$t().delete(e);}var Qt=0;function Zt(){return typeof CSS<"u"&&typeof CSS.supports=="function"&&CSS.supports("animation-timeline: view()")&&CSS.supports("view-timeline-name: --x")}function Ct(e,n){let r="";try{r=getComputedStyle(e).getPropertyValue(n).trim();}catch{}return r||(e.getAttribute(n)??"").trim()}var Pt=new Set(["","none","transparent","rgba(0, 0, 0, 0)"]);function Kt(e){if(!je)return;let n=Ct(e,"stroke");if(!n||n==="none"){we("Element has no stroke \u2014 path will not be visible.",e);return}let r=(e.getAttribute("fill")??"").trim();r&&!Pt.has(r)&&!Pt.has(Ct(e,"fill"))&&we("Element has a fill \u2014 it may obscure the stroke animation.",e);}function Jt(e,n,r){let t=document.createElement("div");t.setAttribute("data-svg-scroll-draw-debug",""),t.style.cssText="position:fixed;pointer-events:none;z-index:9999;font-family:monospace;font-size:11px;top:0;left:0;right:0;bottom:0;";function l(){let s=r==="x"?window.scrollX:window.scrollY,c=e-s,u=n-s,m=r==="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 It=/[-+]?(?:\d*\.)?\d+(?:[eE][-+]?\d+)?/g,kt=/[MmLlHhVvCcSsQqTtAaZz]/g;function er(e,n,r){if(!je)return;let t=(e.match(kt)??[]).join("").toUpperCase(),l=(n.match(kt)??[]).join("").toUpperCase(),s=(e.match(It)??[]).length,c=(n.match(It)??[]).length;if(t!==l){we(`morphTo: command sequence differs (${t||"\u2205"} \u2192 ${l||"\u2205"}). Interpolation is coordinate-for-coordinate, so the result will not reach the target shape. Redraw both paths with the same commands.`,r);return}s!==c&&we(`morphTo: coordinate count differs (${s} \u2192 ${c}). Extra coordinates are ignored and missing ones hold their start value, so the result will not reach the target shape.`,r);}function it(e,n,r){let t=(n.match(/[-+]?(?:\d*\.)?\d+(?:[eE][-+]?\d+)?/g)??[]).map(Number),l=0;return e.replace(/[-+]?(?:\d*\.)?\d+(?:[eE][-+]?\d+)?/g,s=>{let c=parseFloat(s),u=t[l++]??c;return String(+(c+(u-c)*r).toFixed(4))})}function at(e,n={}){if(typeof window>"u")return {destroy:()=>{},replay:()=>{},pause:()=>{},resume:()=>{},seek:()=>{},getProgress:()=>0};let{preset:r,...t}=n,l=r?{...Mt[r],...t}:t,s=window.matchMedia("(prefers-reduced-motion: reduce)").matches,{selector:c="path, polyline, line, polygon, rect, circle",speed:u=1,fade:m=false,easing:p="linear",trigger:T={},stagger:V=0,direction:M="forward",once:ne=false,debug:Ce=false,axis:B="y",scrollContainer:J,autoReverse:X=false,delay:G=0,strokeColor:A,strokeWidth:C,fillOpacity:L,waypoints:w,velocityScale:k=false,threshold:O=0,rootMargin:P="0px",repeat:E=0,repeatDelay:oe=0,morphTo:D,clip:se,autoplay:ie=false,duration:ee=1e3,native:ae=true,onProgress:d,onStart:x,onComplete:g,onEnter:$,onLeave:S,onEnterBack:F,onLeaveBack:fe}=l,Q=se===true?"left":typeof se=="string"?se:false,Se=typeof p=="function"?p:re[p]??re.linear,Pe=de(T.start??"top bottom"),ze=de(T.end??"bottom top"),ve=typeof J=="string"?document.querySelector(J):J??null,Ee=Array.isArray(A)?A[0]:null,le=Array.isArray(A)?A[1]:typeof A=="string"?A:null,ce=Array.isArray(C)?C[0]:null,j=Array.isArray(C)?C[1]:typeof C=="number"?C:null,pe=Array.isArray(L)?L[0]:null,Z=Array.isArray(L)?L[1]:typeof L=="number"?L:null;function Ie(o){let a=o*100;switch(Q){case "right":return `inset(0 0 0 ${100-a}%)`;case "top":return `inset(0 0 ${100-a}% 0)`;case "bottom":return `inset(${100-a}% 0 0 0)`;case "center":return `circle(${o*150}% at 50% 50%)`;default:return `inset(0 ${100-a}% 0 0)`}}let z=Q?[]:Array.from(e.querySelectorAll(c)),I=[],i=[],f=0,ge=0,R=false,_=false,q=0,Me=false,ye=-1,te=-1,U=false,he=0,He=0,Re,tt=null;function pt(){tt?.destroy(),tt=null;}let Ne=new Set,dt=NaN,Ve=true,Ue=-1,gt=performance.now(),_e=NaN;function rt(){return ve?B==="x"?ve.scrollLeft:ve.scrollTop:B==="x"?window.scrollX:window.scrollY}function yt(){return ve?B==="x"?ve.clientWidth:ve.clientHeight:B==="x"?window.innerWidth:window.innerHeight}function ht(){let o=Je(e,ve,B);return xe(o,o.scroll,yt(),Pe,ze)}function bt(){(({tStart:f,tEnd:ge}=ht())),Ce&&je&&(pt(),tt=Jt(f,ge,B));}function nt(o,a=ht){Le(e,{type:"draw",getProgress:()=>o.getProgress(),getTrigger:a});let b=o.destroy;return o.destroy=()=>{b.call(o),$e(e);},o}function zt(o,a){if(e.style.setProperty("--scroll-draw-progress",String(o)),Q){let b=a==="reverse"?1-o:o;e.style.clipPath=Ie(b);return}z.forEach((b,ue)=>{b.style.strokeDashoffset=a==="reverse"?`${I[ue]*o}`:`${I[ue]*(1-o)}`,m&&(b.style.opacity=a==="reverse"?`${1-o}`:`${o}`),Ee&&le?b.style.stroke=We(Ee,le,o):le&&(b.style.stroke=le),ce!==null&&j!==null?b.style.strokeWidth=`${ce+(j-ce)*o}`:j!==null&&(b.style.strokeWidth=`${j}`),pe!==null&&Z!==null?b.style.fillOpacity=`${pe+(Z-pe)*o}`:Z!==null&&(b.style.fillOpacity=`${Z}`),D&&b.tagName.toLowerCase()==="path"&&i[ue]&&b.setAttribute("d",it(i[ue],D,o));});}function Ye(){if(e.style.setProperty("--scroll-draw-progress","0"),Q){e.style.clipPath=Ie(0);return}z.forEach((o,a)=>{o.style.strokeDasharray=`${I[a]}`,o.style.strokeDashoffset=M==="reverse"?"0":`${I[a]}`,m?o.style.opacity=M==="reverse"?"1":"0":o.style.opacity="",Ee&&(o.style.stroke=Ee),ce!==null&&(o.style.strokeWidth=`${ce}`),pe!==null&&(o.style.fillOpacity=`${pe}`),D&&o.tagName.toLowerCase()==="path"&&i[a]&&o.setAttribute("d",i[a]);});}if(z.forEach(o=>{Kt(o);let a=qe(o);I.push(a);let b=o.tagName.toLowerCase()==="path";b?i.push(o.getAttribute("d")??""):i.push(""),D&&(b?er(i[i.length-1],D,o):we(`morphTo only applies to <path> elements \u2014 ignored on <${o.tagName}>.`,o)),s?(o.style.strokeDasharray=`${a}`,o.style.strokeDashoffset=M==="reverse"?`${a}`:"0",m&&(o.style.opacity="1"),le&&(o.style.stroke=le),j!==null&&(o.style.strokeWidth=`${j}`),Z!==null&&(o.style.fillOpacity=`${Z}`),D&&o.tagName.toLowerCase()==="path"&&o.setAttribute("d",D)):(o.style.strokeDasharray=`${a}`,o.style.strokeDashoffset=M==="reverse"?"0":`${a}`,m?o.style.opacity=M==="reverse"?"1":"0":o.style.opacity="",Ee&&(o.style.stroke=Ee),ce!==null&&(o.style.strokeWidth=`${ce}`),pe!==null&&(o.style.fillOpacity=`${pe}`));}),Q){if(s)return e.style.clipPath=Ie(1),g?.(),{destroy:()=>{},replay:()=>{},pause:()=>{},resume:()=>{},seek:()=>{},getProgress:()=>1};e.style.clipPath=Ie(0);}else if(s)return g?.(),{destroy:()=>{},replay:()=>{},pause:()=>{},resume:()=>{},seek:()=>{},getProgress:()=>1};let wt=typeof p=="string"?et(p):null;function _t(){return !(ae===false||!Zt()||!z.length||!wt||Q||B!=="y"||ve||u!==1||V!==0||ne||X||k!==false||D||w||E||G>0||d||x||g||$||S||F||fe||A!=null||C!=null||L!=null||(T.start??"top bottom").trim()!=="top bottom"||(T.end??"bottom top").trim()!=="bottom top")}function qt(){let o=++Qt,a=`svg-scroll-draw-${o}`,b=`svg-scroll-draw-host-${o}`,ue=`--svg-scroll-draw-${o}`,Fe=M==="reverse"?"0":"var(--ssd-len)",ke=M==="reverse"?"var(--ssd-len)":"0",Ae=`stroke-dashoffset:${Fe};`,v=`stroke-dashoffset:${ke};`;m&&(Ae+=`opacity:${M==="reverse"?1:0};`,v+=`opacity:${M==="reverse"?0:1};`);let H=document.createElement("style");H.setAttribute("data-svg-scroll-draw",""),H.textContent=`@keyframes ${a}{from{${Ae}}to{${v}}}.${b}{view-timeline-name:${ue};view-timeline-axis:block;}.${a}{animation-name:${a};animation-duration:auto;animation-timing-function:${wt};animation-fill-mode:both;animation-timeline:${ue};animation-range:cover 0% cover 100%;}`,document.head.appendChild(H),e.classList.add(b);function me(y,Y){y.style.setProperty("--ssd-len",String(I[Y])),y.style.strokeDasharray=`${I[Y]}`,y.style.strokeDashoffset="",y.style.opacity="",y.style.animationPlayState="",y.classList.add(a);}z.forEach(me);let h=false,N=-1;function W(){if(N>=0)return N;let y=e.getBoundingClientRect(),{tStart:Y,tEnd:Te}=xe({top:y.top,height:y.height},rt(),yt(),Pe,ze);return Se(K(rt(),Y,Te,u))}return {destroy(){e.classList.remove(b),z.forEach(y=>{y.classList.remove(a),y.style.removeProperty("--ssd-len"),y.style.animationPlayState="";}),H.remove();},replay(){h=false,N=-1,z.forEach(me);},pause(){h=true,z.forEach(y=>{y.style.animationPlayState="paused";});},resume(){h&&(h=false,z.forEach(y=>{y.style.animationPlayState="running";}));},seek(y){let Y=Math.min(1,Math.max(0,y));N=Y,h=true,z.forEach((Te,be)=>{Te.classList.remove(a),Te.style.strokeDashoffset=M==="reverse"?`${I[be]*Y}`:`${I[be]*(1-Y)}`,m&&(Te.style.opacity=M==="reverse"?`${1-Y}`:`${Y}`);});},getProgress(){return W()},refresh(){z.forEach((y,Y)=>{I[Y]=qe(y),y.style.setProperty("--ssd-len",String(I[Y])),y.style.strokeDasharray=`${I[Y]}`;});}}}if(_t())return nt(qt());function Wt(){let o=Math.max(1,ee),a=0,b=0,ue=false;function Fe(h){let N=true;if(Q){let W=Math.min(1,Math.max(0,h/o)),y=Se(W);he=y,e.style.setProperty("--scroll-draw-progress",String(y)),e.style.clipPath=Ie(M==="reverse"?1-y:y),d?.(y),W<1&&(N=false);}else z.forEach((W,y)=>{let Y=y*V*o,Te=Math.min(1,Math.max(0,(h-Y)/o)),be=Se(Te);W.style.strokeDashoffset=M==="reverse"?`${I[y]*be}`:`${I[y]*(1-be)}`,m&&(W.style.opacity=M==="reverse"?`${1-be}`:`${be}`),Ee&&le?W.style.stroke=We(Ee,le,be):le&&(W.style.stroke=le),ce!==null&&j!==null?W.style.strokeWidth=`${ce+(j-ce)*be}`:j!==null&&(W.style.strokeWidth=`${j}`),pe!==null&&Z!==null?W.style.fillOpacity=`${pe+(Z-pe)*be}`:Z!==null&&(W.style.fillOpacity=`${Z}`),D&&W.tagName.toLowerCase()==="path"&&i[y]&&W.setAttribute("d",it(i[y],D,be)),y===0&&(he=be,d?.(be),e.style.setProperty("--scroll-draw-progress",String(be))),Te<1&&(N=false);});if(w){let W=Math.min(1,Math.max(0,h/o)),y=Se(W);for(let Y in w){let Te=parseFloat(Y);y>=Te&&!Ne.has(Te)&&(Ne.add(Te),w[Y]?.());}}return N}function ke(h){if(U)return;let N=h-a;_||(_=true,x?.());let W=Fe(N);if(W&&!R){R=true,Fe(o*(1+Math.max(0,z.length-1)*V)),g?.(),He<(E==="infinite"?1/0:E??0)&&(He++,Re=setTimeout(()=>{a=performance.now(),_=false,R=false,Ne.clear(),Ye(),q=requestAnimationFrame(ke);},oe));return}W||(q=requestAnimationFrame(ke));}function Ae(){cancelAnimationFrame(q),clearTimeout(Re),a=performance.now(),b=0,U=false,_=false,R=false,He=0,ue=true,he=0,Ne.clear(),Ye(),q=requestAnimationFrame(ke);}let v=new IntersectionObserver(h=>{h.forEach(N=>{N.isIntersecting&&!(ne&&R)?Ae():!N.isIntersecting&&!ne&&!R&&(cancelAnimationFrame(q),clearTimeout(Re),ue=false);});},{root:ve??null,threshold:O,rootMargin:P}),H;function me(){clearTimeout(H),H=setTimeout(()=>{z.forEach((h,N)=>{I[N]=qe(h),h.style.strokeDasharray=`${I[N]}`;});},150);}return window.addEventListener("resize",me),window.addEventListener("orientationchange",me),G>0?setTimeout(()=>v.observe(e),G):v.observe(e),{destroy(){cancelAnimationFrame(q),clearTimeout(Re),v.disconnect(),window.removeEventListener("resize",me),window.removeEventListener("orientationchange",me),clearTimeout(H);},replay(){He=0,Ae();},pause(){U||!ue||(U=true,b=performance.now()-a,cancelAnimationFrame(q));},resume(){U&&(U=false,ue=true,a=performance.now()-b,q=requestAnimationFrame(ke));},seek(h){let N=Math.min(1,Math.max(0,h));he=N,U=true,b=N*o,a=performance.now()-b,cancelAnimationFrame(q),Fe(b);},getProgress(){return he},refresh(){clearTimeout(H),z.forEach((h,N)=>{I[N]=qe(h),h.style.strokeDasharray=`${I[N]}`;});}}}if(ie)return nt(Wt());bt();function Xe(){if(!Me||U)return;let o=performance.now(),a=rt();if(!Ve&&k===false&&a===dt){q=requestAnimationFrame(Xe);return}Ve=false,dt=a;let b=u;if(k!==false){let v=o-gt,H=v>0?Math.abs(a-(Ue<0?a:Ue))/v:0;b=u*Math.max(.2,1+H*(typeof k=="number"?k:1)*.04);}Ue=a,gt=o;let ue=X?te===-1||a>=te?"forward":"reverse":M;te=a;let Fe=ge-f,ke=true,Ae=Fe===0?0:(a-f)/Fe;if(isNaN(_e)||(_e<=0&&Ae>0?$?.():_e>0&&Ae<=0&&fe?.(),_e<1&&Ae>=1?S?.():_e>=1&&Ae<1&&F?.()),_e=Ae,Q){let v=Se(K(a,f,ge,b));ne&&!X&&(ye=Math.max(ye,v),v=ye),he=v,e.style.setProperty("--scroll-draw-progress",String(v));let H=ue==="reverse"?1-v:v;e.style.clipPath=Ie(H),d?.(v),!_&&K(a,f,ge,b)>0&&(_=true,x?.()),v>=1&&!R?(R=true,g?.(),He<(E==="infinite"?1/0:E??0)&&(He++,Re=setTimeout(()=>{ye=-1,_=false,R=false,e.style.clipPath=Ie(0);},oe))):v<1&&!ne&&(R=false),q=requestAnimationFrame(Xe);return}if(z.forEach((v,H)=>{let me=H*V*Fe,h=Se(K(a,f+me,ge+me,b));ne&&!X&&(ye=Math.max(ye,h),h=ye),he=h,v.style.strokeDashoffset=ue==="reverse"?`${I[H]*h}`:`${I[H]*(1-h)}`,m&&(v.style.opacity=ue==="reverse"?`${1-h}`:`${h}`),Ee&&le?v.style.stroke=We(Ee,le,h):le&&(v.style.stroke=le),ce!==null&&j!==null?v.style.strokeWidth=`${ce+(j-ce)*h}`:j!==null&&(v.style.strokeWidth=`${j}`),pe!==null&&Z!==null?v.style.fillOpacity=`${pe+(Z-pe)*h}`:Z!==null&&(v.style.fillOpacity=`${Z}`),D&&v.tagName.toLowerCase()==="path"&&i[H]&&v.setAttribute("d",it(i[H],D,h)),H===0&&(d?.(h),e.style.setProperty("--scroll-draw-progress",String(h))),h<1&&(ke=false);}),w){let v=Se(K(a,f,ge,b));for(let H in w){let me=parseFloat(H);v>=me&&!Ne.has(me)&&(Ne.add(me),w[H]?.());}}!_&&K(a,f,ge,b)>0&&(_=true,x?.()),ke&&!R?(R=true,g?.(),He<(E==="infinite"?1/0:E??0)&&(He++,Re=setTimeout(()=>{ye=-1,_=false,R=false,Ne.clear(),Ye(),Ve=true;},oe))):!ke&&!ne&&(R=false),q=requestAnimationFrame(Xe);}let ot=false;function Qe(){ot||(ot=true,q=requestAnimationFrame(function(){Xe();}));}function Ze(){ot=false,cancelAnimationFrame(q);}let st=new IntersectionObserver(o=>{o.forEach(a=>{Me=a.isIntersecting,Me&&!U?(Ve=true,Qe()):Ze();});},{root:ve??null,threshold:O,rootMargin:P});function vt(){z.forEach((o,a)=>{I[a]=qe(o),o.style.strokeDasharray=`${I[a]}`;}),bt(),Ve=true;}let Ke;function Be(){clearTimeout(Ke),Ke=setTimeout(vt,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)),G>0?setTimeout(()=>st.observe(e),G):st.observe(e),nt({destroy(){cancelAnimationFrame(q),clearTimeout(Re),Ze(),st.disconnect(),Ge?.disconnect(),window.removeEventListener("resize",Be),window.removeEventListener("orientationchange",Be),clearTimeout(Ke),pt();},replay(){ye=-1,te=-1,Ue=-1,_=false,R=false,He=0,U=false,he=0,Ne.clear(),clearTimeout(Re),Ye(),Ve=true,Me&&Qe();},pause(){U=true,Ze();},resume(){U&&(U=false,Ve=true,Me&&Qe());},seek(o){let a=Math.min(1,Math.max(0,o));he=a,ye=a,U=true,Ze(),zt(a,M),Ve=true;},getProgress(){return he},refresh(){clearTimeout(Ke),vt(),Me&&!U&&Qe();}},()=>({tStart:f,tEnd:ge}))}function tr(e){return e.startsWith("#")||e.startsWith("rgb")||e.startsWith("hsl")}function Ot(e){let n=[],r=/([\w]+)\(([^)]*)\)/g,t;for(;(t=r.exec(e))!==null;){let l=[],s=[],c=t[2].trim();if(c)for(let u of c.split(/[\s,]+/)){let m=u.match(/^([-+]?[\d.eE]+)(.*)$/);l.push(m?parseFloat(m[1]):0),s.push(m?m[2]:"");}n.push({fn:t[1],nums:l,units:s});}return n}function rr(e,n,r){let t=Ot(e),l=Ot(n);return t.length===0||t.length!==l.length?r<1?e:n:t.map((s,c)=>{let u=l[c];return s.fn!==u.fn||s.nums.length!==u.nums.length?r<1?`${s.fn}(${s.nums.map((m,p)=>`${m}${s.units[p]}`).join(", ")})`:`${u.fn}(${u.nums.map((m,p)=>`${m}${u.units[p]}`).join(", ")})`:`${s.fn}(${s.nums.map((m,p)=>`${m+(u.nums[p]-m)*r}${s.units[p]}`).join(", ")})`}).join(" ")}function Dt(e,n,r){if(typeof e=="number"&&typeof n=="number")return String(e+(n-e)*r);let t=String(e),l=String(n);if(tr(t))return We(t,l,r);if(t.includes("("))return rr(t,l,r);let s=t.match(/^([-+]?[\d.]+)(.*)$/),c=l.match(/^([-+]?[\d.]+)(.*)$/);if(s&&c){let u=parseFloat(s[1]),m=parseFloat(c[1]);return `${u+(m-u)*r}${s[2]||c[2]}`}return r<1?t:l}function nr(e){return e.replace(/([A-Z])/g,n=>`-${n.toLowerCase()}`)}var or=new Set(["opacity","transform","background-color","color","filter","scale","translate","rotate"]),sr=0,Ht="--scroll-draw-progress";function ir(){return typeof CSS<"u"&&typeof CSS.supports=="function"&&CSS.supports("animation-timeline: view()")}function lt(e,n){let r={destroy:()=>{},replay:()=>{},pause:()=>{},resume:()=>{},seek:()=>{},getProgress:()=>0};if(typeof window>"u")return r;let{props:t,trigger:l={},easing:s="ease-out",speed:c=1,once:u=false,axis:m="y",scrollContainer:p,native:T=true,velocityScale:V=false,respectReducedMotion:M=true,triggerElement:ne,onProgress:Ce,onComplete:B,onEnter:J,onLeave:X,onEnterBack:G,onLeaveBack:A}=n,C=M&&window.matchMedia("(prefers-reduced-motion: reduce)").matches,L=typeof s=="function"?s:re[s]??re["ease-out"],w=de(l.start??"top bottom"),k=de(l.end??"bottom top"),O=ne??e,P=typeof p=="string"?document.querySelector(p):p??null,E=Object.entries(t).map(([i,f])=>({prop:nr(i),from:Array.isArray(f)?f[0]:"",to:Array.isArray(f)?f[1]:f}));function oe(){let i=window.getComputedStyle(e);for(let f of E)f.from===""&&(f.from=i.getPropertyValue(f.prop).trim()||"0");}function D(){for(let i of E)e.style.setProperty(i.prop,String(i.to));}let se=new Map;for(let i of [...E.map(f=>f.prop),Ht])se.set(i,e.style.getPropertyValue(i));function ie(){for(let[i,f]of se)f?e.style.setProperty(i,f):e.style.removeProperty(i);}if(C)return D(),B?.(),{...r,destroy:ie,getProgress:()=>1};oe();let ee=typeof s=="string"?et(s):null;function ae(){if(!T||!ir()||!ee||m!=="y"||P||O!==e||u||c!==1||Ce||B||J||X||G||A||V!==false||(l.start??"top bottom").trim()!=="top bottom"||(l.end??"bottom top").trim()!=="bottom top")return false;for(let i of E)if(!or.has(i.prop))return false;return true}function d(){let i=`ssd-a-${++sr}`,f=E.map(te=>`${te.prop}:${te.from}`).join(";"),ge=E.map(te=>`${te.prop}:${te.to}`).join(";"),R=document.createElement("style");R.setAttribute("data-ssd-animate",""),R.textContent=`@keyframes ${i}{from{${f}}to{${ge}}}.${i}{animation-name:${i};animation-duration:auto;animation-timing-function:${ee};animation-fill-mode:both;animation-timeline:view();animation-range:cover 0% cover 100%;}`,document.head.appendChild(R),e.classList.add(i);let _=()=>m==="x"?window.scrollX:window.scrollY,q=()=>m==="x"?window.innerWidth:window.innerHeight,Me=()=>{let te=e.getBoundingClientRect();return xe({top:te.top,height:te.height},_(),q(),w,k)};Le(e,{type:"animate",getProgress:()=>ye.getProgress(),getTrigger:Me});let ye={destroy(){e.classList.remove(i),R.remove(),e.style.animationPlayState="",ie(),$e(e);},replay(){e.classList.remove(i),e.offsetWidth,e.classList.add(i);},pause(){e.style.animationPlayState="paused";},resume(){e.style.animationPlayState="";},seek(te){let U=Math.min(1,Math.max(0,te));e.classList.remove(i);for(let he of E)e.style.setProperty(he.prop,Dt(he.from,he.to,U));},getProgress(){let{tStart:te,tEnd:U}=Me();return L(K(_(),te,U,c))}};return ye}if(ae())return d();let x=0,g=0,$=0,S=false,F=false,fe=-1,Q=0,Se=false,Pe=NaN,ze=-1,ve=0,Ee=()=>P?m==="x"?P.scrollLeft:P.scrollTop:m==="x"?window.scrollX:window.scrollY,le=()=>P?m==="x"?P.clientWidth:P.clientHeight:m==="x"?window.innerWidth:window.innerHeight;function ce(){let i=Je(O,P,m),f=xe(i,i.scroll,le(),w,k);x=f.tStart,g=f.tEnd;}function j(i){e.style.setProperty(Ht,String(i));for(let f of E)e.style.setProperty(f.prop,Dt(f.from,f.to,i));Ce?.(i);}function pe(i){if(isNaN(Pe)){Pe=i;return}Pe<=0&&i>0?J?.():Pe>0&&i<=0&&A?.(),Pe<1&&i>=1?X?.():Pe>=1&&i<1&&G?.(),Pe=i;}function Z(){if(!S||F)return;let i=performance.now(),f=Ee(),ge=c;if(V!==false){let q=i-ve,Me=q>0?Math.abs(f-(ze<0?f:ze))/q:0;ge=c*Math.max(.2,1+Me*(typeof V=="number"?V:1)*.04);}ze=f,ve=i;let R=g===x?0:(f-x)/(g-x);pe(R);let _=L(K(f,x,g,ge));u&&(fe=Math.max(fe,_),_=fe),Q=_,j(_),_>=1&&!Se?(Se=true,B?.()):_<1&&!u&&(Se=false),$=requestAnimationFrame(Z);}ce(),g===x&&we("scrollAnimate: the trigger window has zero length (start and end resolve to the same scroll position), so this element will never animate. If the target is inside a position:sticky stage, measure the trigger from the container that holds the scroll room via `triggerElement`.",e);{let i=L(K(Ee(),x,g,c));u&&i>0&&(fe=i),Q=i,j(i);}let Ie=new IntersectionObserver(i=>{i.forEach(f=>{S=f.isIntersecting,S&&!F?$=requestAnimationFrame(Z):cancelAnimationFrame($);});},{root:P??null}),z;function I(){clearTimeout(z),z=setTimeout(ce,150);}return window.addEventListener("resize",I),window.addEventListener("orientationchange",I),Ie.observe(e),Le(e,{type:"animate",getProgress:()=>Q,getTrigger:()=>({tStart:x,tEnd:g})}),{destroy(){cancelAnimationFrame($),Ie.disconnect(),window.removeEventListener("resize",I),window.removeEventListener("orientationchange",I),clearTimeout(z),ie(),$e(e);},replay(){fe=-1,Se=false,Q=0,F=false,j(0);},pause(){F=true,cancelAnimationFrame($);},resume(){F&&(F=false,S&&($=requestAnimationFrame(Z)));},seek(i){let f=Math.min(1,Math.max(0,i));Q=f,fe=f,F=true,cancelAnimationFrame($),j(f);},getProgress(){return Q}}}var ct={destroy:()=>{},replay:()=>{},pause:()=>{},resume:()=>{},seek:()=>{},getProgress:()=>0};function ut(e,n){if(typeof window>"u")return ct;let r=typeof e=="string"?document.querySelector(e):e;if(!r)return we("scrollCounter: element not found:",e),ct;let t=r,{from:l=0,to:s,format:c,easing:u="ease-out",trigger:m={},once:p=true,decimals:T,onComplete:V}=n,M=T!==void 0?d=>d.toFixed(T):c??(d=>String(Math.round(d))),ne=typeof u=="function"?u:re[u]??re["ease-out"],Ce=de(m.start??"top 80%"),B=de(m.end??"top 20%");if(window.matchMedia("(prefers-reduced-motion: reduce)").matches)return t.textContent=M(s),V?.(),ct;let X=0,G=0,A=0,C=false,L=false,w=-1,k=0,O=false,P=()=>window.scrollY,E=()=>window.innerHeight;function oe(){let d=t.getBoundingClientRect(),x=xe({top:d.top,height:d.height},P(),E(),Ce,B);X=x.tStart,G=x.tEnd;}function D(d){t.textContent=M(l+(s-l)*d),t.style.setProperty("--scroll-draw-progress",String(d));}function se(){if(!C||L)return;let d=ne(K(P(),X,G,1));p&&(w=Math.max(w,d),d=w),k=d,D(d),d>=1&&!O?(O=true,V?.()):d<1&&!p&&(O=false),A=requestAnimationFrame(se);}oe();{let d=ne(K(P(),X,G,1));p&&d>0&&(w=d),k=d,D(d);}let ie=new IntersectionObserver(d=>{d.forEach(x=>{C=x.isIntersecting,C&&!L?A=requestAnimationFrame(se):cancelAnimationFrame(A);});}),ee;function ae(){clearTimeout(ee),ee=setTimeout(oe,150);}return window.addEventListener("resize",ae),window.addEventListener("orientationchange",ae),ie.observe(t),Le(t,{type:"counter",getProgress:()=>k,getTrigger:()=>({tStart:X,tEnd:G})}),{destroy(){cancelAnimationFrame(A),ie.disconnect(),window.removeEventListener("resize",ae),window.removeEventListener("orientationchange",ae),clearTimeout(ee),$e(t);},replay(){w=-1,O=false,k=0,L=false,D(0);},pause(){L=true,cancelAnimationFrame(A);},resume(){L&&(L=false,C&&(A=requestAnimationFrame(se)));},seek(d){let x=Math.min(1,Math.max(0,d));k=x,w=x,L=true,cancelAnimationFrame(A),D(x);},getProgress(){return k}}}var Ft={destroy:()=>{},replay:()=>{},pause:()=>{},resume:()=>{},seek:()=>{},getProgress:()=>0};function mt(e,n={}){if(typeof window>"u")return Ft;let r=typeof e=="string"?document.querySelector(e):e;if(!r||r.tagName.toLowerCase()!=="video")return we("scrollVideo: <video> element not found:",e),Ft;let t=r,{trigger:l={},easing:s="linear",once:c=false,axis:u="y",preload:m="auto",onReady:p,onComplete:T,onProgress:V}=n,M=window.matchMedia("(prefers-reduced-motion: reduce)").matches,ne=typeof s=="function"?s:re[s]??re.linear,Ce=de(l.start??"top top"),B=de(l.end??"bottom top");t.pause(),t.hasAttribute("preload")||(t.preload=m);let J=n.from??0,X=n.to,G=0,A=0,C=0,L=false,w=false,k=-1,O=0,P=false,E=false,oe=()=>u==="x"?window.scrollX:window.scrollY,D=()=>u==="x"?window.innerWidth:window.innerHeight;function se(){let S=t.getBoundingClientRect(),F=u==="x"?S.left:S.top,fe=u==="x"?S.width:S.height,Q=xe({top:F,height:fe},oe(),D(),Ce,B);G=Q.tStart,A=Q.tEnd;}let ie=NaN;function ee(S){if(!E)return;let F=X??t.duration??0,fe=J+(F-J)*S;fe!==ie&&(ie=fe,t.currentTime=fe),t.style.setProperty("--scroll-draw-progress",String(S)),V?.(S);}function ae(){if(!L||w||!E||M)return;let S=ne(K(oe(),G,A,1));c&&(k=Math.max(k,S),S=k),O=S,ee(S),S>=1&&!P?(P=true,T?.()):S<1&&!c&&(P=false),C=requestAnimationFrame(ae);}function d(){if(E=true,X===void 0&&(X=t.duration),M){ee(1),p?.();return}se(),p?.(),L&&!w&&(C=requestAnimationFrame(ae));}t.readyState>=1?d():t.addEventListener("loadedmetadata",d,{once:true}),E||se();let x=new IntersectionObserver(S=>{S.forEach(F=>{L=F.isIntersecting,L&&!w&&E?C=requestAnimationFrame(ae):cancelAnimationFrame(C);});}),g;function $(){clearTimeout(g),g=setTimeout(se,150);}return window.addEventListener("resize",$),window.addEventListener("orientationchange",$),x.observe(t),Le(t,{type:"video",getProgress:()=>O,getTrigger:()=>({tStart:G,tEnd:A})}),{destroy(){cancelAnimationFrame(C),x.disconnect(),t.removeEventListener("loadedmetadata",d),window.removeEventListener("resize",$),window.removeEventListener("orientationchange",$),clearTimeout(g),$e(t);},replay(){k=-1,P=false,O=0,w=false,ie=NaN,ee(0);},pause(){w=true,cancelAnimationFrame(C);},resume(){w&&(w=false,L&&E&&(C=requestAnimationFrame(ae)));},seek(S){let F=Math.min(1,Math.max(0,S));O=F,k=F,w=true,cancelAnimationFrame(C),ie=NaN,ee(F);},getProgress(){return O}}}function Vt(e){let n=e.textContent??"";return e.textContent="",n.split(/(\s+)/).filter(Boolean).map(r=>{let t=document.createElement("span");return t.setAttribute("aria-hidden","true"),/^\s+$/.test(r)?(t.textContent=r,t.style.whiteSpace="pre"):(t.textContent=r,t.style.display="inline-block"),e.appendChild(t),/^\s+$/.test(r)?null:t}).filter(r=>r!==null)}function ar(e){let n=e.textContent??"";return e.textContent="",n.split("").map(r=>{let t=document.createElement("span");return t.setAttribute("aria-hidden","true"),t.textContent=r,r===" "?t.style.whiteSpace="pre":t.style.display="inline-block",e.appendChild(t),r===" "?null:t}).filter(r=>r!==null)}function Rt(e){let n=Vt(e),r=new Map;for(let s of n){let c=s.offsetTop;r.has(c)||r.set(c,[]),r.get(c).push(s);}let t=[],l=Array.from(r.keys()).sort((s,c)=>s-c);for(let s of l){let c=r.get(s),u=document.createElement("span");u.setAttribute("aria-hidden","true"),u.style.display="inline-block",c.forEach((m,p)=>{let T=m.nextElementSibling;u.appendChild(m),p<c.length-1&&T&&T.style.whiteSpace==="pre"&&u.appendChild(T);}),t.push(u);}return e.textContent="",t.forEach((s,c)=>{e.appendChild(s),c<t.length-1&&e.appendChild(document.createTextNode(" "));}),t}function lr(e,n,r,t){if(r<=1||t===0)return e;let l=(r-1)*t,s=n*t,c=s+(1-l);return c<=s?e>=s?1:0:Math.min(1,Math.max(0,(e-s)/(c-s)))}function cr(e,n){let r=[];if(n?.y!==void 0&&r.push(`translateY(${n.y*(1-e)}px)`),n?.x!==void 0&&r.push(`translateX(${n.x*(1-e)}px)`),n?.rotate!==void 0&&r.push(`rotate(${n.rotate*(1-e)}deg)`),n?.scale!==void 0){let t=n.scale+(1-n.scale)*e;r.push(`scale(${t})`);}return r.join(" ")||""}var Nt={destroy:()=>{},replay:()=>{},pause:()=>{},resume:()=>{},seek:()=>{},getProgress:()=>0};function ft(e,n={}){if(typeof window>"u")return Nt;let r=typeof e=="string"?document.querySelector(e):e;if(!r)return we("scrollText: element not found:",e),Nt;let t=r,{split:l="words",stagger:s=.04,easing:c="ease-out",from:u={opacity:0,y:24},trigger:m={},once:p=true,onComplete:T}=n,V=window.matchMedia("(prefers-reduced-motion: reduce)").matches,M=typeof c=="function"?c:re[c]??re["ease-out"],ne=de(m.start??"top 85%"),Ce=de(m.end??"top 40%"),B=t.innerHTML;t.setAttribute("aria-label",t.textContent??"");let J;l==="chars"?J=ar(t):l==="lines"?J=Rt(t):J=Vt(t);let X=J.length;function G(g,$){u?.opacity!==void 0&&(g.style.opacity=String(u.opacity+(1-u.opacity)*$));let S=cr($,u);S&&(g.style.transform=S);}function A(g){t.style.setProperty("--scroll-draw-progress",String(g)),J.forEach(($,S)=>{let F=M(lr(g,S,X,s));G($,F);});}if(V)return A(1),T?.(),{destroy(){t.innerHTML=B,t.removeAttribute("aria-label");},replay:()=>{},pause:()=>{},resume:()=>{},seek:()=>{},getProgress:()=>1};A(0);let C=0,L=0,w=0,k=false,O=false,P=-1,E=0,oe=false,D=()=>window.scrollY,se=()=>window.innerHeight;function ie(){let g=t.getBoundingClientRect(),$=xe({top:g.top,height:g.height},D(),se(),ne,Ce);C=$.tStart,L=$.tEnd;}function ee(){if(!k||O)return;let g=K(D(),C,L,1);p&&(P=Math.max(P,g),g=P),E=g,A(g),g>=1&&!oe?(oe=true,T?.()):g<1&&!p&&(oe=false),w=requestAnimationFrame(ee);}ie();let ae=new IntersectionObserver(g=>{g.forEach($=>{k=$.isIntersecting,k&&!O?w=requestAnimationFrame(ee):cancelAnimationFrame(w);});}),d;function x(){clearTimeout(d),d=setTimeout(()=>{if(l==="lines"){let g=E;t.innerHTML=B,t.setAttribute("aria-label",t.textContent??""),J=Rt(t),A(g);}ie();},150);}return window.addEventListener("resize",x),window.addEventListener("orientationchange",x),ae.observe(t),Le(t,{type:"text",getProgress:()=>E,getTrigger:()=>({tStart:C,tEnd:L})}),{destroy(){cancelAnimationFrame(w),ae.disconnect(),window.removeEventListener("resize",x),window.removeEventListener("orientationchange",x),clearTimeout(d),t.innerHTML=B,t.removeAttribute("aria-label"),$e(t);},replay(){P=-1,oe=false,E=0,O=false,A(0);},pause(){O=true,cancelAnimationFrame(w);},resume(){O&&(O=false,k&&(w=requestAnimationFrame(ee)));},seek(g){let $=Math.min(1,Math.max(0,g));E=$,P=$,O=true,cancelAnimationFrame(w),A($);},getProgress(){return E}}}function ln(e={}){let n,r;return solidJs.onMount(()=>{n&&(r=at(n,e));}),solidJs.onCleanup(()=>{r?.destroy();}),t=>{n=t;}}function cn(e={}){let n,r;return solidJs.onMount(()=>{n&&(r=at(n,e));}),solidJs.onCleanup(()=>{r?.destroy(),r=void 0;}),{ref:t=>{n=t;},getInstance:()=>r}}function un(e){let n,r;return solidJs.onMount(()=>{n&&(r=lt(n,e));}),solidJs.onCleanup(()=>{r?.destroy();}),t=>{n=t;}}function mn(e){let n,r;return solidJs.onMount(()=>{n&&(r=lt(n,e));}),solidJs.onCleanup(()=>{r?.destroy(),r=void 0;}),{ref:t=>{n=t;},getInstance:()=>r}}function fn(e){let n,r;return solidJs.onMount(()=>{n&&(r=ut(n,e));}),solidJs.onCleanup(()=>{r?.destroy();}),t=>{n=t;}}function pn(e){let n,r;return solidJs.onMount(()=>{n&&(r=ut(n,e));}),solidJs.onCleanup(()=>{r?.destroy(),r=void 0;}),{ref:t=>{n=t;},getInstance:()=>r}}function dn(e={}){let n,r;return solidJs.onMount(()=>{n&&(r=mt(n,e));}),solidJs.onCleanup(()=>{r?.destroy();}),t=>{n=t;}}function gn(e={}){let n,r;return solidJs.onMount(()=>{n&&(r=mt(n,e));}),solidJs.onCleanup(()=>{r?.destroy(),r=void 0;}),{ref:t=>{n=t;},getInstance:()=>r}}function yn(e={}){let n,r;return solidJs.onMount(()=>{n&&(r=ft(n,e));}),solidJs.onCleanup(()=>{r?.destroy();}),t=>{n=t;}}function hn(e={}){let n,r;return solidJs.onMount(()=>{n&&(r=ft(n,e));}),solidJs.onCleanup(()=>{r?.destroy(),r=void 0;}),{ref:t=>{n=t;},getInstance:()=>r}}exports.createScrollAnimate=mn;exports.createScrollCounter=pn;exports.createScrollDraw=cn;exports.createScrollText=hn;exports.createScrollVideo=gn;exports.useScrollAnimate=un;exports.useScrollCounter=fn;exports.useScrollDraw=ln;exports.useScrollText=yn;exports.useScrollVideo=dn;
1
+ 'use strict';var solidJs=require('solid-js');function jt({bounces:e=3,decay:n=.5}={}){let r=Math.max(1,Math.round(e)),t=Math.max(.01,Math.min(.99,n)),a=Math.sqrt(t),s=0,l=[];for(let p=0;p<r;p++){let T=Math.pow(a,p);l.push(T),s+=T;}let u=[0],m=0;for(let p=0;p<r;p++)m+=l[p]/s,u.push(m);return p=>{if(p<=0)return 0;if(p>=1)return 1;for(let T=0;T<r;T++)if(p<=u[T+1]){let V=(p-u[T])/(u[T+1]-u[T]);if(T===0)return V*(2-V);let A=1-Math.pow(t,T);return A+(1-A)*(2*V-1)*(2*V-1)}return 1}}function Ut({amplitude:e=1,period:n=.4}={}){let r=Math.max(1,e),t=Math.max(.1,n),a=r<=1?t/4:t/(2*Math.PI)*Math.asin(1/r);return s=>s<=0?0:s>=1?1:r*Math.pow(2,-10*s)*Math.sin((s-a)*(2*Math.PI)/t)+1}var re={linear:e=>e,"ease-in":e=>e*e,"ease-out":e=>e*(2-e),"ease-in-out":e=>e<.5?2*e*e:-1+(4-2*e)*e,spring:e=>1-Math.cos(e*Math.PI*2.5)*Math.pow(1-e,2.2),bounce:jt(),elastic:Ut()};function vt(e,n,r){return Math.min(r,Math.max(n,e))}function de(e="top bottom"){let n=e.trim();if(/^\d+(\.\d+)?%$/.test(n))return {element:"top",viewport:n};let[r="top",t="bottom"]=n.split(/\s+/).filter(Boolean);return {element:r,viewport:t}}function Et(e,n,r,t){switch(t){case "top":return e+r;case "center":return e+r+n/2;case "bottom":return e+r+n;default:return e+r}}function St(e,n){if(/^\d+(\.\d+)?%$/.test(e))return n*(parseFloat(e)/100);switch(e){case "top":return 0;case "center":return n/2;case "bottom":return n;default:return n}}function Z(e,n,r,t){return r===n?0:vt((e-n)/(r-n)*t,0,1)}function xe(e,n,r,t,a){let s=Et(e.top,e.height,n,t.element)-St(t.viewport,r),l=Et(e.top,e.height,n,a.element)-St(a.viewport,r);return {tStart:s,tEnd:l}}function Ze(e,n,r){let t=e.getBoundingClientRect(),a=r==="x"?t.width:t.height;return n?{top:r==="x"?t.left-n.getBoundingClientRect().left+n.scrollLeft:t.top-n.getBoundingClientRect().top+n.scrollTop,height:a,scroll:0}:{top:r==="x"?t.left:t.top,height:a,scroll:r==="x"?window.scrollX:window.scrollY}}function ze(e){let n=e.tagName.toLowerCase();if(n==="rect"){let r=parseFloat(e.getAttribute("width")??"0"),t=parseFloat(e.getAttribute("height")??"0");return 2*(r+t)}if(n==="circle"){let r=parseFloat(e.getAttribute("r")??"0");return 2*Math.PI*r}return e.getTotalLength()}function Tt(e){let n=/^#([a-f\d])([a-f\d])([a-f\d])$/i.exec(e);if(n)return [parseInt(n[1]+n[1],16),parseInt(n[2]+n[2],16),parseInt(n[3]+n[3],16)];let r=/^#([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(e);if(r)return [parseInt(r[1],16),parseInt(r[2],16),parseInt(r[3],16)];let t=/^rgb\(\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*\)$/i.exec(e);return t?[parseInt(t[1]),parseInt(t[2]),parseInt(t[3])]:null}function qe(e,n,r){let t=Tt(e),a=Tt(n);return !t||!a?e:`rgb(${Math.round(t[0]+(a[0]-t[0])*r)},${Math.round(t[1]+(a[1]-t[1])*r)},${Math.round(t[2]+(a[2]-t[2])*r)})`}var xt={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 Ge=typeof __SVG_SCROLL_DRAW_DEV__<"u"?__SVG_SCROLL_DRAW_DEV__:typeof process<"u"&&typeof process.env<"u"&&process.env.NODE_ENV!=="production";function we(e,...n){Ge&&console.warn(`[svg-scroll-draw] ${e}`,...n);}var Yt="cubic-bezier(0.333333, 0, 0.666667, 0.333333)",Xt="cubic-bezier(0.333333, 0.666667, 0.666667, 1)",At=33;function Kt(){return typeof CSS<"u"&&typeof CSS.supports=="function"&&CSS.supports("animation-timing-function: linear(0, 1)")}function Qt(e){let n=[];for(let r=0;r<At;r++){let t=r/(At-1);n.push(String(Math.round(e(t)*1e5)/1e5));}return `linear(${n.join(",")})`}function Je(e){switch(e){case "linear":return "linear";case "ease-in":return Yt;case "ease-out":return Xt;case "ease-in-out":return Kt()?Qt(re["ease-in-out"]):null;default:return null}}var Mt=Symbol.for("svg-scroll-draw.registry");function Lt(){let e=globalThis;return e[Mt]||(e[Mt]=new Map)}function Le(e,n){Lt().set(e,n);}function $e(e){Lt().delete(e);}var Zt=0;function Jt(){return typeof CSS<"u"&&typeof CSS.supports=="function"&&CSS.supports("animation-timeline: view()")&&CSS.supports("view-timeline-name: --x")}function $t(e,n){let r="";try{r=getComputedStyle(e).getPropertyValue(n).trim();}catch{}return r||(e.getAttribute(n)??"").trim()}var Ct=new Set(["","none","transparent","rgba(0, 0, 0, 0)"]);function er(e){if(!Ge)return;let n=$t(e,"stroke");if(!n||n==="none"){we("Element has no stroke \u2014 path will not be visible.",e);return}let r=(e.getAttribute("fill")??"").trim();r&&!Ct.has(r)&&!Ct.has($t(e,"fill"))&&we("Element has a fill \u2014 it may obscure the stroke animation.",e);}function tr(e,n,r){let t=document.createElement("div");t.setAttribute("data-svg-scroll-draw-debug",""),t.style.cssText="position:fixed;pointer-events:none;z-index:9999;font-family:monospace;font-size:11px;top:0;left:0;right:0;bottom:0;";function a(){let s=r==="x"?window.scrollX:window.scrollY,l=e-s,u=n-s,m=r==="x";t.innerHTML=`
2
+ <div style="position:absolute;${m?`left:${l}px;top:0;bottom:0;border-left:2px dashed #22c55e;`:`top:${l}px;left:0;right:0;border-top:2px dashed #22c55e;`}padding:2px 6px;color:#22c55e;background:rgba(0,0,0,.6)">\u25B6 start</div>
3
+ <div style="position:absolute;${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",a,{passive:true}),a(),{el:t,destroy(){window.removeEventListener("scroll",a),t.remove();}}}var Pt=/[-+]?(?:\d*\.)?\d+(?:[eE][-+]?\d+)?/g,Ot=/[MmLlHhVvCcSsQqTtAaZz]/g;function rr(e,n,r){if(!Ge)return;let t=(e.match(Ot)??[]).join("").toUpperCase(),a=(n.match(Ot)??[]).join("").toUpperCase(),s=(e.match(Pt)??[]).length,l=(n.match(Pt)??[]).length;if(t!==a){we(`morphTo: command sequence differs (${t||"\u2205"} \u2192 ${a||"\u2205"}). Interpolation is coordinate-for-coordinate, so the result will not reach the target shape. Redraw both paths with the same commands.`,r);return}s!==l&&we(`morphTo: coordinate count differs (${s} \u2192 ${l}). Extra coordinates are ignored and missing ones hold their start value, so the result will not reach the target shape.`,r);}function st(e,n,r){let t=(n.match(/[-+]?(?:\d*\.)?\d+(?:[eE][-+]?\d+)?/g)??[]).map(Number),a=0;return e.replace(/[-+]?(?:\d*\.)?\d+(?:[eE][-+]?\d+)?/g,s=>{let l=parseFloat(s),u=t[a++]??l;return String(+(l+(u-l)*r).toFixed(4))})}function it(e,n={}){if(typeof window>"u")return {destroy:()=>{},replay:()=>{},pause:()=>{},resume:()=>{},seek:()=>{},getProgress:()=>0};let{preset:r,...t}=n,a=r?{...xt[r],...t}:t,s=window.matchMedia("(prefers-reduced-motion: reduce)").matches,{selector:l="path, polyline, line, polygon, rect, circle",speed:u=1,fade:m=false,easing:p="linear",trigger:T={},stagger:V=0,direction:A="forward",once:ne=false,debug:Ce=false,axis:B="y",scrollContainer:J,autoReverse:X=false,delay:G=0,strokeColor:M,strokeWidth:C,fillOpacity:L,waypoints:w,velocityScale:k=false,threshold:I=0,rootMargin:P="0px",repeat:E=0,repeatDelay:oe=0,morphTo:F,clip:se,autoplay:ie=false,duration:ee=1e3,native:ae=true,onProgress:d,onStart:x,onComplete:g,onEnter:$,onLeave:S,onEnterBack:R,onLeaveBack:fe}=a,K=se===true?"left":typeof se=="string"?se:false,Se=typeof p=="function"?p:re[p]??re.linear,Pe=de(T.start??"top bottom"),Ve=de(T.end??"bottom top"),ve=typeof J=="string"?document.querySelector(J):J??null,Ee=Array.isArray(M)?M[0]:null,le=Array.isArray(M)?M[1]:typeof M=="string"?M:null,ce=Array.isArray(C)?C[0]:null,j=Array.isArray(C)?C[1]:typeof C=="number"?C:null,pe=Array.isArray(L)?L[0]:null,Q=Array.isArray(L)?L[1]:typeof L=="number"?L:null;function Oe(o){let c=o*100;switch(K){case "right":return `inset(0 0 0 ${100-c}%)`;case "top":return `inset(0 0 ${100-c}% 0)`;case "bottom":return `inset(${100-c}% 0 0 0)`;case "center":return `circle(${o*150}% at 50% 50%)`;default:return `inset(0 ${100-c}% 0 0)`}}let _=K?[]:Array.from(e.querySelectorAll(l)),O=[],i=[],f=0,ge=0,H=false,z=false,q=0,Ae=false,ye=-1,te=-1,U=false,he=0,Fe=0,Re,et=null;function ft(){et?.destroy(),et=null;}let He=new Set,pt=NaN,Ne=true,je=-1,dt=performance.now(),_e=NaN;function tt(){return ve?B==="x"?ve.scrollLeft:ve.scrollTop:B==="x"?window.scrollX:window.scrollY}function gt(){return ve?B==="x"?ve.clientWidth:ve.clientHeight:B==="x"?window.innerWidth:window.innerHeight}function yt(){let o=Ze(e,ve,B);return xe(o,o.scroll,gt(),Pe,Ve)}function ht(){(({tStart:f,tEnd:ge}=yt())),Ce&&Ge&&(ft(),et=tr(f,ge,B));}function rt(o,c=yt){Le(e,{type:"draw",getProgress:()=>o.getProgress(),getTrigger:c});let b=o.destroy;return o.destroy=()=>{b.call(o),$e(e);},o}function qt(o,c){if(e.style.setProperty("--scroll-draw-progress",String(o)),K){let b=c==="reverse"?1-o:o;e.style.clipPath=Oe(b);return}_.forEach((b,ue)=>{b.style.strokeDashoffset=c==="reverse"?`${O[ue]*o}`:`${O[ue]*(1-o)}`,m&&(b.style.opacity=c==="reverse"?`${1-o}`:`${o}`),Ee&&le?b.style.stroke=qe(Ee,le,o):le&&(b.style.stroke=le),ce!==null&&j!==null?b.style.strokeWidth=`${ce+(j-ce)*o}`:j!==null&&(b.style.strokeWidth=`${j}`),pe!==null&&Q!==null?b.style.fillOpacity=`${pe+(Q-pe)*o}`:Q!==null&&(b.style.fillOpacity=`${Q}`),F&&b.tagName.toLowerCase()==="path"&&i[ue]&&b.setAttribute("d",st(i[ue],F,o));});}function Ue(){if(e.style.setProperty("--scroll-draw-progress","0"),K){e.style.clipPath=Oe(0);return}_.forEach((o,c)=>{o.style.strokeDasharray=`${O[c]}`,o.style.strokeDashoffset=A==="reverse"?"0":`${O[c]}`,m?o.style.opacity=A==="reverse"?"1":"0":o.style.opacity="",Ee&&(o.style.stroke=Ee),ce!==null&&(o.style.strokeWidth=`${ce}`),pe!==null&&(o.style.fillOpacity=`${pe}`),F&&o.tagName.toLowerCase()==="path"&&i[c]&&o.setAttribute("d",i[c]);});}if(_.forEach(o=>{er(o);let c=ze(o);O.push(c);let b=o.tagName.toLowerCase()==="path";b?i.push(o.getAttribute("d")??""):i.push(""),F&&(b?rr(i[i.length-1],F,o):we(`morphTo only applies to <path> elements \u2014 ignored on <${o.tagName}>.`,o)),s?(o.style.strokeDasharray=`${c}`,o.style.strokeDashoffset=A==="reverse"?`${c}`:"0",m&&(o.style.opacity="1"),le&&(o.style.stroke=le),j!==null&&(o.style.strokeWidth=`${j}`),Q!==null&&(o.style.fillOpacity=`${Q}`),F&&o.tagName.toLowerCase()==="path"&&o.setAttribute("d",F)):(o.style.strokeDasharray=`${c}`,o.style.strokeDashoffset=A==="reverse"?"0":`${c}`,m?o.style.opacity=A==="reverse"?"1":"0":o.style.opacity="",Ee&&(o.style.stroke=Ee),ce!==null&&(o.style.strokeWidth=`${ce}`),pe!==null&&(o.style.fillOpacity=`${pe}`));}),K){if(s)return e.style.clipPath=Oe(1),g?.(),{destroy:()=>{},replay:()=>{},pause:()=>{},resume:()=>{},seek:()=>{},getProgress:()=>1};e.style.clipPath=Oe(0);}else if(s)return g?.(),{destroy:()=>{},replay:()=>{},pause:()=>{},resume:()=>{},seek:()=>{},getProgress:()=>1};let bt=typeof p=="string"?Je(p):null;function Wt(){return !(ae===false||!Jt()||!_.length||!bt||K||B!=="y"||ve||u!==1||V!==0||ne||X||k!==false||F||w||E||G>0||d||x||g||$||S||R||fe||M!=null||C!=null||L!=null||(T.start??"top bottom").trim()!=="top bottom"||(T.end??"bottom top").trim()!=="bottom top")}function Bt(){let o=++Zt,c=`svg-scroll-draw-${o}`,b=`svg-scroll-draw-host-${o}`,ue=`--svg-scroll-draw-${o}`,De=A==="reverse"?"0":"var(--ssd-len)",ke=A==="reverse"?"var(--ssd-len)":"0",Me=`stroke-dashoffset:${De};`,v=`stroke-dashoffset:${ke};`;m&&(Me+=`opacity:${A==="reverse"?1:0};`,v+=`opacity:${A==="reverse"?0:1};`);let D=document.createElement("style");D.setAttribute("data-svg-scroll-draw",""),D.textContent=`@keyframes ${c}{from{${Me}}to{${v}}}.${b}{view-timeline-name:${ue};view-timeline-axis:block;}.${c}{animation-name:${c};animation-duration:auto;animation-timing-function:${bt};animation-fill-mode:both;animation-timeline:${ue};animation-range:cover 0% cover 100%;}`,document.head.appendChild(D),e.classList.add(b);function me(y,Y){y.style.setProperty("--ssd-len",String(O[Y])),y.style.strokeDasharray=`${O[Y]}`,y.style.strokeDashoffset="",y.style.opacity="",y.style.animationPlayState="",y.classList.add(c);}_.forEach(me);let h=false,N=-1;function W(){if(N>=0)return N;let y=e.getBoundingClientRect(),{tStart:Y,tEnd:Te}=xe({top:y.top,height:y.height},tt(),gt(),Pe,Ve);return Se(Z(tt(),Y,Te,u))}return {destroy(){e.classList.remove(b),_.forEach(y=>{y.classList.remove(c),y.style.removeProperty("--ssd-len"),y.style.animationPlayState="";}),D.remove();},replay(){h=false,N=-1,_.forEach(me);},pause(){h=true,_.forEach(y=>{y.style.animationPlayState="paused";});},resume(){h&&(h=false,_.forEach(y=>{y.style.animationPlayState="running";}));},seek(y){let Y=Math.min(1,Math.max(0,y));N=Y,h=true,_.forEach((Te,be)=>{Te.classList.remove(c),Te.style.strokeDashoffset=A==="reverse"?`${O[be]*Y}`:`${O[be]*(1-Y)}`,m&&(Te.style.opacity=A==="reverse"?`${1-Y}`:`${Y}`);});},getProgress(){return W()},refresh(){_.forEach((y,Y)=>{O[Y]=ze(y),y.style.setProperty("--ssd-len",String(O[Y])),y.style.strokeDasharray=`${O[Y]}`;});}}}if(Wt())return rt(Bt());function Gt(){let o=Math.max(1,ee),c=0,b=0,ue=false;function De(h){let N=true;if(K){let W=Math.min(1,Math.max(0,h/o)),y=Se(W);he=y,e.style.setProperty("--scroll-draw-progress",String(y)),e.style.clipPath=Oe(A==="reverse"?1-y:y),d?.(y),W<1&&(N=false);}else _.forEach((W,y)=>{let Y=y*V*o,Te=Math.min(1,Math.max(0,(h-Y)/o)),be=Se(Te);W.style.strokeDashoffset=A==="reverse"?`${O[y]*be}`:`${O[y]*(1-be)}`,m&&(W.style.opacity=A==="reverse"?`${1-be}`:`${be}`),Ee&&le?W.style.stroke=qe(Ee,le,be):le&&(W.style.stroke=le),ce!==null&&j!==null?W.style.strokeWidth=`${ce+(j-ce)*be}`:j!==null&&(W.style.strokeWidth=`${j}`),pe!==null&&Q!==null?W.style.fillOpacity=`${pe+(Q-pe)*be}`:Q!==null&&(W.style.fillOpacity=`${Q}`),F&&W.tagName.toLowerCase()==="path"&&i[y]&&W.setAttribute("d",st(i[y],F,be)),y===0&&(he=be,d?.(be),e.style.setProperty("--scroll-draw-progress",String(be))),Te<1&&(N=false);});if(w){let W=Math.min(1,Math.max(0,h/o)),y=Se(W);for(let Y in w){let Te=parseFloat(Y);y>=Te&&!He.has(Te)&&(He.add(Te),w[Y]?.());}}return N}function ke(h){if(U)return;let N=h-c;z||(z=true,x?.());let W=De(N);if(W&&!H){H=true,De(o*(1+Math.max(0,_.length-1)*V)),g?.(),Fe<(E==="infinite"?1/0:E??0)&&(Fe++,Re=setTimeout(()=>{c=performance.now(),z=false,H=false,He.clear(),Ue(),q=requestAnimationFrame(ke);},oe));return}W||(q=requestAnimationFrame(ke));}function Me(){cancelAnimationFrame(q),clearTimeout(Re),c=performance.now(),b=0,U=false,z=false,H=false,Fe=0,ue=true,he=0,He.clear(),Ue(),q=requestAnimationFrame(ke);}let v=new IntersectionObserver(h=>{h.forEach(N=>{N.isIntersecting&&!(ne&&H)?Me():!N.isIntersecting&&!ne&&!H&&(cancelAnimationFrame(q),clearTimeout(Re),ue=false);});},{root:ve??null,threshold:I,rootMargin:P}),D;function me(){clearTimeout(D),D=setTimeout(()=>{_.forEach((h,N)=>{O[N]=ze(h),h.style.strokeDasharray=`${O[N]}`;});},150);}return window.addEventListener("resize",me),window.addEventListener("orientationchange",me),G>0?setTimeout(()=>v.observe(e),G):v.observe(e),{destroy(){cancelAnimationFrame(q),clearTimeout(Re),v.disconnect(),window.removeEventListener("resize",me),window.removeEventListener("orientationchange",me),clearTimeout(D);},replay(){Fe=0,Me();},pause(){U||!ue||(U=true,b=performance.now()-c,cancelAnimationFrame(q));},resume(){U&&(U=false,ue=true,c=performance.now()-b,q=requestAnimationFrame(ke));},seek(h){let N=Math.min(1,Math.max(0,h));he=N,U=true,b=N*o,c=performance.now()-b,cancelAnimationFrame(q),De(b);},getProgress(){return he},refresh(){clearTimeout(D),_.forEach((h,N)=>{O[N]=ze(h),h.style.strokeDasharray=`${O[N]}`;});}}}if(ie)return rt(Gt());ht();function Ye(){if(!Ae||U)return;let o=performance.now(),c=tt();if(!Ne&&k===false&&c===pt){q=requestAnimationFrame(Ye);return}Ne=false,pt=c;let b=u;if(k!==false){let v=o-dt,D=v>0?Math.abs(c-(je<0?c:je))/v:0;b=u*Math.max(.2,1+D*(typeof k=="number"?k:1)*.04);}je=c,dt=o;let ue=X?te===-1||c>=te?"forward":"reverse":A;te=c;let De=ge-f,ke=true,Me=De===0?0:(c-f)/De;if(isNaN(_e)||(_e<=0&&Me>0?$?.():_e>0&&Me<=0&&fe?.(),_e<1&&Me>=1?S?.():_e>=1&&Me<1&&R?.()),_e=Me,K){let v=Se(Z(c,f,ge,b));ne&&!X&&(ye=Math.max(ye,v),v=ye),he=v,e.style.setProperty("--scroll-draw-progress",String(v));let D=ue==="reverse"?1-v:v;e.style.clipPath=Oe(D),d?.(v),!z&&Z(c,f,ge,b)>0&&(z=true,x?.()),v>=1&&!H?(H=true,g?.(),Fe<(E==="infinite"?1/0:E??0)&&(Fe++,Re=setTimeout(()=>{ye=-1,z=false,H=false,e.style.clipPath=Oe(0);},oe))):v<1&&!ne&&(H=false),q=requestAnimationFrame(Ye);return}if(_.forEach((v,D)=>{let me=D*V*De,h=Se(Z(c,f+me,ge+me,b));ne&&!X&&(ye=Math.max(ye,h),h=ye),he=h,v.style.strokeDashoffset=ue==="reverse"?`${O[D]*h}`:`${O[D]*(1-h)}`,m&&(v.style.opacity=ue==="reverse"?`${1-h}`:`${h}`),Ee&&le?v.style.stroke=qe(Ee,le,h):le&&(v.style.stroke=le),ce!==null&&j!==null?v.style.strokeWidth=`${ce+(j-ce)*h}`:j!==null&&(v.style.strokeWidth=`${j}`),pe!==null&&Q!==null?v.style.fillOpacity=`${pe+(Q-pe)*h}`:Q!==null&&(v.style.fillOpacity=`${Q}`),F&&v.tagName.toLowerCase()==="path"&&i[D]&&v.setAttribute("d",st(i[D],F,h)),D===0&&(d?.(h),e.style.setProperty("--scroll-draw-progress",String(h))),h<1&&(ke=false);}),w){let v=Se(Z(c,f,ge,b));for(let D in w){let me=parseFloat(D);v>=me&&!He.has(me)&&(He.add(me),w[D]?.());}}!z&&Z(c,f,ge,b)>0&&(z=true,x?.()),ke&&!H?(H=true,g?.(),Fe<(E==="infinite"?1/0:E??0)&&(Fe++,Re=setTimeout(()=>{ye=-1,z=false,H=false,He.clear(),Ue(),Ne=true;},oe))):!ke&&!ne&&(H=false),q=requestAnimationFrame(Ye);}let nt=false;function Xe(){nt||(nt=true,q=requestAnimationFrame(function(){Ye();}));}function Ke(){nt=false,cancelAnimationFrame(q);}let ot=new IntersectionObserver(o=>{o.forEach(c=>{Ae=c.isIntersecting,Ae&&!U?(Ne=true,Xe()):Ke();});},{root:ve??null,threshold:I,rootMargin:P});function wt(){_.forEach((o,c)=>{O[c]=ze(o),o.style.strokeDasharray=`${O[c]}`;}),ht(),Ne=true;}let Qe;function We(){clearTimeout(Qe),Qe=setTimeout(wt,150);}window.addEventListener("resize",We),window.addEventListener("orientationchange",We);let Be;return typeof ResizeObserver<"u"&&(Be=new ResizeObserver(()=>We()),Be.observe(document.body),Be.observe(document.documentElement),Be.observe(e)),G>0?setTimeout(()=>ot.observe(e),G):ot.observe(e),rt({destroy(){cancelAnimationFrame(q),clearTimeout(Re),Ke(),ot.disconnect(),Be?.disconnect(),window.removeEventListener("resize",We),window.removeEventListener("orientationchange",We),clearTimeout(Qe),ft();},replay(){ye=-1,te=-1,je=-1,z=false,H=false,Fe=0,U=false,he=0,He.clear(),clearTimeout(Re),Ue(),Ne=true,Ae&&Xe();},pause(){U=true,Ke();},resume(){U&&(U=false,Ne=true,Ae&&Xe());},seek(o){let c=Math.min(1,Math.max(0,o));he=c,ye=c,U=true,Ke(),qt(c,A),Ne=true;},getProgress(){return he},refresh(){clearTimeout(Qe),wt(),Ae&&!U&&Xe();}},()=>({tStart:f,tEnd:ge}))}var kt=new WeakMap,nr=0;function It(e){return JSON.stringify(e,(n,r)=>{if(typeof r=="function")return "\u0192";if(typeof Element<"u"&&r instanceof Element){let t=kt.get(r);return t===void 0&&kt.set(r,t=++nr),`el#${t}`}return r})}function Ft(e,n){let r={...e};for(let t of Object.keys(r))typeof r[t]=="function"&&(r[t]=(...a)=>n()[t]?.(...a));return r}function or(e){return e.startsWith("#")||e.startsWith("rgb")||e.startsWith("hsl")}function Dt(e){let n=[],r=/([\w]+)\(([^)]*)\)/g,t;for(;(t=r.exec(e))!==null;){let a=[],s=[],l=t[2].trim();if(l)for(let u of l.split(/[\s,]+/)){let m=u.match(/^([-+]?[\d.eE]+)(.*)$/);a.push(m?parseFloat(m[1]):0),s.push(m?m[2]:"");}n.push({fn:t[1],nums:a,units:s});}return n}function sr(e,n,r){let t=Dt(e),a=Dt(n);return t.length===0||t.length!==a.length?r<1?e:n:t.map((s,l)=>{let u=a[l];return s.fn!==u.fn||s.nums.length!==u.nums.length?r<1?`${s.fn}(${s.nums.map((m,p)=>`${m}${s.units[p]}`).join(", ")})`:`${u.fn}(${u.nums.map((m,p)=>`${m}${u.units[p]}`).join(", ")})`:`${s.fn}(${s.nums.map((m,p)=>`${m+(u.nums[p]-m)*r}${s.units[p]}`).join(", ")})`}).join(" ")}function Rt(e,n,r){if(typeof e=="number"&&typeof n=="number")return String(e+(n-e)*r);let t=String(e),a=String(n);if(or(t))return qe(t,a,r);if(t.includes("("))return sr(t,a,r);let s=t.match(/^([-+]?[\d.]+)(.*)$/),l=a.match(/^([-+]?[\d.]+)(.*)$/);if(s&&l){let u=parseFloat(s[1]),m=parseFloat(l[1]);return `${u+(m-u)*r}${s[2]||l[2]}`}return r<1?t:a}function ir(e){return e.replace(/([A-Z])/g,n=>`-${n.toLowerCase()}`)}var ar=new Set(["opacity","transform","background-color","color","filter","scale","translate","rotate"]),lr=0,Ht="--scroll-draw-progress";function cr(){return typeof CSS<"u"&&typeof CSS.supports=="function"&&CSS.supports("animation-timeline: view()")}function at(e,n){let r={destroy:()=>{},replay:()=>{},pause:()=>{},resume:()=>{},seek:()=>{},getProgress:()=>0};if(typeof window>"u")return r;let{props:t,trigger:a={},easing:s="ease-out",speed:l=1,once:u=false,axis:m="y",scrollContainer:p,native:T=true,velocityScale:V=false,respectReducedMotion:A=true,triggerElement:ne,onProgress:Ce,onComplete:B,onEnter:J,onLeave:X,onEnterBack:G,onLeaveBack:M}=n,C=A&&window.matchMedia("(prefers-reduced-motion: reduce)").matches,L=typeof s=="function"?s:re[s]??re["ease-out"],w=de(a.start??"top bottom"),k=de(a.end??"bottom top"),I=ne??e,P=typeof p=="string"?document.querySelector(p):p??null,E=Object.entries(t).map(([i,f])=>({prop:ir(i),from:Array.isArray(f)?f[0]:"",to:Array.isArray(f)?f[1]:f}));function oe(){let i=window.getComputedStyle(e);for(let f of E)f.from===""&&(f.from=i.getPropertyValue(f.prop).trim()||"0");}function F(){for(let i of E)e.style.setProperty(i.prop,String(i.to));}let se=new Map;for(let i of [...E.map(f=>f.prop),Ht])se.set(i,e.style.getPropertyValue(i));function ie(){for(let[i,f]of se)f?e.style.setProperty(i,f):e.style.removeProperty(i);}if(C)return F(),B?.(),{...r,destroy:ie,getProgress:()=>1};oe();let ee=typeof s=="string"?Je(s):null;function ae(){if(!T||!cr()||!ee||m!=="y"||P||I!==e||u||l!==1||Ce||B||J||X||G||M||V!==false||(a.start??"top bottom").trim()!=="top bottom"||(a.end??"bottom top").trim()!=="bottom top")return false;for(let i of E)if(!ar.has(i.prop))return false;return true}function d(){let i=`ssd-a-${++lr}`,f=E.map(te=>`${te.prop}:${te.from}`).join(";"),ge=E.map(te=>`${te.prop}:${te.to}`).join(";"),H=document.createElement("style");H.setAttribute("data-ssd-animate",""),H.textContent=`@keyframes ${i}{from{${f}}to{${ge}}}.${i}{animation-name:${i};animation-duration:auto;animation-timing-function:${ee};animation-fill-mode:both;animation-timeline:view();animation-range:cover 0% cover 100%;}`,document.head.appendChild(H),e.classList.add(i);let z=()=>m==="x"?window.scrollX:window.scrollY,q=()=>m==="x"?window.innerWidth:window.innerHeight,Ae=()=>{let te=e.getBoundingClientRect();return xe({top:te.top,height:te.height},z(),q(),w,k)};Le(e,{type:"animate",getProgress:()=>ye.getProgress(),getTrigger:Ae});let ye={destroy(){e.classList.remove(i),H.remove(),e.style.animationPlayState="",ie(),$e(e);},replay(){e.classList.remove(i),e.offsetWidth,e.classList.add(i);},pause(){e.style.animationPlayState="paused";},resume(){e.style.animationPlayState="";},seek(te){let U=Math.min(1,Math.max(0,te));e.classList.remove(i);for(let he of E)e.style.setProperty(he.prop,Rt(he.from,he.to,U));},getProgress(){let{tStart:te,tEnd:U}=Ae();return L(Z(z(),te,U,l))}};return ye}if(ae())return d();let x=0,g=0,$=0,S=false,R=false,fe=-1,K=0,Se=false,Pe=NaN,Ve=-1,ve=0,Ee=()=>P?m==="x"?P.scrollLeft:P.scrollTop:m==="x"?window.scrollX:window.scrollY,le=()=>P?m==="x"?P.clientWidth:P.clientHeight:m==="x"?window.innerWidth:window.innerHeight;function ce(){let i=Ze(I,P,m),f=xe(i,i.scroll,le(),w,k);x=f.tStart,g=f.tEnd;}function j(i){e.style.setProperty(Ht,String(i));for(let f of E)e.style.setProperty(f.prop,Rt(f.from,f.to,i));Ce?.(i);}function pe(i){if(isNaN(Pe)){Pe=i;return}Pe<=0&&i>0?J?.():Pe>0&&i<=0&&M?.(),Pe<1&&i>=1?X?.():Pe>=1&&i<1&&G?.(),Pe=i;}function Q(){if(!S||R)return;let i=performance.now(),f=Ee(),ge=l;if(V!==false){let q=i-ve,Ae=q>0?Math.abs(f-(Ve<0?f:Ve))/q:0;ge=l*Math.max(.2,1+Ae*(typeof V=="number"?V:1)*.04);}Ve=f,ve=i;let H=g===x?0:(f-x)/(g-x);pe(H);let z=L(Z(f,x,g,ge));u&&(fe=Math.max(fe,z),z=fe),K=z,j(z),z>=1&&!Se?(Se=true,B?.()):z<1&&!u&&(Se=false),$=requestAnimationFrame(Q);}ce(),g===x&&we("scrollAnimate: the trigger window has zero length (start and end resolve to the same scroll position), so this element will never animate. If the target is inside a position:sticky stage, measure the trigger from the container that holds the scroll room via `triggerElement`.",e);{let i=L(Z(Ee(),x,g,l));u&&i>0&&(fe=i),K=i,j(i);}let Oe=new IntersectionObserver(i=>{i.forEach(f=>{S=f.isIntersecting,S&&!R?$=requestAnimationFrame(Q):cancelAnimationFrame($);});},{root:P??null}),_;function O(){clearTimeout(_),_=setTimeout(ce,150);}return window.addEventListener("resize",O),window.addEventListener("orientationchange",O),Oe.observe(e),Le(e,{type:"animate",getProgress:()=>K,getTrigger:()=>({tStart:x,tEnd:g})}),{destroy(){cancelAnimationFrame($),Oe.disconnect(),window.removeEventListener("resize",O),window.removeEventListener("orientationchange",O),clearTimeout(_),ie(),$e(e);},replay(){fe=-1,Se=false,K=0,R=false,j(0);},pause(){R=true,cancelAnimationFrame($);},resume(){R&&(R=false,S&&($=requestAnimationFrame(Q)));},seek(i){let f=Math.min(1,Math.max(0,i));K=f,fe=f,R=true,cancelAnimationFrame($),j(f);},getProgress(){return K}}}var lt={destroy:()=>{},replay:()=>{},pause:()=>{},resume:()=>{},seek:()=>{},getProgress:()=>0};function ct(e,n){if(typeof window>"u")return lt;let r=typeof e=="string"?document.querySelector(e):e;if(!r)return we("scrollCounter: element not found:",e),lt;let t=r,{from:a=0,to:s,format:l,easing:u="ease-out",trigger:m={},once:p=true,decimals:T,onComplete:V}=n,A=T!==void 0?d=>d.toFixed(T):l??(d=>String(Math.round(d))),ne=typeof u=="function"?u:re[u]??re["ease-out"],Ce=de(m.start??"top 80%"),B=de(m.end??"top 20%");if(window.matchMedia("(prefers-reduced-motion: reduce)").matches)return t.textContent=A(s),V?.(),lt;let X=0,G=0,M=0,C=false,L=false,w=-1,k=0,I=false,P=()=>window.scrollY,E=()=>window.innerHeight;function oe(){let d=t.getBoundingClientRect(),x=xe({top:d.top,height:d.height},P(),E(),Ce,B);X=x.tStart,G=x.tEnd;}function F(d){t.textContent=A(a+(s-a)*d),t.style.setProperty("--scroll-draw-progress",String(d));}function se(){if(!C||L)return;let d=ne(Z(P(),X,G,1));p&&(w=Math.max(w,d),d=w),k=d,F(d),d>=1&&!I?(I=true,V?.()):d<1&&!p&&(I=false),M=requestAnimationFrame(se);}oe();{let d=ne(Z(P(),X,G,1));p&&d>0&&(w=d),k=d,F(d);}let ie=new IntersectionObserver(d=>{d.forEach(x=>{C=x.isIntersecting,C&&!L?M=requestAnimationFrame(se):cancelAnimationFrame(M);});}),ee;function ae(){clearTimeout(ee),ee=setTimeout(oe,150);}return window.addEventListener("resize",ae),window.addEventListener("orientationchange",ae),ie.observe(t),Le(t,{type:"counter",getProgress:()=>k,getTrigger:()=>({tStart:X,tEnd:G})}),{destroy(){cancelAnimationFrame(M),ie.disconnect(),window.removeEventListener("resize",ae),window.removeEventListener("orientationchange",ae),clearTimeout(ee),$e(t);},replay(){w=-1,I=false,k=0,L=false,F(0);},pause(){L=true,cancelAnimationFrame(M);},resume(){L&&(L=false,C&&(M=requestAnimationFrame(se)));},seek(d){let x=Math.min(1,Math.max(0,d));k=x,w=x,L=true,cancelAnimationFrame(M),F(x);},getProgress(){return k}}}var Nt={destroy:()=>{},replay:()=>{},pause:()=>{},resume:()=>{},seek:()=>{},getProgress:()=>0};function ut(e,n={}){if(typeof window>"u")return Nt;let r=typeof e=="string"?document.querySelector(e):e;if(!r||r.tagName.toLowerCase()!=="video")return we("scrollVideo: <video> element not found:",e),Nt;let t=r,{trigger:a={},easing:s="linear",once:l=false,axis:u="y",preload:m="auto",onReady:p,onComplete:T,onProgress:V}=n,A=window.matchMedia("(prefers-reduced-motion: reduce)").matches,ne=typeof s=="function"?s:re[s]??re.linear,Ce=de(a.start??"top top"),B=de(a.end??"bottom top");t.pause(),t.hasAttribute("preload")||(t.preload=m);let J=n.from??0,X=n.to,G=0,M=0,C=0,L=false,w=false,k=-1,I=0,P=false,E=false,oe=()=>u==="x"?window.scrollX:window.scrollY,F=()=>u==="x"?window.innerWidth:window.innerHeight;function se(){let S=t.getBoundingClientRect(),R=u==="x"?S.left:S.top,fe=u==="x"?S.width:S.height,K=xe({top:R,height:fe},oe(),F(),Ce,B);G=K.tStart,M=K.tEnd;}let ie=NaN;function ee(S){if(!E)return;let R=X??t.duration??0,fe=J+(R-J)*S;fe!==ie&&(ie=fe,t.currentTime=fe),t.style.setProperty("--scroll-draw-progress",String(S)),V?.(S);}function ae(){if(!L||w||!E||A)return;let S=ne(Z(oe(),G,M,1));l&&(k=Math.max(k,S),S=k),I=S,ee(S),S>=1&&!P?(P=true,T?.()):S<1&&!l&&(P=false),C=requestAnimationFrame(ae);}function d(){if(E=true,X===void 0&&(X=t.duration),A){ee(1),p?.();return}se(),p?.(),L&&!w&&(C=requestAnimationFrame(ae));}t.readyState>=1?d():t.addEventListener("loadedmetadata",d,{once:true}),E||se();let x=new IntersectionObserver(S=>{S.forEach(R=>{L=R.isIntersecting,L&&!w&&E?C=requestAnimationFrame(ae):cancelAnimationFrame(C);});}),g;function $(){clearTimeout(g),g=setTimeout(se,150);}return window.addEventListener("resize",$),window.addEventListener("orientationchange",$),x.observe(t),Le(t,{type:"video",getProgress:()=>I,getTrigger:()=>({tStart:G,tEnd:M})}),{destroy(){cancelAnimationFrame(C),x.disconnect(),t.removeEventListener("loadedmetadata",d),window.removeEventListener("resize",$),window.removeEventListener("orientationchange",$),clearTimeout(g),$e(t);},replay(){k=-1,P=false,I=0,w=false,ie=NaN,ee(0);},pause(){w=true,cancelAnimationFrame(C);},resume(){w&&(w=false,L&&E&&(C=requestAnimationFrame(ae)));},seek(S){let R=Math.min(1,Math.max(0,S));I=R,k=R,w=true,cancelAnimationFrame(C),ie=NaN,ee(R);},getProgress(){return I}}}function zt(e){let n=e.textContent??"";return e.textContent="",n.split(/(\s+)/).filter(Boolean).map(r=>{let t=document.createElement("span");return t.setAttribute("aria-hidden","true"),/^\s+$/.test(r)?(t.textContent=r,t.style.whiteSpace="pre"):(t.textContent=r,t.style.display="inline-block"),e.appendChild(t),/^\s+$/.test(r)?null:t}).filter(r=>r!==null)}function ur(e){let n=e.textContent??"";return e.textContent="",n.split("").map(r=>{let t=document.createElement("span");return t.setAttribute("aria-hidden","true"),t.textContent=r,r===" "?t.style.whiteSpace="pre":t.style.display="inline-block",e.appendChild(t),r===" "?null:t}).filter(r=>r!==null)}function Vt(e){let n=zt(e),r=new Map;for(let s of n){let l=s.offsetTop;r.has(l)||r.set(l,[]),r.get(l).push(s);}let t=[],a=Array.from(r.keys()).sort((s,l)=>s-l);for(let s of a){let l=r.get(s),u=document.createElement("span");u.setAttribute("aria-hidden","true"),u.style.display="inline-block",l.forEach((m,p)=>{let T=m.nextElementSibling;u.appendChild(m),p<l.length-1&&T&&T.style.whiteSpace==="pre"&&u.appendChild(T);}),t.push(u);}return e.textContent="",t.forEach((s,l)=>{e.appendChild(s),l<t.length-1&&e.appendChild(document.createTextNode(" "));}),t}function mr(e,n,r,t){if(r<=1||t===0)return e;let a=(r-1)*t,s=n*t,l=s+(1-a);return l<=s?e>=s?1:0:Math.min(1,Math.max(0,(e-s)/(l-s)))}function fr(e,n){let r=[];if(n?.y!==void 0&&r.push(`translateY(${n.y*(1-e)}px)`),n?.x!==void 0&&r.push(`translateX(${n.x*(1-e)}px)`),n?.rotate!==void 0&&r.push(`rotate(${n.rotate*(1-e)}deg)`),n?.scale!==void 0){let t=n.scale+(1-n.scale)*e;r.push(`scale(${t})`);}return r.join(" ")||""}var _t={destroy:()=>{},replay:()=>{},pause:()=>{},resume:()=>{},seek:()=>{},getProgress:()=>0};function mt(e,n={}){if(typeof window>"u")return _t;let r=typeof e=="string"?document.querySelector(e):e;if(!r)return we("scrollText: element not found:",e),_t;let t=r,{split:a="words",stagger:s=.04,easing:l="ease-out",from:u={opacity:0,y:24},trigger:m={},once:p=true,onComplete:T}=n,V=window.matchMedia("(prefers-reduced-motion: reduce)").matches,A=typeof l=="function"?l:re[l]??re["ease-out"],ne=de(m.start??"top 85%"),Ce=de(m.end??"top 40%"),B=t.innerHTML;t.setAttribute("aria-label",t.textContent??"");let J;a==="chars"?J=ur(t):a==="lines"?J=Vt(t):J=zt(t);let X=J.length;function G(g,$){u?.opacity!==void 0&&(g.style.opacity=String(u.opacity+(1-u.opacity)*$));let S=fr($,u);S&&(g.style.transform=S);}function M(g){t.style.setProperty("--scroll-draw-progress",String(g)),J.forEach(($,S)=>{let R=A(mr(g,S,X,s));G($,R);});}if(V)return M(1),T?.(),{destroy(){t.innerHTML=B,t.removeAttribute("aria-label");},replay:()=>{},pause:()=>{},resume:()=>{},seek:()=>{},getProgress:()=>1};M(0);let C=0,L=0,w=0,k=false,I=false,P=-1,E=0,oe=false,F=()=>window.scrollY,se=()=>window.innerHeight;function ie(){let g=t.getBoundingClientRect(),$=xe({top:g.top,height:g.height},F(),se(),ne,Ce);C=$.tStart,L=$.tEnd;}function ee(){if(!k||I)return;let g=Z(F(),C,L,1);p&&(P=Math.max(P,g),g=P),E=g,M(g),g>=1&&!oe?(oe=true,T?.()):g<1&&!p&&(oe=false),w=requestAnimationFrame(ee);}ie();let ae=new IntersectionObserver(g=>{g.forEach($=>{k=$.isIntersecting,k&&!I?w=requestAnimationFrame(ee):cancelAnimationFrame(w);});}),d;function x(){clearTimeout(d),d=setTimeout(()=>{if(a==="lines"){let g=E;t.innerHTML=B,t.setAttribute("aria-label",t.textContent??""),J=Vt(t),M(g);}ie();},150);}return window.addEventListener("resize",x),window.addEventListener("orientationchange",x),ae.observe(t),Le(t,{type:"text",getProgress:()=>E,getTrigger:()=>({tStart:C,tEnd:L})}),{destroy(){cancelAnimationFrame(w),ae.disconnect(),window.removeEventListener("resize",x),window.removeEventListener("orientationchange",x),clearTimeout(d),t.innerHTML=B,t.removeAttribute("aria-label"),$e(t);},replay(){P=-1,oe=false,E=0,I=false,M(0);},pause(){I=true,cancelAnimationFrame(w);},resume(){I&&(I=false,k&&(w=requestAnimationFrame(ee)));},seek(g){let $=Math.min(1,Math.max(0,g));E=$,P=$,I=true,cancelAnimationFrame(w),M($);},getProgress(){return E}}}function Ie(e,n){let r,t,a,s;return solidJs.createEffect(()=>{s=typeof e=="function"?e():e;let l=It(s);!r||l===a||(a=l,solidJs.untrack(()=>{t?.destroy(),t=n(r,Ft(s,()=>s));}));}),solidJs.onCleanup(()=>{t?.destroy(),t=a=void 0;}),{ref:l=>{r=l;},getInstance:()=>t}}function yn(e={}){return Ie(e,it).ref}function hn(e={}){return Ie(e,it)}function bn(e){return Ie(e,at).ref}function wn(e){return Ie(e,at)}function vn(e){return Ie(e,ct).ref}function En(e){return Ie(e,ct)}function Sn(e={}){return Ie(e,ut).ref}function Tn(e={}){return Ie(e,ut)}function xn(e={}){return Ie(e,mt).ref}function An(e={}){return Ie(e,mt)}exports.createScrollAnimate=wn;exports.createScrollCounter=En;exports.createScrollDraw=hn;exports.createScrollText=An;exports.createScrollVideo=Tn;exports.useScrollAnimate=bn;exports.useScrollCounter=vn;exports.useScrollDraw=yn;exports.useScrollText=xn;exports.useScrollVideo=Sn;
@@ -4,8 +4,13 @@ import { S as ScrollCounterOptions } from '../index-BDGQEK6X.mjs';
4
4
  import { ScrollVideoOptions } from '../video/index.mjs';
5
5
  import { ScrollTextOptions } from '../text/index.mjs';
6
6
 
7
+ /** Options as a plain object, or an accessor that keeps them live. */
8
+ type MaybeAccessor<T> = T | (() => T);
7
9
  /**
8
10
  * SolidJS hook — returns a ref setter to attach to any container element.
11
+ * Options can be an accessor (or a component's props) to keep them live:
12
+ * `useScrollDraw(() => ({ speed: speed() }))` rebuilds the draw when the
13
+ * signal changes. A plain object is read once.
9
14
  *
10
15
  * @example
11
16
  * import { useScrollDraw } from 'svg-scroll-draw/solid';
@@ -15,7 +20,7 @@ import { ScrollTextOptions } from '../text/index.mjs';
15
20
  * return <div ref={ref}><svg>...</svg></div>;
16
21
  * }
17
22
  */
18
- declare function useScrollDraw(options?: ScrollDrawOptions): (node: HTMLElement) => void;
23
+ declare function useScrollDraw(options?: MaybeAccessor<ScrollDrawOptions>): (node: HTMLElement) => void;
19
24
  /**
20
25
  * Returns both the ref setter and a getter for the live instance,
21
26
  * so you can call instance.replay() from component logic.
@@ -25,7 +30,7 @@ declare function useScrollDraw(options?: ScrollDrawOptions): (node: HTMLElement)
25
30
  * <div ref={ref}><svg>...</svg></div>
26
31
  * <button onClick={() => getInstance()?.replay()}>Replay</button>
27
32
  */
28
- declare function createScrollDraw(options?: ScrollDrawOptions): {
33
+ declare function createScrollDraw(options?: MaybeAccessor<ScrollDrawOptions>): {
29
34
  ref: (node: HTMLElement) => void;
30
35
  getInstance: () => ScrollDrawInstance | undefined;
31
36
  };
@@ -44,7 +49,7 @@ declare function createScrollDraw(options?: ScrollDrawOptions): {
44
49
  * return <div ref={ref}>...</div>;
45
50
  * }
46
51
  */
47
- declare function useScrollAnimate(options: ScrollAnimateOptions): (node: HTMLElement) => void;
52
+ declare function useScrollAnimate(options: MaybeAccessor<ScrollAnimateOptions>): (node: HTMLElement) => void;
48
53
  /**
49
54
  * Returns both the ref setter and a getter for the live instance.
50
55
  *
@@ -55,7 +60,7 @@ declare function useScrollAnimate(options: ScrollAnimateOptions): (node: HTMLEle
55
60
  * <div ref={ref}>...</div>
56
61
  * <button onClick={() => getInstance()?.replay()}>Replay</button>
57
62
  */
58
- declare function createScrollAnimate(options: ScrollAnimateOptions): {
63
+ declare function createScrollAnimate(options: MaybeAccessor<ScrollAnimateOptions>): {
59
64
  ref: (node: HTMLElement) => void;
60
65
  getInstance: () => ScrollDrawInstance | undefined;
61
66
  };
@@ -70,7 +75,7 @@ declare function createScrollAnimate(options: ScrollAnimateOptions): {
70
75
  * return <span ref={ref} />;
71
76
  * }
72
77
  */
73
- declare function useScrollCounter(options: ScrollCounterOptions): (node: HTMLElement) => void;
78
+ declare function useScrollCounter(options: MaybeAccessor<ScrollCounterOptions>): (node: HTMLElement) => void;
74
79
  /**
75
80
  * Returns both the ref setter and a getter for the live counter instance.
76
81
  *
@@ -79,7 +84,7 @@ declare function useScrollCounter(options: ScrollCounterOptions): (node: HTMLEle
79
84
  * <span ref={ref} />
80
85
  * <button onClick={() => getInstance()?.replay()}>Replay</button>
81
86
  */
82
- declare function createScrollCounter(options: ScrollCounterOptions): {
87
+ declare function createScrollCounter(options: MaybeAccessor<ScrollCounterOptions>): {
83
88
  ref: (node: HTMLElement) => void;
84
89
  getInstance: () => ScrollDrawInstance | undefined;
85
90
  };
@@ -94,7 +99,7 @@ declare function createScrollCounter(options: ScrollCounterOptions): {
94
99
  * return <video ref={ref} src="/hero.mp4" muted playsinline preload="auto" />;
95
100
  * }
96
101
  */
97
- declare function useScrollVideo(options?: ScrollVideoOptions): (node: HTMLVideoElement) => void;
102
+ declare function useScrollVideo(options?: MaybeAccessor<ScrollVideoOptions>): (node: HTMLVideoElement) => void;
98
103
  /**
99
104
  * Returns both the ref setter and a getter for the live video instance.
100
105
  *
@@ -102,7 +107,7 @@ declare function useScrollVideo(options?: ScrollVideoOptions): (node: HTMLVideoE
102
107
  * const { ref, getInstance } = createScrollVideo({ once: false });
103
108
  * <video ref={ref} src="/hero.mp4" muted playsinline preload="auto" />
104
109
  */
105
- declare function createScrollVideo(options?: ScrollVideoOptions): {
110
+ declare function createScrollVideo(options?: MaybeAccessor<ScrollVideoOptions>): {
106
111
  ref: (node: HTMLVideoElement) => void;
107
112
  getInstance: () => ScrollDrawInstance | undefined;
108
113
  };
@@ -117,7 +122,7 @@ declare function createScrollVideo(options?: ScrollVideoOptions): {
117
122
  * return <h2 ref={ref}>Animate on scroll.</h2>;
118
123
  * }
119
124
  */
120
- declare function useScrollText(options?: ScrollTextOptions): (node: HTMLElement) => void;
125
+ declare function useScrollText(options?: MaybeAccessor<ScrollTextOptions>): (node: HTMLElement) => void;
121
126
  /**
122
127
  * Returns both the ref setter and a getter for the live text instance.
123
128
  *
@@ -126,9 +131,9 @@ declare function useScrollText(options?: ScrollTextOptions): (node: HTMLElement)
126
131
  * <p ref={ref}>Hello world.</p>
127
132
  * <button onClick={() => getInstance()?.replay()}>Replay</button>
128
133
  */
129
- declare function createScrollText(options?: ScrollTextOptions): {
134
+ declare function createScrollText(options?: MaybeAccessor<ScrollTextOptions>): {
130
135
  ref: (node: HTMLElement) => void;
131
136
  getInstance: () => ScrollDrawInstance | undefined;
132
137
  };
133
138
 
134
- export { ScrollAnimateOptions, ScrollCounterOptions, ScrollDrawOptions, ScrollTextOptions, ScrollVideoOptions, createScrollAnimate, createScrollCounter, createScrollDraw, createScrollText, createScrollVideo, useScrollAnimate, useScrollCounter, useScrollDraw, useScrollText, useScrollVideo };
139
+ export { type MaybeAccessor, ScrollAnimateOptions, ScrollCounterOptions, ScrollDrawOptions, ScrollTextOptions, ScrollVideoOptions, createScrollAnimate, createScrollCounter, createScrollDraw, createScrollText, createScrollVideo, useScrollAnimate, useScrollCounter, useScrollDraw, useScrollText, useScrollVideo };
@@ -4,8 +4,13 @@ import { S as ScrollCounterOptions } from '../index-DxjUOIbK.js';
4
4
  import { ScrollVideoOptions } from '../video/index.js';
5
5
  import { ScrollTextOptions } from '../text/index.js';
6
6
 
7
+ /** Options as a plain object, or an accessor that keeps them live. */
8
+ type MaybeAccessor<T> = T | (() => T);
7
9
  /**
8
10
  * SolidJS hook — returns a ref setter to attach to any container element.
11
+ * Options can be an accessor (or a component's props) to keep them live:
12
+ * `useScrollDraw(() => ({ speed: speed() }))` rebuilds the draw when the
13
+ * signal changes. A plain object is read once.
9
14
  *
10
15
  * @example
11
16
  * import { useScrollDraw } from 'svg-scroll-draw/solid';
@@ -15,7 +20,7 @@ import { ScrollTextOptions } from '../text/index.js';
15
20
  * return <div ref={ref}><svg>...</svg></div>;
16
21
  * }
17
22
  */
18
- declare function useScrollDraw(options?: ScrollDrawOptions): (node: HTMLElement) => void;
23
+ declare function useScrollDraw(options?: MaybeAccessor<ScrollDrawOptions>): (node: HTMLElement) => void;
19
24
  /**
20
25
  * Returns both the ref setter and a getter for the live instance,
21
26
  * so you can call instance.replay() from component logic.
@@ -25,7 +30,7 @@ declare function useScrollDraw(options?: ScrollDrawOptions): (node: HTMLElement)
25
30
  * <div ref={ref}><svg>...</svg></div>
26
31
  * <button onClick={() => getInstance()?.replay()}>Replay</button>
27
32
  */
28
- declare function createScrollDraw(options?: ScrollDrawOptions): {
33
+ declare function createScrollDraw(options?: MaybeAccessor<ScrollDrawOptions>): {
29
34
  ref: (node: HTMLElement) => void;
30
35
  getInstance: () => ScrollDrawInstance | undefined;
31
36
  };
@@ -44,7 +49,7 @@ declare function createScrollDraw(options?: ScrollDrawOptions): {
44
49
  * return <div ref={ref}>...</div>;
45
50
  * }
46
51
  */
47
- declare function useScrollAnimate(options: ScrollAnimateOptions): (node: HTMLElement) => void;
52
+ declare function useScrollAnimate(options: MaybeAccessor<ScrollAnimateOptions>): (node: HTMLElement) => void;
48
53
  /**
49
54
  * Returns both the ref setter and a getter for the live instance.
50
55
  *
@@ -55,7 +60,7 @@ declare function useScrollAnimate(options: ScrollAnimateOptions): (node: HTMLEle
55
60
  * <div ref={ref}>...</div>
56
61
  * <button onClick={() => getInstance()?.replay()}>Replay</button>
57
62
  */
58
- declare function createScrollAnimate(options: ScrollAnimateOptions): {
63
+ declare function createScrollAnimate(options: MaybeAccessor<ScrollAnimateOptions>): {
59
64
  ref: (node: HTMLElement) => void;
60
65
  getInstance: () => ScrollDrawInstance | undefined;
61
66
  };
@@ -70,7 +75,7 @@ declare function createScrollAnimate(options: ScrollAnimateOptions): {
70
75
  * return <span ref={ref} />;
71
76
  * }
72
77
  */
73
- declare function useScrollCounter(options: ScrollCounterOptions): (node: HTMLElement) => void;
78
+ declare function useScrollCounter(options: MaybeAccessor<ScrollCounterOptions>): (node: HTMLElement) => void;
74
79
  /**
75
80
  * Returns both the ref setter and a getter for the live counter instance.
76
81
  *
@@ -79,7 +84,7 @@ declare function useScrollCounter(options: ScrollCounterOptions): (node: HTMLEle
79
84
  * <span ref={ref} />
80
85
  * <button onClick={() => getInstance()?.replay()}>Replay</button>
81
86
  */
82
- declare function createScrollCounter(options: ScrollCounterOptions): {
87
+ declare function createScrollCounter(options: MaybeAccessor<ScrollCounterOptions>): {
83
88
  ref: (node: HTMLElement) => void;
84
89
  getInstance: () => ScrollDrawInstance | undefined;
85
90
  };
@@ -94,7 +99,7 @@ declare function createScrollCounter(options: ScrollCounterOptions): {
94
99
  * return <video ref={ref} src="/hero.mp4" muted playsinline preload="auto" />;
95
100
  * }
96
101
  */
97
- declare function useScrollVideo(options?: ScrollVideoOptions): (node: HTMLVideoElement) => void;
102
+ declare function useScrollVideo(options?: MaybeAccessor<ScrollVideoOptions>): (node: HTMLVideoElement) => void;
98
103
  /**
99
104
  * Returns both the ref setter and a getter for the live video instance.
100
105
  *
@@ -102,7 +107,7 @@ declare function useScrollVideo(options?: ScrollVideoOptions): (node: HTMLVideoE
102
107
  * const { ref, getInstance } = createScrollVideo({ once: false });
103
108
  * <video ref={ref} src="/hero.mp4" muted playsinline preload="auto" />
104
109
  */
105
- declare function createScrollVideo(options?: ScrollVideoOptions): {
110
+ declare function createScrollVideo(options?: MaybeAccessor<ScrollVideoOptions>): {
106
111
  ref: (node: HTMLVideoElement) => void;
107
112
  getInstance: () => ScrollDrawInstance | undefined;
108
113
  };
@@ -117,7 +122,7 @@ declare function createScrollVideo(options?: ScrollVideoOptions): {
117
122
  * return <h2 ref={ref}>Animate on scroll.</h2>;
118
123
  * }
119
124
  */
120
- declare function useScrollText(options?: ScrollTextOptions): (node: HTMLElement) => void;
125
+ declare function useScrollText(options?: MaybeAccessor<ScrollTextOptions>): (node: HTMLElement) => void;
121
126
  /**
122
127
  * Returns both the ref setter and a getter for the live text instance.
123
128
  *
@@ -126,9 +131,9 @@ declare function useScrollText(options?: ScrollTextOptions): (node: HTMLElement)
126
131
  * <p ref={ref}>Hello world.</p>
127
132
  * <button onClick={() => getInstance()?.replay()}>Replay</button>
128
133
  */
129
- declare function createScrollText(options?: ScrollTextOptions): {
134
+ declare function createScrollText(options?: MaybeAccessor<ScrollTextOptions>): {
130
135
  ref: (node: HTMLElement) => void;
131
136
  getInstance: () => ScrollDrawInstance | undefined;
132
137
  };
133
138
 
134
- export { ScrollAnimateOptions, ScrollCounterOptions, ScrollDrawOptions, ScrollTextOptions, ScrollVideoOptions, createScrollAnimate, createScrollCounter, createScrollDraw, createScrollText, createScrollVideo, useScrollAnimate, useScrollCounter, useScrollDraw, useScrollText, useScrollVideo };
139
+ export { type MaybeAccessor, ScrollAnimateOptions, ScrollCounterOptions, ScrollDrawOptions, ScrollTextOptions, ScrollVideoOptions, createScrollAnimate, createScrollCounter, createScrollDraw, createScrollText, createScrollVideo, useScrollAnimate, useScrollCounter, useScrollDraw, useScrollText, useScrollVideo };
@@ -1 +1 @@
1
- import {a as a$3}from'../chunk-JC5BD4RB.mjs';import {a as a$2}from'../chunk-SNCRC6BA.mjs';import {a as a$1}from'../chunk-4MH5SQTH.mjs';import {a}from'../chunk-QJ4H2HW3.mjs';import {b}from'../chunk-WDIHLRZZ.mjs';import'../chunk-OJFWQ6CU.mjs';import'../chunk-YWKPTYSG.mjs';import'../chunk-YZV4Z3EQ.mjs';import'../chunk-PEFR3ZB7.mjs';import'../chunk-DM6EDKWH.mjs';import'../chunk-4DOJSIEQ.mjs';import'../chunk-BCV4RAIX.mjs';import'../chunk-LFSU6LR3.mjs';import {onMount,onCleanup}from'solid-js';function E(t={}){let e,n;return onMount(()=>{e&&(n=b(e,t));}),onCleanup(()=>{n?.destroy();}),r=>{e=r;}}function M(t={}){let e,n;return onMount(()=>{e&&(n=b(e,t));}),onCleanup(()=>{n?.destroy(),n=void 0;}),{ref:r=>{e=r;},getInstance:()=>n}}function H(t){let e,n;return onMount(()=>{e&&(n=a(e,t));}),onCleanup(()=>{n?.destroy();}),r=>{e=r;}}function L(t){let e,n;return onMount(()=>{e&&(n=a(e,t));}),onCleanup(()=>{n?.destroy(),n=void 0;}),{ref:r=>{e=r;},getInstance:()=>n}}function O(t){let e,n;return onMount(()=>{e&&(n=a$1(e,t));}),onCleanup(()=>{n?.destroy();}),r=>{e=r;}}function x(t){let e,n;return onMount(()=>{e&&(n=a$1(e,t));}),onCleanup(()=>{n?.destroy(),n=void 0;}),{ref:r=>{e=r;},getInstance:()=>n}}function w(t={}){let e,n;return onMount(()=>{e&&(n=a$3(e,t));}),onCleanup(()=>{n?.destroy();}),r=>{e=r;}}function y(t={}){let e,n;return onMount(()=>{e&&(n=a$3(e,t));}),onCleanup(()=>{n?.destroy(),n=void 0;}),{ref:r=>{e=r;},getInstance:()=>n}}function D(t={}){let e,n;return onMount(()=>{e&&(n=a$2(e,t));}),onCleanup(()=>{n?.destroy();}),r=>{e=r;}}function I(t={}){let e,n;return onMount(()=>{e&&(n=a$2(e,t));}),onCleanup(()=>{n?.destroy(),n=void 0;}),{ref:r=>{e=r;},getInstance:()=>n}}export{L as createScrollAnimate,x as createScrollCounter,M as createScrollDraw,I as createScrollText,y as createScrollVideo,H as useScrollAnimate,O as useScrollCounter,E as useScrollDraw,D as useScrollText,w as useScrollVideo};
1
+ import {a,b}from'../chunk-XSVTHCLO.mjs';import {a as a$3}from'../chunk-JC5BD4RB.mjs';import {a as a$4}from'../chunk-SNCRC6BA.mjs';import {a as a$2}from'../chunk-4MH5SQTH.mjs';import {a as a$1}from'../chunk-QJ4H2HW3.mjs';import {b as b$1}from'../chunk-WDIHLRZZ.mjs';import'../chunk-OJFWQ6CU.mjs';import'../chunk-YWKPTYSG.mjs';import'../chunk-YZV4Z3EQ.mjs';import'../chunk-PEFR3ZB7.mjs';import'../chunk-DM6EDKWH.mjs';import'../chunk-4DOJSIEQ.mjs';import'../chunk-BCV4RAIX.mjs';import'../chunk-LFSU6LR3.mjs';import {createEffect,onCleanup,untrack}from'solid-js';function o(e,f){let l,t,c,r;return createEffect(()=>{r=typeof e=="function"?e():e;let n=a(r);!l||n===c||(c=n,untrack(()=>{t?.destroy(),t=f(l,b(r,()=>r));}));}),onCleanup(()=>{t?.destroy(),t=c=void 0;}),{ref:n=>{l=n;},getInstance:()=>t}}function D(e={}){return o(e,b$1).ref}function V(e={}){return o(e,b$1)}function C(e){return o(e,a$1).ref}function H(e){return o(e,a$1)}function L(e){return o(e,a$2).ref}function g(e){return o(e,a$2)}function I(e={}){return o(e,a$3).ref}function k(e={}){return o(e,a$3)}function v(e={}){return o(e,a$4).ref}function j(e={}){return o(e,a$4)}export{H as createScrollAnimate,g as createScrollCounter,V as createScrollDraw,j as createScrollText,k as createScrollVideo,C as useScrollAnimate,L as useScrollCounter,D as useScrollDraw,v as useScrollText,I as useScrollVideo};