@fancyapps/ui
Version:
Robust JavaScript UI Component Library
4 lines • 29.8 kB
JavaScript
!/*! License details at fancyapps.com/license */function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define(["exports"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self).window=e.window||{})}(this,function(e){"use strict";let t,n=e=>"object"==typeof e&&null!==e&&e.constructor===Object&&"[object Object]"===Object.prototype.toString.call(e),o=function(e="",t="",n=""){return e.split(t).join(n)},i=function(e){if(!(e&&e instanceof Element&&e.offsetParent))return!1;let t=e.scrollHeight>e.clientHeight,n=window.getComputedStyle(e).overflowY,o=-1!==n.indexOf("hidden"),i=-1!==n.indexOf("visible");return t&&!o&&!i},a=function(e,t){return!e||e===document.body||t&&e===t?null:i(e)?e:a(e.parentElement,t)},r=function(e){var t=new DOMParser().parseFromString(e,"text/html").body;if(t.childElementCount>1){for(var n=document.createElement("div");t.firstChild;)n.appendChild(t.firstChild);return n}let o=t.firstChild;if(o&&!(o instanceof HTMLElement)){var n=document.createElement("div");return n.appendChild(o),n}return o},l=function(e=0,t=0,n=0){return Math.max(Math.min(t,n),e)};function s(e){return n(e)||Array.isArray(e)}function c(e,t){let n=Object.keys(e),o=Object.keys(t);return n.length===o.length&&n.every(n=>{let o=e[n],i=t[n];return"function"==typeof o?`${o}`==`${i}`:s(o)&&s(i)?c(o,i):o===i})}let u=1/60*3e3,f=function(e){for(let t of x)t.getState()===d.Running&&t.tick(M?e-M:0);M=e,w=window.requestAnimationFrame(f)},d=((h={})[h.Initializing=0]="Initializing",h[h.Running=1]="Running",h[h.Paused=2]="Paused",h[h.Completed=3]="Completed",h[h.Destroyed=4]="Destroyed",h);var h,g,m,p,y,v=((g=v||{})[g.Spring=0]="Spring",g[g.Ease=1]="Ease",g);let b=((m={})[m.Loop=0]="Loop",m[m.Reverse=1]="Reverse",m),x=new Set,w=null,M=0;function E(){let e=d.Initializing,t=v.Ease,n=0,o=0,i=E.Easings.Linear,a=500,r=0,s=0,h=0,g=0,m=1/0,p=.01,y=.01,M=!1,T={},L=null,R={},S={},k={},z=0,A=0,C=b.Loop,O=E.Easings.Linear,I=new Map;function P(e,...t){for(let n of I.get(e)||[])n(...t)}function F(e){return o=0,e?L=setTimeout(()=>{Z()},e):Z(),Y}function Z(){e=d.Running,P("start",R,S)}function D(){if(e=d.Completed,k={},P("end",R),e===d.Completed)if(n<z){if(n++,C===b.Reverse){let e={...T};T={...S},S=e}F(A)}else n=0;return Y}let Y={getState:function(){return e},easing:function(e){return i=e,t=v.Ease,k={},Y},duration:function(e){return a=e,Y},spring:function(e={}){t=v.Spring;let{velocity:n,mass:o,tension:i,friction:a,restDelta:l,restSpeed:c,maxSpeed:u,clamp:f}={velocity:0,mass:1,tension:170,friction:26,restDelta:.1,restSpeed:.1,maxSpeed:1/0,clamp:!0,...e};return r=n,s=o,h=i,g=a,y=l,p=c,m=u,M=f,k={},Y},isRunning:function(){return e===d.Running},isSpring:function(){return t===v.Spring},from:function(e){return R={...e},Y},to:function(e){return S=e,Y},repeat:function(e,t=0,n=b.Loop,o){return z=e,A=t,C=n,O=o||i,Y},on:function(e,t){return I.set(e,[...I.get(e)||[],t]),Y},off:function(e,t){return I.has(e)&&I.set(e,I.get(e).filter(e=>e!==t)),Y},start:function(t){return e=d.Initializing,c(T={...R},S)||(x.add(this),w||(w=window.requestAnimationFrame(f)),F(t)),Y},pause:function(){return L&&(clearTimeout(L),L=null),e===d.Running&&(e=d.Paused,P("pause",R)),Y},end:D,tick:function(n){n>u&&(n=u),o+=n;let f=0,x=!1;if(e!==d.Running)return Y;if(t===v.Ease){x=1===(f=l(0,o/a,1));let e=C===b.Reverse?O:i;for(let t in R)R[t]=T[t]+(S[t]-T[t])*e(f)}if(t===v.Spring){let e=.001*n,t=0;for(let n in R){let o=S[n],i=R[n];if(!("number"==typeof o&&!isNaN(o))||!("number"==typeof i&&!isNaN(i)))continue;if(Math.abs(o-i)<=y){R[n]=o,k[n]=0;continue}k[n]||("object"==typeof r&&"number"==typeof r[n]?k[n]=r[n]:"number"==typeof r?k[n]=r:k[n]=0);let a=k[n],c=(a=l(-1*Math.abs(m),a,Math.abs(m)))*s*g,u=Math.abs(o-i)*h;a+=((i>o?-1:1)*u-c)/s*e,i+=a*e;let f=R[n]>o?i<o:i>o,d=Math.abs(a)<p&&Math.abs(o-i)<=y;M&&f&&(d=!0),d?(i=o,a=0):t++,R[n]=i,k[n]=a}x=!t}let w={...S};return P("step",R,T,S,f),x&&e===d.Running&&c(S,w)&&(e=d.Completed,D()),Y},getStartValues:function(){return T},getCurrentValues:function(){return R},getCurrentVelocities:function(){return k},getEndValues:function(){return S},destroy:function(){e=d.Destroyed,L&&(clearTimeout(L),L=null),T=R=S={},x.delete(this)}};return Y}function T(e){let t=[];for(let n of"undefined"!=typeof TouchEvent&&e instanceof TouchEvent?e.touches:e instanceof MouseEvent&&"mouseup"!==e.type?[e]:[])t.push({x:n.clientX,y:n.clientY,ts:Date.now()});return t}function L(e){let t=[];for(let n of"undefined"!=typeof TouchEvent&&e instanceof TouchEvent?e.changedTouches:e instanceof MouseEvent?[e]:[])t.push({x:n.clientX,y:n.clientY,ts:Date.now()});return t}function R(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?-1*Math.sqrt((n.x-t.x)*(n.x-t.x)+(n.y-t.y)*(n.y-t.y)):0}E.destroy=()=>{for(let e of x)e.destroy();w&&(cancelAnimationFrame(w),w=null)},E.Easings={Linear:function(e){return e},EaseIn:function(e){return 0===e?0:Math.pow(2,10*e-10)},EaseOut:function(e){return 1===e?1:1-Math.pow(2,-10*e)},EaseInOut:function(e){return 0===e?0:1===e?1:e<.5?Math.pow(2,20*e-10)/2:(2-Math.pow(2,-20*e+10))/2}};let k=e=>{e.cancelable&&e.preventDefault()},z={passive:!1},A={panThreshold:5,swipeThreshold:3,ignore:["textarea","input","select","[contenteditable]","[data-selectable]","[data-draggable]"]},C=!1,O=!0,I=(e,t)=>{let n,o,i,a={...A,...t},r=[],l=[],s=[],c=!1,u=!1,f=!1,d=0,h=0,g=0,m=0,p=0,y=0,v=0,b=0,x=0,w=[],M=0,E=0,I=new Map;function P(e){let t=S(l),a=S(s),f=Math.abs(v)>Math.abs(b)?v:b,d={srcEvent:i,isPanRecognized:c,isSwipeRecognized:u,firstTouch:r,previousTouch:s,currentTouch:l,deltaX:g,deltaY:m,offsetX:p,offsetY:y,velocityX:v,velocityY:b,velocity:f,angle:x,axis:o,scale:t&&a?t/a:0,center:n};for(let t of I.get(e)||[])t(d)}function F(e){let t=Date.now();w=w.filter(e=>!e.ts||e.ts>t-100),e&&w.push(e)}function Z(){if(v=0,b=0,w.length>3){let e=w[0],t=w[w.length-1];if(e&&t){let n=t.x-e.x,o=t.y-e.y,i=e.ts&&t.ts?t.ts-e.ts:0;i>0&&(v=Math.abs(n)>3?n/(i/30):0,b=Math.abs(o)>3?o/(i/30):0)}}}function D(e){if(e instanceof MouseEvent){if(C)return}else C=!0;let t=e.composedPath()[0],o=a.ignore.join(",");if(t.matches(o)||t.closest(o)||"undefined"!=typeof MouseEvent&&e instanceof MouseEvent&&(!e.buttons||0!==e.button))return;e instanceof MouseEvent&&k(e);let g=Date.now(),m=g-(d||g);f=m>0&&m<=250,d=g,clearTimeout(M),i=e,e instanceof MouseEvent&&(window.addEventListener("mousemove",Y),window.addEventListener("mouseup",X)),window.addEventListener("blur",_),r=[...l=T(e)],s=[],h=l.length,n=R(l),1===h&&(c=!1,u=!1),h&&F(R(l)),P("start")}function Y(e){if(!r.length||e.defaultPrevented)return;i=e,s=[...l],h=(l=T(e)).length;let t=n=R(l),u=R(s);if(g=t.x-u.x,m=t.y-u.y,F(t),Z(),P("move"),l.length>1&&Math.abs(S(l)-S(s))>=.1&&P("pinch"),!c&&r.length){let e=R(r);p=t.x-e.x,y=t.y-e.y,(c=Math.abs(p)>a.panThreshold||Math.abs(y)>a.panThreshold)&&(O=!1,clearTimeout(E),E=0,o=(x=Math.abs(180*Math.atan2(y,p)/Math.PI))>45&&x<135?"y":"x",r=[...l],s=[...l],window.getSelection()?.removeAllRanges(),P("panstart"))}c&&(g||m)&&P("pan")}function X(e){if(i=e,!r.length)return;let t=T(e),o=L(e);if(h=t.length,n=R(o),o.length&&F(R(o)),Z(),s=[...l],l=[...t],r=[...t],t.length>0)P("end"),c=!1,u=!1,w=[];else{let e=a.swipeThreshold;(Math.abs(v)>e||Math.abs(b)>e)&&(u=!0),c&&P("panend"),u&&P("swipe"),c||u||(P("tap"),f?P("doubleTap"):M=setTimeout(function(){P("singleTap")},250)),P("end"),$()}}function _(){clearTimeout(M),$(),c&&P("panend"),P("end")}function $(){c=!1,u=!1,f=!1,h=0,w=[],l=[],s=[],r=[],g=0,m=0,p=0,y=0,v=0,b=0,x=0,o=void 0,window.removeEventListener("mousemove",Y),window.removeEventListener("mouseup",X),window.removeEventListener("blur",_),O||E||(E=setTimeout(()=>{O=!0,E=0},100))}function H(e){let t=e.target;C=!1,t&&!e.defaultPrevented&&(O||(k(e),e.stopPropagation()))}let j={init:function(){if(e)return e.addEventListener("click",H,z),e.addEventListener("mousedown",D,z),e.addEventListener("touchstart",D,z),e.addEventListener("touchmove",Y,z),e.addEventListener("touchend",X),e.addEventListener("touchcancel",X),j},on:function(e,t){return I.set(e,[...I.get(e)||[],t]),j},off:function(e,t){return I.has(e)&&I.set(e,I.get(e).filter(e=>e!==t)),j},isPointerDown:()=>h>0,destroy:function(){clearTimeout(M),clearTimeout(E),E=0,e&&(e.removeEventListener("click",H,z),e.removeEventListener("mousedown",D,z),e.removeEventListener("touchstart",D,z),e.removeEventListener("touchmove",Y,z),e.removeEventListener("touchend",X),e.removeEventListener("touchcancel",X)),e=null,$()}};return j};I.isClickAllowed=()=>O;let P={IMAGE_ERROR:"This image couldn't be loaded. <br /> Please try again later.",MOVE_UP:"Move up",MOVE_DOWN:"Move down",MOVE_LEFT:"Move left",MOVE_RIGHT:"Move right",ZOOM_IN:"Zoom in",ZOOM_OUT:"Zoom out",TOGGLE_FULL:"Toggle zoom level",TOGGLE_1TO1:"Toggle zoom level",ITERATE_ZOOM:"Toggle zoom level",ROTATE_CCW:"Rotate counterclockwise",ROTATE_CW:"Rotate clockwise",FLIP_X:"Flip horizontally",FLIP_Y:"Flip vertically",RESET:"Reset"},F=(e,t="")=>{e&&e.classList&&t.split(" ").forEach(t=>{t&&e.classList.add(t)})},Z=1e4,D=e=>{e.cancelable&&e.preventDefault()},Y=(e,t=Z)=>Math.round(((e=parseFloat(e+"")||0)+Number.EPSILON)*t)/t,X=((p={}).Reset="reset",p.Zoom="zoom",p.ZoomIn="zoomIn",p.ZoomOut="zoomOut",p.ZoomTo="zoomTo",p.ToggleCover="toggleCover",p.ToggleFull="toggleFull",p.ToggleMax="toggleMax",p.IterateZoom="iterateZoom",p.Pan="pan",p.Swipe="swipe",p.Move="move",p.MoveLeft="moveLeft",p.MoveRight="moveRight",p.MoveUp="moveUp",p.MoveDown="moveDown",p.RotateCCW="rotateCCW",p.RotateCW="rotateCW",p.FlipX="flipX",p.FlipY="flipY",p),_={x:0,y:0,scale:1,angle:0,flipX:1,flipY:1},$=((y={})[y.Init=0]="Init",y[y.Loading=1]="Loading",y[y.Error=2]="Error",y[y.Ready=3]="Ready",y[y.Destroyed=4]="Destroyed",y),H={bounds:!0,classes:{container:"f-panzoom",wrapper:"f-panzoom__wrapper",content:"f-panzoom__content",viewport:"f-panzoom__viewport"},clickAction:X.ToggleFull,dblClickAction:!1,gestures:{},height:"auto",l10n:P,maxScale:4,minScale:1,mouseMoveFactor:1,panMode:"drag",protected:!1,singleClickAction:!1,spinnerTpl:'<div class="f-spinner"></div>',wheelAction:X.Zoom,width:"auto"},j=0,q=0,W=0,V=(e,n={},o={})=>{let i,s,c,u,f,d,h,g=$.Init,m={...H,...n},p={},y={..._},v={..._},b=[];function x(e){let t=m[e];return t&&"function"==typeof t?t(ed):t}let w=new Map;function M(e,...t){let n=w.get(e)||[];for(let o of(m.on&&n.push(m.on[e]),n))o&&o instanceof Function&&o(ed,...t);"*"!==e&&M("*",e,...t)}function T(e){if(g!==$.Ready||a(e.target))return;let t=Date.now(),n=l(-1,[-e.deltaX||0,-e.deltaY||0,-e.detail||0].reduce(function(e,t){return Math.abs(t)>Math.abs(e)?t:e}),1);M("wheel",e,n);let o=x("wheelAction");if(!o||e.defaultPrevented)return;let i=v.scale,r=i*(n>0?1.5:.5);if(o===X.Zoom){let o=100>Math.abs(e.deltaY)&&100>Math.abs(e.deltaX);if(t-q<(o?200:45))return void D(e);q=t;let a=N(),s=J();if(Y(r)<Y(a)&&Y(i)<=Y(a)?(W+=Math.abs(n),r=a):Y(r)>Y(s)&&Y(i)>=Y(s)?(W+=Math.abs(n),r=s):(W=0,r=l(a,r,s)),W>7)return}switch(D(e),o){case X.Pan:et(o,{srcEvent:e,deltaX:-(2*e.deltaX),deltaY:-(2*e.deltaY)});break;case X.Zoom:et(X.ZoomTo,{srcEvent:e,scale:r,center:{x:e.clientX,y:e.clientY}});break;default:et(o,{srcEvent:e})}}function S(n){let o=n.composedPath()[0];if(!I.isClickAllowed()||!(o&&null!==o&&o instanceof Element&&"nodeType"in o)||n.defaultPrevented||!e?.contains(o)||o.hasAttribute("disabled")||o.hasAttribute("aria-disabled"))return;let a=o.closest("[data-panzoom-action]"),r=a?.dataset?.panzoomAction,l=a?.dataset?.panzoomValue||"";if(r){switch(r){case X.ZoomTo:case X.ZoomIn:case X.ZoomOut:et(r,{scale:parseFloat(l||"")||void 0});break;case X.MoveLeft:case X.MoveRight:et(r,{deltaX:parseFloat(l||"")||void 0});break;case X.MoveUp:case X.MoveDown:et(r,{deltaY:parseFloat(l||"")||void 0});break;default:et(r)}return}if(!i?.contains(o))return;let s={srcEvent:n};if(et(x("clickAction"),s),x("dblClickAction")){let e=Date.now(),n=e-(j||e);j=e,n>0&&n<=250?(t&&(clearTimeout(t),t=void 0),et(x("dblClickAction"),s)):t=setTimeout(()=>{et(x("singleClickAction"),s)},250)}}function k(e){if(h=e,!O()||g!==$.Ready||y.scale<=1||v.scale<=1||(i?.dataset.animationName||"").indexOf("zoom")>-1)return;let t=P(v.scale);if(!t)return;let{x:n,y:o}=t;et(X.Pan,{deltaX:n-v.x,deltaY:o-v.y})}function z(){if(e&&(e.querySelector(".f-spinner")?.remove(),e.classList.remove("is-loading")),!e||!i)return;if(s instanceof HTMLImageElement&&!(s.complete&&s.naturalWidth)){g=$.Error,i?.classList.add("has-error"),M("error");return}M("loaded");let{width:t,height:n}=C();s&&(s.setAttribute("width",t+""),s.setAttribute("height",n+"")),i&&(i.classList.remove("has-error"),i.setAttribute("width",t+""),i.setAttribute("height",n+""),i.style.aspectRatio=`${t/n||""}`),f=E().on("start",(e,t)=>{v={..._,...t},void 0!==t.angle&&(t.angle=90*Math.round(t.angle/90)),void 0!==t.flipX&&(t.flipX=t.flipX>0?1:-1),void 0!==t.flipY&&(t.flipY=t.flipY>0?1:-1),ee(),M("animationStart")}).on("pause",e=>{v={..._,...e}}).on("step",t=>{if(g!==$.Ready||!f)return;if(!e||!e.parentElement)return void f.end();if(y={..._,...t},O()||!x("bounds")||u?.isPointerDown()||v.scale>y.scale||v.scale<G())return void en();let n=K(v.scale),o=!1,i=!1,a=!1,r=!1;y.x<n.x[0]&&(o=!0),y.x>n.x[1]&&(i=!0),y.y<n.y[0]&&(r=!0),y.y>n.y[1]&&(a=!0);let s=!1,c=!1,d=!1,h=!1;v.x<n.x[0]&&(s=!0),v.x>n.x[1]&&(c=!0),v.y<n.y[0]&&(h=!0),v.y>n.y[1]&&(d=!0);let m=!1;(i&&c||o&&s)&&(v.x=l(n.x[0],v.x,n.x[1]),m=!0),(a&&d||r&&h)&&(v.y=l(n.y[0],v.y,n.y[1]),m=!0),m&&f.spring({tension:94,friction:17,maxSpeed:555*v.scale,restDelta:.1,restSpeed:.1,velocity:f.getCurrentVelocities()}).from(y).to(v).start(),en()}).on("end",()=>{Q(),f?.isRunning()||(ee(),M("animationEnd"))}),function(){let e=x("gestures");e&&c&&s&&(u=I(c,e).on("start",e=>{if(!f)return;let t=e.srcEvent;O()||((y.scale>1||e.currentTouch.length>1)&&(t?.stopPropagation(),f.pause()),1===e.currentTouch.length&&M("touchStart"))}).on("move",e=>{!O()&&(1!==v.scale||e.currentTouch.length>1)&&(e.srcEvent.preventDefault(),e.srcEvent.stopPropagation())}).on("pan",e=>{if(O())return;let t=e.srcEvent;(1!==v.scale||e.currentTouch.length>1)&&(D(t),et(X.Pan,e))}).on("swipe",e=>{!O()&&v.scale>1&&et(X.Swipe,e)}).on("tap",e=>{M("click",e)}).on("singleTap",e=>{M("singleClick",e)}).on("doubleTap",e=>{M("dblClick",e)}).on("pinch",e=>{O()||(e.scale>G()?et(X.ZoomIn,e):e.scale<G()?et(X.ZoomOut,e):et(X.Pan,e))}).on("end",e=>{O()||(e.currentTouch.length?(e.srcEvent.stopPropagation(),D(e.srcEvent),f?.end()):(ee(),Q(),M("touchEnd")))}).init())}(),c&&(c.addEventListener("wheel",T,{passive:!1}),b.push(()=>{c?.removeEventListener("wheel",T,{passive:!1})})),e?.addEventListener("click",S),document?.addEventListener("mousemove",k),b.push(()=>{e?.removeEventListener("click",S),document?.removeEventListener("mousemove",k)});let o={...x("startPos")||{},...{scale:G()}};if(y={..._,...o},v={..._,...o},O()){let e=P(v.scale);if(e){let{x:t,y:n}=e;y.x=t,y.y=n,v.x=t,v.y=n}}g=$.Ready,en(),ee(),M("ready"),requestAnimationFrame(()=>{c&&(c.style.visibility="")})}function A(){let e={top:0,left:0,width:0,height:0};if(i){let t=i.getBoundingClientRect();v.angle%180==90?(e.top=t.top+.5*t.height-.5*t.width,e.left=t.left+.5*t.width-.5*t.height,e.width=t.height,e.height=t.width):(e.top=t.top,e.left=t.left,e.width=t.width,e.height=t.height)}return e}function C(){let e=x("width"),t=x("height");if(s&&"auto"===e){let t=s.getAttribute("width");e=t?parseFloat(t+""):void 0!==s.dataset.width?parseFloat(s.dataset.width+""):c instanceof HTMLImageElement?c.naturalWidth:s instanceof HTMLImageElement?s.naturalWidth:s.getBoundingClientRect().width}else e="string"==typeof e?parseFloat(e):e;if(s&&"auto"===t){let e=s.getAttribute("height");t=e?parseFloat(e+""):void 0!==s.dataset.height?parseFloat(s.dataset.height+""):c instanceof HTMLImageElement?c.naturalHeight:s instanceof HTMLImageElement?s.naturalHeight:s.getBoundingClientRect().height}else t="string"==typeof t?parseFloat(t):t;return{width:e,height:t}}function O(){return"mousemove"===x("panMode")&&matchMedia("(hover: hover)").matches}function P(e){let t=h||x("event"),n=i?.getBoundingClientRect();if(!t||!n||e<=1)return{x:0,y:0};let o=(t.clientX||0)-n.left,a=(t.clientY||0)-n.top,r=n.width,s=n.height,c=K(e);if(e>1){let t=x("mouseMoveFactor");t>1&&(e*=t)}let u=r*e,f=s*e,d=(u-r)*.5-o/r*100/100*(u-r),g=(f-s)*.5-a/s*100/100*(f-s);return{x:d=l(c.x[0],d,c.x[1]),y:g=l(c.y[0],g,c.y[1])}}function V(t="base"){if(!e)return 1;let n=e.getBoundingClientRect(),o=A(),{width:i,height:a}=C(),r=e=>{if("number"==typeof e)return e;switch(e){case"min":case"base":return 1;case"cover":return Math.max(n.height/o.height,n.width/o.width)||1;case"full":case"max":{let e=v.angle%180==90?a:i;return e&&o.width?e/o.width:1}}},s=x("minScale"),c=x("maxScale"),u=Math.min(r("full"),r(s)),f="number"==typeof c?r("full")*c:Math.min(r("full"),r(c));switch(t){case"min":return u;case"base":return l(u,1,f);case"cover":return r("cover");case"full":return Math.min(f,r("full"));case"max":return f}}function N(){return V("min")}function G(){return V("base")}function U(){return V("cover")}function B(){return V("full")}function J(){return V("max")}function K(t){let n={x:[0,0],y:[0,0]},o=e?.getBoundingClientRect();if(!o)return n;let i=A(),a=o.width,r=o.height,l=i.width,s=i.height,c=t=void 0===t?v.scale:t,u=t;if(O()&&t>1){let e=x("mouseMoveFactor");e>1&&(l*t>a+.01&&(c*=e),s*t>r+.01&&(u*=e))}return l*=c,s*=u,t>1&&(l>a&&(n.x[0]=(a-l)*.5,n.x[1]=(l-a)*.5),n.x[0]-=(i.left-o.left)*.5,n.x[1]-=(i.left-o.left)*.5,n.x[0]-=(i.left+i.width-o.right)*.5,n.x[1]-=(i.left+i.width-o.right)*.5,s>r&&(n.y[0]=(r-s)*.5,n.y[1]=(s-r)*.5),n.y[0]-=(i.top-o.top)*.5,n.y[1]-=(i.top-o.top)*.5,n.y[0]-=(i.top+i.height-o.bottom)*.5,n.y[1]-=(i.top+i.height-o.bottom)*.5),n}function Q(){if(!x("bounds")||g!==$.Ready||!e?.parentElement||!f||!u)return;let t=N(),n=J(),o=l(t,v.scale,n);if(v.scale<t-.01||v.scale>n+.01)return void et(X.ZoomTo,{scale:o});if(f.isRunning()||u.isPointerDown())return;let i=K(o);v.x<i.x[0]||v.x>i.x[1]||v.y<i.y[0]||v.y>i.y[1]?(v.x=l(i.x[0],v.x,i.x[1]),v.y=l(i.y[0],v.y,i.y[1]),f.spring({tension:170,friction:17,restDelta:.001,restSpeed:.001,maxSpeed:1/0,velocity:f.getCurrentVelocities()}),f.from(y).to(v).start()):en()}function ee(){if(!e||!e.parentElement||!i)return;let t=es(),n=ec(),o=eu(),a=ef(),r=ei(),l=ea();i.classList.toggle("is-fullsize",a),i.classList.toggle("is-expanded",o),i.classList.toggle("is-dragging",n),i.classList.toggle("can-drag",t),i.classList.toggle("will-zoom-in",r),i.classList.toggle("will-zoom-out",l);let s=er(),c=el(),u=g!==$.Ready;for(let t of e?.querySelectorAll("[data-panzoom-action]")||[]){let e=t.dataset.panzoomAction,n=!1;if(u)n=!0;else switch(e){case X.ZoomIn:s||(n=!0);break;case X.ZoomOut:c||(n=!0);break;case X.ToggleFull:s||c||(n=!0);let o=t.querySelector("g");o&&(o.style.display=a?"none":"");break;case X.ToggleCover:case X.ToggleMax:s||c||(n=!0)}n?(t.setAttribute("aria-disabled",""),t.setAttribute("tabindex","-1")):(t.removeAttribute("aria-disabled"),t.removeAttribute("tabindex"))}}function et(t,n){if(!e||!s||!f||t===X.Swipe&&Math.abs(f.getCurrentVelocities().scale)>.01)return;let o={...v},i=K(O()?v.scale:y.scale),a=f.getCurrentVelocities(),r=A();n=n||{};let c=(n.currentTouch?.length||0)>1,d=n.velocityX||0,h=n.velocityY||0,g=n.center;!g&&n.srcEvent&&(g=R(L(n.srcEvent)));let m=n.deltaX||0,p=n.deltaY||0;switch(t){case X.MoveRight:m=n.deltaX||100;break;case X.MoveLeft:m=n.deltaX||-100;break;case X.MoveUp:p=n.deltaY||-100;break;case X.MoveDown:p=n.deltaY||100}let b=[];switch(t){case X.Reset:(v={..._}).scale=G();break;case X.Pan:case X.Move:case X.MoveLeft:case X.MoveRight:case X.MoveUp:case X.MoveDown:if(u?.isPointerDown()){let e=1,t=1;v.x<=i.x[0]&&d<=0&&(e=.2*Math.max(.01,1-Math.abs(1/r.width*Math.abs(v.x-i.x[0])))),v.x>=i.x[1]&&d>=0&&(e=.2*Math.max(.01,1-Math.abs(1/r.width*Math.abs(v.x-i.x[1])))),v.y<=i.y[0]&&h<=0&&(t=.2*Math.max(.01,1-Math.abs(1/r.height*Math.abs(v.y-i.y[0])))),v.y>=i.y[1]&&h>=0&&(t=.2*Math.max(.01,1-Math.abs(1/r.height*Math.abs(v.y-i.y[1])))),v.x+=m*e,v.y+=p*t}else v.x=l(i.x[0],v.x+m,i.x[1]),v.y=l(i.y[0],v.y+p,i.y[1]);break;case X.Swipe:let w=(e=0)=>Math.sign(e)*Math.pow(Math.abs(e),1.5);v.x+=l(-1e3,w(d),1e3),v.y+=l(-1e3,w(h),1e3),h&&!d&&(v.x=l(i.x[0],v.x,i.x[1])),!h&&d&&(v.y=l(i.y[0],v.y,i.y[1])),a.x=d,a.y=h;break;case X.ZoomTo:v.scale=n.scale||1;break;case X.ZoomIn:v.scale=v.scale*(n.scale||2),c||(v.scale=Math.min(v.scale,J()));break;case X.ZoomOut:v.scale=v.scale*(n.scale||.5),c||(v.scale=Math.max(v.scale,N()));break;case X.ToggleCover:b=[G(),U()];break;case X.ToggleFull:b=[G(),B()];break;case X.ToggleMax:b=[G(),J()];break;case X.IterateZoom:b=[G(),B(),J()];break;case X.Zoom:let E=B();v.scale>=E-.05?v.scale=G():v.scale=Math.min(E,v.scale*(n.scale||2));break;case X.RotateCW:v.angle+=90;break;case X.RotateCCW:v.angle-=90;break;case X.FlipX:v.flipX*=-1;break;case X.FlipY:v.flipY*=-1}if(void 0!==y.angle&&Math.abs(y.angle)>=360&&(v.angle-=360*Math.floor(y.angle/360),y.angle-=360*Math.floor(y.angle/360)),b.length){let e=b.findIndex(e=>e>v.scale+1/Z);v.scale=b[e]||b[0]}if(c&&(v.scale=l(N()*(c?.8:1),v.scale,J()*(c?1.6:1))),O()){let e=P(v.scale);if(e){let{x:t,y:n}=e;v.x=t,v.y=n}}else if(v.scale!==o.scale){let t=0,n=0;if(g)t=g.x,n=g.y;else{let o=e.getBoundingClientRect();t=o.x+.5*o.width,n=o.y+.5*o.height}let a=t-r.left,s=n-r.top;a-=.5*r.width,s-=.5*r.height;let u=(a-o.x)/o.scale,f=(s-o.y)/o.scale;v.x=a-u*v.scale,v.y=s-f*v.scale,!c&&x("bounds")&&(i=K(v.scale),v.x=l(i.x[0],v.x,i.x[1]),v.y=l(i.y[0],v.y,i.y[1]))}if(t===X.Swipe){let e=500*v.scale;f.spring({tension:94,friction:17,maxSpeed:e,restDelta:.1,restSpeed:.1,velocity:a})}else t===X.Pan||c?f.spring({tension:750,friction:17,restDelta:.01,restSpeed:.01,maxSpeed:1}):f.spring({tension:170,friction:17,restDelta:.001,restSpeed:.001,maxSpeed:1/0,velocity:a});t===X.Reset&&0===n.velocity?y={...v}:f.from(y).to(v).start(),M("action",t)}function en(){if(!i||!s)return;if(s instanceof HTMLImageElement){let{width:e,height:t}=C();i.style.maxWidth=`min(${e}px, 100%)`,i.style.maxHeight=`min(${t}px, 100%)`}let{x:t,y:n,scale:o,angle:a,flipX:r,flipY:l}=y,u=`translate3d(${t}px, ${n}px, 0)`;1!==r||1!==l?u+=` scaleX(${o*r}) scaleY(${o*l})`:1!==o&&(u+=` scale(${o})`),a%360!=0&&(u+=` rotate(${a}deg)`);let f=function(){let t=A(),n=t.width,o=t.height,{width:i,height:a}=C();if(!e)return{x:0,y:0,width:0,height:0,scale:0,flipX:0,flipY:0,angle:0,fitWidth:n,fitHeight:o,fullWidth:i,fullHeight:a};let{x:r,y:l,scale:s,angle:c,flipX:u,flipY:f}=y,d=1/B(),h=i,g=a,m=y.scale*d,p=v.scale*d,b=Math.max(n,o),x=Math.min(n,o);i>a?(h=b,g=x):(h=x,g=b),m=i>a?b*s/i||1:b*s/a||1;let w=h?i*p:0,M=g?a*p:0,E=h&&g?i*m/w:0;return{x:r=r+.5*h-.5*w,y:l=l+.5*g-.5*M,width:w,height:M,scale:E,flipX:u,flipY:f,angle:c,fitWidth:n,fitHeight:o,fullWidth:i,fullHeight:a}}();if(i&&f){let{x:e,y:t,width:n,height:o,scale:i,flipX:r,flipY:l}=f,s=`translate(${Y(e)}px, ${Y(t)}px)`;1!==r||1!==l?s+=` scaleX(${Y(i*r)}) scaleY(${Y(i*l)})`:s+=` scale(${Y(i)})`,0!==a&&(s+=` rotate(${a}deg)`),c&&(c.style.width=`${Y(n)}px`,c.style.height=`${Y(o)}px`,c.style.transform=`${s}`)}M("render")}function eo(){let e=v.scale,t=void 0,n=x("clickAction"),o=G();if(n){let i=[];switch(n){case X.ZoomIn:o=e*(t||2);break;case X.ZoomOut:o=e*(t||.5);break;case X.ToggleCover:i=[G(),U()];break;case X.ToggleFull:i=[G(),B()];break;case X.ToggleMax:i=[G(),J()];break;case X.IterateZoom:i=[G(),B(),J()];break;case X.Zoom:let a=B();o=e>=a-.05?G():Math.min(a,e*(t||2))}if(i.length){let t=i.findIndex(t=>t>e+1/Z);o=i[t]||G()}}return l(N(),o,J())}function ei(){return g===$.Ready&&eo()>v.scale}function ea(){return g===$.Ready&&eo()<v.scale}function er(){return g===$.Ready&&v.scale<J()}function el(){return g===$.Ready&&v.scale>N()}function es(){return g===$.Ready&&eu()&&!!u&&!O()}function ec(){return g===$.Ready&&u?.isPointerDown()&&!O()}function eu(){return g===$.Ready&&v.scale>G()}function ef(){return g===$.Ready&&v.scale>=B()}let ed={canDrag:es,canZoomIn:er,canZoomOut:el,destroy:function(){for(let e of(M("destroy"),Object.values(p)))e?.destroy(ed);for(let e of b)e();return i&&(i.style.aspectRatio="",i.style.maxWidth="",i.style.maxHeight=""),c&&(c.style.width="",c.style.height="",c.style.transform=""),i=void 0,s=void 0,c=void 0,y={..._},v={..._},f?.destroy(),f=void 0,u?.destroy(),u=void 0,g=$.Destroyed,ed},emit:M,execute:et,getBoundaries:K,getContainer:function(){return e},getFullDim:C,getGestures:function(){return u},getMousemovePos:P,getOptions:function(){return m},getScale:V,getState:function(){return g},getTransform:function(e){return!0===e?v:y},getTween:function(){return f},getViewport:function(){return c},getWrapper:function(){return i},init:function(){return g=$.Init,M("init"),function(){for(let[e,t]of Object.entries({...o,...m.plugins||{}}))if(e&&!p[e]&&t instanceof Function){let n=t();n.init(ed),p[e]=n}M("initPlugins")}(),function(){if(!e)return;let t={...H.classes,...x("classes")};if((F(e,t.container),s=e.querySelector("."+t.content))&&(s.setAttribute("draggable","false"),(i=e.querySelector("."+t.wrapper))||(F(i=document.createElement("div"),t.wrapper),s.insertAdjacentElement("beforebegin",i),i.insertAdjacentElement("afterbegin",s)),s instanceof HTMLImageElement||s instanceof HTMLPictureElement)){if(!(c=e.querySelector("."+t.viewport))){F(c=document.createElement("div"),t.viewport);let e=s.cloneNode(!0);e.classList.remove("is-lazyloading"),e.classList.remove("is-lazyloaded"),c.insertAdjacentElement("afterbegin",e),i.insertAdjacentElement("beforeend",c)}if(s instanceof HTMLPictureElement&&(s=s.querySelector("img")),c instanceof HTMLPictureElement&&(c=c.querySelector("img")),c.style.visibility="hidden",x("protected")){c.addEventListener("contextmenu",e=>{e.preventDefault()});let e=document.createElement("div");F(e,"f-panzoom__protected"),c.appendChild(e)}M("initLayout")}}(),function(){if(!(s&&s instanceof HTMLImageElement))return;let t=()=>{s&&s instanceof HTMLImageElement&&s.decode().then(()=>{requestAnimationFrame(()=>{z()})}).catch(()=>{z()})};if(s.src&&s.complete)return t();g=$.Loading,function(){let t=e?.querySelector(".f-spinner");if(!e||t)return;let n=r(x("spinnerTpl"));n&&(n.classList.add("f-spinner"),e.classList.add("is-loading"),i?.insertAdjacentElement("afterbegin",n))}(),M("loading"),s.addEventListener("load",t,!1),s.addEventListener("error",t,!1),b.push(()=>{s?.removeEventListener("load",t,!1),s?.removeEventListener("error",t,!1)})}(),function(){if(e&&!d){let t=null;(d=new ResizeObserver(()=>{t||(t=requestAnimationFrame(()=>{e&&e.parentElement&&g===$.Ready&&(ee(),Q(),M("refresh")),t=null}))})).observe(e),b.push(()=>{d?.disconnect(),d=void 0,t&&(cancelAnimationFrame(t),t=null)})}}(),ed},isDragging:ec,isExpanded:eu,isFullsize:ef,localize:function(e,t=[]){let n=x("l10n")||{};e=String(e).replace(/\{\{(\w+)\}\}/g,(e,t)=>n[t]||e);for(let n=0;n<t.length;n++)e=e.split(t[n][0]).join(t[n][1]);return e=e.replace(/\{\{(.*?)\}\}/g,(e,t)=>t)},off:function(e,t){for(let n of e instanceof Array?e:[e])w.has(n)&&w.set(n,w.get(n).filter(e=>e!==t));return ed},on:function(e,t){for(let n of e instanceof Array?e:[e])w.set(n,[...w.get(n)||[],t]);return ed},version:"6.0.12",willZoomIn:ei,willZoomOut:ea};return ed};V.l10n={en_EN:P},V.getDefaults=()=>H;let N={tpl:e=>`<img class="f-panzoom__content"
${e.srcset?'data-lazy-srcset="{{srcset}}"':""}
${e.sizes?'data-lazy-sizes="{{sizes}}"':""}
data-lazy-src="{{src}}" alt="{{alt}}" />`};e.Zoomable=()=>{let e;function t(t,o){let i=e?.getOptions().Zoomable,a=(n(i)?{...N,...i}:N)[t];return a&&"function"==typeof a&&o?a(o):a}function i(){e&&(e.on("addSlide",l),e.on("removeSlide",s),e.on("attachSlideEl",c),e.on("click",r),e.on("change",a))}function a(){u()}function r(e,t){let n=t.target;n&&!t.defaultPrevented&&n.dataset.panzoomAction&&f(n.dataset.panzoomAction)}function l(n,i){if(!e)return;let a=i.el;if(!a)return;let r=i.src||i.lazySrc||"",l=i.srcset||i.lazySrcset||"",s=i.sizes||i.lazySizes||"";if(r&&"string"==typeof r&&!i.html&&(!i.type||"image"===i.type)){i.type="image";let e=t("tpl",i);e=o(e,"{{src}}",r+""),e=o(e,"{{srcset}}",l+""),e=o(e,"{{sizes}}",s+""),e=o(e,"{{alt}}",`${i.alt||i.caption||`Image #${i.index}`}`),a.insertAdjacentHTML("afterbegin",e)}if(!a.querySelector(".f-panzoom__content"))return;let c=V(a,{width:i.width&&"auto"!==i.width?parseFloat(i.width+""):"auto",height:i.height&&"auto"!==i.height?parseFloat(i.height+""):"auto",event:()=>e?.getLastMouseMove(),classes:{container:"f-zoomable"},...t("Panzoom")});c.on("*",(t,n,...o)=>{e&&("loading"===n&&(i.state=0),"loaded"===n&&(i.state=1),"error"===n&&(i.state=2,e?.showError(i,"{{IMAGE_ERROR}}")),e.emit(`panzoom:${n}`,i,...o),"ready"===n&&e.emit("contentReady",i),i.index===e.getPageIndex()&&u())}),i.panzoomRef=c}function s(e,t){t.panzoomRef&&(t.panzoomRef.destroy(),t.panzoomRef=void 0)}function c(e,t){let n=t.panzoomRef;if(n)switch(n.getState()){case $.Init:n.init();break;case $.Ready:n.execute(X.Reset,{velocity:0})}}function u(){let t=e?.getContainer();if(!t)return;let n=e?.getPage()?.slides[0].panzoomRef,o=n?.canZoomIn()||!1,i=n?.canZoomOut()||!1,a=n?.isFullsize()||!1,r=!n||n?.getState()!==$.Ready;for(let e of t?.querySelectorAll("[data-panzoom-action]")||[]){let t=e.dataset.panzoomAction,n=!1;if(r)n=!0;else switch(t){case X.ZoomIn:o||(n=!0);break;case X.ZoomOut:i||(n=!0);break;case X.ToggleFull:o||i||(n=!0);let l=e.querySelector("g");l&&(l.style.display=a?"none":"");break;case X.ToggleCover:case X.ToggleMax:o||i||(n=!0)}n?(e.setAttribute("aria-disabled",""),e.setAttribute("tabindex","-1")):(e.removeAttribute("aria-disabled"),e.removeAttribute("tabindex"))}}function f(t,...n){e?.getPage().slides[0].panzoomRef?.execute(t,...n)}return{init:function(t){!1!==(e=t).getOptions().Zoomable&&e.on("initPlugins",i)},destroy:function(){if(e)for(let t of(e.off("addSlide",l),e.off("removeSlide",s),e.off("attachSlideEl",c),e.off("change",a),e.getSlides()))s(e,t);e=void 0},execute:f}}});