UNPKG

alpinejs-spring

Version:

a simple plugin that provides a utility for calculating spring animations

2 lines (1 loc) 1.51 kB
function j(t){return Object.prototype.toString.call(t)==="[object Date]"}function c(t,i,s,e){if(typeof s=="number"||j(s)){let f=e-s,n=(s-i)/(t.dt||1/60),k=t.opts.stiffness*f,g=t.opts.damping*n,p=(k-g)*t.inv_mass,r=(n+p)*t.dt;return Math.abs(r)<t.opts.precision&&Math.abs(f)<t.opts.precision?e:(t.settled=!1,j(s)?new Date(s.getTime()+r):s+r)}else{if(Array.isArray(s))return s.map((f,n)=>c(t,i[n],s[n],e[n]));if(typeof s=="object"){let f={};for(let n in s)f[n]=c(t,i[n],s[n],e[n]);return f}else throw new Error(`Cannot spring ${typeof s} values`)}}var o={tick:t=>requestAnimationFrame(t),now:()=>performance.now(),tasks:new Set};function E(t){o.tasks.forEach(i=>{i.c(t)||(o.tasks.delete(i),i.f())}),o.tasks.size!==0&&o.tick(E)}function M(t){let i;return o.tasks.size===0&&o.tick(E),{promise:new Promise(s=>{o.tasks.add(i={c:t,f:s})})}}function z(t){t.magic("spring",(i,{Alpine:s})=>(e=void 0,f={})=>{let{stiffness:n=.15,damping:k=.8,precision:g=.01}=f,p,r,h=e,m=e,l=1,A=0,d=!1;s.onElRemoved(i,()=>{d=!0,r=null});function D(w,a={}){if(m=w,e==null||a.hard||this.stiffness>=1&&this.damping>=1){d=!0,p=o.now(),h=m,this.value=e=m;return}else a.soft&&(A=1/((a.soft===!0?.5:+a.soft)*60),l=0);r||(p=o.now(),d=!1,r=M(y=>{if(d)return d=!1,r=null,!1;l=Math.min(l+A,1);let b={inv_mass:l,opts:this,settled:!0,dt:(y-p)*60/1e3},S=c(b,h,e,m);return p=y,h=e,this.value=e=S,b.settled&&(r=null),!b.settled}))}return{value:e,set:D,update(w,a){return this.set(w(m,e),a)},stiffness:n,damping:k,precision:g}})}var $=z;export{$ as default};