UNPKG

@fancyapps/ui

Version:

Robust JavaScript UI Component Library

2 lines • 4.76 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`});function t(e){return typeof TouchEvent<`u`&&e instanceof TouchEvent}function n(e,n){let r=[],i=t(e)?e[n]:e instanceof MouseEvent&&(n===`changedTouches`||e.type!==`mouseup`)?[e]:[];for(let e of i)r.push({x:e.clientX,y:e.clientY,ts:Date.now()});return r}function r(e){return n(e,`touches`)}function i(e){return n(e,`targetTouches`)}function a(e){return n(e,`changedTouches`)}function o(e){let t=e[0],n=e[1]||t;return{x:(t.x+n.x)/2,y:(t.y+n.y)/2,ts:n.ts}}function s(e){let t=e[0],n=e[1]||e[0];return t&&n?Math.sqrt((n.x-t.x)*(n.x-t.x)+(n.y-t.y)*(n.y-t.y))*-1:0}let c=e=>{e.cancelable&&e.preventDefault()},l={passive:!1},u={panThreshold:5,swipeThreshold:3,ignore:[`textarea`,`input`,`select`,`[contenteditable]`,`[data-selectable]`,`[data-draggable]`]},d=!1,f=!0,p=(e,t)=>{let n={...u,...t},p=!0,m,h=[],g=[],_=[],v=!1,y=!1,b=!1,x=!1,S=0,C=0,w,T=0,E=0,D=0,O=0,k=0,A=0,j=0,M,N=[],P,F,I=new Map;function L(e,t){I.set(e,[...I.get(e)||[],t])}function R(e){let t=s(g),n=s(_),r=t&&n?t/n:0,i={srcEvent:m,isPanRecognized:v,isSwipeRecognized:y,firstTouch:h,previousTouch:_,currentTouch:g,deltaX:T,deltaY:E,offsetX:D,offsetY:O,velocityX:k,velocityY:A,velocity:Math.abs(k)>Math.abs(A)?k:A,angle:j,axis:M,scale:r,center:w};for(let t of I.get(e)||[])t(i)}function z(e){let t=e.target,r=e.composedPath()[0],i=n.ignore.join(`,`),a=e=>e&&e instanceof HTMLElement&&(e.matches(i)||e.closest(i));if(a(t)||a(r))return!1}function B(e){let t=Date.now();if(N=N.filter(e=>!e.ts||e.ts>t-100),e&&N.push(e),k=0,A=0,N.length>3){let e=N[0],t=N[N.length-1];if(e&&t){let n=t.x-e.x,r=t.y-e.y,i=e.ts&&t.ts?t.ts-e.ts:0;i>0&&(k=Math.abs(n)>3?n/(i/30):0,A=Math.abs(r)>3?r/(i/30):0)}}}function V(e){if(!p||z(e)===!1)return;if(typeof MouseEvent<`u`&&e instanceof MouseEvent){if(d)return}else d=!0;if(typeof MouseEvent<`u`&&e instanceof MouseEvent){if(!e.buttons||e.button!==0)return;c(e)}e instanceof MouseEvent&&(window.addEventListener(`mousemove`,H),window.addEventListener(`mouseup`,U)),window.addEventListener(`blur`,W),m=e,g=i(e),h=[...g],_=[],C=g.length,w=o(g),C===1&&(v=!1,y=!1,b=!1),C&&B(o(g));let t=Date.now(),n=t-(S||t);x=n>0&&n<=250&&C===1,S=t,clearTimeout(P),R(`start`)}function H(e){if(!h.length||e.defaultPrevented||z(e)===!1)return;m=e,_=[...g],g=r(e);let t=o(_),i=o(r(e));if(B(i),C=g.length,w=i,_.length===g.length?(T=i.x-t.x,E=i.y-t.y):(T=0,E=0),h.length){let e=o(h);D=i.x-e.x,O=i.y-e.y}if(g.length>1){let e=s(g),t=s(_);Math.abs(e-t)>=.1&&(b=!0,R(`pinch`))}v||(v=Math.abs(D)>=n.panThreshold||Math.abs(O)>=n.panThreshold,v&&(f=!1,clearTimeout(F),F=void 0,j=Math.abs(Math.atan2(O,D)*180/Math.PI),M=j>45&&j<135?`y`:`x`,h=[...g],_=[...g],D=0,O=0,T=0,E=0,window.getSelection()?.removeAllRanges(),R(`panstart`))),v&&(T||E)&&R(`pan`),R(`move`)}function U(e){if(m=e,!h.length)return;let t=i(e),r=a(e);if(C=t.length,w=o(r),r.length&&B(o(r)),_=[...g],g=[...t],h=[...t],C>0)R(`end`),v=!1,y=!1,N=[];else{let e=n.swipeThreshold;(Math.abs(k)>e||Math.abs(A)>e)&&(y=!0),v&&R(`panend`),y&&R(`swipe`),!v&&!y&&!b&&(R(`tap`),x?R(`doubleTap`):P=setTimeout(function(){R(`singleTap`)},250)),R(`end`),G()}}function W(){clearTimeout(P),G(),v&&R(`panend`),R(`end`)}function G(){d=!1,v=!1,y=!1,x=!1,C=0,N=[],g=[],_=[],h=[],T=0,E=0,D=0,O=0,k=0,A=0,j=0,M=void 0,window.removeEventListener(`mousemove`,H),window.removeEventListener(`mouseup`,U),window.removeEventListener(`blur`,W),!f&&!F&&(F=setTimeout(()=>{f=!0,F=void 0},100))}function K(e){let t=e.target;d=!1,t&&!e.defaultPrevented&&(f||(c(e),e.stopPropagation()))}function q(){return e&&(e.addEventListener(`click`,K,l),e.addEventListener(`mousedown`,V,l),e.addEventListener(`touchstart`,V,l),e.addEventListener(`touchmove`,H,l),e.addEventListener(`touchend`,U),e.addEventListener(`touchcancel`,U)),J}let J={init:q,on:function(e,t){return L(e,t),J},off:function(e,t){return I.has(e)&&I.set(e,I.get(e).filter(e=>e!==t)),J},enable:function(){return p=!0,J},disable:function(){return p=!1,h.length&&(y=!1,k=0,A=0,T=0,E=0,R(`end`)),G(),J},isPointerDown:()=>C>0,destroy:function(){clearTimeout(P),clearTimeout(F),F=void 0,e&&(e.removeEventListener(`click`,K,l),e.removeEventListener(`mousedown`,V,l),e.removeEventListener(`touchstart`,V,l),e.removeEventListener(`touchmove`,H,l),e.removeEventListener(`touchend`,U),e.removeEventListener(`touchcancel`,U)),e=null,G()}};return J};p.isClickAllowed=()=>f,e.Gestures=p,e.getChangedPosition=a,e.getCurrentPosition=r,e.getDistance=s,e.getMidpoint=o,e.getTargetPosition=i,e.isTouchEvent=t});