UNPKG

@fancyapps/ui

Version:

Robust JavaScript UI Component Library

2 lines 4.01 kB
/*! License details at fancyapps.com/license */ (function(e,t){typeof exports==`object`&&typeof module<`u`?t(exports):typeof define==`function`&&define.amd?define([`exports`],t):(e=typeof globalThis<`u`?globalThis:e||self,t(e.window=e.window||{}))})(this,function(e){Object.defineProperty(e,Symbol.toStringTag,{value:`Module`});let t=function(e=0,t=0,n=0){return Math.max(Math.min(t,n),e)},n=e=>typeof e==`object`&&!!e&&e.constructor===Object&&Object.prototype.toString.call(e)===`[object Object]`;function r(e){return n(e)||Array.isArray(e)}function i(e,t){let n=Object.keys(e),a=Object.keys(t);return n.length===a.length?n.every(n=>{let a=e[n],o=t[n];return typeof a==`function`?`${a}`==`${o}`:!r(a)||!r(o)?a===o:i(a,o)}):!1}let a=function(e){for(let t of l)t.getState()===o.Running&&t.tick(d?e-d:0);d=e,u=window.requestAnimationFrame(a)},o=function(e){return e[e.Initializing=0]=`Initializing`,e[e.Running=1]=`Running`,e[e.Paused=2]=`Paused`,e[e.Completed=3]=`Completed`,e[e.Destroyed=4]=`Destroyed`,e}({});var s=function(e){return e[e.Spring=0]=`Spring`,e[e.Ease=1]=`Ease`,e}(s||{});let c=function(e){return e[e.Loop=0]=`Loop`,e[e.Reverse=1]=`Reverse`,e}({}),l=new Set,u=null,d=0;function f(){let e=o.Initializing,n=s.Ease,r=0,d=0,p=f.Easings.Linear,m=500,h=0,g=0,_=0,v=0,y=1/0,b=.01,x=.01,S=!1,C={},w=null,T={},E={},D={},O=0,k=0,A=c.Loop,j=f.Easings.Linear,M=new Map;function N(e,t){M.set(e,[...M.get(e)||[],t])}function P(e,t){M.has(e)&&M.set(e,M.get(e).filter(e=>e!==t))}function F(e,...t){for(let n of M.get(e)||[])n(...t)}function I(e){return d=0,e?w=setTimeout(()=>{L()},e):L(),V}function L(){e=o.Running,F(`start`,T,E)}function R(){return w&&=(clearTimeout(w),null),e===o.Running&&(e=o.Paused,F(`pause`,T)),V}function z(r){r>50&&(r=50),d+=r;let a=0,l=!1;if(e!==o.Running)return V;if(n===s.Ease){a=t(0,d/m,1),l=a===1;let e=A===c.Reverse?j:p;for(let t in T)T[t]=C[t]+(E[t]-C[t])*e(a)}if(n===s.Spring){let e=r*.001,n=0;for(let r in T){let i=E[r],a=T[r];if(!(typeof i==`number`&&!isNaN(i))||!(typeof a==`number`&&!isNaN(a)))continue;if(Math.abs(i-a)<=x){T[r]=i,D[r]=0;continue}D[r]||(typeof h==`object`&&typeof h[r]==`number`?D[r]=h[r]:typeof h==`number`?D[r]=h:D[r]=0);let o=D[r];o=t(Math.abs(y)*-1,o,Math.abs(y));let s=o*g*v,c=Math.abs(i-a)*_,l=((a>i?-1:1)*c-s)/g;o+=l*e,a+=o*e;let u=T[r]>i?a<i:a>i,d=Math.abs(o)<b&&Math.abs(i-a)<=x;S&&u&&(d=!0),d?(a=i,o=0):n++,T[r]=a,D[r]=o}l=!n}let u={...E};return F(`step`,T,C,E,a),l&&e===o.Running&&i(E,u)&&(e=o.Completed,B()),V}function B(){if(e=o.Completed,D={},F(`end`,T),e===o.Completed)if(r<O){if(r++,A===c.Reverse){let e={...C};C={...E},E=e}I(k)}else r=0;return V}let V={getState:function(){return e},easing:function(e){return p=e,n=s.Ease,D={},V},duration:function(e){return m=e,V},spring:function(e={}){n=s.Spring;let{velocity:t,mass:r,tension:i,friction:a,restDelta:o,restSpeed:c,maxSpeed:l,clamp:u}={velocity:0,mass:1,tension:170,friction:26,restDelta:.1,restSpeed:.1,maxSpeed:1/0,clamp:!0,...e};return h=t,g=r,_=i,v=a,x=o,b=c,y=l,S=u,D={},V},isRunning:function(){return e===o.Running},isSpring:function(){return n===s.Spring},from:function(e){return T={...e},V},to:function(e){return E=e,V},repeat:function(e,t=0,n=c.Loop,r){return O=e,k=t,A=n,j=r||p,V},on:function(e,t){return N(e,t),V},off:function(e,t){return P(e,t),V},start:function(t){return i(T,E)||(e=o.Initializing,C={...T},l.add(this),u||=window.requestAnimationFrame(a),I(t)),V},pause:R,end:B,tick:z,getStartValues:function(){return C},getCurrentValues:function(){return T},getCurrentVelocities:function(){return D},getEndValues:function(){return E},destroy:function(){e=o.Destroyed,w&&=(clearTimeout(w),null),C=T=E={},l.delete(this)}};return V}f.destroy=()=>{for(let e of l)e.destroy();u&&=(cancelAnimationFrame(u),null)},f.Easings={Linear:function(e){return e},EaseIn:function(e){return e===0?0:2**(10*e-10)},EaseOut:function(e){return e===1?1:1-2**(-10*e)},EaseInOut:function(e){return e===0?0:e===1?1:e<.5?2**(20*e-10)/2:(2-2**(-20*e+10))/2}},e.Tween=f,e.TweenRepeatType=c,e.TweenState=o});