svg-scroll-draw 2.2.0 → 2.6.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 +7 -7
- package/dist/angular/index.cjs +3 -3
- package/dist/angular/index.d.mts +178 -9
- package/dist/angular/index.d.ts +178 -9
- package/dist/angular/index.mjs +3 -3
- package/dist/astro/index.cjs +3 -3
- package/dist/astro/index.d.mts +70 -1
- package/dist/astro/index.d.ts +70 -1
- package/dist/astro/index.mjs +3 -3
- package/dist/devtools/index.d.mts +12 -0
- package/dist/devtools/index.d.ts +12 -0
- package/dist/group/index.cjs +3 -3
- package/dist/group/index.d.mts +72 -1
- package/dist/group/index.d.ts +72 -1
- package/dist/group/index.mjs +3 -3
- package/dist/nuxt/index.cjs +3 -3
- package/dist/nuxt/index.d.mts +270 -5
- package/dist/nuxt/index.d.ts +270 -5
- package/dist/nuxt/index.mjs +3 -3
- package/dist/solid/index.cjs +3 -3
- package/dist/solid/index.d.mts +155 -1
- package/dist/solid/index.d.ts +155 -1
- package/dist/solid/index.mjs +3 -3
- package/dist/svelte/index.cjs +3 -3
- package/dist/svelte/index.d.mts +167 -10
- package/dist/svelte/index.d.ts +167 -10
- package/dist/svelte/index.mjs +3 -3
- package/dist/vue/index.cjs +3 -3
- package/dist/vue/index.d.mts +262 -1
- package/dist/vue/index.d.ts +262 -1
- package/dist/vue/index.mjs +3 -3
- package/package.json +1 -1
package/dist/nuxt/index.mjs
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import {defineComponent,ref,onMounted,onUnmounted,h}from'vue';function
|
|
2
|
-
<div style="position:absolute;${
|
|
3
|
-
<div style="position:absolute;${M?`left:${E}px;top:0;bottom:0;border-left:2px dashed #ef4444;`:`top:${E}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",p,{passive:true}),p(),r}function Oe(e,n,s){let r=(n.match(/[-+]?(?:\d*\.)?\d+(?:[eE][-+]?\d+)?/g)??[]).map(Number),p=0;return e.replace(/[-+]?(?:\d*\.)?\d+(?:[eE][-+]?\d+)?/g,h=>{let L=parseFloat(h),E=r[p++]??L;return String(+(L+(E-L)*s).toFixed(4))})}function Fe(e,n={}){if(typeof window>"u")return {destroy:()=>{},replay:()=>{},pause:()=>{},resume:()=>{},seek:()=>{},getProgress:()=>0};let{preset:s,...r}=n,p=s?{..._e[s],...r}:r,h=window.matchMedia("(prefers-reduced-motion: reduce)").matches,{selector:L="path, polyline, line, polygon, rect, circle",speed:E=1,fade:M=false,easing:d="linear",trigger:S={},stagger:B=0,direction:y="forward",once:K=false,debug:Qe=false,axis:N="y",scrollContainer:xe,autoReverse:me=false,delay:ue=0,strokeColor:Q,strokeWidth:Y,fillOpacity:Z,waypoints:ee,velocityScale:pe=false,threshold:Ie=0,rootMargin:Re="0px",repeat:te=0,repeatDelay:$e=0,morphTo:H,clip:Me,autoplay:Ye=false,duration:Ze=1e3,native:et=true,onProgress:ce,onStart:de,onComplete:ae}=p,_=Me===true?"left":typeof Me=="string"?Me:false,re=typeof d=="function"?d:De[d]??De.linear,Ne=Pe(S.start??"top bottom"),He=Pe(S.end??"bottom top"),O=typeof xe=="string"?document.querySelector(xe):xe??null,W=Array.isArray(Q)?Q[0]:null,T=Array.isArray(Q)?Q[1]:typeof Q=="string"?Q:null,F=Array.isArray(Y)?Y[0]:null,A=Array.isArray(Y)?Y[1]:typeof Y=="number"?Y:null,C=Array.isArray(Z)?Z[0]:null,k=Array.isArray(Z)?Z[1]:typeof Z=="number"?Z:null;function ne(t){let o=t*100;switch(_){case "right":return `inset(0 0 0 ${100-o}%)`;case "top":return `inset(0 0 ${100-o}% 0)`;case "bottom":return `inset(${100-o}% 0 0 0)`;case "center":return `circle(${t*150}% at 50% 50%)`;default:return `inset(0 ${100-o}% 0 0)`}}let x=_?[]:Array.from(e.querySelectorAll(L)),w=[],z=[],U=0,X=0,$=false,R=false,v=0,ye=false,q=-1,ge=-1,D=false,se=0,G=0,j,Te=null,J=new Set,he=-1,We=performance.now();function fe(){return O?N==="x"?O.scrollLeft:O.scrollTop:N==="x"?window.scrollX:window.scrollY}function ze(){return O?N==="x"?O.clientWidth:O.clientHeight:N==="x"?window.innerWidth:window.innerHeight}function qe(){let t=e.getBoundingClientRect(),o,l,g;if(O){let P=O.getBoundingClientRect();o=N==="x"?t.left-P.left+O.scrollLeft:t.top-P.top+O.scrollTop,l=N==="x"?t.width:t.height,g=fe();}else o=N==="x"?t.left:t.top,l=N==="x"?t.width:t.height,g=fe();let I=Le({top:o,height:l},g,ze(),Ne,He);U=I.tStart,X=I.tEnd,Qe&&process.env.NODE_ENV!=="production"&&(Te?.remove(),Te=ft(U,X,N));}function tt(t,o){if(e.style.setProperty("--scroll-draw-progress",String(t)),_){let l=o==="reverse"?1-t:t;e.style.clipPath=ne(l);return}x.forEach((l,g)=>{l.style.strokeDashoffset=o==="reverse"?`${w[g]*t}`:`${w[g]*(1-t)}`,M&&(l.style.opacity=o==="reverse"?`${1-t}`:`${t}`),W&&T?l.style.stroke=Ee(W,T,t):T&&(l.style.stroke=T),F!==null&&A!==null?l.style.strokeWidth=`${F+(A-F)*t}`:A!==null&&(l.style.strokeWidth=`${A}`),C!==null&&k!==null?l.style.fillOpacity=`${C+(k-C)*t}`:k!==null&&(l.style.fillOpacity=`${k}`),H&&l.tagName.toLowerCase()==="path"&&z[g]&&l.setAttribute("d",Oe(z[g],H,t));});}function be(){if(e.style.setProperty("--scroll-draw-progress","0"),_){e.style.clipPath=ne(0);return}x.forEach((t,o)=>{t.style.strokeDasharray=`${w[o]}`,t.style.strokeDashoffset=y==="reverse"?"0":`${w[o]}`,M?t.style.opacity=y==="reverse"?"1":"0":t.style.opacity="",W&&(t.style.stroke=W),F!==null&&(t.style.strokeWidth=`${F}`),C!==null&&(t.style.fillOpacity=`${C}`),H&&t.tagName.toLowerCase()==="path"&&z[o]&&t.setAttribute("d",z[o]);});}if(x.forEach(t=>{ct(t);let o=Se(t);w.push(o),t.tagName.toLowerCase()==="path"?z.push(t.getAttribute("d")??""):z.push(""),h?(t.style.strokeDasharray=`${o}`,t.style.strokeDashoffset=y==="reverse"?`${o}`:"0",M&&(t.style.opacity="1"),T&&(t.style.stroke=T),A!==null&&(t.style.strokeWidth=`${A}`),k!==null&&(t.style.fillOpacity=`${k}`),H&&t.tagName.toLowerCase()==="path"&&t.setAttribute("d",H)):(t.style.strokeDasharray=`${o}`,t.style.strokeDashoffset=y==="reverse"?"0":`${o}`,M?t.style.opacity=y==="reverse"?"1":"0":t.style.opacity="",W&&(t.style.stroke=W),F!==null&&(t.style.strokeWidth=`${F}`),C!==null&&(t.style.fillOpacity=`${C}`));}),_){if(h)return e.style.clipPath=ne(1),ae?.(),{destroy:()=>{},replay:()=>{},pause:()=>{},resume:()=>{},seek:()=>{},getProgress:()=>1};e.style.clipPath=ne(0);}else if(h)return ae?.(),{destroy:()=>{},replay:()=>{},pause:()=>{},resume:()=>{},seek:()=>{},getProgress:()=>1};function rt(){return !(et===false||!ut()||!x.length||typeof d!="string"||!(d in Xe)||_||N!=="y"||O||E!==1||B!==0||K||me||pe!==false||H||ee||te||ue>0||ce||de||ae||Q!=null||Y!=null||Z!=null||(S.start??"top bottom").trim()!=="top bottom"||(S.end??"bottom top").trim()!=="bottom top")}function nt(){let t=`svg-scroll-draw-${++lt}`,o=y==="reverse"?"0":"var(--ssd-len)",l=y==="reverse"?"var(--ssd-len)":"0",g=`stroke-dashoffset:${o};`,I=`stroke-dashoffset:${l};`;M&&(g+=`opacity:${y==="reverse"?1:0};`,I+=`opacity:${y==="reverse"?0:1};`);let P=document.createElement("style");P.setAttribute("data-svg-scroll-draw",""),P.textContent=`@keyframes ${t}{from{${g}}to{${I}}}.${t}{animation-name:${t};animation-duration:auto;animation-timing-function:${Xe[d]};animation-fill-mode:both;animation-timeline:view();animation-range:cover 0% cover 100%;}`,document.head.appendChild(P);function a(i,c){i.style.setProperty("--ssd-len",String(w[c])),i.style.strokeDasharray=`${w[c]}`,i.style.strokeDashoffset="",i.style.opacity="",i.style.animationPlayState="",i.classList.add(t);}x.forEach(a);let f=false,b=-1;function u(){if(b>=0)return b;let i=e.getBoundingClientRect(),{tStart:c,tEnd:m}=Le({top:i.top,height:i.height},fe(),ze(),Ne,He);return re(ie(fe(),c,m,E))}return {destroy(){x.forEach(i=>{i.classList.remove(t),i.style.removeProperty("--ssd-len"),i.style.animationPlayState="";}),P.remove();},replay(){f=false,b=-1,x.forEach(a);},pause(){f=true,x.forEach(i=>{i.style.animationPlayState="paused";});},resume(){f&&(f=false,x.forEach(i=>{i.style.animationPlayState="running";}));},seek(i){let c=Math.min(1,Math.max(0,i));b=c,f=true,x.forEach((m,oe)=>{m.classList.remove(t),m.style.strokeDashoffset=y==="reverse"?`${w[oe]*c}`:`${w[oe]*(1-c)}`,M&&(m.style.opacity=y==="reverse"?`${1-c}`:`${c}`);});},getProgress(){return u()}}}if(rt())return nt();function st(){let t=Math.max(1,Ze),o=0,l=0;function g(u){let i=true;if(_){let c=Math.min(1,Math.max(0,u/t)),m=re(c);se=m,e.style.setProperty("--scroll-draw-progress",String(m)),e.style.clipPath=ne(y==="reverse"?1-m:m),ce?.(m),c<1&&(i=false);}else x.forEach((c,m)=>{let oe=m*B*t,le=Math.min(1,Math.max(0,(u-oe)/t)),V=re(le);c.style.strokeDashoffset=y==="reverse"?`${w[m]*V}`:`${w[m]*(1-V)}`,M&&(c.style.opacity=y==="reverse"?`${1-V}`:`${V}`),W&&T?c.style.stroke=Ee(W,T,V):T&&(c.style.stroke=T),F!==null&&A!==null?c.style.strokeWidth=`${F+(A-F)*V}`:A!==null&&(c.style.strokeWidth=`${A}`),C!==null&&k!==null?c.style.fillOpacity=`${C+(k-C)*V}`:k!==null&&(c.style.fillOpacity=`${k}`),H&&c.tagName.toLowerCase()==="path"&&z[m]&&c.setAttribute("d",Oe(z[m],H,V)),m===0&&(ce?.(V),e.style.setProperty("--scroll-draw-progress",String(V))),le<1&&(i=false);});if(ee){let c=Math.min(1,Math.max(0,u/t)),m=re(c);for(let oe in ee){let le=parseFloat(oe);m>=le&&!J.has(le)&&(J.add(le),ee[oe]?.());}}return i}function I(u){if(D)return;let i=u-o;R||(R=true,de?.());let c=g(i);if(c&&!$){$=true,g(t*(1+Math.max(0,x.length-1)*B)),ae?.(),G<(te==="infinite"?1/0:te??0)&&(G++,j=setTimeout(()=>{o=performance.now(),R=false,$=false,J.clear(),be(),v=requestAnimationFrame(I);},$e));return}c||(v=requestAnimationFrame(I));}function P(){cancelAnimationFrame(v),clearTimeout(j),o=performance.now(),l=0,D=false,R=false,$=false,G=0,J.clear(),be(),v=requestAnimationFrame(I);}let a=new IntersectionObserver(u=>{u.forEach(i=>{i.isIntersecting&&!(K&&$)?P():!i.isIntersecting&&!K&&!$&&(cancelAnimationFrame(v),clearTimeout(j),o=null);});},{root:O??null,threshold:Ie,rootMargin:Re}),f;function b(){clearTimeout(f),f=setTimeout(()=>{x.forEach((u,i)=>{w[i]=Se(u),u.style.strokeDasharray=`${w[i]}`;});},150);}return window.addEventListener("resize",b),window.addEventListener("orientationchange",b),ue>0?setTimeout(()=>a.observe(e),ue):a.observe(e),{destroy(){cancelAnimationFrame(v),clearTimeout(j),a.disconnect(),window.removeEventListener("resize",b),window.removeEventListener("orientationchange",b),clearTimeout(f);},replay(){G=0,P();},pause(){D||(D=true,l=performance.now()-o,cancelAnimationFrame(v));},resume(){D&&(D=false,o=performance.now()-l,v=requestAnimationFrame(I));},seek(u){let i=Math.min(1,Math.max(0,u));se=i,D=true,l=i*t,o=performance.now()-l,cancelAnimationFrame(v),g(l);},getProgress(){return se}}}if(Ye)return st();qe();function we(){if(!ye||D)return;let t=performance.now(),o=fe(),l=E;if(pe!==false){let a=t-We,f=a>0?Math.abs(o-(he<0?o:he))/a:0;l=E*Math.max(.2,1+f*(typeof pe=="number"?pe:1)*.04);}he=o,We=t;let g=me?ge===-1||o>=ge?"forward":"reverse":y;ge=o;let I=X-U,P=true;if(_){let a=re(ie(o,U,X,l));K&&!me&&(q=Math.max(q,a),a=q),se=a,e.style.setProperty("--scroll-draw-progress",String(a));let f=g==="reverse"?1-a:a;e.style.clipPath=ne(f),ce?.(a),!R&&ie(o,U,X,l)>0&&(R=true,de?.()),a>=1&&!$?($=true,ae?.(),G<(te==="infinite"?1/0:te??0)&&(G++,j=setTimeout(()=>{q=-1,R=false,$=false,e.style.clipPath=ne(0);},$e))):a<1&&!K&&($=false),v=requestAnimationFrame(we);return}if(x.forEach((a,f)=>{let b=f*B*I,u=re(ie(o,U+b,X+b,l));K&&!me&&(q=Math.max(q,u),u=q),se=u,a.style.strokeDashoffset=g==="reverse"?`${w[f]*u}`:`${w[f]*(1-u)}`,M&&(a.style.opacity=g==="reverse"?`${1-u}`:`${u}`),W&&T?a.style.stroke=Ee(W,T,u):T&&(a.style.stroke=T),F!==null&&A!==null?a.style.strokeWidth=`${F+(A-F)*u}`:A!==null&&(a.style.strokeWidth=`${A}`),C!==null&&k!==null?a.style.fillOpacity=`${C+(k-C)*u}`:k!==null&&(a.style.fillOpacity=`${k}`),H&&a.tagName.toLowerCase()==="path"&&z[f]&&a.setAttribute("d",Oe(z[f],H,u)),f===0&&(ce?.(u),e.style.setProperty("--scroll-draw-progress",String(u))),u<1&&(P=false);}),ee){let a=re(ie(o,U,X,l));for(let f in ee){let b=parseFloat(f);a>=b&&!J.has(b)&&(J.add(b),ee[f]?.());}}!R&&ie(o,U,X,l)>0&&(R=true,de?.()),P&&!$?($=true,ae?.(),G<(te==="infinite"?1/0:te??0)&&(G++,j=setTimeout(()=>{q=-1,R=false,$=false,J.clear(),be();},$e))):!P&&!K&&($=false),v=requestAnimationFrame(we);}let Ae=new IntersectionObserver(t=>{t.forEach(o=>{ye=o.isIntersecting,ye&&!D?v=requestAnimationFrame(we):cancelAnimationFrame(v);});},{root:O??null,threshold:Ie,rootMargin:Re}),ke;function ve(){clearTimeout(ke),ke=setTimeout(()=>{x.forEach((t,o)=>{w[o]=Se(t),t.style.strokeDasharray=`${w[o]}`;}),qe();},150);}return window.addEventListener("resize",ve),window.addEventListener("orientationchange",ve),ue>0?setTimeout(()=>Ae.observe(e),ue):Ae.observe(e),{destroy(){cancelAnimationFrame(v),clearTimeout(j),Ae.disconnect(),window.removeEventListener("resize",ve),window.removeEventListener("orientationchange",ve),clearTimeout(ke),Te?.remove();},replay(){q=-1,ge=-1,he=-1,R=false,$=false,G=0,D=false,J.clear(),clearTimeout(j),be();},pause(){D=true,cancelAnimationFrame(v);},resume(){D&&(D=false,ye&&(v=requestAnimationFrame(we)));},seek(t){let o=Math.min(1,Math.max(0,t));se=o,q=o,D=true,cancelAnimationFrame(v),tt(o,y);},getProgress(){return se}}}function dt(e={}){let n=ref(null);return onMounted(()=>{if(!n.value)return;let s=Fe(n.value,e);onUnmounted(()=>s.destroy());}),n}var Ce=defineComponent({name:"ScrollDraw",props:{selector:{type:String},speed:{type:Number},fade:{type:Boolean},stagger:{type:Number},easing:{type:[String,Function]},direction:{type:String},trigger:{type:Object},onProgress:{type:Function},onStart:{type:Function},onComplete:{type:Function},once:{type:Boolean},debug:{type:Boolean}},setup(e,{slots:n}){let s=ref(null);return onMounted(()=>{if(!s.value)return;let r={};e.selector!=null&&(r.selector=e.selector),e.speed!=null&&(r.speed=e.speed),e.fade!=null&&(r.fade=e.fade),e.stagger!=null&&(r.stagger=e.stagger),e.easing!=null&&(r.easing=e.easing),e.direction!=null&&(r.direction=e.direction),e.trigger!=null&&(r.trigger=e.trigger),e.once!=null&&(r.once=e.once),e.debug!=null&&(r.debug=e.debug),e.onProgress!=null&&(r.onProgress=e.onProgress),e.onStart!=null&&(r.onStart=e.onStart),e.onComplete!=null&&(r.onComplete=e.onComplete);let p=Fe(s.value,r);onUnmounted(()=>p.destroy());}),()=>h("div",{ref:s},n.default?.())}});function $t(){return {install(e){e.component("ScrollDraw",Ce);}}}export{Ce as ScrollDraw,$t as createScrollDrawPlugin,dt as useScrollDraw};
|
|
1
|
+
import {defineComponent,ref,onMounted,onUnmounted,h}from'vue';function Mt({bounces:e=3,decay:r=.5}={}){let n=Math.max(1,Math.round(e)),t=Math.max(.01,Math.min(.99,r)),l=Math.sqrt(t),s=0,m=[];for(let d=0;d<n;d++){let F=Math.pow(l,d);m.push(F),s+=F;}let c=[0],u=0;for(let d=0;d<n;d++)u+=m[d]/s,c.push(u);return d=>{if(d<=0)return 0;if(d>=1)return 1;for(let F=0;F<n;F++)if(d<=c[F+1]){let B=(d-c[F])/(c[F+1]-c[F]);if(F===0)return B*(2-B);let S=1-Math.pow(t,F);return S+(1-S)*(2*B-1)*(2*B-1)}return 1}}function Ct({amplitude:e=1,period:r=.4}={}){let n=Math.max(1,e),t=Math.max(.1,r),l=n<=1?t/4:t/(2*Math.PI)*Math.asin(1/n);return s=>s<=0?0:s>=1?1:n*Math.pow(2,-10*s)*Math.sin((s-l)*(2*Math.PI)/t)+1}var ae={linear:e=>e,"ease-in":e=>e*e,"ease-out":e=>e*(2-e),"ease-in-out":e=>e<.5?2*e*e:-1+(4-2*e)*e,spring:e=>1-Math.cos(e*Math.PI*2.5)*Math.pow(1-e,2.2),bounce:Mt(),elastic:Ct()};function le(e="top bottom"){let r=e.trim();if(/^\d+(\.\d+)?%$/.test(r))return {element:"top",viewport:r};let[n="top",t="bottom"]=r.split(/\s+/).filter(Boolean);return {element:n,viewport:t}}function lt(e,r,n,t){switch(t){case "top":return e+n;case "center":return e+n+r/2;case "bottom":return e+n+r;default:return e+n}}function ct(e,r){if(/^\d+(\.\d+)?%$/.test(e))return r*(parseFloat(e)/100);switch(e){case "top":return 0;case "center":return r/2;case "bottom":return r;default:return r}}function _e(e){let r=e.tagName.toLowerCase();if(r==="rect"){let n=parseFloat(e.getAttribute("width")??"0"),t=parseFloat(e.getAttribute("height")??"0");return 2*(n+t)}if(r==="circle"){let n=parseFloat(e.getAttribute("r")??"0");return 2*Math.PI*n}return e.getTotalLength()}function $t(e,r,n){return Math.min(n,Math.max(r,e))}function J(e,r,n,t){return n===r?0:$t((e-r)/(n-r)*t,0,1)}function pe(e,r,n,t,l){let s=lt(e.top,e.height,r,t.element)-ct(t.viewport,n),m=lt(e.top,e.height,r,l.element)-ct(l.viewport,n);return {tStart:s,tEnd:m}}function ut(e){let r=/^#([a-f\d])([a-f\d])([a-f\d])$/i.exec(e);if(r)return [parseInt(r[1]+r[1],16),parseInt(r[2]+r[2],16),parseInt(r[3]+r[3],16)];let n=/^#([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(e);if(n)return [parseInt(n[1],16),parseInt(n[2],16),parseInt(n[3],16)];let t=/^rgb\(\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*\)$/i.exec(e);return t?[parseInt(t[1]),parseInt(t[2]),parseInt(t[3])]:null}function De(e,r,n){let t=ut(e),l=ut(r);return !t||!l?e:`rgb(${Math.round(t[0]+(l[0]-t[0])*n)},${Math.round(t[1]+(l[1]-t[1])*n)},${Math.round(t[2]+(l[2]-t[2])*n)})`}var mt={sketch:{easing:"ease-in",stagger:.1,speed:.9,fade:false},reveal:{easing:"ease-out",fade:true,speed:1.2,once:true},typewriter:{easing:"linear",stagger:.05,speed:1.5},cinematic:{easing:"ease-in-out",fade:true,speed:.75},spring:{easing:"spring",speed:1.1}};function ft(e,r){process.env.NODE_ENV!=="production"&&console.warn(`[svg-scroll-draw] ${e}`,r);}var pt={linear:"linear","ease-in":"ease-in","ease-out":"ease-out","ease-in-out":"ease-in-out"},Lt=0;function Pt(){return typeof CSS<"u"&&typeof CSS.supports=="function"&&CSS.supports("animation-timeline: view()")}function Ot(e){let r=e.getAttribute("stroke"),n=e.getAttribute("fill");!r||r==="none"?ft("Element has no stroke \u2014 path will not be visible.",e):n&&n!=="none"&&n!=="transparent"&&ft("Element has a fill \u2014 it may obscure the stroke animation.",e);}function Ft(e,r,n){let t=document.createElement("div");t.setAttribute("data-svg-scroll-draw-debug",""),t.style.cssText="position:fixed;pointer-events:none;z-index:9999;font-family:monospace;font-size:11px;top:0;left:0;right:0;bottom:0;";function l(){let s=n==="x"?window.scrollX:window.scrollY,m=e-s,c=r-s,u=n==="x";t.innerHTML=`
|
|
2
|
+
<div style="position:absolute;${u?`left:${m}px;top:0;bottom:0;border-left:2px dashed #22c55e;`:`top:${m}px;left:0;right:0;border-top:2px dashed #22c55e;`}padding:2px 6px;color:#22c55e;background:rgba(0,0,0,.6)">\u25B6 start</div>
|
|
3
|
+
<div style="position:absolute;${u?`left:${c}px;top:0;bottom:0;border-left:2px dashed #ef4444;`:`top:${c}px;left:0;right:0;border-top:2px dashed #ef4444;`}padding:2px 6px;color:#ef4444;background:rgba(0,0,0,.6)">\u25A0 end</div>`;}return document.body.appendChild(t),window.addEventListener("scroll",l,{passive:true}),l(),t}function Xe(e,r,n){let t=(r.match(/[-+]?(?:\d*\.)?\d+(?:[eE][-+]?\d+)?/g)??[]).map(Number),l=0;return e.replace(/[-+]?(?:\d*\.)?\d+(?:[eE][-+]?\d+)?/g,s=>{let m=parseFloat(s),c=t[l++]??m;return String(+(m+(c-m)*n).toFixed(4))})}function Ye(e,r={}){if(typeof window>"u")return {destroy:()=>{},replay:()=>{},pause:()=>{},resume:()=>{},seek:()=>{},getProgress:()=>0};let{preset:n,...t}=r,l=n?{...mt[n],...t}:t,s=window.matchMedia("(prefers-reduced-motion: reduce)").matches,{selector:m="path, polyline, line, polygon, rect, circle",speed:c=1,fade:u=false,easing:d="linear",trigger:F={},stagger:B=0,direction:S="forward",once:ne=false,debug:de=false,axis:q="y",scrollContainer:K,autoReverse:T=false,delay:R=0,strokeColor:A,strokeWidth:C,fillOpacity:$,waypoints:b,velocityScale:L=false,threshold:D=0,rootMargin:I="0px",repeat:M=0,repeatDelay:V=0,morphTo:P,clip:_,autoplay:Q=false,duration:Y=1e3,native:se=true,onProgress:p,onStart:O,onComplete:y}=l,f=_===true?"left":typeof _=="string"?_:false,k=typeof d=="function"?d:ae[d]??ae.linear,ge=le(F.start??"top bottom"),a=le(F.end??"bottom top"),g=typeof K=="string"?document.querySelector(K):K??null,re=Array.isArray(A)?A[0]:null,z=Array.isArray(A)?A[1]:typeof A=="string"?A:null,U=Array.isArray(C)?C[0]:null,oe=Array.isArray(C)?C[1]:typeof C=="number"?C:null,N=Array.isArray($)?$[0]:null,G=Array.isArray($)?$[1]:typeof $=="number"?$:null;function me(o){let i=o*100;switch(f){case "right":return `inset(0 0 0 ${100-i}%)`;case "top":return `inset(0 0 ${100-i}% 0)`;case "bottom":return `inset(${100-i}% 0 0 0)`;case "center":return `circle(${o*150}% at 50% 50%)`;default:return `inset(0 ${100-i}% 0 0)`}}let ee=f?[]:Array.from(e.querySelectorAll(m)),j=[],he=[],Te=0,Ae=0,ie=false,ye=false,te=0,Ne=false,be=-1,He=-1,ce=false,Pe=0,xe=0,Me,Be=null,Ce=new Set,Ve=-1,st=performance.now();function ke(){return g?q==="x"?g.scrollLeft:g.scrollTop:q==="x"?window.scrollX:window.scrollY}function it(){return g?q==="x"?g.clientWidth:g.clientHeight:q==="x"?window.innerWidth:window.innerHeight}function at(){let o=e.getBoundingClientRect(),i,v,X;if(g){let ue=g.getBoundingClientRect();i=q==="x"?o.left-ue.left+g.scrollLeft:o.top-ue.top+g.scrollTop,v=q==="x"?o.width:o.height,X=ke();}else i=q==="x"?o.left:o.top,v=q==="x"?o.width:o.height,X=ke();let fe=pe({top:i,height:v},X,it(),ge,a);Te=fe.tStart,Ae=fe.tEnd,de&&process.env.NODE_ENV!=="production"&&(Be?.remove(),Be=Ft(Te,Ae,q));}function Et(o,i){if(e.style.setProperty("--scroll-draw-progress",String(o)),f){let v=i==="reverse"?1-o:o;e.style.clipPath=me(v);return}ee.forEach((v,X)=>{v.style.strokeDashoffset=i==="reverse"?`${j[X]*o}`:`${j[X]*(1-o)}`,u&&(v.style.opacity=i==="reverse"?`${1-o}`:`${o}`),re&&z?v.style.stroke=De(re,z,o):z&&(v.style.stroke=z),U!==null&&oe!==null?v.style.strokeWidth=`${U+(oe-U)*o}`:oe!==null&&(v.style.strokeWidth=`${oe}`),N!==null&&G!==null?v.style.fillOpacity=`${N+(G-N)*o}`:G!==null&&(v.style.fillOpacity=`${G}`),P&&v.tagName.toLowerCase()==="path"&&he[X]&&v.setAttribute("d",Xe(he[X],P,o));});}function ze(){if(e.style.setProperty("--scroll-draw-progress","0"),f){e.style.clipPath=me(0);return}ee.forEach((o,i)=>{o.style.strokeDasharray=`${j[i]}`,o.style.strokeDashoffset=S==="reverse"?"0":`${j[i]}`,u?o.style.opacity=S==="reverse"?"1":"0":o.style.opacity="",re&&(o.style.stroke=re),U!==null&&(o.style.strokeWidth=`${U}`),N!==null&&(o.style.fillOpacity=`${N}`),P&&o.tagName.toLowerCase()==="path"&&he[i]&&o.setAttribute("d",he[i]);});}if(ee.forEach(o=>{Ot(o);let i=_e(o);j.push(i),o.tagName.toLowerCase()==="path"?he.push(o.getAttribute("d")??""):he.push(""),s?(o.style.strokeDasharray=`${i}`,o.style.strokeDashoffset=S==="reverse"?`${i}`:"0",u&&(o.style.opacity="1"),z&&(o.style.stroke=z),oe!==null&&(o.style.strokeWidth=`${oe}`),G!==null&&(o.style.fillOpacity=`${G}`),P&&o.tagName.toLowerCase()==="path"&&o.setAttribute("d",P)):(o.style.strokeDasharray=`${i}`,o.style.strokeDashoffset=S==="reverse"?"0":`${i}`,u?o.style.opacity=S==="reverse"?"1":"0":o.style.opacity="",re&&(o.style.stroke=re),U!==null&&(o.style.strokeWidth=`${U}`),N!==null&&(o.style.fillOpacity=`${N}`));}),f){if(s)return e.style.clipPath=me(1),y?.(),{destroy:()=>{},replay:()=>{},pause:()=>{},resume:()=>{},seek:()=>{},getProgress:()=>1};e.style.clipPath=me(0);}else if(s)return y?.(),{destroy:()=>{},replay:()=>{},pause:()=>{},resume:()=>{},seek:()=>{},getProgress:()=>1};function xt(){return !(se===false||!Pt()||!ee.length||typeof d!="string"||!(d in pt)||f||q!=="y"||g||c!==1||B!==0||ne||T||L!==false||P||b||M||R>0||p||O||y||A!=null||C!=null||$!=null||(F.start??"top bottom").trim()!=="top bottom"||(F.end??"bottom top").trim()!=="bottom top")}function Tt(){let o=`svg-scroll-draw-${++Lt}`,i=S==="reverse"?"0":"var(--ssd-len)",v=S==="reverse"?"var(--ssd-len)":"0",X=`stroke-dashoffset:${i};`,fe=`stroke-dashoffset:${v};`;u&&(X+=`opacity:${S==="reverse"?1:0};`,fe+=`opacity:${S==="reverse"?0:1};`);let ue=document.createElement("style");ue.setAttribute("data-svg-scroll-draw",""),ue.textContent=`@keyframes ${o}{from{${X}}to{${fe}}}.${o}{animation-name:${o};animation-duration:auto;animation-timing-function:${pt[d]};animation-fill-mode:both;animation-timeline:view();animation-range:cover 0% cover 100%;}`,document.head.appendChild(ue);function w(h,x){h.style.setProperty("--ssd-len",String(j[x])),h.style.strokeDasharray=`${j[x]}`,h.style.strokeDashoffset="",h.style.opacity="",h.style.animationPlayState="",h.classList.add(o);}ee.forEach(w);let H=false,Z=-1;function E(){if(Z>=0)return Z;let h=e.getBoundingClientRect(),{tStart:x,tEnd:W}=pe({top:h.top,height:h.height},ke(),it(),ge,a);return k(J(ke(),x,W,c))}return {destroy(){ee.forEach(h=>{h.classList.remove(o),h.style.removeProperty("--ssd-len"),h.style.animationPlayState="";}),ue.remove();},replay(){H=false,Z=-1,ee.forEach(w);},pause(){H=true,ee.forEach(h=>{h.style.animationPlayState="paused";});},resume(){H&&(H=false,ee.forEach(h=>{h.style.animationPlayState="running";}));},seek(h){let x=Math.min(1,Math.max(0,h));Z=x,H=true,ee.forEach((W,Oe)=>{W.classList.remove(o),W.style.strokeDashoffset=S==="reverse"?`${j[Oe]*x}`:`${j[Oe]*(1-x)}`,u&&(W.style.opacity=S==="reverse"?`${1-x}`:`${x}`);});},getProgress(){return E()}}}if(xt())return Tt();function At(){let o=Math.max(1,Y),i=0,v=0;function X(E){let h=true;if(f){let x=Math.min(1,Math.max(0,E/o)),W=k(x);Pe=W,e.style.setProperty("--scroll-draw-progress",String(W)),e.style.clipPath=me(S==="reverse"?1-W:W),p?.(W),x<1&&(h=false);}else ee.forEach((x,W)=>{let Oe=W*B*o,Fe=Math.min(1,Math.max(0,(E-Oe)/o)),we=k(Fe);x.style.strokeDashoffset=S==="reverse"?`${j[W]*we}`:`${j[W]*(1-we)}`,u&&(x.style.opacity=S==="reverse"?`${1-we}`:`${we}`),re&&z?x.style.stroke=De(re,z,we):z&&(x.style.stroke=z),U!==null&&oe!==null?x.style.strokeWidth=`${U+(oe-U)*we}`:oe!==null&&(x.style.strokeWidth=`${oe}`),N!==null&&G!==null?x.style.fillOpacity=`${N+(G-N)*we}`:G!==null&&(x.style.fillOpacity=`${G}`),P&&x.tagName.toLowerCase()==="path"&&he[W]&&x.setAttribute("d",Xe(he[W],P,we)),W===0&&(p?.(we),e.style.setProperty("--scroll-draw-progress",String(we))),Fe<1&&(h=false);});if(b){let x=Math.min(1,Math.max(0,E/o)),W=k(x);for(let Oe in b){let Fe=parseFloat(Oe);W>=Fe&&!Ce.has(Fe)&&(Ce.add(Fe),b[Oe]?.());}}return h}function fe(E){if(ce)return;let h=E-i;ye||(ye=true,O?.());let x=X(h);if(x&&!ie){ie=true,X(o*(1+Math.max(0,ee.length-1)*B)),y?.(),xe<(M==="infinite"?1/0:M??0)&&(xe++,Me=setTimeout(()=>{i=performance.now(),ye=false,ie=false,Ce.clear(),ze(),te=requestAnimationFrame(fe);},V));return}x||(te=requestAnimationFrame(fe));}function ue(){cancelAnimationFrame(te),clearTimeout(Me),i=performance.now(),v=0,ce=false,ye=false,ie=false,xe=0,Ce.clear(),ze(),te=requestAnimationFrame(fe);}let w=new IntersectionObserver(E=>{E.forEach(h=>{h.isIntersecting&&!(ne&&ie)?ue():!h.isIntersecting&&!ne&&!ie&&(cancelAnimationFrame(te),clearTimeout(Me),i=null);});},{root:g??null,threshold:D,rootMargin:I}),H;function Z(){clearTimeout(H),H=setTimeout(()=>{ee.forEach((E,h)=>{j[h]=_e(E),E.style.strokeDasharray=`${j[h]}`;});},150);}return window.addEventListener("resize",Z),window.addEventListener("orientationchange",Z),R>0?setTimeout(()=>w.observe(e),R):w.observe(e),{destroy(){cancelAnimationFrame(te),clearTimeout(Me),w.disconnect(),window.removeEventListener("resize",Z),window.removeEventListener("orientationchange",Z),clearTimeout(H);},replay(){xe=0,ue();},pause(){ce||(ce=true,v=performance.now()-i,cancelAnimationFrame(te));},resume(){ce&&(ce=false,i=performance.now()-v,te=requestAnimationFrame(fe));},seek(E){let h=Math.min(1,Math.max(0,E));Pe=h,ce=true,v=h*o,i=performance.now()-v,cancelAnimationFrame(te),X(v);},getProgress(){return Pe}}}if(Q)return At();at();function qe(){if(!Ne||ce)return;let o=performance.now(),i=ke(),v=c;if(L!==false){let w=o-st,H=w>0?Math.abs(i-(Ve<0?i:Ve))/w:0;v=c*Math.max(.2,1+H*(typeof L=="number"?L:1)*.04);}Ve=i,st=o;let X=T?He===-1||i>=He?"forward":"reverse":S;He=i;let fe=Ae-Te,ue=true;if(f){let w=k(J(i,Te,Ae,v));ne&&!T&&(be=Math.max(be,w),w=be),Pe=w,e.style.setProperty("--scroll-draw-progress",String(w));let H=X==="reverse"?1-w:w;e.style.clipPath=me(H),p?.(w),!ye&&J(i,Te,Ae,v)>0&&(ye=true,O?.()),w>=1&&!ie?(ie=true,y?.(),xe<(M==="infinite"?1/0:M??0)&&(xe++,Me=setTimeout(()=>{be=-1,ye=false,ie=false,e.style.clipPath=me(0);},V))):w<1&&!ne&&(ie=false),te=requestAnimationFrame(qe);return}if(ee.forEach((w,H)=>{let Z=H*B*fe,E=k(J(i,Te+Z,Ae+Z,v));ne&&!T&&(be=Math.max(be,E),E=be),Pe=E,w.style.strokeDashoffset=X==="reverse"?`${j[H]*E}`:`${j[H]*(1-E)}`,u&&(w.style.opacity=X==="reverse"?`${1-E}`:`${E}`),re&&z?w.style.stroke=De(re,z,E):z&&(w.style.stroke=z),U!==null&&oe!==null?w.style.strokeWidth=`${U+(oe-U)*E}`:oe!==null&&(w.style.strokeWidth=`${oe}`),N!==null&&G!==null?w.style.fillOpacity=`${N+(G-N)*E}`:G!==null&&(w.style.fillOpacity=`${G}`),P&&w.tagName.toLowerCase()==="path"&&he[H]&&w.setAttribute("d",Xe(he[H],P,E)),H===0&&(p?.(E),e.style.setProperty("--scroll-draw-progress",String(E))),E<1&&(ue=false);}),b){let w=k(J(i,Te,Ae,v));for(let H in b){let Z=parseFloat(H);w>=Z&&!Ce.has(Z)&&(Ce.add(Z),b[H]?.());}}!ye&&J(i,Te,Ae,v)>0&&(ye=true,O?.()),ue&&!ie?(ie=true,y?.(),xe<(M==="infinite"?1/0:M??0)&&(xe++,Me=setTimeout(()=>{be=-1,ye=false,ie=false,Ce.clear(),ze();},V))):!ue&&!ne&&(ie=false),te=requestAnimationFrame(qe);}let Ge=new IntersectionObserver(o=>{o.forEach(i=>{Ne=i.isIntersecting,Ne&&!ce?te=requestAnimationFrame(qe):cancelAnimationFrame(te);});},{root:g??null,threshold:D,rootMargin:I}),je;function We(){clearTimeout(je),je=setTimeout(()=>{ee.forEach((o,i)=>{j[i]=_e(o),o.style.strokeDasharray=`${j[i]}`;}),at();},150);}return window.addEventListener("resize",We),window.addEventListener("orientationchange",We),R>0?setTimeout(()=>Ge.observe(e),R):Ge.observe(e),{destroy(){cancelAnimationFrame(te),clearTimeout(Me),Ge.disconnect(),window.removeEventListener("resize",We),window.removeEventListener("orientationchange",We),clearTimeout(je),Be?.remove();},replay(){be=-1,He=-1,Ve=-1,ye=false,ie=false,xe=0,ce=false,Ce.clear(),clearTimeout(Me),ze();},pause(){ce=true,cancelAnimationFrame(te);},resume(){ce&&(ce=false,Ne&&(te=requestAnimationFrame(qe)));},seek(o){let i=Math.min(1,Math.max(0,o));Pe=i,be=i,ce=true,cancelAnimationFrame(te),Et(i,S);},getProgress(){return Pe}}}var dt=new Map;function $e(e,r){dt.set(e,r);}function Le(e){dt.delete(e);}function Dt(e){return e.startsWith("#")||e.startsWith("rgb")||e.startsWith("hsl")}function gt(e){let r=[],n=/([\w]+)\(([^)]*)\)/g,t;for(;(t=n.exec(e))!==null;){let l=[],s=[],m=t[2].trim();if(m)for(let c of m.split(/[\s,]+/)){let u=c.match(/^([-+]?[\d.eE]+)(.*)$/);l.push(u?parseFloat(u[1]):0),s.push(u?u[2]:"");}r.push({fn:t[1],nums:l,units:s});}return r}function kt(e,r,n){let t=gt(e),l=gt(r);return t.length===0||t.length!==l.length?n<1?e:r:t.map((s,m)=>{let c=l[m];return s.fn!==c.fn||s.nums.length!==c.nums.length?n<1?`${s.fn}(${s.nums.map((u,d)=>`${u}${s.units[d]}`).join(", ")})`:`${c.fn}(${c.nums.map((u,d)=>`${u}${c.units[d]}`).join(", ")})`:`${s.fn}(${s.nums.map((u,d)=>`${u+(c.nums[d]-u)*n}${s.units[d]}`).join(", ")})`}).join(" ")}function yt(e,r,n){if(typeof e=="number"&&typeof r=="number")return String(e+(r-e)*n);let t=String(e),l=String(r);if(Dt(t))return De(t,l,n);if(t.includes("("))return kt(t,l,n);let s=t.match(/^([-+]?[\d.]+)(.*)$/),m=l.match(/^([-+]?[\d.]+)(.*)$/);if(s&&m){let c=parseFloat(s[1]),u=parseFloat(m[1]);return `${c+(u-c)*n}${s[2]||m[2]}`}return n<1?t:l}function It(e){return e.replace(/([A-Z])/g,r=>`-${r.toLowerCase()}`)}var ht={linear:"linear","ease-in":"ease-in","ease-out":"ease-out","ease-in-out":"ease-in-out"},Rt=new Set(["opacity","transform","background-color","color","filter","scale","translate","rotate"]),Nt=0;function Ht(){return typeof CSS<"u"&&typeof CSS.supports=="function"&&CSS.supports("animation-timeline: view()")}function Ue(e,r){let n={destroy:()=>{},replay:()=>{},pause:()=>{},resume:()=>{},seek:()=>{},getProgress:()=>0};if(typeof window>"u")return n;let{props:t,trigger:l={},easing:s="ease-out",speed:m=1,once:c=false,axis:u="y",scrollContainer:d,native:F=true,onProgress:B,onComplete:S}=r,ne=window.matchMedia("(prefers-reduced-motion: reduce)").matches,de=typeof s=="function"?s:ae[s]??ae["ease-out"],q=le(l.start??"top bottom"),K=le(l.end??"bottom top"),T=typeof d=="string"?document.querySelector(d):d??null,R=Object.entries(t).map(([a,g])=>({prop:It(a),from:Array.isArray(g)?g[0]:"",to:Array.isArray(g)?g[1]:g}));function A(){let a=window.getComputedStyle(e);for(let g of R)g.from===""&&(g.from=a.getPropertyValue(g.prop).trim()||"0");}function C(){for(let a of R)e.style.setProperty(a.prop,String(a.to));}if(ne)return C(),S?.(),n;A();function $(){if(!F||!Ht()||typeof s!="string"||!(s in ht)||u!=="y"||T||c||m!==1||B||S||(l.start??"top bottom").trim()!=="top bottom"||(l.end??"bottom top").trim()!=="bottom top")return false;for(let a of R)if(!Rt.has(a.prop))return false;return true}function b(){let a=`ssd-a-${++Nt}`,g=R.map(N=>`${N.prop}:${N.from}`).join(";"),re=R.map(N=>`${N.prop}:${N.to}`).join(";"),z=document.createElement("style");z.setAttribute("data-ssd-animate",""),z.textContent=`@keyframes ${a}{from{${g}}to{${re}}}.${a}{animation-name:${a};animation-duration:auto;animation-timing-function:${ht[s]};animation-fill-mode:both;animation-timeline:view();animation-range:cover 0% cover 100%;}`,document.head.appendChild(z),e.classList.add(a);let U=()=>u==="x"?window.scrollX:window.scrollY,oe=()=>u==="x"?window.innerWidth:window.innerHeight;return {destroy(){e.classList.remove(a),z.remove();},replay(){e.classList.remove(a),e.offsetWidth,e.classList.add(a);},pause(){e.style.animationPlayState="paused";},resume(){e.style.animationPlayState="";},seek(N){let G=Math.min(1,Math.max(0,N));e.classList.remove(a);for(let me of R)e.style.setProperty(me.prop,yt(me.from,me.to,G));},getProgress(){let N=e.getBoundingClientRect(),G=U(),me=oe(),{tStart:ee,tEnd:j}=pe({top:N.top,height:N.height},G,me,q,K);return de(J(G,ee,j,m))}}}if($())return b();let L=0,D=0,I=0,M=false,V=false,P=-1,_=0,Q=false,Y=()=>T?u==="x"?T.scrollLeft:T.scrollTop:u==="x"?window.scrollX:window.scrollY,se=()=>T?u==="x"?T.clientWidth:T.clientHeight:u==="x"?window.innerWidth:window.innerHeight;function p(){let a=e.getBoundingClientRect(),g,re;if(T){let U=T.getBoundingClientRect();g=u==="x"?a.left-U.left+T.scrollLeft:a.top-U.top+T.scrollTop,re=u==="x"?a.width:a.height;}else g=u==="x"?a.left:a.top,re=u==="x"?a.width:a.height;let z=pe({top:g,height:re},Y(),se(),q,K);L=z.tStart,D=z.tEnd;}function O(a){e.style.setProperty("--scroll-draw-progress",String(a));for(let g of R)e.style.setProperty(g.prop,yt(g.from,g.to,a));B?.(a);}function y(){if(!M||V)return;let a=de(J(Y(),L,D,m));c&&(P=Math.max(P,a),a=P),_=a,O(a),a>=1&&!Q?(Q=true,S?.()):a<1&&!c&&(Q=false),I=requestAnimationFrame(y);}p();{let a=de(J(Y(),L,D,m));c&&a>0&&(P=a),_=a,O(a);}let f=new IntersectionObserver(a=>{a.forEach(g=>{M=g.isIntersecting,M&&!V?I=requestAnimationFrame(y):cancelAnimationFrame(I);});},{root:T??null}),k;function ge(){clearTimeout(k),k=setTimeout(p,150);}return window.addEventListener("resize",ge),window.addEventListener("orientationchange",ge),f.observe(e),$e(e,{type:"animate",getProgress:()=>_,getTrigger:()=>({tStart:L,tEnd:D})}),{destroy(){cancelAnimationFrame(I),f.disconnect(),window.removeEventListener("resize",ge),window.removeEventListener("orientationchange",ge),clearTimeout(k),Le(e);},replay(){P=-1,Q=false,_=0,V=false,O(0);},pause(){V=true,cancelAnimationFrame(I);},resume(){V&&(V=false,M&&(I=requestAnimationFrame(y)));},seek(a){let g=Math.min(1,Math.max(0,a));_=g,P=g,V=true,cancelAnimationFrame(I),O(g);},getProgress(){return _}}}var Ze={destroy:()=>{},replay:()=>{},pause:()=>{},resume:()=>{},seek:()=>{},getProgress:()=>0};function Je(e,r){if(typeof window>"u")return Ze;let n=typeof e=="string"?document.querySelector(e):e;if(!n)return process.env.NODE_ENV!=="production"&&console.warn("[svg-scroll-draw] scrollCounter: element not found:",e),Ze;let t=n,{from:l=0,to:s,format:m,easing:c="ease-out",trigger:u={},once:d=true,decimals:F,onComplete:B}=r,S=F!==void 0?p=>p.toFixed(F):m??(p=>String(Math.round(p))),ne=typeof c=="function"?c:ae[c]??ae["ease-out"],de=le(u.start??"top 80%"),q=le(u.end??"top 20%");if(window.matchMedia("(prefers-reduced-motion: reduce)").matches)return t.textContent=S(s),B?.(),Ze;t.textContent=S(l);let T=0,R=0,A=0,C=false,$=false,b=-1,L=0,D=false,I=()=>window.scrollY,M=()=>window.innerHeight;function V(){let p=t.getBoundingClientRect(),O=pe({top:p.top,height:p.height},I(),M(),de,q);T=O.tStart,R=O.tEnd;}function P(p){t.textContent=S(l+(s-l)*p),t.style.setProperty("--scroll-draw-progress",String(p));}function _(){if(!C||$)return;let p=ne(J(I(),T,R,1));d&&(b=Math.max(b,p),p=b),L=p,P(p),p>=1&&!D?(D=true,B?.()):p<1&&!d&&(D=false),A=requestAnimationFrame(_);}V();{let p=ne(J(I(),T,R,1));d&&p>0&&(b=p),L=p,P(p);}let Q=new IntersectionObserver(p=>{p.forEach(O=>{C=O.isIntersecting,C&&!$?A=requestAnimationFrame(_):cancelAnimationFrame(A);});}),Y;function se(){clearTimeout(Y),Y=setTimeout(V,150);}return window.addEventListener("resize",se),window.addEventListener("orientationchange",se),Q.observe(t),$e(t,{type:"counter",getProgress:()=>L,getTrigger:()=>({tStart:T,tEnd:R})}),{destroy(){cancelAnimationFrame(A),Q.disconnect(),window.removeEventListener("resize",se),window.removeEventListener("orientationchange",se),clearTimeout(Y),Le(t);},replay(){b=-1,D=false,L=0,$=false,P(0);},pause(){$=true,cancelAnimationFrame(A);},resume(){$&&($=false,C&&(A=requestAnimationFrame(_)));},seek(p){let O=Math.min(1,Math.max(0,p));L=O,b=O,$=true,cancelAnimationFrame(A),P(O);},getProgress(){return L}}}var bt={destroy:()=>{},replay:()=>{},pause:()=>{},resume:()=>{},seek:()=>{},getProgress:()=>0};function Ke(e,r={}){if(typeof window>"u")return bt;let n=typeof e=="string"?document.querySelector(e):e;if(!n||n.tagName.toLowerCase()!=="video")return process.env.NODE_ENV!=="production"&&console.warn("[svg-scroll-draw] scrollVideo: <video> element not found:",e),bt;let t=n,{trigger:l={},easing:s="linear",once:m=false,axis:c="y",preload:u="auto",onReady:d,onComplete:F,onProgress:B}=r,S=window.matchMedia("(prefers-reduced-motion: reduce)").matches,ne=typeof s=="function"?s:ae[s]??ae.linear,de=le(l.start??"top top"),q=le(l.end??"bottom top");t.pause(),t.hasAttribute("preload")||(t.preload=u);let K=r.from??0,T=r.to,R=0,A=0,C=0,$=false,b=false,L=-1,D=0,I=false,M=false,V=()=>c==="x"?window.scrollX:window.scrollY,P=()=>c==="x"?window.innerWidth:window.innerHeight;function _(){let f=t.getBoundingClientRect(),k=c==="x"?f.left:f.top,ge=c==="x"?f.width:f.height,a=pe({top:k,height:ge},V(),P(),de,q);R=a.tStart,A=a.tEnd;}function Q(f){if(!M)return;let k=T??t.duration??0;t.currentTime=K+(k-K)*f,t.style.setProperty("--scroll-draw-progress",String(f)),B?.(f);}function Y(){if(!$||b||!M)return;let f=ne(J(V(),R,A,1));m&&(L=Math.max(L,f),f=L),D=f,Q(f),f>=1&&!I?(I=true,F?.()):f<1&&!m&&(I=false),C=requestAnimationFrame(Y);}function se(){if(M=true,T===void 0&&(T=t.duration),S){Q(1),d?.();return}_(),d?.(),$&&!b&&(C=requestAnimationFrame(Y));}t.readyState>=1?se():t.addEventListener("loadedmetadata",se,{once:true}),M||_();let p=new IntersectionObserver(f=>{f.forEach(k=>{$=k.isIntersecting,$&&!b&&M?C=requestAnimationFrame(Y):cancelAnimationFrame(C);});}),O;function y(){clearTimeout(O),O=setTimeout(_,150);}return window.addEventListener("resize",y),window.addEventListener("orientationchange",y),p.observe(t),$e(t,{type:"video",getProgress:()=>D,getTrigger:()=>({tStart:R,tEnd:A})}),{destroy(){cancelAnimationFrame(C),p.disconnect(),t.removeEventListener("loadedmetadata",se),window.removeEventListener("resize",y),window.removeEventListener("orientationchange",y),clearTimeout(O),Le(t);},replay(){L=-1,I=false,D=0,b=false,Q(0);},pause(){b=true,cancelAnimationFrame(C);},resume(){b&&(b=false,$&&M&&(C=requestAnimationFrame(Y)));},seek(f){let k=Math.min(1,Math.max(0,f));D=k,L=k,b=true,cancelAnimationFrame(C),Q(k);},getProgress(){return D}}}function St(e){let r=e.textContent??"";return e.textContent="",r.split(/(\s+)/).filter(Boolean).map(n=>{let t=document.createElement("span");return t.setAttribute("aria-hidden","true"),/^\s+$/.test(n)?(t.textContent=n,t.style.whiteSpace="pre"):(t.textContent=n,t.style.display="inline-block"),e.appendChild(t),/^\s+$/.test(n)?null:t}).filter(n=>n!==null)}function Vt(e){let r=e.textContent??"";return e.textContent="",r.split("").map(n=>{let t=document.createElement("span");return t.setAttribute("aria-hidden","true"),t.textContent=n,n===" "?t.style.whiteSpace="pre":t.style.display="inline-block",e.appendChild(t),n===" "?null:t}).filter(n=>n!==null)}function wt(e){let r=St(e),n=new Map;for(let s of r){let m=s.offsetTop;n.has(m)||n.set(m,[]),n.get(m).push(s);}let t=[],l=Array.from(n.keys()).sort((s,m)=>s-m);for(let s of l){let m=n.get(s),c=document.createElement("span");c.setAttribute("aria-hidden","true"),c.style.display="inline-block";for(let u of m)c.appendChild(u);t.push(c);}e.textContent="";for(let s of t)e.appendChild(s),e.appendChild(document.createTextNode(" "));return t}function zt(e,r,n,t){if(n<=1||t===0)return e;let l=(n-1)*t,s=r*t,m=s+(1-l);return m<=s?e>=s?1:0:Math.min(1,Math.max(0,(e-s)/(m-s)))}function qt(e,r){let n=[];if(r?.y!==void 0&&n.push(`translateY(${r.y*(1-e)}px)`),r?.x!==void 0&&n.push(`translateX(${r.x*(1-e)}px)`),r?.rotate!==void 0&&n.push(`rotate(${r.rotate*(1-e)}deg)`),r?.scale!==void 0){let t=r.scale+(1-r.scale)*e;n.push(`scale(${t})`);}return n.join(" ")||""}var vt={destroy:()=>{},replay:()=>{},pause:()=>{},resume:()=>{},seek:()=>{},getProgress:()=>0};function Qe(e,r={}){if(typeof window>"u")return vt;let n=typeof e=="string"?document.querySelector(e):e;if(!n)return process.env.NODE_ENV!=="production"&&console.warn("[svg-scroll-draw] scrollText: element not found:",e),vt;let t=n,{split:l="words",stagger:s=.04,easing:m="ease-out",from:c={opacity:0,y:24},trigger:u={},once:d=true,onComplete:F}=r,B=window.matchMedia("(prefers-reduced-motion: reduce)").matches,S=typeof m=="function"?m:ae[m]??ae["ease-out"],ne=le(u.start??"top 85%"),de=le(u.end??"top 40%"),q=t.innerHTML;t.setAttribute("aria-label",t.textContent??"");let K;l==="chars"?K=Vt(t):l==="lines"?K=wt(t):K=St(t);let T=K.length;function R(y,f){c?.opacity!==void 0&&(y.style.opacity=String(c.opacity+(1-c.opacity)*f));let k=qt(f,c);k&&(y.style.transform=k);}function A(y){t.style.setProperty("--scroll-draw-progress",String(y)),K.forEach((f,k)=>{let ge=S(zt(y,k,T,s));R(f,ge);});}if(B)return A(1),F?.(),{destroy(){t.innerHTML=q,t.removeAttribute("aria-label");},replay:()=>{},pause:()=>{},resume:()=>{},seek:()=>{},getProgress:()=>1};A(0);let C=0,$=0,b=0,L=false,D=false,I=-1,M=0,V=false,P=()=>window.scrollY,_=()=>window.innerHeight;function Q(){let y=t.getBoundingClientRect(),f=pe({top:y.top,height:y.height},P(),_(),ne,de);C=f.tStart,$=f.tEnd;}function Y(){if(!L||D)return;let y=J(P(),C,$,1);d&&(I=Math.max(I,y),y=I),M=y,A(y),y>=1&&!V?(V=true,F?.()):y<1&&!d&&(V=false),b=requestAnimationFrame(Y);}Q();let se=new IntersectionObserver(y=>{y.forEach(f=>{L=f.isIntersecting,L&&!D?b=requestAnimationFrame(Y):cancelAnimationFrame(b);});}),p;function O(){clearTimeout(p),p=setTimeout(()=>{if(l==="lines"){let y=M;t.innerHTML=q,t.setAttribute("aria-label",t.textContent??""),K=wt(t),A(y);}Q();},150);}return window.addEventListener("resize",O),window.addEventListener("orientationchange",O),se.observe(t),$e(t,{type:"text",getProgress:()=>M,getTrigger:()=>({tStart:C,tEnd:$})}),{destroy(){cancelAnimationFrame(b),se.disconnect(),window.removeEventListener("resize",O),window.removeEventListener("orientationchange",O),clearTimeout(p),t.innerHTML=q,t.removeAttribute("aria-label"),Le(t);},replay(){I=-1,V=false,M=0,D=false,A(0);},pause(){D=true,cancelAnimationFrame(b);},resume(){D&&(D=false,L&&(b=requestAnimationFrame(Y)));},seek(y){let f=Math.min(1,Math.max(0,y));M=f,I=f,D=true,cancelAnimationFrame(b),A(f);},getProgress(){return M}}}function Wt(e={}){let r=ref(null);return onMounted(()=>{if(!r.value)return;let n=Ye(r.value,e);onUnmounted(()=>n.destroy());}),r}var et=defineComponent({name:"ScrollDraw",props:{selector:{type:String},speed:{type:Number},fade:{type:Boolean},stagger:{type:Number},easing:{type:[String,Function]},direction:{type:String},trigger:{type:Object},onProgress:{type:Function},onStart:{type:Function},onComplete:{type:Function},once:{type:Boolean},debug:{type:Boolean}},setup(e,{slots:r}){let n=ref(null);return onMounted(()=>{if(!n.value)return;let t={};e.selector!=null&&(t.selector=e.selector),e.speed!=null&&(t.speed=e.speed),e.fade!=null&&(t.fade=e.fade),e.stagger!=null&&(t.stagger=e.stagger),e.easing!=null&&(t.easing=e.easing),e.direction!=null&&(t.direction=e.direction),e.trigger!=null&&(t.trigger=e.trigger),e.once!=null&&(t.once=e.once),e.debug!=null&&(t.debug=e.debug),e.onProgress!=null&&(t.onProgress=e.onProgress),e.onStart!=null&&(t.onStart=e.onStart),e.onComplete!=null&&(t.onComplete=e.onComplete);let l=Ye(n.value,t);onUnmounted(()=>l.destroy());}),()=>h("div",{ref:n},r.default?.())}});function _t(e){let r=ref(null);return onMounted(()=>{if(!r.value)return;let n=Ue(r.value,e);onUnmounted(()=>n.destroy());}),r}var tt=defineComponent({name:"ScrollAnimate",props:{options:{type:Object,required:true}},setup(e,{slots:r}){let n=ref(null);return onMounted(()=>{if(!n.value)return;let t=Ue(n.value,e.options);onUnmounted(()=>t.destroy());}),()=>h("div",{ref:n},r.default?.())}});function Bt(e){let r=ref(null);return onMounted(()=>{if(!r.value)return;let n=Je(r.value,e);onUnmounted(()=>n.destroy());}),r}var nt=defineComponent({name:"ScrollCounter",props:{to:{type:Number,required:true},from:{type:Number},format:{type:Function},easing:{type:[String,Function]},trigger:{type:Object},once:{type:Boolean},decimals:{type:Number},onComplete:{type:Function}},setup(e){let r=ref(null);return onMounted(()=>{if(!r.value)return;let n={to:e.to};e.from!=null&&(n.from=e.from),e.format!=null&&(n.format=e.format),e.easing!=null&&(n.easing=e.easing),e.trigger!=null&&(n.trigger=e.trigger),e.once!=null&&(n.once=e.once),e.decimals!=null&&(n.decimals=e.decimals),e.onComplete!=null&&(n.onComplete=e.onComplete);let t=Je(r.value,n);onUnmounted(()=>t.destroy());}),()=>h("span",{ref:r})}});function Gt(e={}){let r=ref(null);return onMounted(()=>{if(!r.value)return;let n=Ke(r.value,e);onUnmounted(()=>n.destroy());}),r}var rt=defineComponent({name:"ScrollVideo",props:{src:{type:String,required:true},options:{type:Object},muted:{type:Boolean,default:true},playsInline:{type:Boolean,default:true},class:{type:String}},setup(e){let r=ref(null);return onMounted(()=>{if(!r.value)return;let n=Ke(r.value,e.options??{});onUnmounted(()=>n.destroy());}),()=>h("video",{ref:r,src:e.src,muted:e.muted,playsinline:e.playsInline,preload:"auto",class:e.class})}});function jt(e={}){let r=ref(null);return onMounted(()=>{if(!r.value)return;let n=Qe(r.value,e);onUnmounted(()=>n.destroy());}),r}var ot=defineComponent({name:"ScrollText",props:{options:{type:Object},tag:{type:String,default:"p"}},setup(e,{slots:r}){let n=ref(null);return onMounted(()=>{if(!n.value)return;let t=Qe(n.value,e.options??{});onUnmounted(()=>t.destroy());}),()=>h(e.tag,{ref:n},r.default?.())}});function vn(){return {install(e){e.component("ScrollDraw",et),e.component("ScrollAnimate",tt),e.component("ScrollCounter",nt),e.component("ScrollVideo",rt),e.component("ScrollText",ot);}}}export{tt as ScrollAnimate,nt as ScrollCounter,et as ScrollDraw,ot as ScrollText,rt as ScrollVideo,vn as createScrollDrawPlugin,_t as useScrollAnimate,Bt as useScrollCounter,Wt as useScrollDraw,jt as useScrollText,Gt as useScrollVideo};
|
package/dist/solid/index.cjs
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
'use strict';var solidJs=require('solid-js');function
|
|
2
|
-
<div style="position:absolute;${
|
|
3
|
-
<div style="position:absolute;${S?`left:${x}px;top:0;bottom:0;border-left:2px dashed #ef4444;`:`top:${x}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(o),window.addEventListener("scroll",h,{passive:true}),h(),o}function Ie(e,r,n){let o=(r.match(/[-+]?(?:\d*\.)?\d+(?:[eE][-+]?\d+)?/g)??[]).map(Number),h=0;return e.replace(/[-+]?(?:\d*\.)?\d+(?:[eE][-+]?\d+)?/g,g=>{let P=parseFloat(g),x=o[h++]??P;return String(+(P+(x-P)*n).toFixed(4))})}function Oe(e,r={}){if(typeof window>"u")return {destroy:()=>{},replay:()=>{},pause:()=>{},resume:()=>{},seek:()=>{},getProgress:()=>0};let{preset:n,...o}=r,h=n?{...Be[n],...o}:o,g=window.matchMedia("(prefers-reduced-motion: reduce)").matches,{selector:P="path, polyline, line, polygon, rect, circle",speed:x=1,fade:S=false,easing:p="linear",trigger:E={},stagger:G=0,direction:d="forward",once:K=false,debug:Je=false,axis:N="y",scrollContainer:$e,autoReverse:me=false,delay:ue=0,strokeColor:Q,strokeWidth:Y,fillOpacity:Z,waypoints:ee,velocityScale:pe=false,threshold:Fe=0,rootMargin:Ce="0px",repeat:te=0,repeatDelay:Me=0,morphTo:H,clip:Se,autoplay:Ke=false,duration:Qe=1e3,native:Ye=true,onProgress:ce,onStart:de,onComplete:ae}=h,_=Se===true?"left":typeof Se=="string"?Se:false,re=typeof p=="function"?p:Le[p]??Le.linear,Re=De(E.start??"top bottom"),Ne=De(E.end??"bottom top"),I=typeof $e=="string"?document.querySelector($e):$e??null,W=Array.isArray(Q)?Q[0]:null,T=Array.isArray(Q)?Q[1]:typeof Q=="string"?Q:null,O=Array.isArray(Y)?Y[0]:null,k=Array.isArray(Y)?Y[1]:typeof Y=="number"?Y:null,F=Array.isArray(Z)?Z[0]:null,A=Array.isArray(Z)?Z[1]:typeof Z=="number"?Z:null;function ne(t){let s=t*100;switch(_){case "right":return `inset(0 0 0 ${100-s}%)`;case "top":return `inset(0 0 ${100-s}% 0)`;case "bottom":return `inset(${100-s}% 0 0 0)`;case "center":return `circle(${t*150}% at 50% 50%)`;default:return `inset(0 ${100-s}% 0 0)`}}let $=_?[]:Array.from(e.querySelectorAll(P)),w=[],z=[],X=0,U=0,M=false,R=false,v=0,ye=false,q=-1,he=-1,L=false,se=0,B=0,j,Te=null,J=new Set,ge=-1,He=performance.now();function fe(){return I?N==="x"?I.scrollLeft:I.scrollTop:N==="x"?window.scrollX:window.scrollY}function We(){return I?N==="x"?I.clientWidth:I.clientHeight:N==="x"?window.innerWidth:window.innerHeight}function ze(){let t=e.getBoundingClientRect(),s,l,y;if(I){let D=I.getBoundingClientRect();s=N==="x"?t.left-D.left+I.scrollLeft:t.top-D.top+I.scrollTop,l=N==="x"?t.width:t.height,y=fe();}else s=N==="x"?t.left:t.top,l=N==="x"?t.width:t.height,y=fe();let C=Pe({top:s,height:l},y,We(),Re,Ne);X=C.tStart,U=C.tEnd,Je&&process.env.NODE_ENV!=="production"&&(Te?.remove(),Te=ut(X,U,N));}function Ze(t,s){if(e.style.setProperty("--scroll-draw-progress",String(t)),_){let l=s==="reverse"?1-t:t;e.style.clipPath=ne(l);return}$.forEach((l,y)=>{l.style.strokeDashoffset=s==="reverse"?`${w[y]*t}`:`${w[y]*(1-t)}`,S&&(l.style.opacity=s==="reverse"?`${1-t}`:`${t}`),W&&T?l.style.stroke=xe(W,T,t):T&&(l.style.stroke=T),O!==null&&k!==null?l.style.strokeWidth=`${O+(k-O)*t}`:k!==null&&(l.style.strokeWidth=`${k}`),F!==null&&A!==null?l.style.fillOpacity=`${F+(A-F)*t}`:A!==null&&(l.style.fillOpacity=`${A}`),H&&l.tagName.toLowerCase()==="path"&&z[y]&&l.setAttribute("d",Ie(z[y],H,t));});}function be(){if(e.style.setProperty("--scroll-draw-progress","0"),_){e.style.clipPath=ne(0);return}$.forEach((t,s)=>{t.style.strokeDasharray=`${w[s]}`,t.style.strokeDashoffset=d==="reverse"?"0":`${w[s]}`,S?t.style.opacity=d==="reverse"?"1":"0":t.style.opacity="",W&&(t.style.stroke=W),O!==null&&(t.style.strokeWidth=`${O}`),F!==null&&(t.style.fillOpacity=`${F}`),H&&t.tagName.toLowerCase()==="path"&&z[s]&&t.setAttribute("d",z[s]);});}if($.forEach(t=>{lt(t);let s=Ee(t);w.push(s),t.tagName.toLowerCase()==="path"?z.push(t.getAttribute("d")??""):z.push(""),g?(t.style.strokeDasharray=`${s}`,t.style.strokeDashoffset=d==="reverse"?`${s}`:"0",S&&(t.style.opacity="1"),T&&(t.style.stroke=T),k!==null&&(t.style.strokeWidth=`${k}`),A!==null&&(t.style.fillOpacity=`${A}`),H&&t.tagName.toLowerCase()==="path"&&t.setAttribute("d",H)):(t.style.strokeDasharray=`${s}`,t.style.strokeDashoffset=d==="reverse"?"0":`${s}`,S?t.style.opacity=d==="reverse"?"1":"0":t.style.opacity="",W&&(t.style.stroke=W),O!==null&&(t.style.strokeWidth=`${O}`),F!==null&&(t.style.fillOpacity=`${F}`));}),_){if(g)return e.style.clipPath=ne(1),ae?.(),{destroy:()=>{},replay:()=>{},pause:()=>{},resume:()=>{},seek:()=>{},getProgress:()=>1};e.style.clipPath=ne(0);}else if(g)return ae?.(),{destroy:()=>{},replay:()=>{},pause:()=>{},resume:()=>{},seek:()=>{},getProgress:()=>1};function et(){return !(Ye===false||!at()||!$.length||typeof p!="string"||!(p in Xe)||_||N!=="y"||I||x!==1||G!==0||K||me||pe!==false||H||ee||te||ue>0||ce||de||ae||Q!=null||Y!=null||Z!=null||(E.start??"top bottom").trim()!=="top bottom"||(E.end??"bottom top").trim()!=="bottom top")}function tt(){let t=`svg-scroll-draw-${++it}`,s=d==="reverse"?"0":"var(--ssd-len)",l=d==="reverse"?"var(--ssd-len)":"0",y=`stroke-dashoffset:${s};`,C=`stroke-dashoffset:${l};`;S&&(y+=`opacity:${d==="reverse"?1:0};`,C+=`opacity:${d==="reverse"?0:1};`);let D=document.createElement("style");D.setAttribute("data-svg-scroll-draw",""),D.textContent=`@keyframes ${t}{from{${y}}to{${C}}}.${t}{animation-name:${t};animation-duration:auto;animation-timing-function:${Xe[p]};animation-fill-mode:both;animation-timeline:view();animation-range:cover 0% cover 100%;}`,document.head.appendChild(D);function a(i,c){i.style.setProperty("--ssd-len",String(w[c])),i.style.strokeDasharray=`${w[c]}`,i.style.strokeDashoffset="",i.style.opacity="",i.style.animationPlayState="",i.classList.add(t);}$.forEach(a);let f=false,b=-1;function u(){if(b>=0)return b;let i=e.getBoundingClientRect(),{tStart:c,tEnd:m}=Pe({top:i.top,height:i.height},fe(),We(),Re,Ne);return re(ie(fe(),c,m,x))}return {destroy(){$.forEach(i=>{i.classList.remove(t),i.style.removeProperty("--ssd-len"),i.style.animationPlayState="";}),D.remove();},replay(){f=false,b=-1,$.forEach(a);},pause(){f=true,$.forEach(i=>{i.style.animationPlayState="paused";});},resume(){f&&(f=false,$.forEach(i=>{i.style.animationPlayState="running";}));},seek(i){let c=Math.min(1,Math.max(0,i));b=c,f=true,$.forEach((m,oe)=>{m.classList.remove(t),m.style.strokeDashoffset=d==="reverse"?`${w[oe]*c}`:`${w[oe]*(1-c)}`,S&&(m.style.opacity=d==="reverse"?`${1-c}`:`${c}`);});},getProgress(){return u()}}}if(et())return tt();function rt(){let t=Math.max(1,Qe),s=0,l=0;function y(u){let i=true;if(_){let c=Math.min(1,Math.max(0,u/t)),m=re(c);se=m,e.style.setProperty("--scroll-draw-progress",String(m)),e.style.clipPath=ne(d==="reverse"?1-m:m),ce?.(m),c<1&&(i=false);}else $.forEach((c,m)=>{let oe=m*G*t,le=Math.min(1,Math.max(0,(u-oe)/t)),V=re(le);c.style.strokeDashoffset=d==="reverse"?`${w[m]*V}`:`${w[m]*(1-V)}`,S&&(c.style.opacity=d==="reverse"?`${1-V}`:`${V}`),W&&T?c.style.stroke=xe(W,T,V):T&&(c.style.stroke=T),O!==null&&k!==null?c.style.strokeWidth=`${O+(k-O)*V}`:k!==null&&(c.style.strokeWidth=`${k}`),F!==null&&A!==null?c.style.fillOpacity=`${F+(A-F)*V}`:A!==null&&(c.style.fillOpacity=`${A}`),H&&c.tagName.toLowerCase()==="path"&&z[m]&&c.setAttribute("d",Ie(z[m],H,V)),m===0&&(ce?.(V),e.style.setProperty("--scroll-draw-progress",String(V))),le<1&&(i=false);});if(ee){let c=Math.min(1,Math.max(0,u/t)),m=re(c);for(let oe in ee){let le=parseFloat(oe);m>=le&&!J.has(le)&&(J.add(le),ee[oe]?.());}}return i}function C(u){if(L)return;let i=u-s;R||(R=true,de?.());let c=y(i);if(c&&!M){M=true,y(t*(1+Math.max(0,$.length-1)*G)),ae?.(),B<(te==="infinite"?1/0:te??0)&&(B++,j=setTimeout(()=>{s=performance.now(),R=false,M=false,J.clear(),be(),v=requestAnimationFrame(C);},Me));return}c||(v=requestAnimationFrame(C));}function D(){cancelAnimationFrame(v),clearTimeout(j),s=performance.now(),l=0,L=false,R=false,M=false,B=0,J.clear(),be(),v=requestAnimationFrame(C);}let a=new IntersectionObserver(u=>{u.forEach(i=>{i.isIntersecting&&!(K&&M)?D():!i.isIntersecting&&!K&&!M&&(cancelAnimationFrame(v),clearTimeout(j),s=null);});},{root:I??null,threshold:Fe,rootMargin:Ce}),f;function b(){clearTimeout(f),f=setTimeout(()=>{$.forEach((u,i)=>{w[i]=Ee(u),u.style.strokeDasharray=`${w[i]}`;});},150);}return window.addEventListener("resize",b),window.addEventListener("orientationchange",b),ue>0?setTimeout(()=>a.observe(e),ue):a.observe(e),{destroy(){cancelAnimationFrame(v),clearTimeout(j),a.disconnect(),window.removeEventListener("resize",b),window.removeEventListener("orientationchange",b),clearTimeout(f);},replay(){B=0,D();},pause(){L||(L=true,l=performance.now()-s,cancelAnimationFrame(v));},resume(){L&&(L=false,s=performance.now()-l,v=requestAnimationFrame(C));},seek(u){let i=Math.min(1,Math.max(0,u));se=i,L=true,l=i*t,s=performance.now()-l,cancelAnimationFrame(v),y(l);},getProgress(){return se}}}if(Ke)return rt();ze();function we(){if(!ye||L)return;let t=performance.now(),s=fe(),l=x;if(pe!==false){let a=t-He,f=a>0?Math.abs(s-(ge<0?s:ge))/a:0;l=x*Math.max(.2,1+f*(typeof pe=="number"?pe:1)*.04);}ge=s,He=t;let y=me?he===-1||s>=he?"forward":"reverse":d;he=s;let C=U-X,D=true;if(_){let a=re(ie(s,X,U,l));K&&!me&&(q=Math.max(q,a),a=q),se=a,e.style.setProperty("--scroll-draw-progress",String(a));let f=y==="reverse"?1-a:a;e.style.clipPath=ne(f),ce?.(a),!R&&ie(s,X,U,l)>0&&(R=true,de?.()),a>=1&&!M?(M=true,ae?.(),B<(te==="infinite"?1/0:te??0)&&(B++,j=setTimeout(()=>{q=-1,R=false,M=false,e.style.clipPath=ne(0);},Me))):a<1&&!K&&(M=false),v=requestAnimationFrame(we);return}if($.forEach((a,f)=>{let b=f*G*C,u=re(ie(s,X+b,U+b,l));K&&!me&&(q=Math.max(q,u),u=q),se=u,a.style.strokeDashoffset=y==="reverse"?`${w[f]*u}`:`${w[f]*(1-u)}`,S&&(a.style.opacity=y==="reverse"?`${1-u}`:`${u}`),W&&T?a.style.stroke=xe(W,T,u):T&&(a.style.stroke=T),O!==null&&k!==null?a.style.strokeWidth=`${O+(k-O)*u}`:k!==null&&(a.style.strokeWidth=`${k}`),F!==null&&A!==null?a.style.fillOpacity=`${F+(A-F)*u}`:A!==null&&(a.style.fillOpacity=`${A}`),H&&a.tagName.toLowerCase()==="path"&&z[f]&&a.setAttribute("d",Ie(z[f],H,u)),f===0&&(ce?.(u),e.style.setProperty("--scroll-draw-progress",String(u))),u<1&&(D=false);}),ee){let a=re(ie(s,X,U,l));for(let f in ee){let b=parseFloat(f);a>=b&&!J.has(b)&&(J.add(b),ee[f]?.());}}!R&&ie(s,X,U,l)>0&&(R=true,de?.()),D&&!M?(M=true,ae?.(),B<(te==="infinite"?1/0:te??0)&&(B++,j=setTimeout(()=>{q=-1,R=false,M=false,J.clear(),be();},Me))):!D&&!K&&(M=false),v=requestAnimationFrame(we);}let ke=new IntersectionObserver(t=>{t.forEach(s=>{ye=s.isIntersecting,ye&&!L?v=requestAnimationFrame(we):cancelAnimationFrame(v);});},{root:I??null,threshold:Fe,rootMargin:Ce}),Ae;function ve(){clearTimeout(Ae),Ae=setTimeout(()=>{$.forEach((t,s)=>{w[s]=Ee(t),t.style.strokeDasharray=`${w[s]}`;}),ze();},150);}return window.addEventListener("resize",ve),window.addEventListener("orientationchange",ve),ue>0?setTimeout(()=>ke.observe(e),ue):ke.observe(e),{destroy(){cancelAnimationFrame(v),clearTimeout(j),ke.disconnect(),window.removeEventListener("resize",ve),window.removeEventListener("orientationchange",ve),clearTimeout(Ae),Te?.remove();},replay(){q=-1,he=-1,ge=-1,R=false,M=false,B=0,L=false,J.clear(),clearTimeout(j),be();},pause(){L=true,cancelAnimationFrame(v);},resume(){L&&(L=false,ye&&(v=requestAnimationFrame(we)));},seek(t){let s=Math.min(1,Math.max(0,t));se=s,q=s,L=true,cancelAnimationFrame(v),Ze(s,d);},getProgress(){return se}}}function gt(e={}){let r,n;return solidJs.onMount(()=>{r&&(n=Oe(r,e));}),solidJs.onCleanup(()=>{n?.destroy();}),o=>{r=o;}}function bt(e={}){let r,n;return solidJs.onMount(()=>{r&&(n=Oe(r,e));}),solidJs.onCleanup(()=>{n?.destroy(),n=void 0;}),{ref:o=>{r=o;},getInstance:()=>n}}exports.createScrollDraw=bt;exports.useScrollDraw=gt;
|
|
1
|
+
'use strict';var solidJs=require('solid-js');function bt({bounces:e=3,decay:r=.5}={}){let n=Math.max(1,Math.round(e)),t=Math.max(.01,Math.min(.99,r)),u=Math.sqrt(t),s=0,f=[];for(let d=0;d<n;d++){let O=Math.pow(u,d);f.push(O),s+=O;}let l=[0],c=0;for(let d=0;d<n;d++)c+=f[d]/s,l.push(c);return d=>{if(d<=0)return 0;if(d>=1)return 1;for(let O=0;O<n;O++)if(d<=l[O+1]){let B=(d-l[O])/(l[O+1]-l[O]);if(O===0)return B*(2-B);let E=1-Math.pow(t,O);return E+(1-E)*(2*B-1)*(2*B-1)}return 1}}function wt({amplitude:e=1,period:r=.4}={}){let n=Math.max(1,e),t=Math.max(.1,r),u=n<=1?t/4:t/(2*Math.PI)*Math.asin(1/n);return s=>s<=0?0:s>=1?1:n*Math.pow(2,-10*s)*Math.sin((s-u)*(2*Math.PI)/t)+1}var ae={linear:e=>e,"ease-in":e=>e*e,"ease-out":e=>e*(2-e),"ease-in-out":e=>e<.5?2*e*e:-1+(4-2*e)*e,spring:e=>1-Math.cos(e*Math.PI*2.5)*Math.pow(1-e,2.2),bounce:bt(),elastic:wt()};function le(e="top bottom"){let r=e.trim();if(/^\d+(\.\d+)?%$/.test(r))return {element:"top",viewport:r};let[n="top",t="bottom"]=r.split(/\s+/).filter(Boolean);return {element:n,viewport:t}}function et(e,r,n,t){switch(t){case "top":return e+n;case "center":return e+n+r/2;case "bottom":return e+n+r;default:return e+n}}function tt(e,r){if(/^\d+(\.\d+)?%$/.test(e))return r*(parseFloat(e)/100);switch(e){case "top":return 0;case "center":return r/2;case "bottom":return r;default:return r}}function ze(e){let r=e.tagName.toLowerCase();if(r==="rect"){let n=parseFloat(e.getAttribute("width")??"0"),t=parseFloat(e.getAttribute("height")??"0");return 2*(n+t)}if(r==="circle"){let n=parseFloat(e.getAttribute("r")??"0");return 2*Math.PI*n}return e.getTotalLength()}function vt(e,r,n){return Math.min(n,Math.max(r,e))}function J(e,r,n,t){return n===r?0:vt((e-r)/(n-r)*t,0,1)}function pe(e,r,n,t,u){let s=et(e.top,e.height,r,t.element)-tt(t.viewport,n),f=et(e.top,e.height,r,u.element)-tt(u.viewport,n);return {tStart:s,tEnd:f}}function nt(e){let r=/^#([a-f\d])([a-f\d])([a-f\d])$/i.exec(e);if(r)return [parseInt(r[1]+r[1],16),parseInt(r[2]+r[2],16),parseInt(r[3]+r[3],16)];let n=/^#([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(e);if(n)return [parseInt(n[1],16),parseInt(n[2],16),parseInt(n[3],16)];let t=/^rgb\(\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*\)$/i.exec(e);return t?[parseInt(t[1]),parseInt(t[2]),parseInt(t[3])]:null}function Oe(e,r,n){let t=nt(e),u=nt(r);return !t||!u?e:`rgb(${Math.round(t[0]+(u[0]-t[0])*n)},${Math.round(t[1]+(u[1]-t[1])*n)},${Math.round(t[2]+(u[2]-t[2])*n)})`}var rt={sketch:{easing:"ease-in",stagger:.1,speed:.9,fade:false},reveal:{easing:"ease-out",fade:true,speed:1.2,once:true},typewriter:{easing:"linear",stagger:.05,speed:1.5},cinematic:{easing:"ease-in-out",fade:true,speed:.75},spring:{easing:"spring",speed:1.1}};function ot(e,r){process.env.NODE_ENV!=="production"&&console.warn(`[svg-scroll-draw] ${e}`,r);}var st={linear:"linear","ease-in":"ease-in","ease-out":"ease-out","ease-in-out":"ease-in-out"},Et=0;function St(){return typeof CSS<"u"&&typeof CSS.supports=="function"&&CSS.supports("animation-timeline: view()")}function Tt(e){let r=e.getAttribute("stroke"),n=e.getAttribute("fill");!r||r==="none"?ot("Element has no stroke \u2014 path will not be visible.",e):n&&n!=="none"&&n!=="transparent"&&ot("Element has a fill \u2014 it may obscure the stroke animation.",e);}function xt(e,r,n){let t=document.createElement("div");t.setAttribute("data-svg-scroll-draw-debug",""),t.style.cssText="position:fixed;pointer-events:none;z-index:9999;font-family:monospace;font-size:11px;top:0;left:0;right:0;bottom:0;";function u(){let s=n==="x"?window.scrollX:window.scrollY,f=e-s,l=r-s,c=n==="x";t.innerHTML=`
|
|
2
|
+
<div style="position:absolute;${c?`left:${f}px;top:0;bottom:0;border-left:2px dashed #22c55e;`:`top:${f}px;left:0;right:0;border-top:2px dashed #22c55e;`}padding:2px 6px;color:#22c55e;background:rgba(0,0,0,.6)">\u25B6 start</div>
|
|
3
|
+
<div style="position:absolute;${c?`left:${l}px;top:0;bottom:0;border-left:2px dashed #ef4444;`:`top:${l}px;left:0;right:0;border-top:2px dashed #ef4444;`}padding:2px 6px;color:#ef4444;background:rgba(0,0,0,.6)">\u25A0 end</div>`;}return document.body.appendChild(t),window.addEventListener("scroll",u,{passive:true}),u(),t}function Be(e,r,n){let t=(r.match(/[-+]?(?:\d*\.)?\d+(?:[eE][-+]?\d+)?/g)??[]).map(Number),u=0;return e.replace(/[-+]?(?:\d*\.)?\d+(?:[eE][-+]?\d+)?/g,s=>{let f=parseFloat(s),l=t[u++]??f;return String(+(f+(l-f)*n).toFixed(4))})}function Ge(e,r={}){if(typeof window>"u")return {destroy:()=>{},replay:()=>{},pause:()=>{},resume:()=>{},seek:()=>{},getProgress:()=>0};let{preset:n,...t}=r,u=n?{...rt[n],...t}:t,s=window.matchMedia("(prefers-reduced-motion: reduce)").matches,{selector:f="path, polyline, line, polygon, rect, circle",speed:l=1,fade:c=false,easing:d="linear",trigger:O={},stagger:B=0,direction:E="forward",once:ne=false,debug:de=false,axis:q="y",scrollContainer:K,autoReverse:x=false,delay:H=0,strokeColor:A,strokeWidth:L,fillOpacity:$,waypoints:b,velocityScale:C=false,threshold:D=0,rootMargin:F="0px",repeat:M=0,repeatDelay:V=0,morphTo:P,clip:_,autoplay:Q=false,duration:j=1e3,native:se=true,onProgress:p,onStart:I,onComplete:y}=u,m=_===true?"left":typeof _=="string"?_:false,k=typeof d=="function"?d:ae[d]??ae.linear,ge=le(O.start??"top bottom"),a=le(O.end??"bottom top"),g=typeof K=="string"?document.querySelector(K):K??null,re=Array.isArray(A)?A[0]:null,z=Array.isArray(A)?A[1]:typeof A=="string"?A:null,U=Array.isArray(L)?L[0]:null,oe=Array.isArray(L)?L[1]:typeof L=="number"?L:null,N=Array.isArray($)?$[0]:null,G=Array.isArray($)?$[1]:typeof $=="number"?$:null;function fe(o){let i=o*100;switch(m){case "right":return `inset(0 0 0 ${100-i}%)`;case "top":return `inset(0 0 ${100-i}% 0)`;case "bottom":return `inset(${100-i}% 0 0 0)`;case "center":return `circle(${o*150}% at 50% 50%)`;default:return `inset(0 ${100-i}% 0 0)`}}let ee=m?[]:Array.from(e.querySelectorAll(f)),X=[],he=[],Te=0,xe=0,ie=false,ye=false,te=0,ke=false,be=-1,Fe=-1,ce=false,Ce=0,Se=0,Ae,qe=null,Me=new Set,He=-1,Je=performance.now();function De(){return g?q==="x"?g.scrollLeft:g.scrollTop:q==="x"?window.scrollX:window.scrollY}function Ke(){return g?q==="x"?g.clientWidth:g.clientHeight:q==="x"?window.innerWidth:window.innerHeight}function Qe(){let o=e.getBoundingClientRect(),i,v,Y;if(g){let ue=g.getBoundingClientRect();i=q==="x"?o.left-ue.left+g.scrollLeft:o.top-ue.top+g.scrollTop,v=q==="x"?o.width:o.height,Y=De();}else i=q==="x"?o.left:o.top,v=q==="x"?o.width:o.height,Y=De();let me=pe({top:i,height:v},Y,Ke(),ge,a);Te=me.tStart,xe=me.tEnd,de&&process.env.NODE_ENV!=="production"&&(qe?.remove(),qe=xt(Te,xe,q));}function dt(o,i){if(e.style.setProperty("--scroll-draw-progress",String(o)),m){let v=i==="reverse"?1-o:o;e.style.clipPath=fe(v);return}ee.forEach((v,Y)=>{v.style.strokeDashoffset=i==="reverse"?`${X[Y]*o}`:`${X[Y]*(1-o)}`,c&&(v.style.opacity=i==="reverse"?`${1-o}`:`${o}`),re&&z?v.style.stroke=Oe(re,z,o):z&&(v.style.stroke=z),U!==null&&oe!==null?v.style.strokeWidth=`${U+(oe-U)*o}`:oe!==null&&(v.style.strokeWidth=`${oe}`),N!==null&&G!==null?v.style.fillOpacity=`${N+(G-N)*o}`:G!==null&&(v.style.fillOpacity=`${G}`),P&&v.tagName.toLowerCase()==="path"&&he[Y]&&v.setAttribute("d",Be(he[Y],P,o));});}function Ne(){if(e.style.setProperty("--scroll-draw-progress","0"),m){e.style.clipPath=fe(0);return}ee.forEach((o,i)=>{o.style.strokeDasharray=`${X[i]}`,o.style.strokeDashoffset=E==="reverse"?"0":`${X[i]}`,c?o.style.opacity=E==="reverse"?"1":"0":o.style.opacity="",re&&(o.style.stroke=re),U!==null&&(o.style.strokeWidth=`${U}`),N!==null&&(o.style.fillOpacity=`${N}`),P&&o.tagName.toLowerCase()==="path"&&he[i]&&o.setAttribute("d",he[i]);});}if(ee.forEach(o=>{Tt(o);let i=ze(o);X.push(i),o.tagName.toLowerCase()==="path"?he.push(o.getAttribute("d")??""):he.push(""),s?(o.style.strokeDasharray=`${i}`,o.style.strokeDashoffset=E==="reverse"?`${i}`:"0",c&&(o.style.opacity="1"),z&&(o.style.stroke=z),oe!==null&&(o.style.strokeWidth=`${oe}`),G!==null&&(o.style.fillOpacity=`${G}`),P&&o.tagName.toLowerCase()==="path"&&o.setAttribute("d",P)):(o.style.strokeDasharray=`${i}`,o.style.strokeDashoffset=E==="reverse"?"0":`${i}`,c?o.style.opacity=E==="reverse"?"1":"0":o.style.opacity="",re&&(o.style.stroke=re),U!==null&&(o.style.strokeWidth=`${U}`),N!==null&&(o.style.fillOpacity=`${N}`));}),m){if(s)return e.style.clipPath=fe(1),y?.(),{destroy:()=>{},replay:()=>{},pause:()=>{},resume:()=>{},seek:()=>{},getProgress:()=>1};e.style.clipPath=fe(0);}else if(s)return y?.(),{destroy:()=>{},replay:()=>{},pause:()=>{},resume:()=>{},seek:()=>{},getProgress:()=>1};function gt(){return !(se===false||!St()||!ee.length||typeof d!="string"||!(d in st)||m||q!=="y"||g||l!==1||B!==0||ne||x||C!==false||P||b||M||H>0||p||I||y||A!=null||L!=null||$!=null||(O.start??"top bottom").trim()!=="top bottom"||(O.end??"bottom top").trim()!=="bottom top")}function yt(){let o=`svg-scroll-draw-${++Et}`,i=E==="reverse"?"0":"var(--ssd-len)",v=E==="reverse"?"var(--ssd-len)":"0",Y=`stroke-dashoffset:${i};`,me=`stroke-dashoffset:${v};`;c&&(Y+=`opacity:${E==="reverse"?1:0};`,me+=`opacity:${E==="reverse"?0:1};`);let ue=document.createElement("style");ue.setAttribute("data-svg-scroll-draw",""),ue.textContent=`@keyframes ${o}{from{${Y}}to{${me}}}.${o}{animation-name:${o};animation-duration:auto;animation-timing-function:${st[d]};animation-fill-mode:both;animation-timeline:view();animation-range:cover 0% cover 100%;}`,document.head.appendChild(ue);function w(h,T){h.style.setProperty("--ssd-len",String(X[T])),h.style.strokeDasharray=`${X[T]}`,h.style.strokeDashoffset="",h.style.opacity="",h.style.animationPlayState="",h.classList.add(o);}ee.forEach(w);let R=false,Z=-1;function S(){if(Z>=0)return Z;let h=e.getBoundingClientRect(),{tStart:T,tEnd:W}=pe({top:h.top,height:h.height},De(),Ke(),ge,a);return k(J(De(),T,W,l))}return {destroy(){ee.forEach(h=>{h.classList.remove(o),h.style.removeProperty("--ssd-len"),h.style.animationPlayState="";}),ue.remove();},replay(){R=false,Z=-1,ee.forEach(w);},pause(){R=true,ee.forEach(h=>{h.style.animationPlayState="paused";});},resume(){R&&(R=false,ee.forEach(h=>{h.style.animationPlayState="running";}));},seek(h){let T=Math.min(1,Math.max(0,h));Z=T,R=true,ee.forEach((W,Pe)=>{W.classList.remove(o),W.style.strokeDashoffset=E==="reverse"?`${X[Pe]*T}`:`${X[Pe]*(1-T)}`,c&&(W.style.opacity=E==="reverse"?`${1-T}`:`${T}`);});},getProgress(){return S()}}}if(gt())return yt();function ht(){let o=Math.max(1,j),i=0,v=0;function Y(S){let h=true;if(m){let T=Math.min(1,Math.max(0,S/o)),W=k(T);Ce=W,e.style.setProperty("--scroll-draw-progress",String(W)),e.style.clipPath=fe(E==="reverse"?1-W:W),p?.(W),T<1&&(h=false);}else ee.forEach((T,W)=>{let Pe=W*B*o,Ie=Math.min(1,Math.max(0,(S-Pe)/o)),we=k(Ie);T.style.strokeDashoffset=E==="reverse"?`${X[W]*we}`:`${X[W]*(1-we)}`,c&&(T.style.opacity=E==="reverse"?`${1-we}`:`${we}`),re&&z?T.style.stroke=Oe(re,z,we):z&&(T.style.stroke=z),U!==null&&oe!==null?T.style.strokeWidth=`${U+(oe-U)*we}`:oe!==null&&(T.style.strokeWidth=`${oe}`),N!==null&&G!==null?T.style.fillOpacity=`${N+(G-N)*we}`:G!==null&&(T.style.fillOpacity=`${G}`),P&&T.tagName.toLowerCase()==="path"&&he[W]&&T.setAttribute("d",Be(he[W],P,we)),W===0&&(p?.(we),e.style.setProperty("--scroll-draw-progress",String(we))),Ie<1&&(h=false);});if(b){let T=Math.min(1,Math.max(0,S/o)),W=k(T);for(let Pe in b){let Ie=parseFloat(Pe);W>=Ie&&!Me.has(Ie)&&(Me.add(Ie),b[Pe]?.());}}return h}function me(S){if(ce)return;let h=S-i;ye||(ye=true,I?.());let T=Y(h);if(T&&!ie){ie=true,Y(o*(1+Math.max(0,ee.length-1)*B)),y?.(),Se<(M==="infinite"?1/0:M??0)&&(Se++,Ae=setTimeout(()=>{i=performance.now(),ye=false,ie=false,Me.clear(),Ne(),te=requestAnimationFrame(me);},V));return}T||(te=requestAnimationFrame(me));}function ue(){cancelAnimationFrame(te),clearTimeout(Ae),i=performance.now(),v=0,ce=false,ye=false,ie=false,Se=0,Me.clear(),Ne(),te=requestAnimationFrame(me);}let w=new IntersectionObserver(S=>{S.forEach(h=>{h.isIntersecting&&!(ne&&ie)?ue():!h.isIntersecting&&!ne&&!ie&&(cancelAnimationFrame(te),clearTimeout(Ae),i=null);});},{root:g??null,threshold:D,rootMargin:F}),R;function Z(){clearTimeout(R),R=setTimeout(()=>{ee.forEach((S,h)=>{X[h]=ze(S),S.style.strokeDasharray=`${X[h]}`;});},150);}return window.addEventListener("resize",Z),window.addEventListener("orientationchange",Z),H>0?setTimeout(()=>w.observe(e),H):w.observe(e),{destroy(){cancelAnimationFrame(te),clearTimeout(Ae),w.disconnect(),window.removeEventListener("resize",Z),window.removeEventListener("orientationchange",Z),clearTimeout(R);},replay(){Se=0,ue();},pause(){ce||(ce=true,v=performance.now()-i,cancelAnimationFrame(te));},resume(){ce&&(ce=false,i=performance.now()-v,te=requestAnimationFrame(me));},seek(S){let h=Math.min(1,Math.max(0,S));Ce=h,ce=true,v=h*o,i=performance.now()-v,cancelAnimationFrame(te),Y(v);},getProgress(){return Ce}}}if(Q)return ht();Qe();function Re(){if(!ke||ce)return;let o=performance.now(),i=De(),v=l;if(C!==false){let w=o-Je,R=w>0?Math.abs(i-(He<0?i:He))/w:0;v=l*Math.max(.2,1+R*(typeof C=="number"?C:1)*.04);}He=i,Je=o;let Y=x?Fe===-1||i>=Fe?"forward":"reverse":E;Fe=i;let me=xe-Te,ue=true;if(m){let w=k(J(i,Te,xe,v));ne&&!x&&(be=Math.max(be,w),w=be),Ce=w,e.style.setProperty("--scroll-draw-progress",String(w));let R=Y==="reverse"?1-w:w;e.style.clipPath=fe(R),p?.(w),!ye&&J(i,Te,xe,v)>0&&(ye=true,I?.()),w>=1&&!ie?(ie=true,y?.(),Se<(M==="infinite"?1/0:M??0)&&(Se++,Ae=setTimeout(()=>{be=-1,ye=false,ie=false,e.style.clipPath=fe(0);},V))):w<1&&!ne&&(ie=false),te=requestAnimationFrame(Re);return}if(ee.forEach((w,R)=>{let Z=R*B*me,S=k(J(i,Te+Z,xe+Z,v));ne&&!x&&(be=Math.max(be,S),S=be),Ce=S,w.style.strokeDashoffset=Y==="reverse"?`${X[R]*S}`:`${X[R]*(1-S)}`,c&&(w.style.opacity=Y==="reverse"?`${1-S}`:`${S}`),re&&z?w.style.stroke=Oe(re,z,S):z&&(w.style.stroke=z),U!==null&&oe!==null?w.style.strokeWidth=`${U+(oe-U)*S}`:oe!==null&&(w.style.strokeWidth=`${oe}`),N!==null&&G!==null?w.style.fillOpacity=`${N+(G-N)*S}`:G!==null&&(w.style.fillOpacity=`${G}`),P&&w.tagName.toLowerCase()==="path"&&he[R]&&w.setAttribute("d",Be(he[R],P,S)),R===0&&(p?.(S),e.style.setProperty("--scroll-draw-progress",String(S))),S<1&&(ue=false);}),b){let w=k(J(i,Te,xe,v));for(let R in b){let Z=parseFloat(R);w>=Z&&!Me.has(Z)&&(Me.add(Z),b[R]?.());}}!ye&&J(i,Te,xe,v)>0&&(ye=true,I?.()),ue&&!ie?(ie=true,y?.(),Se<(M==="infinite"?1/0:M??0)&&(Se++,Ae=setTimeout(()=>{be=-1,ye=false,ie=false,Me.clear(),Ne();},V))):!ue&&!ne&&(ie=false),te=requestAnimationFrame(Re);}let We=new IntersectionObserver(o=>{o.forEach(i=>{ke=i.isIntersecting,ke&&!ce?te=requestAnimationFrame(Re):cancelAnimationFrame(te);});},{root:g??null,threshold:D,rootMargin:F}),_e;function Ve(){clearTimeout(_e),_e=setTimeout(()=>{ee.forEach((o,i)=>{X[i]=ze(o),o.style.strokeDasharray=`${X[i]}`;}),Qe();},150);}return window.addEventListener("resize",Ve),window.addEventListener("orientationchange",Ve),H>0?setTimeout(()=>We.observe(e),H):We.observe(e),{destroy(){cancelAnimationFrame(te),clearTimeout(Ae),We.disconnect(),window.removeEventListener("resize",Ve),window.removeEventListener("orientationchange",Ve),clearTimeout(_e),qe?.remove();},replay(){be=-1,Fe=-1,He=-1,ye=false,ie=false,Se=0,ce=false,Me.clear(),clearTimeout(Ae),Ne();},pause(){ce=true,cancelAnimationFrame(te);},resume(){ce&&(ce=false,ke&&(te=requestAnimationFrame(Re)));},seek(o){let i=Math.min(1,Math.max(0,o));Ce=i,be=i,ce=true,cancelAnimationFrame(te),dt(i,E);},getProgress(){return Ce}}}var it=new Map;function Le(e,r){it.set(e,r);}function $e(e){it.delete(e);}function At(e){return e.startsWith("#")||e.startsWith("rgb")||e.startsWith("hsl")}function at(e){let r=[],n=/([\w]+)\(([^)]*)\)/g,t;for(;(t=n.exec(e))!==null;){let u=[],s=[],f=t[2].trim();if(f)for(let l of f.split(/[\s,]+/)){let c=l.match(/^([-+]?[\d.eE]+)(.*)$/);u.push(c?parseFloat(c[1]):0),s.push(c?c[2]:"");}r.push({fn:t[1],nums:u,units:s});}return r}function Mt(e,r,n){let t=at(e),u=at(r);return t.length===0||t.length!==u.length?n<1?e:r:t.map((s,f)=>{let l=u[f];return s.fn!==l.fn||s.nums.length!==l.nums.length?n<1?`${s.fn}(${s.nums.map((c,d)=>`${c}${s.units[d]}`).join(", ")})`:`${l.fn}(${l.nums.map((c,d)=>`${c}${l.units[d]}`).join(", ")})`:`${s.fn}(${s.nums.map((c,d)=>`${c+(l.nums[d]-c)*n}${s.units[d]}`).join(", ")})`}).join(" ")}function lt(e,r,n){if(typeof e=="number"&&typeof r=="number")return String(e+(r-e)*n);let t=String(e),u=String(r);if(At(t))return Oe(t,u,n);if(t.includes("("))return Mt(t,u,n);let s=t.match(/^([-+]?[\d.]+)(.*)$/),f=u.match(/^([-+]?[\d.]+)(.*)$/);if(s&&f){let l=parseFloat(s[1]),c=parseFloat(f[1]);return `${l+(c-l)*n}${s[2]||f[2]}`}return n<1?t:u}function Lt(e){return e.replace(/([A-Z])/g,r=>`-${r.toLowerCase()}`)}var ct={linear:"linear","ease-in":"ease-in","ease-out":"ease-out","ease-in-out":"ease-in-out"},$t=new Set(["opacity","transform","background-color","color","filter","scale","translate","rotate"]),Ct=0;function Pt(){return typeof CSS<"u"&&typeof CSS.supports=="function"&&CSS.supports("animation-timeline: view()")}function Xe(e,r){let n={destroy:()=>{},replay:()=>{},pause:()=>{},resume:()=>{},seek:()=>{},getProgress:()=>0};if(typeof window>"u")return n;let{props:t,trigger:u={},easing:s="ease-out",speed:f=1,once:l=false,axis:c="y",scrollContainer:d,native:O=true,onProgress:B,onComplete:E}=r,ne=window.matchMedia("(prefers-reduced-motion: reduce)").matches,de=typeof s=="function"?s:ae[s]??ae["ease-out"],q=le(u.start??"top bottom"),K=le(u.end??"bottom top"),x=typeof d=="string"?document.querySelector(d):d??null,H=Object.entries(t).map(([a,g])=>({prop:Lt(a),from:Array.isArray(g)?g[0]:"",to:Array.isArray(g)?g[1]:g}));function A(){let a=window.getComputedStyle(e);for(let g of H)g.from===""&&(g.from=a.getPropertyValue(g.prop).trim()||"0");}function L(){for(let a of H)e.style.setProperty(a.prop,String(a.to));}if(ne)return L(),E?.(),n;A();function $(){if(!O||!Pt()||typeof s!="string"||!(s in ct)||c!=="y"||x||l||f!==1||B||E||(u.start??"top bottom").trim()!=="top bottom"||(u.end??"bottom top").trim()!=="bottom top")return false;for(let a of H)if(!$t.has(a.prop))return false;return true}function b(){let a=`ssd-a-${++Ct}`,g=H.map(N=>`${N.prop}:${N.from}`).join(";"),re=H.map(N=>`${N.prop}:${N.to}`).join(";"),z=document.createElement("style");z.setAttribute("data-ssd-animate",""),z.textContent=`@keyframes ${a}{from{${g}}to{${re}}}.${a}{animation-name:${a};animation-duration:auto;animation-timing-function:${ct[s]};animation-fill-mode:both;animation-timeline:view();animation-range:cover 0% cover 100%;}`,document.head.appendChild(z),e.classList.add(a);let U=()=>c==="x"?window.scrollX:window.scrollY,oe=()=>c==="x"?window.innerWidth:window.innerHeight;return {destroy(){e.classList.remove(a),z.remove();},replay(){e.classList.remove(a),e.offsetWidth,e.classList.add(a);},pause(){e.style.animationPlayState="paused";},resume(){e.style.animationPlayState="";},seek(N){let G=Math.min(1,Math.max(0,N));e.classList.remove(a);for(let fe of H)e.style.setProperty(fe.prop,lt(fe.from,fe.to,G));},getProgress(){let N=e.getBoundingClientRect(),G=U(),fe=oe(),{tStart:ee,tEnd:X}=pe({top:N.top,height:N.height},G,fe,q,K);return de(J(G,ee,X,f))}}}if($())return b();let C=0,D=0,F=0,M=false,V=false,P=-1,_=0,Q=false,j=()=>x?c==="x"?x.scrollLeft:x.scrollTop:c==="x"?window.scrollX:window.scrollY,se=()=>x?c==="x"?x.clientWidth:x.clientHeight:c==="x"?window.innerWidth:window.innerHeight;function p(){let a=e.getBoundingClientRect(),g,re;if(x){let U=x.getBoundingClientRect();g=c==="x"?a.left-U.left+x.scrollLeft:a.top-U.top+x.scrollTop,re=c==="x"?a.width:a.height;}else g=c==="x"?a.left:a.top,re=c==="x"?a.width:a.height;let z=pe({top:g,height:re},j(),se(),q,K);C=z.tStart,D=z.tEnd;}function I(a){e.style.setProperty("--scroll-draw-progress",String(a));for(let g of H)e.style.setProperty(g.prop,lt(g.from,g.to,a));B?.(a);}function y(){if(!M||V)return;let a=de(J(j(),C,D,f));l&&(P=Math.max(P,a),a=P),_=a,I(a),a>=1&&!Q?(Q=true,E?.()):a<1&&!l&&(Q=false),F=requestAnimationFrame(y);}p();{let a=de(J(j(),C,D,f));l&&a>0&&(P=a),_=a,I(a);}let m=new IntersectionObserver(a=>{a.forEach(g=>{M=g.isIntersecting,M&&!V?F=requestAnimationFrame(y):cancelAnimationFrame(F);});},{root:x??null}),k;function ge(){clearTimeout(k),k=setTimeout(p,150);}return window.addEventListener("resize",ge),window.addEventListener("orientationchange",ge),m.observe(e),Le(e,{type:"animate",getProgress:()=>_,getTrigger:()=>({tStart:C,tEnd:D})}),{destroy(){cancelAnimationFrame(F),m.disconnect(),window.removeEventListener("resize",ge),window.removeEventListener("orientationchange",ge),clearTimeout(k),$e(e);},replay(){P=-1,Q=false,_=0,V=false,I(0);},pause(){V=true,cancelAnimationFrame(F);},resume(){V&&(V=false,M&&(F=requestAnimationFrame(y)));},seek(a){let g=Math.min(1,Math.max(0,a));_=g,P=g,V=true,cancelAnimationFrame(F),I(g);},getProgress(){return _}}}var Ye={destroy:()=>{},replay:()=>{},pause:()=>{},resume:()=>{},seek:()=>{},getProgress:()=>0};function je(e,r){if(typeof window>"u")return Ye;let n=typeof e=="string"?document.querySelector(e):e;if(!n)return process.env.NODE_ENV!=="production"&&console.warn("[svg-scroll-draw] scrollCounter: element not found:",e),Ye;let t=n,{from:u=0,to:s,format:f,easing:l="ease-out",trigger:c={},once:d=true,decimals:O,onComplete:B}=r,E=O!==void 0?p=>p.toFixed(O):f??(p=>String(Math.round(p))),ne=typeof l=="function"?l:ae[l]??ae["ease-out"],de=le(c.start??"top 80%"),q=le(c.end??"top 20%");if(window.matchMedia("(prefers-reduced-motion: reduce)").matches)return t.textContent=E(s),B?.(),Ye;t.textContent=E(u);let x=0,H=0,A=0,L=false,$=false,b=-1,C=0,D=false,F=()=>window.scrollY,M=()=>window.innerHeight;function V(){let p=t.getBoundingClientRect(),I=pe({top:p.top,height:p.height},F(),M(),de,q);x=I.tStart,H=I.tEnd;}function P(p){t.textContent=E(u+(s-u)*p),t.style.setProperty("--scroll-draw-progress",String(p));}function _(){if(!L||$)return;let p=ne(J(F(),x,H,1));d&&(b=Math.max(b,p),p=b),C=p,P(p),p>=1&&!D?(D=true,B?.()):p<1&&!d&&(D=false),A=requestAnimationFrame(_);}V();{let p=ne(J(F(),x,H,1));d&&p>0&&(b=p),C=p,P(p);}let Q=new IntersectionObserver(p=>{p.forEach(I=>{L=I.isIntersecting,L&&!$?A=requestAnimationFrame(_):cancelAnimationFrame(A);});}),j;function se(){clearTimeout(j),j=setTimeout(V,150);}return window.addEventListener("resize",se),window.addEventListener("orientationchange",se),Q.observe(t),Le(t,{type:"counter",getProgress:()=>C,getTrigger:()=>({tStart:x,tEnd:H})}),{destroy(){cancelAnimationFrame(A),Q.disconnect(),window.removeEventListener("resize",se),window.removeEventListener("orientationchange",se),clearTimeout(j),$e(t);},replay(){b=-1,D=false,C=0,$=false,P(0);},pause(){$=true,cancelAnimationFrame(A);},resume(){$&&($=false,L&&(A=requestAnimationFrame(_)));},seek(p){let I=Math.min(1,Math.max(0,p));C=I,b=I,$=true,cancelAnimationFrame(A),P(I);},getProgress(){return C}}}var ut={destroy:()=>{},replay:()=>{},pause:()=>{},resume:()=>{},seek:()=>{},getProgress:()=>0};function Ue(e,r={}){if(typeof window>"u")return ut;let n=typeof e=="string"?document.querySelector(e):e;if(!n||n.tagName.toLowerCase()!=="video")return process.env.NODE_ENV!=="production"&&console.warn("[svg-scroll-draw] scrollVideo: <video> element not found:",e),ut;let t=n,{trigger:u={},easing:s="linear",once:f=false,axis:l="y",preload:c="auto",onReady:d,onComplete:O,onProgress:B}=r,E=window.matchMedia("(prefers-reduced-motion: reduce)").matches,ne=typeof s=="function"?s:ae[s]??ae.linear,de=le(u.start??"top top"),q=le(u.end??"bottom top");t.pause(),t.hasAttribute("preload")||(t.preload=c);let K=r.from??0,x=r.to,H=0,A=0,L=0,$=false,b=false,C=-1,D=0,F=false,M=false,V=()=>l==="x"?window.scrollX:window.scrollY,P=()=>l==="x"?window.innerWidth:window.innerHeight;function _(){let m=t.getBoundingClientRect(),k=l==="x"?m.left:m.top,ge=l==="x"?m.width:m.height,a=pe({top:k,height:ge},V(),P(),de,q);H=a.tStart,A=a.tEnd;}function Q(m){if(!M)return;let k=x??t.duration??0;t.currentTime=K+(k-K)*m,t.style.setProperty("--scroll-draw-progress",String(m)),B?.(m);}function j(){if(!$||b||!M)return;let m=ne(J(V(),H,A,1));f&&(C=Math.max(C,m),m=C),D=m,Q(m),m>=1&&!F?(F=true,O?.()):m<1&&!f&&(F=false),L=requestAnimationFrame(j);}function se(){if(M=true,x===void 0&&(x=t.duration),E){Q(1),d?.();return}_(),d?.(),$&&!b&&(L=requestAnimationFrame(j));}t.readyState>=1?se():t.addEventListener("loadedmetadata",se,{once:true}),M||_();let p=new IntersectionObserver(m=>{m.forEach(k=>{$=k.isIntersecting,$&&!b&&M?L=requestAnimationFrame(j):cancelAnimationFrame(L);});}),I;function y(){clearTimeout(I),I=setTimeout(_,150);}return window.addEventListener("resize",y),window.addEventListener("orientationchange",y),p.observe(t),Le(t,{type:"video",getProgress:()=>D,getTrigger:()=>({tStart:H,tEnd:A})}),{destroy(){cancelAnimationFrame(L),p.disconnect(),t.removeEventListener("loadedmetadata",se),window.removeEventListener("resize",y),window.removeEventListener("orientationchange",y),clearTimeout(I),$e(t);},replay(){C=-1,F=false,D=0,b=false,Q(0);},pause(){b=true,cancelAnimationFrame(L);},resume(){b&&(b=false,$&&M&&(L=requestAnimationFrame(j)));},seek(m){let k=Math.min(1,Math.max(0,m));D=k,C=k,b=true,cancelAnimationFrame(L),Q(k);},getProgress(){return D}}}function pt(e){let r=e.textContent??"";return e.textContent="",r.split(/(\s+)/).filter(Boolean).map(n=>{let t=document.createElement("span");return t.setAttribute("aria-hidden","true"),/^\s+$/.test(n)?(t.textContent=n,t.style.whiteSpace="pre"):(t.textContent=n,t.style.display="inline-block"),e.appendChild(t),/^\s+$/.test(n)?null:t}).filter(n=>n!==null)}function It(e){let r=e.textContent??"";return e.textContent="",r.split("").map(n=>{let t=document.createElement("span");return t.setAttribute("aria-hidden","true"),t.textContent=n,n===" "?t.style.whiteSpace="pre":t.style.display="inline-block",e.appendChild(t),n===" "?null:t}).filter(n=>n!==null)}function ft(e){let r=pt(e),n=new Map;for(let s of r){let f=s.offsetTop;n.has(f)||n.set(f,[]),n.get(f).push(s);}let t=[],u=Array.from(n.keys()).sort((s,f)=>s-f);for(let s of u){let f=n.get(s),l=document.createElement("span");l.setAttribute("aria-hidden","true"),l.style.display="inline-block";for(let c of f)l.appendChild(c);t.push(l);}e.textContent="";for(let s of t)e.appendChild(s),e.appendChild(document.createTextNode(" "));return t}function Ot(e,r,n,t){if(n<=1||t===0)return e;let u=(n-1)*t,s=r*t,f=s+(1-u);return f<=s?e>=s?1:0:Math.min(1,Math.max(0,(e-s)/(f-s)))}function Dt(e,r){let n=[];if(r?.y!==void 0&&n.push(`translateY(${r.y*(1-e)}px)`),r?.x!==void 0&&n.push(`translateX(${r.x*(1-e)}px)`),r?.rotate!==void 0&&n.push(`rotate(${r.rotate*(1-e)}deg)`),r?.scale!==void 0){let t=r.scale+(1-r.scale)*e;n.push(`scale(${t})`);}return n.join(" ")||""}var mt={destroy:()=>{},replay:()=>{},pause:()=>{},resume:()=>{},seek:()=>{},getProgress:()=>0};function Ze(e,r={}){if(typeof window>"u")return mt;let n=typeof e=="string"?document.querySelector(e):e;if(!n)return process.env.NODE_ENV!=="production"&&console.warn("[svg-scroll-draw] scrollText: element not found:",e),mt;let t=n,{split:u="words",stagger:s=.04,easing:f="ease-out",from:l={opacity:0,y:24},trigger:c={},once:d=true,onComplete:O}=r,B=window.matchMedia("(prefers-reduced-motion: reduce)").matches,E=typeof f=="function"?f:ae[f]??ae["ease-out"],ne=le(c.start??"top 85%"),de=le(c.end??"top 40%"),q=t.innerHTML;t.setAttribute("aria-label",t.textContent??"");let K;u==="chars"?K=It(t):u==="lines"?K=ft(t):K=pt(t);let x=K.length;function H(y,m){l?.opacity!==void 0&&(y.style.opacity=String(l.opacity+(1-l.opacity)*m));let k=Dt(m,l);k&&(y.style.transform=k);}function A(y){t.style.setProperty("--scroll-draw-progress",String(y)),K.forEach((m,k)=>{let ge=E(Ot(y,k,x,s));H(m,ge);});}if(B)return A(1),O?.(),{destroy(){t.innerHTML=q,t.removeAttribute("aria-label");},replay:()=>{},pause:()=>{},resume:()=>{},seek:()=>{},getProgress:()=>1};A(0);let L=0,$=0,b=0,C=false,D=false,F=-1,M=0,V=false,P=()=>window.scrollY,_=()=>window.innerHeight;function Q(){let y=t.getBoundingClientRect(),m=pe({top:y.top,height:y.height},P(),_(),ne,de);L=m.tStart,$=m.tEnd;}function j(){if(!C||D)return;let y=J(P(),L,$,1);d&&(F=Math.max(F,y),y=F),M=y,A(y),y>=1&&!V?(V=true,O?.()):y<1&&!d&&(V=false),b=requestAnimationFrame(j);}Q();let se=new IntersectionObserver(y=>{y.forEach(m=>{C=m.isIntersecting,C&&!D?b=requestAnimationFrame(j):cancelAnimationFrame(b);});}),p;function I(){clearTimeout(p),p=setTimeout(()=>{if(u==="lines"){let y=M;t.innerHTML=q,t.setAttribute("aria-label",t.textContent??""),K=ft(t),A(y);}Q();},150);}return window.addEventListener("resize",I),window.addEventListener("orientationchange",I),se.observe(t),Le(t,{type:"text",getProgress:()=>M,getTrigger:()=>({tStart:L,tEnd:$})}),{destroy(){cancelAnimationFrame(b),se.disconnect(),window.removeEventListener("resize",I),window.removeEventListener("orientationchange",I),clearTimeout(p),t.innerHTML=q,t.removeAttribute("aria-label"),$e(t);},replay(){F=-1,V=false,M=0,D=false,A(0);},pause(){D=true,cancelAnimationFrame(b);},resume(){D&&(D=false,C&&(b=requestAnimationFrame(j)));},seek(y){let m=Math.min(1,Math.max(0,y));M=m,F=m,D=true,cancelAnimationFrame(b),A(m);},getProgress(){return M}}}function on(e={}){let r,n;return solidJs.onMount(()=>{r&&(n=Ge(r,e));}),solidJs.onCleanup(()=>{n?.destroy();}),t=>{r=t;}}function sn(e={}){let r,n;return solidJs.onMount(()=>{r&&(n=Ge(r,e));}),solidJs.onCleanup(()=>{n?.destroy(),n=void 0;}),{ref:t=>{r=t;},getInstance:()=>n}}function an(e){let r,n;return solidJs.onMount(()=>{r&&(n=Xe(r,e));}),solidJs.onCleanup(()=>{n?.destroy();}),t=>{r=t;}}function ln(e){let r,n;return solidJs.onMount(()=>{r&&(n=Xe(r,e));}),solidJs.onCleanup(()=>{n?.destroy(),n=void 0;}),{ref:t=>{r=t;},getInstance:()=>n}}function cn(e){let r,n;return solidJs.onMount(()=>{r&&(n=je(r,e));}),solidJs.onCleanup(()=>{n?.destroy();}),t=>{r=t;}}function un(e){let r,n;return solidJs.onMount(()=>{r&&(n=je(r,e));}),solidJs.onCleanup(()=>{n?.destroy(),n=void 0;}),{ref:t=>{r=t;},getInstance:()=>n}}function fn(e={}){let r,n;return solidJs.onMount(()=>{r&&(n=Ue(r,e));}),solidJs.onCleanup(()=>{n?.destroy();}),t=>{r=t;}}function mn(e={}){let r,n;return solidJs.onMount(()=>{r&&(n=Ue(r,e));}),solidJs.onCleanup(()=>{n?.destroy(),n=void 0;}),{ref:t=>{r=t;},getInstance:()=>n}}function pn(e={}){let r,n;return solidJs.onMount(()=>{r&&(n=Ze(r,e));}),solidJs.onCleanup(()=>{n?.destroy();}),t=>{r=t;}}function dn(e={}){let r,n;return solidJs.onMount(()=>{r&&(n=Ze(r,e));}),solidJs.onCleanup(()=>{n?.destroy(),n=void 0;}),{ref:t=>{r=t;},getInstance:()=>n}}exports.createScrollAnimate=ln;exports.createScrollCounter=un;exports.createScrollDraw=sn;exports.createScrollText=dn;exports.createScrollVideo=mn;exports.useScrollAnimate=an;exports.useScrollCounter=cn;exports.useScrollDraw=on;exports.useScrollText=pn;exports.useScrollVideo=fn;
|
package/dist/solid/index.d.mts
CHANGED
|
@@ -119,6 +119,59 @@ interface ScrollDrawInstance {
|
|
|
119
119
|
getProgress: () => number;
|
|
120
120
|
}
|
|
121
121
|
|
|
122
|
+
interface ScrollAnimateOptions {
|
|
123
|
+
props: Record<string, string | number | [string | number, string | number]>;
|
|
124
|
+
trigger?: TriggerConfig;
|
|
125
|
+
easing?: EasingName | ((t: number) => number);
|
|
126
|
+
speed?: number;
|
|
127
|
+
once?: boolean;
|
|
128
|
+
axis?: 'x' | 'y';
|
|
129
|
+
scrollContainer?: string | Element;
|
|
130
|
+
native?: boolean;
|
|
131
|
+
onProgress?: (alpha: number) => void;
|
|
132
|
+
onComplete?: () => void;
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
interface ScrollCounterOptions {
|
|
136
|
+
from?: number;
|
|
137
|
+
to: number;
|
|
138
|
+
format?: (value: number) => string;
|
|
139
|
+
easing?: EasingName | ((t: number) => number);
|
|
140
|
+
trigger?: TriggerConfig;
|
|
141
|
+
once?: boolean;
|
|
142
|
+
decimals?: number;
|
|
143
|
+
onComplete?: () => void;
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
interface ScrollVideoOptions {
|
|
147
|
+
trigger?: TriggerConfig;
|
|
148
|
+
from?: number;
|
|
149
|
+
to?: number;
|
|
150
|
+
easing?: EasingName | ((t: number) => number);
|
|
151
|
+
once?: boolean;
|
|
152
|
+
axis?: 'x' | 'y';
|
|
153
|
+
preload?: 'auto' | 'metadata';
|
|
154
|
+
onReady?: () => void;
|
|
155
|
+
onComplete?: () => void;
|
|
156
|
+
onProgress?: (alpha: number) => void;
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
interface ScrollTextOptions {
|
|
160
|
+
split?: 'chars' | 'words' | 'lines';
|
|
161
|
+
stagger?: number;
|
|
162
|
+
easing?: EasingName | ((t: number) => number);
|
|
163
|
+
from?: {
|
|
164
|
+
opacity?: number;
|
|
165
|
+
y?: number;
|
|
166
|
+
x?: number;
|
|
167
|
+
rotate?: number;
|
|
168
|
+
scale?: number;
|
|
169
|
+
};
|
|
170
|
+
trigger?: TriggerConfig;
|
|
171
|
+
once?: boolean;
|
|
172
|
+
onComplete?: () => void;
|
|
173
|
+
}
|
|
174
|
+
|
|
122
175
|
/**
|
|
123
176
|
* SolidJS hook — returns a ref setter to attach to any container element.
|
|
124
177
|
*
|
|
@@ -144,5 +197,106 @@ declare function createScrollDraw(options?: ScrollDrawOptions): {
|
|
|
144
197
|
ref: (node: HTMLElement) => void;
|
|
145
198
|
getInstance: () => ScrollDrawInstance | undefined;
|
|
146
199
|
};
|
|
200
|
+
/**
|
|
201
|
+
* SolidJS hook — animate any CSS property on any element driven by scroll.
|
|
202
|
+
*
|
|
203
|
+
* @example
|
|
204
|
+
* import { useScrollAnimate } from 'svg-scroll-draw/solid';
|
|
205
|
+
*
|
|
206
|
+
* function Card() {
|
|
207
|
+
* const ref = useScrollAnimate({
|
|
208
|
+
* props: { opacity: [0, 1], transform: ['translateY(40px)', 'translateY(0)'] },
|
|
209
|
+
* easing: 'ease-out',
|
|
210
|
+
* once: true,
|
|
211
|
+
* });
|
|
212
|
+
* return <div ref={ref}>...</div>;
|
|
213
|
+
* }
|
|
214
|
+
*/
|
|
215
|
+
declare function useScrollAnimate(options: ScrollAnimateOptions): (node: HTMLElement) => void;
|
|
216
|
+
/**
|
|
217
|
+
* Returns both the ref setter and a getter for the live instance.
|
|
218
|
+
*
|
|
219
|
+
* @example
|
|
220
|
+
* const { ref, getInstance } = createScrollAnimate({
|
|
221
|
+
* props: { opacity: [0, 1] }, easing: 'ease-out', once: true,
|
|
222
|
+
* });
|
|
223
|
+
* <div ref={ref}>...</div>
|
|
224
|
+
* <button onClick={() => getInstance()?.replay()}>Replay</button>
|
|
225
|
+
*/
|
|
226
|
+
declare function createScrollAnimate(options: ScrollAnimateOptions): {
|
|
227
|
+
ref: (node: HTMLElement) => void;
|
|
228
|
+
getInstance: () => ScrollDrawInstance | undefined;
|
|
229
|
+
};
|
|
230
|
+
/**
|
|
231
|
+
* SolidJS hook — animate a number from `from` to `to` as the element scrolls in.
|
|
232
|
+
*
|
|
233
|
+
* @example
|
|
234
|
+
* import { useScrollCounter } from 'svg-scroll-draw/solid';
|
|
235
|
+
*
|
|
236
|
+
* function Stats() {
|
|
237
|
+
* const ref = useScrollCounter({ to: 1_250_000, format: n => '$' + Math.round(n).toLocaleString(), once: true });
|
|
238
|
+
* return <span ref={ref} />;
|
|
239
|
+
* }
|
|
240
|
+
*/
|
|
241
|
+
declare function useScrollCounter(options: ScrollCounterOptions): (node: HTMLElement) => void;
|
|
242
|
+
/**
|
|
243
|
+
* Returns both the ref setter and a getter for the live counter instance.
|
|
244
|
+
*
|
|
245
|
+
* @example
|
|
246
|
+
* const { ref, getInstance } = createScrollCounter({ to: 1000, once: true });
|
|
247
|
+
* <span ref={ref} />
|
|
248
|
+
* <button onClick={() => getInstance()?.replay()}>Replay</button>
|
|
249
|
+
*/
|
|
250
|
+
declare function createScrollCounter(options: ScrollCounterOptions): {
|
|
251
|
+
ref: (node: HTMLElement) => void;
|
|
252
|
+
getInstance: () => ScrollDrawInstance | undefined;
|
|
253
|
+
};
|
|
254
|
+
/**
|
|
255
|
+
* SolidJS hook — tie a <video> element's currentTime to scroll position.
|
|
256
|
+
*
|
|
257
|
+
* @example
|
|
258
|
+
* import { useScrollVideo } from 'svg-scroll-draw/solid';
|
|
259
|
+
*
|
|
260
|
+
* function HeroSection() {
|
|
261
|
+
* const ref = useScrollVideo({ trigger: { start: 'top top', end: 'bottom top' } });
|
|
262
|
+
* return <video ref={ref} src="/hero.mp4" muted playsinline preload="auto" />;
|
|
263
|
+
* }
|
|
264
|
+
*/
|
|
265
|
+
declare function useScrollVideo(options?: ScrollVideoOptions): (node: HTMLVideoElement) => void;
|
|
266
|
+
/**
|
|
267
|
+
* Returns both the ref setter and a getter for the live video instance.
|
|
268
|
+
*
|
|
269
|
+
* @example
|
|
270
|
+
* const { ref, getInstance } = createScrollVideo({ once: false });
|
|
271
|
+
* <video ref={ref} src="/hero.mp4" muted playsinline preload="auto" />
|
|
272
|
+
*/
|
|
273
|
+
declare function createScrollVideo(options?: ScrollVideoOptions): {
|
|
274
|
+
ref: (node: HTMLVideoElement) => void;
|
|
275
|
+
getInstance: () => ScrollDrawInstance | undefined;
|
|
276
|
+
};
|
|
277
|
+
/**
|
|
278
|
+
* SolidJS hook — split text and stagger-animate each piece on scroll.
|
|
279
|
+
*
|
|
280
|
+
* @example
|
|
281
|
+
* import { useScrollText } from 'svg-scroll-draw/solid';
|
|
282
|
+
*
|
|
283
|
+
* function Headline() {
|
|
284
|
+
* const ref = useScrollText({ split: 'words', stagger: 0.05, once: true });
|
|
285
|
+
* return <h2 ref={ref}>Animate on scroll.</h2>;
|
|
286
|
+
* }
|
|
287
|
+
*/
|
|
288
|
+
declare function useScrollText(options?: ScrollTextOptions): (node: HTMLElement) => void;
|
|
289
|
+
/**
|
|
290
|
+
* Returns both the ref setter and a getter for the live text instance.
|
|
291
|
+
*
|
|
292
|
+
* @example
|
|
293
|
+
* const { ref, getInstance } = createScrollText({ split: 'chars', stagger: 0.03 });
|
|
294
|
+
* <p ref={ref}>Hello world.</p>
|
|
295
|
+
* <button onClick={() => getInstance()?.replay()}>Replay</button>
|
|
296
|
+
*/
|
|
297
|
+
declare function createScrollText(options?: ScrollTextOptions): {
|
|
298
|
+
ref: (node: HTMLElement) => void;
|
|
299
|
+
getInstance: () => ScrollDrawInstance | undefined;
|
|
300
|
+
};
|
|
147
301
|
|
|
148
|
-
export { type ScrollDrawOptions, createScrollDraw, useScrollDraw };
|
|
302
|
+
export { type ScrollAnimateOptions, type ScrollCounterOptions, type ScrollDrawOptions, type ScrollTextOptions, type ScrollVideoOptions, createScrollAnimate, createScrollCounter, createScrollDraw, createScrollText, createScrollVideo, useScrollAnimate, useScrollCounter, useScrollDraw, useScrollText, useScrollVideo };
|
package/dist/solid/index.d.ts
CHANGED
|
@@ -119,6 +119,59 @@ interface ScrollDrawInstance {
|
|
|
119
119
|
getProgress: () => number;
|
|
120
120
|
}
|
|
121
121
|
|
|
122
|
+
interface ScrollAnimateOptions {
|
|
123
|
+
props: Record<string, string | number | [string | number, string | number]>;
|
|
124
|
+
trigger?: TriggerConfig;
|
|
125
|
+
easing?: EasingName | ((t: number) => number);
|
|
126
|
+
speed?: number;
|
|
127
|
+
once?: boolean;
|
|
128
|
+
axis?: 'x' | 'y';
|
|
129
|
+
scrollContainer?: string | Element;
|
|
130
|
+
native?: boolean;
|
|
131
|
+
onProgress?: (alpha: number) => void;
|
|
132
|
+
onComplete?: () => void;
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
interface ScrollCounterOptions {
|
|
136
|
+
from?: number;
|
|
137
|
+
to: number;
|
|
138
|
+
format?: (value: number) => string;
|
|
139
|
+
easing?: EasingName | ((t: number) => number);
|
|
140
|
+
trigger?: TriggerConfig;
|
|
141
|
+
once?: boolean;
|
|
142
|
+
decimals?: number;
|
|
143
|
+
onComplete?: () => void;
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
interface ScrollVideoOptions {
|
|
147
|
+
trigger?: TriggerConfig;
|
|
148
|
+
from?: number;
|
|
149
|
+
to?: number;
|
|
150
|
+
easing?: EasingName | ((t: number) => number);
|
|
151
|
+
once?: boolean;
|
|
152
|
+
axis?: 'x' | 'y';
|
|
153
|
+
preload?: 'auto' | 'metadata';
|
|
154
|
+
onReady?: () => void;
|
|
155
|
+
onComplete?: () => void;
|
|
156
|
+
onProgress?: (alpha: number) => void;
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
interface ScrollTextOptions {
|
|
160
|
+
split?: 'chars' | 'words' | 'lines';
|
|
161
|
+
stagger?: number;
|
|
162
|
+
easing?: EasingName | ((t: number) => number);
|
|
163
|
+
from?: {
|
|
164
|
+
opacity?: number;
|
|
165
|
+
y?: number;
|
|
166
|
+
x?: number;
|
|
167
|
+
rotate?: number;
|
|
168
|
+
scale?: number;
|
|
169
|
+
};
|
|
170
|
+
trigger?: TriggerConfig;
|
|
171
|
+
once?: boolean;
|
|
172
|
+
onComplete?: () => void;
|
|
173
|
+
}
|
|
174
|
+
|
|
122
175
|
/**
|
|
123
176
|
* SolidJS hook — returns a ref setter to attach to any container element.
|
|
124
177
|
*
|
|
@@ -144,5 +197,106 @@ declare function createScrollDraw(options?: ScrollDrawOptions): {
|
|
|
144
197
|
ref: (node: HTMLElement) => void;
|
|
145
198
|
getInstance: () => ScrollDrawInstance | undefined;
|
|
146
199
|
};
|
|
200
|
+
/**
|
|
201
|
+
* SolidJS hook — animate any CSS property on any element driven by scroll.
|
|
202
|
+
*
|
|
203
|
+
* @example
|
|
204
|
+
* import { useScrollAnimate } from 'svg-scroll-draw/solid';
|
|
205
|
+
*
|
|
206
|
+
* function Card() {
|
|
207
|
+
* const ref = useScrollAnimate({
|
|
208
|
+
* props: { opacity: [0, 1], transform: ['translateY(40px)', 'translateY(0)'] },
|
|
209
|
+
* easing: 'ease-out',
|
|
210
|
+
* once: true,
|
|
211
|
+
* });
|
|
212
|
+
* return <div ref={ref}>...</div>;
|
|
213
|
+
* }
|
|
214
|
+
*/
|
|
215
|
+
declare function useScrollAnimate(options: ScrollAnimateOptions): (node: HTMLElement) => void;
|
|
216
|
+
/**
|
|
217
|
+
* Returns both the ref setter and a getter for the live instance.
|
|
218
|
+
*
|
|
219
|
+
* @example
|
|
220
|
+
* const { ref, getInstance } = createScrollAnimate({
|
|
221
|
+
* props: { opacity: [0, 1] }, easing: 'ease-out', once: true,
|
|
222
|
+
* });
|
|
223
|
+
* <div ref={ref}>...</div>
|
|
224
|
+
* <button onClick={() => getInstance()?.replay()}>Replay</button>
|
|
225
|
+
*/
|
|
226
|
+
declare function createScrollAnimate(options: ScrollAnimateOptions): {
|
|
227
|
+
ref: (node: HTMLElement) => void;
|
|
228
|
+
getInstance: () => ScrollDrawInstance | undefined;
|
|
229
|
+
};
|
|
230
|
+
/**
|
|
231
|
+
* SolidJS hook — animate a number from `from` to `to` as the element scrolls in.
|
|
232
|
+
*
|
|
233
|
+
* @example
|
|
234
|
+
* import { useScrollCounter } from 'svg-scroll-draw/solid';
|
|
235
|
+
*
|
|
236
|
+
* function Stats() {
|
|
237
|
+
* const ref = useScrollCounter({ to: 1_250_000, format: n => '$' + Math.round(n).toLocaleString(), once: true });
|
|
238
|
+
* return <span ref={ref} />;
|
|
239
|
+
* }
|
|
240
|
+
*/
|
|
241
|
+
declare function useScrollCounter(options: ScrollCounterOptions): (node: HTMLElement) => void;
|
|
242
|
+
/**
|
|
243
|
+
* Returns both the ref setter and a getter for the live counter instance.
|
|
244
|
+
*
|
|
245
|
+
* @example
|
|
246
|
+
* const { ref, getInstance } = createScrollCounter({ to: 1000, once: true });
|
|
247
|
+
* <span ref={ref} />
|
|
248
|
+
* <button onClick={() => getInstance()?.replay()}>Replay</button>
|
|
249
|
+
*/
|
|
250
|
+
declare function createScrollCounter(options: ScrollCounterOptions): {
|
|
251
|
+
ref: (node: HTMLElement) => void;
|
|
252
|
+
getInstance: () => ScrollDrawInstance | undefined;
|
|
253
|
+
};
|
|
254
|
+
/**
|
|
255
|
+
* SolidJS hook — tie a <video> element's currentTime to scroll position.
|
|
256
|
+
*
|
|
257
|
+
* @example
|
|
258
|
+
* import { useScrollVideo } from 'svg-scroll-draw/solid';
|
|
259
|
+
*
|
|
260
|
+
* function HeroSection() {
|
|
261
|
+
* const ref = useScrollVideo({ trigger: { start: 'top top', end: 'bottom top' } });
|
|
262
|
+
* return <video ref={ref} src="/hero.mp4" muted playsinline preload="auto" />;
|
|
263
|
+
* }
|
|
264
|
+
*/
|
|
265
|
+
declare function useScrollVideo(options?: ScrollVideoOptions): (node: HTMLVideoElement) => void;
|
|
266
|
+
/**
|
|
267
|
+
* Returns both the ref setter and a getter for the live video instance.
|
|
268
|
+
*
|
|
269
|
+
* @example
|
|
270
|
+
* const { ref, getInstance } = createScrollVideo({ once: false });
|
|
271
|
+
* <video ref={ref} src="/hero.mp4" muted playsinline preload="auto" />
|
|
272
|
+
*/
|
|
273
|
+
declare function createScrollVideo(options?: ScrollVideoOptions): {
|
|
274
|
+
ref: (node: HTMLVideoElement) => void;
|
|
275
|
+
getInstance: () => ScrollDrawInstance | undefined;
|
|
276
|
+
};
|
|
277
|
+
/**
|
|
278
|
+
* SolidJS hook — split text and stagger-animate each piece on scroll.
|
|
279
|
+
*
|
|
280
|
+
* @example
|
|
281
|
+
* import { useScrollText } from 'svg-scroll-draw/solid';
|
|
282
|
+
*
|
|
283
|
+
* function Headline() {
|
|
284
|
+
* const ref = useScrollText({ split: 'words', stagger: 0.05, once: true });
|
|
285
|
+
* return <h2 ref={ref}>Animate on scroll.</h2>;
|
|
286
|
+
* }
|
|
287
|
+
*/
|
|
288
|
+
declare function useScrollText(options?: ScrollTextOptions): (node: HTMLElement) => void;
|
|
289
|
+
/**
|
|
290
|
+
* Returns both the ref setter and a getter for the live text instance.
|
|
291
|
+
*
|
|
292
|
+
* @example
|
|
293
|
+
* const { ref, getInstance } = createScrollText({ split: 'chars', stagger: 0.03 });
|
|
294
|
+
* <p ref={ref}>Hello world.</p>
|
|
295
|
+
* <button onClick={() => getInstance()?.replay()}>Replay</button>
|
|
296
|
+
*/
|
|
297
|
+
declare function createScrollText(options?: ScrollTextOptions): {
|
|
298
|
+
ref: (node: HTMLElement) => void;
|
|
299
|
+
getInstance: () => ScrollDrawInstance | undefined;
|
|
300
|
+
};
|
|
147
301
|
|
|
148
|
-
export { type ScrollDrawOptions, createScrollDraw, useScrollDraw };
|
|
302
|
+
export { type ScrollAnimateOptions, type ScrollCounterOptions, type ScrollDrawOptions, type ScrollTextOptions, type ScrollVideoOptions, createScrollAnimate, createScrollCounter, createScrollDraw, createScrollText, createScrollVideo, useScrollAnimate, useScrollCounter, useScrollDraw, useScrollText, useScrollVideo };
|