svg-scroll-draw 2.24.0 → 2.26.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +174 -30
- package/dist/angular/index.cjs +3 -3
- package/dist/angular/index.d.mts +60 -6
- package/dist/angular/index.d.ts +60 -6
- package/dist/angular/index.mjs +1 -1
- package/dist/astro/index.cjs +2 -2
- package/dist/astro/index.d.mts +3 -3
- package/dist/astro/index.d.ts +3 -3
- package/dist/astro/index.mjs +1 -1
- package/dist/cdn/svg-scroll-draw.dev.global.js +69 -31
- package/dist/cdn/svg-scroll-draw.global.js +2 -2
- package/dist/chunk-5SJE7725.mjs +1 -0
- package/dist/{chunk-NX74KN5X.mjs → chunk-5U4JXBHR.mjs} +1 -1
- package/dist/chunk-7LDSB4FT.mjs +1 -0
- package/dist/chunk-ASCOHQQD.mjs +2 -0
- package/dist/chunk-GBFWTY5L.mjs +1 -0
- package/dist/chunk-HAGTU5EX.mjs +1 -0
- package/dist/chunk-HJTHOZK5.mjs +1 -0
- package/dist/chunk-IXR6RML7.mjs +1 -0
- package/dist/chunk-KN2YB54Z.mjs +1 -0
- package/dist/chunk-NJV6S5LD.mjs +1 -0
- package/dist/chunk-UBH4K5YD.mjs +1 -0
- package/dist/chunk-UF3MO5XQ.mjs +1 -0
- package/dist/chunk-XLXVGQ3P.mjs +3 -0
- package/dist/chunk-YOOPMYT6.mjs +1 -0
- package/dist/chunk-Z72TVDHY.mjs +1 -0
- package/dist/cinematic/index.cjs +2 -2
- package/dist/cinematic/index.d.mts +3 -1
- package/dist/cinematic/index.d.ts +3 -1
- package/dist/cinematic/index.mjs +1 -1
- package/dist/{engine-6VsjEwzb.d.ts → engine-Bi2x8-X-.d.mts} +2 -2
- package/dist/{engine-BLWKCfxC.d.mts → engine-DAlvk6i0.d.ts} +2 -2
- package/dist/frames/index.cjs +1 -1
- package/dist/frames/index.d.mts +2 -2
- package/dist/frames/index.d.ts +2 -2
- package/dist/frames/index.mjs +1 -1
- package/dist/group/index.cjs +3 -3
- package/dist/group/index.d.mts +3 -3
- package/dist/group/index.d.ts +3 -3
- package/dist/group/index.mjs +1 -1
- package/dist/horizontal/index.cjs +1 -1
- package/dist/horizontal/index.d.mts +2 -2
- package/dist/horizontal/index.d.ts +2 -2
- package/dist/horizontal/index.mjs +1 -1
- package/dist/{index-BN8yKeQ3.d.ts → index-BMMZ8aW7.d.mts} +2 -2
- package/dist/{index-hSQqLVbg.d.ts → index-CEMsUTEG.d.ts} +3 -3
- package/dist/{index-DAiRJgtF.d.mts → index-ClAFxNEp.d.mts} +3 -3
- package/dist/{index-DVjblK_4.d.mts → index-MdQ4ti_z.d.ts} +2 -2
- package/dist/index.cjs +4 -4
- package/dist/index.d.mts +6 -6
- package/dist/index.d.ts +6 -6
- package/dist/index.mjs +1 -1
- package/dist/lenis/index.cjs +1 -1
- package/dist/lenis/index.d.mts +15 -16
- package/dist/lenis/index.d.ts +15 -16
- package/dist/lenis/index.mjs +1 -1
- package/dist/nuxt/index.cjs +3 -3
- package/dist/nuxt/index.d.mts +8 -5
- package/dist/nuxt/index.d.ts +8 -5
- package/dist/nuxt/index.mjs +1 -1
- package/dist/progress/index.cjs +1 -1
- package/dist/progress/index.d.mts +2 -2
- package/dist/progress/index.d.ts +2 -2
- package/dist/progress/index.mjs +1 -1
- package/dist/react/index.cjs +3 -3
- package/dist/react/index.d.mts +21 -5
- package/dist/react/index.d.ts +21 -5
- package/dist/react/index.mjs +1 -1
- package/dist/reveal/index.cjs +1 -1
- package/dist/reveal/index.d.mts +2 -2
- package/dist/reveal/index.d.ts +2 -2
- package/dist/reveal/index.mjs +1 -1
- package/dist/{scroll-draw-Fzir8hlU.d.mts → scroll-draw-CKZysh22.d.mts} +1 -1
- package/dist/{scroll-draw-BsU_Ohmu.d.ts → scroll-draw-DbY8RUJE.d.ts} +1 -1
- package/dist/snap/index.cjs +1 -1
- package/dist/snap/index.d.mts +2 -2
- package/dist/snap/index.d.ts +2 -2
- package/dist/snap/index.mjs +1 -1
- package/dist/solid/index.cjs +3 -3
- package/dist/solid/index.d.mts +40 -4
- package/dist/solid/index.d.ts +40 -4
- package/dist/solid/index.mjs +1 -1
- package/dist/svelte/index.cjs +3 -3
- package/dist/svelte/index.d.mts +47 -4
- package/dist/svelte/index.d.ts +47 -4
- package/dist/svelte/index.mjs +1 -1
- package/dist/text/index.cjs +1 -1
- package/dist/text/index.d.mts +2 -2
- package/dist/text/index.d.ts +2 -2
- package/dist/text/index.mjs +1 -1
- package/dist/timeline/index.cjs +10 -10
- package/dist/timeline/index.d.mts +2 -2
- package/dist/timeline/index.d.ts +2 -2
- package/dist/timeline/index.mjs +2 -2
- package/dist/{types-9bcJdVcg.d.mts → types-iITMwrru.d.mts} +10 -2
- package/dist/{types-9bcJdVcg.d.ts → types-iITMwrru.d.ts} +10 -2
- package/dist/video/index.cjs +1 -1
- package/dist/video/index.d.mts +2 -2
- package/dist/video/index.d.ts +2 -2
- package/dist/video/index.mjs +1 -1
- package/dist/vue/index.cjs +3 -3
- package/dist/vue/index.d.mts +37 -4
- package/dist/vue/index.d.ts +37 -4
- package/dist/vue/index.mjs +1 -1
- package/dist/web-component/index.cjs +3 -3
- package/dist/web-component/index.mjs +1 -1
- package/dist/wrapper-BOHrDnBO.d.mts +8 -0
- package/dist/wrapper-Cm7JTIVl.d.ts +8 -0
- package/package.json +1 -1
- package/dist/chunk-32ZCSGFZ.mjs +0 -1
- package/dist/chunk-5SKWSPQT.mjs +0 -1
- package/dist/chunk-7USW2XFB.mjs +0 -1
- package/dist/chunk-7XOFQCQE.mjs +0 -3
- package/dist/chunk-BDXWPUBJ.mjs +0 -2
- package/dist/chunk-BRV2B2YW.mjs +0 -1
- package/dist/chunk-QZKYGS74.mjs +0 -1
- package/dist/chunk-THPTANES.mjs +0 -1
- package/dist/chunk-U5TKLHGW.mjs +0 -1
- package/dist/chunk-V3Z6G5JE.mjs +0 -1
- package/dist/chunk-XSVTHCLO.mjs +0 -1
package/dist/svelte/index.cjs
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
'use strict';function
|
|
2
|
-
<div style="position:absolute;${
|
|
3
|
-
<div style="position:absolute;${f?`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(r),window.addEventListener("scroll",o,{passive:true}),o(),{el:r,destroy(){window.removeEventListener("scroll",o),r.remove();}}}var Ut=/[-+]?(?:\d*\.)?\d+(?:[eE][-+]?\d+)?/g,Xt=/[MmLlHhVvCcSsQqTtAaZz]/g;function An(e,t,n){if(!ze)return;let r=(e.match(Xt)??[]).join("").toUpperCase(),o=(t.match(Xt)??[]).join("").toUpperCase(),s=(e.match(Ut)??[]).length,a=(t.match(Ut)??[]).length;if(r!==o){ae(`morphTo: command sequence differs (${r||"\u2205"} \u2192 ${o||"\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!==a&&ae(`morphTo: coordinate count differs (${s} \u2192 ${a}). Extra coordinates are ignored and missing ones hold their start value, so the result will not reach the target shape.`,n);}function Cn(e,t,n){let r=(t.match(/[-+]?(?:\d*\.)?\d+(?:[eE][-+]?\d+)?/g)??[]).map(Number),o=0;return e.replace(/[-+]?(?:\d*\.)?\d+(?:[eE][-+]?\d+)?/g,s=>{let a=parseFloat(s),u=r[o++]??a;return String(+(a+(u-a)*n).toFixed(4))})}function gt(e,t={}){return typeof window>"u"?{destroy:()=>{},replay:()=>{},pause:()=>{},resume:()=>{},seek:()=>{},getProgress:()=>0}:Ne(t,(n,r)=>Pn(e,n,r))}function Pn(e,t,n){let{preset:r,...o}=t,s=r?{...Wt[r],...o}:o,{selector:a="path, polyline, line, polygon, rect, circle",speed:u=1,fade:f=false,easing:p="linear",trigger:g={},stagger:x=0,direction:y="forward",once:I=false,debug:j=false,axis:w="y",scrollContainer:H,autoReverse:ue=false,delay:D=0,strokeColor:M,strokeWidth:A,fillOpacity:$,waypoints:v,velocityScale:C=false,threshold:N=0,rootMargin:te="0px",repeat:q=0,repeatDelay:V=0,morphTo:R,clip:E,autoplay:Y=false,duration:h=1e3,native:P=true,onProgress:Se,onStart:U,onComplete:_,onEnter:fe,onLeave:Te,onEnterBack:ge,onLeaveBack:me}=s,b=E===true?"left":typeof E=="string"?E:false,S=typeof p=="function"?p:ee[p]??ee.linear,ye=ie(g.start||"top bottom"),Ie=ie(g.end||"bottom top"),X=typeof H=="string"?document.querySelector(H):H??null,Le=Array.isArray(M)?M[0]:null,Ae=Array.isArray(M)?M[1]:typeof M=="string"?M:null,he=Array.isArray(A)?A[0]:null,He=Array.isArray(A)?A[1]:typeof A=="number"?A:null,Ce=Array.isArray($)?$[0]:null,be=Array.isArray($)?$[1]:typeof $=="number"?$:null;function Pe(i){let c=i*100;switch(b){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(${i*150}% at 50% 50%)`;default:return `inset(0 ${100-c}% 0 0)`}}let l=b?[]:Array.from(e.querySelectorAll(a)),m=[],K=[],k=0,F=0,Q=x,W=0,De=0,Z=false,$e=false,ke=0,lt=-1,Xe=[],Ke=-1,pe=false,xe=0,Re=0,Ve,ct=false,ut=null;function xt(){ut?.destroy(),ut=null;}let Fe=new Set,Mt=NaN,_e=true,Ze=-1,Lt=performance.now(),We=NaN;function Je(){return X?w==="x"?X.scrollLeft:X.scrollTop:w==="x"?window.scrollX:window.scrollY}function At(){return X?w==="x"?X.clientWidth:X.clientHeight:w==="x"?window.innerWidth:window.innerHeight}function Ct(){let i=et(e,X,w);return we(i,i.scroll,At(),ye,Ie)}function ln(){let i=F-k,c=l.length-1,d=X??document.documentElement,L=w==="x"?"Width":"Height";if(Q=x,x>0&&c>0&&i>0){let ne=d[`scroll${L}`]-d[`client${L}`]-1-k-i/u;ne>=0&&(Q=Math.min(x,ne/(c*i)));}let J=Math.max(0,c)*Q*i,le=i/Math.min(u,1);W=k+Math.min(0,J,le,J+le),De=k+Math.max(0,J,le,J+le);}function Pt(){(({tStart:k,tEnd:F}=Ct())),ln(),j&&ze&&(xt(),ut=Ln(k,F,w));}function ft(i,c=Ct){ve(e,{type:"draw",getProgress:()=>i.getProgress(),getTrigger:c});let d=i.destroy;return i.destroy=()=>{d.call(i),Ee(e);},i}function $t(i,c){return I&&!ue?Math.max(lt,S(Xe[i]=Math.max(Xe[i]??0,c))):S(c)}function cn(i,c){if(e.style.setProperty("--scroll-draw-progress",String(i)),b){let d=c==="reverse"?1-i:i;e.style.clipPath=Pe(d);return}l.forEach((d,L)=>mt(d,L,i,c));}function mt(i,c,d,L){i.style.strokeDashoffset=L==="reverse"?`${m[c]*d}`:`${m[c]*(1-d)}`,f&&(i.style.opacity=L==="reverse"?`${1-d}`:`${d}`),Le&&Ae?i.style.stroke=nt(Le,Ae,d):Ae&&(i.style.stroke=Ae),he!==null&&He!==null?i.style.strokeWidth=`${he+(He-he)*d}`:He!==null&&(i.style.strokeWidth=`${He}`),Ce!==null&&be!==null?i.style.fillOpacity=`${Ce+(be-Ce)*d}`:be!==null&&(i.style.fillOpacity=`${be}`),R&&i.tagName.toLowerCase()==="path"&&K[c]&&i.setAttribute("d",Cn(K[c],R,d));}function pt(){if(e.style.setProperty("--scroll-draw-progress","0"),b){e.style.clipPath=Pe(y==="reverse"?1:0);return}l.forEach((i,c)=>{i.style.strokeDasharray=`${m[c]}`,i.style.strokeDashoffset=y==="reverse"?"0":`${m[c]}`,f?i.style.opacity=y==="reverse"?"1":"0":i.style.opacity="",Le&&(i.style.stroke=Le),he!==null&&(i.style.strokeWidth=`${he}`),Ce!==null&&(i.style.fillOpacity=`${Ce}`),R&&i.tagName.toLowerCase()==="path"&&K[c]&&i.setAttribute("d",K[c]);});}function Ge(i,c){let d=i.getAttribute("d"),L=tt(i);if(R&&K[c]){i.setAttribute("d",R);let J=tt(i);i.setAttribute("d",K[c]),L=Math.max(tt(i),J),i.setAttribute("d",d);}m[c]=L,i.style.strokeDasharray=`${L}`;}if(l.forEach((i,c)=>{Mn(i);let d=i.tagName.toLowerCase()==="path";d?K.push(i.getAttribute("d")??""):K.push(""),Ge(i,c);let L=m[c];R&&(d?An(K[K.length-1],R,i):ae(`morphTo only applies to <path> elements \u2014 ignored on <${i.tagName}>.`,i)),n?(i.style.strokeDashoffset=y==="reverse"?`${L}`:"0",f&&(i.style.opacity="1"),Ae&&(i.style.stroke=Ae),He!==null&&(i.style.strokeWidth=`${He}`),be!==null&&(i.style.fillOpacity=`${be}`),R&&i.tagName.toLowerCase()==="path"&&i.setAttribute("d",R)):(i.style.strokeDashoffset=y==="reverse"?"0":`${L}`,f?i.style.opacity=y==="reverse"?"1":"0":i.style.opacity="",Le&&(i.style.stroke=Le),he!==null&&(i.style.strokeWidth=`${he}`),Ce!==null&&(i.style.fillOpacity=`${Ce}`));}),n)return b&&(e.style.clipPath=Pe(1)),_?.(),{destroy:()=>{},replay:()=>{},pause:()=>{},resume:()=>{},seek:()=>{},getProgress:()=>1};b&&(e.style.clipPath=Pe(y==="reverse"?1:0));let kt=typeof p=="string"?rt(p):null;function un(){return !(P===false||Y||j&&ze||!xn()||!l.length||!kt||b||w!=="y"||X||u!==1||x!==0||I||ue||C!==false||R||v||q||D>0||Se||U||_||fe||Te||ge||me||M!=null||A!=null||$!=null||(g.start||"top bottom").trim()!=="top bottom"||(g.end||"bottom top").trim()!=="bottom top")}function fn(){let i=++Tn,c=`svg-scroll-draw-${i}`,d=`svg-scroll-draw-host-${i}`,L=`--svg-scroll-draw-${i}`,J=y==="reverse"?"0":"var(--ssd-len)",le=y==="reverse"?"var(--ssd-len)":"0",ne=`stroke-dashoffset:${J};`,z=`stroke-dashoffset:${le};`;f&&(ne+=`opacity:${y==="reverse"?1:0};`,z+=`opacity:${y==="reverse"?0:1};`);let G=document.createElement("style");G.setAttribute("data-svg-scroll-draw",""),G.textContent=`@keyframes ${c}{from{${ne}}to{${z}}}.${d}{view-timeline-name:${L};view-timeline-axis:block;}.${c}{animation-name:${c};animation-duration:auto;animation-timing-function:${kt};animation-fill-mode:both;animation-timeline:${L};animation-range:cover 0% cover 100%;}`,document.head.appendChild(G),e.classList.add(d);function se(T,O){T.style.setProperty("--ssd-len",String(m[O])),T.style.strokeDasharray=`${m[O]}`,T.style.strokeDashoffset="",T.style.opacity="",T.style.animationPlayState="",T.classList.add(c);}l.forEach(se);let re=false,ce=-1;function de(){if(ce>=0)return ce;let T=e.getBoundingClientRect(),{tStart:O,tEnd:oe}=we({top:T.top,height:T.height},Je(),At(),ye,Ie);return S(B(Je(),O,oe,u))}return {destroy(){e.classList.remove(d),l.forEach(T=>{T.classList.remove(c),T.style.removeProperty("--ssd-len"),T.style.animationPlayState="";}),G.remove();},replay(){re=false,ce=-1,l.forEach(se);},pause(){re=true,l.forEach(T=>{T.style.animationPlayState="paused";});},resume(){re&&(re=false,l.forEach(T=>{T.style.animationPlayState="running";}));},seek(T){let O=Math.min(1,Math.max(0,T));ce=O,re=true,l.forEach((oe,Oe)=>{oe.classList.remove(c),oe.style.strokeDashoffset=y==="reverse"?`${m[Oe]*O}`:`${m[Oe]*(1-O)}`,f&&(oe.style.opacity=y==="reverse"?`${1-O}`:`${O}`);});},getProgress(){return de()},refresh(){l.forEach((T,O)=>{Ge(T,O),T.style.setProperty("--ssd-len",String(m[O]));});}}}if(un())return ft(fn());function mn(){let i=Math.max(1,h),c=b?i:i*(1+Math.max(0,l.length-1)*x),d=0,L=0,J=false;function le(ce){let de=true,T=Math.min(1,Math.max(0,ce/c));if(b){let O=Math.min(1,Math.max(0,ce/i)),oe=S(O);xe=oe,e.style.setProperty("--scroll-draw-progress",String(oe)),e.style.clipPath=Pe(y==="reverse"?1-oe:oe),Se?.(oe),O<1&&(de=false);}else {l.forEach((oe,Oe)=>{let dn=Oe*x*i,Nt=Math.min(1,Math.max(0,(ce-dn)/i));mt(oe,Oe,S(Nt),y),Nt<1&&(de=false);});let O=S(T);xe=O,Se?.(O),e.style.setProperty("--scroll-draw-progress",String(O));}if(v){let O=S(T);for(let oe in v){let Oe=parseFloat(oe);O>=Oe&&!Fe.has(Oe)&&(Fe.add(Oe),v[oe]?.());}}return de}function ne(ce){if(pe)return;let de=ce-d;$e||($e=true,U?.());let T=le(de);if(T&&!Z){Z=true,le(c),_?.(),Re<(q==="infinite"?1/0:q??0)&&(Re++,Ve=setTimeout(()=>{d=performance.now(),$e=false,Z=false,Fe.clear(),pt(),ke=requestAnimationFrame(ne);},V));return}T||(ke=requestAnimationFrame(ne));}function z(){cancelAnimationFrame(ke),clearTimeout(Ve),d=performance.now(),L=0,pe=false,$e=false,Z=false,Re=0,J=true,xe=0,Fe.clear(),pt(),ke=requestAnimationFrame(ne);}let G=new IntersectionObserver(ce=>{ce.forEach(de=>{de.isIntersecting&&!(I&&Z)?z():!de.isIntersecting&&!I&&!Z&&(cancelAnimationFrame(ke),clearTimeout(Ve),J=false);});},{root:X??null,threshold:N,rootMargin:te}),se;function re(){clearTimeout(se),se=setTimeout(()=>l.forEach(Ge),150);}return window.addEventListener("resize",re),window.addEventListener("orientationchange",re),D>0?setTimeout(()=>G.observe(e),D):G.observe(e),{destroy(){cancelAnimationFrame(ke),clearTimeout(Ve),G.disconnect(),window.removeEventListener("resize",re),window.removeEventListener("orientationchange",re),clearTimeout(se);},replay(){Re=0,z();},pause(){pe||!J||(pe=true,L=performance.now()-d,cancelAnimationFrame(ke));},resume(){pe&&(pe=false,J=true,d=performance.now()-L,ke=requestAnimationFrame(ne));},seek(ce){let de=Math.min(1,Math.max(0,ce));xe=de,pe=true,L=de*c,d=performance.now()-L,cancelAnimationFrame(ke),le(L);},getProgress(){return xe},refresh(){clearTimeout(se),l.forEach(Ge);}}}if(Y)return ft(mn());Pt();let Ot=()=>B(Je(),W,De,1);function It(){Z=true,_?.(),Re<(q==="infinite"?1/0:q)&&(Re++,Ve=setTimeout(()=>{ct=true;},V));}function Ht(){lt=-1,Xe=[],$e=false,Z=false,ct=false,Fe.clear(),pt(),_e=true;}function pn(){let i=performance.now(),c=Je();if(ct&&Ot()%1&&Ht(),!_e&&C===false&&c===Mt)return;_e=false,Mt=c;let d=u;if(C!==false){let z=i-Lt,G=z>0?Math.abs(c-(Ze<0?c:Ze))/z:0;d=u*Math.max(.2,1+G*(typeof C=="number"?C:1)*.04);}Ze=c,Lt=i;let L=ue?Ke===-1||c>=Ke?"forward":"reverse":y;Ke=c;let J=F-k,le=true,ne=J===0?0:(c-k)/J;if(isNaN(We)||(We<=0&&ne>0&&fe?.(),We<1&&ne>=1&&Te?.(),We>=1&&ne<1&&ge?.(),We>0&&ne<=0&&me?.()),We=ne,b){let z=$t(0,B(c,k,F,d));xe=z,e.style.setProperty("--scroll-draw-progress",String(z));let G=L==="reverse"?1-z:z;e.style.clipPath=Pe(G),Se?.(z),!$e&&B(c,k,F,d)>0&&($e=true,U?.()),z>=1&&!Z?It():z<1&&!I&&(Z=false);return}if(l.forEach((z,G)=>{let se=G*Q*J,re=$t(G,B(c,k+se,F+se,d));mt(z,G,re,L),G===0&&(xe=re,Se?.(re),e.style.setProperty("--scroll-draw-progress",String(re))),re<1&&(le=false);}),v){let z=S(B(c,k,F,d));for(let G in v){let se=parseFloat(G);z>=se&&!Fe.has(se)&&(Fe.add(se),v[G]?.());}}!$e&&B(c,k,F,d)>0&&($e=true,U?.()),le&&!Z?It():!le&&!I&&(Z=false);}let Be=Me(X??window,[e],Ot,pn,()=>{let i=m.join();l.forEach(Ge),Pt(),_e=true,m.join()!==i&&je();}),dt=D>0;function je(){Be.hold(pe||dt);}let Dt;return dt&&(Dt=setTimeout(()=>{dt=false,je();},D)),je(),ft({destroy(){clearTimeout(Ve),clearTimeout(Dt),Be.off(),xt();},replay(){Ht(),Ke=-1,Ze=-1,Re=0,pe=false,xe=0,clearTimeout(Ve),je();},pause(){pe=true,Be.hold(true);},resume(){pe&&(pe=false,_e=true,je());},seek(i){let c=Math.min(1,Math.max(0,i));xe=c,lt=c,Xe=[],pe=true,Be.hold(true),cn(c,y),_e=true;},getProgress(){return xe},refresh:Be.remeasure},()=>({tStart:k,tEnd:F}))}var Kt=new WeakMap,$n=0;function yt(e){return JSON.stringify(e,(t,n)=>{if(typeof n=="function")return "\u0192";if(typeof Element<"u"&&n instanceof Element){let r=Kt.get(n);return r===void 0&&Kt.set(n,r=++$n),`el#${r}`}return n})}function ht(e,t){let n={...e};for(let r of Object.keys(n))typeof n[r]=="function"&&(n[r]=(...o)=>t()[r]?.(...o));return n}function kn(e){return e.startsWith("#")||e.startsWith("rgb")||e.startsWith("hsl")}function Zt(e){let t=[],n=/([\w]+)\(([^)]*)\)/g,r;for(;(r=n.exec(e))!==null;){let o=[],s=[],a=r[2].trim();if(a)for(let u of a.split(/[\s,]+/)){let f=u.match(/^([-+]?[\d.eE]+)(.*)$/);o.push(f?parseFloat(f[1]):0),s.push(f?f[2]:"");}t.push({fn:r[1],nums:o,units:s});}return t}function On(e,t,n){let r=Zt(e),o=Zt(t);return r.length===0||r.length!==o.length?n<1?e:t:r.map((s,a)=>{let u=o[a];return s.fn!==u.fn||s.nums.length!==u.nums.length?n<1?`${s.fn}(${s.nums.map((f,p)=>`${f}${s.units[p]}`).join(", ")})`:`${u.fn}(${u.nums.map((f,p)=>`${f}${u.units[p]}`).join(", ")})`:`${s.fn}(${s.nums.map((f,p)=>`${f+(u.nums[p]-f)*n}${s.units[p]}`).join(", ")})`}).join(" ")}function Jt(e,t,n){if(typeof e=="number"&&typeof t=="number")return String(e+(t-e)*n);let r=String(e),o=String(t);if(kn(r))return nt(r,o,n);if(r.includes("("))return On(r,o,n);let s=r.match(/^([-+]?[\d.]+)(.*)$/),a=o.match(/^([-+]?[\d.]+)(.*)$/);if(s&&a){let u=parseFloat(s[1]),f=parseFloat(a[1]);return `${u+(f-u)*n}${s[2]||a[2]}`}return n<1?r:o}function In(e){return e.replace(/([A-Z])/g,t=>`-${t.toLowerCase()}`)}var Hn=new Set(["opacity","transform","background-color","color","filter","scale","translate","rotate"]),Dn=0,en="--scroll-draw-progress";function Nn(){return typeof CSS<"u"&&typeof CSS.supports=="function"&&CSS.supports("animation-timeline: view()")}var nn={destroy:()=>{},replay:()=>{},pause:()=>{},resume:()=>{},seek:()=>{},getProgress:()=>0};function bt(e,t){return typeof window>"u"?nn:t.respectReducedMotion===false?tn(e,t,false):Ne(t,(n,r)=>tn(e,n,r))}function tn(e,t,n){let{props:r,trigger:o={},easing:s="ease-out",speed:a=1,once:u=false,axis:f="y",scrollContainer:p,native:g=true,velocityScale:x=false,triggerElement:y,onProgress:I,onComplete:j,onEnter:w,onLeave:H,onEnterBack:ue,onLeaveBack:D}=t,M=typeof s=="function"?s:ee[s]??ee["ease-out"],A=ie(o.start||"top bottom"),$=ie(o.end||"bottom top"),v=y??e,C=typeof p=="string"?document.querySelector(p):p??null,N=Object.entries(r).map(([l,m])=>({prop:In(l),from:Array.isArray(m)?m[0]:"",to:Array.isArray(m)?m[1]:m}));function te(){let l=window.getComputedStyle(e);for(let m of N)m.from===""&&(m.from=l.getPropertyValue(m.prop).trim()||"0");}function q(){for(let l of N)e.style.setProperty(l.prop,String(l.to));}let V=new Map;for(let l of [...N.map(m=>m.prop),en])V.set(l,e.style.getPropertyValue(l));function R(){for(let[l,m]of V)m?e.style.setProperty(l,m):e.style.removeProperty(l);}if(n)return q(),j?.(),{...nn,destroy:R,getProgress:()=>1};te();let E=()=>C?f==="x"?C.scrollLeft:C.scrollTop:f==="x"?window.scrollX:window.scrollY,Y=()=>C?f==="x"?C.clientWidth:C.clientHeight:f==="x"?window.innerWidth:window.innerHeight,h=typeof s=="string"?rt(s):null;function P(){if(!g||!Nn()||!h||f!=="y"||C||v!==e||u||a!==1||I||j||w||H||ue||D||x!==false||(o.start||"top bottom").trim()!=="top bottom"||(o.end||"bottom top").trim()!=="bottom top")return false;for(let l of N)if(!Hn.has(l.prop))return false;return true}function Se(){let l=`ssd-a-${++Dn}`,m=N.map(W=>`${W.prop}:${W.from}`).join(";"),K=N.map(W=>`${W.prop}:${W.to}`).join(";"),k=document.createElement("style");k.setAttribute("data-ssd-animate",""),k.textContent=`@keyframes ${l}{from{${m}}to{${K}}}.${l}{animation-name:${l};animation-duration:auto;animation-timing-function:${h};animation-fill-mode:both;animation-timeline:view();animation-range:cover 0% cover 100%;}`,document.head.appendChild(k),e.classList.add(l);let F=()=>{let W=e.getBoundingClientRect();return we({top:W.top,height:W.height},E(),Y(),A,$)};ve(e,{type:"animate",getProgress:()=>Q.getProgress(),getTrigger:F});let Q={refresh(){},destroy(){e.classList.remove(l),k.remove(),e.style.animationPlayState="",R(),Ee(e);},replay(){e.classList.remove(l),e.offsetWidth,e.classList.add(l);},pause(){e.style.animationPlayState="paused";},resume(){e.style.animationPlayState="";},seek(W){let De=Math.min(1,Math.max(0,W));e.classList.remove(l);for(let Z of N)e.style.setProperty(Z.prop,Jt(Z.from,Z.to,De));},getProgress(){let{tStart:W,tEnd:De}=F();return M(B(E(),W,De,a))}};return Q}if(P())return Se();let U=0,_=0,fe=false,Te=-1,ge=0,me=0,b=false,S=NaN,ye=-1,Ie=0,X=v===e?N:[],Le=false;function Ae(){let l=e.style,m=X.map(Q=>l.getPropertyValue(Q.prop)),K=l.transition;X.length&&(l.transition="none"),X.forEach(Q=>l.setProperty(Q.prop,V.get(Q.prop)??""));let k=et(v,C,f);X.forEach((Q,W)=>l.setProperty(Q.prop,m[W])),X.length&&(e.offsetWidth,l.transition=K);let F=we(k,k.scroll,Y(),A,$);Le&&Math.abs(F.tStart-U)<1&&Math.abs(F.tEnd-_)<1||(Le=true,U=F.tStart,_=F.tEnd);}function he(l){e.style.setProperty(en,String(l));for(let m of N)e.style.setProperty(m.prop,Jt(m.from,m.to,l));I?.(l);}function He(l){if(isNaN(S)){S=l;return}S<=0&&l>0&&w?.(),S<1&&l>=1&&H?.(),S>=1&&l<1&&ue?.(),S>0&&l<=0&&D?.(),S=l;}function Ce(){if(fe)return;let l=performance.now(),m=E(),K=a;if(x!==false){let W=l-Ie,De=W>0?Math.abs(m-(ye<0?m:ye))/W:0;K=a*Math.max(.2,1+De*(typeof x=="number"?x:1)*.04);}ye=m,Ie=l;let k=_===U?0:(m-U)/(_-U);He(k);let F=B(m,U,_,K),Q=u?Math.max(Te,M(ge=Math.max(ge,F))):M(F);me=Q,he(Q),Q>=1&&!b?(b=true,j?.()):Q<1&&!u&&(b=false);}let be=Me(C??window,[v],()=>B(E(),U,_,Math.min(a,1)),Ce,Ae);Ae(),_===U&&ae("scrollAnimate: zero-length trigger window, so it never animates. In a sticky stage, set triggerElement.",e),ge=B(E(),U,_,a),me=M(ge),he(me),ve(e,{type:"animate",getProgress:()=>me,getTrigger:()=>({tStart:U,tEnd:_})});function Pe(){fe=true,be.hold(true);}return {destroy(){fe=true,be.off(),R(),Ee(e);},replay(){Te=-1,ge=0,b=false,me=0,fe=false,he(0),be.hold(false);},pause:Pe,resume(){fe&&(fe=false,be.hold(false));},seek(l){let m=Math.min(1,Math.max(0,l));me=m,Te=m,ge=0,Pe(),he(m);},getProgress(){return me},refresh:be.remeasure}}var wt={destroy:()=>{},replay:()=>{},pause:()=>{},resume:()=>{},seek:()=>{},getProgress:()=>0};function vt(e,t){if(typeof window>"u")return wt;let n=typeof e=="string"?document.querySelector(e):e;return n?Ne(t,(r,o)=>Rn(n,r,o)):(ae("scrollCounter: element not found:",e),wt)}function Rn(e,t,n){let{from:r=0,to:o,format:s,easing:a="ease-out",trigger:u={},once:f=true,decimals:p,onComplete:g}=t,x=p!==void 0?h=>h.toFixed(p):s??(h=>String(Math.round(h))),y=typeof a=="function"?a:ee[a]??ee["ease-out"],I=ie(u.start||"top 80%"),j=ie(u.end||"top 20%");if(n)return e.textContent=x(o),g?.(),{...wt,getProgress:()=>1};let w=0,H=0,ue=false,D=-1,M=0,A=0,$=false,v=()=>window.scrollY,C=()=>window.innerHeight;function N(){let h=e.getBoundingClientRect(),P=we({top:h.top,height:h.height},v(),C(),I,j);ue&&Math.abs(P.tStart-w)<1&&Math.abs(P.tEnd-H)<1||(ue=true,w=P.tStart,H=P.tEnd);}let te=e.style.getPropertyValue("--scroll-draw-progress");function q(h){e.textContent=x(r+(o-r)*h),e.style.setProperty("--scroll-draw-progress",String(h));}let V=()=>B(v(),w,H,1);function R(){let h=V(),P=f?Math.max(D,y(M=Math.max(M,h))):y(h);A=P,q(P),P>=1&&!$?($=true,g?.()):P<1&&!f&&($=false);}N();{M=B(v(),w,H,1);let h=y(M);A=h,q(h);}let E=Me(window,[e],V,R,N);ve(e,{type:"counter",getProgress:()=>A,getTrigger:()=>({tStart:w,tEnd:H})});let Y=()=>E.hold(false);return {destroy(){E.off(),e.style.setProperty("--scroll-draw-progress",te),Ee(e);},replay(){D=-1,M=0,$=false,A=0,q(0),Y();},pause:()=>E.hold(true),resume:Y,seek(h){let P=Math.min(1,Math.max(0,h));A=P,D=P,M=0,E.hold(true),q(P);},getProgress(){return A}}}var rn={destroy:()=>{},replay:()=>{},pause:()=>{},resume:()=>{},seek:()=>{},getProgress:()=>0};function Et(e,t={}){if(typeof window>"u")return rn;let n=typeof e=="string"?document.querySelector(e):e;if(!n||n.tagName.toLowerCase()!=="video")return ae("scrollVideo: <video> element not found:",e),rn;let r=n,{trigger:o={},easing:s="linear",once:a=false,axis:u="y",preload:f="auto",triggerElement:p,onReady:g,onComplete:x,onProgress:y}=t,I=p??r,j=window.matchMedia("(prefers-reduced-motion: reduce)").matches,w=typeof s=="function"?s:ee[s]??ee.linear,H=ie(o.start||"top top"),ue=ie(o.end||"bottom top");r.pause(),r.hasAttribute("preload")||(r.preload=f);let D=t.from??0,M=t.to,A=0,$=0,v=false,C=-1,N=0,te=0,q=false,V=false,R=()=>u==="x"?window.scrollX:window.scrollY,E=()=>u==="x"?window.innerWidth:window.innerHeight;function Y(){let b=I.getBoundingClientRect(),S=u==="x"?b.left:b.top,ye=u==="x"?b.width:b.height,Ie=we({top:S,height:ye},R(),E(),H,ue);A=Ie.tStart,$=Ie.tEnd,V&&$===A&&ae("scrollVideo: zero-length trigger window, so it never scrubs. In a sticky stage, set triggerElement.",r);}let h=NaN;function P(b){if(!V)return;let S=M??r.duration??0,ye=D+(S-D)*b;ye!==h&&(h=ye,r.currentTime=ye),r.style.setProperty("--scroll-draw-progress",String(b)),y?.(b);}let Se=()=>B(R(),A,$,1);function U(){if(!V||j)return;let b=Se(),S=a?Math.max(C,w(N=Math.max(N,b))):w(b);te=S,P(S),S>=1&&!q?(q=true,x?.()):S<1&&!a&&(q=false);}let _=Me(window,[I],Se,U,Y),fe=()=>_.hold(v||!V||j);fe();function Te(){if(V=true,M===void 0&&(M=r.duration),j){P(1),g?.();return}Y(),g?.(),v?P(te):fe();}r.readyState>=1?Te():r.addEventListener("loadedmetadata",Te,{once:true}),V||Y();let ge=j?()=>{}:ot(b=>{b&&(ge(),j=true,_.hold(true),P(1));});ve(r,{type:"video",getProgress:()=>te,getTrigger:()=>({tStart:A,tEnd:$})});function me(){v&&(v=false,fe());}return {destroy(){_.off(),r.removeEventListener("loadedmetadata",Te),ge(),Ee(r);},replay(){C=-1,N=0,q=false,te=0,h=NaN,P(0),me();},pause(){v=true,_.hold(true);},resume:me,seek(b){let S=Math.min(1,Math.max(0,b));te=S,C=S,N=0,v=true,_.hold(true),h=NaN,P(S);},getProgress(){return te}}}function on(e,t){let n=document.createElement("span");n.textContent=t,n.style.cssText="position:absolute;width:1px;height:1px;overflow:hidden;clip-path:inset(50%);white-space:nowrap;user-select:none",e.appendChild(n);}function at(e=""){let t=document.createElement("span");return t.setAttribute("aria-hidden","true"),t.textContent=e,t}function an(e){let t=e.textContent??"";return e.textContent="",t.split(/(\s+)/).filter(Boolean).map(n=>{let r=e.appendChild(at(n)),o=/^\s+$/.test(n);return o?r.style.whiteSpace="pre":r.style.display="inline-block",o?null:r}).filter(n=>n!==null)}function Vn(e){let t=e.textContent??"";e.textContent="";let n=[],r=null;for(let o of t){let s=at(o),a=o===" ";a?s.style.whiteSpace="pre":(s.style.display="inline-block",n.push(s)),a||o>"\u0DFF"?r=null:r||(r=e.appendChild(at()),r.style.cssText="display:inline-block;white-space:nowrap"),(r??e).appendChild(s);}return n}function sn(e){let t=an(e),n=new Map;for(let s of t){let a=s.offsetTop;n.has(a)||n.set(a,[]),n.get(a).push(s);}let r=[],o=Array.from(n.keys()).sort((s,a)=>s-a);for(let s of o){let a=n.get(s),u=at();u.style.display="inline-block",a.forEach((f,p)=>{let g=f.nextElementSibling;u.appendChild(f),p<a.length-1&&g&&g.style.whiteSpace==="pre"&&u.appendChild(g);}),r.push(u);}return e.textContent="",r.forEach((s,a)=>{e.appendChild(s),a<r.length-1&&e.appendChild(document.createTextNode(" "));}),r}function Fn(e,t,n,r){if(n<=1||r===0)return e;r=Math.min(r,1/n);let o=(n-1)*r,s=t*r,a=s+(1-o);return a<=s?e>=s?1:0:qe((e-s)/(a-s),0,1)}function _n(e,t){let n=[];if(t?.y!==void 0&&n.push(`translateY(${t.y*(1-e)}px)`),t?.x!==void 0&&n.push(`translateX(${t.x*(1-e)}px)`),t?.rotate!==void 0&&n.push(`rotate(${t.rotate*(1-e)}deg)`),t?.scale!==void 0){let r=t.scale+(1-t.scale)*e;n.push(`scale(${r})`);}return n.join(" ")}var St={destroy:()=>{},replay:()=>{},pause:()=>{},resume:()=>{},seek:()=>{},getProgress:()=>0};function Tt(e,t={}){if(typeof window>"u")return St;let n=typeof e=="string"?document.querySelector(e):e;if(!n)return ae("scrollText: element not found:",e),St;let r=n;return Ne(t,(o,s)=>Wn(r,o,s))}function Wn(e,t,n){let{split:r="words",stagger:o=.04,easing:s="ease-out",from:a={opacity:0,y:24},trigger:u={},once:f=true,onComplete:p}=t,g=typeof s=="function"?s:ee[s]??ee["ease-out"],x=ie(u.start||"top 85%"),y=ie(u.end||"top 40%"),I=e.innerHTML,j=e.textContent??"",w;r==="chars"?w=Vn(e):r==="lines"?w=sn(e):w=an(e),on(e,j);let H=w.length;function ue(E,Y){a?.opacity!==void 0&&(E.style.opacity=String(a.opacity+(1-a.opacity)*Y));let h=_n(Y,a);h&&(E.style.transform=h);}function D(E){e.style.setProperty("--scroll-draw-progress",String(E)),w.forEach((Y,h)=>{let P=g(Fn(E,h,H,o));ue(Y,P);});}if(n)return D(1),p?.(),{...St,destroy:()=>{e.innerHTML=I;},getProgress:()=>1};D(0);let M=0,A=0,$=-1,v=0,C=false;function N(){({tStart:M,tEnd:A}=we(e.getBoundingClientRect(),window.scrollY,window.innerHeight,x,y));}let te=()=>B(window.scrollY,M,A,1);function q(){let E=f?$=Math.max($,te()):te();v=E,D(E),E>=1&&!C?(C=true,p?.()):E<1&&!f&&(C=false);}N();let V=Me(window,[e],te,q,()=>{r==="lines"&&(e.innerHTML=I,w=sn(e),on(e,j),D(v)),N();});ve(e,{type:"text",getProgress:()=>v,getTrigger:()=>({tStart:M,tEnd:A})});let R=()=>V.hold(false);return {destroy(){V.off(),e.innerHTML=I,Ee(e);},replay(){$=-1,C=false,v=0,D(0),R();},pause:()=>V.hold(true),resume:R,seek(E){V.hold(true),D(v=$=qe(E,0,1));},getProgress(){return v}}}function Ue(e,t,n){let r=t,o=yt(t),s=n(e,ht(t,()=>r));return {update(a){r=a;let u=yt(a);u!==o&&(o=u,s.destroy(),s=n(e,ht(a,()=>r)));},destroy(){s.destroy();}}}function ro(e,t={}){return Ue(e,t,gt)}function oo(e={}){let t=null;function n(r){return t=gt(r,e),{destroy(){t?.destroy(),t=null;}}}return {action:n,getInstance:()=>t}}function so(e,t){return Ue(e,t,bt)}function io(e){let t=null;function n(r){return t=bt(r,e),{destroy(){t?.destroy(),t=null;}}}return {action:n,getInstance:()=>t}}function ao(e,t){return Ue(e,t,vt)}function lo(e){let t=null;function n(r){return t=vt(r,e),{destroy(){t?.destroy(),t=null;}}}return {action:n,getInstance:()=>t}}function co(e,t={}){return Ue(e,t,Et)}function uo(e={}){let t=null;function n(r){return t=Et(r,e),{destroy(){t?.destroy(),t=null;}}}return {action:n,getInstance:()=>t}}function fo(e,t={}){return Ue(e,t,Tt)}function mo(e={}){let t=null;function n(r){return t=Tt(r,e),{destroy(){t?.destroy(),t=null;}}}return {action:n,getInstance:()=>t}}exports.createScrollAnimate=io;exports.createScrollCounter=lo;exports.createScrollDraw=oo;exports.createScrollText=mo;exports.createScrollVideo=uo;exports.scrollAnimate=so;exports.scrollCounterAction=ao;exports.scrollDraw=ro;exports.scrollTextAction=fo;exports.scrollVideoAction=co;
|
|
1
|
+
'use strict';var Qe=typeof __SVG_SCROLL_DRAW_DEV__<"u"?__SVG_SCROLL_DRAW_DEV__:typeof process<"u"&&typeof process.env<"u"&&process.env.NODE_ENV!=="production";function k(e,...t){Qe&&console.warn(`[svg-scroll-draw] ${e}`,...t);}function Tr({tension:e=2.5,friction:t=2.2}={}){return r=>1-Math.cos(r*Math.PI*e)*Math.pow(1-r,t)}function Mr({bounces:e=3,decay:t=.5}={}){let r=Math.max(1,Math.round(e)),n=Math.max(.01,Math.min(.99,t)),o=Math.sqrt(n),s=0,i=[];for(let g=0;g<r;g++){let w=Math.pow(o,g);i.push(w),s+=w;}let l=[0],m=0;for(let g=0;g<r;g++)m+=i[g]/s,l.push(m);return g=>{if(g<=0)return 0;if(g>=1)return 1;for(let w=0;w<r;w++)if(g<=l[w+1]){let P=(g-l[w])/(l[w+1]-l[w]);if(w===0)return P*(2-P);let S=1-Math.pow(n,w);return S+(1-S)*(2*P-1)*(2*P-1)}return 1}}function xr({amplitude:e=1,period:t=.4}={}){let r=Math.max(1,e),n=Math.max(.1,t),o=r<=1?n/4:n/(2*Math.PI)*Math.asin(1/r);return s=>s<=0?0:s>=1?1:r*Math.pow(2,-10*s)*Math.sin((s-o)*(2*Math.PI)/n)+1}var Ke={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:Tr(),bounce:Mr(),elastic:xr()};function Lr(e,t,r,n){let o=(s,i,l)=>((1+3*s-3*i)*l+3*i-6*s)*l*l+3*s*l;return s=>{if(s<=0||s>=1)return +(s>0);let i=s;for(let l=0;l<8;l++)i-=(o(e,r,i)-s)/((3*(1+3*e-3*r)*i+6*r-12*e)*i+3*e);if(!(i>=0&&i<=1&&Math.abs(o(e,r,i)-s)<1e-9))for(let l=0,m=0,g=1;l<30;l++)i=(m+g)/2,o(e,r,i)<s?m=i:g=i;return o(t,n,i)}}function Et(e){let t=/^cubic-bezier\((.*)\)$/.exec(e==="ease"?"cubic-bezier(.25,.1,.25,1)":e.trim()),r=t?t[1].split(",").map(parseFloat):[];if(r.length===4&&r.every(Number.isFinite)&&r[0]*(1-r[0])>=0&&r[2]*(1-r[2])>=0)return [Lr(r[0],r[1],r[2],r[3]),`cubic-bezier(${r})`]}var Gt=new Set;function Re(e,t="linear"){if(typeof e=="function")return e;if(e==null)return Ke[t];if({}.hasOwnProperty.call(Ke,e))return Ke[e];let r=Et(String(e));return r?r[0]:(!Gt.has(e)&&Gt.add(e)&&k(`Unknown easing ${JSON.stringify(e)}: use a name, cubic-bezier() or a function.`),Ke[t])}function rt(e,t,r){return Math.min(r,Math.max(t,e))}function ae(e="top bottom"){let t=e.trim();if(/^\d+(\.\d+)?%$/.test(t))return {element:"top",viewport:t};let[r="top",n="bottom"]=t.split(/\s+/).filter(Boolean);return {element:r,viewport:n}}var jt=(e,t)=>e==="top"?0:e==="center"?.5:e==="bottom"?1:t;function Bt(e,t,r,n){return e+r+t*jt(n,0)}function qt(e,t){return t*(/^\d+(\.\d+)?%$/.test(e)?parseFloat(e)/100:jt(e,1))}function Y(e,t,r,n){return r===t?0:rt((e-t)/(r-t)*n,0,1)}function Le(e,t,r,n,o){let s=Bt(e.top,e.height,t,n.element)-qt(n.viewport,r),i=Bt(e.top,e.height,t,o.element)-qt(o.viewport,r);return {tStart:s,tEnd:i}}function lt(e,t,r){let n=e.getBoundingClientRect(),o=r==="x"?n.width:n.height;return t?{top:r==="x"?n.left-t.getBoundingClientRect().left-t.clientLeft+t.scrollLeft:n.top-t.getBoundingClientRect().top-t.clientTop+t.scrollTop,height:o,scroll:0}:{top:r==="x"?n.left:n.top,height:o,scroll:r==="x"?window.scrollX:window.scrollY}}function ct(e){let t=parseFloat(e.getAttribute("pathLength")??"");if(t>0)return t;let r=e.tagName.toLowerCase();if(r==="rect"){let n=parseFloat(e.getAttribute("width")??"0"),o=parseFloat(e.getAttribute("height")??"0");return 2*(n+o)}if(r==="circle"){let n=parseFloat(e.getAttribute("r")??"0");return 2*Math.PI*n}return e.getTotalLength()}function ut(e){return `${e} ${e*2}`}function Ut(e){let t=/^#([a-f\d])([a-f\d])([a-f\d])$/i.exec(e);if(t)return [parseInt(t[1]+t[1],16),parseInt(t[2]+t[2],16),parseInt(t[3]+t[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 n=/^rgb\(\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*\)$/i.exec(e);return n?[parseInt(n[1]),parseInt(n[2]),parseInt(n[3])]:null}function ft(e,t,r){let n=Ut(e),o=Ut(t);return !n||!o?e:`rgb(${Math.round(n[0]+(o[0]-n[0])*r)},${Math.round(n[1]+(o[1]-n[1])*r)},${Math.round(n[2]+(o[2]-n[2])*r)})`}var Yt={sketch:{easing:"ease-in",stagger:.1,speed:.9,fade:false},reveal:{easing:"ease-out",fade:true,speed:1.2,once:true},typewriter:{easing:"linear",stagger:.05,speed:1.5},cinematic:{easing:"ease-in-out",fade:true,speed:.75},spring:{easing:"spring",speed:1.1}};var Ar="cubic-bezier(0.333333, 0, 0.666667, 0.333333)",Cr="cubic-bezier(0.333333, 0.666667, 0.666667, 1)",Qt=33;function Pr(){return typeof CSS<"u"&&typeof CSS.supports=="function"&&CSS.supports("animation-timing-function: linear(0, 1)")}function $r(e){let t=[];for(let r=0;r<Qt;r++){let n=r/(Qt-1);t.push(String(Math.round(e(n)*1e5)/1e5));}return `linear(${t.join(",")})`}function mt(e){switch(e){case "linear":return "linear";case "ease-in":return Ar;case "ease-out":return Cr;case "ease-in-out":return Pr()?$r(Ke["ease-in-out"]):null;default:return Et(e)?.[1]??null}}var Kt=Symbol.for("svg-scroll-draw.registry");function Xt(){let e=globalThis;return e[Kt]||(e[Kt]=new Map)}function $e(e,t){Xt().set(e,t);}function ke(e){Xt().delete(e);}function Xe(e){if(typeof window>"u"||typeof window.matchMedia!="function")return ()=>{};let t=window.matchMedia("(prefers-reduced-motion: reduce)"),r=o=>e(!!o.matches);if(typeof t.addEventListener=="function")return t.addEventListener("change",r),()=>t.removeEventListener("change",r);let n=t;return n.addListener?.(r),()=>n.removeListener?.(r)}function Be(e,t){if(window.matchMedia("(prefers-reduced-motion: reduce)").matches)return t(e,true);let r=t(e,false),n=Xe(s=>{if(!s)return;n();let i=(r.getProgress?.()??0)>=1;r.destroy(),r=t(i?{...e,onComplete:void 0}:e,true);}),o={};for(let s of Object.keys(r))o[s]=(...i)=>r[s]?.(...i);return o.destroy=()=>{n(),r.destroy();},o}var nt,pt=new Set,dt=new WeakMap,ot=new Map,Jt=e=>{let t=e.getBoundingClientRect();return t.width+" "+t.height};function kr(e){let t=new Set;for(let r of e)for(;r&&r!==document.body;r=r.parentElement)for(let n=r;n;n=n.previousElementSibling)t.add(n);return t}function Zt(e,t){if(typeof ResizeObserver>"u"||typeof document>"u")return ()=>{};let r=()=>t();nt??(nt=new ResizeObserver(o=>{let s=false;for(let{target:i}of o)dt.get(i)!==Jt(i)&&(s=true),dt.set(i,"");s&&pt.forEach(i=>i());})),pt.add(r);let n=kr(e);return [document.body,document.documentElement].forEach(o=>o&&n.add(o)),n.forEach(o=>{dt.has(o)||dt.set(o,Jt(o)),ot.set(o,(ot.get(o)??0)+1),nt.observe(o);}),()=>{pt.delete(r)&&(n.forEach(o=>{let s=(ot.get(o)??1)-1;if(s)return void ot.set(o,s);ot.delete(o),nt?.unobserve(o);}),pt.size||(nt?.disconnect(),nt=void 0));}}function De(e,t,r,n,o){let s,i=NaN,l,m,g=()=>{s=0,n(),!l&&!s&&(i=r())>0&&i<1&&(s=requestAnimationFrame(g));},w=()=>{!s&&!l&&r()!==i&&(s=requestAnimationFrame(g));},P=z=>{l=z,cancelAnimationFrame(s),s=i=NaN,w();},S=()=>{clearTimeout(m),o(),w();},G=()=>{clearTimeout(m),m=setTimeout(S,150);},Q=Zt(t,G),v=z=>{e[z]("scroll",w,{passive:true}),window[z]("resize",G),window[z]("orientationchange",G);};return v("addEventListener"),w(),{hold:P,remeasure:S,off(){P(true),v("removeEventListener"),Q(),clearTimeout(m);}}}var Or=0;function Fr(){return typeof CSS<"u"&&typeof CSS.supports=="function"&&CSS.supports("animation-timeline: view()")&&CSS.supports("view-timeline-name: --x")}function er(e,t){let r="";try{r=getComputedStyle(e).getPropertyValue(t).trim();}catch{}return r||(e.getAttribute(t)??"").trim()}var tr=new Set(["","none","transparent","rgba(0, 0, 0, 0)"]);function Ir(e){if(!Qe)return;let t=er(e,"stroke");if(!t||t==="none"){k("Element has no stroke \u2014 path will not be visible.",e);return}let r=(e.getAttribute("fill")??"").trim();r&&!tr.has(r)&&!tr.has(er(e,"fill"))&&k("Element has a fill \u2014 it may obscure the stroke animation.",e);}function Hr(e,t,r){let n=document.createElement("div");n.setAttribute("data-svg-scroll-draw-debug",""),n.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 o(){let s=r==="x"?window.scrollX:window.scrollY,i=e-s,l=t-s,m=r==="x";n.innerHTML=`
|
|
2
|
+
<div style="position:absolute;${m?`left:${i}px;top:0;bottom:0;border-left:2px dashed #22c55e;`:`top:${i}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:${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(n),window.addEventListener("scroll",o,{passive:true}),o(),{el:n,destroy(){window.removeEventListener("scroll",o),n.remove();}}}var rr=/[-+]?(?:\d*\.)?\d+(?:[eE][-+]?\d+)?/g,nr=/[MmLlHhVvCcSsQqTtAaZz]/g;function Rr(e,t,r){if(!Qe)return;let n=(e.match(nr)??[]).join("").toUpperCase(),o=(t.match(nr)??[]).join("").toUpperCase(),s=(e.match(rr)??[]).length,i=(t.match(rr)??[]).length;if(n!==o){k(`morphTo: command sequence differs (${n||"\u2205"} \u2192 ${o||"\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!==i&&k(`morphTo: coordinate count differs (${s} \u2192 ${i}). Extra coordinates are ignored and missing ones hold their start value, so the result will not reach the target shape.`,r);}function Dr(e,t,r){let n=(t.match(/[-+]?(?:\d*\.)?\d+(?:[eE][-+]?\d+)?/g)??[]).map(Number),o=0;return e.replace(/[-+]?(?:\d*\.)?\d+(?:[eE][-+]?\d+)?/g,s=>{let i=parseFloat(s),l=n[o++]??i;return String(+(i+(l-i)*r).toFixed(4))})}function St(e,t={}){return typeof window>"u"?{destroy:()=>{},replay:()=>{},pause:()=>{},resume:()=>{},seek:()=>{},getProgress:()=>0}:Be(t,(r,n)=>Nr(e,r,n))}function Nr(e,t,r){let{preset:n,...o}=t,s=n?{...Yt[n],...o}:o,{selector:i="path, polyline, line, polygon, rect, circle",speed:l=1,fade:m=false,easing:g="linear",trigger:w={},stagger:P=0,direction:S="forward",once:G=false,debug:Q=false,axis:v="y",scrollContainer:z,autoReverse:Z=false,delay:$=0,strokeColor:C,strokeWidth:L,fillOpacity:O,waypoints:h,velocityScale:F=false,threshold:W=0,rootMargin:se="0px",repeat:K=0,repeatDelay:V=0,morphTo:R,clip:T,autoplay:X=false,duration:E=1e3,native:A=true,onProgress:he,onStart:D,onComplete:q,onEnter:ue,onLeave:Ee,onEnterBack:fe,onLeaveBack:ie}=s,M=T===true?"left":typeof T=="string"?T:false,x=Re(g),re=ae(w.start||"top bottom"),Oe=ae(w.end||"bottom top"),J=typeof z=="string"?document.querySelector(z):z??null,Fe=Array.isArray(C)?C[0]:null,Se=Array.isArray(C)?C[1]:typeof C=="string"?C:null,ye=Array.isArray(L)?L[0]:null,Ve=Array.isArray(L)?L[1]:typeof L=="number"?L:null,Ie=Array.isArray(O)?O[0]:null,Te=Array.isArray(O)?O[1]:typeof O=="number"?O:null;function Ae(a){let f=a*100;switch(M){case "right":return `inset(0 0 0 ${100-f}%)`;case "top":return `inset(0 0 ${100-f}% 0)`;case "bottom":return `inset(${100-f}% 0 0 0)`;case "center":return `circle(${a*150}% at 50% 50%)`;default:return `inset(0 ${100-f}% 0 0)`}}let c=M?[]:Array.from(e.querySelectorAll(i)),d=[],ne=[],I=0,_=0,B=P,j=0,Ne=0,oe=false,He=false,be=0,Ue=-1,qe=[],je=-1,me=false,u=0,p=0,b,le=false,we=null;function _e(){we?.destroy(),we=null;}let Ce=new Set,ze=NaN,We=true,it=-1,Ot=performance.now(),Ye=NaN;function at(){return J?v==="x"?J.scrollLeft:J.scrollTop:v==="x"?window.scrollX:window.scrollY}function Ft(){return J?v==="x"?J.clientWidth:J.clientHeight:v==="x"?window.innerWidth:window.innerHeight}function It(){let a=lt(e,J,v);return Le(a,a.scroll,Ft(),re,Oe)}function hr(){let a=_-I,f=c.length-1,y=J??document.documentElement,N=v==="x"?"Width":"Height";if(B=P,P>0&&f>0&&a>0){let pe=y[`scroll${N}`]-y[`client${N}`]-1-I-a/l;pe>=0&&(B=Math.min(P,pe/(f*a)));}let ce=Math.max(0,f)*B*a,Me=a/Math.min(l,1);j=I+Math.min(0,ce,Me,ce+Me),Ne=I+Math.max(0,ce,Me,ce+Me);}function Ht(){(({tStart:I,tEnd:_}=It())),hr(),Q&&Qe&&(_e(),we=Hr(I,_,v));}function yt(a,f=It){$e(e,{type:"draw",getProgress:()=>a.getProgress(),getTrigger:f});let y=a.destroy;return a.destroy=()=>{y.call(a),ke(e);},a}function Rt(a,f){return G&&!Z?Math.max(Ue,x(qe[a]=Math.max(qe[a]??0,f))):x(f)}function yr(a,f){if(e.style.setProperty("--scroll-draw-progress",String(a)),M){let y=f==="reverse"?1-a:a;e.style.clipPath=Ae(y);return}c.forEach((y,N)=>bt(y,N,a,f));}function bt(a,f,y,N){a.style.strokeDashoffset=N==="reverse"?`${d[f]*y}`:`${d[f]*(1-y)}`,m&&(a.style.opacity=N==="reverse"?`${1-y}`:`${y}`),Fe&&Se?a.style.stroke=ft(Fe,Se,y):Se&&(a.style.stroke=Se),ye!==null&&Ve!==null?a.style.strokeWidth=`${ye+(Ve-ye)*y}`:Ve!==null&&(a.style.strokeWidth=`${Ve}`),Ie!==null&&Te!==null?a.style.fillOpacity=`${Ie+(Te-Ie)*y}`:Te!==null&&(a.style.fillOpacity=`${Te}`),R&&a.tagName.toLowerCase()==="path"&&ne[f]&&a.setAttribute("d",Dr(ne[f],R,y));}function wt(){if(e.style.setProperty("--scroll-draw-progress","0"),M){e.style.clipPath=Ae(S==="reverse"?1:0);return}c.forEach((a,f)=>{a.style.strokeDasharray=ut(d[f]),a.style.strokeDashoffset=S==="reverse"?"0":`${d[f]}`,m?a.style.opacity=S==="reverse"?"1":"0":a.style.opacity="",Fe&&(a.style.stroke=Fe),ye!==null&&(a.style.strokeWidth=`${ye}`),Ie!==null&&(a.style.fillOpacity=`${Ie}`),R&&a.tagName.toLowerCase()==="path"&&ne[f]&&a.setAttribute("d",ne[f]);});}function Ze(a,f){let y=a.getAttribute("d"),N=ct(a);if(R&&ne[f]){a.setAttribute("d",R);let ce=ct(a);a.setAttribute("d",ne[f]),N=Math.max(ct(a),ce),a.setAttribute("d",y);}d[f]=N,a.style.strokeDasharray=ut(N);}if(c.forEach((a,f)=>{Ir(a);let y=a.tagName.toLowerCase()==="path";y?ne.push(a.getAttribute("d")??""):ne.push(""),Ze(a,f);let N=d[f];R&&(y?Rr(ne[ne.length-1],R,a):k(`morphTo only applies to <path> elements \u2014 ignored on <${a.tagName}>.`,a)),r?(a.style.strokeDashoffset=S==="reverse"?`${N}`:"0",m&&(a.style.opacity="1"),Se&&(a.style.stroke=Se),Ve!==null&&(a.style.strokeWidth=`${Ve}`),Te!==null&&(a.style.fillOpacity=`${Te}`),R&&a.tagName.toLowerCase()==="path"&&a.setAttribute("d",R)):(a.style.strokeDashoffset=S==="reverse"?"0":`${N}`,m?a.style.opacity=S==="reverse"?"1":"0":a.style.opacity="",Fe&&(a.style.stroke=Fe),ye!==null&&(a.style.strokeWidth=`${ye}`),Ie!==null&&(a.style.fillOpacity=`${Ie}`));}),r)return M&&(e.style.clipPath=Ae(1)),q?.(),{destroy:()=>{},replay:()=>{},pause:()=>{},resume:()=>{},seek:()=>{},getProgress:()=>1};M&&(e.style.clipPath=Ae(S==="reverse"?1:0));let Dt=typeof g=="string"?mt(g):null;function br(){return !(A===false||X||Q&&Qe||!Fr()||!c.length||!Dt||M||v!=="y"||J||l!==1||P!==0||G||Z||F!==false||R||h||K||$>0||he||D||q||ue||Ee||fe||ie||C!=null||L!=null||O!=null||(w.start||"top bottom").trim()!=="top bottom"||(w.end||"bottom top").trim()!=="bottom top")}function wr(){let a=++Or,f=`svg-scroll-draw-${a}`,y=`svg-scroll-draw-host-${a}`,N=`--svg-scroll-draw-${a}`,ce=S==="reverse"?"0":"var(--ssd-len)",Me=S==="reverse"?"var(--ssd-len)":"0",pe=`stroke-dashoffset:${ce};`,ee=`stroke-dashoffset:${Me};`;m&&(pe+=`opacity:${S==="reverse"?1:0};`,ee+=`opacity:${S==="reverse"?0:1};`);let te=document.createElement("style");te.setAttribute("data-svg-scroll-draw",""),te.textContent=`@keyframes ${f}{from{${pe}}to{${ee}}}.${y}{view-timeline-name:${N};view-timeline-axis:block;}.${f}{animation-name:${f};animation-duration:auto;animation-timing-function:${Dt};animation-fill-mode:both;animation-timeline:${N};animation-range:cover 0% cover 100%;}`,document.head.appendChild(te),e.classList.add(y);function ve(H,U){H.style.setProperty("--ssd-len",String(d[U])),H.style.strokeDasharray=ut(d[U]),H.style.strokeDashoffset="",H.style.opacity="",H.style.animationPlayState="",H.classList.add(f);}c.forEach(ve);let de=false,xe=-1;function Pe(){if(xe>=0)return xe;let H=e.getBoundingClientRect(),{tStart:U,tEnd:ge}=Le({top:H.top,height:H.height},at(),Ft(),re,Oe);return x(Y(at(),U,ge,l))}return {destroy(){e.classList.remove(y),c.forEach(H=>{H.classList.remove(f),H.style.removeProperty("--ssd-len"),H.style.animationPlayState="";}),te.remove();},replay(){de=false,xe=-1,c.forEach(ve);},pause(){de=true,c.forEach(H=>{H.style.animationPlayState="paused";});},resume(){de&&(de=false,c.forEach(H=>{H.style.animationPlayState="running";}));},seek(H){let U=Math.min(1,Math.max(0,H));xe=U,de=true,c.forEach((ge,Ge)=>{ge.classList.remove(f),ge.style.strokeDashoffset=S==="reverse"?`${d[Ge]*U}`:`${d[Ge]*(1-U)}`,m&&(ge.style.opacity=S==="reverse"?`${1-U}`:`${U}`);});},getProgress(){return Pe()},refresh(){c.forEach((H,U)=>{Ze(H,U),H.style.setProperty("--ssd-len",String(d[U]));});}}}if(br())return yt(wr());function vr(){let a=Math.max(1,E),f=M?a:a*(1+Math.max(0,c.length-1)*P),y=0,N=0,ce=false;function Me(xe){let Pe=true,H=Math.min(1,Math.max(0,xe/f));if(M){let U=Math.min(1,Math.max(0,xe/a)),ge=x(U);u=ge,e.style.setProperty("--scroll-draw-progress",String(ge)),e.style.clipPath=Ae(S==="reverse"?1-ge:ge),he?.(ge),U<1&&(Pe=false);}else {c.forEach((ge,Ge)=>{let Sr=Ge*P*a,Wt=Math.min(1,Math.max(0,(xe-Sr)/a));bt(ge,Ge,x(Wt),S),Wt<1&&(Pe=false);});let U=x(H);u=U,he?.(U),e.style.setProperty("--scroll-draw-progress",String(U));}if(h){let U=x(H);for(let ge in h){let Ge=parseFloat(ge);U>=Ge&&!Ce.has(Ge)&&(Ce.add(Ge),h[ge]?.());}}return Pe}function pe(xe){if(me)return;let Pe=xe-y;He||(He=true,D?.());let H=Me(Pe);if(H&&!oe){oe=true,Me(f),q?.(),p<(K==="infinite"?1/0:K??0)&&(p++,b=setTimeout(()=>{y=performance.now(),He=false,oe=false,Ce.clear(),wt(),be=requestAnimationFrame(pe);},V));return}H||(be=requestAnimationFrame(pe));}function ee(){cancelAnimationFrame(be),clearTimeout(b),y=performance.now(),N=0,me=false,He=false,oe=false,p=0,ce=true,u=0,Ce.clear(),wt(),be=requestAnimationFrame(pe);}let te=new IntersectionObserver(xe=>{xe.forEach(Pe=>{Pe.isIntersecting&&!(G&&oe)?ee():!Pe.isIntersecting&&!G&&!oe&&(cancelAnimationFrame(be),clearTimeout(b),ce=false);});},{root:J??null,threshold:W,rootMargin:se}),ve;function de(){clearTimeout(ve),ve=setTimeout(()=>c.forEach(Ze),150);}return window.addEventListener("resize",de),window.addEventListener("orientationchange",de),$>0?setTimeout(()=>te.observe(e),$):te.observe(e),{destroy(){cancelAnimationFrame(be),clearTimeout(b),te.disconnect(),window.removeEventListener("resize",de),window.removeEventListener("orientationchange",de),clearTimeout(ve);},replay(){p=0,ee();},pause(){me||!ce||(me=true,N=performance.now()-y,cancelAnimationFrame(be));},resume(){me&&(me=false,ce=true,y=performance.now()-N,be=requestAnimationFrame(pe));},seek(xe){let Pe=Math.min(1,Math.max(0,xe));u=Pe,me=true,N=Pe*f,y=performance.now()-N,cancelAnimationFrame(be),Me(N);},getProgress(){return u},refresh(){clearTimeout(ve),c.forEach(Ze);}}}if(X)return yt(vr());Ht();let Nt=()=>Y(at(),j,Ne,1);function Vt(){oe=true,q?.(),p<(K==="infinite"?1/0:K)&&(p++,b=setTimeout(()=>{le=true;},V));}function _t(){Ue=-1,qe=[],He=false,oe=false,le=false,Ce.clear(),wt(),We=true;}function Er(){let a=performance.now(),f=at();if(le&&Nt()%1&&_t(),!We&&F===false&&f===ze)return;We=false,ze=f;let y=l;if(F!==false){let ee=a-Ot,te=ee>0?Math.abs(f-(it<0?f:it))/ee:0;y=l*Math.max(.2,1+te*(typeof F=="number"?F:1)*.04);}it=f,Ot=a;let N=Z?je===-1||f>=je?"forward":"reverse":S;je=f;let ce=_-I,Me=true,pe=ce===0?0:(f-I)/ce;if(isNaN(Ye)||(Ye<=0&&pe>0&&ue?.(),Ye<1&&pe>=1&&Ee?.(),Ye>=1&&pe<1&&fe?.(),Ye>0&&pe<=0&&ie?.()),Ye=pe,M){let ee=Rt(0,Y(f,I,_,y));u=ee,e.style.setProperty("--scroll-draw-progress",String(ee));let te=N==="reverse"?1-ee:ee;e.style.clipPath=Ae(te),he?.(ee),!He&&Y(f,I,_,y)>0&&(He=true,D?.()),ee>=1&&!oe?Vt():ee<1&&!G&&(oe=false);return}if(c.forEach((ee,te)=>{let ve=te*B*ce,de=Rt(te,Y(f,I+ve,_+ve,y));bt(ee,te,de,N),te===0&&(u=de,he?.(de),e.style.setProperty("--scroll-draw-progress",String(de))),de<1&&(Me=false);}),h){let ee=x(Y(f,I,_,y));for(let te in h){let ve=parseFloat(te);ee>=ve&&!Ce.has(ve)&&(Ce.add(ve),h[te]?.());}}!He&&Y(f,I,_,y)>0&&(He=true,D?.()),Me&&!oe?Vt():!Me&&!G&&(oe=false);}let et=De(J??window,[e],Nt,Er,()=>{let a=d.join();c.forEach(Ze),Ht(),We=true,d.join()!==a&&tt();}),vt=$>0;function tt(){et.hold(me||vt);}let zt;return vt&&(zt=setTimeout(()=>{vt=false,tt();},$)),tt(),yt({destroy(){clearTimeout(b),clearTimeout(zt),et.off(),_e();},replay(){_t(),je=-1,it=-1,p=0,me=false,u=0,clearTimeout(b),tt();},pause(){me=true,et.hold(true);},resume(){me&&(me=false,We=true,tt());},seek(a){let f=Math.min(1,Math.max(0,a));u=f,Ue=f,qe=[],me=true,et.hold(true),yr(f,S),We=true;},getProgress(){return u},refresh:et.remeasure},()=>({tStart:I,tEnd:_}))}var or=new WeakMap,Vr=0;function st(e){return JSON.stringify(e,(t,r)=>{if(typeof r=="function")return "\u0192";if(typeof Element<"u"&&r instanceof Element){let n=or.get(r);return n===void 0&&or.set(r,n=++Vr),`el#${n}`}return r})}function Tt(e,t){let r={...e};for(let n of Object.keys(r))typeof r[n]=="function"&&(r[n]=(...o)=>t()[n]?.(...o));return r}function _r(e){return e.startsWith("#")||e.startsWith("rgb")||e.startsWith("hsl")}function sr(e){let t=[],r=/([\w]+)\(([^)]*)\)/g,n;for(;(n=r.exec(e))!==null;){let o=[],s=[],i=n[2].trim();if(i)for(let l of i.split(/[\s,]+/)){let m=l.match(/^([-+]?[\d.eE]+)(.*)$/);o.push(m?parseFloat(m[1]):0),s.push(m?m[2]:"");}t.push({fn:n[1],nums:o,units:s});}return t}function zr(e,t,r){let n=sr(e),o=sr(t);return n.length===0||n.length!==o.length?r<1?e:t:n.map((s,i)=>{let l=o[i];return s.fn!==l.fn||s.nums.length!==l.nums.length?r<1?`${s.fn}(${s.nums.map((m,g)=>`${m}${s.units[g]}`).join(", ")})`:`${l.fn}(${l.nums.map((m,g)=>`${m}${l.units[g]}`).join(", ")})`:`${s.fn}(${s.nums.map((m,g)=>`${m+(l.nums[g]-m)*r}${s.units[g]}`).join(", ")})`}).join(" ")}function ir(e,t,r){if(typeof e=="number"&&typeof t=="number")return String(e+(t-e)*r);let n=String(e),o=String(t);if(_r(n))return ft(n,o,r);if(n.includes("("))return zr(n,o,r);let s=n.match(/^([-+]?[\d.]+)(.*)$/),i=o.match(/^([-+]?[\d.]+)(.*)$/);if(s&&i){let l=parseFloat(s[1]),m=parseFloat(i[1]);return `${l+(m-l)*r}${s[2]||i[2]}`}return r<1?n:o}function Wr(e){return e.replace(/([A-Z])/g,t=>`-${t.toLowerCase()}`)}var Gr=new Set(["opacity","transform","background-color","color","filter","scale","translate","rotate"]),Br=0,ar="--scroll-draw-progress";function qr(){return typeof CSS<"u"&&typeof CSS.supports=="function"&&CSS.supports("animation-timeline: view()")}var cr={destroy:()=>{},replay:()=>{},pause:()=>{},resume:()=>{},seek:()=>{},getProgress:()=>0};function Mt(e,t){return typeof window>"u"?cr:t.respectReducedMotion===false?lr(e,t,false):Be(t,(r,n)=>lr(e,r,n))}function lr(e,t,r){let{props:n,trigger:o={},easing:s="ease-out",speed:i=1,once:l=false,axis:m="y",scrollContainer:g,native:w=true,velocityScale:P=false,triggerElement:S,onProgress:G,onComplete:Q,onEnter:v,onLeave:z,onEnterBack:Z,onLeaveBack:$}=t,C=Re(s,"ease-out"),L=ae(o.start||"top bottom"),O=ae(o.end||"bottom top"),h=S??e,F=typeof g=="string"?document.querySelector(g):g??null,W=Object.entries(n).map(([c,d])=>({prop:Wr(c),from:Array.isArray(d)?d[0]:"",to:Array.isArray(d)?d[1]:d}));function se(){let c=window.getComputedStyle(e);for(let d of W)d.from===""&&(d.from=c.getPropertyValue(d.prop).trim()||"0");}function K(){for(let c of W)e.style.setProperty(c.prop,String(c.to));}let V=new Map;for(let c of [...W.map(d=>d.prop),ar])V.set(c,e.style.getPropertyValue(c));function R(){for(let[c,d]of V)d?e.style.setProperty(c,d):e.style.removeProperty(c);}if(r)return K(),Q?.(),{...cr,destroy:R,getProgress:()=>1};se();let T=()=>F?m==="x"?F.scrollLeft:F.scrollTop:m==="x"?window.scrollX:window.scrollY,X=()=>F?m==="x"?F.clientWidth:F.clientHeight:m==="x"?window.innerWidth:window.innerHeight,E=typeof s=="string"?mt(s):null;function A(){if(!w||!qr()||!E||m!=="y"||F||h!==e||l||i!==1||G||Q||v||z||Z||$||P!==false||(o.start||"top bottom").trim()!=="top bottom"||(o.end||"bottom top").trim()!=="bottom top")return false;for(let c of W)if(!Gr.has(c.prop))return false;return true}function he(){let c=`ssd-a-${++Br}`,d=W.map(j=>`${j.prop}:${j.from}`).join(";"),ne=W.map(j=>`${j.prop}:${j.to}`).join(";"),I=document.createElement("style");I.setAttribute("data-ssd-animate",""),I.textContent=`@keyframes ${c}{from{${d}}to{${ne}}}.${c}{animation-name:${c};animation-duration:auto;animation-timing-function:${E};animation-fill-mode:both;animation-timeline:view();animation-range:cover 0% cover 100%;}`,document.head.appendChild(I),e.classList.add(c);let _=()=>{let j=e.getBoundingClientRect();return Le({top:j.top,height:j.height},T(),X(),L,O)};$e(e,{type:"animate",getProgress:()=>B.getProgress(),getTrigger:_});let B={refresh(){},destroy(){e.classList.remove(c),I.remove(),e.style.animationPlayState="",R(),ke(e);},replay(){e.classList.remove(c),e.offsetWidth,e.classList.add(c);},pause(){e.style.animationPlayState="paused";},resume(){e.style.animationPlayState="";},seek(j){let Ne=Math.min(1,Math.max(0,j));e.classList.remove(c);for(let oe of W)e.style.setProperty(oe.prop,ir(oe.from,oe.to,Ne));},getProgress(){let{tStart:j,tEnd:Ne}=_();return C(Y(T(),j,Ne,i))}};return B}if(A())return he();let D=0,q=0,ue=false,Ee=-1,fe=0,ie=0,M=false,x=NaN,re=-1,Oe=0,J=h===e?W:[],Fe=false;function Se(){let c=e.style,d=J.map(B=>c.getPropertyValue(B.prop)),ne=c.transition;J.length&&(c.transition="none"),J.forEach(B=>c.setProperty(B.prop,V.get(B.prop)??""));let I=lt(h,F,m);J.forEach((B,j)=>c.setProperty(B.prop,d[j])),J.length&&(e.offsetWidth,c.transition=ne);let _=Le(I,I.scroll,X(),L,O);Fe&&Math.abs(_.tStart-D)<1&&Math.abs(_.tEnd-q)<1||(Fe=true,D=_.tStart,q=_.tEnd);}function ye(c){e.style.setProperty(ar,String(c));for(let d of W)e.style.setProperty(d.prop,ir(d.from,d.to,c));G?.(c);}function Ve(c){if(isNaN(x)){x=c;return}x<=0&&c>0&&v?.(),x<1&&c>=1&&z?.(),x>=1&&c<1&&Z?.(),x>0&&c<=0&&$?.(),x=c;}function Ie(){if(ue)return;let c=performance.now(),d=T(),ne=i;if(P!==false){let j=c-Oe,Ne=j>0?Math.abs(d-(re<0?d:re))/j:0;ne=i*Math.max(.2,1+Ne*(typeof P=="number"?P:1)*.04);}re=d,Oe=c;let I=q===D?0:(d-D)/(q-D);Ve(I);let _=Y(d,D,q,ne),B=l?Math.max(Ee,C(fe=Math.max(fe,_))):C(_);ie=B,ye(B),B>=1&&!M?(M=true,Q?.()):B<1&&!l&&(M=false);}let Te=De(F??window,[h],()=>Y(T(),D,q,Math.min(i,1)),Ie,Se);Se(),q===D&&k("scrollAnimate: zero-length trigger window, so it never animates. In a sticky stage, set triggerElement.",e),fe=Y(T(),D,q,i),ie=C(fe),ye(ie),$e(e,{type:"animate",getProgress:()=>ie,getTrigger:()=>({tStart:D,tEnd:q})});function Ae(){ue=true,Te.hold(true);}return {destroy(){ue=true,Te.off(),R(),ke(e);},replay(){Ee=-1,fe=0,M=false,ie=0,ue=false,ye(0),Te.hold(false);},pause:Ae,resume(){ue&&(ue=false,Te.hold(false));},seek(c){let d=Math.min(1,Math.max(0,c));ie=d,Ee=d,fe=0,Ae(),ye(d);},getProgress(){return ie},refresh:Te.remeasure}}var xt={destroy:()=>{},replay:()=>{},pause:()=>{},resume:()=>{},seek:()=>{},getProgress:()=>0};function Lt(e,t){if(typeof window>"u")return xt;let r=typeof e=="string"?document.querySelector(e):e;return r?Be(t,(n,o)=>jr(r,n,o)):(k("scrollCounter: element not found:",e),xt)}function jr(e,t,r){let{from:n=0,to:o,format:s,easing:i="ease-out",trigger:l={},once:m=true,decimals:g,onComplete:w}=t,P=g!==void 0?E=>E.toFixed(g):s??(E=>String(Math.round(E))),S=Re(i,"ease-out"),G=ae(l.start||"top 80%"),Q=ae(l.end||"top 20%");if(r)return e.textContent=P(o),w?.(),{...xt,getProgress:()=>1};let v=0,z=0,Z=false,$=-1,C=0,L=0,O=false,h=()=>window.scrollY,F=()=>window.innerHeight;function W(){let E=e.getBoundingClientRect(),A=Le({top:E.top,height:E.height},h(),F(),G,Q);Z&&Math.abs(A.tStart-v)<1&&Math.abs(A.tEnd-z)<1||(Z=true,v=A.tStart,z=A.tEnd);}let se=e.style.getPropertyValue("--scroll-draw-progress");function K(E){e.textContent=P(n+(o-n)*E),e.style.setProperty("--scroll-draw-progress",String(E));}let V=()=>Y(h(),v,z,1);function R(){let E=V(),A=m?Math.max($,S(C=Math.max(C,E))):S(E);L=A,K(A),A>=1&&!O?(O=true,w?.()):A<1&&!m&&(O=false);}W();{C=Y(h(),v,z,1);let E=S(C);L=E,K(E);}let T=De(window,[e],V,R,W);$e(e,{type:"counter",getProgress:()=>L,getTrigger:()=>({tStart:v,tEnd:z})});let X=()=>T.hold(false);return {destroy(){T.off(),e.style.setProperty("--scroll-draw-progress",se),ke(e);},replay(){$=-1,C=0,O=false,L=0,K(0),X();},pause:()=>T.hold(true),resume:X,seek(E){let A=Math.min(1,Math.max(0,E));L=A,$=A,C=0,T.hold(true),K(A);},getProgress(){return L}}}var ur={destroy:()=>{},replay:()=>{},pause:()=>{},resume:()=>{},seek:()=>{},getProgress:()=>0};function At(e,t={}){if(typeof window>"u")return ur;let r=typeof e=="string"?document.querySelector(e):e;if(!r||r.tagName.toLowerCase()!=="video")return k("scrollVideo: <video> element not found:",e),ur;let n=r,{trigger:o={},easing:s="linear",once:i=false,axis:l="y",preload:m="auto",triggerElement:g,onReady:w,onComplete:P,onProgress:S}=t,G=g??n,Q=window.matchMedia("(prefers-reduced-motion: reduce)").matches,v=Re(s),z=ae(o.start||"top top"),Z=ae(o.end||"bottom top");n.pause(),n.hasAttribute("preload")||(n.preload=m);let $=t.from??0,C=t.to,L=0,O=0,h=false,F=-1,W=0,se=0,K=false,V=false,R=()=>l==="x"?window.scrollX:window.scrollY,T=()=>l==="x"?window.innerWidth:window.innerHeight;function X(){let M=G.getBoundingClientRect(),x=l==="x"?M.left:M.top,re=l==="x"?M.width:M.height,Oe=Le({top:x,height:re},R(),T(),z,Z);L=Oe.tStart,O=Oe.tEnd,V&&O===L&&k("scrollVideo: zero-length trigger window, so it never scrubs. In a sticky stage, set triggerElement.",n);}let E=NaN;function A(M){if(!V)return;let x=C??n.duration??0,re=$+(x-$)*M;re!==E&&(E=re,n.currentTime=re),n.style.setProperty("--scroll-draw-progress",String(M)),S?.(M);}let he=()=>Y(R(),L,O,1);function D(){if(!V||Q)return;let M=he(),x=i?Math.max(F,v(W=Math.max(W,M))):v(M);se=x,A(x),x>=1&&!K?(K=true,P?.()):x<1&&!i&&(K=false);}let q=De(window,[G],he,D,X),ue=()=>q.hold(h||!V||Q);ue();function Ee(){if(V=true,C===void 0&&(C=n.duration),Q){A(1),w?.();return}X(),w?.(),h?A(se):ue();}n.readyState>=1?Ee():n.addEventListener("loadedmetadata",Ee,{once:true}),V||X();let fe=Q?()=>{}:Xe(M=>{M&&(fe(),Q=true,q.hold(true),A(1));});$e(n,{type:"video",getProgress:()=>se,getTrigger:()=>({tStart:L,tEnd:O})});function ie(){h&&(h=false,ue());}return {destroy(){q.off(),n.removeEventListener("loadedmetadata",Ee),fe(),ke(n);},replay(){F=-1,W=0,K=false,se=0,E=NaN,A(0),ie();},pause(){h=true,q.hold(true);},resume:ie,seek(M){let x=Math.min(1,Math.max(0,M));se=x,F=x,W=0,h=true,q.hold(true),E=NaN,A(x);},getProgress(){return se}}}var Ur=1e4;function fr(e){let{frames:t,count:r}=e;if(typeof t!="function")return st(e);let n=Number.isFinite(r)?Math.min(Math.max(Math.floor(r),0),Ur):0,o;try{o=Array.from({length:n},(s,i)=>t(i));}catch{o=["throws"];}return st({...e,frames:o})}function Ct(e,t="<ScrollFrames>"){if(!e||e.getAttribute("aria-hidden")==="true")return;let r=e.getAttribute("role");r==="presentation"||r==="none"||e.getAttribute("aria-label")||e.getAttribute("aria-labelledby")||k(`${t}: the canvas has no aria-label. Say what the frames show, or set aria-hidden="true" if they are decoration.`,e);}var gt={destroy:()=>{},replay:()=>{},pause:()=>{},resume:()=>{},seek:()=>{},getProgress:()=>0};function Yr(e){let t=e>1?[0,e-1]:[0],r=[[0,e-1]];for(let n=0;n<r.length;n++){let[o,s]=r[n];if(s-o<2)continue;let i=o+s>>1;t.push(i),r.push([o,i],[i,s]);}return t}function mr(e,t){if(typeof window>"u")return gt;let r=typeof e=="string"?document.querySelector(e):e;if(!r||r.tagName.toLowerCase()!=="canvas")return k("scrollFrames: <canvas> element not found:",e),gt;let n=r,{frames:o,trigger:s={},easing:i="linear",once:l=false,axis:m="y",fit:g="cover",triggerElement:w,onReady:P,onLoad:S,onComplete:G,onProgress:Q}=t||{},v=Array.isArray(o)?o:null,z=t?.count,Z=Math.floor(v?Math.min(z??v.length,v.length):z??NaN);if(!(v||typeof o=="function")||!Number.isFinite(Z)||Z<1)return k("scrollFrames: no frames. Pass `frames` as an array of URLs, or a function with a finite `count` of 1 or more.",n),gt;let $=t.concurrency??6;(!Number.isFinite($)||$<1)&&(k("scrollFrames: `concurrency` must be a finite number of 1 or more; using 6.",t.concurrency),$=6),$=Math.floor($);let C=n.getContext("2d");if(!C)return k("scrollFrames: the canvas has no 2D context.",n),gt;let L=Z-1,O=w??n,h=window.matchMedia("(prefers-reduced-motion: reduce)").matches,F=Re(i),W=u=>{let p=F(u);return p===p?p:0},se=ae(s.start||"top top"),K=ae(s.end||"bottom top"),V=0,R=0,T=false,X=-1,E=0,A=0,he=false,D=false,q=false,ue=false,Ee=0,fe=-1,ie=new Array(Z),M=new Uint8Array(Z),x=new Set,re=h?[L]:Yr(Z),Oe=0,J=0,Fe=false,Se=(u,...p)=>{if(u)try{u(...p);}catch(b){typeof reportError=="function"?reportError(b):setTimeout(()=>{throw b});}},ye=false,Ve=u=>{let p;try{p=v?v[u]:o(u);}catch(b){p=b;}return typeof p=="string"&&p?p:(ye||(ye=true,k(`scrollFrames: no URL for frame ${u}; it is skipped for its nearest neighbour.`,p)),null)},Ie=()=>m==="x"?window.scrollX:window.scrollY,Te=()=>m==="x"?window.innerWidth:window.innerHeight;function Ae(){!Fe&&J===re.length&&(Fe=true,Se(S));}function c(){for(;!D&&x.size<$&&Oe<re.length;){let u=re[Oe++];M[u]||d(u);}}function d(u){M[u]=1;let p=Ve(u);if(p===null){J++,queueMicrotask(()=>{D||Ae();});return}let b=new Image,le=false,we=_e=>{le||D||(le=true,b.onload=b.onerror=null,x.delete(b),_e?ie[u]=b:k("scrollFrames: a frame failed to load; its nearest neighbour shows instead:",p),J++,c(),_(),Ae());};x.add(b),b.decoding="async",b.onerror=()=>we(false),b.src=p,typeof b.decode=="function"?b.decode().then(()=>we(true),()=>{b.complete?we(b.naturalWidth>0):b.onload=()=>we(true);}):b.onload=()=>we(true);}function ne(u){for(let p=0;p<=L;p++){if(ie[u-p])return u-p;if(ie[u+p])return u+p}return -1}function I(){let u=n.clientWidth,p=n.clientHeight;if(!u||!p)return;let b=Math.min(window.devicePixelRatio||1,2),le=Math.round(u*b),we=Math.round(p*b);if(Math.abs(n.width-le)<=1&&Math.abs(n.height-we)<=1)return;n.width=le,n.height=we,fe=-1;let _e=n.clientWidth,Ce=n.clientHeight;if(_e!==u||Ce!==p){let ze=n.style;_e!==u&&Ce!==p?(ze.width=`${u}px`,ze.height=`${p}px`):ze.aspectRatio=`${u} / ${p}`;}}function _(){let u=ne(Ee);if(u<0||u===fe)return;let p=ie[u],b=n.width,le=n.height,we=p.naturalWidth||b,_e=p.naturalHeight||le,Ce=(g==="contain"?Math.min:Math.max)(b/we,le/_e),ze=we*Ce,We=_e*Ce;C.clearRect(0,0,b,le),C.drawImage(p,(b-ze)/2,(le-We)/2,ze,We),fe=u,q||(q=true,Se(P));}function B(u){Ee=Math.min(L,Math.max(0,Math.round(u*L))),n.style.setProperty("--scroll-draw-progress",String(u)),_(),Se(Q,u,Ee);}function j(){let u=O.getBoundingClientRect(),p=m==="x"?u.left:u.top,b=m==="x"?u.width:u.height,le=Le({top:p,height:b},Ie(),Te(),se,K);V=le.tStart,R=le.tEnd,R===V&&b>0&&!h&&!ue&&(ue=true,k("scrollFrames: zero-length trigger window, so it never scrubs. In a sticky stage, set triggerElement.",n));}let Ne=()=>Y(Ie(),V,R,1);function oe(){if(h)return;let u=Ne(),p=l?Math.max(X,W(E=Math.max(E,u))):W(u);A=p,B(p),p>=1&&!he?(he=true,Se(G)):p<1&&!l&&(he=false);}function He(){A=1,B(1);}I(),h||j();let be=De(window,[O],Ne,oe,()=>{I(),h||j(),_();}),Ue=()=>be.hold(T||h);Ue(),h&&He(),c();let qe=typeof ResizeObserver=="function"?new ResizeObserver(()=>{I(),_();}):null;qe?.observe(n);let je=h?()=>{}:Xe(u=>{u&&(je(),h=true,be.hold(true),re=re.slice(0,Oe),M[L]||re.push(L),Ae(),He(),c());});$e(n,{type:"frames",getProgress:()=>A,getTrigger:()=>({tStart:V,tEnd:R})});function me(){D||!T||(T=false,Ue());}return {destroy(){if(!D){D=true,be.off(),qe?.disconnect(),je();for(let u of x)u.onload=u.onerror=null,u.src="";x.clear(),ke(n);}},replay(){D||(X=-1,E=0,he=false,A=0,B(0),me());},pause(){D||(T=true,be.hold(true));},resume:me,seek(u){if(D)return;let p=Math.min(1,Math.max(0,u===u?u:0));A=p,X=p,E=0,T=true,be.hold(true),B(p);},getProgress(){return A}}}function Pt(e,{triggerElement:t,...r},n){let o=t;return typeof t=="string"&&typeof document<"u"&&(o=document.querySelector(t),o||k(`scrollFrames: triggerElement "${t}" matches nothing; measuring the canvas.`)),mr(e,{...r,frames:n.frames,triggerElement:o??void 0})}function pr(e,t){let r=document.createElement("span");r.textContent=t,r.style.cssText="position:absolute;width:1px;height:1px;overflow:hidden;clip-path:inset(50%);white-space:nowrap;user-select:none",e.appendChild(r);}function ht(e=""){let t=document.createElement("span");return t.setAttribute("aria-hidden","true"),t.textContent=e,t}function gr(e){let t=e.textContent??"";return e.textContent="",t.split(/(\s+)/).filter(Boolean).map(r=>{let n=e.appendChild(ht(r)),o=/^\s+$/.test(r);return o?n.style.whiteSpace="pre":n.style.display="inline-block",o?null:n}).filter(r=>r!==null)}function Qr(e){let t=e.textContent??"";e.textContent="";let r=[],n=null;for(let o of t){let s=ht(o),i=o===" ";i?s.style.whiteSpace="pre":(s.style.display="inline-block",r.push(s)),i||o>"\u0DFF"?n=null:n||(n=e.appendChild(ht()),n.style.cssText="display:inline-block;white-space:nowrap"),(n??e).appendChild(s);}return r}function dr(e){let t=gr(e),r=new Map;for(let s of t){let i=s.offsetTop;r.has(i)||r.set(i,[]),r.get(i).push(s);}let n=[],o=Array.from(r.keys()).sort((s,i)=>s-i);for(let s of o){let i=r.get(s),l=ht();l.style.display="inline-block",i.forEach((m,g)=>{let w=m.nextElementSibling;l.appendChild(m),g<i.length-1&&w&&w.style.whiteSpace==="pre"&&l.appendChild(w);}),n.push(l);}return e.textContent="",n.forEach((s,i)=>{e.appendChild(s),i<n.length-1&&e.appendChild(document.createTextNode(" "));}),n}function Kr(e,t,r,n){if(r<=1||n===0)return e;n=Math.min(n,1/r);let o=(r-1)*n,s=t*n,i=s+(1-o);return i<=s?e>=s?1:0:rt((e-s)/(i-s),0,1)}function Xr(e,t){let r=[];if(t?.y!==void 0&&r.push(`translateY(${t.y*(1-e)}px)`),t?.x!==void 0&&r.push(`translateX(${t.x*(1-e)}px)`),t?.rotate!==void 0&&r.push(`rotate(${t.rotate*(1-e)}deg)`),t?.scale!==void 0){let n=t.scale+(1-t.scale)*e;r.push(`scale(${n})`);}return r.join(" ")}var $t={destroy:()=>{},replay:()=>{},pause:()=>{},resume:()=>{},seek:()=>{},getProgress:()=>0};function kt(e,t={}){if(typeof window>"u")return $t;let r=typeof e=="string"?document.querySelector(e):e;if(!r)return k("scrollText: element not found:",e),$t;let n=r;return Be(t,(o,s)=>Jr(n,o,s))}function Jr(e,t,r){let{split:n="words",stagger:o=.04,easing:s="ease-out",from:i={opacity:0,y:24},trigger:l={},once:m=true,onComplete:g}=t,w=Re(s,"ease-out"),P=ae(l.start||"top 85%"),S=ae(l.end||"top 40%"),G=e.innerHTML,Q=e.textContent??"",v;n==="chars"?v=Qr(e):n==="lines"?v=dr(e):v=gr(e),pr(e,Q);let z=v.length;function Z(T,X){i?.opacity!==void 0&&(T.style.opacity=String(i.opacity+(1-i.opacity)*X));let E=Xr(X,i);E&&(T.style.transform=E);}function $(T){e.style.setProperty("--scroll-draw-progress",String(T)),v.forEach((X,E)=>{let A=w(Kr(T,E,z,o));Z(X,A);});}if(r)return $(1),g?.(),{...$t,destroy:()=>{e.innerHTML=G;},getProgress:()=>1};$(0);let C=0,L=0,O=-1,h=0,F=false;function W(){({tStart:C,tEnd:L}=Le(e.getBoundingClientRect(),window.scrollY,window.innerHeight,P,S));}let se=()=>Y(window.scrollY,C,L,1);function K(){let T=m?O=Math.max(O,se()):se();h=T,$(T),T>=1&&!F?(F=true,g?.()):T<1&&!m&&(F=false);}W();let V=De(window,[e],se,K,()=>{n==="lines"&&(e.innerHTML=G,v=dr(e),pr(e,Q),$(h)),W();});$e(e,{type:"text",getProgress:()=>h,getTrigger:()=>({tStart:C,tEnd:L})});let R=()=>V.hold(false);return {destroy(){V.off(),e.innerHTML=G,ke(e);},replay(){O=-1,F=false,h=0,$(0),R();},pause:()=>V.hold(true),resume:R,seek(T){V.hold(true),$(h=O=rt(T,0,1));},getProgress(){return h}}}function Je(e,t,r,n=st){let o=t,s=n(t),i=r(e,Tt(t,()=>o),t);return {update(l){o=l;let m=n(l);m!==s&&(s=m,i.destroy(),i=r(e,Tt(l,()=>o),l));},destroy(){i.destroy();}}}function Io(e,t={}){return Je(e,t,St)}function Ho(e={}){let t=null;function r(n){return t=St(n,e),{destroy(){t?.destroy(),t=null;}}}return {action:r,getInstance:()=>t}}function Ro(e,t){return Je(e,t,Mt)}function Do(e){let t=null;function r(n){return t=Mt(n,e),{destroy(){t?.destroy(),t=null;}}}return {action:r,getInstance:()=>t}}function No(e,t){return Je(e,t,Lt)}function Vo(e){let t=null;function r(n){return t=Lt(n,e),{destroy(){t?.destroy(),t=null;}}}return {action:r,getInstance:()=>t}}function _o(e,t={}){return Je(e,t,At)}function zo(e={}){let t=null;function r(n){return t=At(n,e),{destroy(){t?.destroy(),t=null;}}}return {action:r,getInstance:()=>t}}function Wo(e,t){return Ct(e,"scrollFramesAction"),Je(e,t,Pt,fr)}function Go(e){let t=null;function r(n){return Ct(n,"createScrollFrames"),t=Pt(n,e,e),{destroy(){t?.destroy(),t=null;}}}return {action:r,getInstance:()=>t}}function Bo(e,t={}){return Je(e,t,kt)}function qo(e={}){let t=null;function r(n){return t=kt(n,e),{destroy(){t?.destroy(),t=null;}}}return {action:r,getInstance:()=>t}}exports.createScrollAnimate=Do;exports.createScrollCounter=Vo;exports.createScrollDraw=Ho;exports.createScrollFrames=Go;exports.createScrollText=qo;exports.createScrollVideo=zo;exports.scrollAnimate=Ro;exports.scrollCounterAction=No;exports.scrollDraw=Io;exports.scrollFramesAction=Wo;exports.scrollTextAction=Bo;exports.scrollVideoAction=_o;
|
package/dist/svelte/index.d.mts
CHANGED
|
@@ -1,7 +1,9 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { S as
|
|
3
|
-
import { S as
|
|
1
|
+
import { F as FramesInput } from '../wrapper-BOHrDnBO.mjs';
|
|
2
|
+
import { S as ScrollDrawInstance, a as ScrollDrawOptions } from '../types-iITMwrru.mjs';
|
|
3
|
+
import { S as ScrollAnimateOptions } from '../engine-Bi2x8-X-.mjs';
|
|
4
|
+
import { S as ScrollCounterOptions } from '../index-BMMZ8aW7.mjs';
|
|
4
5
|
import { ScrollVideoOptions } from '../video/index.mjs';
|
|
6
|
+
export { ScrollFramesOptions } from '../frames/index.mjs';
|
|
5
7
|
import { ScrollTextOptions } from '../text/index.mjs';
|
|
6
8
|
|
|
7
9
|
/**
|
|
@@ -117,6 +119,47 @@ declare function createScrollVideo(options?: ScrollVideoOptions): {
|
|
|
117
119
|
};
|
|
118
120
|
getInstance: () => ScrollDrawInstance | null;
|
|
119
121
|
};
|
|
122
|
+
/**
|
|
123
|
+
* Svelte action — scrub an image sequence on a <canvas> with the scroll
|
|
124
|
+
* (scrollFrames). The canvas is yours, so give it role="img" and an
|
|
125
|
+
* aria-label saying what the frames show; in development the action warns
|
|
126
|
+
* when it has no name (unless it is aria-hidden="true" or role="presentation").
|
|
127
|
+
*
|
|
128
|
+
* An inline parameter is fine: `update()` starts a new film only when the URLs
|
|
129
|
+
* (a `frames` function is read by the URLs it gives for `count`) or another
|
|
130
|
+
* option changed, and callbacks are read live. `triggerElement` takes an
|
|
131
|
+
* element or a selector, found when the film starts.
|
|
132
|
+
*
|
|
133
|
+
* @example
|
|
134
|
+
* <section id="track" style="height: 400vh">
|
|
135
|
+
* <div style="position: sticky; top: 0; height: 100vh">
|
|
136
|
+
* <canvas role="img" aria-label="The headphones turning"
|
|
137
|
+
* use:scrollFramesAction={{ frames: (i) => `/film/${i + 1}.jpg`, count: 120,
|
|
138
|
+
* triggerElement: '#track', trigger: { start: 'top top', end: 'bottom bottom' } }} />
|
|
139
|
+
* </div>
|
|
140
|
+
* </section>
|
|
141
|
+
*/
|
|
142
|
+
declare function scrollFramesAction(node: HTMLCanvasElement, options: FramesInput): {
|
|
143
|
+
update(next: FramesInput): void;
|
|
144
|
+
destroy(): void;
|
|
145
|
+
};
|
|
146
|
+
/**
|
|
147
|
+
* Returns an action and a getter for the live film instance. Its options are
|
|
148
|
+
* read once, like the other create* helpers.
|
|
149
|
+
*
|
|
150
|
+
* @example
|
|
151
|
+
* <script>
|
|
152
|
+
* import { createScrollFrames } from 'svg-scroll-draw/svelte';
|
|
153
|
+
* const { action, getInstance } = createScrollFrames({ frames: urls });
|
|
154
|
+
* </script>
|
|
155
|
+
* <canvas use:action role="img" aria-label="The headphones turning" />
|
|
156
|
+
*/
|
|
157
|
+
declare function createScrollFrames(options: FramesInput): {
|
|
158
|
+
action: (node: HTMLCanvasElement) => {
|
|
159
|
+
destroy(): void;
|
|
160
|
+
};
|
|
161
|
+
getInstance: () => ScrollDrawInstance | null;
|
|
162
|
+
};
|
|
120
163
|
/**
|
|
121
164
|
* Svelte action — split text and stagger-animate each piece on scroll.
|
|
122
165
|
*
|
|
@@ -146,4 +189,4 @@ declare function createScrollText(options?: ScrollTextOptions): {
|
|
|
146
189
|
getInstance: () => ScrollDrawInstance | null;
|
|
147
190
|
};
|
|
148
191
|
|
|
149
|
-
export { ScrollAnimateOptions, ScrollCounterOptions, ScrollDrawOptions, ScrollTextOptions, ScrollVideoOptions, createScrollAnimate, createScrollCounter, createScrollDraw, createScrollText, createScrollVideo, scrollAnimate, scrollCounterAction, scrollDraw, scrollTextAction, scrollVideoAction };
|
|
192
|
+
export { ScrollAnimateOptions, ScrollCounterOptions, ScrollDrawOptions, ScrollTextOptions, ScrollVideoOptions, createScrollAnimate, createScrollCounter, createScrollDraw, createScrollFrames, createScrollText, createScrollVideo, scrollAnimate, scrollCounterAction, scrollDraw, scrollFramesAction, scrollTextAction, scrollVideoAction };
|
package/dist/svelte/index.d.ts
CHANGED
|
@@ -1,7 +1,9 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { S as
|
|
3
|
-
import { S as
|
|
1
|
+
import { F as FramesInput } from '../wrapper-Cm7JTIVl.js';
|
|
2
|
+
import { S as ScrollDrawInstance, a as ScrollDrawOptions } from '../types-iITMwrru.js';
|
|
3
|
+
import { S as ScrollAnimateOptions } from '../engine-DAlvk6i0.js';
|
|
4
|
+
import { S as ScrollCounterOptions } from '../index-MdQ4ti_z.js';
|
|
4
5
|
import { ScrollVideoOptions } from '../video/index.js';
|
|
6
|
+
export { ScrollFramesOptions } from '../frames/index.js';
|
|
5
7
|
import { ScrollTextOptions } from '../text/index.js';
|
|
6
8
|
|
|
7
9
|
/**
|
|
@@ -117,6 +119,47 @@ declare function createScrollVideo(options?: ScrollVideoOptions): {
|
|
|
117
119
|
};
|
|
118
120
|
getInstance: () => ScrollDrawInstance | null;
|
|
119
121
|
};
|
|
122
|
+
/**
|
|
123
|
+
* Svelte action — scrub an image sequence on a <canvas> with the scroll
|
|
124
|
+
* (scrollFrames). The canvas is yours, so give it role="img" and an
|
|
125
|
+
* aria-label saying what the frames show; in development the action warns
|
|
126
|
+
* when it has no name (unless it is aria-hidden="true" or role="presentation").
|
|
127
|
+
*
|
|
128
|
+
* An inline parameter is fine: `update()` starts a new film only when the URLs
|
|
129
|
+
* (a `frames` function is read by the URLs it gives for `count`) or another
|
|
130
|
+
* option changed, and callbacks are read live. `triggerElement` takes an
|
|
131
|
+
* element or a selector, found when the film starts.
|
|
132
|
+
*
|
|
133
|
+
* @example
|
|
134
|
+
* <section id="track" style="height: 400vh">
|
|
135
|
+
* <div style="position: sticky; top: 0; height: 100vh">
|
|
136
|
+
* <canvas role="img" aria-label="The headphones turning"
|
|
137
|
+
* use:scrollFramesAction={{ frames: (i) => `/film/${i + 1}.jpg`, count: 120,
|
|
138
|
+
* triggerElement: '#track', trigger: { start: 'top top', end: 'bottom bottom' } }} />
|
|
139
|
+
* </div>
|
|
140
|
+
* </section>
|
|
141
|
+
*/
|
|
142
|
+
declare function scrollFramesAction(node: HTMLCanvasElement, options: FramesInput): {
|
|
143
|
+
update(next: FramesInput): void;
|
|
144
|
+
destroy(): void;
|
|
145
|
+
};
|
|
146
|
+
/**
|
|
147
|
+
* Returns an action and a getter for the live film instance. Its options are
|
|
148
|
+
* read once, like the other create* helpers.
|
|
149
|
+
*
|
|
150
|
+
* @example
|
|
151
|
+
* <script>
|
|
152
|
+
* import { createScrollFrames } from 'svg-scroll-draw/svelte';
|
|
153
|
+
* const { action, getInstance } = createScrollFrames({ frames: urls });
|
|
154
|
+
* </script>
|
|
155
|
+
* <canvas use:action role="img" aria-label="The headphones turning" />
|
|
156
|
+
*/
|
|
157
|
+
declare function createScrollFrames(options: FramesInput): {
|
|
158
|
+
action: (node: HTMLCanvasElement) => {
|
|
159
|
+
destroy(): void;
|
|
160
|
+
};
|
|
161
|
+
getInstance: () => ScrollDrawInstance | null;
|
|
162
|
+
};
|
|
120
163
|
/**
|
|
121
164
|
* Svelte action — split text and stagger-animate each piece on scroll.
|
|
122
165
|
*
|
|
@@ -146,4 +189,4 @@ declare function createScrollText(options?: ScrollTextOptions): {
|
|
|
146
189
|
getInstance: () => ScrollDrawInstance | null;
|
|
147
190
|
};
|
|
148
191
|
|
|
149
|
-
export { ScrollAnimateOptions, ScrollCounterOptions, ScrollDrawOptions, ScrollTextOptions, ScrollVideoOptions, createScrollAnimate, createScrollCounter, createScrollDraw, createScrollText, createScrollVideo, scrollAnimate, scrollCounterAction, scrollDraw, scrollTextAction, scrollVideoAction };
|
|
192
|
+
export { ScrollAnimateOptions, ScrollCounterOptions, ScrollDrawOptions, ScrollTextOptions, ScrollVideoOptions, createScrollAnimate, createScrollCounter, createScrollDraw, createScrollFrames, createScrollText, createScrollVideo, scrollAnimate, scrollCounterAction, scrollDraw, scrollFramesAction, scrollTextAction, scrollVideoAction };
|
package/dist/svelte/index.mjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import {a as a$
|
|
1
|
+
import {a as a$3}from'../chunk-NJV6S5LD.mjs';import {a,d,b as b$2,c}from'../chunk-KN2YB54Z.mjs';import {a as a$5}from'../chunk-HJTHOZK5.mjs';import'../chunk-GBFWTY5L.mjs';import {a as a$4}from'../chunk-UF3MO5XQ.mjs';import {a as a$2}from'../chunk-Z72TVDHY.mjs';import {a as a$1}from'../chunk-HAGTU5EX.mjs';import {b as b$1}from'../chunk-XLXVGQ3P.mjs';import'../chunk-7LDSB4FT.mjs';import'../chunk-UPWWULKI.mjs';import'../chunk-XC5NR2MU.mjs';import'../chunk-YOOPMYT6.mjs';import'../chunk-2PYLM3E7.mjs';import'../chunk-NV6YTPHI.mjs';import'../chunk-IXR6RML7.mjs';import'../chunk-4DOJSIEQ.mjs';import'../chunk-5PJEKEEP.mjs';import'../chunk-EBU6E26L.mjs';import'../chunk-LFSU6LR3.mjs';function o(e,t,r,n=a){let c=t,O=n(t),i=r(e,b$2(t,()=>c),t);return {update(l){c=l;let d=n(l);d!==O&&(O=d,i.destroy(),i=r(e,b$2(l,()=>c),l));},destroy(){i.destroy();}}}function F(e,t={}){return o(e,t,b$1)}function g(e={}){let t=null;function r(n){return t=b$1(n,e),{destroy(){t?.destroy(),t=null;}}}return {action:r,getInstance:()=>t}}function C(e,t){return o(e,t,a$1)}function V(e){let t=null;function r(n){return t=a$1(n,e),{destroy(){t?.destroy(),t=null;}}}return {action:r,getInstance:()=>t}}function v(e,t){return o(e,t,a$2)}function K(e){let t=null;function r(n){return t=a$2(n,e),{destroy(){t?.destroy(),t=null;}}}return {action:r,getInstance:()=>t}}function b(e,t={}){return o(e,t,a$5)}function h(e={}){let t=null;function r(n){return t=a$5(n,e),{destroy(){t?.destroy(),t=null;}}}return {action:r,getInstance:()=>t}}function j(e,t){return d(e,"scrollFramesAction"),o(e,t,a$3,c)}function k(e){let t=null;function r(n){return d(n,"createScrollFrames"),t=a$3(n,e,e),{destroy(){t?.destroy(),t=null;}}}return {action:r,getInstance:()=>t}}function q(e,t={}){return o(e,t,a$4)}function z(e={}){let t=null;function r(n){return t=a$4(n,e),{destroy(){t?.destroy(),t=null;}}}return {action:r,getInstance:()=>t}}export{V as createScrollAnimate,K as createScrollCounter,g as createScrollDraw,k as createScrollFrames,z as createScrollText,h as createScrollVideo,C as scrollAnimate,v as scrollCounterAction,F as scrollDraw,j as scrollFramesAction,q as scrollTextAction,b as scrollVideoAction};
|
package/dist/text/index.cjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
'use strict';function
|
|
1
|
+
'use strict';var ae=typeof __SVG_SCROLL_DRAW_DEV__<"u"?__SVG_SCROLL_DRAW_DEV__:typeof process<"u"&&typeof process.env<"u"&&process.env.NODE_ENV!=="production";function _(e,...t){ae&&console.warn(`[svg-scroll-draw] ${e}`,...t);}function ce({tension:e=2.5,friction:t=2.2}={}){return n=>1-Math.cos(n*Math.PI*e)*Math.pow(1-n,t)}function de({bounces:e=3,decay:t=.5}={}){let n=Math.max(1,Math.round(e)),o=Math.max(.01,Math.min(.99,t)),s=Math.sqrt(o),r=0,i=[];for(let a=0;a<n;a++){let c=Math.pow(s,a);i.push(c),r+=c;}let u=[0],d=0;for(let a=0;a<n;a++)d+=i[a]/r,u.push(d);return a=>{if(a<=0)return 0;if(a>=1)return 1;for(let c=0;c<n;c++)if(a<=u[c+1]){let m=(a-u[c])/(u[c+1]-u[c]);if(c===0)return m*(2-m);let f=1-Math.pow(o,c);return f+(1-f)*(2*m-1)*(2*m-1)}return 1}}function le({amplitude:e=1,period:t=.4}={}){let n=Math.max(1,e),o=Math.max(.1,t),s=n<=1?o/4:o/(2*Math.PI)*Math.asin(1/n);return r=>r<=0?0:r>=1?1:n*Math.pow(2,-10*r)*Math.sin((r-s)*(2*Math.PI)/o)+1}var R={linear:e=>e,"ease-in":e=>e*e,"ease-out":e=>e*(2-e),"ease-in-out":e=>e<.5?2*e*e:-1+(4-2*e)*e,spring:ce(),bounce:de(),elastic:le()};function me(e,t,n,o){let s=(r,i,u)=>((1+3*r-3*i)*u+3*i-6*r)*u*u+3*r*u;return r=>{if(r<=0||r>=1)return +(r>0);let i=r;for(let u=0;u<8;u++)i-=(s(e,n,i)-r)/((3*(1+3*e-3*n)*i+6*n-12*e)*i+3*e);if(!(i>=0&&i<=1&&Math.abs(s(e,n,i)-r)<1e-9))for(let u=0,d=0,a=1;u<30;u++)i=(d+a)/2,s(e,n,i)<r?d=i:a=i;return s(t,o,i)}}function pe(e){let t=/^cubic-bezier\((.*)\)$/.exec(e==="ease"?"cubic-bezier(.25,.1,.25,1)":e.trim()),n=t?t[1].split(",").map(parseFloat):[];if(n.length===4&&n.every(Number.isFinite)&&n[0]*(1-n[0])>=0&&n[2]*(1-n[2])>=0)return [me(n[0],n[1],n[2],n[3]),`cubic-bezier(${n})`]}var W=new Set;function F(e,t="linear"){if(typeof e=="function")return e;if(e==null)return R[t];if({}.hasOwnProperty.call(R,e))return R[e];let n=pe(String(e));return n?n[0]:(!W.has(e)&&W.add(e)&&_(`Unknown easing ${JSON.stringify(e)}: use a name, cubic-bezier() or a function.`),R[t])}function w(e,t,n){return Math.min(n,Math.max(t,e))}function I(e="top bottom"){let t=e.trim();if(/^\d+(\.\d+)?%$/.test(t))return {element:"top",viewport:t};let[n="top",o="bottom"]=t.split(/\s+/).filter(Boolean);return {element:n,viewport:o}}var V=(e,t)=>e==="top"?0:e==="center"?.5:e==="bottom"?1:t;function Q(e,t,n,o){return e+n+t*V(o,0)}function G(e,t){return t*(/^\d+(\.\d+)?%$/.test(e)?parseFloat(e)/100:V(e,1))}function q(e,t,n,o){return n===t?0:w((e-t)/(n-t)*o,0,1)}function B(e,t,n,o,s){let r=Q(e.top,e.height,t,o.element)-G(o.viewport,n),i=Q(e.top,e.height,t,s.element)-G(s.viewport,n);return {tStart:r,tEnd:i}}var Y=Symbol.for("svg-scroll-draw.registry");function j(){let e=globalThis;return e[Y]||(e[Y]=new Map)}function U(e,t){j().set(e,t);}function J(e){j().delete(e);}function K(e){if(typeof window>"u"||typeof window.matchMedia!="function")return ()=>{};let t=window.matchMedia("(prefers-reduced-motion: reduce)"),n=s=>e(!!s.matches);if(typeof t.addEventListener=="function")return t.addEventListener("change",n),()=>t.removeEventListener("change",n);let o=t;return o.addListener?.(n),()=>o.removeListener?.(n)}function X(e,t){if(window.matchMedia("(prefers-reduced-motion: reduce)").matches)return t(e,true);let n=t(e,false),o=K(r=>{if(!r)return;o();let i=(n.getProgress?.()??0)>=1;n.destroy(),n=t(i?{...e,onComplete:void 0}:e,true);}),s={};for(let r of Object.keys(n))s[r]=(...i)=>n[r]?.(...i);return s.destroy=()=>{o(),n.destroy();},s}var E,k=new Set,O=new WeakMap,v=new Map,Z=e=>{let t=e.getBoundingClientRect();return t.width+" "+t.height};function fe(e){let t=new Set;for(let n of e)for(;n&&n!==document.body;n=n.parentElement)for(let o=n;o;o=o.previousElementSibling)t.add(o);return t}function ee(e,t){if(typeof ResizeObserver>"u"||typeof document>"u")return ()=>{};let n=()=>t();E??(E=new ResizeObserver(s=>{let r=false;for(let{target:i}of s)O.get(i)!==Z(i)&&(r=true),O.set(i,"");r&&k.forEach(i=>i());})),k.add(n);let o=fe(e);return [document.body,document.documentElement].forEach(s=>s&&o.add(s)),o.forEach(s=>{O.has(s)||O.set(s,Z(s)),v.set(s,(v.get(s)??0)+1),E.observe(s);}),()=>{k.delete(n)&&(o.forEach(s=>{let r=(v.get(s)??1)-1;if(r)return void v.set(s,r);v.delete(s),E?.unobserve(s);}),k.size||(E?.disconnect(),E=void 0));}}function ne(e,t,n,o,s){let r,i=NaN,u,d,a=()=>{r=0,o(),!u&&!r&&(i=n())>0&&i<1&&(r=requestAnimationFrame(a));},c=()=>{!r&&!u&&n()!==i&&(r=requestAnimationFrame(a));},m=g=>{u=g,cancelAnimationFrame(r),r=i=NaN,c();},f=()=>{clearTimeout(d),s(),c();},b=()=>{clearTimeout(d),d=setTimeout(f,150);},M=ee(t,b),p=g=>{e[g]("scroll",c,{passive:true}),window[g]("resize",b),window[g]("orientationchange",b);};return p("addEventListener"),c(),{hold:m,remeasure:f,off(){m(true),p("removeEventListener"),M(),clearTimeout(d);}}}function te(e,t){let n=document.createElement("span");n.textContent=t,n.style.cssText="position:absolute;width:1px;height:1px;overflow:hidden;clip-path:inset(50%);white-space:nowrap;user-select:none",e.appendChild(n);}function H(e=""){let t=document.createElement("span");return t.setAttribute("aria-hidden","true"),t.textContent=e,t}function oe(e){let t=e.textContent??"";return e.textContent="",t.split(/(\s+)/).filter(Boolean).map(n=>{let o=e.appendChild(H(n)),s=/^\s+$/.test(n);return s?o.style.whiteSpace="pre":o.style.display="inline-block",s?null:o}).filter(n=>n!==null)}function be(e){let t=e.textContent??"";e.textContent="";let n=[],o=null;for(let s of t){let r=H(s),i=s===" ";i?r.style.whiteSpace="pre":(r.style.display="inline-block",n.push(r)),i||s>"\u0DFF"?o=null:o||(o=e.appendChild(H()),o.style.cssText="display:inline-block;white-space:nowrap"),(o??e).appendChild(r);}return n}function re(e){let t=oe(e),n=new Map;for(let r of t){let i=r.offsetTop;n.has(i)||n.set(i,[]),n.get(i).push(r);}let o=[],s=Array.from(n.keys()).sort((r,i)=>r-i);for(let r of s){let i=n.get(r),u=H();u.style.display="inline-block",i.forEach((d,a)=>{let c=d.nextElementSibling;u.appendChild(d),a<i.length-1&&c&&c.style.whiteSpace==="pre"&&u.appendChild(c);}),o.push(u);}return e.textContent="",o.forEach((r,i)=>{e.appendChild(r),i<o.length-1&&e.appendChild(document.createTextNode(" "));}),o}function ge(e,t,n,o){if(n<=1||o===0)return e;o=Math.min(o,1/n);let s=(n-1)*o,r=t*o,i=r+(1-s);return i<=r?e>=r?1:0:w((e-r)/(i-r),0,1)}function he(e,t){let n=[];if(t?.y!==void 0&&n.push(`translateY(${t.y*(1-e)}px)`),t?.x!==void 0&&n.push(`translateX(${t.x*(1-e)}px)`),t?.rotate!==void 0&&n.push(`rotate(${t.rotate*(1-e)}deg)`),t?.scale!==void 0){let o=t.scale+(1-t.scale)*e;n.push(`scale(${o})`);}return n.join(" ")}var N={destroy:()=>{},replay:()=>{},pause:()=>{},resume:()=>{},seek:()=>{},getProgress:()=>0};function $e(e,t={}){if(typeof window>"u")return N;let n=typeof e=="string"?document.querySelector(e):e;if(!n)return _("scrollText: element not found:",e),N;let o=n;return X(t,(s,r)=>ye(o,s,r))}function ye(e,t,n){let{split:o="words",stagger:s=.04,easing:r="ease-out",from:i={opacity:0,y:24},trigger:u={},once:d=true,onComplete:a}=t,c=F(r,"ease-out"),m=I(u.start||"top 85%"),f=I(u.end||"top 40%"),b=e.innerHTML,M=e.textContent??"",p;o==="chars"?p=be(e):o==="lines"?p=re(e):p=oe(e),te(e,M);let g=p.length;function ie(l,L){i?.opacity!==void 0&&(l.style.opacity=String(i.opacity+(1-i.opacity)*L));let C=he(L,i);C&&(l.style.transform=C);}function h(l){e.style.setProperty("--scroll-draw-progress",String(l)),p.forEach((L,C)=>{let ue=c(ge(l,C,g,s));ie(L,ue);});}if(n)return h(1),a?.(),{...N,destroy:()=>{e.innerHTML=b;},getProgress:()=>1};h(0);let P=0,A=0,x=-1,y=0,T=false;function z(){({tStart:P,tEnd:A}=B(e.getBoundingClientRect(),window.scrollY,window.innerHeight,m,f));}let D=()=>q(window.scrollY,P,A,1);function se(){let l=d?x=Math.max(x,D()):D();y=l,h(l),l>=1&&!T?(T=true,a?.()):l<1&&!d&&(T=false);}z();let S=ne(window,[e],D,se,()=>{o==="lines"&&(e.innerHTML=b,p=re(e),te(e,M),h(y)),z();});U(e,{type:"text",getProgress:()=>y,getTrigger:()=>({tStart:P,tEnd:A})});let $=()=>S.hold(false);return {destroy(){S.off(),e.innerHTML=b,J(e);},replay(){x=-1,T=false,y=0,h(0),$();},pause:()=>S.hold(true),resume:$,seek(l){S.hold(true),h(y=x=w(l,0,1));},getProgress(){return y}}}exports.scrollText=$e;
|
package/dist/text/index.d.mts
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import { E as
|
|
1
|
+
import { E as Easing, T as TriggerConfig, S as ScrollDrawInstance } from '../types-iITMwrru.mjs';
|
|
2
2
|
|
|
3
3
|
interface ScrollTextOptions {
|
|
4
4
|
split?: 'chars' | 'words' | 'lines';
|
|
5
5
|
stagger?: number;
|
|
6
|
-
easing?:
|
|
6
|
+
easing?: Easing;
|
|
7
7
|
from?: {
|
|
8
8
|
opacity?: number;
|
|
9
9
|
y?: number;
|
package/dist/text/index.d.ts
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import { E as
|
|
1
|
+
import { E as Easing, T as TriggerConfig, S as ScrollDrawInstance } from '../types-iITMwrru.js';
|
|
2
2
|
|
|
3
3
|
interface ScrollTextOptions {
|
|
4
4
|
split?: 'chars' | 'words' | 'lines';
|
|
5
5
|
stagger?: number;
|
|
6
|
-
easing?:
|
|
6
|
+
easing?: Easing;
|
|
7
7
|
from?: {
|
|
8
8
|
opacity?: number;
|
|
9
9
|
y?: number;
|
package/dist/text/index.mjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export{a as scrollText}from'../chunk-
|
|
1
|
+
export{a as scrollText}from'../chunk-UF3MO5XQ.mjs';import'../chunk-2PYLM3E7.mjs';import'../chunk-NV6YTPHI.mjs';import'../chunk-IXR6RML7.mjs';import'../chunk-4DOJSIEQ.mjs';import'../chunk-5PJEKEEP.mjs';import'../chunk-EBU6E26L.mjs';import'../chunk-LFSU6LR3.mjs';
|
package/dist/timeline/index.cjs
CHANGED
|
@@ -1,23 +1,23 @@
|
|
|
1
|
-
'use strict';function Ge({tension:e=2.5,friction:
|
|
1
|
+
'use strict';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 V(e,...n){Ge&&console.warn(`[svg-scroll-draw] ${e}`,...n);}function Pe({tension:e=2.5,friction:n=2.2}={}){return t=>1-Math.cos(t*Math.PI*e)*Math.pow(1-t,n)}function Ne({bounces:e=3,decay:n=.5}={}){let t=Math.max(1,Math.round(e)),o=Math.max(.01,Math.min(.99,n)),r=Math.sqrt(o),i=0,a=[];for(let l=0;l<t;l++){let d=Math.pow(r,l);a.push(d),i+=d;}let u=[0],b=0;for(let l=0;l<t;l++)b+=a[l]/i,u.push(b);return l=>{if(l<=0)return 0;if(l>=1)return 1;for(let d=0;d<t;d++)if(l<=u[d+1]){let h=(l-u[d])/(u[d+1]-u[d]);if(d===0)return h*(2-h);let v=1-Math.pow(o,d);return v+(1-v)*(2*h-1)*(2*h-1)}return 1}}function Ce({amplitude:e=1,period:n=.4}={}){let t=Math.max(1,e),o=Math.max(.1,n),r=t<=1?o/4:o/(2*Math.PI)*Math.asin(1/t);return i=>i<=0?0:i>=1?1:t*Math.pow(2,-10*i)*Math.sin((i-r)*(2*Math.PI)/o)+1}var W={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:Pe(),bounce:Ne(),elastic:Ce()};function Ve(e,n,t,o){let r=(i,a,u)=>((1+3*i-3*a)*u+3*a-6*i)*u*u+3*i*u;return i=>{if(i<=0||i>=1)return +(i>0);let a=i;for(let u=0;u<8;u++)a-=(r(e,t,a)-i)/((3*(1+3*e-3*t)*a+6*t-12*e)*a+3*e);if(!(a>=0&&a<=1&&Math.abs(r(e,t,a)-i)<1e-9))for(let u=0,b=0,l=1;u<30;u++)a=(b+l)/2,r(e,t,a)<i?b=a:l=a;return r(n,o,a)}}function We(e){let n=/^cubic-bezier\((.*)\)$/.exec(e==="ease"?"cubic-bezier(.25,.1,.25,1)":e.trim()),t=n?n[1].split(",").map(parseFloat):[];if(t.length===4&&t.every(Number.isFinite)&&t[0]*(1-t[0])>=0&&t[2]*(1-t[2])>=0)return [Ve(t[0],t[1],t[2],t[3]),`cubic-bezier(${t})`]}var fe=new Set;function pe(e,n="linear"){if(typeof e=="function")return e;if(e==null)return W[n];if({}.hasOwnProperty.call(W,e))return W[e];let t=We(String(e));return t?t[0]:(!fe.has(e)&&fe.add(e)&&V(`Unknown easing ${JSON.stringify(e)}: use a name, cubic-bezier() or a function.`),W[n])}function be(e,n,t){return Math.min(t,Math.max(n,e))}function ne(e="top bottom"){let n=e.trim();if(/^\d+(\.\d+)?%$/.test(n))return {element:"top",viewport:n};let[t="top",o="bottom"]=n.split(/\s+/).filter(Boolean);return {element:t,viewport:o}}var ye=(e,n)=>e==="top"?0:e==="center"?.5:e==="bottom"?1:n;function ge(e,n,t,o){return e+t+n*ye(o,0)}function he(e,n){return n*(/^\d+(\.\d+)?%$/.test(e)?parseFloat(e)/100:ye(e,1))}function Q(e,n,t,o){return t===n?0:be((e-n)/(t-n)*o,0,1)}function ve(e,n,t,o,r){let i=ge(e.top,e.height,n,o.element)-he(o.viewport,t),a=ge(e.top,e.height,n,r.element)-he(r.viewport,t);return {tStart:i,tEnd:a}}function re(e){let n=parseFloat(e.getAttribute("pathLength")??"");if(n>0)return n;let t=e.tagName.toLowerCase();if(t==="rect"){let o=parseFloat(e.getAttribute("width")??"0"),r=parseFloat(e.getAttribute("height")??"0");return 2*(o+r)}if(t==="circle"){let o=parseFloat(e.getAttribute("r")??"0");return 2*Math.PI*o}return e.getTotalLength()}function oe(e){return `${e} ${e*2}`}function we(){return typeof window>"u"||typeof window.matchMedia!="function"?false:window.matchMedia("(prefers-reduced-motion: reduce)").matches}function Ee(e){if(typeof window>"u"||typeof window.matchMedia!="function")return ()=>{};let n=window.matchMedia("(prefers-reduced-motion: reduce)"),t=r=>e(!!r.matches);if(typeof n.addEventListener=="function")return n.addEventListener("change",t),()=>n.removeEventListener("change",t);let o=n;return o.addListener?.(t),()=>o.removeListener?.(t)}var xe=Symbol.for("svg-scroll-draw.registry");function Me(){let e=globalThis;return e[xe]||(e[xe]=new Map)}function Le(e,n){Me().set(e,n);}function Se(e){Me().delete(e);}var k,q=new Set,B=new WeakMap,A=new Map,Te=e=>{let n=e.getBoundingClientRect();return n.width+" "+n.height};function Qe(e){let n=new Set;for(let t of e)for(;t&&t!==document.body;t=t.parentElement)for(let o=t;o;o=o.previousElementSibling)n.add(o);return n}function Re(e,n){if(typeof ResizeObserver>"u"||typeof document>"u")return ()=>{};let t=()=>n();k??(k=new ResizeObserver(r=>{let i=false;for(let{target:a}of r)B.get(a)!==Te(a)&&(i=true),B.set(a,"");i&&q.forEach(a=>a());})),q.add(t);let o=Qe(e);return [document.body,document.documentElement].forEach(r=>r&&o.add(r)),o.forEach(r=>{B.has(r)||B.set(r,Te(r)),A.set(r,(A.get(r)??0)+1),k.observe(r);}),()=>{q.delete(t)&&(o.forEach(r=>{let i=(A.get(r)??1)-1;if(i)return void A.set(r,i);A.delete(r),k?.unobserve(r);}),q.size||(k?.disconnect(),k=void 0));}}function De(e,n,t,o,r){let i,a=NaN,u,b,l=()=>{i=0,o(),!u&&!i&&(a=t())>0&&a<1&&(i=requestAnimationFrame(l));},d=()=>{!i&&!u&&t()!==a&&(i=requestAnimationFrame(l));},h=M=>{u=M,cancelAnimationFrame(i),i=a=NaN,d();},v=()=>{clearTimeout(b),r(),d();},x=()=>{clearTimeout(b),b=setTimeout(v,150);},H=Re(n,x),I=M=>{e[M]("scroll",d,{passive:true}),window[M]("resize",x),window[M]("orientationchange",x);};return I("addEventListener"),d(),{hold:h,remeasure:v,off(){h(true),I("removeEventListener"),H(),clearTimeout(b);}}}var _e=["#ff90e8","#ffc900","#5865F2","#22c55e","#f59e0b","#ef4444","#aaa","#60a5fa"];function ft(e,n){let t={destroy:()=>{},replay:()=>{},pause:()=>{},resume:()=>{},seek:()=>{},getProgress:()=>0};if(typeof window>"u")return t;let o=typeof e=="string"?document.querySelector(e):e;if(!o)return V("timeline: Container not found:",e),t;let r=o,{trigger:i={},speed:a=1,once:u=false,axis:b="y",tracks:l,onComplete:d,repeat:h,repeatDelay:v=0,loop:x=false,loopDuration:H=1500,debug:I=false,label:M,respectReducedMotion:ie=true}=n,$e=ne(i.start||"top bottom"),ke=ne(i.end||"bottom top"),F=h==="infinite"?1/0:h??0,g,j=false,Y=x===true?1/0:typeof x=="number"?x:0,y=false,U=0,T=Y,J=ie&&we(),Ae=Ee(s=>{J=ie&&s,J&&(y=false,clearTimeout(g),g=void 0);}),K=()=>Y>0&&!J,X=new Map,Z=l.map(s=>{let m=pe(s.easing),p=Array.from(r.querySelectorAll(s.selector)),f=p.map(c=>re(c));return p.forEach((c,w)=>{X.has(c)||X.set(c,c.getAttribute("style")??""),c.style.strokeDasharray=oe(f[w]),c.style.strokeDashoffset=`${f[w]}`,s.fade&&(c.style.opacity="0");}),{...s,elements:p,lengths:f,easeFn:m}});function Ie(){for(let[s,m]of X)m?s.setAttribute("style",m):s.removeAttribute("style");}let z=0,O=0,se=0,ae=0,R=false,_=false,$=-1,L=0,E=null;I&&(E=document.createElement("div"),Object.assign(E.style,{position:"fixed",bottom:"16px",left:"16px",zIndex:"9999",background:"rgba(0,0,0,0.88)",backdropFilter:"blur(8px)",border:"1px solid rgba(255,255,255,0.1)",borderRadius:"10px",padding:"10px 14px",fontFamily:"monospace",fontSize:"11px",color:"#fff",minWidth:"240px",pointerEvents:"none",lineHeight:"1.4"}),document.body.appendChild(E));function Fe(s){if(!E)return;let m=M??(typeof e=="string"?e:"timeline"),p=l.map(({selector:f,from:c,to:w},te)=>{let D=_e[te%_e.length],N=w>c?Math.min(1,Math.max(0,(s-c)/(w-c))):0,C=Math.round(N*100);return `<div style="margin:4px 0">
|
|
2
2
|
<div style="display:flex;justify-content:space-between;align-items:center;margin-bottom:2px">
|
|
3
|
-
<span style="color:${D};max-width:160px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap">${
|
|
4
|
-
<span style="color:#666;margin-left:8px">${
|
|
3
|
+
<span style="color:${D};max-width:160px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap">${f}</span>
|
|
4
|
+
<span style="color:#666;margin-left:8px">${C}%</span>
|
|
5
5
|
</div>
|
|
6
6
|
<div style="height:3px;background:#2a2a2a;border-radius:2px;position:relative;overflow:hidden">
|
|
7
|
-
<div style="position:absolute;left:${
|
|
8
|
-
<div style="position:absolute;left:${
|
|
7
|
+
<div style="position:absolute;left:${c*100}%;width:${(w-c)*100}%;height:100%;background:${D}33;border-radius:2px"></div>
|
|
8
|
+
<div style="position:absolute;left:${c*100}%;width:${(w-c)*N*100}%;height:100%;background:${D};border-radius:2px;transition:width 0.05s linear"></div>
|
|
9
9
|
</div>
|
|
10
|
-
</div>`}).join("");
|
|
10
|
+
</div>`}).join("");E.innerHTML=`
|
|
11
11
|
<div style="color:#555;margin-bottom:8px;font-size:10px;text-transform:uppercase;letter-spacing:0.12em;border-bottom:1px solid rgba(255,255,255,0.06);padding-bottom:6px">
|
|
12
|
-
scrollDrawTimeline \xB7 ${
|
|
12
|
+
scrollDrawTimeline \xB7 ${m}
|
|
13
13
|
</div>
|
|
14
14
|
${p}
|
|
15
15
|
<div style="margin-top:6px;padding-top:6px;border-top:1px solid rgba(255,255,255,0.06)">
|
|
16
16
|
<div style="display:flex;justify-content:space-between;margin-bottom:2px">
|
|
17
17
|
<span style="color:#555">scroll</span>
|
|
18
|
-
<span style="color:#666">${Math.round(
|
|
18
|
+
<span style="color:#666">${Math.round(s*100)}%</span>
|
|
19
19
|
</div>
|
|
20
20
|
<div style="height:2px;background:#2a2a2a;border-radius:1px;overflow:hidden">
|
|
21
|
-
<div style="height:100%;background:#fff;border-radius:1px;width:${
|
|
21
|
+
<div style="height:100%;background:#fff;border-radius:1px;width:${s*100}%;transition:width 0.05s linear"></div>
|
|
22
22
|
</div>
|
|
23
|
-
</div>`;}function
|
|
23
|
+
</div>`;}function G(){return b==="x"?window.scrollX:window.scrollY}function ue(){return b==="x"?window.innerWidth:window.innerHeight}function ce(){let s=r.getBoundingClientRect(),m=G(),p=b==="x"?s.left:s.top,f=b==="x"?s.width:s.height,c=ve({top:p,height:f},m,ue(),$e,ke);z=c.tStart,O=c.tEnd,se=p+m-ue(),ae=p+m+f;}function le(s){r.style.setProperty("--scroll-draw-progress",String(s)),Z.forEach(({elements:m,lengths:p,from:f,to:c,easeFn:w,fade:te})=>{let D=c-f,N=D>0?Math.min(1,Math.max(0,(s-f)/D)):0,C=w(N);m.forEach((me,Oe)=>{me.style.strokeDashoffset=`${p[Oe]*(1-C)}`,te&&(me.style.opacity=String(C));});}),Fe(s);}function P(){j=false,$=-1,L=0,_=false,Z.forEach(({elements:s,lengths:m,fade:p})=>{s.forEach((f,c)=>{f.style.strokeDashoffset=`${m[c]}`,p&&(f.style.opacity="0");});}),r.style.setProperty("--scroll-draw-progress","0");}function de(){return y?Q(G(),se,ae,1):Q(G(),z,O,Math.min(a,1))}function ze(){j&&de()%1&&P();let s;y?s=Math.min(1,(performance.now()-U)/H):(s=Q(G(),z,O,a),(u||K())&&($=Math.max($,s),s=$)),L=s,le(s),s>=1&&!_?(_=true,d?.(),K()&&!y&&!g?g=setTimeout(()=>{g=void 0,T!==1/0&&T--,P(),y=true,U=performance.now(),S();},v):F>0&&u&&!y&&!g&&(g=setTimeout(()=>{g=void 0,F!==1/0&&F--,j=true;},v))):!y&&s<1&&!u&&(_=false),y&&s>=1&&!g&&(_=false,T>0&&K()?g=setTimeout(()=>{g=void 0,T!==1/0&&T--,P(),U=performance.now(),S();},v):y=false);}ce();let ee=De(window,[r],de,ze,()=>{Z.forEach(({elements:s,lengths:m})=>{s.forEach((p,f)=>{m[f]=re(p),p.style.strokeDasharray=oe(m[f]);});}),ce();}),S=()=>ee.hold(R);return S(),Le(r,{type:"draw",getProgress:()=>L,getTrigger:()=>({tStart:z,tEnd:O})}),{destroy(){ee.off(),clearTimeout(g),Se(r),Ae(),E&&(E.remove(),E=null),Ie(),r.style.removeProperty("--scroll-draw-progress");},refresh:ee.remeasure,replay(){F=h==="infinite"?1/0:h??0,T=Y,y=false,clearTimeout(g),g=void 0,P(),R=false,S();},pause(){R=true,S();},resume(){R&&(R=false,S());},seek(s){L=Math.min(1,Math.max(0,s)),$=L,R=true,S(),le(L);},getProgress(){return L}}}exports.scrollDrawTimeline=ft;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { E as
|
|
1
|
+
import { E as Easing, S as ScrollDrawInstance } from '../types-iITMwrru.mjs';
|
|
2
2
|
|
|
3
3
|
interface TimelineTrack {
|
|
4
4
|
/** CSS selector for paths within the container to animate on this track. */
|
|
@@ -8,7 +8,7 @@ interface TimelineTrack {
|
|
|
8
8
|
/** Progress value (0–1) within the overall scroll range where this track ends. */
|
|
9
9
|
to: number;
|
|
10
10
|
/** Easing for this track. Defaults to 'linear'. */
|
|
11
|
-
easing?:
|
|
11
|
+
easing?: Easing;
|
|
12
12
|
/** Fade opacity in sync with this track's draw progress. */
|
|
13
13
|
fade?: boolean;
|
|
14
14
|
}
|