svg-scroll-draw 1.1.0 → 1.3.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/dist/angular/index.cjs +3 -3
- package/dist/angular/index.d.mts +20 -1
- package/dist/angular/index.d.ts +20 -1
- package/dist/angular/index.mjs +3 -3
- package/dist/astro/index.cjs +3 -3
- package/dist/astro/index.d.mts +20 -1
- package/dist/astro/index.d.ts +20 -1
- package/dist/astro/index.mjs +3 -3
- package/dist/cdn/svg-scroll-draw.global.js +3 -3
- package/dist/group/index.cjs +3 -3
- package/dist/group/index.d.mts +20 -1
- package/dist/group/index.d.ts +20 -1
- package/dist/group/index.mjs +3 -3
- package/dist/index.cjs +3 -3
- package/dist/index.d.mts +50 -2
- package/dist/index.d.ts +50 -2
- package/dist/index.mjs +3 -3
- package/dist/nuxt/index.cjs +3 -3
- package/dist/nuxt/index.d.mts +20 -1
- package/dist/nuxt/index.d.ts +20 -1
- package/dist/nuxt/index.mjs +3 -3
- package/dist/react/index.cjs +3 -3
- package/dist/react/index.d.mts +20 -1
- package/dist/react/index.d.ts +20 -1
- package/dist/react/index.mjs +3 -3
- package/dist/solid/index.cjs +3 -3
- package/dist/solid/index.d.mts +20 -1
- package/dist/solid/index.d.ts +20 -1
- package/dist/solid/index.mjs +3 -3
- package/dist/svelte/index.cjs +3 -3
- package/dist/svelte/index.d.mts +20 -1
- package/dist/svelte/index.d.ts +20 -1
- package/dist/svelte/index.mjs +3 -3
- package/dist/timeline/index.cjs +1 -1
- package/dist/timeline/index.d.mts +1 -1
- package/dist/timeline/index.d.ts +1 -1
- package/dist/timeline/index.mjs +1 -1
- package/dist/vue/index.cjs +3 -3
- package/dist/vue/index.d.mts +20 -1
- package/dist/vue/index.d.ts +20 -1
- package/dist/vue/index.mjs +3 -3
- package/dist/web-component/index.cjs +3 -3
- package/dist/web-component/index.mjs +3 -3
- package/package.json +6 -2
package/dist/vue/index.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import * as vue from 'vue';
|
|
2
2
|
|
|
3
|
-
type EasingName = 'linear' | 'ease-in' | 'ease-out' | 'ease-in-out' | 'spring';
|
|
3
|
+
type EasingName = 'linear' | 'ease-in' | 'ease-out' | 'ease-in-out' | 'spring' | 'bounce' | 'elastic';
|
|
4
4
|
interface TriggerConfig {
|
|
5
5
|
start?: string;
|
|
6
6
|
end?: string;
|
|
@@ -62,6 +62,25 @@ interface ScrollDrawOptions {
|
|
|
62
62
|
onProgress?: (alpha: number) => void;
|
|
63
63
|
onStart?: () => void;
|
|
64
64
|
onComplete?: () => void;
|
|
65
|
+
/**
|
|
66
|
+
* Trigger the animation when the element enters the viewport instead of
|
|
67
|
+
* tying it to scroll position. The draw runs over `duration` milliseconds,
|
|
68
|
+
* replaying each time the element re-enters the viewport (use `once: true`
|
|
69
|
+
* to play only the first time).
|
|
70
|
+
*
|
|
71
|
+
* All visual options work in autoplay mode — `easing`, `stagger`, `fade`,
|
|
72
|
+
* `strokeColor`, `strokeWidth`, `fillOpacity`, `clip`, `morphTo`, `waypoints`,
|
|
73
|
+
* `repeat`, `repeatDelay`, `onStart`, `onComplete`, `onProgress`, etc.
|
|
74
|
+
*
|
|
75
|
+
* The full instance API (`pause`, `resume`, `seek`, `replay`, `getProgress`)
|
|
76
|
+
* also works — `seek(0.5)` pauses at 50% of the duration.
|
|
77
|
+
*/
|
|
78
|
+
autoplay?: boolean;
|
|
79
|
+
/**
|
|
80
|
+
* Duration of the autoplay animation in milliseconds. Only used when
|
|
81
|
+
* `autoplay: true`. Default `1000`.
|
|
82
|
+
*/
|
|
83
|
+
duration?: number;
|
|
65
84
|
/**
|
|
66
85
|
* Use the browser's native CSS scroll-driven animation
|
|
67
86
|
* (`animation-timeline: view()`) when the configuration is simple enough and
|
package/dist/vue/index.mjs
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import {defineComponent,ref,onMounted,onUnmounted,h}from'vue';var
|
|
2
|
-
<div style="position:absolute;${
|
|
3
|
-
<div style="position:absolute;${U?`left:${D}px;top:0;bottom:0;border-left:2px dashed #ef4444;`:`top:${D}px;left:0;right:0;border-top:2px dashed #ef4444;`}padding:2px 6px;color:#ef4444;background:rgba(0,0,0,.6)">\u25A0 end</div>`;}return document.body.appendChild(n),window.addEventListener("scroll",l,{passive:true}),l(),n}function He(e,r,s){let n=(r.match(/[-+]?(?:\d*\.)?\d+(?:[eE][-+]?\d+)?/g)??[]).map(Number),l=0;return e.replace(/[-+]?(?:\d*\.)?\d+(?:[eE][-+]?\d+)?/g,d=>{let m=parseFloat(d),D=n[l++]??m;return String(+(m+(D-m)*s).toFixed(4))})}function xe(e,r={}){if(typeof window>"u")return {destroy:()=>{},replay:()=>{},pause:()=>{},resume:()=>{},seek:()=>{},getProgress:()=>0};let s=window.matchMedia("(prefers-reduced-motion: reduce)").matches,{selector:n="path, polyline, line, polygon, rect, circle",speed:l=1,fade:d=false,easing:m="linear",trigger:D={},stagger:U=0,direction:y="forward",once:X=false,debug:ze=false,axis:S="y",scrollContainer:ce,autoReverse:Z=false,delay:me=0,strokeColor:R,strokeWidth:H,fillOpacity:V,waypoints:ee,velocityScale:te=false,threshold:Be=0,rootMargin:qe="0px",repeat:j=0,repeatDelay:ke=0,morphTo:L,clip:pe,native:_e=true,onProgress:de,onStart:ye,onComplete:J}=r,W=pe===true?"left":typeof pe=="string"?pe:false,re=typeof m=="function"?m:ve[m]??ve.linear,Te=we(D.start??"top bottom"),Ae=we(D.end??"bottom top"),b=typeof ce=="string"?document.querySelector(ce):ce??null,C=Array.isArray(R)?R[0]:null,$=Array.isArray(R)?R[1]:typeof R=="string"?R:null,E=Array.isArray(H)?H[0]:null,x=Array.isArray(H)?H[1]:typeof H=="number"?H:null,k=Array.isArray(V)?V[0]:null,T=Array.isArray(V)?V[1]:typeof V=="number"?V:null;function _(t){let o=t*100;switch(W){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 v=W?[]:Array.from(e.querySelectorAll(n)),g=[],O=[],F=0,I=0,P=false,G=false,N=0,ne=false,A=-1,se=-1,z=false,oe=0,K=0,ie,ge=null,ae=new Set,le=-1,Me=performance.now();function Q(){return b?S==="x"?b.scrollLeft:b.scrollTop:S==="x"?window.scrollX:window.scrollY}function De(){return b?S==="x"?b.clientWidth:b.clientHeight:S==="x"?window.innerWidth:window.innerHeight}function Pe(){let t=e.getBoundingClientRect(),o,a,p;if(b){let w=b.getBoundingClientRect();o=S==="x"?t.left-w.left+b.scrollLeft:t.top-w.top+b.scrollTop,a=S==="x"?t.width:t.height,p=Q();}else o=S==="x"?t.left:t.top,a=S==="x"?t.width:t.height,p=Q();let B=$e({top:o,height:a},p,De(),Te,Ae);F=B.tStart,I=B.tEnd,ze&&process.env.NODE_ENV!=="production"&&(ge?.remove(),ge=Ze(F,I,S));}function Ue(t,o){if(e.style.setProperty("--scroll-draw-progress",String(t)),W){let a=o==="reverse"?1-t:t;e.style.clipPath=_(a);return}v.forEach((a,p)=>{a.style.strokeDashoffset=o==="reverse"?`${g[p]*t}`:`${g[p]*(1-t)}`,d&&(a.style.opacity=o==="reverse"?`${1-t}`:`${t}`),C&&$?a.style.stroke=Ee(C,$,t):$&&(a.style.stroke=$),E!==null&&x!==null?a.style.strokeWidth=`${E+(x-E)*t}`:x!==null&&(a.style.strokeWidth=`${x}`),k!==null&&T!==null?a.style.fillOpacity=`${k+(T-k)*t}`:T!==null&&(a.style.fillOpacity=`${T}`),L&&a.tagName.toLowerCase()==="path"&&O[p]&&a.setAttribute("d",He(O[p],L,t));});}function Le(){if(e.style.setProperty("--scroll-draw-progress","0"),W){e.style.clipPath=_(0);return}v.forEach((t,o)=>{t.style.strokeDasharray=`${g[o]}`,t.style.strokeDashoffset=y==="reverse"?"0":`${g[o]}`,d?t.style.opacity=y==="reverse"?"1":"0":t.style.opacity="",C&&(t.style.stroke=C),E!==null&&(t.style.strokeWidth=`${E}`),k!==null&&(t.style.fillOpacity=`${k}`),L&&t.tagName.toLowerCase()==="path"&&O[o]&&t.setAttribute("d",O[o]);});}if(v.forEach(t=>{Ye(t);let o=Se(t);g.push(o),t.tagName.toLowerCase()==="path"?O.push(t.getAttribute("d")??""):O.push(""),s?(t.style.strokeDasharray=`${o}`,t.style.strokeDashoffset=y==="reverse"?`${o}`:"0",d&&(t.style.opacity="1"),$&&(t.style.stroke=$),x!==null&&(t.style.strokeWidth=`${x}`),T!==null&&(t.style.fillOpacity=`${T}`),L&&t.tagName.toLowerCase()==="path"&&t.setAttribute("d",L)):(t.style.strokeDasharray=`${o}`,t.style.strokeDashoffset=y==="reverse"?"0":`${o}`,d?t.style.opacity=y==="reverse"?"1":"0":t.style.opacity="",C&&(t.style.stroke=C),E!==null&&(t.style.strokeWidth=`${E}`),k!==null&&(t.style.fillOpacity=`${k}`));}),W){if(s)return e.style.clipPath=_(1),J?.(),{destroy:()=>{},replay:()=>{},pause:()=>{},resume:()=>{},seek:()=>{},getProgress:()=>1};e.style.clipPath=_(0);}else if(s)return J?.(),{destroy:()=>{},replay:()=>{},pause:()=>{},resume:()=>{},seek:()=>{},getProgress:()=>1};function Xe(){return !(_e===false||!Qe()||!v.length||typeof m!="string"||!(m in Re)||W||S!=="y"||b||l!==1||U!==0||X||Z||te!==false||L||ee||j||me>0||de||ye||J||R!=null||H!=null||V!=null||(D.start??"top bottom").trim()!=="top bottom"||(D.end??"bottom top").trim()!=="bottom top")}function je(){let t=`svg-scroll-draw-${++Ke}`,o=y==="reverse"?"0":"var(--ssd-len)",a=y==="reverse"?"var(--ssd-len)":"0",p=`stroke-dashoffset:${o};`,B=`stroke-dashoffset:${a};`;d&&(p+=`opacity:${y==="reverse"?1:0};`,B+=`opacity:${y==="reverse"?0:1};`);let w=document.createElement("style");w.setAttribute("data-svg-scroll-draw",""),w.textContent=`@keyframes ${t}{from{${p}}to{${B}}}.${t}{animation-name:${t};animation-duration:auto;animation-timing-function:${Re[m]};animation-fill-mode:both;animation-timeline:view();animation-range:cover 0% cover 100%;}`,document.head.appendChild(w);function i(f,M){f.style.setProperty("--ssd-len",String(g[M])),f.style.strokeDasharray=`${g[M]}`,f.style.strokeDashoffset="",f.style.opacity="",f.style.animationPlayState="",f.classList.add(t);}v.forEach(i);let u=false,h=-1;function c(){if(h>=0)return h;let f=e.getBoundingClientRect(),{tStart:M,tEnd:Y}=$e({top:f.top,height:f.height},Q(),De(),Te,Ae);return re(q(Q(),M,Y,l))}return {destroy(){v.forEach(f=>{f.classList.remove(t),f.style.removeProperty("--ssd-len"),f.style.animationPlayState="";}),w.remove();},replay(){u=false,h=-1,v.forEach(i);},pause(){u=true,v.forEach(f=>{f.style.animationPlayState="paused";});},resume(){u&&(u=false,v.forEach(f=>{f.style.animationPlayState="running";}));},seek(f){let M=Math.min(1,Math.max(0,f));h=M,u=true,v.forEach((Y,Ce)=>{Y.classList.remove(t),Y.style.strokeDashoffset=y==="reverse"?`${g[Ce]*M}`:`${g[Ce]*(1-M)}`,d&&(Y.style.opacity=y==="reverse"?`${1-M}`:`${M}`);});},getProgress(){return c()}}}if(Xe())return je();Pe();function ue(){if(!ne||z)return;let t=performance.now(),o=Q(),a=l;if(te!==false){let i=t-Me,u=i>0?Math.abs(o-(le<0?o:le))/i:0;a=l*Math.max(.2,1+u*(typeof te=="number"?te:1)*.04);}le=o,Me=t;let p=Z?se===-1||o>=se?"forward":"reverse":y;se=o;let B=I-F,w=true;if(W){let i=re(q(o,F,I,a));X&&!Z&&(A=Math.max(A,i),i=A),oe=i,e.style.setProperty("--scroll-draw-progress",String(i));let u=p==="reverse"?1-i:i;e.style.clipPath=_(u),de?.(i),!G&&q(o,F,I,a)>0&&(G=true,ye?.()),i>=1&&!P?(P=true,J?.(),K<(j==="infinite"?1/0:j??0)&&(K++,ie=setTimeout(()=>{A=-1,G=false,P=false,e.style.clipPath=_(0);},ke))):i<1&&!X&&(P=false),N=requestAnimationFrame(ue);return}if(v.forEach((i,u)=>{let h=u*U*B,c=re(q(o,F+h,I+h,a));X&&!Z&&(A=Math.max(A,c),c=A),oe=c,i.style.strokeDashoffset=p==="reverse"?`${g[u]*c}`:`${g[u]*(1-c)}`,d&&(i.style.opacity=p==="reverse"?`${1-c}`:`${c}`),C&&$?i.style.stroke=Ee(C,$,c):$&&(i.style.stroke=$),E!==null&&x!==null?i.style.strokeWidth=`${E+(x-E)*c}`:x!==null&&(i.style.strokeWidth=`${x}`),k!==null&&T!==null?i.style.fillOpacity=`${k+(T-k)*c}`:T!==null&&(i.style.fillOpacity=`${T}`),L&&i.tagName.toLowerCase()==="path"&&O[u]&&i.setAttribute("d",He(O[u],L,c)),u===0&&(de?.(c),e.style.setProperty("--scroll-draw-progress",String(c))),c<1&&(w=false);}),ee){let i=re(q(o,F,I,a));for(let u in ee){let h=parseFloat(u);i>=h&&!ae.has(h)&&(ae.add(h),ee[u]?.());}}!G&&q(o,F,I,a)>0&&(G=true,ye?.()),w&&!P?(P=true,J?.(),K<(j==="infinite"?1/0:j??0)&&(K++,ie=setTimeout(()=>{A=-1,G=false,P=false,ae.clear(),Le();},ke))):!w&&!X&&(P=false),N=requestAnimationFrame(ue);}let he=new IntersectionObserver(t=>{t.forEach(o=>{ne=o.isIntersecting,ne&&!z?N=requestAnimationFrame(ue):cancelAnimationFrame(N);});},{root:b??null,threshold:Be,rootMargin:qe}),be;function fe(){clearTimeout(be),be=setTimeout(()=>{v.forEach((t,o)=>{g[o]=Se(t),t.style.strokeDasharray=`${g[o]}`;}),Pe();},150);}return window.addEventListener("resize",fe),window.addEventListener("orientationchange",fe),me>0?setTimeout(()=>he.observe(e),me):he.observe(e),{destroy(){cancelAnimationFrame(N),clearTimeout(ie),he.disconnect(),window.removeEventListener("resize",fe),window.removeEventListener("orientationchange",fe),clearTimeout(be),ge?.remove();},replay(){A=-1,se=-1,le=-1,G=false,P=false,K=0,z=false,ae.clear(),clearTimeout(ie),Le();},pause(){z=true,cancelAnimationFrame(N);},resume(){z&&(z=false,ne&&(N=requestAnimationFrame(ue)));},seek(t){let o=Math.min(1,Math.max(0,t));oe=o,A=o,z=true,cancelAnimationFrame(N),Ue(o,y);},getProgress(){return oe}}}function at(e={}){let r=ref(null);return onMounted(()=>{if(!r.value)return;let s=xe(r.value,e);onUnmounted(()=>s.destroy());}),r}var lt=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 s=ref(null);return onMounted(()=>{if(!s.value)return;let n={};e.selector!=null&&(n.selector=e.selector),e.speed!=null&&(n.speed=e.speed),e.fade!=null&&(n.fade=e.fade),e.stagger!=null&&(n.stagger=e.stagger),e.easing!=null&&(n.easing=e.easing),e.direction!=null&&(n.direction=e.direction),e.trigger!=null&&(n.trigger=e.trigger),e.once!=null&&(n.once=e.once),e.debug!=null&&(n.debug=e.debug),e.onProgress!=null&&(n.onProgress=e.onProgress),e.onStart!=null&&(n.onStart=e.onStart),e.onComplete!=null&&(n.onComplete=e.onComplete);let l=xe(s.value,n);onUnmounted(()=>l.destroy());}),()=>h("div",{ref:s},r.default?.())}});export{lt as ScrollDraw,at as useScrollDraw};
|
|
1
|
+
import {defineComponent,ref,onMounted,onUnmounted,h}from'vue';function et({bounces:e=3,decay:r=.5}={}){let n=Math.max(1,Math.round(e)),s=Math.max(.01,Math.min(.99,r)),m=Math.sqrt(s),p=0,b=[];for(let u=0;u<n;u++){let g=Math.pow(m,u);b.push(g),p+=g;}let $=[0],R=0;for(let u=0;u<n;u++)R+=b[u]/p,$.push(R);return u=>{if(u<=0)return 0;if(u>=1)return 1;for(let g=0;g<n;g++)if(u<=$[g+1]){let se=(u-$[g])/($[g+1]-$[g]);if(g===0)return se*(2-se);let P=1-Math.pow(s,g);return P+(1-P)*(2*se-1)*(2*se-1)}return 1}}function tt({amplitude:e=1,period:r=.4}={}){let n=Math.max(1,e),s=Math.max(.1,r),m=n<=1?s/4:s/(2*Math.PI)*Math.asin(1/n);return p=>p<=0?0:p>=1?1:n*Math.pow(2,-10*p)*Math.sin((p-m)*(2*Math.PI)/s)+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:et(),elastic:tt()};function ke(e="top bottom"){let r=e.trim();if(/^\d+(\.\d+)?%$/.test(r))return {element:"top",viewport:r};let[n="top",s="bottom"]=r.split(/\s+/).filter(Boolean);return {element:n,viewport:s}}function We(e,r,n,s){switch(s){case "top":return e+n;case "center":return e+n+r/2;case "bottom":return e+n+r;default:return e+n}}function ze(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 we(e){let r=e.tagName.toLowerCase();if(r==="rect"){let n=parseFloat(e.getAttribute("width")??"0"),s=parseFloat(e.getAttribute("height")??"0");return 2*(n+s)}if(r==="circle"){let n=parseFloat(e.getAttribute("r")??"0");return 2*Math.PI*n}return e.getTotalLength()}function rt(e,r,n){return Math.min(n,Math.max(r,e))}function ne(e,r,n,s){return n===r?0:rt((e-r)/(n-r)*s,0,1)}function De(e,r,n,s,m){let p=We(e.top,e.height,r,s.element)-ze(s.viewport,n),b=We(e.top,e.height,r,m.element)-ze(m.viewport,n);return {tStart:p,tEnd:b}}function qe(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 s=/^rgb\(\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*\)$/i.exec(e);return s?[parseInt(s[1]),parseInt(s[2]),parseInt(s[3])]:null}function ve(e,r,n){let s=qe(e),m=qe(r);return !s||!m?e:`rgb(${Math.round(s[0]+(m[0]-s[0])*n)},${Math.round(s[1]+(m[1]-s[1])*n)},${Math.round(s[2]+(m[2]-s[2])*n)})`}function Ve(e,r){process.env.NODE_ENV!=="production"&&console.warn(`[svg-scroll-draw] ${e}`,r);}var Be={linear:"linear","ease-in":"ease-in","ease-out":"ease-out","ease-in-out":"ease-in-out"},nt=0;function st(){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"?Ve("Element has no stroke \u2014 path will not be visible.",e):n&&n!=="none"&&n!=="transparent"&&Ve("Element has a fill \u2014 it may obscure the stroke animation.",e);}function it(e,r,n){let s=document.createElement("div");s.setAttribute("data-svg-scroll-draw-debug",""),s.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 m(){let p=n==="x"?window.scrollX:window.scrollY,b=e-p,$=r-p,R=n==="x";s.innerHTML=`
|
|
2
|
+
<div style="position:absolute;${R?`left:${b}px;top:0;bottom:0;border-left:2px dashed #22c55e;`:`top:${b}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;${R?`left:${$}px;top:0;bottom:0;border-left:2px dashed #ef4444;`:`top:${$}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(s),window.addEventListener("scroll",m,{passive:true}),m(),s}function Pe(e,r,n){let s=(r.match(/[-+]?(?:\d*\.)?\d+(?:[eE][-+]?\d+)?/g)??[]).map(Number),m=0;return e.replace(/[-+]?(?:\d*\.)?\d+(?:[eE][-+]?\d+)?/g,p=>{let b=parseFloat(p),$=s[m++]??b;return String(+(b+($-b)*n).toFixed(4))})}function Le(e,r={}){if(typeof window>"u")return {destroy:()=>{},replay:()=>{},pause:()=>{},resume:()=>{},seek:()=>{},getProgress:()=>0};let n=window.matchMedia("(prefers-reduced-motion: reduce)").matches,{selector:s="path, polyline, line, polygon, rect, circle",speed:m=1,fade:p=false,easing:b="linear",trigger:$={},stagger:R=0,direction:u="forward",once:g=false,debug:se=false,axis:P="y",scrollContainer:Ee,autoReverse:ce=false,delay:ae=0,strokeColor:j,strokeWidth:J,fillOpacity:K,waypoints:Q,velocityScale:fe=false,threshold:Fe=0,rootMargin:Ce="0px",repeat:Y=0,repeatDelay:$e=0,morphTo:N,clip:xe,autoplay:Xe=false,duration:je=1e3,native:Je=true,onProgress:le,onStart:me,onComplete:oe}=r,B=xe===true?"left":typeof xe=="string"?xe:false,Z=typeof b=="function"?b:Ae[b]??Ae.linear,Oe=ke($.start??"top bottom"),Ie=ke($.end??"bottom top"),L=typeof Ee=="string"?document.querySelector(Ee):Ee??null,H=Array.isArray(j)?j[0]:null,M=Array.isArray(j)?j[1]:typeof j=="string"?j:null,F=Array.isArray(J)?J[0]:null,T=Array.isArray(J)?J[1]:typeof J=="number"?J:null,C=Array.isArray(K)?K[0]:null,A=Array.isArray(K)?K[1]:typeof K=="number"?K:null;function ee(t){let o=t*100;switch(B){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=B?[]:Array.from(e.querySelectorAll(s)),v=[],W=[],G=0,_=0,S=false,I=false,E=0,pe=false,z=-1,de=-1,k=false,te=0,V=0,U,Se=null,X=new Set,ye=-1,Re=performance.now();function ue(){return L?P==="x"?L.scrollLeft:L.scrollTop:P==="x"?window.scrollX:window.scrollY}function Ne(){return L?P==="x"?L.clientWidth:L.clientHeight:P==="x"?window.innerWidth:window.innerHeight}function He(){let t=e.getBoundingClientRect(),o,l,h;if(L){let D=L.getBoundingClientRect();o=P==="x"?t.left-D.left+L.scrollLeft:t.top-D.top+L.scrollTop,l=P==="x"?t.width:t.height,h=ue();}else o=P==="x"?t.left:t.top,l=P==="x"?t.width:t.height,h=ue();let O=De({top:o,height:l},h,Ne(),Oe,Ie);G=O.tStart,_=O.tEnd,se&&process.env.NODE_ENV!=="production"&&(Se?.remove(),Se=it(G,_,P));}function Ke(t,o){if(e.style.setProperty("--scroll-draw-progress",String(t)),B){let l=o==="reverse"?1-t:t;e.style.clipPath=ee(l);return}x.forEach((l,h)=>{l.style.strokeDashoffset=o==="reverse"?`${v[h]*t}`:`${v[h]*(1-t)}`,p&&(l.style.opacity=o==="reverse"?`${1-t}`:`${t}`),H&&M?l.style.stroke=ve(H,M,t):M&&(l.style.stroke=M),F!==null&&T!==null?l.style.strokeWidth=`${F+(T-F)*t}`:T!==null&&(l.style.strokeWidth=`${T}`),C!==null&&A!==null?l.style.fillOpacity=`${C+(A-C)*t}`:A!==null&&(l.style.fillOpacity=`${A}`),N&&l.tagName.toLowerCase()==="path"&&W[h]&&l.setAttribute("d",Pe(W[h],N,t));});}function ge(){if(e.style.setProperty("--scroll-draw-progress","0"),B){e.style.clipPath=ee(0);return}x.forEach((t,o)=>{t.style.strokeDasharray=`${v[o]}`,t.style.strokeDashoffset=u==="reverse"?"0":`${v[o]}`,p?t.style.opacity=u==="reverse"?"1":"0":t.style.opacity="",H&&(t.style.stroke=H),F!==null&&(t.style.strokeWidth=`${F}`),C!==null&&(t.style.fillOpacity=`${C}`),N&&t.tagName.toLowerCase()==="path"&&W[o]&&t.setAttribute("d",W[o]);});}if(x.forEach(t=>{ot(t);let o=we(t);v.push(o),t.tagName.toLowerCase()==="path"?W.push(t.getAttribute("d")??""):W.push(""),n?(t.style.strokeDasharray=`${o}`,t.style.strokeDashoffset=u==="reverse"?`${o}`:"0",p&&(t.style.opacity="1"),M&&(t.style.stroke=M),T!==null&&(t.style.strokeWidth=`${T}`),A!==null&&(t.style.fillOpacity=`${A}`),N&&t.tagName.toLowerCase()==="path"&&t.setAttribute("d",N)):(t.style.strokeDasharray=`${o}`,t.style.strokeDashoffset=u==="reverse"?"0":`${o}`,p?t.style.opacity=u==="reverse"?"1":"0":t.style.opacity="",H&&(t.style.stroke=H),F!==null&&(t.style.strokeWidth=`${F}`),C!==null&&(t.style.fillOpacity=`${C}`));}),B){if(n)return e.style.clipPath=ee(1),oe?.(),{destroy:()=>{},replay:()=>{},pause:()=>{},resume:()=>{},seek:()=>{},getProgress:()=>1};e.style.clipPath=ee(0);}else if(n)return oe?.(),{destroy:()=>{},replay:()=>{},pause:()=>{},resume:()=>{},seek:()=>{},getProgress:()=>1};function Qe(){return !(Je===false||!st()||!x.length||typeof b!="string"||!(b in Be)||B||P!=="y"||L||m!==1||R!==0||g||ce||fe!==false||N||Q||Y||ae>0||le||me||oe||j!=null||J!=null||K!=null||($.start??"top bottom").trim()!=="top bottom"||($.end??"bottom top").trim()!=="bottom top")}function Ye(){let t=`svg-scroll-draw-${++nt}`,o=u==="reverse"?"0":"var(--ssd-len)",l=u==="reverse"?"var(--ssd-len)":"0",h=`stroke-dashoffset:${o};`,O=`stroke-dashoffset:${l};`;p&&(h+=`opacity:${u==="reverse"?1:0};`,O+=`opacity:${u==="reverse"?0:1};`);let D=document.createElement("style");D.setAttribute("data-svg-scroll-draw",""),D.textContent=`@keyframes ${t}{from{${h}}to{${O}}}.${t}{animation-name:${t};animation-duration:auto;animation-timing-function:${Be[b]};animation-fill-mode:both;animation-timeline:view();animation-range:cover 0% cover 100%;}`,document.head.appendChild(D);function a(i,f){i.style.setProperty("--ssd-len",String(v[f])),i.style.strokeDasharray=`${v[f]}`,i.style.strokeDashoffset="",i.style.opacity="",i.style.animationPlayState="",i.classList.add(t);}x.forEach(a);let d=false,w=-1;function c(){if(w>=0)return w;let i=e.getBoundingClientRect(),{tStart:f,tEnd:y}=De({top:i.top,height:i.height},ue(),Ne(),Oe,Ie);return Z(ne(ue(),f,y,m))}return {destroy(){x.forEach(i=>{i.classList.remove(t),i.style.removeProperty("--ssd-len"),i.style.animationPlayState="";}),D.remove();},replay(){d=false,w=-1,x.forEach(a);},pause(){d=true,x.forEach(i=>{i.style.animationPlayState="paused";});},resume(){d&&(d=false,x.forEach(i=>{i.style.animationPlayState="running";}));},seek(i){let f=Math.min(1,Math.max(0,i));w=f,d=true,x.forEach((y,re)=>{y.classList.remove(t),y.style.strokeDashoffset=u==="reverse"?`${v[re]*f}`:`${v[re]*(1-f)}`,p&&(y.style.opacity=u==="reverse"?`${1-f}`:`${f}`);});},getProgress(){return c()}}}if(Qe())return Ye();function Ze(){let t=Math.max(1,je),o=0,l=0;function h(c){let i=true;if(B){let f=Math.min(1,Math.max(0,c/t)),y=Z(f);te=y,e.style.setProperty("--scroll-draw-progress",String(y)),e.style.clipPath=ee(u==="reverse"?1-y:y),le?.(y),f<1&&(i=false);}else x.forEach((f,y)=>{let re=y*R*t,ie=Math.min(1,Math.max(0,(c-re)/t)),q=Z(ie);f.style.strokeDashoffset=u==="reverse"?`${v[y]*q}`:`${v[y]*(1-q)}`,p&&(f.style.opacity=u==="reverse"?`${1-q}`:`${q}`),H&&M?f.style.stroke=ve(H,M,q):M&&(f.style.stroke=M),F!==null&&T!==null?f.style.strokeWidth=`${F+(T-F)*q}`:T!==null&&(f.style.strokeWidth=`${T}`),C!==null&&A!==null?f.style.fillOpacity=`${C+(A-C)*q}`:A!==null&&(f.style.fillOpacity=`${A}`),N&&f.tagName.toLowerCase()==="path"&&W[y]&&f.setAttribute("d",Pe(W[y],N,q)),y===0&&(le?.(q),e.style.setProperty("--scroll-draw-progress",String(q))),ie<1&&(i=false);});if(Q){let f=Math.min(1,Math.max(0,c/t)),y=Z(f);for(let re in Q){let ie=parseFloat(re);y>=ie&&!X.has(ie)&&(X.add(ie),Q[re]?.());}}return i}function O(c){if(k)return;let i=c-o;I||(I=true,me?.());let f=h(i);if(f&&!S){S=true,h(t*(1+Math.max(0,x.length-1)*R)),oe?.(),V<(Y==="infinite"?1/0:Y??0)&&(V++,U=setTimeout(()=>{o=performance.now(),I=false,S=false,X.clear(),ge(),E=requestAnimationFrame(O);},$e));return}f||(E=requestAnimationFrame(O));}function D(){cancelAnimationFrame(E),clearTimeout(U),o=performance.now(),l=0,k=false,I=false,S=false,V=0,X.clear(),ge(),E=requestAnimationFrame(O);}let a=new IntersectionObserver(c=>{c.forEach(i=>{i.isIntersecting&&!(g&&S)?D():!i.isIntersecting&&!g&&!S&&(cancelAnimationFrame(E),clearTimeout(U),o=null);});},{root:L??null,threshold:Fe,rootMargin:Ce}),d;function w(){clearTimeout(d),d=setTimeout(()=>{x.forEach((c,i)=>{v[i]=we(c),c.style.strokeDasharray=`${v[i]}`;});},150);}return window.addEventListener("resize",w),window.addEventListener("orientationchange",w),ae>0?setTimeout(()=>a.observe(e),ae):a.observe(e),{destroy(){cancelAnimationFrame(E),clearTimeout(U),a.disconnect(),window.removeEventListener("resize",w),window.removeEventListener("orientationchange",w),clearTimeout(d);},replay(){V=0,D();},pause(){k||(k=true,l=performance.now()-o,cancelAnimationFrame(E));},resume(){k&&(k=false,o=performance.now()-l,E=requestAnimationFrame(O));},seek(c){let i=Math.min(1,Math.max(0,c));te=i,k=true,l=i*t,o=performance.now()-l,cancelAnimationFrame(E),h(l);},getProgress(){return te}}}if(Xe)return Ze();He();function he(){if(!pe||k)return;let t=performance.now(),o=ue(),l=m;if(fe!==false){let a=t-Re,d=a>0?Math.abs(o-(ye<0?o:ye))/a:0;l=m*Math.max(.2,1+d*(typeof fe=="number"?fe:1)*.04);}ye=o,Re=t;let h=ce?de===-1||o>=de?"forward":"reverse":u;de=o;let O=_-G,D=true;if(B){let a=Z(ne(o,G,_,l));g&&!ce&&(z=Math.max(z,a),a=z),te=a,e.style.setProperty("--scroll-draw-progress",String(a));let d=h==="reverse"?1-a:a;e.style.clipPath=ee(d),le?.(a),!I&&ne(o,G,_,l)>0&&(I=true,me?.()),a>=1&&!S?(S=true,oe?.(),V<(Y==="infinite"?1/0:Y??0)&&(V++,U=setTimeout(()=>{z=-1,I=false,S=false,e.style.clipPath=ee(0);},$e))):a<1&&!g&&(S=false),E=requestAnimationFrame(he);return}if(x.forEach((a,d)=>{let w=d*R*O,c=Z(ne(o,G+w,_+w,l));g&&!ce&&(z=Math.max(z,c),c=z),te=c,a.style.strokeDashoffset=h==="reverse"?`${v[d]*c}`:`${v[d]*(1-c)}`,p&&(a.style.opacity=h==="reverse"?`${1-c}`:`${c}`),H&&M?a.style.stroke=ve(H,M,c):M&&(a.style.stroke=M),F!==null&&T!==null?a.style.strokeWidth=`${F+(T-F)*c}`:T!==null&&(a.style.strokeWidth=`${T}`),C!==null&&A!==null?a.style.fillOpacity=`${C+(A-C)*c}`:A!==null&&(a.style.fillOpacity=`${A}`),N&&a.tagName.toLowerCase()==="path"&&W[d]&&a.setAttribute("d",Pe(W[d],N,c)),d===0&&(le?.(c),e.style.setProperty("--scroll-draw-progress",String(c))),c<1&&(D=false);}),Q){let a=Z(ne(o,G,_,l));for(let d in Q){let w=parseFloat(d);a>=w&&!X.has(w)&&(X.add(w),Q[d]?.());}}!I&&ne(o,G,_,l)>0&&(I=true,me?.()),D&&!S?(S=true,oe?.(),V<(Y==="infinite"?1/0:Y??0)&&(V++,U=setTimeout(()=>{z=-1,I=false,S=false,X.clear(),ge();},$e))):!D&&!g&&(S=false),E=requestAnimationFrame(he);}let Me=new IntersectionObserver(t=>{t.forEach(o=>{pe=o.isIntersecting,pe&&!k?E=requestAnimationFrame(he):cancelAnimationFrame(E);});},{root:L??null,threshold:Fe,rootMargin:Ce}),Te;function be(){clearTimeout(Te),Te=setTimeout(()=>{x.forEach((t,o)=>{v[o]=we(t),t.style.strokeDasharray=`${v[o]}`;}),He();},150);}return window.addEventListener("resize",be),window.addEventListener("orientationchange",be),ae>0?setTimeout(()=>Me.observe(e),ae):Me.observe(e),{destroy(){cancelAnimationFrame(E),clearTimeout(U),Me.disconnect(),window.removeEventListener("resize",be),window.removeEventListener("orientationchange",be),clearTimeout(Te),Se?.remove();},replay(){z=-1,de=-1,ye=-1,I=false,S=false,V=0,k=false,X.clear(),clearTimeout(U),ge();},pause(){k=true,cancelAnimationFrame(E);},resume(){k&&(k=false,pe&&(E=requestAnimationFrame(he)));},seek(t){let o=Math.min(1,Math.max(0,t));te=o,z=o,k=true,cancelAnimationFrame(E),Ke(o,u);},getProgress(){return te}}}function dt(e={}){let r=ref(null);return onMounted(()=>{if(!r.value)return;let n=Le(r.value,e);onUnmounted(()=>n.destroy());}),r}var yt=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 s={};e.selector!=null&&(s.selector=e.selector),e.speed!=null&&(s.speed=e.speed),e.fade!=null&&(s.fade=e.fade),e.stagger!=null&&(s.stagger=e.stagger),e.easing!=null&&(s.easing=e.easing),e.direction!=null&&(s.direction=e.direction),e.trigger!=null&&(s.trigger=e.trigger),e.once!=null&&(s.once=e.once),e.debug!=null&&(s.debug=e.debug),e.onProgress!=null&&(s.onProgress=e.onProgress),e.onStart!=null&&(s.onStart=e.onStart),e.onComplete!=null&&(s.onComplete=e.onComplete);let m=Le(n.value,s);onUnmounted(()=>m.destroy());}),()=>h("div",{ref:n},r.default?.())}});export{yt as ScrollDraw,dt as useScrollDraw};
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
'use strict';var
|
|
2
|
-
<div style="position:absolute;${
|
|
3
|
-
<div style="position:absolute;${X?`left:${b}px;top:0;bottom:0;border-left:2px dashed #ef4444;`:`top:${b}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",l,{passive:true}),l(),o}function He(e,s,r){let o=(s.match(/[-+]?(?:\d*\.)?\d+(?:[eE][-+]?\d+)?/g)??[]).map(Number),l=0;return e.replace(/[-+]?(?:\d*\.)?\d+(?:[eE][-+]?\d+)?/g,p=>{let c=parseFloat(p),b=o[l++]??c;return String(+(c+(b-c)*r).toFixed(4))})}function Ve(e,s={}){if(typeof window>"u")return {destroy:()=>{},replay:()=>{},pause:()=>{},resume:()=>{},seek:()=>{},getProgress:()=>0};let r=window.matchMedia("(prefers-reduced-motion: reduce)").matches,{selector:o="path, polyline, line, polygon, rect, circle",speed:l=1,fade:p=false,easing:c="linear",trigger:b={},stagger:X=0,direction:y="forward",once:U=false,debug:We=false,axis:$="y",scrollContainer:ce,autoReverse:Z=false,delay:pe=0,strokeColor:R,strokeWidth:H,fillOpacity:V,waypoints:ee,velocityScale:te=false,threshold:Ge=0,rootMargin:ze="0px",repeat:j=0,repeatDelay:Ae=0,morphTo:D,clip:me,native:qe=true,onProgress:de,onStart:ye,onComplete:J}=s,W=me===true?"left":typeof me=="string"?me:false,re=typeof c=="function"?c:ve[c]??ve.linear,ke=we(b.start??"top bottom"),Te=we(b.end??"bottom top"),v=typeof ce=="string"?document.querySelector(ce):ce??null,C=Array.isArray(R)?R[0]:null,x=Array.isArray(R)?R[1]:typeof R=="string"?R:null,S=Array.isArray(H)?H[0]:null,A=Array.isArray(H)?H[1]:typeof H=="number"?H:null,k=Array.isArray(V)?V[0]:null,T=Array.isArray(V)?V[1]:typeof V=="number"?V:null;function _(t){let n=t*100;switch(W){case "right":return `inset(0 0 0 ${100-n}%)`;case "top":return `inset(0 0 ${100-n}% 0)`;case "bottom":return `inset(${100-n}% 0 0 0)`;case "center":return `circle(${t*150}% at 50% 50%)`;default:return `inset(0 ${100-n}% 0 0)`}}let w=W?[]:Array.from(e.querySelectorAll(o)),g=[],I=[],O=0,F=0,P=false,G=false,N=0,se=false,M=-1,ne=-1,z=false,oe=0,K=0,ie,ge=null,ae=new Set,le=-1,Me=performance.now();function Q(){return v?$==="x"?v.scrollLeft:v.scrollTop:$==="x"?window.scrollX:window.scrollY}function Le(){return v?$==="x"?v.clientWidth:v.clientHeight:$==="x"?window.innerWidth:window.innerHeight}function Pe(){let t=e.getBoundingClientRect(),n,a,d;if(v){let E=v.getBoundingClientRect();n=$==="x"?t.left-E.left+v.scrollLeft:t.top-E.top+v.scrollTop,a=$==="x"?t.width:t.height,d=Q();}else n=$==="x"?t.left:t.top,a=$==="x"?t.width:t.height,d=Q();let q=$e({top:n,height:a},d,Le(),ke,Te);O=q.tStart,F=q.tEnd,We&&process.env.NODE_ENV!=="production"&&(ge?.remove(),ge=Qe(O,F,$));}function Be(t,n){if(e.style.setProperty("--scroll-draw-progress",String(t)),W){let a=n==="reverse"?1-t:t;e.style.clipPath=_(a);return}w.forEach((a,d)=>{a.style.strokeDashoffset=n==="reverse"?`${g[d]*t}`:`${g[d]*(1-t)}`,p&&(a.style.opacity=n==="reverse"?`${1-t}`:`${t}`),C&&x?a.style.stroke=xe(C,x,t):x&&(a.style.stroke=x),S!==null&&A!==null?a.style.strokeWidth=`${S+(A-S)*t}`:A!==null&&(a.style.strokeWidth=`${A}`),k!==null&&T!==null?a.style.fillOpacity=`${k+(T-k)*t}`:T!==null&&(a.style.fillOpacity=`${T}`),D&&a.tagName.toLowerCase()==="path"&&I[d]&&a.setAttribute("d",He(I[d],D,t));});}function De(){if(e.style.setProperty("--scroll-draw-progress","0"),W){e.style.clipPath=_(0);return}w.forEach((t,n)=>{t.style.strokeDasharray=`${g[n]}`,t.style.strokeDashoffset=y==="reverse"?"0":`${g[n]}`,p?t.style.opacity=y==="reverse"?"1":"0":t.style.opacity="",C&&(t.style.stroke=C),S!==null&&(t.style.strokeWidth=`${S}`),k!==null&&(t.style.fillOpacity=`${k}`),D&&t.tagName.toLowerCase()==="path"&&I[n]&&t.setAttribute("d",I[n]);});}if(w.forEach(t=>{Ke(t);let n=Ee(t);g.push(n),t.tagName.toLowerCase()==="path"?I.push(t.getAttribute("d")??""):I.push(""),r?(t.style.strokeDasharray=`${n}`,t.style.strokeDashoffset=y==="reverse"?`${n}`:"0",p&&(t.style.opacity="1"),x&&(t.style.stroke=x),A!==null&&(t.style.strokeWidth=`${A}`),T!==null&&(t.style.fillOpacity=`${T}`),D&&t.tagName.toLowerCase()==="path"&&t.setAttribute("d",D)):(t.style.strokeDasharray=`${n}`,t.style.strokeDashoffset=y==="reverse"?"0":`${n}`,p?t.style.opacity=y==="reverse"?"1":"0":t.style.opacity="",C&&(t.style.stroke=C),S!==null&&(t.style.strokeWidth=`${S}`),k!==null&&(t.style.fillOpacity=`${k}`));}),W){if(r)return e.style.clipPath=_(1),J?.(),{destroy:()=>{},replay:()=>{},pause:()=>{},resume:()=>{},seek:()=>{},getProgress:()=>1};e.style.clipPath=_(0);}else if(r)return J?.(),{destroy:()=>{},replay:()=>{},pause:()=>{},resume:()=>{},seek:()=>{},getProgress:()=>1};function _e(){return !(qe===false||!Je()||!w.length||typeof c!="string"||!(c in Re)||W||$!=="y"||v||l!==1||X!==0||U||Z||te!==false||D||ee||j||pe>0||de||ye||J||R!=null||H!=null||V!=null||(b.start??"top bottom").trim()!=="top bottom"||(b.end??"bottom top").trim()!=="bottom top")}function Xe(){let t=`svg-scroll-draw-${++je}`,n=y==="reverse"?"0":"var(--ssd-len)",a=y==="reverse"?"var(--ssd-len)":"0",d=`stroke-dashoffset:${n};`,q=`stroke-dashoffset:${a};`;p&&(d+=`opacity:${y==="reverse"?1:0};`,q+=`opacity:${y==="reverse"?0:1};`);let E=document.createElement("style");E.setAttribute("data-svg-scroll-draw",""),E.textContent=`@keyframes ${t}{from{${d}}to{${q}}}.${t}{animation-name:${t};animation-duration:auto;animation-timing-function:${Re[c]};animation-fill-mode:both;animation-timeline:view();animation-range:cover 0% cover 100%;}`,document.head.appendChild(E);function i(f,L){f.style.setProperty("--ssd-len",String(g[L])),f.style.strokeDasharray=`${g[L]}`,f.style.strokeDashoffset="",f.style.opacity="",f.style.animationPlayState="",f.classList.add(t);}w.forEach(i);let u=false,h=-1;function m(){if(h>=0)return h;let f=e.getBoundingClientRect(),{tStart:L,tEnd:Y}=$e({top:f.top,height:f.height},Q(),Le(),ke,Te);return re(B(Q(),L,Y,l))}return {destroy(){w.forEach(f=>{f.classList.remove(t),f.style.removeProperty("--ssd-len"),f.style.animationPlayState="";}),E.remove();},replay(){u=false,h=-1,w.forEach(i);},pause(){u=true,w.forEach(f=>{f.style.animationPlayState="paused";});},resume(){u&&(u=false,w.forEach(f=>{f.style.animationPlayState="running";}));},seek(f){let L=Math.min(1,Math.max(0,f));h=L,u=true,w.forEach((Y,Ce)=>{Y.classList.remove(t),Y.style.strokeDashoffset=y==="reverse"?`${g[Ce]*L}`:`${g[Ce]*(1-L)}`,p&&(Y.style.opacity=y==="reverse"?`${1-L}`:`${L}`);});},getProgress(){return m()}}}if(_e())return Xe();Pe();function ue(){if(!se||z)return;let t=performance.now(),n=Q(),a=l;if(te!==false){let i=t-Me,u=i>0?Math.abs(n-(le<0?n:le))/i:0;a=l*Math.max(.2,1+u*(typeof te=="number"?te:1)*.04);}le=n,Me=t;let d=Z?ne===-1||n>=ne?"forward":"reverse":y;ne=n;let q=F-O,E=true;if(W){let i=re(B(n,O,F,a));U&&!Z&&(M=Math.max(M,i),i=M),oe=i,e.style.setProperty("--scroll-draw-progress",String(i));let u=d==="reverse"?1-i:i;e.style.clipPath=_(u),de?.(i),!G&&B(n,O,F,a)>0&&(G=true,ye?.()),i>=1&&!P?(P=true,J?.(),K<(j==="infinite"?1/0:j??0)&&(K++,ie=setTimeout(()=>{M=-1,G=false,P=false,e.style.clipPath=_(0);},Ae))):i<1&&!U&&(P=false),N=requestAnimationFrame(ue);return}if(w.forEach((i,u)=>{let h=u*X*q,m=re(B(n,O+h,F+h,a));U&&!Z&&(M=Math.max(M,m),m=M),oe=m,i.style.strokeDashoffset=d==="reverse"?`${g[u]*m}`:`${g[u]*(1-m)}`,p&&(i.style.opacity=d==="reverse"?`${1-m}`:`${m}`),C&&x?i.style.stroke=xe(C,x,m):x&&(i.style.stroke=x),S!==null&&A!==null?i.style.strokeWidth=`${S+(A-S)*m}`:A!==null&&(i.style.strokeWidth=`${A}`),k!==null&&T!==null?i.style.fillOpacity=`${k+(T-k)*m}`:T!==null&&(i.style.fillOpacity=`${T}`),D&&i.tagName.toLowerCase()==="path"&&I[u]&&i.setAttribute("d",He(I[u],D,m)),u===0&&(de?.(m),e.style.setProperty("--scroll-draw-progress",String(m))),m<1&&(E=false);}),ee){let i=re(B(n,O,F,a));for(let u in ee){let h=parseFloat(u);i>=h&&!ae.has(h)&&(ae.add(h),ee[u]?.());}}!G&&B(n,O,F,a)>0&&(G=true,ye?.()),E&&!P?(P=true,J?.(),K<(j==="infinite"?1/0:j??0)&&(K++,ie=setTimeout(()=>{M=-1,G=false,P=false,ae.clear(),De();},Ae))):!E&&!U&&(P=false),N=requestAnimationFrame(ue);}let he=new IntersectionObserver(t=>{t.forEach(n=>{se=n.isIntersecting,se&&!z?N=requestAnimationFrame(ue):cancelAnimationFrame(N);});},{root:v??null,threshold:Ge,rootMargin:ze}),be;function fe(){clearTimeout(be),be=setTimeout(()=>{w.forEach((t,n)=>{g[n]=Ee(t),t.style.strokeDasharray=`${g[n]}`;}),Pe();},150);}return window.addEventListener("resize",fe),window.addEventListener("orientationchange",fe),pe>0?setTimeout(()=>he.observe(e),pe):he.observe(e),{destroy(){cancelAnimationFrame(N),clearTimeout(ie),he.disconnect(),window.removeEventListener("resize",fe),window.removeEventListener("orientationchange",fe),clearTimeout(be),ge?.remove();},replay(){M=-1,ne=-1,le=-1,G=false,P=false,K=0,z=false,ae.clear(),clearTimeout(ie),De();},pause(){z=true,cancelAnimationFrame(N);},resume(){z&&(z=false,se&&(N=requestAnimationFrame(ue)));},seek(t){let n=Math.min(1,Math.max(0,t));oe=n,M=n,z=true,cancelAnimationFrame(N),Be(n,y);},getProgress(){return oe}}}var Se=class extends HTMLElement{constructor(){super(...arguments);this.instance=null;}connectedCallback(){let r={},o=this.getAttribute("speed"),l=this.getAttribute("easing"),p=this.getAttribute("stagger"),c=this.getAttribute("direction"),b=this.getAttribute("selector");o&&(r.speed=parseFloat(o)),l&&(r.easing=l),p&&(r.stagger=parseFloat(p)),c&&(r.direction=c),b&&(r.selector=b),this.hasAttribute("fade")&&(r.fade=this.getAttribute("fade")!=="false"),this.instance=Ve(this,r);}disconnectedCallback(){this.instance?.destroy(),this.instance=null;}};typeof customElements<"u"&&!customElements.get("scroll-draw")&&customElements.define("scroll-draw",Se);
|
|
1
|
+
'use strict';function Ye({bounces:e=3,decay:s=.5}={}){let r=Math.max(1,Math.round(e)),o=Math.max(.01,Math.min(.99,s)),p=Math.sqrt(o),m=0,y=[];for(let u=0;u<r;u++){let g=Math.pow(p,u);y.push(g),m+=g;}let w=[0],R=0;for(let u=0;u<r;u++)R+=y[u]/m,w.push(R);return u=>{if(u<=0)return 0;if(u>=1)return 1;for(let g=0;g<r;g++)if(u<=w[g+1]){let se=(u-w[g])/(w[g+1]-w[g]);if(g===0)return se*(2-se);let P=1-Math.pow(o,g);return P+(1-P)*(2*se-1)*(2*se-1)}return 1}}function Ze({amplitude:e=1,period:s=.4}={}){let r=Math.max(1,e),o=Math.max(.1,s),p=r<=1?o/4:o/(2*Math.PI)*Math.asin(1/r);return m=>m<=0?0:m>=1?1:r*Math.pow(2,-10*m)*Math.sin((m-p)*(2*Math.PI)/o)+1}var Te={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:Ye(),elastic:Ze()};function Se(e="top bottom"){let s=e.trim();if(/^\d+(\.\d+)?%$/.test(s))return {element:"top",viewport:s};let[r="top",o="bottom"]=s.split(/\s+/).filter(Boolean);return {element:r,viewport:o}}function We(e,s,r,o){switch(o){case "top":return e+r;case "center":return e+r+s/2;case "bottom":return e+r+s;default:return e+r}}function ze(e,s){if(/^\d+(\.\d+)?%$/.test(e))return s*(parseFloat(e)/100);switch(e){case "top":return 0;case "center":return s/2;case "bottom":return s;default:return s}}function we(e){let s=e.tagName.toLowerCase();if(s==="rect"){let r=parseFloat(e.getAttribute("width")??"0"),o=parseFloat(e.getAttribute("height")??"0");return 2*(r+o)}if(s==="circle"){let r=parseFloat(e.getAttribute("r")??"0");return 2*Math.PI*r}return e.getTotalLength()}function et(e,s,r){return Math.min(r,Math.max(s,e))}function ne(e,s,r,o){return r===s?0:et((e-s)/(r-s)*o,0,1)}function Le(e,s,r,o,p){let m=We(e.top,e.height,s,o.element)-ze(o.viewport,r),y=We(e.top,e.height,s,p.element)-ze(p.viewport,r);return {tStart:m,tEnd:y}}function qe(e){let s=/^#([a-f\d])([a-f\d])([a-f\d])$/i.exec(e);if(s)return [parseInt(s[1]+s[1],16),parseInt(s[2]+s[2],16),parseInt(s[3]+s[3],16)];let r=/^#([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(e);if(r)return [parseInt(r[1],16),parseInt(r[2],16),parseInt(r[3],16)];let o=/^rgb\(\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*\)$/i.exec(e);return o?[parseInt(o[1]),parseInt(o[2]),parseInt(o[3])]:null}function ve(e,s,r){let o=qe(e),p=qe(s);return !o||!p?e:`rgb(${Math.round(o[0]+(p[0]-o[0])*r)},${Math.round(o[1]+(p[1]-o[1])*r)},${Math.round(o[2]+(p[2]-o[2])*r)})`}function Ve(e,s){process.env.NODE_ENV!=="production"&&console.warn(`[svg-scroll-draw] ${e}`,s);}var Ge={linear:"linear","ease-in":"ease-in","ease-out":"ease-out","ease-in-out":"ease-in-out"},tt=0;function rt(){return typeof CSS<"u"&&typeof CSS.supports=="function"&&CSS.supports("animation-timeline: view()")}function nt(e){let s=e.getAttribute("stroke"),r=e.getAttribute("fill");!s||s==="none"?Ve("Element has no stroke \u2014 path will not be visible.",e):r&&r!=="none"&&r!=="transparent"&&Ve("Element has a fill \u2014 it may obscure the stroke animation.",e);}function st(e,s,r){let o=document.createElement("div");o.setAttribute("data-svg-scroll-draw-debug",""),o.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 p(){let m=r==="x"?window.scrollX:window.scrollY,y=e-m,w=s-m,R=r==="x";o.innerHTML=`
|
|
2
|
+
<div style="position:absolute;${R?`left:${y}px;top:0;bottom:0;border-left:2px dashed #22c55e;`:`top:${y}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;${R?`left:${w}px;top:0;bottom:0;border-left:2px dashed #ef4444;`:`top:${w}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",p,{passive:true}),p(),o}function Pe(e,s,r){let o=(s.match(/[-+]?(?:\d*\.)?\d+(?:[eE][-+]?\d+)?/g)??[]).map(Number),p=0;return e.replace(/[-+]?(?:\d*\.)?\d+(?:[eE][-+]?\d+)?/g,m=>{let y=parseFloat(m),w=o[p++]??y;return String(+(y+(w-y)*r).toFixed(4))})}function Be(e,s={}){if(typeof window>"u")return {destroy:()=>{},replay:()=>{},pause:()=>{},resume:()=>{},seek:()=>{},getProgress:()=>0};let r=window.matchMedia("(prefers-reduced-motion: reduce)").matches,{selector:o="path, polyline, line, polygon, rect, circle",speed:p=1,fade:m=false,easing:y="linear",trigger:w={},stagger:R=0,direction:u="forward",once:g=false,debug:se=false,axis:P="y",scrollContainer:Ee,autoReverse:ce=false,delay:ae=0,strokeColor:j,strokeWidth:J,fillOpacity:K,waypoints:Q,velocityScale:fe=false,threshold:Ie=0,rootMargin:Fe="0px",repeat:Y=0,repeatDelay:$e=0,morphTo:N,clip:xe,autoplay:_e=false,duration:Xe=1e3,native:Ue=true,onProgress:le,onStart:me,onComplete:oe}=s,G=xe===true?"left":typeof xe=="string"?xe:false,Z=typeof y=="function"?y:Te[y]??Te.linear,Ce=Se(w.start??"top bottom"),Oe=Se(w.end??"bottom top"),D=typeof Ee=="string"?document.querySelector(Ee):Ee??null,H=Array.isArray(j)?j[0]:null,M=Array.isArray(j)?j[1]:typeof j=="string"?j:null,I=Array.isArray(J)?J[0]:null,k=Array.isArray(J)?J[1]:typeof J=="number"?J:null,F=Array.isArray(K)?K[0]:null,T=Array.isArray(K)?K[1]:typeof K=="number"?K:null;function ee(t){let n=t*100;switch(G){case "right":return `inset(0 0 0 ${100-n}%)`;case "top":return `inset(0 0 ${100-n}% 0)`;case "bottom":return `inset(${100-n}% 0 0 0)`;case "center":return `circle(${t*150}% at 50% 50%)`;default:return `inset(0 ${100-n}% 0 0)`}}let x=G?[]:Array.from(e.querySelectorAll(o)),E=[],W=[],B=0,_=0,A=false,O=false,$=0,pe=false,z=-1,de=-1,S=false,te=0,V=0,X,Ae=null,U=new Set,ye=-1,Re=performance.now();function ue(){return D?P==="x"?D.scrollLeft:D.scrollTop:P==="x"?window.scrollX:window.scrollY}function Ne(){return D?P==="x"?D.clientWidth:D.clientHeight:P==="x"?window.innerWidth:window.innerHeight}function He(){let t=e.getBoundingClientRect(),n,l,b;if(D){let L=D.getBoundingClientRect();n=P==="x"?t.left-L.left+D.scrollLeft:t.top-L.top+D.scrollTop,l=P==="x"?t.width:t.height,b=ue();}else n=P==="x"?t.left:t.top,l=P==="x"?t.width:t.height,b=ue();let C=Le({top:n,height:l},b,Ne(),Ce,Oe);B=C.tStart,_=C.tEnd,se&&process.env.NODE_ENV!=="production"&&(Ae?.remove(),Ae=st(B,_,P));}function je(t,n){if(e.style.setProperty("--scroll-draw-progress",String(t)),G){let l=n==="reverse"?1-t:t;e.style.clipPath=ee(l);return}x.forEach((l,b)=>{l.style.strokeDashoffset=n==="reverse"?`${E[b]*t}`:`${E[b]*(1-t)}`,m&&(l.style.opacity=n==="reverse"?`${1-t}`:`${t}`),H&&M?l.style.stroke=ve(H,M,t):M&&(l.style.stroke=M),I!==null&&k!==null?l.style.strokeWidth=`${I+(k-I)*t}`:k!==null&&(l.style.strokeWidth=`${k}`),F!==null&&T!==null?l.style.fillOpacity=`${F+(T-F)*t}`:T!==null&&(l.style.fillOpacity=`${T}`),N&&l.tagName.toLowerCase()==="path"&&W[b]&&l.setAttribute("d",Pe(W[b],N,t));});}function he(){if(e.style.setProperty("--scroll-draw-progress","0"),G){e.style.clipPath=ee(0);return}x.forEach((t,n)=>{t.style.strokeDasharray=`${E[n]}`,t.style.strokeDashoffset=u==="reverse"?"0":`${E[n]}`,m?t.style.opacity=u==="reverse"?"1":"0":t.style.opacity="",H&&(t.style.stroke=H),I!==null&&(t.style.strokeWidth=`${I}`),F!==null&&(t.style.fillOpacity=`${F}`),N&&t.tagName.toLowerCase()==="path"&&W[n]&&t.setAttribute("d",W[n]);});}if(x.forEach(t=>{nt(t);let n=we(t);E.push(n),t.tagName.toLowerCase()==="path"?W.push(t.getAttribute("d")??""):W.push(""),r?(t.style.strokeDasharray=`${n}`,t.style.strokeDashoffset=u==="reverse"?`${n}`:"0",m&&(t.style.opacity="1"),M&&(t.style.stroke=M),k!==null&&(t.style.strokeWidth=`${k}`),T!==null&&(t.style.fillOpacity=`${T}`),N&&t.tagName.toLowerCase()==="path"&&t.setAttribute("d",N)):(t.style.strokeDasharray=`${n}`,t.style.strokeDashoffset=u==="reverse"?"0":`${n}`,m?t.style.opacity=u==="reverse"?"1":"0":t.style.opacity="",H&&(t.style.stroke=H),I!==null&&(t.style.strokeWidth=`${I}`),F!==null&&(t.style.fillOpacity=`${F}`));}),G){if(r)return e.style.clipPath=ee(1),oe?.(),{destroy:()=>{},replay:()=>{},pause:()=>{},resume:()=>{},seek:()=>{},getProgress:()=>1};e.style.clipPath=ee(0);}else if(r)return oe?.(),{destroy:()=>{},replay:()=>{},pause:()=>{},resume:()=>{},seek:()=>{},getProgress:()=>1};function Je(){return !(Ue===false||!rt()||!x.length||typeof y!="string"||!(y in Ge)||G||P!=="y"||D||p!==1||R!==0||g||ce||fe!==false||N||Q||Y||ae>0||le||me||oe||j!=null||J!=null||K!=null||(w.start??"top bottom").trim()!=="top bottom"||(w.end??"bottom top").trim()!=="bottom top")}function Ke(){let t=`svg-scroll-draw-${++tt}`,n=u==="reverse"?"0":"var(--ssd-len)",l=u==="reverse"?"var(--ssd-len)":"0",b=`stroke-dashoffset:${n};`,C=`stroke-dashoffset:${l};`;m&&(b+=`opacity:${u==="reverse"?1:0};`,C+=`opacity:${u==="reverse"?0:1};`);let L=document.createElement("style");L.setAttribute("data-svg-scroll-draw",""),L.textContent=`@keyframes ${t}{from{${b}}to{${C}}}.${t}{animation-name:${t};animation-duration:auto;animation-timing-function:${Ge[y]};animation-fill-mode:both;animation-timeline:view();animation-range:cover 0% cover 100%;}`,document.head.appendChild(L);function a(i,f){i.style.setProperty("--ssd-len",String(E[f])),i.style.strokeDasharray=`${E[f]}`,i.style.strokeDashoffset="",i.style.opacity="",i.style.animationPlayState="",i.classList.add(t);}x.forEach(a);let d=false,v=-1;function c(){if(v>=0)return v;let i=e.getBoundingClientRect(),{tStart:f,tEnd:h}=Le({top:i.top,height:i.height},ue(),Ne(),Ce,Oe);return Z(ne(ue(),f,h,p))}return {destroy(){x.forEach(i=>{i.classList.remove(t),i.style.removeProperty("--ssd-len"),i.style.animationPlayState="";}),L.remove();},replay(){d=false,v=-1,x.forEach(a);},pause(){d=true,x.forEach(i=>{i.style.animationPlayState="paused";});},resume(){d&&(d=false,x.forEach(i=>{i.style.animationPlayState="running";}));},seek(i){let f=Math.min(1,Math.max(0,i));v=f,d=true,x.forEach((h,re)=>{h.classList.remove(t),h.style.strokeDashoffset=u==="reverse"?`${E[re]*f}`:`${E[re]*(1-f)}`,m&&(h.style.opacity=u==="reverse"?`${1-f}`:`${f}`);});},getProgress(){return c()}}}if(Je())return Ke();function Qe(){let t=Math.max(1,Xe),n=0,l=0;function b(c){let i=true;if(G){let f=Math.min(1,Math.max(0,c/t)),h=Z(f);te=h,e.style.setProperty("--scroll-draw-progress",String(h)),e.style.clipPath=ee(u==="reverse"?1-h:h),le?.(h),f<1&&(i=false);}else x.forEach((f,h)=>{let re=h*R*t,ie=Math.min(1,Math.max(0,(c-re)/t)),q=Z(ie);f.style.strokeDashoffset=u==="reverse"?`${E[h]*q}`:`${E[h]*(1-q)}`,m&&(f.style.opacity=u==="reverse"?`${1-q}`:`${q}`),H&&M?f.style.stroke=ve(H,M,q):M&&(f.style.stroke=M),I!==null&&k!==null?f.style.strokeWidth=`${I+(k-I)*q}`:k!==null&&(f.style.strokeWidth=`${k}`),F!==null&&T!==null?f.style.fillOpacity=`${F+(T-F)*q}`:T!==null&&(f.style.fillOpacity=`${T}`),N&&f.tagName.toLowerCase()==="path"&&W[h]&&f.setAttribute("d",Pe(W[h],N,q)),h===0&&(le?.(q),e.style.setProperty("--scroll-draw-progress",String(q))),ie<1&&(i=false);});if(Q){let f=Math.min(1,Math.max(0,c/t)),h=Z(f);for(let re in Q){let ie=parseFloat(re);h>=ie&&!U.has(ie)&&(U.add(ie),Q[re]?.());}}return i}function C(c){if(S)return;let i=c-n;O||(O=true,me?.());let f=b(i);if(f&&!A){A=true,b(t*(1+Math.max(0,x.length-1)*R)),oe?.(),V<(Y==="infinite"?1/0:Y??0)&&(V++,X=setTimeout(()=>{n=performance.now(),O=false,A=false,U.clear(),he(),$=requestAnimationFrame(C);},$e));return}f||($=requestAnimationFrame(C));}function L(){cancelAnimationFrame($),clearTimeout(X),n=performance.now(),l=0,S=false,O=false,A=false,V=0,U.clear(),he(),$=requestAnimationFrame(C);}let a=new IntersectionObserver(c=>{c.forEach(i=>{i.isIntersecting&&!(g&&A)?L():!i.isIntersecting&&!g&&!A&&(cancelAnimationFrame($),clearTimeout(X),n=null);});},{root:D??null,threshold:Ie,rootMargin:Fe}),d;function v(){clearTimeout(d),d=setTimeout(()=>{x.forEach((c,i)=>{E[i]=we(c),c.style.strokeDasharray=`${E[i]}`;});},150);}return window.addEventListener("resize",v),window.addEventListener("orientationchange",v),ae>0?setTimeout(()=>a.observe(e),ae):a.observe(e),{destroy(){cancelAnimationFrame($),clearTimeout(X),a.disconnect(),window.removeEventListener("resize",v),window.removeEventListener("orientationchange",v),clearTimeout(d);},replay(){V=0,L();},pause(){S||(S=true,l=performance.now()-n,cancelAnimationFrame($));},resume(){S&&(S=false,n=performance.now()-l,$=requestAnimationFrame(C));},seek(c){let i=Math.min(1,Math.max(0,c));te=i,S=true,l=i*t,n=performance.now()-l,cancelAnimationFrame($),b(l);},getProgress(){return te}}}if(_e)return Qe();He();function ge(){if(!pe||S)return;let t=performance.now(),n=ue(),l=p;if(fe!==false){let a=t-Re,d=a>0?Math.abs(n-(ye<0?n:ye))/a:0;l=p*Math.max(.2,1+d*(typeof fe=="number"?fe:1)*.04);}ye=n,Re=t;let b=ce?de===-1||n>=de?"forward":"reverse":u;de=n;let C=_-B,L=true;if(G){let a=Z(ne(n,B,_,l));g&&!ce&&(z=Math.max(z,a),a=z),te=a,e.style.setProperty("--scroll-draw-progress",String(a));let d=b==="reverse"?1-a:a;e.style.clipPath=ee(d),le?.(a),!O&&ne(n,B,_,l)>0&&(O=true,me?.()),a>=1&&!A?(A=true,oe?.(),V<(Y==="infinite"?1/0:Y??0)&&(V++,X=setTimeout(()=>{z=-1,O=false,A=false,e.style.clipPath=ee(0);},$e))):a<1&&!g&&(A=false),$=requestAnimationFrame(ge);return}if(x.forEach((a,d)=>{let v=d*R*C,c=Z(ne(n,B+v,_+v,l));g&&!ce&&(z=Math.max(z,c),c=z),te=c,a.style.strokeDashoffset=b==="reverse"?`${E[d]*c}`:`${E[d]*(1-c)}`,m&&(a.style.opacity=b==="reverse"?`${1-c}`:`${c}`),H&&M?a.style.stroke=ve(H,M,c):M&&(a.style.stroke=M),I!==null&&k!==null?a.style.strokeWidth=`${I+(k-I)*c}`:k!==null&&(a.style.strokeWidth=`${k}`),F!==null&&T!==null?a.style.fillOpacity=`${F+(T-F)*c}`:T!==null&&(a.style.fillOpacity=`${T}`),N&&a.tagName.toLowerCase()==="path"&&W[d]&&a.setAttribute("d",Pe(W[d],N,c)),d===0&&(le?.(c),e.style.setProperty("--scroll-draw-progress",String(c))),c<1&&(L=false);}),Q){let a=Z(ne(n,B,_,l));for(let d in Q){let v=parseFloat(d);a>=v&&!U.has(v)&&(U.add(v),Q[d]?.());}}!O&&ne(n,B,_,l)>0&&(O=true,me?.()),L&&!A?(A=true,oe?.(),V<(Y==="infinite"?1/0:Y??0)&&(V++,X=setTimeout(()=>{z=-1,O=false,A=false,U.clear(),he();},$e))):!L&&!g&&(A=false),$=requestAnimationFrame(ge);}let Me=new IntersectionObserver(t=>{t.forEach(n=>{pe=n.isIntersecting,pe&&!S?$=requestAnimationFrame(ge):cancelAnimationFrame($);});},{root:D??null,threshold:Ie,rootMargin:Fe}),ke;function be(){clearTimeout(ke),ke=setTimeout(()=>{x.forEach((t,n)=>{E[n]=we(t),t.style.strokeDasharray=`${E[n]}`;}),He();},150);}return window.addEventListener("resize",be),window.addEventListener("orientationchange",be),ae>0?setTimeout(()=>Me.observe(e),ae):Me.observe(e),{destroy(){cancelAnimationFrame($),clearTimeout(X),Me.disconnect(),window.removeEventListener("resize",be),window.removeEventListener("orientationchange",be),clearTimeout(ke),Ae?.remove();},replay(){z=-1,de=-1,ye=-1,O=false,A=false,V=0,S=false,U.clear(),clearTimeout(X),he();},pause(){S=true,cancelAnimationFrame($);},resume(){S&&(S=false,pe&&($=requestAnimationFrame(ge)));},seek(t){let n=Math.min(1,Math.max(0,t));te=n,z=n,S=true,cancelAnimationFrame($),je(n,u);},getProgress(){return te}}}var De=class extends HTMLElement{constructor(){super(...arguments);this.instance=null;}connectedCallback(){let r={},o=this.getAttribute("speed"),p=this.getAttribute("easing"),m=this.getAttribute("stagger"),y=this.getAttribute("direction"),w=this.getAttribute("selector");o&&(r.speed=parseFloat(o)),p&&(r.easing=p),m&&(r.stagger=parseFloat(m)),y&&(r.direction=y),w&&(r.selector=w),this.hasAttribute("fade")&&(r.fade=this.getAttribute("fade")!=="false"),this.instance=Be(this,r);}disconnectedCallback(){this.instance?.destroy(),this.instance=null;}};typeof customElements<"u"&&!customElements.get("scroll-draw")&&customElements.define("scroll-draw",De);
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
var
|
|
2
|
-
<div style="position:absolute;${
|
|
3
|
-
<div style="position:absolute;${X?`left:${b}px;top:0;bottom:0;border-left:2px dashed #ef4444;`:`top:${b}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",l,{passive:true}),l(),o}function He(e,s,r){let o=(s.match(/[-+]?(?:\d*\.)?\d+(?:[eE][-+]?\d+)?/g)??[]).map(Number),l=0;return e.replace(/[-+]?(?:\d*\.)?\d+(?:[eE][-+]?\d+)?/g,p=>{let c=parseFloat(p),b=o[l++]??c;return String(+(c+(b-c)*r).toFixed(4))})}function Ve(e,s={}){if(typeof window>"u")return {destroy:()=>{},replay:()=>{},pause:()=>{},resume:()=>{},seek:()=>{},getProgress:()=>0};let r=window.matchMedia("(prefers-reduced-motion: reduce)").matches,{selector:o="path, polyline, line, polygon, rect, circle",speed:l=1,fade:p=false,easing:c="linear",trigger:b={},stagger:X=0,direction:y="forward",once:U=false,debug:We=false,axis:$="y",scrollContainer:ce,autoReverse:Z=false,delay:pe=0,strokeColor:R,strokeWidth:H,fillOpacity:V,waypoints:ee,velocityScale:te=false,threshold:Ge=0,rootMargin:ze="0px",repeat:j=0,repeatDelay:Ae=0,morphTo:D,clip:me,native:qe=true,onProgress:de,onStart:ye,onComplete:J}=s,W=me===true?"left":typeof me=="string"?me:false,re=typeof c=="function"?c:ve[c]??ve.linear,ke=we(b.start??"top bottom"),Te=we(b.end??"bottom top"),v=typeof ce=="string"?document.querySelector(ce):ce??null,C=Array.isArray(R)?R[0]:null,x=Array.isArray(R)?R[1]:typeof R=="string"?R:null,S=Array.isArray(H)?H[0]:null,A=Array.isArray(H)?H[1]:typeof H=="number"?H:null,k=Array.isArray(V)?V[0]:null,T=Array.isArray(V)?V[1]:typeof V=="number"?V:null;function _(t){let n=t*100;switch(W){case "right":return `inset(0 0 0 ${100-n}%)`;case "top":return `inset(0 0 ${100-n}% 0)`;case "bottom":return `inset(${100-n}% 0 0 0)`;case "center":return `circle(${t*150}% at 50% 50%)`;default:return `inset(0 ${100-n}% 0 0)`}}let w=W?[]:Array.from(e.querySelectorAll(o)),g=[],I=[],O=0,F=0,P=false,G=false,N=0,se=false,M=-1,ne=-1,z=false,oe=0,K=0,ie,ge=null,ae=new Set,le=-1,Me=performance.now();function Q(){return v?$==="x"?v.scrollLeft:v.scrollTop:$==="x"?window.scrollX:window.scrollY}function Le(){return v?$==="x"?v.clientWidth:v.clientHeight:$==="x"?window.innerWidth:window.innerHeight}function Pe(){let t=e.getBoundingClientRect(),n,a,d;if(v){let E=v.getBoundingClientRect();n=$==="x"?t.left-E.left+v.scrollLeft:t.top-E.top+v.scrollTop,a=$==="x"?t.width:t.height,d=Q();}else n=$==="x"?t.left:t.top,a=$==="x"?t.width:t.height,d=Q();let q=$e({top:n,height:a},d,Le(),ke,Te);O=q.tStart,F=q.tEnd,We&&process.env.NODE_ENV!=="production"&&(ge?.remove(),ge=Qe(O,F,$));}function Be(t,n){if(e.style.setProperty("--scroll-draw-progress",String(t)),W){let a=n==="reverse"?1-t:t;e.style.clipPath=_(a);return}w.forEach((a,d)=>{a.style.strokeDashoffset=n==="reverse"?`${g[d]*t}`:`${g[d]*(1-t)}`,p&&(a.style.opacity=n==="reverse"?`${1-t}`:`${t}`),C&&x?a.style.stroke=xe(C,x,t):x&&(a.style.stroke=x),S!==null&&A!==null?a.style.strokeWidth=`${S+(A-S)*t}`:A!==null&&(a.style.strokeWidth=`${A}`),k!==null&&T!==null?a.style.fillOpacity=`${k+(T-k)*t}`:T!==null&&(a.style.fillOpacity=`${T}`),D&&a.tagName.toLowerCase()==="path"&&I[d]&&a.setAttribute("d",He(I[d],D,t));});}function De(){if(e.style.setProperty("--scroll-draw-progress","0"),W){e.style.clipPath=_(0);return}w.forEach((t,n)=>{t.style.strokeDasharray=`${g[n]}`,t.style.strokeDashoffset=y==="reverse"?"0":`${g[n]}`,p?t.style.opacity=y==="reverse"?"1":"0":t.style.opacity="",C&&(t.style.stroke=C),S!==null&&(t.style.strokeWidth=`${S}`),k!==null&&(t.style.fillOpacity=`${k}`),D&&t.tagName.toLowerCase()==="path"&&I[n]&&t.setAttribute("d",I[n]);});}if(w.forEach(t=>{Ke(t);let n=Ee(t);g.push(n),t.tagName.toLowerCase()==="path"?I.push(t.getAttribute("d")??""):I.push(""),r?(t.style.strokeDasharray=`${n}`,t.style.strokeDashoffset=y==="reverse"?`${n}`:"0",p&&(t.style.opacity="1"),x&&(t.style.stroke=x),A!==null&&(t.style.strokeWidth=`${A}`),T!==null&&(t.style.fillOpacity=`${T}`),D&&t.tagName.toLowerCase()==="path"&&t.setAttribute("d",D)):(t.style.strokeDasharray=`${n}`,t.style.strokeDashoffset=y==="reverse"?"0":`${n}`,p?t.style.opacity=y==="reverse"?"1":"0":t.style.opacity="",C&&(t.style.stroke=C),S!==null&&(t.style.strokeWidth=`${S}`),k!==null&&(t.style.fillOpacity=`${k}`));}),W){if(r)return e.style.clipPath=_(1),J?.(),{destroy:()=>{},replay:()=>{},pause:()=>{},resume:()=>{},seek:()=>{},getProgress:()=>1};e.style.clipPath=_(0);}else if(r)return J?.(),{destroy:()=>{},replay:()=>{},pause:()=>{},resume:()=>{},seek:()=>{},getProgress:()=>1};function _e(){return !(qe===false||!Je()||!w.length||typeof c!="string"||!(c in Re)||W||$!=="y"||v||l!==1||X!==0||U||Z||te!==false||D||ee||j||pe>0||de||ye||J||R!=null||H!=null||V!=null||(b.start??"top bottom").trim()!=="top bottom"||(b.end??"bottom top").trim()!=="bottom top")}function Xe(){let t=`svg-scroll-draw-${++je}`,n=y==="reverse"?"0":"var(--ssd-len)",a=y==="reverse"?"var(--ssd-len)":"0",d=`stroke-dashoffset:${n};`,q=`stroke-dashoffset:${a};`;p&&(d+=`opacity:${y==="reverse"?1:0};`,q+=`opacity:${y==="reverse"?0:1};`);let E=document.createElement("style");E.setAttribute("data-svg-scroll-draw",""),E.textContent=`@keyframes ${t}{from{${d}}to{${q}}}.${t}{animation-name:${t};animation-duration:auto;animation-timing-function:${Re[c]};animation-fill-mode:both;animation-timeline:view();animation-range:cover 0% cover 100%;}`,document.head.appendChild(E);function i(f,L){f.style.setProperty("--ssd-len",String(g[L])),f.style.strokeDasharray=`${g[L]}`,f.style.strokeDashoffset="",f.style.opacity="",f.style.animationPlayState="",f.classList.add(t);}w.forEach(i);let u=false,h=-1;function m(){if(h>=0)return h;let f=e.getBoundingClientRect(),{tStart:L,tEnd:Y}=$e({top:f.top,height:f.height},Q(),Le(),ke,Te);return re(B(Q(),L,Y,l))}return {destroy(){w.forEach(f=>{f.classList.remove(t),f.style.removeProperty("--ssd-len"),f.style.animationPlayState="";}),E.remove();},replay(){u=false,h=-1,w.forEach(i);},pause(){u=true,w.forEach(f=>{f.style.animationPlayState="paused";});},resume(){u&&(u=false,w.forEach(f=>{f.style.animationPlayState="running";}));},seek(f){let L=Math.min(1,Math.max(0,f));h=L,u=true,w.forEach((Y,Ce)=>{Y.classList.remove(t),Y.style.strokeDashoffset=y==="reverse"?`${g[Ce]*L}`:`${g[Ce]*(1-L)}`,p&&(Y.style.opacity=y==="reverse"?`${1-L}`:`${L}`);});},getProgress(){return m()}}}if(_e())return Xe();Pe();function ue(){if(!se||z)return;let t=performance.now(),n=Q(),a=l;if(te!==false){let i=t-Me,u=i>0?Math.abs(n-(le<0?n:le))/i:0;a=l*Math.max(.2,1+u*(typeof te=="number"?te:1)*.04);}le=n,Me=t;let d=Z?ne===-1||n>=ne?"forward":"reverse":y;ne=n;let q=F-O,E=true;if(W){let i=re(B(n,O,F,a));U&&!Z&&(M=Math.max(M,i),i=M),oe=i,e.style.setProperty("--scroll-draw-progress",String(i));let u=d==="reverse"?1-i:i;e.style.clipPath=_(u),de?.(i),!G&&B(n,O,F,a)>0&&(G=true,ye?.()),i>=1&&!P?(P=true,J?.(),K<(j==="infinite"?1/0:j??0)&&(K++,ie=setTimeout(()=>{M=-1,G=false,P=false,e.style.clipPath=_(0);},Ae))):i<1&&!U&&(P=false),N=requestAnimationFrame(ue);return}if(w.forEach((i,u)=>{let h=u*X*q,m=re(B(n,O+h,F+h,a));U&&!Z&&(M=Math.max(M,m),m=M),oe=m,i.style.strokeDashoffset=d==="reverse"?`${g[u]*m}`:`${g[u]*(1-m)}`,p&&(i.style.opacity=d==="reverse"?`${1-m}`:`${m}`),C&&x?i.style.stroke=xe(C,x,m):x&&(i.style.stroke=x),S!==null&&A!==null?i.style.strokeWidth=`${S+(A-S)*m}`:A!==null&&(i.style.strokeWidth=`${A}`),k!==null&&T!==null?i.style.fillOpacity=`${k+(T-k)*m}`:T!==null&&(i.style.fillOpacity=`${T}`),D&&i.tagName.toLowerCase()==="path"&&I[u]&&i.setAttribute("d",He(I[u],D,m)),u===0&&(de?.(m),e.style.setProperty("--scroll-draw-progress",String(m))),m<1&&(E=false);}),ee){let i=re(B(n,O,F,a));for(let u in ee){let h=parseFloat(u);i>=h&&!ae.has(h)&&(ae.add(h),ee[u]?.());}}!G&&B(n,O,F,a)>0&&(G=true,ye?.()),E&&!P?(P=true,J?.(),K<(j==="infinite"?1/0:j??0)&&(K++,ie=setTimeout(()=>{M=-1,G=false,P=false,ae.clear(),De();},Ae))):!E&&!U&&(P=false),N=requestAnimationFrame(ue);}let he=new IntersectionObserver(t=>{t.forEach(n=>{se=n.isIntersecting,se&&!z?N=requestAnimationFrame(ue):cancelAnimationFrame(N);});},{root:v??null,threshold:Ge,rootMargin:ze}),be;function fe(){clearTimeout(be),be=setTimeout(()=>{w.forEach((t,n)=>{g[n]=Ee(t),t.style.strokeDasharray=`${g[n]}`;}),Pe();},150);}return window.addEventListener("resize",fe),window.addEventListener("orientationchange",fe),pe>0?setTimeout(()=>he.observe(e),pe):he.observe(e),{destroy(){cancelAnimationFrame(N),clearTimeout(ie),he.disconnect(),window.removeEventListener("resize",fe),window.removeEventListener("orientationchange",fe),clearTimeout(be),ge?.remove();},replay(){M=-1,ne=-1,le=-1,G=false,P=false,K=0,z=false,ae.clear(),clearTimeout(ie),De();},pause(){z=true,cancelAnimationFrame(N);},resume(){z&&(z=false,se&&(N=requestAnimationFrame(ue)));},seek(t){let n=Math.min(1,Math.max(0,t));oe=n,M=n,z=true,cancelAnimationFrame(N),Be(n,y);},getProgress(){return oe}}}var Se=class extends HTMLElement{constructor(){super(...arguments);this.instance=null;}connectedCallback(){let r={},o=this.getAttribute("speed"),l=this.getAttribute("easing"),p=this.getAttribute("stagger"),c=this.getAttribute("direction"),b=this.getAttribute("selector");o&&(r.speed=parseFloat(o)),l&&(r.easing=l),p&&(r.stagger=parseFloat(p)),c&&(r.direction=c),b&&(r.selector=b),this.hasAttribute("fade")&&(r.fade=this.getAttribute("fade")!=="false"),this.instance=Ve(this,r);}disconnectedCallback(){this.instance?.destroy(),this.instance=null;}};typeof customElements<"u"&&!customElements.get("scroll-draw")&&customElements.define("scroll-draw",Se);
|
|
1
|
+
function Ye({bounces:e=3,decay:s=.5}={}){let r=Math.max(1,Math.round(e)),o=Math.max(.01,Math.min(.99,s)),p=Math.sqrt(o),m=0,y=[];for(let u=0;u<r;u++){let g=Math.pow(p,u);y.push(g),m+=g;}let w=[0],R=0;for(let u=0;u<r;u++)R+=y[u]/m,w.push(R);return u=>{if(u<=0)return 0;if(u>=1)return 1;for(let g=0;g<r;g++)if(u<=w[g+1]){let se=(u-w[g])/(w[g+1]-w[g]);if(g===0)return se*(2-se);let P=1-Math.pow(o,g);return P+(1-P)*(2*se-1)*(2*se-1)}return 1}}function Ze({amplitude:e=1,period:s=.4}={}){let r=Math.max(1,e),o=Math.max(.1,s),p=r<=1?o/4:o/(2*Math.PI)*Math.asin(1/r);return m=>m<=0?0:m>=1?1:r*Math.pow(2,-10*m)*Math.sin((m-p)*(2*Math.PI)/o)+1}var Te={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:Ye(),elastic:Ze()};function Se(e="top bottom"){let s=e.trim();if(/^\d+(\.\d+)?%$/.test(s))return {element:"top",viewport:s};let[r="top",o="bottom"]=s.split(/\s+/).filter(Boolean);return {element:r,viewport:o}}function We(e,s,r,o){switch(o){case "top":return e+r;case "center":return e+r+s/2;case "bottom":return e+r+s;default:return e+r}}function ze(e,s){if(/^\d+(\.\d+)?%$/.test(e))return s*(parseFloat(e)/100);switch(e){case "top":return 0;case "center":return s/2;case "bottom":return s;default:return s}}function we(e){let s=e.tagName.toLowerCase();if(s==="rect"){let r=parseFloat(e.getAttribute("width")??"0"),o=parseFloat(e.getAttribute("height")??"0");return 2*(r+o)}if(s==="circle"){let r=parseFloat(e.getAttribute("r")??"0");return 2*Math.PI*r}return e.getTotalLength()}function et(e,s,r){return Math.min(r,Math.max(s,e))}function ne(e,s,r,o){return r===s?0:et((e-s)/(r-s)*o,0,1)}function Le(e,s,r,o,p){let m=We(e.top,e.height,s,o.element)-ze(o.viewport,r),y=We(e.top,e.height,s,p.element)-ze(p.viewport,r);return {tStart:m,tEnd:y}}function qe(e){let s=/^#([a-f\d])([a-f\d])([a-f\d])$/i.exec(e);if(s)return [parseInt(s[1]+s[1],16),parseInt(s[2]+s[2],16),parseInt(s[3]+s[3],16)];let r=/^#([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(e);if(r)return [parseInt(r[1],16),parseInt(r[2],16),parseInt(r[3],16)];let o=/^rgb\(\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*\)$/i.exec(e);return o?[parseInt(o[1]),parseInt(o[2]),parseInt(o[3])]:null}function ve(e,s,r){let o=qe(e),p=qe(s);return !o||!p?e:`rgb(${Math.round(o[0]+(p[0]-o[0])*r)},${Math.round(o[1]+(p[1]-o[1])*r)},${Math.round(o[2]+(p[2]-o[2])*r)})`}function Ve(e,s){process.env.NODE_ENV!=="production"&&console.warn(`[svg-scroll-draw] ${e}`,s);}var Ge={linear:"linear","ease-in":"ease-in","ease-out":"ease-out","ease-in-out":"ease-in-out"},tt=0;function rt(){return typeof CSS<"u"&&typeof CSS.supports=="function"&&CSS.supports("animation-timeline: view()")}function nt(e){let s=e.getAttribute("stroke"),r=e.getAttribute("fill");!s||s==="none"?Ve("Element has no stroke \u2014 path will not be visible.",e):r&&r!=="none"&&r!=="transparent"&&Ve("Element has a fill \u2014 it may obscure the stroke animation.",e);}function st(e,s,r){let o=document.createElement("div");o.setAttribute("data-svg-scroll-draw-debug",""),o.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 p(){let m=r==="x"?window.scrollX:window.scrollY,y=e-m,w=s-m,R=r==="x";o.innerHTML=`
|
|
2
|
+
<div style="position:absolute;${R?`left:${y}px;top:0;bottom:0;border-left:2px dashed #22c55e;`:`top:${y}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;${R?`left:${w}px;top:0;bottom:0;border-left:2px dashed #ef4444;`:`top:${w}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",p,{passive:true}),p(),o}function Pe(e,s,r){let o=(s.match(/[-+]?(?:\d*\.)?\d+(?:[eE][-+]?\d+)?/g)??[]).map(Number),p=0;return e.replace(/[-+]?(?:\d*\.)?\d+(?:[eE][-+]?\d+)?/g,m=>{let y=parseFloat(m),w=o[p++]??y;return String(+(y+(w-y)*r).toFixed(4))})}function Be(e,s={}){if(typeof window>"u")return {destroy:()=>{},replay:()=>{},pause:()=>{},resume:()=>{},seek:()=>{},getProgress:()=>0};let r=window.matchMedia("(prefers-reduced-motion: reduce)").matches,{selector:o="path, polyline, line, polygon, rect, circle",speed:p=1,fade:m=false,easing:y="linear",trigger:w={},stagger:R=0,direction:u="forward",once:g=false,debug:se=false,axis:P="y",scrollContainer:Ee,autoReverse:ce=false,delay:ae=0,strokeColor:j,strokeWidth:J,fillOpacity:K,waypoints:Q,velocityScale:fe=false,threshold:Ie=0,rootMargin:Fe="0px",repeat:Y=0,repeatDelay:$e=0,morphTo:N,clip:xe,autoplay:_e=false,duration:Xe=1e3,native:Ue=true,onProgress:le,onStart:me,onComplete:oe}=s,G=xe===true?"left":typeof xe=="string"?xe:false,Z=typeof y=="function"?y:Te[y]??Te.linear,Ce=Se(w.start??"top bottom"),Oe=Se(w.end??"bottom top"),D=typeof Ee=="string"?document.querySelector(Ee):Ee??null,H=Array.isArray(j)?j[0]:null,M=Array.isArray(j)?j[1]:typeof j=="string"?j:null,I=Array.isArray(J)?J[0]:null,k=Array.isArray(J)?J[1]:typeof J=="number"?J:null,F=Array.isArray(K)?K[0]:null,T=Array.isArray(K)?K[1]:typeof K=="number"?K:null;function ee(t){let n=t*100;switch(G){case "right":return `inset(0 0 0 ${100-n}%)`;case "top":return `inset(0 0 ${100-n}% 0)`;case "bottom":return `inset(${100-n}% 0 0 0)`;case "center":return `circle(${t*150}% at 50% 50%)`;default:return `inset(0 ${100-n}% 0 0)`}}let x=G?[]:Array.from(e.querySelectorAll(o)),E=[],W=[],B=0,_=0,A=false,O=false,$=0,pe=false,z=-1,de=-1,S=false,te=0,V=0,X,Ae=null,U=new Set,ye=-1,Re=performance.now();function ue(){return D?P==="x"?D.scrollLeft:D.scrollTop:P==="x"?window.scrollX:window.scrollY}function Ne(){return D?P==="x"?D.clientWidth:D.clientHeight:P==="x"?window.innerWidth:window.innerHeight}function He(){let t=e.getBoundingClientRect(),n,l,b;if(D){let L=D.getBoundingClientRect();n=P==="x"?t.left-L.left+D.scrollLeft:t.top-L.top+D.scrollTop,l=P==="x"?t.width:t.height,b=ue();}else n=P==="x"?t.left:t.top,l=P==="x"?t.width:t.height,b=ue();let C=Le({top:n,height:l},b,Ne(),Ce,Oe);B=C.tStart,_=C.tEnd,se&&process.env.NODE_ENV!=="production"&&(Ae?.remove(),Ae=st(B,_,P));}function je(t,n){if(e.style.setProperty("--scroll-draw-progress",String(t)),G){let l=n==="reverse"?1-t:t;e.style.clipPath=ee(l);return}x.forEach((l,b)=>{l.style.strokeDashoffset=n==="reverse"?`${E[b]*t}`:`${E[b]*(1-t)}`,m&&(l.style.opacity=n==="reverse"?`${1-t}`:`${t}`),H&&M?l.style.stroke=ve(H,M,t):M&&(l.style.stroke=M),I!==null&&k!==null?l.style.strokeWidth=`${I+(k-I)*t}`:k!==null&&(l.style.strokeWidth=`${k}`),F!==null&&T!==null?l.style.fillOpacity=`${F+(T-F)*t}`:T!==null&&(l.style.fillOpacity=`${T}`),N&&l.tagName.toLowerCase()==="path"&&W[b]&&l.setAttribute("d",Pe(W[b],N,t));});}function he(){if(e.style.setProperty("--scroll-draw-progress","0"),G){e.style.clipPath=ee(0);return}x.forEach((t,n)=>{t.style.strokeDasharray=`${E[n]}`,t.style.strokeDashoffset=u==="reverse"?"0":`${E[n]}`,m?t.style.opacity=u==="reverse"?"1":"0":t.style.opacity="",H&&(t.style.stroke=H),I!==null&&(t.style.strokeWidth=`${I}`),F!==null&&(t.style.fillOpacity=`${F}`),N&&t.tagName.toLowerCase()==="path"&&W[n]&&t.setAttribute("d",W[n]);});}if(x.forEach(t=>{nt(t);let n=we(t);E.push(n),t.tagName.toLowerCase()==="path"?W.push(t.getAttribute("d")??""):W.push(""),r?(t.style.strokeDasharray=`${n}`,t.style.strokeDashoffset=u==="reverse"?`${n}`:"0",m&&(t.style.opacity="1"),M&&(t.style.stroke=M),k!==null&&(t.style.strokeWidth=`${k}`),T!==null&&(t.style.fillOpacity=`${T}`),N&&t.tagName.toLowerCase()==="path"&&t.setAttribute("d",N)):(t.style.strokeDasharray=`${n}`,t.style.strokeDashoffset=u==="reverse"?"0":`${n}`,m?t.style.opacity=u==="reverse"?"1":"0":t.style.opacity="",H&&(t.style.stroke=H),I!==null&&(t.style.strokeWidth=`${I}`),F!==null&&(t.style.fillOpacity=`${F}`));}),G){if(r)return e.style.clipPath=ee(1),oe?.(),{destroy:()=>{},replay:()=>{},pause:()=>{},resume:()=>{},seek:()=>{},getProgress:()=>1};e.style.clipPath=ee(0);}else if(r)return oe?.(),{destroy:()=>{},replay:()=>{},pause:()=>{},resume:()=>{},seek:()=>{},getProgress:()=>1};function Je(){return !(Ue===false||!rt()||!x.length||typeof y!="string"||!(y in Ge)||G||P!=="y"||D||p!==1||R!==0||g||ce||fe!==false||N||Q||Y||ae>0||le||me||oe||j!=null||J!=null||K!=null||(w.start??"top bottom").trim()!=="top bottom"||(w.end??"bottom top").trim()!=="bottom top")}function Ke(){let t=`svg-scroll-draw-${++tt}`,n=u==="reverse"?"0":"var(--ssd-len)",l=u==="reverse"?"var(--ssd-len)":"0",b=`stroke-dashoffset:${n};`,C=`stroke-dashoffset:${l};`;m&&(b+=`opacity:${u==="reverse"?1:0};`,C+=`opacity:${u==="reverse"?0:1};`);let L=document.createElement("style");L.setAttribute("data-svg-scroll-draw",""),L.textContent=`@keyframes ${t}{from{${b}}to{${C}}}.${t}{animation-name:${t};animation-duration:auto;animation-timing-function:${Ge[y]};animation-fill-mode:both;animation-timeline:view();animation-range:cover 0% cover 100%;}`,document.head.appendChild(L);function a(i,f){i.style.setProperty("--ssd-len",String(E[f])),i.style.strokeDasharray=`${E[f]}`,i.style.strokeDashoffset="",i.style.opacity="",i.style.animationPlayState="",i.classList.add(t);}x.forEach(a);let d=false,v=-1;function c(){if(v>=0)return v;let i=e.getBoundingClientRect(),{tStart:f,tEnd:h}=Le({top:i.top,height:i.height},ue(),Ne(),Ce,Oe);return Z(ne(ue(),f,h,p))}return {destroy(){x.forEach(i=>{i.classList.remove(t),i.style.removeProperty("--ssd-len"),i.style.animationPlayState="";}),L.remove();},replay(){d=false,v=-1,x.forEach(a);},pause(){d=true,x.forEach(i=>{i.style.animationPlayState="paused";});},resume(){d&&(d=false,x.forEach(i=>{i.style.animationPlayState="running";}));},seek(i){let f=Math.min(1,Math.max(0,i));v=f,d=true,x.forEach((h,re)=>{h.classList.remove(t),h.style.strokeDashoffset=u==="reverse"?`${E[re]*f}`:`${E[re]*(1-f)}`,m&&(h.style.opacity=u==="reverse"?`${1-f}`:`${f}`);});},getProgress(){return c()}}}if(Je())return Ke();function Qe(){let t=Math.max(1,Xe),n=0,l=0;function b(c){let i=true;if(G){let f=Math.min(1,Math.max(0,c/t)),h=Z(f);te=h,e.style.setProperty("--scroll-draw-progress",String(h)),e.style.clipPath=ee(u==="reverse"?1-h:h),le?.(h),f<1&&(i=false);}else x.forEach((f,h)=>{let re=h*R*t,ie=Math.min(1,Math.max(0,(c-re)/t)),q=Z(ie);f.style.strokeDashoffset=u==="reverse"?`${E[h]*q}`:`${E[h]*(1-q)}`,m&&(f.style.opacity=u==="reverse"?`${1-q}`:`${q}`),H&&M?f.style.stroke=ve(H,M,q):M&&(f.style.stroke=M),I!==null&&k!==null?f.style.strokeWidth=`${I+(k-I)*q}`:k!==null&&(f.style.strokeWidth=`${k}`),F!==null&&T!==null?f.style.fillOpacity=`${F+(T-F)*q}`:T!==null&&(f.style.fillOpacity=`${T}`),N&&f.tagName.toLowerCase()==="path"&&W[h]&&f.setAttribute("d",Pe(W[h],N,q)),h===0&&(le?.(q),e.style.setProperty("--scroll-draw-progress",String(q))),ie<1&&(i=false);});if(Q){let f=Math.min(1,Math.max(0,c/t)),h=Z(f);for(let re in Q){let ie=parseFloat(re);h>=ie&&!U.has(ie)&&(U.add(ie),Q[re]?.());}}return i}function C(c){if(S)return;let i=c-n;O||(O=true,me?.());let f=b(i);if(f&&!A){A=true,b(t*(1+Math.max(0,x.length-1)*R)),oe?.(),V<(Y==="infinite"?1/0:Y??0)&&(V++,X=setTimeout(()=>{n=performance.now(),O=false,A=false,U.clear(),he(),$=requestAnimationFrame(C);},$e));return}f||($=requestAnimationFrame(C));}function L(){cancelAnimationFrame($),clearTimeout(X),n=performance.now(),l=0,S=false,O=false,A=false,V=0,U.clear(),he(),$=requestAnimationFrame(C);}let a=new IntersectionObserver(c=>{c.forEach(i=>{i.isIntersecting&&!(g&&A)?L():!i.isIntersecting&&!g&&!A&&(cancelAnimationFrame($),clearTimeout(X),n=null);});},{root:D??null,threshold:Ie,rootMargin:Fe}),d;function v(){clearTimeout(d),d=setTimeout(()=>{x.forEach((c,i)=>{E[i]=we(c),c.style.strokeDasharray=`${E[i]}`;});},150);}return window.addEventListener("resize",v),window.addEventListener("orientationchange",v),ae>0?setTimeout(()=>a.observe(e),ae):a.observe(e),{destroy(){cancelAnimationFrame($),clearTimeout(X),a.disconnect(),window.removeEventListener("resize",v),window.removeEventListener("orientationchange",v),clearTimeout(d);},replay(){V=0,L();},pause(){S||(S=true,l=performance.now()-n,cancelAnimationFrame($));},resume(){S&&(S=false,n=performance.now()-l,$=requestAnimationFrame(C));},seek(c){let i=Math.min(1,Math.max(0,c));te=i,S=true,l=i*t,n=performance.now()-l,cancelAnimationFrame($),b(l);},getProgress(){return te}}}if(_e)return Qe();He();function ge(){if(!pe||S)return;let t=performance.now(),n=ue(),l=p;if(fe!==false){let a=t-Re,d=a>0?Math.abs(n-(ye<0?n:ye))/a:0;l=p*Math.max(.2,1+d*(typeof fe=="number"?fe:1)*.04);}ye=n,Re=t;let b=ce?de===-1||n>=de?"forward":"reverse":u;de=n;let C=_-B,L=true;if(G){let a=Z(ne(n,B,_,l));g&&!ce&&(z=Math.max(z,a),a=z),te=a,e.style.setProperty("--scroll-draw-progress",String(a));let d=b==="reverse"?1-a:a;e.style.clipPath=ee(d),le?.(a),!O&&ne(n,B,_,l)>0&&(O=true,me?.()),a>=1&&!A?(A=true,oe?.(),V<(Y==="infinite"?1/0:Y??0)&&(V++,X=setTimeout(()=>{z=-1,O=false,A=false,e.style.clipPath=ee(0);},$e))):a<1&&!g&&(A=false),$=requestAnimationFrame(ge);return}if(x.forEach((a,d)=>{let v=d*R*C,c=Z(ne(n,B+v,_+v,l));g&&!ce&&(z=Math.max(z,c),c=z),te=c,a.style.strokeDashoffset=b==="reverse"?`${E[d]*c}`:`${E[d]*(1-c)}`,m&&(a.style.opacity=b==="reverse"?`${1-c}`:`${c}`),H&&M?a.style.stroke=ve(H,M,c):M&&(a.style.stroke=M),I!==null&&k!==null?a.style.strokeWidth=`${I+(k-I)*c}`:k!==null&&(a.style.strokeWidth=`${k}`),F!==null&&T!==null?a.style.fillOpacity=`${F+(T-F)*c}`:T!==null&&(a.style.fillOpacity=`${T}`),N&&a.tagName.toLowerCase()==="path"&&W[d]&&a.setAttribute("d",Pe(W[d],N,c)),d===0&&(le?.(c),e.style.setProperty("--scroll-draw-progress",String(c))),c<1&&(L=false);}),Q){let a=Z(ne(n,B,_,l));for(let d in Q){let v=parseFloat(d);a>=v&&!U.has(v)&&(U.add(v),Q[d]?.());}}!O&&ne(n,B,_,l)>0&&(O=true,me?.()),L&&!A?(A=true,oe?.(),V<(Y==="infinite"?1/0:Y??0)&&(V++,X=setTimeout(()=>{z=-1,O=false,A=false,U.clear(),he();},$e))):!L&&!g&&(A=false),$=requestAnimationFrame(ge);}let Me=new IntersectionObserver(t=>{t.forEach(n=>{pe=n.isIntersecting,pe&&!S?$=requestAnimationFrame(ge):cancelAnimationFrame($);});},{root:D??null,threshold:Ie,rootMargin:Fe}),ke;function be(){clearTimeout(ke),ke=setTimeout(()=>{x.forEach((t,n)=>{E[n]=we(t),t.style.strokeDasharray=`${E[n]}`;}),He();},150);}return window.addEventListener("resize",be),window.addEventListener("orientationchange",be),ae>0?setTimeout(()=>Me.observe(e),ae):Me.observe(e),{destroy(){cancelAnimationFrame($),clearTimeout(X),Me.disconnect(),window.removeEventListener("resize",be),window.removeEventListener("orientationchange",be),clearTimeout(ke),Ae?.remove();},replay(){z=-1,de=-1,ye=-1,O=false,A=false,V=0,S=false,U.clear(),clearTimeout(X),he();},pause(){S=true,cancelAnimationFrame($);},resume(){S&&(S=false,pe&&($=requestAnimationFrame(ge)));},seek(t){let n=Math.min(1,Math.max(0,t));te=n,z=n,S=true,cancelAnimationFrame($),je(n,u);},getProgress(){return te}}}var De=class extends HTMLElement{constructor(){super(...arguments);this.instance=null;}connectedCallback(){let r={},o=this.getAttribute("speed"),p=this.getAttribute("easing"),m=this.getAttribute("stagger"),y=this.getAttribute("direction"),w=this.getAttribute("selector");o&&(r.speed=parseFloat(o)),p&&(r.easing=p),m&&(r.stagger=parseFloat(m)),y&&(r.direction=y),w&&(r.selector=w),this.hasAttribute("fade")&&(r.fade=this.getAttribute("fade")!=="false"),this.instance=Be(this,r);}disconnectedCallback(){this.instance?.destroy(),this.instance=null;}};typeof customElements<"u"&&!customElements.get("scroll-draw")&&customElements.define("scroll-draw",De);
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "svg-scroll-draw",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.3.0",
|
|
4
4
|
"description": "Scroll-driven SVG path drawing animation library — zero dependencies, ~4.4 KB gzipped, works with React, Vue, and vanilla JS",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"svg",
|
|
@@ -35,7 +35,11 @@
|
|
|
35
35
|
"path-morphing",
|
|
36
36
|
"svg-morph",
|
|
37
37
|
"sequence",
|
|
38
|
-
"group"
|
|
38
|
+
"group",
|
|
39
|
+
"bounce-easing",
|
|
40
|
+
"elastic-easing",
|
|
41
|
+
"spring-easing",
|
|
42
|
+
"physics-easing"
|
|
39
43
|
],
|
|
40
44
|
"homepage": "https://svg-scroll-draw.vercel.app",
|
|
41
45
|
"repository": {
|