UNPKG

@fancyapps/ui

Version:

Robust JavaScript UI Component Library

4 lines 29.6 kB
!/*! 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=e=>"string"==typeof e,i=function(e="",t="",n=""){return e.split(t).join(n)},a=e=>e&&null!==e&&e instanceof Element&&"nodeType"in e,r=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},l=function(e,t){return!e||e===document.body||t&&e===t?null:r(e)?e:l(e.parentElement,t)},s=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},c=function(e=0,t=0,n=0){return Math.max(Math.min(t,n),e)};function u(e){return n(e)||Array.isArray(e)}function f(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}`:u(o)&&u(i)?f(o,i):o===i})}let d=1/60*3e3,h=function(e){for(let t of M)t.getState()===g.Running&&t.tick(T?e-T:0);T=e,E=window.requestAnimationFrame(h)},g=((m={})[m.Initializing=0]="Initializing",m[m.Running=1]="Running",m[m.Paused=2]="Paused",m[m.Completed=3]="Completed",m[m.Destroyed=4]="Destroyed",m);var m,p,y,v,b,x=((p=x||{})[p.Spring=0]="Spring",p[p.Ease=1]="Ease",p);let w=((y={})[y.Loop=0]="Loop",y[y.Reverse=1]="Reverse",y),M=new Set,E=null,T=0;function L(){let e=g.Initializing,t=x.Ease,n=0,o=0,i=L.Easings.Linear,a=500,r=0,l=0,s=0,u=0,m=1/0,p=.01,y=.01,v=!1,b={},T=null,R={},S={},k={},A=0,z=0,C=w.Loop,O=L.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?T=setTimeout(()=>{Z()},e):Z(),Y}function Z(){e=g.Running,P("start",R,S)}function D(){if(e=g.Completed,k={},P("end",R),e===g.Completed)if(n<A){if(n++,C===w.Reverse){let e={...b};b={...S},S=e}F(z)}else n=0;return Y}let Y={getState:function(){return e},easing:function(e){return i=e,t=x.Ease,k={},Y},duration:function(e){return a=e,Y},spring:function(e={}){t=x.Spring;let{velocity:n,mass:o,tension:i,friction:a,restDelta:c,restSpeed:f,maxSpeed:d,clamp:h}={velocity:0,mass:1,tension:170,friction:26,restDelta:.1,restSpeed:.1,maxSpeed:1/0,clamp:!0,...e};return r=n,l=o,s=i,u=a,y=c,p=f,m=d,v=h,k={},Y},isRunning:function(){return e===g.Running},isSpring:function(){return t===x.Spring},from:function(e){return R={...e},Y},to:function(e){return S=e,Y},repeat:function(e,t=0,n=w.Loop,o){return A=e,z=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=g.Initializing,f(b={...R},S)||(M.add(this),E||(E=window.requestAnimationFrame(h)),F(t)),Y},pause:function(){return T&&(clearTimeout(T),T=null),e===g.Running&&(e=g.Paused,P("pause",R)),Y},end:D,tick:function(n){n>d&&(n=d),o+=n;let h=0,M=!1;if(e!==g.Running)return Y;if(t===x.Ease){M=1===(h=c(0,o/a,1));let e=C===w.Reverse?O:i;for(let t in R)R[t]=b[t]+(S[t]-b[t])*e(h)}if(t===x.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],f=(a=c(-1*Math.abs(m),a,Math.abs(m)))*l*u,d=Math.abs(o-i)*s;a+=((i>o?-1:1)*d-f)/l*e,i+=a*e;let h=R[n]>o?i<o:i>o,g=Math.abs(a)<p&&Math.abs(o-i)<=y;v&&h&&(g=!0),g?(i=o,a=0):t++,R[n]=i,k[n]=a}M=!t}let E={...S};return P("step",R,b,S,h),M&&e===g.Running&&f(S,E)&&(e=g.Completed,D()),Y},getStartValues:function(){return b},getCurrentValues:function(){return R},getCurrentVelocities:function(){return k},getEndValues:function(){return S},destroy:function(){e=g.Destroyed,T&&(clearTimeout(T),T=null),b=R=S={},M.delete(this)}};return Y}function R(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 S(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 k(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 A(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}L.destroy=()=>{for(let e of M)e.destroy();E&&(cancelAnimationFrame(E),E=null)},L.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 z=e=>{e.cancelable&&e.preventDefault()},C={passive:!1},O={panThreshold:5,swipeThreshold:3,ignore:["textarea","input","select","[contenteditable]","[data-selectable]","[data-draggable]"]},I=!1,P=!0,F=(e,t)=>{let n,o,i,a={...O,...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,T=new Map;function L(e){let t=A(l),a=A(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 T.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(I)return}else I=!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&&z(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=R(e)],s=[],h=l.length,n=k(l),1===h&&(c=!1,u=!1),h&&F(k(l)),L("start")}function Y(e){if(!r.length||e.defaultPrevented)return;i=e,s=[...l],h=(l=R(e)).length;let t=n=k(l),u=k(s);if(g=t.x-u.x,m=t.y-u.y,F(t),Z(),L("move"),l.length>1&&Math.abs(A(l)-A(s))>=.1&&L("pinch"),!c&&r.length){let e=k(r);p=t.x-e.x,y=t.y-e.y,(c=Math.abs(p)>a.panThreshold||Math.abs(y)>a.panThreshold)&&(P=!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(),L("panstart"))}c&&(g||m)&&L("pan")}function X(e){if(i=e,!r.length)return;let t=R(e),o=S(e);if(h=t.length,n=k(o),o.length&&F(k(o)),Z(),s=[...l],l=[...t],r=[...t],t.length>0)L("end"),c=!1,u=!1,w=[];else{let e=a.swipeThreshold;(Math.abs(v)>e||Math.abs(b)>e)&&(u=!0),c&&L("panend"),u&&L("swipe"),c||u||(L("tap"),f?L("doubleTap"):M=setTimeout(function(){L("singleTap")},250)),L("end"),_()}}function $(){clearTimeout(M),_(),c&&L("panend"),L("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",$),P||E||(E=setTimeout(()=>{P=!0,E=0},100))}function H(e){let t=e.target;I=!1,t&&!e.defaultPrevented&&(P||(z(e),e.stopPropagation()))}let j={init:function(){if(e)return e.addEventListener("click",H,C),e.addEventListener("mousedown",D,C),e.addEventListener("touchstart",D,C),e.addEventListener("touchmove",Y,C),e.addEventListener("touchend",X),e.addEventListener("touchcancel",X),j},on:function(e,t){return T.set(e,[...T.get(e)||[],t]),j},off:function(e,t){return T.has(e)&&T.set(e,T.get(e).filter(e=>e!==t)),j},isPointerDown:()=>h>0,destroy:function(){clearTimeout(M),clearTimeout(E),E=0,e&&(e.removeEventListener("click",H,C),e.removeEventListener("mousedown",D,C),e.removeEventListener("touchstart",D,C),e.removeEventListener("touchmove",Y,C),e.removeEventListener("touchend",X),e.removeEventListener("touchcancel",X)),e=null,_()}};return j};F.isClickAllowed=()=>P;let Z={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"},D=(e,t="")=>{e&&e.classList&&t.split(" ").forEach(t=>{t&&e.classList.add(t)})},Y=1e4,X=e=>{e.cancelable&&e.preventDefault()},$=(e,t=Y)=>Math.round(((e=parseFloat(e+"")||0)+Number.EPSILON)*t)/t,_=((v={}).Reset="reset",v.Zoom="zoom",v.ZoomIn="zoomIn",v.ZoomOut="zoomOut",v.ZoomTo="zoomTo",v.ToggleCover="toggleCover",v.ToggleFull="toggleFull",v.ToggleMax="toggleMax",v.IterateZoom="iterateZoom",v.Pan="pan",v.Swipe="swipe",v.Move="move",v.MoveLeft="moveLeft",v.MoveRight="moveRight",v.MoveUp="moveUp",v.MoveDown="moveDown",v.RotateCCW="rotateCCW",v.RotateCW="rotateCW",v.FlipX="flipX",v.FlipY="flipY",v),H={x:0,y:0,scale:1,angle:0,flipX:1,flipY:1},j=((b={})[b.Init=0]="Init",b[b.Loading=1]="Loading",b[b.Error=2]="Error",b[b.Ready=3]="Ready",b[b.Destroyed=4]="Destroyed",b),q={bounds:!0,classes:{container:"f-panzoom",wrapper:"f-panzoom__wrapper",content:"f-panzoom__content",viewport:"f-panzoom__viewport"},clickAction:_.ToggleFull,dblClickAction:!1,gestures:{},height:"auto",l10n:Z,maxScale:4,minScale:1,mouseMoveFactor:1,panMode:"drag",singleClickAction:!1,spinnerTpl:'<div class="f-spinner"></div>',wheelAction:_.Zoom,width:"auto"},W=0,V=0,N=0,G=(e,n={},i={})=>{let r,u,f,d,h,g,m,p=j.Init,y={...q,...n},v={},b={...H},x={...H},w=[];function M(e){let t=y[e];return t&&"function"==typeof t?t(eg):t}let E=new Map;function T(e,...t){let n=E.get(e)||[];for(let o of(y.on&&n.push(y.on[e]),n))o&&o instanceof Function&&o(eg,...t);"*"!==e&&T("*",e,...t)}function R(e){if(p!==j.Ready||l(e.target))return;let t=Date.now(),n=c(-1,[-e.deltaX||0,-e.deltaY||0,-e.detail||0].reduce(function(e,t){return Math.abs(t)>Math.abs(e)?t:e}),1);T("wheel",e,n);let o=M("wheelAction");if(!o||e.defaultPrevented)return;let i=x.scale,a=i*(n>0?1.5:.5);if(o===_.Zoom){let o=100>Math.abs(e.deltaY)&&100>Math.abs(e.deltaX);if(t-V<(o?200:45))return void X(e);V=t;let r=U(),l=Q();if($(a)<$(r)&&$(i)<=$(r)?(N+=Math.abs(n),a=r):$(a)>$(l)&&$(i)>=$(l)?(N+=Math.abs(n),a=l):(N=0,a=c(r,a,l)),N>7)return}switch(X(e),o){case _.Pan:eo(o,{srcEvent:e,deltaX:-(2*e.deltaX),deltaY:-(2*e.deltaY)});break;case _.Zoom:eo(_.ZoomTo,{srcEvent:e,scale:a,center:{x:e.clientX,y:e.clientY}});break;default:eo(o,{srcEvent:e})}}function A(n){let o=n.composedPath()[0];if(!F.isClickAllowed()||!a(o)||n.defaultPrevented||!e?.contains(o)||o.hasAttribute("disabled")||o.hasAttribute("aria-disabled"))return;let i=o.closest("[data-panzoom-action]"),l=i?.dataset?.panzoomAction,s=i?.dataset?.panzoomValue||"";if(l){switch(l){case _.ZoomTo:case _.ZoomIn:case _.ZoomOut:eo(l,{scale:parseFloat(s||"")||void 0});break;case _.MoveLeft:case _.MoveRight:eo(l,{deltaX:parseFloat(s||"")||void 0});break;case _.MoveUp:case _.MoveDown:eo(l,{deltaY:parseFloat(s||"")||void 0});break;default:eo(l)}return}if(!r?.contains(o))return;let c={srcEvent:n};if(eo(M("clickAction"),c),M("dblClickAction")){let e=Date.now(),n=e-(W||e);W=e,n>0&&n<=250?(t&&(clearTimeout(t),t=void 0),eo(M("dblClickAction"),c)):t=setTimeout(()=>{eo(M("singleClickAction"),c)},250)}}function z(e){if(m=e,!P()||p!==j.Ready||b.scale<=1||x.scale<=1||(r?.dataset.animationName||"").indexOf("zoom")>-1)return;let t=Z(x.scale);if(!t)return;let{x:n,y:o}=t;eo(_.Pan,{deltaX:n-x.x,deltaY:o-x.y})}function C(){if(e&&(e.querySelector(".f-spinner")?.remove(),e.classList.remove("is-loading")),!e||!r)return;if(u instanceof HTMLImageElement&&!(u.complete&&u.naturalWidth)){p=j.Error,r?.classList.add("has-error"),T("error");return}T("loaded");let{width:t,height:n}=I();u&&(u.setAttribute("width",t+""),u.setAttribute("height",n+"")),r&&(r.classList.remove("has-error"),r.setAttribute("width",t+""),r.setAttribute("height",n+""),r.style.aspectRatio=`${t/n||""}`),h=L().on("start",(e,t)=>{x={...H,...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),en(),T("animationStart")}).on("pause",e=>{x={...H,...e}}).on("step",t=>{if(p!==j.Ready||!h)return;if(!e||!e.parentElement)return void h.end();if(b={...H,...t},P()||!M("bounds")||d?.isPointerDown()||x.scale>b.scale||x.scale<B())return void ei();let n=ee(x.scale),o=!1,i=!1,a=!1,r=!1;b.x<n.x[0]&&(o=!0),b.x>n.x[1]&&(i=!0),b.y<n.y[0]&&(r=!0),b.y>n.y[1]&&(a=!0);let l=!1,s=!1,u=!1,f=!1;x.x<n.x[0]&&(l=!0),x.x>n.x[1]&&(s=!0),x.y<n.y[0]&&(f=!0),x.y>n.y[1]&&(u=!0);let g=!1;(i&&s||o&&l)&&(x.x=c(n.x[0],x.x,n.x[1]),g=!0),(a&&u||r&&f)&&(x.y=c(n.y[0],x.y,n.y[1]),g=!0),g&&h.spring({tension:94,friction:17,maxSpeed:555*x.scale,restDelta:.1,restSpeed:.1,velocity:h.getCurrentVelocities()}).from(b).to(x).start(),ei()}).on("end",()=>{et(),h?.isRunning()||(en(),T("animationEnd"))}),function(){let e=M("gestures");e&&f&&u&&(d=F(f,e).on("start",e=>{if(!h)return;let t=e.srcEvent;P()||((b.scale>1||e.currentTouch.length>1)&&(t?.stopPropagation(),h.pause()),1===e.currentTouch.length&&T("touchStart"))}).on("move",e=>{!P()&&(1!==x.scale||e.currentTouch.length>1)&&(e.srcEvent.preventDefault(),e.srcEvent.stopPropagation())}).on("pan",e=>{if(P())return;let t=e.srcEvent;(1!==x.scale||e.currentTouch.length>1)&&(X(t),eo(_.Pan,e))}).on("swipe",e=>{!P()&&x.scale>1&&eo(_.Swipe,e)}).on("tap",e=>{T("click",e)}).on("singleTap",e=>{T("singleClick",e)}).on("doubleTap",e=>{T("dblClick",e)}).on("pinch",e=>{P()||(e.scale>B()?eo(_.ZoomIn,e):e.scale<B()?eo(_.ZoomOut,e):eo(_.Pan,e))}).on("end",e=>{P()||(e.currentTouch.length?(e.srcEvent.stopPropagation(),X(e.srcEvent),h?.end()):(en(),et(),T("touchEnd")))}).init())}(),f&&(f.addEventListener("wheel",R,{passive:!1}),w.push(()=>{f?.removeEventListener("wheel",R,{passive:!1})})),e?.addEventListener("click",A),document?.addEventListener("mousemove",z),w.push(()=>{e?.removeEventListener("click",A),document?.removeEventListener("mousemove",z)});let o={...M("startPos")||{},...{scale:B()}};if(b={...H,...o},x={...H,...o},P()){let e=Z(x.scale);if(e){let{x:t,y:n}=e;b.x=t,b.y=n,x.x=t,x.y=n}}p=j.Ready,ei(),en(),T("ready"),requestAnimationFrame(()=>{f&&(f.style.visibility="")})}function O(){let e={top:0,left:0,width:0,height:0};if(r){let t=r.getBoundingClientRect();x.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 I(){let e=M("width"),t=M("height");if(u&&"auto"===e){let t=u.getAttribute("width");e=t?parseFloat(t+""):void 0!==u.dataset.width?parseFloat(u.dataset.width+""):f instanceof HTMLImageElement?f.naturalWidth:u instanceof HTMLImageElement?u.naturalWidth:u.getBoundingClientRect().width}else e=o(e)?parseFloat(e):e;if(u&&"auto"===t){let e=u.getAttribute("height");t=e?parseFloat(e+""):void 0!==u.dataset.height?parseFloat(u.dataset.height+""):f instanceof HTMLImageElement?f.naturalHeight:u instanceof HTMLImageElement?u.naturalHeight:u.getBoundingClientRect().height}else t=o(t)?parseFloat(t):t;return{width:e,height:t}}function P(){return"mousemove"===M("panMode")&&matchMedia("(hover: hover)").matches}function Z(e){let t=m||M("event"),n=r?.getBoundingClientRect();if(!t||!n||e<=1)return{x:0,y:0};let o=(t.clientX||0)-n.left,i=(t.clientY||0)-n.top,a=n.width,l=n.height,s=ee(e);if(e>1){let t=M("mouseMoveFactor");t>1&&(e*=t)}let u=a*e,f=l*e,d=(u-a)*.5-o/a*100/100*(u-a),h=(f-l)*.5-i/l*100/100*(f-l);return{x:d=c(s.x[0],d,s.x[1]),y:h=c(s.y[0],h,s.y[1])}}function G(t="base"){if(!e)return 1;let n=e.getBoundingClientRect(),o=O(),{width:i,height:a}=I(),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=x.angle%180==90?a:i;return e&&o.width?e/o.width:1}}},l=M("minScale"),s=M("maxScale"),u=Math.min(r("full"),r(l)),f="number"==typeof s?r("full")*s:Math.min(r("full"),r(s));switch(t){case"min":return u;case"base":return c(u,1,f);case"cover":return r("cover");case"full":return Math.min(f,r("full"));case"max":return f}}function U(){return G("min")}function B(){return G("base")}function J(){return G("cover")}function K(){return G("full")}function Q(){return G("max")}function ee(t){let n={x:[0,0],y:[0,0]},o=e?.getBoundingClientRect();if(!o)return n;let i=O(),a=o.width,r=o.height,l=i.width,s=i.height,c=t=void 0===t?x.scale:t,u=t;if(P()&&t>1){let e=M("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 et(){if(!M("bounds")||p!==j.Ready||!e?.parentElement||!h||!d)return;let t=U(),n=Q(),o=c(t,x.scale,n);if(x.scale<t-.01||x.scale>n+.01)return void eo(_.ZoomTo,{scale:o});if(h.isRunning()||d.isPointerDown())return;let i=ee(o);x.x<i.x[0]||x.x>i.x[1]||x.y<i.y[0]||x.y>i.y[1]?(x.x=c(i.x[0],x.x,i.x[1]),x.y=c(i.y[0],x.y,i.y[1]),h.spring({tension:170,friction:17,restDelta:.001,restSpeed:.001,maxSpeed:1/0,velocity:h.getCurrentVelocities()}),h.from(b).to(x).start()):ei()}function en(){if(!e||!e.parentElement||!r)return;let t=eu(),n=ef(),o=ed(),i=eh(),a=er(),l=el();r.classList.toggle("is-fullsize",i),r.classList.toggle("is-expanded",o),r.classList.toggle("is-dragging",n),r.classList.toggle("can-drag",t),r.classList.toggle("will-zoom-in",a),r.classList.toggle("will-zoom-out",l);let s=es(),c=ec(),u=p!==j.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 _.ZoomIn:s||(n=!0);break;case _.ZoomOut:c||(n=!0);break;case _.ToggleFull:s||c||(n=!0);let o=t.querySelector("g");o&&(o.style.display=i?"none":"");break;case _.ToggleCover:case _.ToggleMax:s||c||(n=!0)}n?(t.setAttribute("aria-disabled",""),t.setAttribute("tabindex","-1")):(t.removeAttribute("aria-disabled"),t.removeAttribute("tabindex"))}}function eo(t,n){if(!e||!u||!h||t===_.Swipe&&Math.abs(h.getCurrentVelocities().scale)>.01)return;let o={...x},i=ee(P()?x.scale:b.scale),a=h.getCurrentVelocities(),r=O();n=n||{};let l=(n.currentTouch?.length||0)>1,s=n.velocityX||0,f=n.velocityY||0,g=n.center;!g&&n.srcEvent&&(g=k(S(n.srcEvent)));let m=n.deltaX||0,p=n.deltaY||0;switch(t){case _.MoveRight:m=n.deltaX||100;break;case _.MoveLeft:m=n.deltaX||-100;break;case _.MoveUp:p=n.deltaY||-100;break;case _.MoveDown:p=n.deltaY||100}let y=[];switch(t){case _.Reset:(x={...H}).scale=B();break;case _.Pan:case _.Move:case _.MoveLeft:case _.MoveRight:case _.MoveUp:case _.MoveDown:if(d?.isPointerDown()){let e=1,t=1;x.x<=i.x[0]&&s<=0&&(e=.2*Math.max(.01,1-Math.abs(1/r.width*Math.abs(x.x-i.x[0])))),x.x>=i.x[1]&&s>=0&&(e=.2*Math.max(.01,1-Math.abs(1/r.width*Math.abs(x.x-i.x[1])))),x.y<=i.y[0]&&f<=0&&(t=.2*Math.max(.01,1-Math.abs(1/r.height*Math.abs(x.y-i.y[0])))),x.y>=i.y[1]&&f>=0&&(t=.2*Math.max(.01,1-Math.abs(1/r.height*Math.abs(x.y-i.y[1])))),x.x+=m*e,x.y+=p*t}else x.x=c(i.x[0],x.x+m,i.x[1]),x.y=c(i.y[0],x.y+p,i.y[1]);break;case _.Swipe:let v=(e=0)=>Math.sign(e)*Math.pow(Math.abs(e),1.5);x.x+=c(-1e3,v(s),1e3),x.y+=c(-1e3,v(f),1e3),f&&!s&&(x.x=c(i.x[0],x.x,i.x[1])),!f&&s&&(x.y=c(i.y[0],x.y,i.y[1])),a.x=s,a.y=f;break;case _.ZoomTo:x.scale=n.scale||1;break;case _.ZoomIn:x.scale=x.scale*(n.scale||2),l||(x.scale=Math.min(x.scale,Q()));break;case _.ZoomOut:x.scale=x.scale*(n.scale||.5),l||(x.scale=Math.max(x.scale,U()));break;case _.ToggleCover:y=[B(),J()];break;case _.ToggleFull:y=[B(),K()];break;case _.ToggleMax:y=[B(),Q()];break;case _.IterateZoom:y=[B(),K(),Q()];break;case _.Zoom:let w=K();x.scale>=w-.05?x.scale=B():x.scale=Math.min(w,x.scale*(n.scale||2));break;case _.RotateCW:x.angle+=90;break;case _.RotateCCW:x.angle-=90;break;case _.FlipX:x.flipX*=-1;break;case _.FlipY:x.flipY*=-1}if(void 0!==b.angle&&Math.abs(b.angle)>=360&&(x.angle-=360*Math.floor(b.angle/360),b.angle-=360*Math.floor(b.angle/360)),y.length){let e=y.findIndex(e=>e>x.scale+1/Y);x.scale=y[e]||y[0]}if(l&&(x.scale=c(U()*(l?.8:1),x.scale,Q()*(l?1.6:1))),P()){let e=Z(x.scale);if(e){let{x:t,y:n}=e;x.x=t,x.y=n}}else if(x.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;x.x=a-u*x.scale,x.y=s-f*x.scale,!l&&M("bounds")&&(i=ee(x.scale),x.x=c(i.x[0],x.x,i.x[1]),x.y=c(i.y[0],x.y,i.y[1]))}if(t===_.Swipe){let e=500*x.scale;h.spring({tension:94,friction:17,maxSpeed:e,restDelta:.1,restSpeed:.1,velocity:a})}else t===_.Pan||l?h.spring({tension:750,friction:17,restDelta:.01,restSpeed:.01,maxSpeed:1}):h.spring({tension:170,friction:17,restDelta:.001,restSpeed:.001,maxSpeed:1/0,velocity:a});t===_.Reset&&0===n.velocity?b={...x}:h.from(b).to(x).start(),T("action",t)}function ei(){if(!r||!u)return;if(u instanceof HTMLImageElement){let{width:e,height:t}=I();r.style.maxWidth=`min(${e}px, 100%)`,r.style.maxHeight=`min(${t}px, 100%)`}let{x:t,y:n,scale:o,angle:i,flipX:a,flipY:l}=b,s=`translate3d(${t}px, ${n}px, 0)`;1!==a||1!==l?s+=` scaleX(${o*a}) scaleY(${o*l})`:1!==o&&(s+=` scale(${o})`),i%360!=0&&(s+=` rotate(${i}deg)`);let c=function(){let t=O(),n=t.width,o=t.height,{width:i,height:a}=I();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}=b,d=1/K(),h=i,g=a,m=b.scale*d,p=x.scale*d,y=Math.max(n,o),v=Math.min(n,o);i>a?(h=y,g=v):(h=v,g=y),m=i>a?y*s/i||1:y*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(r&&c){let{x:e,y:t,width:n,height:o,scale:a,flipX:r,flipY:l}=c,s=`translate(${$(e)}px, ${$(t)}px)`;1!==r||1!==l?s+=` scaleX(${$(a*r)}) scaleY(${$(a*l)})`:s+=` scale(${$(a)})`,0!==i&&(s+=` rotate(${i}deg)`),f&&(f.style.width=`${$(n)}px`,f.style.height=`${$(o)}px`,f.style.transform=`${s}`)}T("render")}function ea(){let e=x.scale,t={scale:void 0},n=M("clickAction"),o=B();if(n){let i=[];switch(n){case _.ZoomIn:o=e*(t.scale||2);break;case _.ZoomOut:o=e*(t.scale||.5);break;case _.ToggleCover:i=[B(),J()];break;case _.ToggleFull:i=[B(),K()];break;case _.ToggleMax:i=[B(),Q()];break;case _.IterateZoom:i=[B(),K(),Q()];break;case _.Zoom:let a=K();o=e>=a-.05?B():Math.min(a,e*(t.scale||2))}if(i.length){let t=i.findIndex(t=>t>e+1/Y);o=i[t]||B()}}return c(U(),o,Q())}function er(){return p===j.Ready&&ea()>x.scale}function el(){return p===j.Ready&&ea()<x.scale}function es(){return p===j.Ready&&x.scale<Q()}function ec(){return p===j.Ready&&x.scale>U()}function eu(){return p===j.Ready&&ed()&&!!d&&!P()}function ef(){return p===j.Ready&&d?.isPointerDown()&&!P()}function ed(){return p===j.Ready&&x.scale>B()}function eh(){return p===j.Ready&&x.scale>=K()}let eg={canDrag:eu,canZoomIn:es,canZoomOut:ec,destroy:function(){for(let e of(T("destroy"),Object.values(v)))e?.destroy(eg);for(let e of w)e();return r&&(r.style.aspectRatio="",r.style.maxWidth="",r.style.maxHeight=""),f&&(f.style.width="",f.style.height="",f.style.transform=""),r=void 0,u=void 0,f=void 0,b={...H},x={...H},h?.destroy(),h=void 0,d?.destroy(),d=void 0,p=j.Destroyed,eg},emit:T,execute:eo,getBoundaries:ee,getContainer:function(){return e},getFullDim:I,getGestures:function(){return d},getMousemovePos:Z,getOptions:function(){return y},getScale:G,getState:function(){return p},getTransform:function(e){return!0===e?x:b},getTween:function(){return h},getViewport:function(){return f},getWrapper:function(){return r},init:function(){return p=j.Init,T("init"),function(){for(let[e,t]of Object.entries({...i,...y.plugins||{}}))if(e&&!v[e]&&t instanceof Function){let n=t();n.init(eg),v[e]=n}T("initPlugins")}(),function(){if(!e)return;let t={...q.classes,...M("classes")};if((D(e,t.container),u=e.querySelector("."+t.content))&&(u.setAttribute("draggable","false"),(r=e.querySelector("."+t.wrapper))||(D(r=document.createElement("div"),t.wrapper),u.insertAdjacentElement("beforebegin",r),r.insertAdjacentElement("afterbegin",u)),u instanceof HTMLImageElement||u instanceof HTMLPictureElement)){if(!(f=e.querySelector("."+t.viewport))){D(f=document.createElement("div"),t.viewport);let e=u.cloneNode(!0);e.classList.remove("is-lazyloading"),e.classList.remove("is-lazyloaded"),f.insertAdjacentElement("afterbegin",e),r.insertAdjacentElement("beforeend",f)}u instanceof HTMLPictureElement&&(u=u.querySelector("img")),f instanceof HTMLPictureElement&&(f=f.querySelector("img")),f.style.visibility="hidden",T("initLayout")}}(),function(){if(!(u&&u instanceof HTMLImageElement))return;let t=()=>{u&&u instanceof HTMLImageElement&&u.decode().then(()=>{requestAnimationFrame(()=>{C()})}).catch(()=>{C()})};if(u.src&&u.complete)return t();p=j.Loading,function(){let t=e?.querySelector(".f-spinner");if(!e||t)return;let n=s(M("spinnerTpl"));n&&(n.classList.add("f-spinner"),e.classList.add("is-loading"),r?.insertAdjacentElement("afterbegin",n))}(),T("loading"),u.addEventListener("load",t,!1),u.addEventListener("error",t,!1),w.push(()=>{u?.removeEventListener("load",t,!1),u?.removeEventListener("error",t,!1)})}(),function(){if(e&&!g){let t=null;(g=new ResizeObserver(()=>{t||(t=requestAnimationFrame(()=>{e&&e.parentElement&&p===j.Ready&&(en(),et(),T("refresh")),t=null}))})).observe(e),w.push(()=>{g?.disconnect(),g=void 0,t&&(cancelAnimationFrame(t),t=null)})}}(),eg},isDragging:ef,isExpanded:ed,isFullsize:eh,localize:function(e,t=[]){let n=M("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])E.has(n)&&E.set(n,E.get(n).filter(e=>e!==t));return eg},on:function(e,t){for(let n of e instanceof Array?e:[e])E.set(n,[...E.get(n)||[],t]);return eg},version:"6.0.5",willZoomIn:er,willZoomOut:el};return eg};G.l10n={en_EN:Z},G.getDefaults=()=>q;let U={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)?{...U,...i}:U)[t];return a&&"function"==typeof a&&o?a(o):a}function a(){e&&(e.on("addSlide",s),e.on("removeSlide",c),e.on("attachSlideEl",u),e.on("click",l),e.on("change",r))}function r(){f()}function l(e,t){let n=t.target;n&&!t.defaultPrevented&&n.dataset.panzoomAction&&d(n.dataset.panzoomAction)}function s(n,a){if(!e)return;let r=a.el;if(!r)return;let l=a.src||a.lazySrc||"",s=a.srcset||a.lazySrcset||"",c=a.sizes||a.lazySizes||"";if(l&&o(l)&&!a.html&&(!a.type||"image"===a.type)){let e=t("tpl",a);e=i(e,"{{src}}",l+""),e=i(e,"{{srcset}}",s+""),e=i(e,"{{sizes}}",c+""),e=i(e,"{{alt}}",`${a.alt||a.caption||`Image #${a.index}`}`),r.insertAdjacentHTML("afterbegin",e)}if(!r.querySelector(".f-panzoom__content"))return;let u=G(r,{width:a.width&&"auto"!==a.width?parseFloat(a.width+""):"auto",height:a.height&&"auto"!==a.height?parseFloat(a.height+""):"auto",event:()=>e?.getLastMouseMove(),classes:{container:"f-zoomable"},...t("Panzoom")});u.on("*",(t,n,...o)=>{e&&("loading"===n&&(a.state=0),"loaded"===n&&(a.state=1),"error"===n&&(a.state=2,e?.showError(a,"{{IMAGE_ERROR}}")),e.emit(`panzoom:${n}`,a,...o),"ready"===n&&e.emit("contentReady",a),a.index===e.getPageIndex()&&f())}),a.panzoomRef=u}function c(e,t){t.panzoomRef&&(t.panzoomRef.destroy(),t.panzoomRef=void 0)}function u(e,t){let n=t.panzoomRef;if(n)switch(n.getState()){case j.Init:n.init();break;case j.Ready:n.execute(_.Reset,{velocity:0})}}function f(){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()!==j.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 _.ZoomIn:o||(n=!0);break;case _.ZoomOut:i||(n=!0);break;case _.ToggleFull:o||i||(n=!0);let l=e.querySelector("g");l&&(l.style.display=a?"none":"");break;case _.ToggleCover:case _.ToggleMax:o||i||(n=!0)}n?(e.setAttribute("aria-disabled",""),e.setAttribute("tabindex","-1")):(e.removeAttribute("aria-disabled"),e.removeAttribute("tabindex"))}}function d(t,...n){e?.getPage().slides[0].panzoomRef?.execute(t,...n)}return{init:function(t){!1!==(e=t).getOptions().Zoomable&&e.on("initPlugins",a)},destroy:function(){if(e)for(let t of(e.off("addSlide",s),e.off("removeSlide",c),e.off("attachSlideEl",u),e.off("change",r),e.getSlides()))c(e,t);e=void 0},execute:d}}});