diff --git a/README.md b/README.md index e58ad8a..6fbefdd 100644 --- a/README.md +++ b/README.md @@ -1,216 +1,224 @@ -# Fancyapps UI - -Collection of task-oriented components that will make you more productive. Packed full of features that you and your clients will love. - -Full docs with examples: https://fancyapps.com/docs/ui/quick-start/. - -## Installation - -### NPM - -Use either `npm` or `yarn` as follows: - -```bash -npm install @fancyapps/ui -// or -yarn add @fancyapps/ui -``` - -Import one or more components: - -```jsx -import { Fancybox, Carousel, Panzoom } from "@fancyapps/ui"; -``` - -Import the appropriate CSS file, example: - -```jsx -import "@fancyapps/ui/dist/fancybox.css"; -``` - -### CDN - -A pre-bundled scripts that contain components are available on [CDN](https://www.jsdelivr.com/package/npm/@fancyapps/ui?path=dist). - -> **_NOTE:_** Because Fancybox is build on top of both Carousel and Panzoom components, you only have to include `fancybox.umd.js` and all 3 components will be available through the `window` object. - -```html - -``` - -Or use ES6 import: - -```html - -``` - -Remember to include the appropriate CSS file, example: - -```html - -``` - -## Usage - -### Fancybox - -There are two ways to use Fancybox. - -#### Declarative - -Add a `data-fancybox` attribute to any element to enable Fancybox. Galleries are created by adding the same attribute `data-fancybox` value to multiple elements. Use `data-src` or `href` attribute to specify the source of the content. - -```jsx - - Image - -``` - -```jsx - - Video - -``` - -```jsx - - Iframe - -``` - -```jsx - - - -``` - -#### Programmatic - -```js -// Image gallery -var gallery = [ - { - src: "https://lipsum.app/id/2/800x600", - thumb: "https://lipsum.app/id/2/80x80", - caption: "First image", - }, - { - src: "https://lipsum.app/id/3/800x600", - thumb: "https://lipsum.app/id/3/80x80", - caption: "Second image", - }, - { - src: "https://lipsum.app/id/4/800x600", - thumb: "https://lipsum.app/id/4/80x80", - caption: "Third image", - }, -]; - -Fancybox.show(gallery, { - // Your options go here -}); - -// HTML element -Fancybox.show([{ src: "#dialog-content", type: "inline" }]); - -// A copy of HTML element -Fancybox.show([{ src: "#dialog-content", type: "clone" }]); - -// Any HTML content -Fancybox.show([{ src: "

Lorem ipsum dolor sit amet.

", type: "html" }]); -``` - -### Carousel - -Add HTML markup - -```html - -``` - -Initialise Carousel - -```js -const myCarousel = new Carousel(document.querySelector("#myCarousel"), { - // Your options go here -}); -``` - -Optionally, use CSS to customize container, navigation elements and slides - -```css -.carousel { - color: #170724; - - --carousel-button-bg: #fff; - --carousel-button-shadow: 0 2px 1px -1px rgb(0 0 0 / 20%), 0 1px 1px 0 rgb(0 0 0 / 14%), 0 1px 3px 0 rgb(0 0 0 / 12%); - - --carousel-button-svg-width: 20px; - --carousel-button-svg-height: 20px; - --carousel-button-svg-stroke-width: 2.5; -} - -.carousel__slide { - display: flex; - align-items: center; - justify-content: center; - - width: 80%; - height: 160px; - margin-right: 6px; - - background-color: #eee; - border-radius: 6px; -} -``` - -### Panzoom - -Add HTML markup - -```html -
- -
-``` - -Initialise Panzoom - -```js -const myPanzoom = new Panzoom(document.querySelector("#myPanzoom"), { - // Your options go here -}); -``` - -Optionally, use CSS to customize container - -```css -.panzoom { - width: 400px; - height: 300px; -} -``` - -## License - -This is commercial software. See LICENSE.md for more info. +# Fancyapps UI + +Collection of task-oriented components that will make you more productive. Packed full of features that you and your clients will love. + +Full docs with examples: https://fancyapps.com/docs/ui/quick-start/. + +## Installation + +### NPM + +Use either `npm` or `yarn` as follows: + +```bash +npm install @fancyapps/ui +// or +yarn add @fancyapps/ui +``` + +Import one or more components: + +```jsx +import { Fancybox, Carousel, Panzoom } from "@fancyapps/ui"; +``` + +Import the appropriate CSS file, example: + +```jsx +import "@fancyapps/ui/dist/fancybox.css"; +``` + +### CDN + +A pre-bundled scripts that contain components are available on [CDN](https://www.jsdelivr.com/package/npm/@fancyapps/ui?path=dist). + +> **_NOTE:_** Because Fancybox is build on top of both Carousel and Panzoom components, you only have to include `fancybox.umd.js` and all 3 components will be available through the `window` object. + +```html + +``` + +Or use ES6 import: + +```html + +``` + +Remember to include the appropriate CSS file, example: + +```html + +``` + +## Usage + +### Fancybox + +There are two ways to use Fancybox. + +#### Declarative + +Add a `data-fancybox` attribute to any element to enable Fancybox. Galleries are created by adding the same attribute `data-fancybox` value to multiple elements. Use `data-src` or `href` attribute to specify the source of the content. Add a `data-caption` attribute if you want to show a caption under the content. + +```jsx + + Image + +``` + +```jsx + + Video + +``` + +```jsx + + Iframe + +``` + +```jsx + + + +``` + +Customize options: + +```js +Fancybox.bind("[data-fancybox]", { + // Your options go here +}); +``` + +#### Programmatic + +```js +// Image gallery +var gallery = [ + { + src: "https://lipsum.app/id/2/800x600", + thumb: "https://lipsum.app/id/2/80x80", + caption: "First image", + }, + { + src: "https://lipsum.app/id/3/800x600", + thumb: "https://lipsum.app/id/3/80x80", + caption: "Second image", + }, + { + src: "https://lipsum.app/id/4/800x600", + thumb: "https://lipsum.app/id/4/80x80", + caption: "Third image", + }, +]; + +Fancybox.show(gallery, { + // Your options go here +}); + +// HTML element +Fancybox.show([{ src: "#dialog-content", type: "inline" }]); + +// A copy of HTML element +Fancybox.show([{ src: "#dialog-content", type: "clone" }]); + +// Any HTML content +Fancybox.show([{ src: "

Lorem ipsum dolor sit amet.

", type: "html" }]); +``` + +### Carousel + +Add HTML markup + +```html + +``` + +Initialise Carousel + +```js +const myCarousel = new Carousel(document.querySelector("#myCarousel"), { + // Your options go here +}); +``` + +Optionally, use CSS to customize container, navigation elements and slides + +```css +.carousel { + color: #170724; + + --carousel-button-bg: #fff; + --carousel-button-shadow: 0 2px 1px -1px rgb(0 0 0 / 20%), 0 1px 1px 0 rgb(0 0 0 / 14%), 0 1px 3px 0 rgb(0 0 0 / 12%); + + --carousel-button-svg-width: 20px; + --carousel-button-svg-height: 20px; + --carousel-button-svg-stroke-width: 2.5; +} + +.carousel__slide { + display: flex; + align-items: center; + justify-content: center; + + width: 80%; + height: 160px; + margin-right: 6px; + + background-color: #eee; + border-radius: 6px; +} +``` + +### Panzoom + +Add HTML markup + +```html +
+ +
+``` + +Initialise Panzoom + +```js +const myPanzoom = new Panzoom(document.querySelector("#myPanzoom"), { + // Your options go here +}); +``` + +Optionally, use CSS to customize container + +```css +.panzoom { + width: 400px; + height: 300px; +} +``` + +## License + +This is commercial software. See [LICENSE.md](LICENSE.md) for more info. diff --git a/dist/fancybox.esm.js b/dist/fancybox.esm.js index c191922..73f278f 100644 --- a/dist/fancybox.esm.js +++ b/dist/fancybox.esm.js @@ -1,2 +1,2 @@ // @fancyapps/ui/Fancybox v4.0.0-alpha.1 -const t=t=>"object"==typeof t&&null!==t&&t.constructor===Object&&"[object Object]"===Object.prototype.toString.call(t),e=(...i)=>{let s=!1;"boolean"==typeof i[0]&&(s=i.shift());let n=i[0];if(!n||"object"!=typeof n)throw new Error("extendee must be an object");const o=i.slice(1),a=o.length;for(let i=0;i(t=parseFloat(t)||0,Math.round((t+Number.EPSILON)*e)/e),s="undefined"!=typeof window&&window.ResizeObserver||class{constructor(t){this.observables=[],this.boundCheck=this.check.bind(this),this.boundCheck(),this.callback=t}observe(t){if(this.observables.some((e=>e.el===t)))return;const e={el:t,size:{height:t.clientHeight,width:t.clientWidth}};this.observables.push(e)}unobserve(t){this.observables=this.observables.filter((e=>e.el!==t))}disconnect(){this.observables=[]}check(){const t=this.observables.filter((t=>{const e=t.el.clientHeight,i=t.el.clientWidth;if(t.size.height!==e||t.size.width!==i)return t.size.height=e,t.size.width=i,!0})).map((t=>t.el));t.length>0&&this.callback(t),window.requestAnimationFrame(this.boundCheck)}},n=function(t){return!(!t||t.classList.contains("carousel__track")||t===document.body)&&(function(t){const e=window.getComputedStyle(t)["overflow-y"],i=window.getComputedStyle(t)["overflow-x"],s=("scroll"===e||"auto"===e)&&Math.abs(t.scrollHeight-t.clientHeight)>1,n=("scroll"===i||"auto"===i)&&Math.abs(t.scrollWidth-t.clientWidth)>1;return s||n}(t)?t:n(t.parentNode))},o=t=>{let e=0;return t&&(e=t instanceof SVGElement?Math.min(t.getClientRects()[0].width,t.width.baseVal.value):Math.max(t.offsetWidth,t.scrollWidth)),e},a=t=>{let e=0;return t&&(e=t instanceof SVGElement?Math.min(t.getClientRects()[0].height,t.height.baseVal.value):Math.max(t.offsetHeight,t.scrollHeight)),e};class r{constructor(t={}){this.options=e(!0,{},t),this.plugins=[],this.events={};for(const t of["on","once"])for(const e of Object.entries(this.options[t]||{}))this[t](...e)}option(t,e){t=String(t);let i=(s=t,n=this.options,s.split(".").reduce((function(t,e){return t[e]}),n));var s,n;return"function"==typeof i&&(i=i.call(this,t)),void 0===i?e:i}localize(t,e=[]){return String(t).replace(/\{\{(\w+).?(\w+)?\}\}/g,((t,i,s)=>{let n=!1;if(n=s?this.option(`${i[0]+i.toLowerCase().substring(1)}.l10n.${s}`):this.option(`l10n.${i}`),!n)return i;for(let t=0;t{const e=this.events[t]=this.events[t]||[];-1==e.indexOf(i)&&e.push(i)})),this}once(e,i){if(t(e)){for(const t of Object.entries(e))this.once(...t);return this}return String(e).split(" ").forEach((t=>{const e=(...s)=>{this.off(t,e),i.call(this,this,...s)};e._=i,this.on(t,e)})),this}off(e,i){if(!t(e))return e.split(" ").forEach((t=>{const e=this.events[t];if(!e||!e.length)return this;let s=-1;for(let t=0,n=e.length;t{const t=this.$content.naturalWidth;this.maxScale=this.option("maxScale"),this.options.maxScale=function(){const e=this.contentDim.width;return t>0&&e>0?t/e*this.maxScale:this.maxScale},this.updateMetrics(),this.trigger(t>0?"load":"error")};!0!==this.$content.complete?(this.$content.onload=()=>t(),this.$content.onerror=()=>t()):t()}else this.updateMetrics()}resetValues(){this.viewportDim={top:0,left:0,width:0,height:0},this.contentDim={width:0,height:0},this.friction=this.option("friction"),this.current={x:0,y:0,scale:1},this.velocity={x:0,y:0,scale:0},this.pan={x:0,y:0,scale:1},this.drag={startTime:null,firstPosition:null,startPosition:null,startPoint:null,startDistance:null,endPosition:null,endPoint:null,distance:0,distanceX:0,distanceY:0,elapsedTime:0},this.lockAxis=null,this.pendingAnimateUpdate=null,this.pendingResizeUpdate=null,this.pointers=[]}updateMetrics(){let{top:t,left:e,width:i,height:s}=this.$viewport.getBoundingClientRect();const n=window.getComputedStyle(this.$viewport);i-=parseFloat(n.paddingLeft)+parseFloat(n.paddingRight),s-=parseFloat(n.paddingTop)+parseFloat(n.paddingBottom),this.viewportDim={top:t,left:e,width:i,height:s},this.contentDim={width:this.option("width",o(this.$content)),height:this.option("hidth",a(this.$content))},this.trigger("updateMetrics"),this.updateBounds()}updateBounds(t){const e={from:0,to:0},s={from:0,to:0};if(t||(t=this.velocity.scale?this.pan.scale:this.current.scale),t<1)return[e,s];const n=this.contentDim,o=this.viewportDim,a=n.width*t,r=n.height*t;return e.to=i(.5*(a-n.width)),n.width>o.width?e.from=i(e.to+o.width-a):e.from=i(-1*e.to),s.to=i(.5*(r-n.height)),n.height>o.height?s.from=i(s.to+o.height-r):s.from=i(-1*s.to),this.boundX=e,this.boundY=s,this.trigger("updateBounds",t),[this.boundX,this.boundY]}zoomIn(t){this.zoomTo(this.current.scale+(t||this.option("step")))}zoomOut(t){this.zoomTo(this.current.scale-(t||this.option("step")))}toggleZoom(t={}){const e=this.option("maxScale"),i=this.option("baseScale");this.zoomTo(this.current.scale>i+.5*(e-i)?i:e,t)}zoomTo(t,e={}){let{x:i=null,y:s=null,friction:n=this.option("zoomFriction")}=e;t||(t=this.option("baseScale")),t=Math.max(Math.min(t,this.option("maxScale")),this.option("minScale"));const o=this.contentDim.width,a=this.contentDim.height,r=o*this.current.scale,l=a*this.current.scale,h=o*t,c=a*t;null===i&&(i=.5*r),null===s&&(s=.5*l),!1===this.option("zoomInCentered")&&(i<.5*r&&(i=r),i>r&&(i=0),s<0&&(s=l),s>l&&(s=0));let d=(h-r)*((r>0?i/r:0)-.5),u=(c-l)*((l>0?s/l:0)-.5);Math.abs(d)<1&&(d=0),Math.abs(u)<1&&(u=0),i=this.current.x-d,s=this.current.y-u,this.panTo({x:i,y:s,scale:t,friction:n})}panTo(t){let{x:e=0,y:i=0,scale:s=this.current.scale,friction:n=this.option("friction"),ignoreBounds:o=!1}=t;if(n||this.stopMoving(),!0!==o){const[t,n]=this.updateBounds(s);t&&(e=Math.max(Math.min(e,t.to),t.from)),n&&(i=Math.max(Math.min(i,n.to),n.from))}return n>0&&(Math.abs(e-this.current.x)>.1||Math.abs(i-this.current.y)>.1||Math.abs(s-this.current.scale)>.1)?(this.state="panning",this.friction=n,this.pan={x:e,y:i,scale:s},this.velocity={x:(1/this.friction-1)*(e-this.current.x),y:(1/this.friction-1)*(i-this.current.y),scale:(1/this.friction-1)*(s-this.current.scale)},this.animate(),this):(this.pendingAnimateUpdate&&(cancelAnimationFrame(this.pendingAnimateUpdate),this.pendingAnimateUpdate=null),this.state="ready",this.stopMoving(),this.current={x:e,y:i,scale:s},this.transform(),this.handleCursor(),this.trigger("afterAnimate",!0),this)}animate(){if(!this.pendingAnimateUpdate){if(this.applyBoundForce(),this.applyDragForce(),this.velocity.x*=this.friction,this.velocity.y*=this.friction,this.velocity.scale*=this.friction,this.current.x+=this.velocity.x,this.current.y+=this.velocity.y,this.current.scale+=this.velocity.scale,"dragging"==this.state||"pointerdown"==this.state||Math.abs(this.velocity.x)>.05||Math.abs(this.velocity.y)>.05||Math.abs(this.velocity.scale)>.05)return this.transform(),void(this.pendingAnimateUpdate=requestAnimationFrame((()=>{this.pendingAnimateUpdate=null,this.animate()})));this.current.x=i(this.current.x+this.velocity.x/(1/this.friction-1)),this.current.y=i(this.current.y+this.velocity.y/(1/this.friction-1)),Math.abs(this.current.x)<.5&&(this.current.x=0),Math.abs(this.current.y)<.5&&(this.current.y=0),this.current.scale=i(this.current.scale+this.velocity.scale/(1/this.friction-1),1e4),Math.abs(this.current.scale-1)<.01&&(this.current.scale=1),this.state="ready",this.stopMoving(),this.transform(),this.handleCursor(),this.trigger("afterAnimate")}}handleCursor(){const t=this.option("draggableClass");t&&this.option("touch")&&(this.contentDim.width<=this.viewportDim.width&&1==this.option("panOnlyZoomed")&&this.current.scale<=this.option("baseScale")?this.$viewport.classList.remove(t):this.$viewport.classList.add(t))}isMoved(){return 0!==this.current.x||0!==this.current.y||1!==this.current.scale||this.velocity.x>0||this.velocity.y>0||this.velocity.scale>0}stopMoving(){this.velocity={x:0,y:0,scale:0}}transform(){this.trigger("beforeTransform");const t=i(this.current.x,100),e=i(this.current.y,100),s=i(this.current.scale,1e5);Math.abs(t)<=.1&&Math.abs(e)<=.1&&Math.abs(s-1)<=.1?this.$content.style.transform="":this.$content.style.transform=`translate3d(${t}px, ${e}px, 0px) scale(${s})`,this.trigger("afterTransform")}applyBoundForce(){if("decel"!==this.state)return;const t={x:0,y:0},e=this.option("bounceForce"),i=this.boundX,s=this.boundY;let n,o,a,r;if(i&&(n=this.current.xi.to),s&&(a=this.current.ys.to),n||o){const s=(n?i.from:i.to)-this.current.x;let a=s*e;const r=this.current.x+(this.velocity.x+a)/(1/this.friction-1);n&&ri.to||(a=s*e-this.velocity.x),t.x=a}if(a||r){const i=(a?s.from:s.to)-this.current.y;let n=i*e;const o=this.current.y+(this.velocity.y+n)/(1/this.friction-1);a&&os.to||(n=i*e-this.velocity.y),t.y=n}this.velocity.x+=t.x,this.velocity.y+=t.y}applyDragForce(){"dragging"===this.state&&(this.velocity={x:(1/this.friction-1)*(this.drag.endPosition.x-this.current.x),y:(1/this.friction-1)*(this.drag.endPosition.y-this.current.y),scale:(1/this.friction-1)*(this.drag.endPosition.scale-this.current.scale)})}attachEvents(){const t=this.$viewport;this.resizeObserver=this.resizeObserver||new s((t=>{this.pendingResizeUpdate=this.pendingResizeUpdate||setTimeout((()=>{this.pendingResizeUpdate=null;let e=t&&t[0].contentRect;!e&&this.$viewport&&(e=this.$viewport.getBoundingClientRect()),e&&(Math.abs(e.width-this.viewportDim.width)>1||Math.abs(e.height-this.viewportDim.height)>1)&&this.updateMetrics()}),50)})),this.resizeObserver.observe(t),t.addEventListener("click",this.onClick,{passive:!1}),t.addEventListener("wheel",this.onWheel,{passive:!1}),this.option("touch")&&(window.PointerEvent?(t.addEventListener("pointerdown",this.onPointerDown,{passive:!1}),t.addEventListener("pointermove",this.onPointerMove,{passive:!1}),t.addEventListener("pointerup",this.onPointerUp),t.addEventListener("pointercancel",this.onPointerUp)):(t.addEventListener("touchstart",this.onPointerDown,{passive:!1}),t.addEventListener("touchmove",this.onPointerMove,{passive:!1}),t.addEventListener("touchend",this.onPointerUp),t.addEventListener("touchcancel",this.onPointerUp),t.addEventListener("mousedown",this.onPointerDown)))}detachEvents(){this.resizeObserver&&this.resizeObserver.disconnect(),this.resizeObserver=null,this.pendingResizeUpdate&&(clearTimeout(this.pendingResizeUpdate),this.pendingResizeUpdate=null);const t=this.$viewport;window.PointerEvent?(t.removeEventListener("pointerdown",this.onPointerDown,{passive:!1}),t.removeEventListener("pointermove",this.onPointerMove,{passive:!1}),t.removeEventListener("pointerup",this.onPointerUp),t.removeEventListener("pointercancel",this.onPointerUp)):(t.removeEventListener("touchstart",this.onPointerDown,{passive:!1}),t.removeEventListener("touchmove",this.onPointerMove,{passive:!1}),t.removeEventListener("touchend",this.onPointerUp),t.removeEventListener("touchcancel",this.onPointerUp),t.removeEventListener("mousedown",this.onPointerDown)),t.removeEventListener("click",this.onClick,{passive:!1}),t.removeEventListener("wheel",this.onWheel,{passive:!1})}copyPointer(t){return{pointerId:t.pointerId,clientX:t.clientX,clientY:t.clientY}}findPointerIndex(t){let e=this.pointers.length;for(;e--;)if(this.pointers[e].pointerId===t.pointerId)return e;return-1}addPointer(t){let e=0;if(t.touches&&t.touches.length)for(const i of t.touches)i.pointerId=e++,this.addPointer(i);else e=this.findPointerIndex(t),e>-1&&this.pointers.splice(e,1),this.pointers.push(t)}removePointer(t){if(t.touches){for(;this.pointers.length;)this.pointers.pop();return}const e=this.findPointerIndex(t);e>-1&&this.pointers.splice(e,1)}getMiddlePoint(){let t=[...this.pointers];t=t.sort(((t,e)=>e.pointerId-t.pointerId));const e=t.shift(),i=t.shift();return i?{clientX:.5*(e.clientX-i.clientX)+i.clientX,clientY:.5*(e.clientY-i.clientY)+i.clientY}:{clientX:e?e.clientX:0,clientY:e?e.clientY:0}}getDistance(t,e){if(!(t=(t=t||[...this.pointers]).slice())||t.length<2)return 0;const i=(t=t.sort(((t,e)=>e.pointerId-t.pointerId))).shift(),s=t.shift(),n=Math.abs(s.clientX-i.clientX);if("x"===e)return n;const o=Math.abs(s.clientY-i.clientY);return"y"===e?o:Math.sqrt(Math.pow(n,2)+Math.pow(o,2))}resetDragState(){const{left:t,top:i}=this.$content.getClientRects()[0],s=this.getMiddlePoint(),n={top:i,left:t,x:this.current.x,y:this.current.y,scale:this.current.scale};e(this.drag,{startPosition:e({},n),startPoint:e({},s),startDistance:this.getDistance(),endPosition:e({},n),endPoint:e({},s),distance:0,distanceX:0,distanceY:0}),"pointerdown"===this.state&&(this.lockAxis=null,this.drag.startTime=new Date,this.drag.firstPosition=Object.assign({},n)),this.stopMoving(),this.friction=this.option("friction")}onPointerDown(t){if(t&&!(t.button&&t.button>0))if(this.option("panOnlyZoomed")&&this.velocity.scale)t.preventDefault();else{if(this.resetDragState(),!this.pointers.length){if(-1!==["BUTTON","TEXTAREA","OPTION","INPUT","SELECT","VIDEO"].indexOf(t.target.nodeName))return;if(this.option("textSelection")&&((t,e,i)=>{const s=t.childNodes,n=document.createRange();for(let t=0;t=a.left&&i>=a.top&&e<=a.right&&i<=a.bottom)return o}return!1})(t.target,t.clientX,t.clientY))return;if(n(t.target))return}if((()=>{const t=window.getSelection?window.getSelection():document.selection;t&&t.rangeCount&&t.getRangeAt(0).getClientRects().length&&(t.removeAllRanges?t.removeAllRanges():t.empty&&t.empty())})(),this.pointers.length>1||this.pointers.length&&this.lockAxis)t.preventDefault();else if(!1!==this.trigger("touchStart",t))if(t.preventDefault(),this.state="pointerdown",this.addPointer(this.copyPointer(t)),this.resetDragState(),window.PointerEvent)try{t.target.setPointerCapture(t.pointerId)}catch(t){}else document.addEventListener("mousemove",this.onPointerMove,{passive:!1}),document.addEventListener("mouseup",this.onPointerUp,{passive:!1})}}onPointerMove(t){if(t.targetTouches&&t.targetTouches.length>1)return;if("pointerdown"!==this.state&&"dragging"!==this.state)return;if(0==this.trigger("touchMove",t))return void t.preventDefault();if(this.addPointer(this.copyPointer(t)),this.pointers.length>1&&!1===this.option("pinchToZoom"))return;if(1==this.option("panOnlyZoomed")&&this.current.scale===this.option("baseScale")&&this.pointers.length<2)return void t.preventDefault();const e=this.getMiddlePoint(),i=[e,this.drag.startPoint];this.drag.distance=this.getDistance(i);const s=this.events.click&&this.events.click.length||this.events.doubleClick&&this.events.doubleClick.length||this.option.click||this.option.doubleClick;if(this.drag.distance<6&&(s||this.option("lockAxis")&&!this.lockAxis))return;if("pointerdown"==this.state&&(this.state="dragging"),"dragging"!==this.state)return;const n=this.option("lockAxis");if(!this.lockAxis&&n)if("xy"===n){const t=this.getDistance(i,"x"),e=this.getDistance(i,"y"),s=Math.abs(180*Math.atan2(e,t)/Math.PI);this.lockAxis=s>45&&s<135?"y":"x"}else this.lockAxis=n;t.preventDefault(),t.stopPropagation(),this.$viewport.classList.add(this.option("draggingClass")),this.animate();let o=this.current.scale,a=0,r=0;if(this.current.scale===this.option("baseScale")&&"y"===this.lockAxis||(a=e.clientX-this.drag.startPoint.clientX),this.current.scale===this.option("baseScale")&&"x"===this.lockAxis||(r=e.clientY-this.drag.startPoint.clientY),this.drag.endPosition.x=this.drag.startPosition.x+a,this.drag.endPosition.y=this.drag.startPosition.y+r,this.pointers.length>1){this.drag.middlePoint=e,o=this.drag.startPosition.scale*this.getDistance()/this.drag.startDistance,o=Math.max(Math.min(o,2*this.option("maxScale")),.5*this.option("minScale"));const t=this.$content.width,i=this.$content.height,s=t*this.drag.startPosition.scale,n=i*this.drag.startPosition.scale,a=i*o,r=(t*o-s)*((this.drag.startPoint.clientX-this.drag.startPosition.left)/s-.5),l=(a-n)*((this.drag.startPoint.clientY-this.drag.startPosition.top)/n-.5);this.drag.endPosition.x-=r,this.drag.endPosition.y-=l,this.drag.endPosition.scale=o,this.updateBounds(o)}this.applyDragResistance()}onPointerUp(t){if(this.removePointer(t),window.PointerEvent)try{t.target.releasePointerCapture(t.pointerId)}catch(t){}else document.removeEventListener("mousemove",this.onPointerMove,{passive:!1}),document.removeEventListener("mouseup",this.onPointerUp,{passive:!1});if(this.pointers.length>0)return t.preventDefault(),void this.resetDragState();if("pointerdown"!==this.state&&"dragging"!==this.state)return;this.$viewport.classList.remove(this.option("draggingClass"));const{top:i,left:s}=this.$content.getClientRects()[0],n=this.drag;if(e(!0,n,{elapsedTime:new Date-n.startTime,distanceX:n.endPosition.x-n.firstPosition.x,distanceY:n.endPosition.y-n.firstPosition.y,endPosition:{top:i,left:s}}),n.distance=Math.sqrt(Math.pow(n.distanceX,2)+Math.pow(n.distanceY,2)),this.state="decel",this.friction=this.option("decelFriction"),this.pan={x:this.current.x+this.velocity.x/(1/this.friction-1),y:this.current.y+this.velocity.y/(1/this.friction-1),scale:this.current.scale+this.velocity.scale/(1/this.friction-1)},!1===this.trigger("touchEnd",t))return;if("decel"!==this.state)return;const o=this.option("minScale");if(this.current.scale.01){const t={friction:.64};n.middlePoint&&(t.x=n.middlePoint.clientX-s,t.y=n.middlePoint.clientY-i),this.zoomTo(a,t)}}applyDragResistance(){const t=this.boundX,e=this.boundY;let i,s,n,o;if(t&&(i=this.drag.endPosition.xt.to),e&&(n=this.drag.endPosition.ye.to),i||s){const e=i?t.from:t.to,s=this.drag.endPosition.x-e;this.drag.endPosition.x=e+.3*s}if(n||o){const t=n?e.from:e.to,i=this.drag.endPosition.y-t;this.drag.endPosition.y=t+.3*i}}onWheel(t){!1!==this.trigger("wheel",t)&&"zoom"==this.option("wheel",t)&&this.zoomWithWheel(t)}zoomWithWheel(t){void 0===this.changedDelta&&(this.changedDelta=0);let e=this.current.scale;const i=Math.max(-1,Math.min(1,-t.deltaY||-t.deltaX||t.wheelDelta||-t.detail));if(i<0&&e<=this.option("minScale")||i>0&&e>=this.option("maxScale")){if(this.changedDelta+=Math.abs(i),this.changedDelta>this.option("wheelLimit"))return}else this.changedDelta=0;e=e*(100+i*this.option("wheelFactor"))/100,t.preventDefault();const{top:s,left:n}=this.$content.getClientRects()[0],o=t.clientX-n,a=t.clientY-s;this.zoomTo(e,{x:o,y:a})}onClick(t){if(t.defaultPrevented)return;if(window.getSelection().toString().length)return t.stopPropagation(),void t.stopImmediatePropagation();if(this.drag.startPosition&&this.drag.endPosition&&(Math.abs(this.drag.endPosition.top-this.drag.startPosition.top)>1||Math.abs(this.drag.endPosition.left-this.drag.startPosition.left)>1))return t.stopPropagation(),void t.stopImmediatePropagation();if(this.drag.distance>(this.lockAxis?6:1))return t.preventDefault(),t.stopPropagation(),void t.stopImmediatePropagation();let e=null,i=null;void 0!==t.clientX&&void 0!==t.clientY&&(e=t.clientX-this.$content.getClientRects()[0].left,i=t.clientY-this.$content.getClientRects()[0].top);let s=this.options.doubleClick;if(!s&&this.events.doubleClick&&this.events.doubleClick.length&&(s=!0),s){if(!this.clickTimer)return this.lastClickEvent=t,void(this.clickTimer=setTimeout((()=>{this.clickTimer=null,!1!==this.trigger("click",t)&&"toggleZoom"===this.option("click")&&this.toggleZoom({x:e,y:i})}),this.option("clickDelay")));this.getDistance([t,this.lastClickEvent])>=6||(clearTimeout(this.clickTimer),this.clickTimer=null,!1!==this.trigger("doubleClick",t)&&"toggleZoom"===this.option("doubleClick")&&this.toggleZoom({x:e,y:i}))}else{if(!1===this.trigger("click",t))return;"toggleZoom"===this.option("click")&&this.toggleZoom({x:e,y:i})}}destroy(){"destroy"!==this.state&&(this.state="destroy",this.$viewport.classList.remove("not-selectable"),this.$content instanceof HTMLImageElement&&!this.$content.complete&&(this.$content.onload=null,this.$content.onerror=null),this.pendingAnimateUpdate&&(cancelAnimationFrame(this.pendingAnimateUpdate),this.pendingAnimateUpdate=null),this.clickTimer&&(clearTimeout(this.clickTimer),this.clickTimer=null),this.detachEvents(),this.pointers=[],this.resetValues(),this.$viewport=null,this.$content=null,this.options={},this.events={})}}h.version="4.0.0-alpha.1",h.Plugins={};const c=(t,e)=>{let i=0;return function(...s){const n=(new Date).getTime();if(!(n-i{e.preventDefault(),e.stopPropagation(),this.carousel["slide"+("next"===t?"Next":"Prev")]()})),e}build(){this.$container||(this.$container=document.createElement("div"),this.$container.classList.add(this.option("classNames.main")),this.carousel.$element.appendChild(this.$container)),this.$next||(this.$next=this.createButton("next"),this.$container.appendChild(this.$next)),this.$prev||(this.$prev=this.createButton("prev"),this.$container.appendChild(this.$prev))}onRefresh(){const t=this.carousel.pages.length;t<=1||t>1&&this.carousel.elemDimWidth=t-1&&this.$next.setAttribute("disabled","")))}cleanup(){this.$prev&&this.$prev.remove(),this.$prev=null,this.$next&&this.$next.remove(),this.$next=null,this.$container&&this.$container.remove(),this.$container=null}attach(){this.carousel.on("refresh change",this.onRefresh)}detach(){this.carousel.off("refresh change",this.onRefresh),this.cleanup()}}d.defaults={prevTpl:'',nextTpl:'',classNames:{main:"carousel__nav",button:"carousel__button",next:"is-next",prev:"is-prev"}};class u{constructor(t){this.nav=t,this.selectedIndex=null,this.onNavReady=this.onNavReady.bind(this),this.onNavClick=this.onNavClick.bind(this),this.onNavCreateSlide=this.onNavCreateSlide.bind(this),this.onTargetChange=this.onTargetChange.bind(this)}onNavReady(){this.onTargetChange(!0),this.nav.on("createSlide",this.onNavCreateSlide),this.sync.on("change",this.onTargetChange),this.nav.Panzoom.on("click",this.onNavClick)}onNavCreateSlide(t,e){e.index===this.selectedIndex&&this.markSelectedSlide(e.index)}onNavClick(t,e){const i=e.target.closest(".carousel__slide");if(!i)return;e.preventDefault();const s=parseInt(i.dataset.index,10),n=this.sync.getPageforSlide(s);this.sync.page!==n&&this.sync.slideTo(n,{friction:this.nav.option("Sync.friction")}),this.markSelectedSlide(s)}markSelectedSlide(t){this.selectedIndex=t,[...this.nav.slides].filter((t=>t.$el&&t.$el.classList.remove("is-nav-selected")));const e=this.nav.slides[t];e&&e.$el&&e.$el.classList.add("is-nav-selected")}onTargetChange(t){const e=this.sync.pages[this.sync.page].indexes[0],i=this.nav.getPageforSlide(e);null!==i&&(this.nav.slideTo(i,!0===t?{friction:0}:{}),this.markSelectedSlide(e))}attach(){const e=this.nav.options.Sync;e&&(t(e)&&"object"==typeof e.with&&(this.sync=e.with),this.sync&&this.nav.on("ready",this.onNavReady))}detach(){this.sync&&(this.nav.off("ready",this.onNavReady),this.nav.off("createSlide",this.onNavCreate),this.sync.off("change",this.onTargetChange)),this.nav.Panzoom.off("click",this.onNavClick),this.sync=null,this.selectedIndex=null}}u.defaults={friction:.92};const p={Navigation:d,Dots:class{constructor(t){this.carousel=t,this.$list=null,this.events={change:this.onChange.bind(this),refresh:this.onRefresh.bind(this)}}buildList(){if(this.carousel.pages.length<2)return;const t=document.createElement("ol");return t.classList.add("carousel__dots"),t.addEventListener("click",(t=>{if(!("page"in t.target.dataset))return;t.preventDefault(),t.stopPropagation();const e=parseInt(t.target.dataset.page,10),i=this.carousel;e!==i.page&&(i.pages.length<3&&i.option("infinite")?i[0==e?"slidePrev":"slideNext"]():i.slideTo(e))})),this.$list=t,this.carousel.$element.appendChild(t),this.carousel.$element.classList.add("has-dots"),t}removeList(){this.$list&&(this.$list.parentNode.removeChild(this.$list),this.$list=null)}rebuildDots(){let t=this.$list;const e=!!t,i=this.carousel.pages.length;if(i<2)return void(e&&this.removeList());e||(t=this.buildList());const s=this.$list.children.length;if(s>i)for(let t=i;t{const i=t.code;let s;"Enter"===i||"NumpadEnter"===i?s=e:"ArrowRight"===i?s=e.nextSibling:"ArrowLeft"===i&&(s=e.previousSibling),s&&s.click()})),this.$list.appendChild(e)}this.setActiveDot()}}setActiveDot(){if(!this.$list)return;this.$list.childNodes.forEach((t=>{t.classList.remove("is-selected")}));const t=this.$list.childNodes[this.carousel.page];t&&t.classList.add("is-selected")}onChange(){this.setActiveDot()}onRefresh(){this.rebuildDots()}attach(){this.carousel.on(this.events)}detach(){this.removeList(),this.carousel.off(this.events),this.carousel=null}},Sync:u},g={slides:[],preload:0,slidesPerPage:"auto",initialPage:0,friction:.92,center:!0,infinite:!0,fill:!0,dragFree:!1,classNames:{viewport:"carousel__viewport",track:"carousel__track",slide:"carousel__slide",slideSelected:"is-selected"},l10n:{NEXT:"Next slide",PREV:"Previous slide",GOTO:"Go to slide %d"}};class m extends r{constructor(t,i={}){super(i=e(!0,{},g,i)),this.state="init",this.$element=t,t.Carousel=this,this.page=this.pageIndex=null,this.prevPage=this.prevPageIndex=null,this.slideNext=c(this.slideNext.bind(this),250),this.slidePrev=c(this.slidePrev.bind(this),250),this.attachPlugins(m.Plugins),this.trigger("init"),this.initLayout(),this.initSlides(),this.initPanzoom(),this.state="ready",this.trigger("ready")}initLayout(){if(!(this.$element instanceof HTMLElement))throw new Error("No root element provided");const t=this.option("classNames");this.$viewport=this.option("viewport")||this.$element.querySelector("."+t.viewport),this.$viewport||(this.$viewport=document.createElement("div"),this.$viewport.classList.add(t.viewport),this.$viewport.append(...this.$element.childNodes),this.$element.appendChild(this.$viewport)),this.$track=this.option("track")||this.$element.querySelector("."+t.track),this.$track||(this.$track=document.createElement("div"),this.$track.classList.add(t.track),this.$track.append(...this.$viewport.childNodes),this.$viewport.appendChild(this.$track))}initSlides(){this.slides=[];this.$viewport.querySelectorAll("."+this.option("classNames.slide")).forEach((t=>{const e={$el:t,isDom:!0};this.slides.push(e),this.trigger("createSlide",e,this.slides.length)})),Array.isArray(this.options.slides)&&(this.slides=e(!0,[...this.slides],this.options.slides))}updatePage(){let t=this.page;null===t&&(t=this.page=this.option("initialPage")),this.updateMetrics();const e=this.pages;e[t]||(t=e.length?e[e.length-1].index:0),this.slideTo(t,{friction:0})}updateBounds(){let t=this.Panzoom;const e=this.option("infinite"),i=this.option("infiniteX",e),s=this.option("infiniteY",e);i&&(t.boundX=null),s&&(t.boundY=null),i||s||(t.boundX={from:-1*this.pages[this.pages.length-1].left,to:-1*this.pages[0].left})}initPanzoom(){const t=e(!0,{},{content:this.$track,click:!1,doubleClick:!1,wheel:!1,pinchToZoom:!1,lockAxis:"x",textSelection:()=>this.option("textSelection",!1),panOnlyZoomed:()=>this.option("panOnlyZoomed",this.elemDimWidththis.trigger(`Panzoom.${t}`,...e),init:t=>this.Panzoom=t,updateMetrics:()=>{this.updatePage()},updateBounds:()=>{this.updateBounds()},beforeTransform:this.onBeforeTransform.bind(this),afterAnimate:this.onAfterAnimate.bind(this),touchEnd:this.onTouchEnd.bind(this)}},this.option("Panzoom"));new h(this.$viewport,t)}onBeforeTransform(){this.option("infiniteX",this.option("infinite"))&&this.manageInfiniteTrack(),this.manageSlideVisiblity()}onAfterAnimate(t,e){e||this.trigger("settle")}onTouchEnd(t){const e=this.option("dragFree");if(!e&&this.pages.length>1&&t.drag.elapsedTime<350&&Math.abs(t.drag.distanceY)<1&&Math.abs(t.drag.distanceX)>5)this[t.drag.distanceX<0?"slideNext":"slidePrev"]();else if(e){const[,t]=this.getPageFromPosition(-1*this.Panzoom.pan.x);this.setPage(t)}else this.slideToClosest()}manageInfiniteTrack(){if(!this.option("infiniteX",this.option("infinite"))||this.pages.length<2||this.elemDimWidtht.viewportDim.width&&(t.current.x-=t.contentDim.width,t.drag.firstPosition&&(t.drag.firstPosition.x-=t.contentDim.width),this.pageIndex=this.pageIndex+this.pages.length,e=!0),e&&"dragging"===t.state&&t.resetDragState(),e}manageSlideVisiblity(){const t=this.elemDimWidth,e=this.wrapDimWidth;let i=-1*this.Panzoom.current.x;Math.abs(i)<.1&&(i=0);const s=this.option("preload"),n=this.option("infiniteX",this.option("infinite")),o=parseFloat(window.getComputedStyle(this.$viewport,null).getPropertyValue("padding-left")),a=parseFloat(window.getComputedStyle(this.$viewport,null).getPropertyValue("padding-right"));this.slides.forEach((r=>{let l,h,c=0;l=i-o,h=i+e+a,l-=s*(e+o+a),h+=s*(e+o+a);const d=r.left+r.width>l&&r.leftl&&r.leftl&&r.lefti&&r.left<=i+e+a&&(c=0)):this.removeSlideEl(r),r.hasDiff=c}));let r=0,l=0;this.slides.forEach(((e,i)=>{let s=0;e.$el?(i!==r||e.hasDiff?s=l+e.hasDiff*t:l=0,e.$el.style.left=Math.abs(s)>.1?`${l+e.hasDiff*t}px`:"",r++):l+=e.width})),this.Panzoom.viewportDim.height=this.Panzoom.$content.clientHeight,this.markSelectedSlides()}markSelectedSlides(){const t=this.option("classNames.slideSelected"),e="aria-hidden";this.slides.forEach(((i,s)=>{const n=i.$el;if(!n)return;const o=this.pages[this.page];o&&o.indexes&&o.indexes.indexOf(s)>-1?(t&&!n.classList.contains(t)&&(n.classList.add(t),this.trigger("selectSlide",i)),n.removeAttribute(e)):(t&&n.classList.contains(t)&&(n.classList.remove(t),this.trigger("unselectSlide",i)),n.setAttribute(e,!0))}))}createSlideEl(t){if(!t)return;if(t.$el){if(parseInt(t.$el.dataset.index,10)!==t.index){t.$el.dataset.index=t.index;let e;t.$el.querySelectorAll("[data-lazy-src]").forEach((t=>{let e=t.dataset.lazySrc;t instanceof HTMLImageElement?t.src=e:t.style.backgroundImage=`url('${e}')`})),(e=t.$el.dataset.lazySrc)&&(t.$el.style.backgroundImage=`url('${e}')`),t.state="ready"}return}const e=document.createElement("div");e.dataset.index=t.index,e.classList.add(this.option("classNames.slide")),t.customClass&&e.classList.add(...t.customClass.split(" ")),t.html&&(e.innerHTML=t.html);const i=[];this.slides.forEach(((t,e)=>{t.$el&&i.push(e)}));const s=t.index;let n=null;if(i.length){let t=i.reduce(((t,e)=>Math.abs(e-s){const o=i.$el,a=i.isDom||!t?this.getSlideMetrics(o):t;i.index=n,i.width=a,i.left=e,t=a,e+=a,s.push(n)})),this.elemDimWidth=i(e),this.Panzoom.contentDim.width=this.elemDimWidth,this.wrapDimWidth=i(this.$viewport.getBoundingClientRect().width);var n=window.getComputedStyle(this.$viewport),o=parseFloat(n.paddingLeft)+parseFloat(n.paddingRight);this.wrapDimWidth=this.wrapDimWidth-o,window.visualViewport&&(this.wrapDimWidth*=window.visualViewport.scale),this.Panzoom.viewportDim.width=this.wrapDimWidth;const a=[],r=this.option("slidesPerPage");if(Number.isInteger(r)&&this.elemDimWidth>this.wrapDimWidth)for(let t=0;tthis.wrapDimWidth)&&(a.push({indexes:[],slides:[]}),t=a.length-1,e=0),e+=s.width,a[t].indexes.push(i),a[t].slides.push(s)}}const l=this.option("center"),h=this.option("fill");a.forEach(((t,e)=>{t.index=e,t.width=t.slides.reduce(((t,e)=>t+e.width),0),t.left=t.slides[0].left,l&&(t.left+=.5*(this.wrapDimWidth-t.width)*-1),h&&!this.option("infiniteX",this.option("infinite"))&&this.elemDimWidth>this.wrapDimWidth&&(t.left=Math.max(t.left,0),t.left=Math.min(t.left,this.elemDimWidth-this.wrapDimWidth))}));const c=[];let d;a.forEach((t=>{d&&t.left===d.left?(d.width+=t.width,d.slides=[...d.slides,...t.slides],d.indexes=[...d.indexes,...t.indexes]):(t.index=c.length,d=t,c.push(t))})),this.pages=c,this.manageSlideVisiblity(),this.trigger("refresh")}setPage(t,e){let i=0,s=parseInt(t,10)||0;const n=this.page,o=this.pageIndex,a=this.pages.length;if(t=(s%a+a)%a,this.option("infiniteX",this.option("infinite"))&&this.elemDimWidth>this.wrapDimWidth){const n=Math.floor(s/a)||0,o=this.elemDimWidth;if(i=this.pages[t].left+n*o,!0===e&&a>2){let t=-1*this.Panzoom.current.x;const e=i-o,n=i+o,r=Math.abs(t-i),l=Math.abs(t-e),h=Math.abs(t-n);he.indexes.indexOf(t)>-1));return e?e.index:null}getPageFromPosition(t){const e=this.pages.length;this.option("center")&&(t+=.5*this.wrapDimWidth);const i=Math.floor(t/this.elemDimWidth);t-=i*this.elemDimWidth;let s=this.slides.find((e=>e.leftt));if(s){let t=this.getPageforSlide(s.index);return[t,t+i*e]}return[0,0]}removeSlideEl(t){t.$el&&!t.isDom&&(this.trigger("deleteSlide",t),t.$el.remove(),t.$el=null)}destroy(){this.state="destroy",this.slides.forEach((t=>{this.removeSlideEl(t)})),this.Panzoom.destroy(),this.options={},this.events={}}}m.version="4.0.0-alpha.1",m.Plugins=p;const f=!("undefined"==typeof window||!window.document||!window.document.createElement);class v{constructor(t){this.fancybox=t,this.$wrap=null,this.state="init";for(const t of["onReady","onClosing","onKeydown"])this[t]=this[t].bind(this);this.events={ready:this.onReady,closing:this.onClosing,keydown:this.onKeydown}}onReady(){!0===this.fancybox.option("Thumbs.autoStart")&&this.initLayout()}onClosing(){this.Carousel&&this.Carousel.Panzoom.detachEvents()}onKeydown(t,e){e===t.option("Thumbs.key")&&this.toggle()}initLayout(){if("init"!==this.state)return;const t=this.getSlides();if(t.length{e.preventDefault(),this.fancybox[e.deltaY<0?"prev":"next"]()})),this.$wrap=i,this.state="ready"}getSlides(){const t=[];return this.fancybox.options.items.forEach((e=>{const i=e.thumb;i&&t.push({html:`
`,customClass:`has-thumb has-${e.type||"image"}`})})),t}toggle(){return"ready"===this.state?(this.Carousel.Panzoom.detachEvents(),this.$wrap.style.display="none",void(this.state="hidden")):"hidden"===this.state?(this.$wrap.style.display="",this.Carousel.Panzoom.attachEvents(),void(this.state="ready")):void this.initLayout()}cleanup(){this.Carousel&&(this.Carousel.destroy(),this.Carousel=null),this.$wrap&&(this.$wrap.remove(),this.$wrap=null),this.state="init"}attach(){this.fancybox.on(this.events)}detach(){this.fancybox.off(this.events),this.cleanup()}}v.defaults={autoStart:!0,minSlideCount:3,key:"t"};const y=t=>Object.entries(t).map((t=>t.map(encodeURIComponent).join("="))).join("&"),b={video:{autoplay:!0,ratio:16/9},youtube:{autohide:1,fs:1,rel:0,hd:1,wmode:"transparent",enablejsapi:1,html5:1},vimeo:{hd:1,show_title:1,show_byline:1,show_portrait:0,fullscreen:1},html5video:{tpl:'',format:""}};class x{constructor(t){this.fancybox=t;for(const t of["onPrepare","onCreateSlide","onDeleteSlide","onSelectSlide","onUnselectSlide","onRefresh","onMessage"])this[t]=this[t].bind(this);this.events={init:this.onPrepare,"Carousel.createSlide":this.onCreateSlide,"Carousel.deleteSlide":this.onDeleteSlide,"Carousel.selectSlide":this.onSelectSlide,"Carousel.unselectSlide":this.onUnselectSlide,"Carousel.refresh":this.onRefresh}}onPrepare(){this.fancybox.options.items.forEach((t=>{this.processType(t)}))}processType(t){if(t.html)return t.src=t.html,t.type="html",void delete t.html;const i=t.src||"";let s=t.type||this.fancybox.options.type,n=null;if(n=i.match(/(?:youtube\.com|youtu\.be|youtube\-nocookie\.com)\/(?:watch\?(?:.*&)?v=|v\/|u\/|embed\/?)?(videoseries\?list=(?:.*)|[\w-]{11}|\?listType=(?:.*)&list=(?:.*))(?:.*)/i)){const e=y(this.fancybox.option("Html.youtube")),i=encodeURIComponent(n[1]);t.videoId=i,t.src=`https://www.youtube-nocookie.com/embed/${i}?${e}`,t.thumb=t.thumb||`https://i.ytimg.com/vi/${i}/mqdefault.jpg`,t.vendor="youtube",s="video"}else if(n=i.match(/^.+vimeo.com\/(?:\/)?([\d]+)(.*)?/)){const e=y(this.fancybox.option("Html.vimeo")),i=encodeURIComponent(n[1]);t.videoId=i,t.src=`https://player.vimeo.com/video/${i}?${e}`,t.vendor="vimeo",s="video"}else(n=i.match(/(?:maps\.)?google\.([a-z]{2,3}(?:\.[a-z]{2})?)\/(?:(?:(?:maps\/(?:place\/(?:.*)\/)?\@(.*),(\d+.?\d+?)z))|(?:\?ll=))(.*)?/i))?(t.src=`//maps.google.${n[1]}/?ll=${(n[2]?n[2]+"&z="+Math.floor(n[3])+(n[4]?n[4].replace(/^\//,"&"):""):n[4]+"").replace(/\?/,"&")}&output=${n[4]&&n[4].indexOf("layer=c")>0?"svembed":"embed"}`,s="map"):(n=i.match(/(?:maps\.)?google\.([a-z]{2,3}(?:\.[a-z]{2})?)\/(?:maps\/search\/)(.*)/i))&&(t.src=`//maps.google.${n[1]}/maps?q=${n[2].replace("query=","q=").replace("api=1","")}&output=embed`,s="map");s||("#"===i.charAt(0)?s="inline":(n=i.match(/\.(mp4|mov|ogv|webm)((\?|#).*)?$/i))?(s="html5video",t.format=t.format||"video/"+("ogv"===n[1]?"ogg":n[1])):i.match(/(^data:image\/[a-z0-9+\/=]*,)|(\.(jp(e|g|eg)|gif|png|bmp|webp|svg|ico)((\?|#).*)?$)/i)?s="image":i.match(/\.(pdf)((\?|#).*)?$/i)&&(s="pdf")),t.type=s||this.fancybox.option("defaultType","image"),"html5video"!==s&&"video"!==s||(t.video=e({},this.fancybox.option("Html.video"),t.video),t.width&&t.height?t.ratio=parseFloat(t.width)/parseFloat(t.height):t.ratio=t.ratio||t.video.ratio)}loadInlineContent(t){let e;if(t.src instanceof HTMLElement)e=t.src;else if("string"==typeof t.src){const i=t.src.split("#",2),s=2===i.length&&""===i[0]?i[1]:i[0];e=document.getElementById(s)}if(e){if("clone"===t.type||e.$placeHolder){e=e.cloneNode(!0);let i=e.getAttribute("id");i=i?`${i}--clone`:`clone-${this.fancybox.id}-${t.index}`,e.setAttribute("id",i)}else{const t=document.createElement("div");t.classList.add("fancybox-placeholder"),e.parentNode.insertBefore(t,e),e.$placeHolder=t}this.fancybox.setContent(t,e)}else this.fancybox.setError(t,"{{ELEMENT_NOT_FOUND}}")}loadAjaxContent(t){const e=this.fancybox,i=new XMLHttpRequest;e.showLoading(t),i.onreadystatechange=function(){i.readyState===XMLHttpRequest.DONE&&"ready"===e.state&&(e.hideLoading(t),200===i.status?e.setContent(t,i.responseText):e.setError(t,404===i.status?"{{AJAX_NOT_FOUND}}":"{{AJAX_FORBIDDEN}}"))},i.open("GET",t.src),i.send(t.ajax||null),t.xhr=i}loadIframeContent(t){const e=this.fancybox,i=document.createElement("iframe");if(i.className="fancybox__iframe",i.setAttribute("id",`fancybox__iframe_${e.id}_${t.index}`),i.setAttribute("allow","autoplay; fullscreen"),i.setAttribute("scrolling","auto"),t.$iframe=i,"iframe"!==t.type||!1===t.preload)return i.setAttribute("src",t.src),void this.fancybox.setContent(t,i);e.showLoading(t);const s=document.createElement("div");s.style.visibility="hidden",this.fancybox.setContent(t,s),s.appendChild(i),i.onerror=()=>{e.setError(t,"{{IFRAME_ERROR}}")},i.onload=()=>{let n=!1;"yes"!==i.dataset.ready&&(i.dataset.ready="yes",n=!0),i.src.length&&(e.hideLoading(t),i.parentNode.style.visibility="",!1!==t.autoSize&&this.autoSizeIframe(i),n&&e.animateCSS(s,e.option("showClass")))},i.setAttribute("src",t.src)}setAspectRatio(t){let e=t.ratio;if(!e||!t.$content)return;t.$content.style.maxWidth="",t.$content.style.maxHeight="";let i=t.$content.offsetWidth,s=t.$content.offsetHeight,n=t.width,o=t.height;if(n&&o&&(i>n||s>o)){let t=Math.min(n/i,o/s);i*=t,s*=t}e{t.$el&&(t.$iframe&&!1!==t.autoSize&&this.autoSizeIframe(t.$iframe),t.ratio&&this.setAspectRatio(t))}))}onCreateSlide(t,e,i){if(i&&!i.isDom){switch(i.type){case"html":this.fancybox.setContent(i,i.src);break;case"html5video":this.fancybox.setContent(i,this.fancybox.option("Html.html5video.tpl").replace(/\{\{src\}\}/gi,i.src).replace("{{format}}",i.format||i.html5video&&i.html5video.format||"").replace("{{poster}}",i.thumb||""));break;case"inline":case"clone":this.loadInlineContent(i);break;case"ajax":this.loadAjaxContent(i);break;case"iframe":case"pdf":case"video":case"map":this.loadIframeContent(i)}i.ratio&&this.setAspectRatio(i)}}onSelectSlide(t,e,i){if("html5video"===i.type&&i.$el.querySelector("video").play(),"video"!==i.type||!i.$iframe||!i.$iframe.contentWindow)return;const s=()=>{if("done"!==i.state||!i.$iframe.contentWindow)return;let t;if(i.$iframe.isReady)return i.video&&i.video.autoplay&&(t="youtube"==i.vendor?{event:"command",func:"playVideo"}:{method:"play",value:"true"}),void(t&&i.$iframe.contentWindow.postMessage(JSON.stringify(t),"*"));"youtube"===i.vendor&&(t={event:"listening",id:i.$iframe.getAttribute("id")},i.$iframe.contentWindow.postMessage(JSON.stringify(t),"*")),i.poller=setTimeout(s,250)};s()}onUnselectSlide(t,e,i){if("html5video"===i.type){try{i.$el.querySelector("video").pause()}catch(t){}return}let s=!1;"vimeo"==i.vendor?s={method:"pause",value:"true"}:"youtube"===i.vendor&&(s={event:"command",func:"pauseVideo"}),s&&i.$iframe&&i.$iframe.contentWindow&&i.$iframe.contentWindow.postMessage(JSON.stringify(s),"*"),clearTimeout(i.poller)}onDeleteSlide(t,e,i){i.xhr&&(i.xhr.abort(),i.xhr=null),i.$iframe&&(i.$iframe.onload=i.$iframe.onerror=null,i.$iframe.src="//about:blank",i.$iframe=null);const s=i.$content;"inline"===i.type&&s&&(s.classList.remove("fancybox__content"),"none"!==s.style.display&&(s.style.display="none"),i.$closeButton&&(i.$closeButton.remove(),i.$closeButton=null));const n=s&&s.$placeHolder;n&&(n.parentNode.insertBefore(s,n),n.remove(),s.$placeHolder=null)}onMessage(t){try{let e=JSON.parse(t.data);if("https://player.vimeo.com"===t.origin){if("ready"===e.event)for(let e of document.getElementsByClassName("fancybox__iframe"))e.contentWindow===t.source&&(e.isReady=1)}else"https://www.youtube-nocookie.com"===t.origin&&"onReady"===e.event&&(document.getElementById(e.id).isReady=1)}catch(t){}}attach(){this.fancybox.on(this.events),window.addEventListener("message",this.onMessage,!1)}detach(){this.fancybox.off(this.events),window.removeEventListener("message",this.onMessage,!1)}}x.defaults=b;const w=function(t){const e=t.naturalWidth,i=t.naturalHeight,s=t.width,n=t.height,o=e/i,a={width:s,height:n};return o>s/n?a.height=s/o:a.width=n*o,a.left=.5*(s-a.width),a.right=e+a.left,a};class ${constructor(t){this.fancybox=t;for(const t of["onReady","onClosing","onPageChange","onCreateSlide","onRemoveSlide","onRefresh","onImageStatusChange"])this[t]=this[t].bind(this);this.events={ready:this.onReady,closing:this.onClosing,"Carousel.change":this.onPageChange,"Carousel.createSlide":this.onCreateSlide,"Carousel.deleteSlide":this.onRemoveSlide,"Carousel.refresh":this.onRefresh}}onReady(){const t=this.fancybox.getSlide();"ready"===t.state&&this.revealContent(t)}onCreateSlide(t,e,i){if(i.isDom||i.html||i.type&&"image"!==i.type)return;i.type="image",i.state="loading";const s=document.createElement("div");s.style.visibility="hidden";const n=document.createElement("img");n.onload=()=>this.onImageStatusChange(i),n.onerror=()=>this.onImageStatusChange(i),n.src=i.src,n.alt="",n.draggable=!1,n.classList.add("fancybox__image"),i.srcset&&n.setAttribute("srcset",i.srcset),i.sizes&&n.setAttribute("sizes",i.sizes),i.$image=n,s.appendChild(n),i.$el.dataset.imageFit=this.fancybox.option("Image.fit"),i.$el.style.display="none",i.$el.offsetHeight,i.$el.style.display="",this.fancybox.setContent(i,s),n.complete||n.error?(n.onload=n.onerror=null,this.onImageStatusChange(i)):n.complete||this.fancybox.showLoading(i)}initSlidePanzoom(t){t.Panzoom||(t.Panzoom=new h(t.$el,e(!0,this.fancybox.option("Image.Panzoom"),{content:t.$image,panOnlyZoomed:!0,click:!1,doubleClick:!1,wheel:!1,on:{afterAnimate:e=>{"zoomIn"===t.state&&(e.attachEvents(),this.fancybox.done(t)),this.handleCursor(t)},updateMetrics:()=>{this.handleCursor(t)},touchMove:()=>{if(this.fancybox.Carousel.Panzoom.lockAxis)return!1}}})),this.fancybox.option("Image.wheel")&&t.Panzoom.on("wheel",((t,e)=>this.onWheel(t,e))),this.fancybox.option("Image.click")&&t.Panzoom.on("click",((t,e)=>this.onClick(t,e))),"toggleZoom"===this.fancybox.option("Image.doubleClick")&&t.Panzoom.on("doubleClick",((t,e)=>{if(!e.target.closest(".fancybox__content"))return;e.preventDefault(),e.stopPropagation();const i=e.clientX-t.$content.getClientRects()[0].left,s=e.clientY-t.$content.getClientRects()[0].top;t.toggleZoom({x:i,y:s})})))}onImageStatusChange(t){this.fancybox.hideLoading(t);const e=t.$image;e.complete&&e.width&&e.height?(t.state="ready",this.updateDimensions(t),this.initSlidePanzoom(t),this.fancybox.trigger("load",t),this.revealContent(t)):this.fancybox.setError(t,"{{IMAGE_ERROR}}")}updateDimensions(t){if("cover"!==t.$el.dataset.imageFit){const e=t.$image,i=t.$content;i.style.maxWidth="";const s=e.offsetWidth-e.clientWidth;i.style.maxWidth=`${w(e).width+s}px`}this.handleCursor(t)}revealContent(t){null===this.fancybox.Carousel.prevPage&&t.index===this.fancybox.options.startIndex&&this.canZoom()?this.zoomIn():this.fancybox.revealContent(t)}canZoom(){const t=this.fancybox,e=t.$container;let i=!1;if(!t.option("Image.zoom"))return i;const s=t.getSlide(),n=s.$thumb;if(!n||"loading"===s.state)return i;e.style.pointerEvents="none";const o=n.getBoundingClientRect();if(this.fancybox.option("Image.ignoreCoveredThumbnail")){const t=document.elementFromPoint(o.left+1,o.top+1)===n,e=document.elementFromPoint(o.right-1,o.bottom-1)===n;i=t&&e}else i=document.elementFromPoint(o.left+.5*o.width,o.top+.5*o.height)===n;return e.style.pointerEvents="",i}getZoomInfo(t){const e=t.$thumb.getBoundingClientRect(),i=e.width,s=e.height,n=t.$content.getBoundingClientRect(),o=w(t.$image),a=o.width,r=o.height,l=n.top+.5*r-(e.top+.5*s),h=n.left+.5*a-(e.left+.5*i);let c=this.fancybox.option("Image.zoomOpacity");return"auto"===c&&(c=Math.abs(i/s-a/r)>.1),{top:l,left:h,scale:e.width/a,opacity:c}}zoomIn(){const t=this.fancybox;if("init"===t.Carousel.state)return;const e=t.getSlide(),i=e.Panzoom,{top:s,left:n,scale:o,opacity:a}=this.getZoomInfo(e);e.state="zoomIn",i.detachEvents(),t.trigger("reveal",e),i.panTo({x:-1*n,y:-1*s,scale:o,friction:0,ignoreBounds:!0}),e.$content.style.visibility="",!0===a&&i.on("afterTransform",(t=>{"zoomIn"!==e.state&&"zoomOut"!==e.state||(t.$content.style.opacity=Math.min(1,t.current.scale))})),i.panTo({x:0,y:0,scale:1,friction:this.fancybox.option("Image.zoomFriction")})}zoomOut(){const t=this.fancybox,e=t.getSlide(),i=e.Panzoom;if(!i)return;e.state="zoomOut",t.state="customClosing",e.$caption&&(e.$caption.style.visibility="hidden");let s=.75*this.fancybox.option("Image.zoomFriction");const n=()=>{const{top:t,left:n,scale:o}=this.getZoomInfo(e);i.panTo({x:-1*n,y:-1*t,scale:o,ignoreBounds:!0,friction:s}),s*=.98};window.addEventListener("scroll",n),i.on("afterAnimate",(()=>{window.removeEventListener("scroll",n),t.destroy()})),n()}handleCursor(t){const e=t.Panzoom,i=this.fancybox.option("Image.click"),s=t.$el.classList;if(e&&"toggleZoom"===i){s[e&&1===e.current.scale&&e.option("maxScale")-e.current.scale>.01?"add":"remove"](this.fancybox.option("Image.canZoomInClass"))}else"close"===i&&s.add(this.fancybox.option("Image.canZoomOutClass"))}onWheel(t,e){switch(this.fancybox.option("Image.wheel")){case"zoom":t.zoomWithWheel(e);break;case"close":this.fancybox.close();break;case"slide":this.fancybox[e.deltaY<0?"prev":"next"]()}e.preventDefault()}onClick(t,e){if(!(this.fancybox.Carousel.Panzoom.drag.distance>=6||this.fancybox.Carousel.Panzoom.lockAxis||"IMG"!=e.target.tagName&&!e.target.classList.contains("fancybox__content")))switch(e.preventDefault(),e.stopPropagation(),this.fancybox.option("Image.click")){case"toggleZoom":const i=e.clientX-t.$content.getClientRects()[0].left,s=e.clientY-t.$content.getClientRects()[0].top;t.toggleZoom({x:i,y:s});break;case"close":this.fancybox.close();break;case"next":this.fancybox.next();break;case"prev":this.fancybox.prev()}}onRefresh(t,e){e.slides.forEach((t=>{t.Panzoom&&this.updateDimensions(t)}))}onRemoveSlide(t,e,i){i.$image&&(i.$el.classList.remove(t.option("Image.canZoomInClass")),i.$image.onload=i.$image.onerror=null,i.$image.remove(),i.$image=null),i.Panzoom&&(i.Panzoom.destroy(),i.Panzoom=null),delete i.$el.dataset.imageFit}onClosing(t){t.Carousel.slides.forEach((t=>{t.$image&&(t.$image.onload=t.$image.onerror=null),t.Panzoom&&t.Panzoom.detachEvents()})),"closing"===this.fancybox.state&&this.canZoom()&&this.zoomOut()}onPageChange(t,e){const i=t.getSlide();e.slides.forEach((t=>{t.Panzoom&&"done"===t.state&&(t.index!==i.index?t.Panzoom.panTo({x:0,y:0,scale:1,friction:.8}):0===e.Panzoom.velocity.x&&this.revealContent(t))}))}attach(){this.fancybox.on(this.events)}detach(){this.fancybox.off(this.events)}}$.defaults={Panzoom:{maxScale:1},canZoomInClass:"can-zoom_in",canZoomOutClass:"can-zoom_out",zoom:!0,zoomOpacity:"auto",zoomFriction:.8,ignoreCoveredThumbnail:!1,click:"toggleZoom",doubleClick:"",wheel:"zoom",fit:"contain"};const C=function(){const t=window.location.hash.substr(1),e=t.split("-"),i=e.length>1&&/^\+?\d+$/.test(e[e.length-1])&&parseInt(e.pop(-1),10)||null;return{hash:t,slug:e.join("-"),index:i}};class P{constructor(t){this.fancybox=t,this.events={closing:this.onClosing.bind(this),"Carousel.ready Carousel.change":this.onChange.bind(this)},this.hasCreatedHistory=!1,this.origHash="",this.timer=null}onChange(t,e){this.timer&&clearTimeout(this.timer);const i=null===e.prevPage,s=t.getSlide(),n=s.$trigger&&s.$trigger.dataset,o=window.location.hash.substr(1);let a=!1;if(s.slug)a=s.slug;else{let t=n&&n.fancybox;t&&t.length&&"true"!==t&&(a=t+(e.slides.length>1?"-"+(s.index+1):""))}i&&(this.origHash=o!==a?this.origHash:""),a&&o!==a&&(this.timer=setTimeout((()=>{try{window.history[i?"pushState":"replaceState"]({},document.title,window.location.pathname+window.location.search+"#"+a),i&&(this.hasCreatedHistory=!0)}catch(t){}}),300))}onClosing(){if(this.timer&&clearTimeout(this.timer),!0!==this.hasSilentClose){if(!this.hasCreatedHistory)try{return void window.history.replaceState({},document.title,window.location.pathname+window.location.search+(this.origHash?"#"+this.origHash:""))}catch(t){}window.history.back()}}attach(t){t.on(this.events)}detach(t){t.off(this.events)}static startFromUrl(){if(P.Fancybox.getInstance())return;const{hash:t,slug:e,index:i}=C();if(!e)return;let s=document.querySelector(`[data-slug="${t}"]`);if(s&&s.dispatchEvent(new CustomEvent("click",{bubbles:!0,cancelable:!0})),P.Fancybox.getInstance())return;const n=document.querySelectorAll(`[data-fancybox="${e}"]`);n.length&&(null===i&&1===n.length?s=n[0]:i&&(s=n[i-1]),s&&s.dispatchEvent(new CustomEvent("click",{bubbles:!0,cancelable:!0})))}static onHashChange(){const{slug:t,index:e}=C(),i=P.Fancybox.getInstance();if(i){if(t){const s=i.Carousel;for(let e of s.slides)if(e.slug&&e.slug===t)return s.slideTo(e.index);const n=i.getSlide(),o=n.$trigger&&n.$trigger.dataset;if(o&&o.fancybox===t)return s.slideTo(e-1)}i.plugins.Hash.hasSilentClose=!0,i.close()}P.startFromUrl()}static onReady(){window.addEventListener("hashchange",P.onHashChange,!1),P.startFromUrl()}static create(){f&&window.requestAnimationFrame((()=>{P.onReady()}))}static destroy(){window.removeEventListener("hashchange",P.onHashChange,!1)}}const S={ScrollLock:class{constructor(t){this.fancybox=t,this.viewport=null,this.pendingUpdate=null;for(const t of["onReady","onResize","onTouchstart","onTouchmove"])this[t]=this[t].bind(this)}onReady(){const t=window.visualViewport;t&&(this.viewport=t,this.startY=0,t.addEventListener("resize",this.onResize),this.updateViewport()),window.addEventListener("touchstart",this.onTouchstart,{passive:!1}),window.addEventListener("touchmove",this.onTouchmove,{passive:!1})}onResize(){this.pendingUpdate||(this.pendingUpdate=requestAnimationFrame((()=>{this.pendingUpdate=null,this.updateViewport()})))}updateViewport(){const t=this.fancybox,e=this.viewport,i=e.scale,s=t.$container;if(!s)return;let n="",o="",a="";Math.abs(i-1)>.1&&(n=e.width*i+"px",o=e.height*i+"px",a=`translate3d(${e.offsetLeft}px, ${e.offsetTop}px, 0) scale(${1/i})`),s.style.width=n,s.style.height=o,s.style.transform=a,t.Carousel&&t.Carousel.updateMetrics()}onTouchstart(t){this.startY=t.touches?t.touches[0].screenY:t.screenY}onTouchmove(t){const e=this.startY,i=window.innerWidth/window.document.documentElement.clientWidth;if(t.touches.length>1||1!==i)return;const s=t.target,o=n(s);if(!o)return void t.preventDefault();const a=window.getComputedStyle(o),r=parseInt(a.getPropertyValue("height"),10),l=t.touches?t.touches[0].screenY:t.screenY,h=e<=l&&0===o.scrollTop,c=e>=l&&o.scrollHeight-o.scrollTop===r;(h||c)&&t.preventDefault()}cleanup(){this.pendingUpdate&&(cancelAnimationFrame(this.pendingUpdate),this.pendingUpdate=null);const t=this.viewport;t&&(t.removeEventListener("resize",this.onResize),this.viewport=null),window.removeEventListener("touchstart",this.onTouchstart,!1),window.removeEventListener("touchmove",this.onTouchmove,!1)}attach(){this.fancybox.on("initLayout",this.onReady)}detach(){this.fancybox.off("initLayout",this.onReady),this.cleanup()}},Thumbs:v,Html:x,Image:$,Hash:P};let E=0,L=null;class T extends r{constructor(t={}){L=function(){let t=!1;return document.createElement("div").focus({get preventScroll(){return t=!0,!1}}),t}(),super(function(t){const i=e(!0,{},t.items[t.startIndex||0]||{});return t.items.forEach((t=>{const e=t.$trigger;if(e){const i=e.dataset||{};t.src=i.src||e.getAttribute("href")||t.src,t.type=i.type||t.type}})),e(!0,{},T.defaults,t,i)}(t)),this.state="init",this.bindHandlers(),this.attachPlugins(T.Plugins),this.trigger("init"),!0===this.option("hideScrollbar")&&this.hideScrollbar(),this.initLayout(),this.initCarousel(this.getSlides()),this.attachEvents(),this.state="ready",this.trigger("ready"),this.$container.setAttribute("aria-hidden","false")}bindHandlers(){for(const t of["onMousedown","onKeydown","onClick","onCreateSlide","onSettle","onTouchMove","onTouchEnd","onTransform"])this[t]=this[t].bind(this)}attachEvents(){document.addEventListener("mousedown",this.onMousedown),document.addEventListener("keydown",this.onKeydown),this.$container.addEventListener("click",this.onClick)}detachEvents(){document.removeEventListener("mousedown",this.onMousedown),document.removeEventListener("keydown",this.onKeydown),this.$container.removeEventListener("click",this.onClick)}initLayout(){this.$root=this.option("parentEl")||document.body;let t=this.option("template.main");t&&(this.$root.insertAdjacentHTML("beforeend",this.localize(t)),this.$container=this.$root.querySelector(".fancybox__container")),this.$container||(this.$container=document.createElement("div"),this.$root.appendChild(this.$container)),this.$container.onscroll=()=>(this.$container.scrollLeft=0,!1),Object.entries({class:"fancybox__container",role:"dialog","aria-modal":"true","aria-hidden":"true","aria-label":this.localize("{{MODAL}}")}).forEach((t=>this.$container.setAttribute(...t))),this.option("animated")&&this.$container.classList.add("is-animated"),this.$backdrop=this.$container.querySelector(".fancybox__backdrop"),this.$backdrop||(this.$backdrop=document.createElement("div"),this.$backdrop.classList.add("fancybox__backdrop"),this.$container.appendChild(this.$backdrop)),this.$carousel=this.$container.querySelector(".fancybox__carousel"),this.$carousel||(this.$carousel=document.createElement("div"),this.$carousel.classList.add("fancybox__carousel"),this.$container.appendChild(this.$carousel)),this.$container.Fancybox=this,this.id=this.$container.getAttribute("id"),this.id||(this.id=this.options.id||++E,this.$container.setAttribute("id","fancybox-"+this.id));const e=this.options.mainClass;return e&&this.$container.classList.add(...e.split(" ")),document.documentElement.classList.add("with-fancybox"),this.trigger("initLayout"),this}getSlides(){const t=[...this.options.items];return t.forEach((t=>{!t.src&&t.$trigger&&t.$trigger instanceof HTMLImageElement&&(t.src=t.$trigger.currentSrc||t.$trigger.src);let e=t.$thumb;const i=t.$trigger&&t.$trigger.origTarget;i&&(e=i instanceof HTMLImageElement?i:i.querySelector("img")),!e&&t.$trigger&&(e=t.$trigger instanceof HTMLImageElement?t.$trigger:t.$trigger.querySelector("img")),t.$thumb=e||null;let s=t.thumb;!s&&t.$thumb&&(s=e.currentSrc||e.src),s||t.type&&"image"!==t.type||(s=t.src),t.thumb=s||null})),t}initCarousel(t){return new m(this.$carousel,e(!0,{},{classNames:{viewport:"fancybox__viewport",track:"fancybox__track",slide:"fancybox__slide"},textSelection:!0,preload:this.option("preload"),friction:.88,slides:t,initialPage:this.options.startIndex,infiniteX:this.option("infinite"),infiniteY:!0,l10n:this.option("l10n"),Dots:!1,Navigation:{classNames:{main:"fancybox__nav",button:"carousel__button",next:"is-next",prev:"is-prev"}},Panzoom:{panOnlyZoomed:()=>this.Carousel.pages.length<2&&!this.options.dragToClose,lockAxis:()=>{let t=this.Carousel.pages.length>1?"x":"";return this.options.dragToClose&&(t+="y"),t}},on:{"*":(t,...e)=>this.trigger(`Carousel.${t}`,...e),init:t=>this.Carousel=t,createSlide:this.onCreateSlide,settle:this.onSettle}},this.option("Carousel"))),this.options.dragToClose&&this.Carousel.Panzoom.on({touchMove:this.onTouchMove,afterTransform:this.onTransform,touchEnd:this.onTouchEnd}),this.trigger("initCarousel"),this}onCreateSlide(t,e){const i=e.caption;if(i){const t=document.createElement("div"),s=`fancybox__caption_${this.id}_${e.index}`;t.className="fancybox__caption",t.innerHTML=i,t.setAttribute("id",s),e.$caption=e.$el.appendChild(t),e.$el.classList.add("has-caption"),e.$el.setAttribute("aria-labelledby",s)}}onSettle(){this.focus()}onClick(t){if(t.defaultPrevented)return;if(t.target.closest(".fancybox__content"))return;if(window.getSelection().toString().length)return;const e=this.option("click");if("function"==typeof e)return e.call(this);switch(e){case"close":this.close();break;case"next":this.next()}}onTouchMove(){const t=this.getSlide().Panzoom;return!t||1===t.current.scale}onTouchEnd(t){const e=t.drag.distanceY;(Math.abs(e)>=150||Math.abs(e)>=35&&t.drag.elapsedTime<350)&&(this.option("hideClass")&&(this.getSlide().hideClass="fancybox-throwOut"+(t.current.y<0?"Up":"Down")),this.close())}onTransform(t){if(this.$backdrop){const e=Math.abs(t.current.y),i=e<1?"":Math.max(0,Math.min(1,1-e/t.$content.clientHeight*1.5));this.$container.style.setProperty("--fancybox-ts",i?"0s":""),this.$container.style.setProperty("--fancybox-opacity",i)}}onMousedown(){document.body.classList.add("is-using-mouse")}onKeydown(t){if(T.getInstance().id!==this.id)return;document.body.classList.remove("is-using-mouse");const e=t.key;if("Tab"===e&&this.option("trapFocus"))return void this.focus(t);const i=this.option("keyboard");if(!i||t.ctrlKey||t.altKey||t.shiftKey)return;const s=document.activeElement&&document.activeElement.classList,n=s&&s.contains("carousel__button");if("Escape"!==e&&!n){if(t.target.isContentEditable||-1!==["BUTTON","TEXTAREA","OPTION","INPUT","SELECT","VIDEO"].indexOf(t.target.nodeName))return}if(!1===this.trigger("keydown",e))return;"Enter"!==e&&t.preventDefault();const o=i[e];"function"==typeof this[o]&&this[o]()}getSlide(){const t=this.Carousel;if(!t)return null;const e=null===t.page?t.option("initialPage"):t.page,i=t.pages||[];return i.length&&i[e]?i[e].slides[0]:null}focus(t){const e=t=>{t.setActive?t.setActive():L?t.focus({preventScroll:!0}):t.focus()};t&&t.preventDefault();const i=this.getSlide().$el;i.tabIndex=0;const s=[].slice.call(this.$container.querySelectorAll(["a[href]","area[href]",'input:not([disabled]):not([type="hidden"]):not([aria-hidden])',"select:not([disabled]):not([aria-hidden])","textarea:not([disabled]):not([aria-hidden])","button:not([disabled]):not([aria-hidden])","iframe","object","embed","video","audio","[contenteditable]",'[tabindex]:not([tabindex^="-"]):not([disabled]):not([aria-hidden])'])),n=[];for(let t of s){if(t.classList&&t.classList.contains("fancybox__slide"))continue;const e=t.closest(".fancybox__slide");e?e===i&&n[t.hasAttribute("autofocus")?"unshift":"push"](t):n.push(t)}if(!n.length)return;this.Carousel.pages.length>1&&n.push(i);const o=n.indexOf(document.activeElement),a=t&&!t.shiftKey,r=t&&t.shiftKey;return a?o===n.length-1?e(n[0]):e(n[o+1]):r?e(0===o?n[n.length-1]:n[o-1]):o<0?e(n[0]):void 0}hideScrollbar(){if(!f)return;const t=window.innerWidth-document.documentElement.getBoundingClientRect().width,e="fancybox-style-noscroll";let i=document.getElementById(e);i||t&&(i=document.createElement("style"),i.id=e,i.type="text/css",i.innerHTML=`.compensate-for-scrollbar {padding-right: ${t}px;}`,document.getElementsByTagName("head")[0].appendChild(i),document.body.classList.add("compensate-for-scrollbar"))}revealScrollbar(){document.body.classList.remove("compensate-for-scrollbar");const t=document.getElementById("fancybox-style-noscroll");t&&t.remove()}clearContent(t){this.Carousel.trigger("deleteSlide",t),t.$content&&(t.$content.remove(),t.$content=null),t._className&&t.$el.classList.remove(t._className)}setContent(t,e,i={}){let s;const n=t.$el;if(e instanceof HTMLElement?["img","iframe","video","audio"].indexOf(e.nodeName.toLowerCase())>-1?(s=document.createElement("div"),s.appendChild(e)):s=e:(s=document.createElement("div"),s.innerHTML=e),!(s instanceof Element))throw new Error("Element expected");return t._className=`has-${i.suffix||t.type||"unknown"}`,n.classList.add(t._className),s.classList.add("fancybox__content"),"none"!==s.style.display&&"none"!==window.getComputedStyle(s).getPropertyValue("display")||(s.style.display="flex"),t.id&&s.setAttribute("id",t.id),t.$content=s,n.insertBefore(s,n.querySelector(".fancybox__caption")),this.manageCloseButton(t),"loading"!==t.state&&(this.trigger("afterLoad",t),this.revealContent(t)),s}manageCloseButton(t){const e=void 0===t.closeButton?this.option("closeButton"):t.closeButton;if(!e||this.$closeButton&&"inside"!==e)return;const i=document.createElement("button");i.classList.add("carousel__button","is-close"),i.setAttribute("title",this.options.l10n.CLOSE),i.innerHTML=this.option("template.closeButton"),i.addEventListener("click",(t=>this.close(t))),"inside"===e?(t.$closeButton&&t.$closeButton.remove(),t.$closeButton=t.$content.appendChild(i)):this.$closeButton=this.$container.insertBefore(i,this.$container.firstChild)}revealContent(t){if(this.trigger("reveal",t),t.$content.style.visibility="","error"===t.state||null!==this.Carousel.prevPage||t.index!==this.options.startIndex)return void this.done(t);t.state="animating";const e=void 0===t.showClass?this.option("showClass"):t.showClass;this.animateCSS(t.$content,e,(()=>{this.done(t)}))}animateCSS(t,e,i){if(t&&t.dispatchEvent(new CustomEvent("animationend",{bubbles:!0,cancelable:!0})),!t||!e)return void("function"==typeof i&&i());const s=function(n){n.currentTarget===this&&(t.classList.remove(e),t.removeEventListener("animationend",s),i&&i())};t.addEventListener("animationend",s),t.classList.add(e)}done(t){if("init"!==this.state&&"ready"!==this.state)return;t.state="done",this.trigger("done",t);const e=this.getSlide();e&&t.index===e.index&&this.option("autoFocus")&&this.focus()}setError(t,e){this.hideLoading(t),this.clearContent(t),t.state="error";const i=document.createElement("div");i.classList.add("fancybox-error"),i.innerHTML=this.localize(e||"

{{ERROR}}

"),this.setContent(t,i,{suffix:"error"})}showLoading(t){t.state="loading",t.$el.classList.add("is-loading");let e=t.$el.querySelector(".fancybox__spinner");e||(e=document.createElement("div"),e.classList.add("fancybox__spinner"),e.innerHTML=this.option("template.spinner"),e.addEventListener("click",(()=>{this.Carousel.Panzoom.velocity||this.close()})),t.$el.insertBefore(e,t.$el.firstChild))}hideLoading(t){const e=t.$el.querySelector(".fancybox__spinner");e&&e.remove(),t.$el.classList.remove("is-loading")}next(){const t=this.Carousel;t&&t.pages.length>1&&t.slideNext()}prev(){const t=this.Carousel;t&&t.pages.length>1&&t.slidePrev()}jumpTo(...t){this.Carousel&&this.Carousel.slideTo(...t)}close(t){if(t&&t.preventDefault(),["closing","customClosing","destroy"].indexOf(this.state)>-1)return;if(!1===this.trigger("shouldClose",t))return;if(this.state="closing",this.Carousel.Panzoom.destroy(),this.detachEvents(),this.trigger("closing",t),"destroy"===this.state)return;this.$container.setAttribute("aria-hidden","true"),this.$container.classList.add("is-closing");const e=this.getSlide();if(this.Carousel.slides.forEach((t=>{t.$content&&t.index!==e.index&&t.$content.remove()})),"closing"===this.state){const t=void 0===e.hideClass?this.option("hideClass"):e.hideClass;this.animateCSS(e.$content,t,(()=>{this.destroy()}))}}destroy(){this.state="destroy",this.trigger("destroy");const t=this.option("placeFocusBack")?this.getSlide().$trigger:null;if(this.Carousel.destroy(),this.detachPlugins(),this.Carousel=null,this.options={},this.events={},this.$container.remove(),this.$container=this.$backdrop=this.$carousel=null,t)if(L)t.focus({preventScroll:!0});else{const e=document.body.scrollTop;t.focus(),document.body.scrollTop=e}const e=T.getInstance();e?e.focus():(document.documentElement.classList.remove("with-fancybox"),document.body.classList.remove("is-using-mouse"),this.revealScrollbar())}static show(t,e={}){return e.items=t,new T(e)}static fromEvent(t,e={}){if(t.defaultPrevented)return;if(t.button&&0!==t.button)return;if(t.ctrlKey||t.metaKey||t.shiftKey)return;let i,s,n,o=!1,a=t.target;if((a.matches("[data-fancybox-trigger]")||(a=a.closest("[data-fancybox-trigger]")))&&(n=a&&a.dataset&&a.dataset.fancyboxTrigger),n){const t=document.querySelectorAll(`[data-fancybox="${n}"]`),e=parseInt(a.dataset.fancyboxIndex,10)||0;a=t.length?t[e]:a}a||(a=t.target),Array.from(T.openers.keys()).reverse().some((e=>{if(i=a,i.matches(e)||(i=i.closest(e)))return t.preventDefault(),s=e,!0})),s&&(e.target=i,i.origTarget=t.target,o=T.fromOpener(s,e));const r=T.getInstance();return r&&"ready"===r.state&&t.detail&&document.body.classList.add("is-using-mouse"),o}static fromOpener(t,i={}){let s=[],n=i.startIndex||0,o=(i=e({},i,T.openers.get(t))).groupAttr;void 0===o&&(o="data-fancybox");let a=i.target;if(o){if(a&&t&&t===`[${o}]`){const e=a.getAttribute(`${o}`);t=!(!e||!e.length||"true"===e)&&`[${o}='${e}']`}}else t=!1;if(t&&(s=[].slice.call(document.querySelectorAll(t))),!s.length&&a&&(s=[a]),!s.length)return!1;const r=T.getInstance();return!(r&&s.indexOf(r.options.$trigger)>-1)&&(n=a?s.indexOf(a):n,s=s.map((function(t){const e=["false","0","no","null"],i=["true","1","yes"],s=Object.assign({},t.dataset);for(let[t,n]of Object.entries(s))if("string"==typeof n||n instanceof String)if(e.indexOf(n)>-1)s[t]=!1;else if(i.indexOf(s[t])>-1)s[t]=!0;else try{s[t]=JSON.parse(n)}catch(e){s[t]=n}return delete s.fancybox,delete s.type,t instanceof Element&&(s.$trigger=t),s})),new T(e({},i,{items:s,startIndex:n,$trigger:a})))}static assign(t,e={}){if(f){if(!T.openers.size){document.body.addEventListener("click",T.fromEvent,!1);for(const[t,e]of Object.entries(T.Plugins||{}))e.Fancybox=this,"function"==typeof e.create&&e.create()}T.openers.set(t,e)}}static trash(t){T.openers.delete(t),T.openers.size||T.destroy()}static destroy(){T.openers=new Map,document.body.removeEventListener("click",T.fromEvent,!1)}static getInstance(t){let e=[];e=t?[document.getElementById(`fancybox-${t}`)]:Array.from(document.querySelectorAll(".fancybox__container")).reverse();for(const t of e){const e=t&&t.Fancybox;if(e&&"closing"!==e.state&&"customClosing"!==e.state)return e}return null}static close(t=!0){let e=null;for(;e=T.getInstance();)if(e.close(),!t)return}}T.version="4.0.0-alpha.1",T.defaults={hideScrollbar:!0,items:[],startIndex:0,preload:1,infinite:!0,showClass:"fancybox-zoomInUp",hideClass:"fancybox-fadeOut",animated:!0,keyboard:{Escape:"close",Delete:"close",Backspace:"close",PageUp:"next",PageDown:"prev",ArrowUp:"next",ArrowDown:"prev",ArrowRight:"next",ArrowLeft:"prev"},template:{closeButton:'',spinner:'',main:null},parentEl:null,mainClass:null,autoFocus:!0,trapFocus:!0,placeFocusBack:!0,click:"close",closeButton:"inside",dragToClose:!0,l10n:{CLOSE:"Close",NEXT:"Next",PREV:"Previous",MODAL:"You can close this modal content with the ESC key",ERROR:"Something Went Wrong, Please Try Again Later",IMAGE_ERROR:"Image Not Found",ELEMENT_NOT_FOUND:"HTML Element Not Found",AJAX_NOT_FOUND:"Error Loading AJAX : Not Found",AJAX_FORBIDDEN:"Error Loading AJAX : Forbidden",IFRAME_ERROR:"Error Loading Page"}},T.openers=new Map,T.Plugins=S,T.isMobile=()=>!!navigator&&/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent),T.assign("[data-fancybox]");export{m as Carousel,T as Fancybox,h as Panzoom}; +const t=t=>"object"==typeof t&&null!==t&&t.constructor===Object&&"[object Object]"===Object.prototype.toString.call(t),e=(...i)=>{let s=!1;"boolean"==typeof i[0]&&(s=i.shift());let n=i[0];if(!n||"object"!=typeof n)throw new Error("extendee must be an object");const o=i.slice(1),a=o.length;for(let i=0;i(t=parseFloat(t)||0,Math.round((t+Number.EPSILON)*e)/e),s="undefined"!=typeof window&&window.ResizeObserver||class{constructor(t){this.observables=[],this.boundCheck=this.check.bind(this),this.boundCheck(),this.callback=t}observe(t){if(this.observables.some((e=>e.el===t)))return;const e={el:t,size:{height:t.clientHeight,width:t.clientWidth}};this.observables.push(e)}unobserve(t){this.observables=this.observables.filter((e=>e.el!==t))}disconnect(){this.observables=[]}check(){const t=this.observables.filter((t=>{const e=t.el.clientHeight,i=t.el.clientWidth;if(t.size.height!==e||t.size.width!==i)return t.size.height=e,t.size.width=i,!0})).map((t=>t.el));t.length>0&&this.callback(t),window.requestAnimationFrame(this.boundCheck)}},n=function(t){return!(!t||t.classList.contains("carousel__track")||t===document.body)&&(function(t){const e=window.getComputedStyle(t)["overflow-y"],i=window.getComputedStyle(t)["overflow-x"],s=("scroll"===e||"auto"===e)&&Math.abs(t.scrollHeight-t.clientHeight)>1,n=("scroll"===i||"auto"===i)&&Math.abs(t.scrollWidth-t.clientWidth)>1;return s||n}(t)?t:n(t.parentNode))},o=t=>{let e=0;return t&&(e=t instanceof SVGElement?Math.min(t.getClientRects()[0].width,t.width.baseVal.value):Math.max(t.offsetWidth,t.scrollWidth)),e},a=t=>{let e=0;return t&&(e=t instanceof SVGElement?Math.min(t.getClientRects()[0].height,t.height.baseVal.value):Math.max(t.offsetHeight,t.scrollHeight)),e};class r{constructor(t={}){this.options=e(!0,{},t),this.plugins=[],this.events={};for(const t of["on","once"])for(const e of Object.entries(this.options[t]||{}))this[t](...e)}option(t,e){t=String(t);let i=(s=t,n=this.options,s.split(".").reduce((function(t,e){return t[e]}),n));var s,n;return"function"==typeof i&&(i=i.call(this,t)),void 0===i?e:i}localize(t,e=[]){return String(t).replace(/\{\{(\w+).?(\w+)?\}\}/g,((t,i,s)=>{let n=!1;if(n=s?this.option(`${i[0]+i.toLowerCase().substring(1)}.l10n.${s}`):this.option(`l10n.${i}`),!n)return i;for(let t=0;t{const e=this.events[t]=this.events[t]||[];-1==e.indexOf(i)&&e.push(i)})),this}once(e,i){if(t(e)){for(const t of Object.entries(e))this.once(...t);return this}return String(e).split(" ").forEach((t=>{const e=(...s)=>{this.off(t,e),i.call(this,this,...s)};e._=i,this.on(t,e)})),this}off(e,i){if(!t(e))return e.split(" ").forEach((t=>{const e=this.events[t];if(!e||!e.length)return this;let s=-1;for(let t=0,n=e.length;t{const t=this.$content.naturalWidth;this.maxScale=this.option("maxScale"),this.options.maxScale=function(){const e=this.contentDim.width;return t>0&&e>0?t/e*this.maxScale:this.maxScale},this.updateMetrics(),this.trigger(t>0?"load":"error")};!0!==this.$content.complete?(this.$content.onload=()=>t(),this.$content.onerror=()=>t()):t()}else this.updateMetrics()}resetValues(){this.viewportDim={top:0,left:0,width:0,height:0},this.contentDim={width:0,height:0},this.friction=this.option("friction"),this.current={x:0,y:0,scale:1},this.velocity={x:0,y:0,scale:0},this.pan={x:0,y:0,scale:1},this.drag={startTime:null,firstPosition:null,startPosition:null,startPoint:null,startDistance:null,endPosition:null,endPoint:null,distance:0,distanceX:0,distanceY:0,elapsedTime:0},this.lockAxis=null,this.pendingAnimateUpdate=null,this.pendingResizeUpdate=null,this.pointers=[]}updateMetrics(){let{top:t,left:e,width:i,height:s}=this.$viewport.getBoundingClientRect();const n=window.getComputedStyle(this.$viewport);i-=parseFloat(n.paddingLeft)+parseFloat(n.paddingRight),s-=parseFloat(n.paddingTop)+parseFloat(n.paddingBottom),this.viewportDim={top:t,left:e,width:i,height:s},this.contentDim={width:this.option("width",o(this.$content)),height:this.option("hidth",a(this.$content))},this.trigger("updateMetrics"),this.updateBounds()}updateBounds(t){const e={from:0,to:0},s={from:0,to:0};if(t||(t=this.velocity.scale?this.pan.scale:this.current.scale),t<1)return[e,s];const n=this.contentDim,o=this.viewportDim,a=n.width*t,r=n.height*t;return e.to=i(.5*(a-n.width)),n.width>o.width?e.from=i(e.to+o.width-a):e.from=i(-1*e.to),s.to=i(.5*(r-n.height)),n.height>o.height?s.from=i(s.to+o.height-r):s.from=i(-1*s.to),this.boundX=e,this.boundY=s,this.trigger("updateBounds",t),[this.boundX,this.boundY]}zoomIn(t){this.zoomTo(this.current.scale+(t||this.option("step")))}zoomOut(t){this.zoomTo(this.current.scale-(t||this.option("step")))}toggleZoom(t={}){const e=this.option("maxScale"),i=this.option("baseScale");this.zoomTo(this.current.scale>i+.5*(e-i)?i:e,t)}zoomTo(t,e={}){let{x:i=null,y:s=null,friction:n=this.option("zoomFriction")}=e;t||(t=this.option("baseScale")),t=Math.max(Math.min(t,this.option("maxScale")),this.option("minScale"));const o=this.contentDim.width,a=this.contentDim.height,r=o*this.current.scale,l=a*this.current.scale,h=o*t,c=a*t;null===i&&(i=.5*r),null===s&&(s=.5*l),!1===this.option("zoomInCentered")&&(i<.5*r&&(i=r),i>r&&(i=0),s<0&&(s=l),s>l&&(s=0));let d=(h-r)*((r>0?i/r:0)-.5),u=(c-l)*((l>0?s/l:0)-.5);Math.abs(d)<1&&(d=0),Math.abs(u)<1&&(u=0),i=this.current.x-d,s=this.current.y-u,this.panTo({x:i,y:s,scale:t,friction:n})}panTo(t){let{x:e=0,y:i=0,scale:s=this.current.scale,friction:n=this.option("friction"),ignoreBounds:o=!1}=t;if(n||this.stopMoving(),!0!==o){const[t,n]=this.updateBounds(s);t&&(e=Math.max(Math.min(e,t.to),t.from)),n&&(i=Math.max(Math.min(i,n.to),n.from))}return n>0&&(Math.abs(e-this.current.x)>.1||Math.abs(i-this.current.y)>.1||Math.abs(s-this.current.scale)>.1)?(this.state="panning",this.friction=n,this.pan={x:e,y:i,scale:s},this.velocity={x:(1/this.friction-1)*(e-this.current.x),y:(1/this.friction-1)*(i-this.current.y),scale:(1/this.friction-1)*(s-this.current.scale)},this.animate(),this):(this.pendingAnimateUpdate&&(cancelAnimationFrame(this.pendingAnimateUpdate),this.pendingAnimateUpdate=null),this.state="ready",this.stopMoving(),this.current={x:e,y:i,scale:s},this.transform(),this.handleCursor(),this.trigger("afterAnimate",!0),this)}animate(){if(!this.pendingAnimateUpdate){if(this.applyBoundForce(),this.applyDragForce(),this.velocity.x*=this.friction,this.velocity.y*=this.friction,this.velocity.scale*=this.friction,this.current.x+=this.velocity.x,this.current.y+=this.velocity.y,this.current.scale+=this.velocity.scale,"dragging"==this.state||"pointerdown"==this.state||Math.abs(this.velocity.x)>.05||Math.abs(this.velocity.y)>.05||Math.abs(this.velocity.scale)>.05)return this.transform(),void(this.pendingAnimateUpdate=requestAnimationFrame((()=>{this.pendingAnimateUpdate=null,this.animate()})));this.current.x=i(this.current.x+this.velocity.x/(1/this.friction-1)),this.current.y=i(this.current.y+this.velocity.y/(1/this.friction-1)),Math.abs(this.current.x)<.5&&(this.current.x=0),Math.abs(this.current.y)<.5&&(this.current.y=0),this.current.scale=i(this.current.scale+this.velocity.scale/(1/this.friction-1),1e4),Math.abs(this.current.scale-1)<.01&&(this.current.scale=1),this.state="ready",this.stopMoving(),this.transform(),this.handleCursor(),this.trigger("afterAnimate")}}handleCursor(){const t=this.option("draggableClass");t&&this.option("touch")&&(this.contentDim.width<=this.viewportDim.width&&1==this.option("panOnlyZoomed")&&this.current.scale<=this.option("baseScale")?this.$viewport.classList.remove(t):this.$viewport.classList.add(t))}isMoved(){return 0!==this.current.x||0!==this.current.y||1!==this.current.scale||this.velocity.x>0||this.velocity.y>0||this.velocity.scale>0}stopMoving(){this.velocity={x:0,y:0,scale:0}}transform(){this.trigger("beforeTransform");const t=i(this.current.x,100),e=i(this.current.y,100),s=i(this.current.scale,1e5);Math.abs(t)<=.1&&Math.abs(e)<=.1&&Math.abs(s-1)<=.1?this.$content.style.transform="":this.$content.style.transform=`translate3d(${t}px, ${e}px, 0px) scale(${s})`,this.trigger("afterTransform")}applyBoundForce(){if("decel"!==this.state)return;const t={x:0,y:0},e=this.option("bounceForce"),i=this.boundX,s=this.boundY;let n,o,a,r;if(i&&(n=this.current.xi.to),s&&(a=this.current.ys.to),n||o){const s=(n?i.from:i.to)-this.current.x;let a=s*e;const r=this.current.x+(this.velocity.x+a)/(1/this.friction-1);n&&ri.to||(a=s*e-this.velocity.x),t.x=a}if(a||r){const i=(a?s.from:s.to)-this.current.y;let n=i*e;const o=this.current.y+(this.velocity.y+n)/(1/this.friction-1);a&&os.to||(n=i*e-this.velocity.y),t.y=n}this.velocity.x+=t.x,this.velocity.y+=t.y}applyDragForce(){"dragging"===this.state&&(this.velocity={x:(1/this.friction-1)*(this.drag.endPosition.x-this.current.x),y:(1/this.friction-1)*(this.drag.endPosition.y-this.current.y),scale:(1/this.friction-1)*(this.drag.endPosition.scale-this.current.scale)})}attachEvents(){const t=this.$viewport;this.resizeObserver=this.resizeObserver||new s((t=>{this.pendingResizeUpdate=this.pendingResizeUpdate||setTimeout((()=>{this.pendingResizeUpdate=null;let e=t&&t[0].contentRect;!e&&this.$viewport&&(e=this.$viewport.getBoundingClientRect()),e&&(Math.abs(e.width-this.viewportDim.width)>1||Math.abs(e.height-this.viewportDim.height)>1)&&this.updateMetrics()}),50)})),this.resizeObserver.observe(t),t.addEventListener("click",this.onClick,{passive:!1}),t.addEventListener("wheel",this.onWheel,{passive:!1}),this.option("touch")&&(window.PointerEvent?(t.addEventListener("pointerdown",this.onPointerDown,{passive:!1}),t.addEventListener("pointermove",this.onPointerMove,{passive:!1}),t.addEventListener("pointerup",this.onPointerUp),t.addEventListener("pointercancel",this.onPointerUp)):(t.addEventListener("touchstart",this.onPointerDown,{passive:!1}),t.addEventListener("touchmove",this.onPointerMove,{passive:!1}),t.addEventListener("touchend",this.onPointerUp),t.addEventListener("touchcancel",this.onPointerUp),t.addEventListener("mousedown",this.onPointerDown)))}detachEvents(){this.resizeObserver&&this.resizeObserver.disconnect(),this.resizeObserver=null,this.pendingResizeUpdate&&(clearTimeout(this.pendingResizeUpdate),this.pendingResizeUpdate=null);const t=this.$viewport;window.PointerEvent?(t.removeEventListener("pointerdown",this.onPointerDown,{passive:!1}),t.removeEventListener("pointermove",this.onPointerMove,{passive:!1}),t.removeEventListener("pointerup",this.onPointerUp),t.removeEventListener("pointercancel",this.onPointerUp)):(t.removeEventListener("touchstart",this.onPointerDown,{passive:!1}),t.removeEventListener("touchmove",this.onPointerMove,{passive:!1}),t.removeEventListener("touchend",this.onPointerUp),t.removeEventListener("touchcancel",this.onPointerUp),t.removeEventListener("mousedown",this.onPointerDown)),t.removeEventListener("click",this.onClick,{passive:!1}),t.removeEventListener("wheel",this.onWheel,{passive:!1})}copyPointer(t){return{pointerId:t.pointerId,clientX:t.clientX,clientY:t.clientY}}findPointerIndex(t){let e=this.pointers.length;for(;e--;)if(this.pointers[e].pointerId===t.pointerId)return e;return-1}addPointer(t){let e=0;if(t.touches&&t.touches.length)for(const i of t.touches)i.pointerId=e++,this.addPointer(i);else e=this.findPointerIndex(t),e>-1&&this.pointers.splice(e,1),this.pointers.push(t)}removePointer(t){if(t.touches){for(;this.pointers.length;)this.pointers.pop();return}const e=this.findPointerIndex(t);e>-1&&this.pointers.splice(e,1)}getMiddlePoint(){let t=[...this.pointers];t=t.sort(((t,e)=>e.pointerId-t.pointerId));const e=t.shift(),i=t.shift();return i?{clientX:.5*(e.clientX-i.clientX)+i.clientX,clientY:.5*(e.clientY-i.clientY)+i.clientY}:{clientX:e?e.clientX:0,clientY:e?e.clientY:0}}getDistance(t,e){if(!(t=(t=t||[...this.pointers]).slice())||t.length<2)return 0;const i=(t=t.sort(((t,e)=>e.pointerId-t.pointerId))).shift(),s=t.shift(),n=Math.abs(s.clientX-i.clientX);if("x"===e)return n;const o=Math.abs(s.clientY-i.clientY);return"y"===e?o:Math.sqrt(Math.pow(n,2)+Math.pow(o,2))}resetDragState(){const{left:t,top:i}=this.$content.getClientRects()[0],s=this.getMiddlePoint(),n={top:i,left:t,x:this.current.x,y:this.current.y,scale:this.current.scale};e(this.drag,{startPosition:e({},n),startPoint:e({},s),startDistance:this.getDistance(),endPosition:e({},n),endPoint:e({},s),distance:0,distanceX:0,distanceY:0}),"pointerdown"===this.state&&(this.lockAxis=null,this.drag.startTime=new Date,this.drag.firstPosition=Object.assign({},n)),this.stopMoving(),this.friction=this.option("friction")}onPointerDown(t){if(t&&!(t.button&&t.button>0))if(this.option("panOnlyZoomed")&&this.velocity.scale)t.preventDefault();else{if(this.resetDragState(),!this.pointers.length){if(-1!==["BUTTON","TEXTAREA","OPTION","INPUT","SELECT","VIDEO"].indexOf(t.target.nodeName))return;if(this.option("textSelection")&&((t,e,i)=>{const s=t.childNodes,n=document.createRange();for(let t=0;t=a.left&&i>=a.top&&e<=a.right&&i<=a.bottom)return o}return!1})(t.target,t.clientX,t.clientY))return;if(n(t.target))return}if((()=>{const t=window.getSelection?window.getSelection():document.selection;t&&t.rangeCount&&t.getRangeAt(0).getClientRects().length&&(t.removeAllRanges?t.removeAllRanges():t.empty&&t.empty())})(),this.pointers.length>1||this.pointers.length&&this.lockAxis)t.preventDefault();else if(!1!==this.trigger("touchStart",t))if(t.preventDefault(),this.state="pointerdown",this.addPointer(this.copyPointer(t)),this.resetDragState(),window.PointerEvent)try{t.target.setPointerCapture(t.pointerId)}catch(t){}else document.addEventListener("mousemove",this.onPointerMove,{passive:!1}),document.addEventListener("mouseup",this.onPointerUp,{passive:!1})}}onPointerMove(t){if(t.targetTouches&&t.targetTouches.length>1)return;if("pointerdown"!==this.state&&"dragging"!==this.state)return;if(0==this.trigger("touchMove",t))return void t.preventDefault();if(this.addPointer(this.copyPointer(t)),this.pointers.length>1&&!1===this.option("pinchToZoom"))return;if(1==this.option("panOnlyZoomed")&&this.current.scale===this.option("baseScale")&&this.pointers.length<2)return void t.preventDefault();const e=this.getMiddlePoint(),i=[e,this.drag.startPoint];this.drag.distance=this.getDistance(i);const s=this.events.click&&this.events.click.length||this.events.doubleClick&&this.events.doubleClick.length||this.option.click||this.option.doubleClick;if(this.drag.distance<6&&(s||this.option("lockAxis")&&!this.lockAxis))return;if("pointerdown"==this.state&&(this.state="dragging"),"dragging"!==this.state)return;const n=this.option("lockAxis");if(!this.lockAxis&&n)if("xy"===n){const t=this.getDistance(i,"x"),e=this.getDistance(i,"y"),s=Math.abs(180*Math.atan2(e,t)/Math.PI);this.lockAxis=s>45&&s<135?"y":"x"}else this.lockAxis=n;t.preventDefault(),t.stopPropagation(),this.$viewport.classList.add(this.option("draggingClass")),this.animate();let o=this.current.scale,a=0,r=0;if(this.current.scale===this.option("baseScale")&&"y"===this.lockAxis||(a=e.clientX-this.drag.startPoint.clientX),this.current.scale===this.option("baseScale")&&"x"===this.lockAxis||(r=e.clientY-this.drag.startPoint.clientY),this.drag.endPosition.x=this.drag.startPosition.x+a,this.drag.endPosition.y=this.drag.startPosition.y+r,this.pointers.length>1){this.drag.middlePoint=e,o=this.drag.startPosition.scale*this.getDistance()/this.drag.startDistance,o=Math.max(Math.min(o,2*this.option("maxScale")),.5*this.option("minScale"));const t=this.$content.width,i=this.$content.height,s=t*this.drag.startPosition.scale,n=i*this.drag.startPosition.scale,a=i*o,r=(t*o-s)*((this.drag.startPoint.clientX-this.drag.startPosition.left)/s-.5),l=(a-n)*((this.drag.startPoint.clientY-this.drag.startPosition.top)/n-.5);this.drag.endPosition.x-=r,this.drag.endPosition.y-=l,this.drag.endPosition.scale=o,this.updateBounds(o)}this.applyDragResistance()}onPointerUp(t){if(this.removePointer(t),window.PointerEvent)try{t.target.releasePointerCapture(t.pointerId)}catch(t){}else document.removeEventListener("mousemove",this.onPointerMove,{passive:!1}),document.removeEventListener("mouseup",this.onPointerUp,{passive:!1});if(this.pointers.length>0)return t.preventDefault(),void this.resetDragState();if("pointerdown"!==this.state&&"dragging"!==this.state)return;this.$viewport.classList.remove(this.option("draggingClass"));const{top:i,left:s}=this.$content.getClientRects()[0],n=this.drag;if(e(!0,n,{elapsedTime:new Date-n.startTime,distanceX:n.endPosition.x-n.firstPosition.x,distanceY:n.endPosition.y-n.firstPosition.y,endPosition:{top:i,left:s}}),n.distance=Math.sqrt(Math.pow(n.distanceX,2)+Math.pow(n.distanceY,2)),this.state="decel",this.friction=this.option("decelFriction"),this.pan={x:this.current.x+this.velocity.x/(1/this.friction-1),y:this.current.y+this.velocity.y/(1/this.friction-1),scale:this.current.scale+this.velocity.scale/(1/this.friction-1)},!1===this.trigger("touchEnd",t))return;if("decel"!==this.state)return;const o=this.option("minScale");if(this.current.scale.01){const t={friction:.64};n.middlePoint&&(t.x=n.middlePoint.clientX-s,t.y=n.middlePoint.clientY-i),this.zoomTo(a,t)}}applyDragResistance(){const t=this.boundX,e=this.boundY;let i,s,n,o;if(t&&(i=this.drag.endPosition.xt.to),e&&(n=this.drag.endPosition.ye.to),i||s){const e=i?t.from:t.to,s=this.drag.endPosition.x-e;this.drag.endPosition.x=e+.3*s}if(n||o){const t=n?e.from:e.to,i=this.drag.endPosition.y-t;this.drag.endPosition.y=t+.3*i}}onWheel(t){!1!==this.trigger("wheel",t)&&"zoom"==this.option("wheel",t)&&this.zoomWithWheel(t)}zoomWithWheel(t){void 0===this.changedDelta&&(this.changedDelta=0);let e=this.current.scale;const i=Math.max(-1,Math.min(1,-t.deltaY||-t.deltaX||t.wheelDelta||-t.detail));if(i<0&&e<=this.option("minScale")||i>0&&e>=this.option("maxScale")){if(this.changedDelta+=Math.abs(i),this.changedDelta>this.option("wheelLimit"))return}else this.changedDelta=0;e=e*(100+i*this.option("wheelFactor"))/100,t.preventDefault();const{top:s,left:n}=this.$content.getClientRects()[0],o=t.clientX-n,a=t.clientY-s;this.zoomTo(e,{x:o,y:a})}onClick(t){if(t.defaultPrevented)return;if(window.getSelection().toString().length)return t.stopPropagation(),void t.stopImmediatePropagation();if(this.drag.startPosition&&this.drag.endPosition&&(Math.abs(this.drag.endPosition.top-this.drag.startPosition.top)>1||Math.abs(this.drag.endPosition.left-this.drag.startPosition.left)>1))return t.stopPropagation(),void t.stopImmediatePropagation();if(this.drag.distance>(this.lockAxis?6:1))return t.preventDefault(),t.stopPropagation(),void t.stopImmediatePropagation();let e=null,i=null;void 0!==t.clientX&&void 0!==t.clientY&&(e=t.clientX-this.$content.getClientRects()[0].left,i=t.clientY-this.$content.getClientRects()[0].top);let s=this.options.doubleClick;if(!s&&this.events.doubleClick&&this.events.doubleClick.length&&(s=!0),s){if(!this.clickTimer)return this.lastClickEvent=t,void(this.clickTimer=setTimeout((()=>{this.clickTimer=null,!1!==this.trigger("click",t)&&"toggleZoom"===this.option("click")&&this.toggleZoom({x:e,y:i})}),this.option("clickDelay")));this.getDistance([t,this.lastClickEvent])>=6||(clearTimeout(this.clickTimer),this.clickTimer=null,!1!==this.trigger("doubleClick",t)&&"toggleZoom"===this.option("doubleClick")&&this.toggleZoom({x:e,y:i}))}else{if(!1===this.trigger("click",t))return;"toggleZoom"===this.option("click")&&this.toggleZoom({x:e,y:i})}}destroy(){"destroy"!==this.state&&(this.state="destroy",this.$viewport.classList.remove("not-selectable"),this.$content instanceof HTMLImageElement&&!this.$content.complete&&(this.$content.onload=null,this.$content.onerror=null),this.pendingAnimateUpdate&&(cancelAnimationFrame(this.pendingAnimateUpdate),this.pendingAnimateUpdate=null),this.clickTimer&&(clearTimeout(this.clickTimer),this.clickTimer=null),this.detachEvents(),this.pointers=[],this.resetValues(),this.$viewport=null,this.$content=null,this.options={},this.events={})}}h.version="4.0.0-alpha.1",h.Plugins={};const c=(t,e)=>{let i=0;return function(...s){const n=(new Date).getTime();if(!(n-i{e.preventDefault(),e.stopPropagation(),this.carousel["slide"+("next"===t?"Next":"Prev")]()})),e}build(){this.$container||(this.$container=document.createElement("div"),this.$container.classList.add(this.option("classNames.main")),this.carousel.$element.appendChild(this.$container)),this.$next||(this.$next=this.createButton("next"),this.$container.appendChild(this.$next)),this.$prev||(this.$prev=this.createButton("prev"),this.$container.appendChild(this.$prev))}onRefresh(){const t=this.carousel.pages.length;t<=1||t>1&&this.carousel.elemDimWidth=t-1&&this.$next.setAttribute("disabled","")))}cleanup(){this.$prev&&this.$prev.remove(),this.$prev=null,this.$next&&this.$next.remove(),this.$next=null,this.$container&&this.$container.remove(),this.$container=null}attach(){this.carousel.on("refresh change",this.onRefresh)}detach(){this.carousel.off("refresh change",this.onRefresh),this.cleanup()}}d.defaults={prevTpl:'',nextTpl:'',classNames:{main:"carousel__nav",button:"carousel__button",next:"is-next",prev:"is-prev"}};class u{constructor(t){this.nav=t,this.selectedIndex=null,this.onNavReady=this.onNavReady.bind(this),this.onNavClick=this.onNavClick.bind(this),this.onNavCreateSlide=this.onNavCreateSlide.bind(this),this.onTargetChange=this.onTargetChange.bind(this)}onNavReady(){this.onTargetChange(!0),this.nav.on("createSlide",this.onNavCreateSlide),this.sync.on("change",this.onTargetChange),this.nav.Panzoom.on("click",this.onNavClick)}onNavCreateSlide(t,e){e.index===this.selectedIndex&&this.markSelectedSlide(e.index)}onNavClick(t,e){const i=e.target.closest(".carousel__slide");if(!i)return;e.preventDefault();const s=parseInt(i.dataset.index,10),n=this.sync.getPageforSlide(s);this.sync.page!==n&&this.sync.slideTo(n,{friction:this.nav.option("Sync.friction")}),this.markSelectedSlide(s)}markSelectedSlide(t){this.selectedIndex=t,[...this.nav.slides].filter((t=>t.$el&&t.$el.classList.remove("is-nav-selected")));const e=this.nav.slides[t];e&&e.$el&&e.$el.classList.add("is-nav-selected")}onTargetChange(t){const e=this.sync.pages[this.sync.page].indexes[0],i=this.nav.getPageforSlide(e);null!==i&&(this.nav.slideTo(i,!0===t?{friction:0}:{}),this.markSelectedSlide(e))}attach(){const e=this.nav.options.Sync;e&&(t(e)&&"object"==typeof e.with&&(this.sync=e.with),this.sync&&this.nav.on("ready",this.onNavReady))}detach(){this.sync&&(this.nav.off("ready",this.onNavReady),this.nav.off("createSlide",this.onNavCreate),this.sync.off("change",this.onTargetChange)),this.nav.Panzoom.off("click",this.onNavClick),this.sync=null,this.selectedIndex=null}}u.defaults={friction:.92};const p={Navigation:d,Dots:class{constructor(t){this.carousel=t,this.$list=null,this.events={change:this.onChange.bind(this),refresh:this.onRefresh.bind(this)}}buildList(){if(this.carousel.pages.length<2)return;const t=document.createElement("ol");return t.classList.add("carousel__dots"),t.addEventListener("click",(t=>{if(!("page"in t.target.dataset))return;t.preventDefault(),t.stopPropagation();const e=parseInt(t.target.dataset.page,10),i=this.carousel;e!==i.page&&(i.pages.length<3&&i.option("infinite")?i[0==e?"slidePrev":"slideNext"]():i.slideTo(e))})),this.$list=t,this.carousel.$element.appendChild(t),this.carousel.$element.classList.add("has-dots"),t}removeList(){this.$list&&(this.$list.parentNode.removeChild(this.$list),this.$list=null)}rebuildDots(){let t=this.$list;const e=!!t,i=this.carousel.pages.length;if(i<2)return void(e&&this.removeList());e||(t=this.buildList());const s=this.$list.children.length;if(s>i)for(let t=i;t{const i=t.code;let s;"Enter"===i||"NumpadEnter"===i?s=e:"ArrowRight"===i?s=e.nextSibling:"ArrowLeft"===i&&(s=e.previousSibling),s&&s.click()})),this.$list.appendChild(e)}this.setActiveDot()}}setActiveDot(){if(!this.$list)return;this.$list.childNodes.forEach((t=>{t.classList.remove("is-selected")}));const t=this.$list.childNodes[this.carousel.page];t&&t.classList.add("is-selected")}onChange(){this.setActiveDot()}onRefresh(){this.rebuildDots()}attach(){this.carousel.on(this.events)}detach(){this.removeList(),this.carousel.off(this.events),this.carousel=null}},Sync:u},g={slides:[],preload:0,slidesPerPage:"auto",initialPage:0,friction:.92,center:!0,infinite:!0,fill:!0,dragFree:!1,classNames:{viewport:"carousel__viewport",track:"carousel__track",slide:"carousel__slide",slideSelected:"is-selected"},l10n:{NEXT:"Next slide",PREV:"Previous slide",GOTO:"Go to slide %d"}};class m extends r{constructor(t,i={}){super(i=e(!0,{},g,i)),this.state="init",this.$element=t,t.Carousel=this,this.page=this.pageIndex=null,this.prevPage=this.prevPageIndex=null,this.slideNext=c(this.slideNext.bind(this),250),this.slidePrev=c(this.slidePrev.bind(this),250),this.attachPlugins(m.Plugins),this.trigger("init"),this.initLayout(),this.initSlides(),this.initPanzoom(),this.state="ready",this.trigger("ready")}initLayout(){if(!(this.$element instanceof HTMLElement))throw new Error("No root element provided");const t=this.option("classNames");this.$viewport=this.option("viewport")||this.$element.querySelector("."+t.viewport),this.$viewport||(this.$viewport=document.createElement("div"),this.$viewport.classList.add(t.viewport),this.$viewport.append(...this.$element.childNodes),this.$element.appendChild(this.$viewport)),this.$track=this.option("track")||this.$element.querySelector("."+t.track),this.$track||(this.$track=document.createElement("div"),this.$track.classList.add(t.track),this.$track.append(...this.$viewport.childNodes),this.$viewport.appendChild(this.$track))}initSlides(){this.slides=[];this.$viewport.querySelectorAll("."+this.option("classNames.slide")).forEach((t=>{const e={$el:t,isDom:!0};this.slides.push(e),this.trigger("createSlide",e,this.slides.length)})),Array.isArray(this.options.slides)&&(this.slides=e(!0,[...this.slides],this.options.slides))}updatePage(){let t=this.page;null===t&&(t=this.page=this.option("initialPage")),this.updateMetrics();const e=this.pages;e[t]||(t=e.length?e[e.length-1].index:0),this.slideTo(t,{friction:0})}updateBounds(){let t=this.Panzoom;const e=this.option("infinite"),i=this.option("infiniteX",e),s=this.option("infiniteY",e);i&&(t.boundX=null),s&&(t.boundY=null),i||s||(t.boundX={from:-1*this.pages[this.pages.length-1].left,to:-1*this.pages[0].left})}initPanzoom(){const t=e(!0,{},{content:this.$track,click:!1,doubleClick:!1,wheel:!1,pinchToZoom:!1,lockAxis:"x",textSelection:()=>this.option("textSelection",!1),panOnlyZoomed:()=>this.option("panOnlyZoomed",this.elemDimWidththis.trigger(`Panzoom.${t}`,...e),init:t=>this.Panzoom=t,updateMetrics:()=>{this.updatePage()},updateBounds:()=>{this.updateBounds()},beforeTransform:this.onBeforeTransform.bind(this),afterAnimate:this.onAfterAnimate.bind(this),touchEnd:this.onTouchEnd.bind(this)}},this.option("Panzoom"));new h(this.$viewport,t)}onBeforeTransform(){this.option("infiniteX",this.option("infinite"))&&this.manageInfiniteTrack(),this.manageSlideVisiblity()}onAfterAnimate(t,e){e||this.trigger("settle")}onTouchEnd(t){const e=this.option("dragFree");if(!e&&this.pages.length>1&&t.drag.elapsedTime<350&&Math.abs(t.drag.distanceY)<1&&Math.abs(t.drag.distanceX)>5)this[t.drag.distanceX<0?"slideNext":"slidePrev"]();else if(e){const[,t]=this.getPageFromPosition(-1*this.Panzoom.pan.x);this.setPage(t)}else this.slideToClosest()}manageInfiniteTrack(){if(!this.option("infiniteX",this.option("infinite"))||this.pages.length<2||this.elemDimWidtht.viewportDim.width&&(t.current.x-=t.contentDim.width,t.drag.firstPosition&&(t.drag.firstPosition.x-=t.contentDim.width),this.pageIndex=this.pageIndex+this.pages.length,e=!0),e&&"dragging"===t.state&&t.resetDragState(),e}manageSlideVisiblity(){const t=this.elemDimWidth,e=this.wrapDimWidth;let i=-1*this.Panzoom.current.x;Math.abs(i)<.1&&(i=0);const s=this.option("preload"),n=this.option("infiniteX",this.option("infinite")),o=parseFloat(window.getComputedStyle(this.$viewport,null).getPropertyValue("padding-left")),a=parseFloat(window.getComputedStyle(this.$viewport,null).getPropertyValue("padding-right"));this.slides.forEach((r=>{let l,h,c=0;l=i-o,h=i+e+a,l-=s*(e+o+a),h+=s*(e+o+a);const d=r.left+r.width>l&&r.leftl&&r.leftl&&r.lefti&&r.left<=i+e+a&&(c=0)):this.removeSlideEl(r),r.hasDiff=c}));let r=0,l=0;this.slides.forEach(((e,i)=>{let s=0;e.$el?(i!==r||e.hasDiff?s=l+e.hasDiff*t:l=0,e.$el.style.left=Math.abs(s)>.1?`${l+e.hasDiff*t}px`:"",r++):l+=e.width})),this.Panzoom.viewportDim.height=this.Panzoom.$content.clientHeight,this.markSelectedSlides()}markSelectedSlides(){const t=this.option("classNames.slideSelected"),e="aria-hidden";this.slides.forEach(((i,s)=>{const n=i.$el;if(!n)return;const o=this.pages[this.page];o&&o.indexes&&o.indexes.indexOf(s)>-1?(t&&!n.classList.contains(t)&&(n.classList.add(t),this.trigger("selectSlide",i)),n.removeAttribute(e)):(t&&n.classList.contains(t)&&(n.classList.remove(t),this.trigger("unselectSlide",i)),n.setAttribute(e,!0))}))}createSlideEl(t){if(!t)return;if(t.$el){if(parseInt(t.$el.dataset.index,10)!==t.index){t.$el.dataset.index=t.index;let e;t.$el.querySelectorAll("[data-lazy-src]").forEach((t=>{let e=t.dataset.lazySrc;t instanceof HTMLImageElement?t.src=e:t.style.backgroundImage=`url('${e}')`})),(e=t.$el.dataset.lazySrc)&&(t.$el.style.backgroundImage=`url('${e}')`),t.state="ready"}return}const e=document.createElement("div");e.dataset.index=t.index,e.classList.add(this.option("classNames.slide")),t.customClass&&e.classList.add(...t.customClass.split(" ")),t.html&&(e.innerHTML=t.html);const i=[];this.slides.forEach(((t,e)=>{t.$el&&i.push(e)}));const s=t.index;let n=null;if(i.length){let t=i.reduce(((t,e)=>Math.abs(e-s){const o=i.$el,a=i.isDom||!t?this.getSlideMetrics(o):t;i.index=n,i.width=a,i.left=e,t=a,e+=a,s.push(n)})),this.elemDimWidth=i(e),this.Panzoom.contentDim.width=this.elemDimWidth,this.wrapDimWidth=i(this.$viewport.getBoundingClientRect().width);var n=window.getComputedStyle(this.$viewport),o=parseFloat(n.paddingLeft)+parseFloat(n.paddingRight);this.wrapDimWidth=this.wrapDimWidth-o,window.visualViewport&&(this.wrapDimWidth*=window.visualViewport.scale),this.Panzoom.viewportDim.width=this.wrapDimWidth;const a=[],r=this.option("slidesPerPage");if(Number.isInteger(r)&&this.elemDimWidth>this.wrapDimWidth)for(let t=0;tthis.wrapDimWidth)&&(a.push({indexes:[],slides:[]}),t=a.length-1,e=0),e+=s.width,a[t].indexes.push(i),a[t].slides.push(s)}}const l=this.option("center"),h=this.option("fill");a.forEach(((t,e)=>{t.index=e,t.width=t.slides.reduce(((t,e)=>t+e.width),0),t.left=t.slides[0].left,l&&(t.left+=.5*(this.wrapDimWidth-t.width)*-1),h&&!this.option("infiniteX",this.option("infinite"))&&this.elemDimWidth>this.wrapDimWidth&&(t.left=Math.max(t.left,0),t.left=Math.min(t.left,this.elemDimWidth-this.wrapDimWidth))}));const c=[];let d;a.forEach((t=>{d&&t.left===d.left?(d.width+=t.width,d.slides=[...d.slides,...t.slides],d.indexes=[...d.indexes,...t.indexes]):(t.index=c.length,d=t,c.push(t))})),this.pages=c,this.manageSlideVisiblity(),this.trigger("refresh")}setPage(t,e){let i=0,s=parseInt(t,10)||0;const n=this.page,o=this.pageIndex,a=this.pages.length;if(t=(s%a+a)%a,this.option("infiniteX",this.option("infinite"))&&this.elemDimWidth>this.wrapDimWidth){const n=Math.floor(s/a)||0,o=this.elemDimWidth;if(i=this.pages[t].left+n*o,!0===e&&a>2){let t=-1*this.Panzoom.current.x;const e=i-o,n=i+o,r=Math.abs(t-i),l=Math.abs(t-e),h=Math.abs(t-n);he.indexes.indexOf(t)>-1));return e?e.index:null}getPageFromPosition(t){const e=this.pages.length;this.option("center")&&(t+=.5*this.wrapDimWidth);const i=Math.floor(t/this.elemDimWidth);t-=i*this.elemDimWidth;let s=this.slides.find((e=>e.leftt));if(s){let t=this.getPageforSlide(s.index);return[t,t+i*e]}return[0,0]}removeSlideEl(t){t.$el&&!t.isDom&&(this.trigger("deleteSlide",t),t.$el.remove(),t.$el=null)}destroy(){this.state="destroy",this.slides.forEach((t=>{this.removeSlideEl(t)})),this.Panzoom.destroy(),this.options={},this.events={}}}m.version="4.0.0-alpha.1",m.Plugins=p;const f=!("undefined"==typeof window||!window.document||!window.document.createElement);class v{constructor(t){this.fancybox=t,this.$wrap=null,this.state="init";for(const t of["onReady","onClosing","onKeydown"])this[t]=this[t].bind(this);this.events={ready:this.onReady,closing:this.onClosing,keydown:this.onKeydown}}onReady(){!0===this.fancybox.option("Thumbs.autoStart")&&this.initLayout()}onClosing(){this.Carousel&&this.Carousel.Panzoom.detachEvents()}onKeydown(t,e){e===t.option("Thumbs.key")&&this.toggle()}initLayout(){if("init"!==this.state)return;const t=this.getSlides();if(t.length{e.preventDefault(),this.fancybox[e.deltaY<0?"prev":"next"]()})),this.$wrap=i,this.state="ready"}getSlides(){const t=[];return this.fancybox.items.forEach((e=>{const i=e.thumb;i&&t.push({html:`
`,customClass:`has-thumb has-${e.type||"image"}`})})),t}toggle(){return"ready"===this.state?(this.Carousel.Panzoom.detachEvents(),this.$wrap.style.display="none",void(this.state="hidden")):"hidden"===this.state?(this.$wrap.style.display="",this.Carousel.Panzoom.attachEvents(),void(this.state="ready")):void this.initLayout()}cleanup(){this.Carousel&&(this.Carousel.destroy(),this.Carousel=null),this.$wrap&&(this.$wrap.remove(),this.$wrap=null),this.state="init"}attach(){this.fancybox.on(this.events)}detach(){this.fancybox.off(this.events),this.cleanup()}}v.defaults={autoStart:!0,minSlideCount:3,key:"t"};const y=t=>Object.entries(t).map((t=>t.map(encodeURIComponent).join("="))).join("&"),b={video:{autoplay:!0,ratio:16/9},youtube:{autohide:1,fs:1,rel:0,hd:1,wmode:"transparent",enablejsapi:1,html5:1},vimeo:{hd:1,show_title:1,show_byline:1,show_portrait:0,fullscreen:1},html5video:{tpl:'',format:""}};class x{constructor(t){this.fancybox=t;for(const t of["onPrepare","onCreateSlide","onDeleteSlide","onSelectSlide","onUnselectSlide","onRefresh","onMessage"])this[t]=this[t].bind(this);this.events={init:this.onPrepare,"Carousel.createSlide":this.onCreateSlide,"Carousel.deleteSlide":this.onDeleteSlide,"Carousel.selectSlide":this.onSelectSlide,"Carousel.unselectSlide":this.onUnselectSlide,"Carousel.refresh":this.onRefresh}}onPrepare(){this.fancybox.items.forEach((t=>{this.processType(t)}))}processType(t){if(t.html)return t.src=t.html,t.type="html",void delete t.html;const i=t.src||"";let s=t.type||this.fancybox.options.type,n=null;if(!i||"string"==typeof i){if(n=i.match(/(?:youtube\.com|youtu\.be|youtube\-nocookie\.com)\/(?:watch\?(?:.*&)?v=|v\/|u\/|embed\/?)?(videoseries\?list=(?:.*)|[\w-]{11}|\?listType=(?:.*)&list=(?:.*))(?:.*)/i)){const e=y(this.fancybox.option("Html.youtube")),i=encodeURIComponent(n[1]);t.videoId=i,t.src=`https://www.youtube-nocookie.com/embed/${i}?${e}`,t.thumb=t.thumb||`https://i.ytimg.com/vi/${i}/mqdefault.jpg`,t.vendor="youtube",s="video"}else if(n=i.match(/^.+vimeo.com\/(?:\/)?([\d]+)(.*)?/)){const e=y(this.fancybox.option("Html.vimeo")),i=encodeURIComponent(n[1]);t.videoId=i,t.src=`https://player.vimeo.com/video/${i}?${e}`,t.vendor="vimeo",s="video"}else(n=i.match(/(?:maps\.)?google\.([a-z]{2,3}(?:\.[a-z]{2})?)\/(?:(?:(?:maps\/(?:place\/(?:.*)\/)?\@(.*),(\d+.?\d+?)z))|(?:\?ll=))(.*)?/i))?(t.src=`//maps.google.${n[1]}/?ll=${(n[2]?n[2]+"&z="+Math.floor(n[3])+(n[4]?n[4].replace(/^\//,"&"):""):n[4]+"").replace(/\?/,"&")}&output=${n[4]&&n[4].indexOf("layer=c")>0?"svembed":"embed"}`,s="map"):(n=i.match(/(?:maps\.)?google\.([a-z]{2,3}(?:\.[a-z]{2})?)\/(?:maps\/search\/)(.*)/i))&&(t.src=`//maps.google.${n[1]}/maps?q=${n[2].replace("query=","q=").replace("api=1","")}&output=embed`,s="map");s||("#"===i.charAt(0)?s="inline":(n=i.match(/\.(mp4|mov|ogv|webm)((\?|#).*)?$/i))?(s="html5video",t.format=t.format||"video/"+("ogv"===n[1]?"ogg":n[1])):i.match(/(^data:image\/[a-z0-9+\/=]*,)|(\.(jp(e|g|eg)|gif|png|bmp|webp|svg|ico)((\?|#).*)?$)/i)?s="image":i.match(/\.(pdf)((\?|#).*)?$/i)&&(s="pdf")),t.type=s||this.fancybox.option("defaultType","image"),"html5video"!==s&&"video"!==s||(t.video=e({},this.fancybox.option("Html.video"),t.video),t.width&&t.height?t.ratio=parseFloat(t.width)/parseFloat(t.height):t.ratio=t.ratio||t.video.ratio)}}loadInlineContent(t){let e;if(t.src instanceof HTMLElement)e=t.src;else if("string"==typeof t.src){const i=t.src.split("#",2),s=2===i.length&&""===i[0]?i[1]:i[0];e=document.getElementById(s)}if(e){if("clone"===t.type||e.$placeHolder){e=e.cloneNode(!0);let i=e.getAttribute("id");i=i?`${i}--clone`:`clone-${this.fancybox.id}-${t.index}`,e.setAttribute("id",i)}else{const t=document.createElement("div");t.classList.add("fancybox-placeholder"),e.parentNode.insertBefore(t,e),e.$placeHolder=t}this.fancybox.setContent(t,e)}else this.fancybox.setError(t,"{{ELEMENT_NOT_FOUND}}")}loadAjaxContent(t){const e=this.fancybox,i=new XMLHttpRequest;e.showLoading(t),i.onreadystatechange=function(){i.readyState===XMLHttpRequest.DONE&&"ready"===e.state&&(e.hideLoading(t),200===i.status?e.setContent(t,i.responseText):e.setError(t,404===i.status?"{{AJAX_NOT_FOUND}}":"{{AJAX_FORBIDDEN}}"))},i.open("GET",t.src),i.send(t.ajax||null),t.xhr=i}loadIframeContent(t){const e=this.fancybox,i=document.createElement("iframe");if(i.className="fancybox__iframe",i.setAttribute("id",`fancybox__iframe_${e.id}_${t.index}`),i.setAttribute("allow","autoplay; fullscreen"),i.setAttribute("scrolling","auto"),t.$iframe=i,"iframe"!==t.type||!1===t.preload)return i.setAttribute("src",t.src),void this.fancybox.setContent(t,i);e.showLoading(t);const s=document.createElement("div");s.style.visibility="hidden",this.fancybox.setContent(t,s),s.appendChild(i),i.onerror=()=>{e.setError(t,"{{IFRAME_ERROR}}")},i.onload=()=>{let n=!1;"yes"!==i.dataset.ready&&(i.dataset.ready="yes",n=!0),i.src.length&&(e.hideLoading(t),i.parentNode.style.visibility="",!1!==t.autoSize&&this.autoSizeIframe(i),n&&e.animateCSS(s,e.option("showClass")))},i.setAttribute("src",t.src)}setAspectRatio(t){let e=t.ratio;if(!e||!t.$content)return;t.$content.style.maxWidth="",t.$content.style.maxHeight="";let i=t.$content.offsetWidth,s=t.$content.offsetHeight,n=t.width,o=t.height;if(n&&o&&(i>n||s>o)){let t=Math.min(n/i,o/s);i*=t,s*=t}e{t.$el&&(t.$iframe&&!1!==t.autoSize&&this.autoSizeIframe(t.$iframe),t.ratio&&this.setAspectRatio(t))}))}onCreateSlide(t,e,i){if(i&&!i.isDom){switch(i.type){case"html":this.fancybox.setContent(i,i.src);break;case"html5video":this.fancybox.setContent(i,this.fancybox.option("Html.html5video.tpl").replace(/\{\{src\}\}/gi,i.src).replace("{{format}}",i.format||i.html5video&&i.html5video.format||"").replace("{{poster}}",i.thumb||""));break;case"inline":case"clone":this.loadInlineContent(i);break;case"ajax":this.loadAjaxContent(i);break;case"iframe":case"pdf":case"video":case"map":this.loadIframeContent(i)}i.ratio&&this.setAspectRatio(i)}}onSelectSlide(t,e,i){if("html5video"===i.type&&i.$el.querySelector("video").play(),"video"!==i.type||!i.$iframe||!i.$iframe.contentWindow)return;const s=()=>{if("done"!==i.state||!i.$iframe.contentWindow)return;let t;if(i.$iframe.isReady)return i.video&&i.video.autoplay&&(t="youtube"==i.vendor?{event:"command",func:"playVideo"}:{method:"play",value:"true"}),void(t&&i.$iframe.contentWindow.postMessage(JSON.stringify(t),"*"));"youtube"===i.vendor&&(t={event:"listening",id:i.$iframe.getAttribute("id")},i.$iframe.contentWindow.postMessage(JSON.stringify(t),"*")),i.poller=setTimeout(s,250)};s()}onUnselectSlide(t,e,i){if("html5video"===i.type){try{i.$el.querySelector("video").pause()}catch(t){}return}let s=!1;"vimeo"==i.vendor?s={method:"pause",value:"true"}:"youtube"===i.vendor&&(s={event:"command",func:"pauseVideo"}),s&&i.$iframe&&i.$iframe.contentWindow&&i.$iframe.contentWindow.postMessage(JSON.stringify(s),"*"),clearTimeout(i.poller)}onDeleteSlide(t,e,i){i.xhr&&(i.xhr.abort(),i.xhr=null),i.$iframe&&(i.$iframe.onload=i.$iframe.onerror=null,i.$iframe.src="//about:blank",i.$iframe=null);const s=i.$content;"inline"===i.type&&s&&(s.classList.remove("fancybox__content"),"none"!==s.style.display&&(s.style.display="none"),i.$closeButton&&(i.$closeButton.remove(),i.$closeButton=null));const n=s&&s.$placeHolder;n&&(n.parentNode.insertBefore(s,n),n.remove(),s.$placeHolder=null)}onMessage(t){try{let e=JSON.parse(t.data);if("https://player.vimeo.com"===t.origin){if("ready"===e.event)for(let e of document.getElementsByClassName("fancybox__iframe"))e.contentWindow===t.source&&(e.isReady=1)}else"https://www.youtube-nocookie.com"===t.origin&&"onReady"===e.event&&(document.getElementById(e.id).isReady=1)}catch(t){}}attach(){this.fancybox.on(this.events),window.addEventListener("message",this.onMessage,!1)}detach(){this.fancybox.off(this.events),window.removeEventListener("message",this.onMessage,!1)}}x.defaults=b;const w=function(t){const e=t.naturalWidth,i=t.naturalHeight,s=t.width,n=t.height,o=e/i,a={width:s,height:n};return o>s/n?a.height=s/o:a.width=n*o,a.left=.5*(s-a.width),a.right=e+a.left,a};class ${constructor(t){this.fancybox=t;for(const t of["onReady","onClosing","onPageChange","onCreateSlide","onRemoveSlide","onRefresh","onImageStatusChange"])this[t]=this[t].bind(this);this.events={ready:this.onReady,closing:this.onClosing,"Carousel.change":this.onPageChange,"Carousel.createSlide":this.onCreateSlide,"Carousel.deleteSlide":this.onRemoveSlide,"Carousel.refresh":this.onRefresh}}onReady(){const t=this.fancybox.getSlide();"ready"===t.state&&this.revealContent(t)}onCreateSlide(t,e,i){if(i.isDom||i.html||i.type&&"image"!==i.type)return;i.type="image",i.state="loading";const s=document.createElement("div");s.style.visibility="hidden";const n=document.createElement("img");n.onload=()=>this.onImageStatusChange(i),n.onerror=()=>this.onImageStatusChange(i),n.src=i.src,n.alt="",n.draggable=!1,n.classList.add("fancybox__image"),i.srcset&&n.setAttribute("srcset",i.srcset),i.sizes&&n.setAttribute("sizes",i.sizes),i.$image=n,s.appendChild(n),i.$el.dataset.imageFit=this.fancybox.option("Image.fit"),i.$el.style.display="none",i.$el.offsetHeight,i.$el.style.display="",this.fancybox.setContent(i,s),n.complete||n.error?(n.onload=n.onerror=null,this.onImageStatusChange(i)):n.complete||this.fancybox.showLoading(i)}initSlidePanzoom(t){t.Panzoom||(t.Panzoom=new h(t.$el,e(!0,this.fancybox.option("Image.Panzoom"),{content:t.$image,panOnlyZoomed:!0,click:null,doubleClick:null,wheel:null,on:{afterAnimate:e=>{"zoomIn"===t.state&&(e.attachEvents(),this.fancybox.done(t)),this.handleCursor(t)},updateMetrics:()=>{this.handleCursor(t)},touchMove:()=>{if(this.fancybox.Carousel.Panzoom.lockAxis)return!1}}})),this.fancybox.option("Image.wheel")&&t.Panzoom.on("wheel",((t,e)=>this.onWheel(t,e))),this.fancybox.option("Image.click")&&t.Panzoom.on("click",((t,e)=>this.onClick(t,e))),"toggleZoom"===this.fancybox.option("Image.doubleClick")&&t.Panzoom.on("doubleClick",((t,e)=>{if(!e.target.closest(".fancybox__content"))return;e.preventDefault(),e.stopPropagation();const i=e.clientX-t.$content.getClientRects()[0].left,s=e.clientY-t.$content.getClientRects()[0].top;t.toggleZoom({x:i,y:s})})))}onImageStatusChange(t){this.fancybox.hideLoading(t);const e=t.$image;e.complete&&e.width&&e.height?(t.state="ready",this.updateDimensions(t),this.initSlidePanzoom(t),this.fancybox.trigger("load",t),this.revealContent(t)):this.fancybox.setError(t,"{{IMAGE_ERROR}}")}updateDimensions(t){if("cover"!==t.$el.dataset.imageFit){const e=t.$image,i=t.$content;i.style.maxWidth="";const s=e.offsetWidth-e.clientWidth;i.style.maxWidth=`${w(e).width+s}px`}this.handleCursor(t)}revealContent(t){null===this.fancybox.Carousel.prevPage&&t.index===this.fancybox.options.startIndex&&this.canZoom()?this.zoomIn():this.fancybox.revealContent(t)}canZoom(){const t=this.fancybox,e=t.$container;let i=!1;if(!t.option("Image.zoom"))return i;const s=t.getSlide(),n=s.$thumb;if(!n||"loading"===s.state)return i;e.style.pointerEvents="none";const o=n.getBoundingClientRect();if(this.fancybox.option("Image.ignoreCoveredThumbnail")){const t=document.elementFromPoint(o.left+1,o.top+1)===n,e=document.elementFromPoint(o.right-1,o.bottom-1)===n;i=t&&e}else i=document.elementFromPoint(o.left+.5*o.width,o.top+.5*o.height)===n;return e.style.pointerEvents="",i}getZoomInfo(t){const e=t.$thumb.getBoundingClientRect(),i=e.width,s=e.height,n=t.$content.getBoundingClientRect(),o=w(t.$image),a=o.width,r=o.height,l=n.top+.5*r-(e.top+.5*s),h=n.left+.5*a-(e.left+.5*i);let c=this.fancybox.option("Image.zoomOpacity");return"auto"===c&&(c=Math.abs(i/s-a/r)>.1),{top:l,left:h,scale:e.width/a,opacity:c}}zoomIn(){const t=this.fancybox;if("init"===t.Carousel.state)return;const e=t.getSlide(),i=e.Panzoom,{top:s,left:n,scale:o,opacity:a}=this.getZoomInfo(e);e.state="zoomIn",i.detachEvents(),t.trigger("reveal",e),i.panTo({x:-1*n,y:-1*s,scale:o,friction:0,ignoreBounds:!0}),e.$content.style.visibility="",!0===a&&i.on("afterTransform",(t=>{"zoomIn"!==e.state&&"zoomOut"!==e.state||(t.$content.style.opacity=Math.min(1,t.current.scale))})),i.panTo({x:0,y:0,scale:1,friction:this.fancybox.option("Image.zoomFriction")})}zoomOut(){const t=this.fancybox,e=t.getSlide(),i=e.Panzoom;if(!i)return;e.state="zoomOut",t.state="customClosing",e.$caption&&(e.$caption.style.visibility="hidden");let s=.75*this.fancybox.option("Image.zoomFriction");const n=()=>{const{top:t,left:n,scale:o}=this.getZoomInfo(e);i.panTo({x:-1*n,y:-1*t,scale:o,ignoreBounds:!0,friction:s}),s*=.98};window.addEventListener("scroll",n),i.on("afterAnimate",(()=>{window.removeEventListener("scroll",n),t.destroy()})),n()}handleCursor(t){const e=t.Panzoom,i=this.fancybox.option("Image.click"),s=t.$el.classList;if(e&&"toggleZoom"===i){s[e&&1===e.current.scale&&e.option("maxScale")-e.current.scale>.01?"add":"remove"](this.fancybox.option("Image.canZoomInClass"))}else"close"===i&&s.add(this.fancybox.option("Image.canZoomOutClass"))}onWheel(t,e){switch(this.fancybox.option("Image.wheel")){case"zoom":t.zoomWithWheel(e);break;case"close":this.fancybox.close();break;case"slide":this.fancybox[e.deltaY<0?"prev":"next"]()}e.preventDefault()}onClick(t,e){if(!(this.fancybox.Carousel.Panzoom.drag.distance>=6||this.fancybox.Carousel.Panzoom.lockAxis||"IMG"!=e.target.tagName&&!e.target.classList.contains("fancybox__content")))switch(e.preventDefault(),e.stopPropagation(),this.fancybox.option("Image.click")){case"toggleZoom":const i=e.clientX-t.$content.getClientRects()[0].left,s=e.clientY-t.$content.getClientRects()[0].top;t.toggleZoom({x:i,y:s});break;case"close":this.fancybox.close();break;case"next":this.fancybox.next();break;case"prev":this.fancybox.prev()}}onRefresh(t,e){e.slides.forEach((t=>{t.Panzoom&&this.updateDimensions(t)}))}onRemoveSlide(t,e,i){i.$image&&(i.$el.classList.remove(t.option("Image.canZoomInClass")),i.$image.onload=i.$image.onerror=null,i.$image.remove(),i.$image=null),i.Panzoom&&(i.Panzoom.destroy(),i.Panzoom=null),delete i.$el.dataset.imageFit}onClosing(t){t.Carousel.slides.forEach((t=>{t.$image&&(t.$image.onload=t.$image.onerror=null),t.Panzoom&&t.Panzoom.detachEvents()})),"closing"===this.fancybox.state&&this.canZoom()&&this.zoomOut()}onPageChange(t,e){const i=t.getSlide();e.slides.forEach((t=>{t.Panzoom&&"done"===t.state&&(t.index!==i.index?t.Panzoom.panTo({x:0,y:0,scale:1,friction:.8}):0===e.Panzoom.velocity.x&&this.revealContent(t))}))}attach(){this.fancybox.on(this.events)}detach(){this.fancybox.off(this.events)}}$.defaults={Panzoom:{maxScale:1},canZoomInClass:"can-zoom_in",canZoomOutClass:"can-zoom_out",zoom:!0,zoomOpacity:"auto",zoomFriction:.8,ignoreCoveredThumbnail:!1,click:"toggleZoom",doubleClick:null,wheel:"zoom",fit:"contain"};const C=function(){const t=window.location.hash.substr(1),e=t.split("-"),i=e.length>1&&/^\+?\d+$/.test(e[e.length-1])&&parseInt(e.pop(-1),10)||null;return{hash:t,slug:e.join("-"),index:i}};class P{constructor(t){this.fancybox=t,this.events={closing:this.onClosing.bind(this),"Carousel.ready Carousel.change":this.onChange.bind(this)},this.hasCreatedHistory=!1,this.origHash="",this.timer=null}onChange(t,e){this.timer&&clearTimeout(this.timer);const i=null===e.prevPage,s=t.getSlide(),n=s.$trigger&&s.$trigger.dataset,o=window.location.hash.substr(1);let a=!1;if(s.slug)a=s.slug;else{let t=n&&n.fancybox;t&&t.length&&"true"!==t&&(a=t+(e.slides.length>1?"-"+(s.index+1):""))}i&&(this.origHash=o!==a?this.origHash:""),a&&o!==a&&(this.timer=setTimeout((()=>{try{window.history[i?"pushState":"replaceState"]({},document.title,window.location.pathname+window.location.search+"#"+a),i&&(this.hasCreatedHistory=!0)}catch(t){}}),300))}onClosing(){if(this.timer&&clearTimeout(this.timer),!0!==this.hasSilentClose){if(!this.hasCreatedHistory)try{return void window.history.replaceState({},document.title,window.location.pathname+window.location.search+(this.origHash?"#"+this.origHash:""))}catch(t){}window.history.back()}}attach(t){t.on(this.events)}detach(t){t.off(this.events)}static startFromUrl(){if(P.Fancybox.getInstance())return;const{hash:t,slug:e,index:i}=C();if(!e)return;let s=document.querySelector(`[data-slug="${t}"]`);if(s&&s.dispatchEvent(new CustomEvent("click",{bubbles:!0,cancelable:!0})),P.Fancybox.getInstance())return;const n=document.querySelectorAll(`[data-fancybox="${e}"]`);n.length&&(null===i&&1===n.length?s=n[0]:i&&(s=n[i-1]),s&&s.dispatchEvent(new CustomEvent("click",{bubbles:!0,cancelable:!0})))}static onHashChange(){const{slug:t,index:e}=C(),i=P.Fancybox.getInstance();if(i){if(t){const s=i.Carousel;for(let e of s.slides)if(e.slug&&e.slug===t)return s.slideTo(e.index);const n=i.getSlide(),o=n.$trigger&&n.$trigger.dataset;if(o&&o.fancybox===t)return s.slideTo(e-1)}i.plugins.Hash.hasSilentClose=!0,i.close()}P.startFromUrl()}static onReady(){window.addEventListener("hashchange",P.onHashChange,!1),P.startFromUrl()}static create(){f&&window.requestAnimationFrame((()=>{P.onReady()}))}static destroy(){window.removeEventListener("hashchange",P.onHashChange,!1)}}const S={ScrollLock:class{constructor(t){this.fancybox=t,this.viewport=null,this.pendingUpdate=null;for(const t of["onReady","onResize","onTouchstart","onTouchmove"])this[t]=this[t].bind(this)}onReady(){const t=window.visualViewport;t&&(this.viewport=t,this.startY=0,t.addEventListener("resize",this.onResize),this.updateViewport()),window.addEventListener("touchstart",this.onTouchstart,{passive:!1}),window.addEventListener("touchmove",this.onTouchmove,{passive:!1})}onResize(){this.pendingUpdate||(this.pendingUpdate=requestAnimationFrame((()=>{this.pendingUpdate=null,this.updateViewport()})))}updateViewport(){const t=this.fancybox,e=this.viewport,i=e.scale,s=t.$container;if(!s)return;let n="",o="",a="";Math.abs(i-1)>.1&&(n=e.width*i+"px",o=e.height*i+"px",a=`translate3d(${e.offsetLeft}px, ${e.offsetTop}px, 0) scale(${1/i})`),s.style.width=n,s.style.height=o,s.style.transform=a,t.Carousel&&t.Carousel.updateMetrics()}onTouchstart(t){this.startY=t.touches?t.touches[0].screenY:t.screenY}onTouchmove(t){const e=this.startY,i=window.innerWidth/window.document.documentElement.clientWidth;if(t.touches.length>1||1!==i)return;const s=t.target,o=n(s);if(!o)return void t.preventDefault();const a=window.getComputedStyle(o),r=parseInt(a.getPropertyValue("height"),10),l=t.touches?t.touches[0].screenY:t.screenY,h=e<=l&&0===o.scrollTop,c=e>=l&&o.scrollHeight-o.scrollTop===r;(h||c)&&t.preventDefault()}cleanup(){this.pendingUpdate&&(cancelAnimationFrame(this.pendingUpdate),this.pendingUpdate=null);const t=this.viewport;t&&(t.removeEventListener("resize",this.onResize),this.viewport=null),window.removeEventListener("touchstart",this.onTouchstart,!1),window.removeEventListener("touchmove",this.onTouchmove,!1)}attach(){this.fancybox.on("initLayout",this.onReady)}detach(){this.fancybox.off("initLayout",this.onReady),this.cleanup()}},Thumbs:v,Html:x,Image:$,Hash:P};let E=0,L=null;class T extends r{constructor(t,i={}){L=function(){let t=!1;return document.createElement("div").focus({get preventScroll(){return t=!0,!1}}),t}(),super(function(t,i){const s=e(!0,{},t[i.startIndex]||{});return t.forEach((t=>{const e=t.$trigger;if(e){const i=e.dataset||{};t.src=i.src||e.getAttribute("href")||t.src,t.type=i.type||t.type}})),e(!0,{},T.defaults,i,s)}(t,i)),this.state="init",this.items=t,this.bindHandlers(),this.attachPlugins(T.Plugins),this.trigger("init"),!0===this.option("hideScrollbar")&&this.hideScrollbar(),this.initLayout(),this.initCarousel(this.getSlides()),this.attachEvents(),this.state="ready",this.trigger("ready"),this.$container.setAttribute("aria-hidden","false")}bindHandlers(){for(const t of["onMousedown","onKeydown","onClick","onCreateSlide","onSettle","onTouchMove","onTouchEnd","onTransform"])this[t]=this[t].bind(this)}attachEvents(){document.addEventListener("mousedown",this.onMousedown),document.addEventListener("keydown",this.onKeydown),this.$container.addEventListener("click",this.onClick)}detachEvents(){document.removeEventListener("mousedown",this.onMousedown),document.removeEventListener("keydown",this.onKeydown),this.$container.removeEventListener("click",this.onClick)}initLayout(){this.$root=this.option("parentEl")||document.body;let t=this.option("template.main");t&&(this.$root.insertAdjacentHTML("beforeend",this.localize(t)),this.$container=this.$root.querySelector(".fancybox__container")),this.$container||(this.$container=document.createElement("div"),this.$root.appendChild(this.$container)),this.$container.onscroll=()=>(this.$container.scrollLeft=0,!1),Object.entries({class:"fancybox__container",role:"dialog","aria-modal":"true","aria-hidden":"true","aria-label":this.localize("{{MODAL}}")}).forEach((t=>this.$container.setAttribute(...t))),this.option("animated")&&this.$container.classList.add("is-animated"),this.$backdrop=this.$container.querySelector(".fancybox__backdrop"),this.$backdrop||(this.$backdrop=document.createElement("div"),this.$backdrop.classList.add("fancybox__backdrop"),this.$container.appendChild(this.$backdrop)),this.$carousel=this.$container.querySelector(".fancybox__carousel"),this.$carousel||(this.$carousel=document.createElement("div"),this.$carousel.classList.add("fancybox__carousel"),this.$container.appendChild(this.$carousel)),this.$container.Fancybox=this,this.id=this.$container.getAttribute("id"),this.id||(this.id=this.options.id||++E,this.$container.setAttribute("id","fancybox-"+this.id));const e=this.options.mainClass;return e&&this.$container.classList.add(...e.split(" ")),document.documentElement.classList.add("with-fancybox"),this.trigger("initLayout"),this}getSlides(){const t=[...this.items];return t.forEach((t=>{!t.src&&t.$trigger&&t.$trigger instanceof HTMLImageElement&&(t.src=t.$trigger.currentSrc||t.$trigger.src);let e=t.$thumb;const i=t.$trigger&&t.$trigger.origTarget;i&&(e=i instanceof HTMLImageElement?i:i.querySelector("img")),!e&&t.$trigger&&(e=t.$trigger instanceof HTMLImageElement?t.$trigger:t.$trigger.querySelector("img")),t.$thumb=e||null;let s=t.thumb;!s&&t.$thumb&&(s=e.currentSrc||e.src),s||t.type&&"image"!==t.type||(s=t.src),t.thumb=s||null})),t}initCarousel(t){return new m(this.$carousel,e(!0,{},{classNames:{viewport:"fancybox__viewport",track:"fancybox__track",slide:"fancybox__slide"},textSelection:!0,preload:this.option("preload"),friction:.88,slides:t,initialPage:this.options.startIndex,infiniteX:this.option("infinite"),infiniteY:!0,l10n:this.option("l10n"),Dots:!1,Navigation:{classNames:{main:"fancybox__nav",button:"carousel__button",next:"is-next",prev:"is-prev"}},Panzoom:{panOnlyZoomed:()=>this.Carousel.pages.length<2&&!this.options.dragToClose,lockAxis:()=>{let t=this.Carousel.pages.length>1?"x":"";return this.options.dragToClose&&(t+="y"),t}},on:{"*":(t,...e)=>this.trigger(`Carousel.${t}`,...e),init:t=>this.Carousel=t,createSlide:this.onCreateSlide,settle:this.onSettle}},this.option("Carousel"))),this.options.dragToClose&&this.Carousel.Panzoom.on({touchMove:this.onTouchMove,afterTransform:this.onTransform,touchEnd:this.onTouchEnd}),this.trigger("initCarousel"),this}onCreateSlide(t,e){const i=e.caption;if(i){const t=document.createElement("div"),s=`fancybox__caption_${this.id}_${e.index}`;t.className="fancybox__caption",t.innerHTML=i,t.setAttribute("id",s),e.$caption=e.$el.appendChild(t),e.$el.classList.add("has-caption"),e.$el.setAttribute("aria-labelledby",s)}}onSettle(){this.focus()}onClick(t){if(t.defaultPrevented)return;if(t.target.closest(".fancybox__content"))return;if(window.getSelection().toString().length)return;const e=this.option("click");if("function"==typeof e)return e.call(this);switch(e){case"close":this.close();break;case"next":this.next()}}onTouchMove(){const t=this.getSlide().Panzoom;return!t||1===t.current.scale}onTouchEnd(t){const e=t.drag.distanceY;(Math.abs(e)>=150||Math.abs(e)>=35&&t.drag.elapsedTime<350)&&(this.option("hideClass")&&(this.getSlide().hideClass="fancybox-throwOut"+(t.current.y<0?"Up":"Down")),this.close())}onTransform(t){if(this.$backdrop){const e=Math.abs(t.current.y),i=e<1?"":Math.max(0,Math.min(1,1-e/t.$content.clientHeight*1.5));this.$container.style.setProperty("--fancybox-ts",i?"0s":""),this.$container.style.setProperty("--fancybox-opacity",i)}}onMousedown(){document.body.classList.add("is-using-mouse")}onKeydown(t){if(T.getInstance().id!==this.id)return;document.body.classList.remove("is-using-mouse");const e=t.key;if("Tab"===e&&this.option("trapFocus"))return void this.focus(t);const i=this.option("keyboard");if(!i||t.ctrlKey||t.altKey||t.shiftKey)return;const s=document.activeElement&&document.activeElement.classList,n=s&&s.contains("carousel__button");if("Escape"!==e&&!n){if(t.target.isContentEditable||-1!==["BUTTON","TEXTAREA","OPTION","INPUT","SELECT","VIDEO"].indexOf(t.target.nodeName))return}if(!1===this.trigger("keydown",e))return;"Enter"!==e&&t.preventDefault();const o=i[e];"function"==typeof this[o]&&this[o]()}getSlide(){const t=this.Carousel;if(!t)return null;const e=null===t.page?t.option("initialPage"):t.page,i=t.pages||[];return i.length&&i[e]?i[e].slides[0]:null}focus(t){const e=t=>{t.setActive?t.setActive():L?t.focus({preventScroll:!0}):t.focus()};t&&t.preventDefault();const i=this.getSlide().$el;i.tabIndex=0;const s=[].slice.call(this.$container.querySelectorAll(["a[href]","area[href]",'input:not([disabled]):not([type="hidden"]):not([aria-hidden])',"select:not([disabled]):not([aria-hidden])","textarea:not([disabled]):not([aria-hidden])","button:not([disabled]):not([aria-hidden])","iframe","object","embed","video","audio","[contenteditable]",'[tabindex]:not([tabindex^="-"]):not([disabled]):not([aria-hidden])'])),n=[];for(let t of s){if(t.classList&&t.classList.contains("fancybox__slide"))continue;const e=t.closest(".fancybox__slide");e?e===i&&n[t.hasAttribute("autofocus")?"unshift":"push"](t):n.push(t)}if(!n.length)return;this.Carousel.pages.length>1&&n.push(i);const o=n.indexOf(document.activeElement),a=t&&!t.shiftKey,r=t&&t.shiftKey;return a?o===n.length-1?e(n[0]):e(n[o+1]):r?e(0===o?n[n.length-1]:n[o-1]):o<0?e(n[0]):void 0}hideScrollbar(){if(!f)return;const t=window.innerWidth-document.documentElement.getBoundingClientRect().width,e="fancybox-style-noscroll";let i=document.getElementById(e);i||t&&(i=document.createElement("style"),i.id=e,i.type="text/css",i.innerHTML=`.compensate-for-scrollbar {padding-right: ${t}px;}`,document.getElementsByTagName("head")[0].appendChild(i),document.body.classList.add("compensate-for-scrollbar"))}revealScrollbar(){document.body.classList.remove("compensate-for-scrollbar");const t=document.getElementById("fancybox-style-noscroll");t&&t.remove()}clearContent(t){this.Carousel.trigger("deleteSlide",t),t.$content&&(t.$content.remove(),t.$content=null),t._className&&t.$el.classList.remove(t._className)}setContent(t,e,i={}){let s;const n=t.$el;if(e instanceof HTMLElement?["img","iframe","video","audio"].indexOf(e.nodeName.toLowerCase())>-1?(s=document.createElement("div"),s.appendChild(e)):s=e:(s=document.createElement("div"),s.innerHTML=e),!(s instanceof Element))throw new Error("Element expected");return t._className=`has-${i.suffix||t.type||"unknown"}`,n.classList.add(t._className),s.classList.add("fancybox__content"),"none"!==s.style.display&&"none"!==window.getComputedStyle(s).getPropertyValue("display")||(s.style.display="flex"),t.id&&s.setAttribute("id",t.id),t.$content=s,n.insertBefore(s,n.querySelector(".fancybox__caption")),this.manageCloseButton(t),"loading"!==t.state&&(this.trigger("load",t),this.revealContent(t)),s}manageCloseButton(t){const e=void 0===t.closeButton?this.option("closeButton"):t.closeButton;if(!e||this.$closeButton&&"inside"!==e)return;const i=document.createElement("button");i.classList.add("carousel__button","is-close"),i.setAttribute("title",this.options.l10n.CLOSE),i.innerHTML=this.option("template.closeButton"),i.addEventListener("click",(t=>this.close(t))),"inside"===e?(t.$closeButton&&t.$closeButton.remove(),t.$closeButton=t.$content.appendChild(i)):this.$closeButton=this.$container.insertBefore(i,this.$container.firstChild)}revealContent(t){if(this.trigger("reveal",t),t.$content.style.visibility="","error"===t.state||null!==this.Carousel.prevPage||t.index!==this.options.startIndex)return void this.done(t);t.state="animating";const e=void 0===t.showClass?this.option("showClass"):t.showClass;this.animateCSS(t.$content,e,(()=>{this.done(t)}))}animateCSS(t,e,i){if(t&&t.dispatchEvent(new CustomEvent("animationend",{bubbles:!0,cancelable:!0})),!t||!e)return void("function"==typeof i&&i());const s=function(n){n.currentTarget===this&&(t.classList.remove(e),t.removeEventListener("animationend",s),i&&i())};t.addEventListener("animationend",s),t.classList.add(e)}done(t){if("init"!==this.state&&"ready"!==this.state)return;t.state="done",this.trigger("done",t);const e=this.getSlide();e&&t.index===e.index&&this.option("autoFocus")&&this.focus()}setError(t,e){this.hideLoading(t),this.clearContent(t),t.state="error";const i=document.createElement("div");i.classList.add("fancybox-error"),i.innerHTML=this.localize(e||"

{{ERROR}}

"),this.setContent(t,i,{suffix:"error"})}showLoading(t){t.state="loading",t.$el.classList.add("is-loading");let e=t.$el.querySelector(".fancybox__spinner");e||(e=document.createElement("div"),e.classList.add("fancybox__spinner"),e.innerHTML=this.option("template.spinner"),e.addEventListener("click",(()=>{this.Carousel.Panzoom.velocity||this.close()})),t.$el.insertBefore(e,t.$el.firstChild))}hideLoading(t){const e=t.$el.querySelector(".fancybox__spinner");e&&e.remove(),t.$el.classList.remove("is-loading")}next(){const t=this.Carousel;t&&t.pages.length>1&&t.slideNext()}prev(){const t=this.Carousel;t&&t.pages.length>1&&t.slidePrev()}jumpTo(...t){this.Carousel&&this.Carousel.slideTo(...t)}close(t){if(t&&t.preventDefault(),["closing","customClosing","destroy"].indexOf(this.state)>-1)return;if(!1===this.trigger("shouldClose",t))return;if(this.state="closing",this.Carousel.Panzoom.destroy(),this.detachEvents(),this.trigger("closing",t),"destroy"===this.state)return;this.$container.setAttribute("aria-hidden","true"),this.$container.classList.add("is-closing");const e=this.getSlide();if(this.Carousel.slides.forEach((t=>{t.$content&&t.index!==e.index&&t.$content.remove()})),"closing"===this.state){const t=void 0===e.hideClass?this.option("hideClass"):e.hideClass;this.animateCSS(e.$content,t,(()=>{this.destroy()}))}}destroy(){this.state="destroy",this.trigger("destroy");const t=this.option("placeFocusBack")?this.getSlide().$trigger:null;if(this.Carousel.destroy(),this.detachPlugins(),this.Carousel=null,this.options={},this.events={},this.$container.remove(),this.$container=this.$backdrop=this.$carousel=null,t)if(L)t.focus({preventScroll:!0});else{const e=document.body.scrollTop;t.focus(),document.body.scrollTop=e}const e=T.getInstance();e?e.focus():(document.documentElement.classList.remove("with-fancybox"),document.body.classList.remove("is-using-mouse"),this.revealScrollbar())}static show(t,e={}){return new T(t,e)}static fromEvent(t,e={}){if(t.defaultPrevented)return;if(t.button&&0!==t.button)return;if(t.ctrlKey||t.metaKey||t.shiftKey)return;let i,s,n,o=!1,a=t.target;if((a.matches("[data-fancybox-trigger]")||(a=a.closest("[data-fancybox-trigger]")))&&(n=a&&a.dataset&&a.dataset.fancyboxTrigger),n){const t=document.querySelectorAll(`[data-fancybox="${n}"]`),e=parseInt(a.dataset.fancyboxIndex,10)||0;a=t.length?t[e]:a}a||(a=t.target),Array.from(T.openers.keys()).reverse().some((e=>{if(i=a,i.matches(e)||(i=i.closest(e)))return t.preventDefault(),s=e,!0})),s&&(e.target=i,i.origTarget=t.target,o=T.fromOpener(s,e));const r=T.getInstance();return r&&"ready"===r.state&&t.detail&&document.body.classList.add("is-using-mouse"),o}static fromOpener(t,i={}){let s=[],n=i.startIndex||0,o=(i=e({},i,T.openers.get(t))).groupAttr;void 0===o&&(o="data-fancybox");let a=i.target;if(o){if(a&&t&&t===`[${o}]`){const e=a.getAttribute(`${o}`);t=!(!e||!e.length||"true"===e)&&`[${o}='${e}']`}}else t=!1;if(t&&(s=[].slice.call(document.querySelectorAll(t))),!s.length&&a&&(s=[a]),!s.length)return!1;const r=T.getInstance();return!(r&&s.indexOf(r.options.$trigger)>-1)&&(n=a?s.indexOf(a):n,s=s.map((function(t){const e=["false","0","no","null"],i=["true","1","yes"],s=Object.assign({},t.dataset);for(let[t,n]of Object.entries(s))if("string"==typeof n||n instanceof String)if(e.indexOf(n)>-1)s[t]=!1;else if(i.indexOf(s[t])>-1)s[t]=!0;else try{s[t]=JSON.parse(n)}catch(e){s[t]=n}return delete s.fancybox,delete s.type,t instanceof Element&&(s.$trigger=t),s})),new T(s,e({},i,{startIndex:n,$trigger:a})))}static bind(t,e={}){if(f){if(!T.openers.size){document.body.addEventListener("click",T.fromEvent,!1);for(const[t,e]of Object.entries(T.Plugins||{}))e.Fancybox=this,"function"==typeof e.create&&e.create()}T.openers.set(t,e)}}static unbind(t){T.openers.delete(t),T.openers.size||T.destroy()}static destroy(){let t;for(;t=T.getInstance();)t.destroy();T.openers=new Map,document.body.removeEventListener("click",T.fromEvent,!1)}static getInstance(t){let e=[];e=t?[document.getElementById(`fancybox-${t}`)]:Array.from(document.querySelectorAll(".fancybox__container")).reverse();for(const t of e){const e=t&&t.Fancybox;if(e&&"closing"!==e.state&&"customClosing"!==e.state)return e}return null}static close(t=!0){let e=null;for(;e=T.getInstance();)if(e.close(),!t)return}}T.version="4.0.0-alpha.1",T.defaults={startIndex:0,preload:1,infinite:!0,showClass:"fancybox-zoomInUp",hideClass:"fancybox-fadeOut",animated:!0,hideScrollbar:!0,parentEl:null,mainClass:null,autoFocus:!0,trapFocus:!0,placeFocusBack:!0,click:"close",closeButton:"inside",dragToClose:!0,keyboard:{Escape:"close",Delete:"close",Backspace:"close",PageUp:"next",PageDown:"prev",ArrowUp:"next",ArrowDown:"prev",ArrowRight:"next",ArrowLeft:"prev"},template:{closeButton:'',spinner:'',main:null},l10n:{CLOSE:"Close",NEXT:"Next",PREV:"Previous",MODAL:"You can close this modal content with the ESC key",ERROR:"Something Went Wrong, Please Try Again Later",IMAGE_ERROR:"Image Not Found",ELEMENT_NOT_FOUND:"HTML Element Not Found",AJAX_NOT_FOUND:"Error Loading AJAX : Not Found",AJAX_FORBIDDEN:"Error Loading AJAX : Forbidden",IFRAME_ERROR:"Error Loading Page"}},T.openers=new Map,T.Plugins=S,T.isMobile=()=>!!navigator&&/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent),T.bind("[data-fancybox]");export{m as Carousel,T as Fancybox,h as Panzoom}; diff --git a/dist/fancybox.umd.js b/dist/fancybox.umd.js index eb3850f..41f4c55 100644 --- a/dist/fancybox.umd.js +++ b/dist/fancybox.umd.js @@ -1,2 +1,2 @@ // @fancyapps/ui/Fancybox v4.0.0-alpha.1 -!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?e(exports):"function"==typeof define&&define.amd?define(["exports"],e):e((t="undefined"!=typeof globalThis?globalThis:t||self).window=t.window||{})}(this,(function(t){"use strict";function e(t){return(e="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(t)}function i(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function n(t,e){for(var i=0;it.length)&&(e=t.length);for(var i=0,n=new Array(e);i=t.length?{done:!0}:{done:!1,value:t[n++]}},e:function(t){throw t},f:o}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var s,a=!0,r=!1;return{s:function(){i=i.call(t)},n:function(){var t=i.next();return a=t.done,t},e:function(t){r=!0,s=t},f:function(){try{a||null==i.return||i.return()}finally{if(r)throw s}}}}var g=function(t){return"object"===e(t)&&null!==t&&t.constructor===Object&&"[object Object]"===Object.prototype.toString.call(t)},m=function t(){for(var i=!1,n=arguments.length,o=new Array(n),s=0;s1&&void 0!==arguments[1]?arguments[1]:1e3;return t=parseFloat(t)||0,Math.round((t+Number.EPSILON)*e)/e},b="undefined"!=typeof window&&window.ResizeObserver||function(){function t(e){i(this,t),this.observables=[],this.boundCheck=this.check.bind(this),this.boundCheck(),this.callback=e}return o(t,[{key:"observe",value:function(t){if(!this.observables.some((function(e){return e.el===t}))){var e={el:t,size:{height:t.clientHeight,width:t.clientWidth}};this.observables.push(e)}}},{key:"unobserve",value:function(t){this.observables=this.observables.filter((function(e){return e.el!==t}))}},{key:"disconnect",value:function(){this.observables=[]}},{key:"check",value:function(){var t=this.observables.filter((function(t){var e=t.el.clientHeight,i=t.el.clientWidth;if(t.size.height!==e||t.size.width!==i)return t.size.height=e,t.size.width=i,!0})).map((function(t){return t.el}));t.length>0&&this.callback(t),window.requestAnimationFrame(this.boundCheck)}}]),t}(),w=function t(e){return!(!e||e.classList.contains("carousel__track")||e===document.body)&&(function(t){var e=window.getComputedStyle(t)["overflow-y"],i=window.getComputedStyle(t)["overflow-x"],n=("scroll"===e||"auto"===e)&&Math.abs(t.scrollHeight-t.clientHeight)>1,o=("scroll"===i||"auto"===i)&&Math.abs(t.scrollWidth-t.clientWidth)>1;return n||o}(e)?e:t(e.parentNode))},x=function(t){var e=0;return t&&(e=t instanceof SVGElement?Math.min(t.getClientRects()[0].height,t.height.baseVal.value):Math.max(t.offsetHeight,t.scrollHeight)),e},k=function(){function t(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};i(this,t),this.options=m(!0,{},e),this.plugins=[],this.events={};for(var n=0,o=["on","once"];n1&&void 0!==arguments[1]?arguments[1]:[];return String(t).replace(/\{\{(\w+).?(\w+)?\}\}/g,(function(t,n,o){var s=!1;if(!(s=o?e.option("".concat(n[0]+n.toLowerCase().substring(1),".l10n.").concat(o)):e.option("l10n.".concat(n))))return n;for(var a=0;a1?e-1:0),n=1;n1&&void 0!==arguments[1]?arguments[1]:{};if(i(this,n),s=m(!0,{},$,s),o=e.call(this,s),!(t instanceof HTMLElement))throw new Error("Viewport not found");o.state="init",o.$viewport=t;for(var a=0,r=["onPointerDown","onPointerMove","onPointerUp","onWheel","onClick"];a0&&t>0?e/t*this.maxScale:this.maxScale},t.updateMetrics(),t.trigger(e>0?"load":"error")};!0!==this.$content.complete?(this.$content.onload=function(){return e()},this.$content.onerror=function(){return e()}):e()}else this.updateMetrics()}},{key:"resetValues",value:function(){this.viewportDim={top:0,left:0,width:0,height:0},this.contentDim={width:0,height:0},this.friction=this.option("friction"),this.current={x:0,y:0,scale:1},this.velocity={x:0,y:0,scale:0},this.pan={x:0,y:0,scale:1},this.drag={startTime:null,firstPosition:null,startPosition:null,startPoint:null,startDistance:null,endPosition:null,endPoint:null,distance:0,distanceX:0,distanceY:0,elapsedTime:0},this.lockAxis=null,this.pendingAnimateUpdate=null,this.pendingResizeUpdate=null,this.pointers=[]}},{key:"updateMetrics",value:function(){var t,e,i=this.$viewport.getBoundingClientRect(),n=i.top,o=i.left,s=i.width,a=i.height,r=window.getComputedStyle(this.$viewport);s-=parseFloat(r.paddingLeft)+parseFloat(r.paddingRight),a-=parseFloat(r.paddingTop)+parseFloat(r.paddingBottom),this.viewportDim={top:n,left:o,width:s,height:a},this.contentDim={width:this.option("width",(t=this.$content,e=0,t&&(e=t instanceof SVGElement?Math.min(t.getClientRects()[0].width,t.width.baseVal.value):Math.max(t.offsetWidth,t.scrollWidth)),e)),height:this.option("hidth",x(this.$content))},this.trigger("updateMetrics"),this.updateBounds()}},{key:"updateBounds",value:function(t){var e={from:0,to:0},i={from:0,to:0};if(t||(t=this.velocity.scale?this.pan.scale:this.current.scale),t<1)return[e,i];var n=this.contentDim,o=this.viewportDim,s=n.width*t,a=n.height*t;return e.to=y(.5*(s-n.width)),n.width>o.width?e.from=y(e.to+o.width-s):e.from=y(-1*e.to),i.to=y(.5*(a-n.height)),n.height>o.height?i.from=y(i.to+o.height-a):i.from=y(-1*i.to),this.boundX=e,this.boundY=i,this.trigger("updateBounds",t),[this.boundX,this.boundY]}},{key:"zoomIn",value:function(t){this.zoomTo(this.current.scale+(t||this.option("step")))}},{key:"zoomOut",value:function(t){this.zoomTo(this.current.scale-(t||this.option("step")))}},{key:"toggleZoom",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=this.option("maxScale"),i=this.option("baseScale");this.zoomTo(this.current.scale>i+.5*(e-i)?i:e,t)}},{key:"zoomTo",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},i=e.x,n=void 0===i?null:i,o=e.y,s=void 0===o?null:o,a=e.friction,r=void 0===a?this.option("zoomFriction"):a;t||(t=this.option("baseScale")),t=Math.max(Math.min(t,this.option("maxScale")),this.option("minScale"));var l=this.contentDim.width,c=this.contentDim.height,h=l*this.current.scale,d=c*this.current.scale,u=l*t,f=c*t;null===n&&(n=.5*h),null===s&&(s=.5*d),!1===this.option("zoomInCentered")&&(n<.5*h&&(n=h),n>h&&(n=0),s<0&&(s=d),s>d&&(s=0));var v=h>0?n/h:0,p=d>0?s/d:0,g=(u-h)*(v-.5),m=(f-d)*(p-.5);Math.abs(g)<1&&(g=0),Math.abs(m)<1&&(m=0),n=this.current.x-g,s=this.current.y-m,this.panTo({x:n,y:s,scale:t,friction:r})}},{key:"panTo",value:function(t){var e=t.x,i=void 0===e?0:e,n=t.y,o=void 0===n?0:n,s=t.scale,a=void 0===s?this.current.scale:s,r=t.friction,l=void 0===r?this.option("friction"):r,c=t.ignoreBounds,h=void 0!==c&&c;if(l||this.stopMoving(),!0!==h){var u=d(this.updateBounds(a),2),f=u[0],v=u[1];f&&(i=Math.max(Math.min(i,f.to),f.from)),v&&(o=Math.max(Math.min(o,v.to),v.from))}return l>0&&(Math.abs(i-this.current.x)>.1||Math.abs(o-this.current.y)>.1||Math.abs(a-this.current.scale)>.1)?(this.state="panning",this.friction=l,this.pan={x:i,y:o,scale:a},this.velocity={x:(1/this.friction-1)*(i-this.current.x),y:(1/this.friction-1)*(o-this.current.y),scale:(1/this.friction-1)*(a-this.current.scale)},this.animate(),this):(this.pendingAnimateUpdate&&(cancelAnimationFrame(this.pendingAnimateUpdate),this.pendingAnimateUpdate=null),this.state="ready",this.stopMoving(),this.current={x:i,y:o,scale:a},this.transform(),this.handleCursor(),this.trigger("afterAnimate",!0),this)}},{key:"animate",value:function(){var t=this;if(!this.pendingAnimateUpdate){if(this.applyBoundForce(),this.applyDragForce(),this.velocity.x*=this.friction,this.velocity.y*=this.friction,this.velocity.scale*=this.friction,this.current.x+=this.velocity.x,this.current.y+=this.velocity.y,this.current.scale+=this.velocity.scale,"dragging"==this.state||"pointerdown"==this.state||Math.abs(this.velocity.x)>.05||Math.abs(this.velocity.y)>.05||Math.abs(this.velocity.scale)>.05)return this.transform(),void(this.pendingAnimateUpdate=requestAnimationFrame((function(){t.pendingAnimateUpdate=null,t.animate()})));this.current.x=y(this.current.x+this.velocity.x/(1/this.friction-1)),this.current.y=y(this.current.y+this.velocity.y/(1/this.friction-1)),Math.abs(this.current.x)<.5&&(this.current.x=0),Math.abs(this.current.y)<.5&&(this.current.y=0),this.current.scale=y(this.current.scale+this.velocity.scale/(1/this.friction-1),1e4),Math.abs(this.current.scale-1)<.01&&(this.current.scale=1),this.state="ready",this.stopMoving(),this.transform(),this.handleCursor(),this.trigger("afterAnimate")}}},{key:"handleCursor",value:function(){var t=this.option("draggableClass");t&&this.option("touch")&&(this.contentDim.width<=this.viewportDim.width&&1==this.option("panOnlyZoomed")&&this.current.scale<=this.option("baseScale")?this.$viewport.classList.remove(t):this.$viewport.classList.add(t))}},{key:"isMoved",value:function(){return 0!==this.current.x||0!==this.current.y||1!==this.current.scale||this.velocity.x>0||this.velocity.y>0||this.velocity.scale>0}},{key:"stopMoving",value:function(){this.velocity={x:0,y:0,scale:0}}},{key:"transform",value:function(){this.trigger("beforeTransform");var t=y(this.current.x,100),e=y(this.current.y,100),i=y(this.current.scale,1e5);Math.abs(t)<=.1&&Math.abs(e)<=.1&&Math.abs(i-1)<=.1?this.$content.style.transform="":this.$content.style.transform="translate3d(".concat(t,"px, ").concat(e,"px, 0px) scale(").concat(i,")"),this.trigger("afterTransform")}},{key:"applyBoundForce",value:function(){if("decel"===this.state){var t,e,i,n,o={x:0,y:0},s=this.option("bounceForce"),a=this.boundX,r=this.boundY;if(a&&(t=this.current.xa.to),r&&(i=this.current.yr.to),t||e){var l=(t?a.from:a.to)-this.current.x,c=l*s,h=this.current.x+(this.velocity.x+c)/(1/this.friction-1);t&&ha.to||(c=l*s-this.velocity.x),o.x=c}if(i||n){var d=(i?r.from:r.to)-this.current.y,u=d*s,f=this.current.y+(this.velocity.y+u)/(1/this.friction-1);i&&fr.to||(u=d*s-this.velocity.y),o.y=u}this.velocity.x+=o.x,this.velocity.y+=o.y}}},{key:"applyDragForce",value:function(){"dragging"===this.state&&(this.velocity={x:(1/this.friction-1)*(this.drag.endPosition.x-this.current.x),y:(1/this.friction-1)*(this.drag.endPosition.y-this.current.y),scale:(1/this.friction-1)*(this.drag.endPosition.scale-this.current.scale)})}},{key:"attachEvents",value:function(){var t=this,e=this.$viewport;this.resizeObserver=this.resizeObserver||new b((function(e){t.pendingResizeUpdate=t.pendingResizeUpdate||setTimeout((function(){t.pendingResizeUpdate=null;var i=e&&e[0].contentRect;!i&&t.$viewport&&(i=t.$viewport.getBoundingClientRect()),i&&(Math.abs(i.width-t.viewportDim.width)>1||Math.abs(i.height-t.viewportDim.height)>1)&&t.updateMetrics()}),50)})),this.resizeObserver.observe(e),e.addEventListener("click",this.onClick,{passive:!1}),e.addEventListener("wheel",this.onWheel,{passive:!1}),this.option("touch")&&(window.PointerEvent?(e.addEventListener("pointerdown",this.onPointerDown,{passive:!1}),e.addEventListener("pointermove",this.onPointerMove,{passive:!1}),e.addEventListener("pointerup",this.onPointerUp),e.addEventListener("pointercancel",this.onPointerUp)):(e.addEventListener("touchstart",this.onPointerDown,{passive:!1}),e.addEventListener("touchmove",this.onPointerMove,{passive:!1}),e.addEventListener("touchend",this.onPointerUp),e.addEventListener("touchcancel",this.onPointerUp),e.addEventListener("mousedown",this.onPointerDown)))}},{key:"detachEvents",value:function(){this.resizeObserver&&this.resizeObserver.disconnect(),this.resizeObserver=null,this.pendingResizeUpdate&&(clearTimeout(this.pendingResizeUpdate),this.pendingResizeUpdate=null);var t=this.$viewport;window.PointerEvent?(t.removeEventListener("pointerdown",this.onPointerDown,{passive:!1}),t.removeEventListener("pointermove",this.onPointerMove,{passive:!1}),t.removeEventListener("pointerup",this.onPointerUp),t.removeEventListener("pointercancel",this.onPointerUp)):(t.removeEventListener("touchstart",this.onPointerDown,{passive:!1}),t.removeEventListener("touchmove",this.onPointerMove,{passive:!1}),t.removeEventListener("touchend",this.onPointerUp),t.removeEventListener("touchcancel",this.onPointerUp),t.removeEventListener("mousedown",this.onPointerDown)),t.removeEventListener("click",this.onClick,{passive:!1}),t.removeEventListener("wheel",this.onWheel,{passive:!1})}},{key:"copyPointer",value:function(t){return{pointerId:t.pointerId,clientX:t.clientX,clientY:t.clientY}}},{key:"findPointerIndex",value:function(t){for(var e=this.pointers.length;e--;)if(this.pointers[e].pointerId===t.pointerId)return e;return-1}},{key:"addPointer",value:function(t){var e=0;if(t.touches&&t.touches.length){var i,n=p(t.touches);try{for(n.s();!(i=n.n()).done;){var o=i.value;o.pointerId=e++,this.addPointer(o)}}catch(t){n.e(t)}finally{n.f()}}else(e=this.findPointerIndex(t))>-1&&this.pointers.splice(e,1),this.pointers.push(t)}},{key:"removePointer",value:function(t){if(t.touches)for(;this.pointers.length;)this.pointers.pop();else{var e=this.findPointerIndex(t);e>-1&&this.pointers.splice(e,1)}}},{key:"getMiddlePoint",value:function(){var t=u(this.pointers),e=(t=t.sort((function(t,e){return e.pointerId-t.pointerId}))).shift(),i=t.shift();return i?{clientX:.5*(e.clientX-i.clientX)+i.clientX,clientY:.5*(e.clientY-i.clientY)+i.clientY}:{clientX:e?e.clientX:0,clientY:e?e.clientY:0}}},{key:"getDistance",value:function(t,e){if(!(t=(t=t||u(this.pointers)).slice())||t.length<2)return 0;var i=(t=t.sort((function(t,e){return e.pointerId-t.pointerId}))).shift(),n=t.shift(),o=Math.abs(n.clientX-i.clientX);if("x"===e)return o;var s=Math.abs(n.clientY-i.clientY);return"y"===e?s:Math.sqrt(Math.pow(o,2)+Math.pow(s,2))}},{key:"resetDragState",value:function(){var t=this.$content.getClientRects()[0],e=t.left,i=t.top,n=this.getMiddlePoint(),o={top:i,left:e,x:this.current.x,y:this.current.y,scale:this.current.scale};m(this.drag,{startPosition:m({},o),startPoint:m({},n),startDistance:this.getDistance(),endPosition:m({},o),endPoint:m({},n),distance:0,distanceX:0,distanceY:0}),"pointerdown"===this.state&&(this.lockAxis=null,this.drag.startTime=new Date,this.drag.firstPosition=Object.assign({},o)),this.stopMoving(),this.friction=this.option("friction")}},{key:"onPointerDown",value:function(t){if(t&&!(t.button&&t.button>0))if(this.option("panOnlyZoomed")&&this.velocity.scale)t.preventDefault();else{if(this.resetDragState(),!this.pointers.length){if(-1!==["BUTTON","TEXTAREA","OPTION","INPUT","SELECT","VIDEO"].indexOf(t.target.nodeName))return;if(this.option("textSelection")&&function(t,e,i){for(var n=t.childNodes,o=document.createRange(),s=0;s=r.left&&i>=r.top&&e<=r.right&&i<=r.bottom)return a}}return!1}(t.target,t.clientX,t.clientY))return;if(w(t.target))return}var e;if((e=window.getSelection?window.getSelection():document.selection)&&e.rangeCount&&e.getRangeAt(0).getClientRects().length&&(e.removeAllRanges?e.removeAllRanges():e.empty&&e.empty()),this.pointers.length>1||this.pointers.length&&this.lockAxis)t.preventDefault();else if(!1!==this.trigger("touchStart",t))if(t.preventDefault(),this.state="pointerdown",this.addPointer(this.copyPointer(t)),this.resetDragState(),window.PointerEvent)try{t.target.setPointerCapture(t.pointerId)}catch(t){}else document.addEventListener("mousemove",this.onPointerMove,{passive:!1}),document.addEventListener("mouseup",this.onPointerUp,{passive:!1})}}},{key:"onPointerMove",value:function(t){if(!(t.targetTouches&&t.targetTouches.length>1||"pointerdown"!==this.state&&"dragging"!==this.state))if(0!=this.trigger("touchMove",t)){if(this.addPointer(this.copyPointer(t)),!(this.pointers.length>1&&!1===this.option("pinchToZoom")))if(1==this.option("panOnlyZoomed")&&this.current.scale===this.option("baseScale")&&this.pointers.length<2)t.preventDefault();else{var e=this.getMiddlePoint(),i=[e,this.drag.startPoint];this.drag.distance=this.getDistance(i);var n=this.events.click&&this.events.click.length||this.events.doubleClick&&this.events.doubleClick.length||this.option.click||this.option.doubleClick;if(!(this.drag.distance<6&&(n||this.option("lockAxis")&&!this.lockAxis))&&("pointerdown"==this.state&&(this.state="dragging"),"dragging"===this.state)){var o=this.option("lockAxis");if(!this.lockAxis&&o)if("xy"===o){var s=this.getDistance(i,"x"),a=this.getDistance(i,"y"),r=Math.abs(180*Math.atan2(a,s)/Math.PI);this.lockAxis=r>45&&r<135?"y":"x"}else this.lockAxis=o;t.preventDefault(),t.stopPropagation(),this.$viewport.classList.add(this.option("draggingClass")),this.animate();var l=this.current.scale,c=0,h=0;if(this.current.scale===this.option("baseScale")&&"y"===this.lockAxis||(c=e.clientX-this.drag.startPoint.clientX),this.current.scale===this.option("baseScale")&&"x"===this.lockAxis||(h=e.clientY-this.drag.startPoint.clientY),this.drag.endPosition.x=this.drag.startPosition.x+c,this.drag.endPosition.y=this.drag.startPosition.y+h,this.pointers.length>1){this.drag.middlePoint=e,l=this.drag.startPosition.scale*this.getDistance()/this.drag.startDistance,l=Math.max(Math.min(l,2*this.option("maxScale")),.5*this.option("minScale"));var d=this.$content.width,u=this.$content.height,f=d*this.drag.startPosition.scale,v=u*this.drag.startPosition.scale,p=u*l,g=(d*l-f)*((this.drag.startPoint.clientX-this.drag.startPosition.left)/f-.5),m=(p-v)*((this.drag.startPoint.clientY-this.drag.startPosition.top)/v-.5);this.drag.endPosition.x-=g,this.drag.endPosition.y-=m,this.drag.endPosition.scale=l,this.updateBounds(l)}this.applyDragResistance()}}}else t.preventDefault()}},{key:"onPointerUp",value:function(t){if(this.removePointer(t),window.PointerEvent)try{t.target.releasePointerCapture(t.pointerId)}catch(t){}else document.removeEventListener("mousemove",this.onPointerMove,{passive:!1}),document.removeEventListener("mouseup",this.onPointerUp,{passive:!1});if(this.pointers.length>0)return t.preventDefault(),void this.resetDragState();if("pointerdown"===this.state||"dragging"===this.state){this.$viewport.classList.remove(this.option("draggingClass"));var e=this.$content.getClientRects()[0],i=e.top,n=e.left,o=this.drag;if(m(!0,o,{elapsedTime:new Date-o.startTime,distanceX:o.endPosition.x-o.firstPosition.x,distanceY:o.endPosition.y-o.firstPosition.y,endPosition:{top:i,left:n}}),o.distance=Math.sqrt(Math.pow(o.distanceX,2)+Math.pow(o.distanceY,2)),this.state="decel",this.friction=this.option("decelFriction"),this.pan={x:this.current.x+this.velocity.x/(1/this.friction-1),y:this.current.y+this.velocity.y/(1/this.friction-1),scale:this.current.scale+this.velocity.scale/(1/this.friction-1)},!1!==this.trigger("touchEnd",t)&&"decel"===this.state){var s=this.option("minScale");if(this.current.scale.01){var r={friction:.64};o.middlePoint&&(r.x=o.middlePoint.clientX-n,r.y=o.middlePoint.clientY-i),this.zoomTo(a,r)}}}}}},{key:"applyDragResistance",value:function(){var t,e,i,n,o=this.boundX,s=this.boundY;if(o&&(t=this.drag.endPosition.xo.to),s&&(i=this.drag.endPosition.ys.to),t||e){var a=t?o.from:o.to,r=this.drag.endPosition.x-a;this.drag.endPosition.x=a+.3*r}if(i||n){var l=i?s.from:s.to,c=this.drag.endPosition.y-l;this.drag.endPosition.y=l+.3*c}}},{key:"onWheel",value:function(t){!1!==this.trigger("wheel",t)&&"zoom"==this.option("wheel",t)&&this.zoomWithWheel(t)}},{key:"zoomWithWheel",value:function(t){void 0===this.changedDelta&&(this.changedDelta=0);var e=this.current.scale,i=Math.max(-1,Math.min(1,-t.deltaY||-t.deltaX||t.wheelDelta||-t.detail));if(i<0&&e<=this.option("minScale")||i>0&&e>=this.option("maxScale")){if(this.changedDelta+=Math.abs(i),this.changedDelta>this.option("wheelLimit"))return}else this.changedDelta=0;e=e*(100+i*this.option("wheelFactor"))/100,t.preventDefault();var n=this.$content.getClientRects()[0],o=n.top,s=n.left,a=t.clientX-s,r=t.clientY-o;this.zoomTo(e,{x:a,y:r})}},{key:"onClick",value:function(t){var e=this;if(!t.defaultPrevented){if(window.getSelection().toString().length)return t.stopPropagation(),void t.stopImmediatePropagation();if(this.drag.startPosition&&this.drag.endPosition&&(Math.abs(this.drag.endPosition.top-this.drag.startPosition.top)>1||Math.abs(this.drag.endPosition.left-this.drag.startPosition.left)>1))return t.stopPropagation(),void t.stopImmediatePropagation();if(this.drag.distance>(this.lockAxis?6:1))return t.preventDefault(),t.stopPropagation(),void t.stopImmediatePropagation();var i=null,n=null;void 0!==t.clientX&&void 0!==t.clientY&&(i=t.clientX-this.$content.getClientRects()[0].left,n=t.clientY-this.$content.getClientRects()[0].top);var o=this.options.doubleClick;if(!o&&this.events.doubleClick&&this.events.doubleClick.length&&(o=!0),o){if(!this.clickTimer)return this.lastClickEvent=t,void(this.clickTimer=setTimeout((function(){e.clickTimer=null,!1!==e.trigger("click",t)&&"toggleZoom"===e.option("click")&&e.toggleZoom({x:i,y:n})}),this.option("clickDelay")));this.getDistance([t,this.lastClickEvent])>=6||(clearTimeout(this.clickTimer),this.clickTimer=null,!1!==this.trigger("doubleClick",t)&&"toggleZoom"===this.option("doubleClick")&&this.toggleZoom({x:i,y:n}))}else{if(!1===this.trigger("click",t))return;"toggleZoom"===this.option("click")&&this.toggleZoom({x:i,y:n})}}}},{key:"destroy",value:function(){"destroy"!==this.state&&(this.state="destroy",this.$viewport.classList.remove("not-selectable"),this.$content instanceof HTMLImageElement&&!this.$content.complete&&(this.$content.onload=null,this.$content.onerror=null),this.pendingAnimateUpdate&&(cancelAnimationFrame(this.pendingAnimateUpdate),this.pendingAnimateUpdate=null),this.clickTimer&&(clearTimeout(this.clickTimer),this.clickTimer=null),this.detachEvents(),this.pointers=[],this.resetValues(),this.$viewport=null,this.$content=null,this.options={},this.events={})}}]),n}(k);C.version="4.0.0-alpha.1",C.Plugins={};var P=function(t,e){var i=0;return function(){var n=(new Date).getTime();if(!(n-i1&&this.carousel.elemDimWidth=t-1&&this.$next.setAttribute("disabled","")))}},{key:"cleanup",value:function(){this.$prev&&this.$prev.remove(),this.$prev=null,this.$next&&this.$next.remove(),this.$next=null,this.$container&&this.$container.remove(),this.$container=null}},{key:"attach",value:function(){this.carousel.on("refresh change",this.onRefresh)}},{key:"detach",value:function(){this.carousel.off("refresh change",this.onRefresh),this.cleanup()}}]),t}();S.defaults={prevTpl:'',nextTpl:'',classNames:{main:"carousel__nav",button:"carousel__button",next:"is-next",prev:"is-prev"}};var E=function(){function t(e){i(this,t),this.carousel=e,this.$list=null,this.events={change:this.onChange.bind(this),refresh:this.onRefresh.bind(this)}}return o(t,[{key:"buildList",value:function(){var t=this;if(!(this.carousel.pages.length<2)){var e=document.createElement("ol");return e.classList.add("carousel__dots"),e.addEventListener("click",(function(e){if("page"in e.target.dataset){e.preventDefault(),e.stopPropagation();var i=parseInt(e.target.dataset.page,10),n=t.carousel;i!==n.page&&(n.pages.length<3&&n.option("infinite")?n[0==i?"slidePrev":"slideNext"]():n.slideTo(i))}})),this.$list=e,this.carousel.$element.appendChild(e),this.carousel.$element.classList.add("has-dots"),e}}},{key:"removeList",value:function(){this.$list&&(this.$list.parentNode.removeChild(this.$list),this.$list=null)}},{key:"rebuildDots",value:function(){var t=this,e=this.$list,i=!!e,n=this.carousel.pages.length;if(n<2)i&&this.removeList();else{i||(e=this.buildList());var o=this.$list.children.length;if(o>n)for(var s=n;s1&&void 0!==arguments[1]?arguments[1]:{};return i(this,n),s=m(!0,{},M,s),(o=e.call(this,s)).state="init",o.$element=t,t.Carousel=l(o),o.page=o.pageIndex=null,o.prevPage=o.prevPageIndex=null,o.slideNext=P(o.slideNext.bind(l(o)),250),o.slidePrev=P(o.slidePrev.bind(l(o)),250),o.attachPlugins(n.Plugins),o.trigger("init"),o.initLayout(),o.initSlides(),o.initPanzoom(),o.state="ready",o.trigger("ready"),o}return o(n,[{key:"initLayout",value:function(){if(!(this.$element instanceof HTMLElement))throw new Error("No root element provided");var t,e,i=this.option("classNames");(this.$viewport=this.option("viewport")||this.$element.querySelector("."+i.viewport),this.$viewport)||(this.$viewport=document.createElement("div"),this.$viewport.classList.add(i.viewport),(t=this.$viewport).append.apply(t,u(this.$element.childNodes)),this.$element.appendChild(this.$viewport));(this.$track=this.option("track")||this.$element.querySelector("."+i.track),this.$track)||(this.$track=document.createElement("div"),this.$track.classList.add(i.track),(e=this.$track).append.apply(e,u(this.$viewport.childNodes)),this.$viewport.appendChild(this.$track))}},{key:"initSlides",value:function(){var t=this;this.slides=[],this.$viewport.querySelectorAll("."+this.option("classNames.slide")).forEach((function(e){var i={$el:e,isDom:!0};t.slides.push(i),t.trigger("createSlide",i,t.slides.length)})),Array.isArray(this.options.slides)&&(this.slides=m(!0,u(this.slides),this.options.slides))}},{key:"updatePage",value:function(){var t=this.page;null===t&&(t=this.page=this.option("initialPage")),this.updateMetrics();var e=this.pages;e[t]||(t=e.length?e[e.length-1].index:0),this.slideTo(t,{friction:0})}},{key:"updateBounds",value:function(){var t=this.Panzoom,e=this.option("infinite"),i=this.option("infiniteX",e),n=this.option("infiniteY",e);i&&(t.boundX=null),n&&(t.boundY=null),i||n||(t.boundX={from:-1*this.pages[this.pages.length-1].left,to:-1*this.pages[0].left})}},{key:"initPanzoom",value:function(){var t=this,e=m(!0,{},{content:this.$track,click:!1,doubleClick:!1,wheel:!1,pinchToZoom:!1,lockAxis:"x",textSelection:function(){return t.option("textSelection",!1)},panOnlyZoomed:function(){return t.option("panOnlyZoomed",t.elemDimWidth1?i-1:0),o=1;o1&&t.drag.elapsedTime<350&&Math.abs(t.drag.distanceY)<1&&Math.abs(t.drag.distanceX)>5)this[t.drag.distanceX<0?"slideNext":"slidePrev"]();else if(e){var i=d(this.getPageFromPosition(-1*this.Panzoom.pan.x),2)[1];this.setPage(i)}else this.slideToClosest()}},{key:"manageInfiniteTrack",value:function(){if(!(!this.option("infiniteX",this.option("infinite"))||this.pages.length<2||this.elemDimWidtht.viewportDim.width&&(t.current.x-=t.contentDim.width,t.drag.firstPosition&&(t.drag.firstPosition.x-=t.contentDim.width),this.pageIndex=this.pageIndex+this.pages.length,e=!0),e&&"dragging"===t.state&&t.resetDragState(),e}}},{key:"manageSlideVisiblity",value:function(){var t=this,e=this.elemDimWidth,i=this.wrapDimWidth,n=-1*this.Panzoom.current.x;Math.abs(n)<.1&&(n=0);var o=this.option("preload"),s=this.option("infiniteX",this.option("infinite")),a=parseFloat(window.getComputedStyle(this.$viewport,null).getPropertyValue("padding-left")),r=parseFloat(window.getComputedStyle(this.$viewport,null).getPropertyValue("padding-right"));this.slides.forEach((function(l){var c,h,d=0;c=n-a,h=n+i+r,c-=o*(i+a+r),h+=o*(i+a+r);var u=l.left+l.width>c&&l.leftc&&l.leftc&&l.leftn&&l.left<=n+i+r&&(d=0)):t.removeSlideEl(l),l.hasDiff=d}));var l=0,c=0;this.slides.forEach((function(t,i){var n=0;t.$el?(i!==l||t.hasDiff?n=c+t.hasDiff*e:c=0,t.$el.style.left=Math.abs(n)>.1?"".concat(c+t.hasDiff*e,"px"):"",l++):c+=t.width})),this.Panzoom.viewportDim.height=this.Panzoom.$content.clientHeight,this.markSelectedSlides()}},{key:"markSelectedSlides",value:function(){var t=this,e=this.option("classNames.slideSelected"),i="aria-hidden";this.slides.forEach((function(n,o){var s=n.$el;if(s){var a=t.pages[t.page];a&&a.indexes&&a.indexes.indexOf(o)>-1?(e&&!s.classList.contains(e)&&(s.classList.add(e),t.trigger("selectSlide",n)),s.removeAttribute(i)):(e&&s.classList.contains(e)&&(s.classList.remove(e),t.trigger("unselectSlide",n)),s.setAttribute(i,!0))}}))}},{key:"createSlideEl",value:function(t){if(t){if(!t.$el){var e,i=document.createElement("div");if(i.dataset.index=t.index,i.classList.add(this.option("classNames.slide")),t.customClass)(e=i.classList).add.apply(e,u(t.customClass.split(" ")));t.html&&(i.innerHTML=t.html);var n=[];this.slides.forEach((function(t,e){t.$el&&n.push(e)}));var o=t.index,s=null;if(n.length){var a=n.reduce((function(t,e){return Math.abs(e-o)this.wrapDimWidth)for(var l=0;lthis.wrapDimWidth)&&(a.push({indexes:[],slides:[]}),c=a.length-1,h=0),h+=f.width,a[c].indexes.push(d),a[c].slides.push(f)}var v=this.option("center"),p=this.option("fill");a.forEach((function(t,i){t.index=i,t.width=t.slides.reduce((function(t,e){return t+e.width}),0),t.left=t.slides[0].left,v&&(t.left+=.5*(e.wrapDimWidth-t.width)*-1),p&&!e.option("infiniteX",e.option("infinite"))&&e.elemDimWidth>e.wrapDimWidth&&(t.left=Math.max(t.left,0),t.left=Math.min(t.left,e.elemDimWidth-e.wrapDimWidth))}));var g,m=[];a.forEach((function(t){g&&t.left===g.left?(g.width+=t.width,g.slides=[].concat(u(g.slides),u(t.slides)),g.indexes=[].concat(u(g.indexes),u(t.indexes))):(t.index=m.length,g=t,m.push(t))})),this.pages=m,this.manageSlideVisiblity(),this.trigger("refresh")}},{key:"setPage",value:function(t,e){var i=0,n=parseInt(t,10)||0,o=this.page,s=this.pageIndex,a=this.pages.length;if(t=(n%a+a)%a,this.option("infiniteX",this.option("infinite"))&&this.elemDimWidth>this.wrapDimWidth){var r=Math.floor(n/a)||0,l=this.elemDimWidth;if(i=this.pages[t].left+r*l,!0===e&&a>2){var c=-1*this.Panzoom.current.x,h=i-l,d=i+l,u=Math.abs(c-i),f=Math.abs(c-h),v=Math.abs(c-d);v1&&void 0!==arguments[1]?arguments[1]:{},i=e.friction,n=void 0===i?this.option("friction"):i;this.Panzoom.panTo({x:-1*this.setPage(t,!0),y:0,friction:n})}},{key:"slideToClosest",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=this.getPageFromPosition(-1*this.Panzoom.pan.x),i=d(e,2),n=i[1];this.slideTo(n,t)}},{key:"slideNext",value:function(){this.slideTo(this.pageIndex+1)}},{key:"slidePrev",value:function(){this.slideTo(this.pageIndex-1)}},{key:"getPageforSlide",value:function(t){var e=this.pages.find((function(e){return e.indexes.indexOf(t)>-1}));return e?e.index:null}},{key:"getPageFromPosition",value:function(t){var e=this.pages.length;this.option("center")&&(t+=.5*this.wrapDimWidth);var i=Math.floor(t/this.elemDimWidth);t-=i*this.elemDimWidth;var n=this.slides.find((function(e){return e.leftt}));if(n){var o=this.getPageforSlide(n.index);return[o,o+i*e]}return[0,0]}},{key:"removeSlideEl",value:function(t){t.$el&&!t.isDom&&(this.trigger("deleteSlide",t),t.$el.remove(),t.$el=null)}},{key:"destroy",value:function(){var t=this;this.state="destroy",this.slides.forEach((function(e){t.removeSlideEl(e)})),this.Panzoom.destroy(),this.options={},this.events={}}}]),n}(k);A.version="4.0.0-alpha.1",A.Plugins=T;var D=!("undefined"==typeof window||!window.document||!window.document.createElement),I=function(){function t(e){i(this,t),this.fancybox=e,this.viewport=null,this.pendingUpdate=null;for(var n=0,o=["onReady","onResize","onTouchstart","onTouchmove"];n.1&&(o="".concat(e.width*i,"px"),s="".concat(e.height*i,"px"),a="translate3d(".concat(e.offsetLeft,"px, ").concat(e.offsetTop,"px, 0) scale(").concat(1/i,")")),n.style.width=o,n.style.height=s,n.style.transform=a,t.Carousel&&t.Carousel.updateMetrics()}}},{key:"onTouchstart",value:function(t){this.startY=t.touches?t.touches[0].screenY:t.screenY}},{key:"onTouchmove",value:function(t){var e=this.startY,i=window.innerWidth/window.document.documentElement.clientWidth;if(!(t.touches.length>1||1!==i)){var n=t.target,o=w(n);if(o){var s=window.getComputedStyle(o),a=parseInt(s.getPropertyValue("height"),10),r=t.touches?t.touches[0].screenY:t.screenY,l=e<=r&&0===o.scrollTop,c=e>=r&&o.scrollHeight-o.scrollTop===a;(l||c)&&t.preventDefault()}else t.preventDefault()}}},{key:"cleanup",value:function(){this.pendingUpdate&&(cancelAnimationFrame(this.pendingUpdate),this.pendingUpdate=null);var t=this.viewport;t&&(t.removeEventListener("resize",this.onResize),this.viewport=null),window.removeEventListener("touchstart",this.onTouchstart,!1),window.removeEventListener("touchmove",this.onTouchmove,!1)}},{key:"attach",value:function(){this.fancybox.on("initLayout",this.onReady)}},{key:"detach",value:function(){this.fancybox.off("initLayout",this.onReady),this.cleanup()}}]),t}(),z=function(){function t(e){i(this,t),this.fancybox=e,this.$wrap=null,this.state="init";for(var n=0,o=["onReady","onClosing","onKeydown"];n'),customClass:"has-thumb has-".concat(e.type||"image")})})),t}},{key:"toggle",value:function(){return"ready"===this.state?(this.Carousel.Panzoom.detachEvents(),this.$wrap.style.display="none",void(this.state="hidden")):"hidden"===this.state?(this.$wrap.style.display="",this.Carousel.Panzoom.attachEvents(),void(this.state="ready")):void this.initLayout()}},{key:"cleanup",value:function(){this.Carousel&&(this.Carousel.destroy(),this.Carousel=null),this.$wrap&&(this.$wrap.remove(),this.$wrap=null),this.state="init"}},{key:"attach",value:function(){this.fancybox.on(this.events)}},{key:"detach",value:function(){this.fancybox.off(this.events),this.cleanup()}}]),t}();z.defaults={autoStart:!0,minSlideCount:3,key:"t"};var _=function(t){return Object.entries(t).map((function(t){return t.map(encodeURIComponent).join("=")})).join("&")},R=function(){function t(e){i(this,t),this.fancybox=e;for(var n=0,o=["onPrepare","onCreateSlide","onDeleteSlide","onSelectSlide","onUnselectSlide","onRefresh","onMessage"];n0?"svembed":"embed"),i="map"):(n=e.match(/(?:maps\.)?google\.([a-z]{2,3}(?:\.[a-z]{2})?)\/(?:maps\/search\/)(.*)/i))&&(t.src="//maps.google.".concat(n[1],"/maps?q=").concat(n[2].replace("query=","q=").replace("api=1",""),"&output=embed"),i="map");i||("#"===e.charAt(0)?i="inline":(n=e.match(/\.(mp4|mov|ogv|webm)((\?|#).*)?$/i))?(i="html5video",t.format=t.format||"video/"+("ogv"===n[1]?"ogg":n[1])):e.match(/(^data:image\/[a-z0-9+\/=]*,)|(\.(jp(e|g|eg)|gif|png|bmp|webp|svg|ico)((\?|#).*)?$)/i)?i="image":e.match(/\.(pdf)((\?|#).*)?$/i)&&(i="pdf")),t.type=i||this.fancybox.option("defaultType","image"),"html5video"!==i&&"video"!==i||(t.video=m({},this.fancybox.option("Html.video"),t.video),t.width&&t.height?t.ratio=parseFloat(t.width)/parseFloat(t.height):t.ratio=t.ratio||t.video.ratio)}},{key:"loadInlineContent",value:function(t){var e;if(t.src instanceof HTMLElement)e=t.src;else if("string"==typeof t.src){var i=t.src.split("#",2),n=2===i.length&&""===i[0]?i[1]:i[0];e=document.getElementById(n)}if(e){if("clone"===t.type||e.$placeHolder){var o=(e=e.cloneNode(!0)).getAttribute("id");o=o?"".concat(o,"--clone"):"clone-".concat(this.fancybox.id,"-").concat(t.index),e.setAttribute("id",o)}else{var s=document.createElement("div");s.classList.add("fancybox-placeholder"),e.parentNode.insertBefore(s,e),e.$placeHolder=s}this.fancybox.setContent(t,e)}else this.fancybox.setError(t,"{{ELEMENT_NOT_FOUND}}")}},{key:"loadAjaxContent",value:function(t){var e=this.fancybox,i=new XMLHttpRequest;e.showLoading(t),i.onreadystatechange=function(){i.readyState===XMLHttpRequest.DONE&&"ready"===e.state&&(e.hideLoading(t),200===i.status?e.setContent(t,i.responseText):e.setError(t,404===i.status?"{{AJAX_NOT_FOUND}}":"{{AJAX_FORBIDDEN}}"))},i.open("GET",t.src),i.send(t.ajax||null),t.xhr=i}},{key:"loadIframeContent",value:function(t){var e=this,i=this.fancybox,n=document.createElement("iframe");if(n.className="fancybox__iframe",n.setAttribute("id","fancybox__iframe_".concat(i.id,"_").concat(t.index)),n.setAttribute("allow","autoplay; fullscreen"),n.setAttribute("scrolling","auto"),t.$iframe=n,"iframe"!==t.type||!1===t.preload)return n.setAttribute("src",t.src),void this.fancybox.setContent(t,n);i.showLoading(t);var o=document.createElement("div");o.style.visibility="hidden",this.fancybox.setContent(t,o),o.appendChild(n),n.onerror=function(){i.setError(t,"{{IFRAME_ERROR}}")},n.onload=function(){var s=!1;"yes"!==n.dataset.ready&&(n.dataset.ready="yes",s=!0),n.src.length&&(i.hideLoading(t),n.parentNode.style.visibility="",!1!==t.autoSize&&e.autoSizeIframe(n),s&&i.animateCSS(o,i.option("showClass")))},n.setAttribute("src",t.src)}},{key:"setAspectRatio",value:function(t){var e=t.ratio;if(e&&t.$content){t.$content.style.maxWidth="",t.$content.style.maxHeight="";var i=t.$content.offsetWidth,n=t.$content.offsetHeight,o=t.width,s=t.height;if(o&&s&&(i>o||n>s)){var a=Math.min(o/i,s/n);i*=a,n*=a}e\n \n Sorry, your browser doesn\'t support embedded videos, download and watch with your favorite video player!\n',format:""}};var O=function(t){var e=t.naturalWidth,i=t.naturalHeight,n=t.width,o=t.height,s=e/i,a={width:n,height:o};return s>n/o?a.height=n/s:a.width=o*s,a.left=.5*(n-a.width),a.right=e+a.left,a},N=function(){function t(e){i(this,t),this.fancybox=e;for(var n=0,o=["onReady","onClosing","onPageChange","onCreateSlide","onRemoveSlide","onRefresh","onImageStatusChange"];n.1),{top:l,left:c,scale:e.width/a,opacity:h}}},{key:"zoomIn",value:function(){var t=this.fancybox;if("init"!==t.Carousel.state){var e=t.getSlide(),i=e.Panzoom,n=this.getZoomInfo(e),o=n.top,s=n.left,a=n.scale,r=n.opacity;e.state="zoomIn",i.detachEvents(),t.trigger("reveal",e),i.panTo({x:-1*s,y:-1*o,scale:a,friction:0,ignoreBounds:!0}),e.$content.style.visibility="",!0===r&&i.on("afterTransform",(function(t){"zoomIn"!==e.state&&"zoomOut"!==e.state||(t.$content.style.opacity=Math.min(1,t.current.scale))})),i.panTo({x:0,y:0,scale:1,friction:this.fancybox.option("Image.zoomFriction")})}}},{key:"zoomOut",value:function(){var t=this,e=this.fancybox,i=e.getSlide(),n=i.Panzoom;if(n){i.state="zoomOut",e.state="customClosing",i.$caption&&(i.$caption.style.visibility="hidden");var o=.75*this.fancybox.option("Image.zoomFriction"),s=function(){var e=t.getZoomInfo(i),s=e.top,a=e.left,r=e.scale;n.panTo({x:-1*a,y:-1*s,scale:r,ignoreBounds:!0,friction:o}),o*=.98};window.addEventListener("scroll",s),n.on("afterAnimate",(function(){window.removeEventListener("scroll",s),e.destroy()})),s()}}},{key:"handleCursor",value:function(t){var e=t.Panzoom,i=this.fancybox.option("Image.click"),n=t.$el.classList;e&&"toggleZoom"===i?n[e&&1===e.current.scale&&e.option("maxScale")-e.current.scale>.01?"add":"remove"](this.fancybox.option("Image.canZoomInClass")):"close"===i&&n.add(this.fancybox.option("Image.canZoomOutClass"))}},{key:"onWheel",value:function(t,e){switch(this.fancybox.option("Image.wheel")){case"zoom":t.zoomWithWheel(e);break;case"close":this.fancybox.close();break;case"slide":this.fancybox[e.deltaY<0?"prev":"next"]()}e.preventDefault()}},{key:"onClick",value:function(t,e){if(!(this.fancybox.Carousel.Panzoom.drag.distance>=6||this.fancybox.Carousel.Panzoom.lockAxis||"IMG"!=e.target.tagName&&!e.target.classList.contains("fancybox__content")))switch(e.preventDefault(),e.stopPropagation(),this.fancybox.option("Image.click")){case"toggleZoom":var i=e.clientX-t.$content.getClientRects()[0].left,n=e.clientY-t.$content.getClientRects()[0].top;t.toggleZoom({x:i,y:n});break;case"close":this.fancybox.close();break;case"next":this.fancybox.next();break;case"prev":this.fancybox.prev()}}},{key:"onRefresh",value:function(t,e){var i=this;e.slides.forEach((function(t){t.Panzoom&&i.updateDimensions(t)}))}},{key:"onRemoveSlide",value:function(t,e,i){i.$image&&(i.$el.classList.remove(t.option("Image.canZoomInClass")),i.$image.onload=i.$image.onerror=null,i.$image.remove(),i.$image=null),i.Panzoom&&(i.Panzoom.destroy(),i.Panzoom=null),delete i.$el.dataset.imageFit}},{key:"onClosing",value:function(t){t.Carousel.slides.forEach((function(t){t.$image&&(t.$image.onload=t.$image.onerror=null),t.Panzoom&&t.Panzoom.detachEvents()})),"closing"===this.fancybox.state&&this.canZoom()&&this.zoomOut()}},{key:"onPageChange",value:function(t,e){var i=this,n=t.getSlide();e.slides.forEach((function(t){t.Panzoom&&"done"===t.state&&(t.index!==n.index?t.Panzoom.panTo({x:0,y:0,scale:1,friction:.8}):0===e.Panzoom.velocity.x&&i.revealContent(t))}))}},{key:"attach",value:function(){this.fancybox.on(this.events)}},{key:"detach",value:function(){this.fancybox.off(this.events)}}]),t}();N.defaults={Panzoom:{maxScale:1},canZoomInClass:"can-zoom_in",canZoomOutClass:"can-zoom_out",zoom:!0,zoomOpacity:"auto",zoomFriction:.8,ignoreCoveredThumbnail:!1,click:"toggleZoom",doubleClick:"",wheel:"zoom",fit:"contain"};var F=function(){var t=window.location.hash.substr(1),e=t.split("-"),i=e.length>1&&/^\+?\d+$/.test(e[e.length-1])&&parseInt(e.pop(-1),10)||null;return{hash:t,slug:e.join("-"),index:i}},B={ScrollLock:I,Thumbs:z,Html:R,Image:N,Hash:function(){function t(e){i(this,t),this.fancybox=e,this.events={closing:this.onClosing.bind(this),"Carousel.ready Carousel.change":this.onChange.bind(this)},this.hasCreatedHistory=!1,this.origHash="",this.timer=null}return o(t,[{key:"onChange",value:function(t,e){var i=this;this.timer&&clearTimeout(this.timer);var n=null===e.prevPage,o=t.getSlide(),s=o.$trigger&&o.$trigger.dataset,a=window.location.hash.substr(1),r=!1;if(o.slug)r=o.slug;else{var l=s&&s.fancybox;l&&l.length&&"true"!==l&&(r=l+(e.slides.length>1?"-"+(o.index+1):""))}n&&(this.origHash=a!==r?this.origHash:""),r&&a!==r&&(this.timer=setTimeout((function(){try{window.history[n?"pushState":"replaceState"]({},document.title,window.location.pathname+window.location.search+"#"+r),n&&(i.hasCreatedHistory=!0)}catch(t){}}),300))}},{key:"onClosing",value:function(){if(this.timer&&clearTimeout(this.timer),!0!==this.hasSilentClose){if(!this.hasCreatedHistory)try{return void window.history.replaceState({},document.title,window.location.pathname+window.location.search+(this.origHash?"#"+this.origHash:""))}catch(t){}window.history.back()}}},{key:"attach",value:function(t){t.on(this.events)}},{key:"detach",value:function(t){t.off(this.events)}}],[{key:"startFromUrl",value:function(){if(!t.Fancybox.getInstance()){var e=F(),i=e.hash,n=e.slug,o=e.index;if(n){var s=document.querySelector('[data-slug="'.concat(i,'"]'));if(s&&s.dispatchEvent(new CustomEvent("click",{bubbles:!0,cancelable:!0})),!t.Fancybox.getInstance()){var a=document.querySelectorAll('[data-fancybox="'.concat(n,'"]'));a.length&&(null===o&&1===a.length?s=a[0]:o&&(s=a[o-1]),s&&s.dispatchEvent(new CustomEvent("click",{bubbles:!0,cancelable:!0})))}}}}},{key:"onHashChange",value:function(){var e=F(),i=e.slug,n=e.index,o=t.Fancybox.getInstance();if(o){if(i){var s,a=o.Carousel,r=p(a.slides);try{for(r.s();!(s=r.n()).done;){var l=s.value;if(l.slug&&l.slug===i)return a.slideTo(l.index)}}catch(t){r.e(t)}finally{r.f()}var c=o.getSlide(),h=c.$trigger&&c.$trigger.dataset;if(h&&h.fancybox===i)return a.slideTo(n-1)}o.plugins.Hash.hasSilentClose=!0,o.close()}t.startFromUrl()}},{key:"onReady",value:function(){window.addEventListener("hashchange",t.onHashChange,!1),t.startFromUrl()}},{key:"create",value:function(){D&&window.requestAnimationFrame((function(){t.onReady()}))}},{key:"destroy",value:function(){window.removeEventListener("hashchange",t.onHashChange,!1)}}]),t}()},W=0,H=null,U=function(t){s(n,t);var e=h(n);function n(){var t,o=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};i(this,n);var s,a=function(t){var e=m(!0,{},t.items[t.startIndex||0]||{});return t.items.forEach((function(t){var e=t.$trigger;if(e){var i=e.dataset||{};t.src=i.src||e.getAttribute("href")||t.src,t.type=i.type||t.type}})),m(!0,{},n.defaults,t,e)};return s=!1,document.createElement("div").focus({get preventScroll(){return s=!0,!1}}),H=s,(t=e.call(this,a(o))).state="init",t.bindHandlers(),t.attachPlugins(n.Plugins),t.trigger("init"),!0===t.option("hideScrollbar")&&t.hideScrollbar(),t.initLayout(),t.initCarousel(t.getSlides()),t.attachEvents(),t.state="ready",t.trigger("ready"),t.$container.setAttribute("aria-hidden","false"),t}return o(n,[{key:"bindHandlers",value:function(){for(var t=0,e=["onMousedown","onKeydown","onClick","onCreateSlide","onSettle","onTouchMove","onTouchEnd","onTransform"];t1?"x":"";return e.options.dragToClose&&(t+="y"),t}},on:{"*":function(t){for(var i=arguments.length,n=new Array(i>1?i-1:0),o=1;o=150||Math.abs(e)>=35&&t.drag.elapsedTime<350)&&(this.option("hideClass")&&(this.getSlide().hideClass="fancybox-throwOut".concat(t.current.y<0?"Up":"Down")),this.close())}},{key:"onTransform",value:function(t){if(this.$backdrop){var e=Math.abs(t.current.y),i=e<1?"":Math.max(0,Math.min(1,1-e/t.$content.clientHeight*1.5));this.$container.style.setProperty("--fancybox-ts",i?"0s":""),this.$container.style.setProperty("--fancybox-opacity",i)}}},{key:"onMousedown",value:function(){document.body.classList.add("is-using-mouse")}},{key:"onKeydown",value:function(t){if(n.getInstance().id===this.id){document.body.classList.remove("is-using-mouse");var e=t.key;if("Tab"===e&&this.option("trapFocus"))this.focus(t);else{var i=this.option("keyboard");if(i&&!t.ctrlKey&&!t.altKey&&!t.shiftKey){var o=document.activeElement&&document.activeElement.classList,s=o&&o.contains("carousel__button");if("Escape"!==e&&!s)if(t.target.isContentEditable||-1!==["BUTTON","TEXTAREA","OPTION","INPUT","SELECT","VIDEO"].indexOf(t.target.nodeName))return;if(!1!==this.trigger("keydown",e)){"Enter"!==e&&t.preventDefault();var a=i[e];"function"==typeof this[a]&&this[a]()}}}}}},{key:"getSlide",value:function(){var t=this.Carousel;if(!t)return null;var e=null===t.page?t.option("initialPage"):t.page,i=t.pages||[];return i.length&&i[e]?i[e].slides[0]:null}},{key:"focus",value:function(t){var e=function(t){t.setActive?t.setActive():H?t.focus({preventScroll:!0}):t.focus()};t&&t.preventDefault();var i=this.getSlide().$el;i.tabIndex=0;var n,o=[],s=p([].slice.call(this.$container.querySelectorAll(["a[href]","area[href]",'input:not([disabled]):not([type="hidden"]):not([aria-hidden])',"select:not([disabled]):not([aria-hidden])","textarea:not([disabled]):not([aria-hidden])","button:not([disabled]):not([aria-hidden])","iframe","object","embed","video","audio","[contenteditable]",'[tabindex]:not([tabindex^="-"]):not([disabled]):not([aria-hidden])'])));try{for(s.s();!(n=s.n()).done;){var a=n.value;if(!a.classList||!a.classList.contains("fancybox__slide")){var r=a.closest(".fancybox__slide");r?r===i&&o[a.hasAttribute("autofocus")?"unshift":"push"](a):o.push(a)}}}catch(t){s.e(t)}finally{s.f()}if(o.length){this.Carousel.pages.length>1&&o.push(i);var l=o.indexOf(document.activeElement),c=t&&!t.shiftKey,h=t&&t.shiftKey;return c?l===o.length-1?e(o[0]):e(o[l+1]):h?e(0===l?o[o.length-1]:o[l-1]):l<0?e(o[0]):void 0}}},{key:"hideScrollbar",value:function(){if(D){var t=window.innerWidth-document.documentElement.getBoundingClientRect().width,e="fancybox-style-noscroll",i=document.getElementById(e);i||t&&((i=document.createElement("style")).id=e,i.type="text/css",i.innerHTML=".compensate-for-scrollbar {padding-right: ".concat(t,"px;}"),document.getElementsByTagName("head")[0].appendChild(i),document.body.classList.add("compensate-for-scrollbar"))}}},{key:"revealScrollbar",value:function(){document.body.classList.remove("compensate-for-scrollbar");var t=document.getElementById("fancybox-style-noscroll");t&&t.remove()}},{key:"clearContent",value:function(t){this.Carousel.trigger("deleteSlide",t),t.$content&&(t.$content.remove(),t.$content=null),t._className&&t.$el.classList.remove(t._className)}},{key:"setContent",value:function(t,e){var i,n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},o=t.$el;if(e instanceof HTMLElement?["img","iframe","video","audio"].indexOf(e.nodeName.toLowerCase())>-1?(i=document.createElement("div")).appendChild(e):i=e:(i=document.createElement("div")).innerHTML=e,!(i instanceof Element))throw new Error("Element expected");return t._className="has-".concat(n.suffix||t.type||"unknown"),o.classList.add(t._className),i.classList.add("fancybox__content"),"none"!==i.style.display&&"none"!==window.getComputedStyle(i).getPropertyValue("display")||(i.style.display="flex"),t.id&&i.setAttribute("id",t.id),t.$content=i,o.insertBefore(i,o.querySelector(".fancybox__caption")),this.manageCloseButton(t),"loading"!==t.state&&(this.trigger("afterLoad",t),this.revealContent(t)),i}},{key:"manageCloseButton",value:function(t){var e=this,i=void 0===t.closeButton?this.option("closeButton"):t.closeButton;if(i&&(!this.$closeButton||"inside"===i)){var n=document.createElement("button");n.classList.add("carousel__button","is-close"),n.setAttribute("title",this.options.l10n.CLOSE),n.innerHTML=this.option("template.closeButton"),n.addEventListener("click",(function(t){return e.close(t)})),"inside"===i?(t.$closeButton&&t.$closeButton.remove(),t.$closeButton=t.$content.appendChild(n)):this.$closeButton=this.$container.insertBefore(n,this.$container.firstChild)}}},{key:"revealContent",value:function(t){var e=this;if(this.trigger("reveal",t),t.$content.style.visibility="","error"!==t.state&&null===this.Carousel.prevPage&&t.index===this.options.startIndex){t.state="animating";var i=void 0===t.showClass?this.option("showClass"):t.showClass;this.animateCSS(t.$content,i,(function(){e.done(t)}))}else this.done(t)}},{key:"animateCSS",value:function(t,e,i){if(t&&t.dispatchEvent(new CustomEvent("animationend",{bubbles:!0,cancelable:!0})),t&&e){t.addEventListener("animationend",(function n(o){o.currentTarget===this&&(t.classList.remove(e),t.removeEventListener("animationend",n),i&&i())})),t.classList.add(e)}else"function"==typeof i&&i()}},{key:"done",value:function(t){if("init"===this.state||"ready"===this.state){t.state="done",this.trigger("done",t);var e=this.getSlide();e&&t.index===e.index&&this.option("autoFocus")&&this.focus()}}},{key:"setError",value:function(t,e){this.hideLoading(t),this.clearContent(t),t.state="error";var i=document.createElement("div");i.classList.add("fancybox-error"),i.innerHTML=this.localize(e||"

{{ERROR}}

"),this.setContent(t,i,{suffix:"error"})}},{key:"showLoading",value:function(t){var e=this;t.state="loading",t.$el.classList.add("is-loading");var i=t.$el.querySelector(".fancybox__spinner");i||((i=document.createElement("div")).classList.add("fancybox__spinner"),i.innerHTML=this.option("template.spinner"),i.addEventListener("click",(function(){e.Carousel.Panzoom.velocity||e.close()})),t.$el.insertBefore(i,t.$el.firstChild))}},{key:"hideLoading",value:function(t){var e=t.$el.querySelector(".fancybox__spinner");e&&e.remove(),t.$el.classList.remove("is-loading")}},{key:"next",value:function(){var t=this.Carousel;t&&t.pages.length>1&&t.slideNext()}},{key:"prev",value:function(){var t=this.Carousel;t&&t.pages.length>1&&t.slidePrev()}},{key:"jumpTo",value:function(){var t;this.Carousel&&(t=this.Carousel).slideTo.apply(t,arguments)}},{key:"close",value:function(t){var e=this;if(t&&t.preventDefault(),!(["closing","customClosing","destroy"].indexOf(this.state)>-1)&&!1!==this.trigger("shouldClose",t)&&(this.state="closing",this.Carousel.Panzoom.destroy(),this.detachEvents(),this.trigger("closing",t),"destroy"!==this.state)){this.$container.setAttribute("aria-hidden","true"),this.$container.classList.add("is-closing");var i=this.getSlide();if(this.Carousel.slides.forEach((function(t){t.$content&&t.index!==i.index&&t.$content.remove()})),"closing"===this.state){var n=void 0===i.hideClass?this.option("hideClass"):i.hideClass;this.animateCSS(i.$content,n,(function(){e.destroy()}))}}}},{key:"destroy",value:function(){this.state="destroy",this.trigger("destroy");var t=this.option("placeFocusBack")?this.getSlide().$trigger:null;if(this.Carousel.destroy(),this.detachPlugins(),this.Carousel=null,this.options={},this.events={},this.$container.remove(),this.$container=this.$backdrop=this.$carousel=null,t)if(H)t.focus({preventScroll:!0});else{var e=document.body.scrollTop;t.focus(),document.body.scrollTop=e}var i=n.getInstance();i?i.focus():(document.documentElement.classList.remove("with-fancybox"),document.body.classList.remove("is-using-mouse"),this.revealScrollbar())}}],[{key:"show",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return e.items=t,new n(e)}},{key:"fromEvent",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(!t.defaultPrevented&&!(t.button&&0!==t.button||t.ctrlKey||t.metaKey||t.shiftKey)){var i,o,s,a=!1,r=t.target;if((r.matches("[data-fancybox-trigger]")||(r=r.closest("[data-fancybox-trigger]")))&&(s=r&&r.dataset&&r.dataset.fancyboxTrigger),s){var l=document.querySelectorAll('[data-fancybox="'.concat(s,'"]')),c=parseInt(r.dataset.fancyboxIndex,10)||0;r=l.length?l[c]:r}r||(r=t.target),Array.from(n.openers.keys()).reverse().some((function(e){if((i=r).matches(e)||(i=i.closest(e)))return t.preventDefault(),o=e,!0})),o&&(e.target=i,i.origTarget=t.target,a=n.fromOpener(o,e));var h=n.getInstance();return h&&"ready"===h.state&&t.detail&&document.body.classList.add("is-using-mouse"),a}}},{key:"fromOpener",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},i=function(t){for(var e=["false","0","no","null"],i=["true","1","yes"],n=Object.assign({},t.dataset),o=0,s=Object.entries(n);o-1)n[r]=!1;else if(i.indexOf(n[r])>-1)n[r]=!0;else try{n[r]=JSON.parse(l)}catch(t){n[r]=l}}return delete n.fancybox,delete n.type,t instanceof Element&&(n.$trigger=t),n},o=[],s=e.startIndex||0,a=(e=m({},e,n.openers.get(t))).groupAttr;void 0===a&&(a="data-fancybox");var r=e.target;if(a){if(r&&t&&t==="[".concat(a,"]")){var l=r.getAttribute("".concat(a));t=!(!l||!l.length||"true"===l)&&"[".concat(a,"='").concat(l,"']")}}else t=!1;if(t&&(o=[].slice.call(document.querySelectorAll(t))),!o.length&&r&&(o=[r]),!o.length)return!1;var c=n.getInstance();return!(c&&o.indexOf(c.options.$trigger)>-1)&&(s=r?o.indexOf(r):s,o=o.map(i),new n(m({},e,{items:o,startIndex:s,$trigger:r})))}},{key:"assign",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(D){if(!n.openers.size){document.body.addEventListener("click",n.fromEvent,!1);for(var i=0,o=Object.entries(n.Plugins||{});i0&&void 0!==arguments[0])||arguments[0],e=null;e=n.getInstance();)if(e.close(),!t)return}}]),n}(k);U.version="4.0.0-alpha.1",U.defaults={hideScrollbar:!0,items:[],startIndex:0,preload:1,infinite:!0,showClass:"fancybox-zoomInUp",hideClass:"fancybox-fadeOut",animated:!0,keyboard:{Escape:"close",Delete:"close",Backspace:"close",PageUp:"next",PageDown:"prev",ArrowUp:"next",ArrowDown:"prev",ArrowRight:"next",ArrowLeft:"prev"},template:{closeButton:'',spinner:'',main:null},parentEl:null,mainClass:null,autoFocus:!0,trapFocus:!0,placeFocusBack:!0,click:"close",closeButton:"inside",dragToClose:!0,l10n:{CLOSE:"Close",NEXT:"Next",PREV:"Previous",MODAL:"You can close this modal content with the ESC key",ERROR:"Something Went Wrong, Please Try Again Later",IMAGE_ERROR:"Image Not Found",ELEMENT_NOT_FOUND:"HTML Element Not Found",AJAX_NOT_FOUND:"Error Loading AJAX : Not Found",AJAX_FORBIDDEN:"Error Loading AJAX : Forbidden",IFRAME_ERROR:"Error Loading Page"}},U.openers=new Map,U.Plugins=B,U.isMobile=function(){return!!navigator&&/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent)},U.assign("[data-fancybox]"),t.Carousel=A,t.Fancybox=U,t.Panzoom=C})); +!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?e(exports):"function"==typeof define&&define.amd?define(["exports"],e):e((t="undefined"!=typeof globalThis?globalThis:t||self).window=t.window||{})}(this,(function(t){"use strict";function e(t){return(e="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(t)}function i(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function n(t,e){for(var i=0;it.length)&&(e=t.length);for(var i=0,n=new Array(e);i=t.length?{done:!0}:{done:!1,value:t[n++]}},e:function(t){throw t},f:o}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var s,a=!0,r=!1;return{s:function(){i=i.call(t)},n:function(){var t=i.next();return a=t.done,t},e:function(t){r=!0,s=t},f:function(){try{a||null==i.return||i.return()}finally{if(r)throw s}}}}var g=function(t){return"object"===e(t)&&null!==t&&t.constructor===Object&&"[object Object]"===Object.prototype.toString.call(t)},m=function t(){for(var i=!1,n=arguments.length,o=new Array(n),s=0;s1&&void 0!==arguments[1]?arguments[1]:1e3;return t=parseFloat(t)||0,Math.round((t+Number.EPSILON)*e)/e},b="undefined"!=typeof window&&window.ResizeObserver||function(){function t(e){i(this,t),this.observables=[],this.boundCheck=this.check.bind(this),this.boundCheck(),this.callback=e}return o(t,[{key:"observe",value:function(t){if(!this.observables.some((function(e){return e.el===t}))){var e={el:t,size:{height:t.clientHeight,width:t.clientWidth}};this.observables.push(e)}}},{key:"unobserve",value:function(t){this.observables=this.observables.filter((function(e){return e.el!==t}))}},{key:"disconnect",value:function(){this.observables=[]}},{key:"check",value:function(){var t=this.observables.filter((function(t){var e=t.el.clientHeight,i=t.el.clientWidth;if(t.size.height!==e||t.size.width!==i)return t.size.height=e,t.size.width=i,!0})).map((function(t){return t.el}));t.length>0&&this.callback(t),window.requestAnimationFrame(this.boundCheck)}}]),t}(),w=function t(e){return!(!e||e.classList.contains("carousel__track")||e===document.body)&&(function(t){var e=window.getComputedStyle(t)["overflow-y"],i=window.getComputedStyle(t)["overflow-x"],n=("scroll"===e||"auto"===e)&&Math.abs(t.scrollHeight-t.clientHeight)>1,o=("scroll"===i||"auto"===i)&&Math.abs(t.scrollWidth-t.clientWidth)>1;return n||o}(e)?e:t(e.parentNode))},x=function(t){var e=0;return t&&(e=t instanceof SVGElement?Math.min(t.getClientRects()[0].height,t.height.baseVal.value):Math.max(t.offsetHeight,t.scrollHeight)),e},k=function(){function t(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};i(this,t),this.options=m(!0,{},e),this.plugins=[],this.events={};for(var n=0,o=["on","once"];n1&&void 0!==arguments[1]?arguments[1]:[];return String(t).replace(/\{\{(\w+).?(\w+)?\}\}/g,(function(t,n,o){var s=!1;if(!(s=o?e.option("".concat(n[0]+n.toLowerCase().substring(1),".l10n.").concat(o)):e.option("l10n.".concat(n))))return n;for(var a=0;a1?e-1:0),n=1;n1&&void 0!==arguments[1]?arguments[1]:{};if(i(this,n),s=m(!0,{},$,s),o=e.call(this,s),!(t instanceof HTMLElement))throw new Error("Viewport not found");o.state="init",o.$viewport=t;for(var a=0,r=["onPointerDown","onPointerMove","onPointerUp","onWheel","onClick"];a0&&t>0?e/t*this.maxScale:this.maxScale},t.updateMetrics(),t.trigger(e>0?"load":"error")};!0!==this.$content.complete?(this.$content.onload=function(){return e()},this.$content.onerror=function(){return e()}):e()}else this.updateMetrics()}},{key:"resetValues",value:function(){this.viewportDim={top:0,left:0,width:0,height:0},this.contentDim={width:0,height:0},this.friction=this.option("friction"),this.current={x:0,y:0,scale:1},this.velocity={x:0,y:0,scale:0},this.pan={x:0,y:0,scale:1},this.drag={startTime:null,firstPosition:null,startPosition:null,startPoint:null,startDistance:null,endPosition:null,endPoint:null,distance:0,distanceX:0,distanceY:0,elapsedTime:0},this.lockAxis=null,this.pendingAnimateUpdate=null,this.pendingResizeUpdate=null,this.pointers=[]}},{key:"updateMetrics",value:function(){var t,e,i=this.$viewport.getBoundingClientRect(),n=i.top,o=i.left,s=i.width,a=i.height,r=window.getComputedStyle(this.$viewport);s-=parseFloat(r.paddingLeft)+parseFloat(r.paddingRight),a-=parseFloat(r.paddingTop)+parseFloat(r.paddingBottom),this.viewportDim={top:n,left:o,width:s,height:a},this.contentDim={width:this.option("width",(t=this.$content,e=0,t&&(e=t instanceof SVGElement?Math.min(t.getClientRects()[0].width,t.width.baseVal.value):Math.max(t.offsetWidth,t.scrollWidth)),e)),height:this.option("hidth",x(this.$content))},this.trigger("updateMetrics"),this.updateBounds()}},{key:"updateBounds",value:function(t){var e={from:0,to:0},i={from:0,to:0};if(t||(t=this.velocity.scale?this.pan.scale:this.current.scale),t<1)return[e,i];var n=this.contentDim,o=this.viewportDim,s=n.width*t,a=n.height*t;return e.to=y(.5*(s-n.width)),n.width>o.width?e.from=y(e.to+o.width-s):e.from=y(-1*e.to),i.to=y(.5*(a-n.height)),n.height>o.height?i.from=y(i.to+o.height-a):i.from=y(-1*i.to),this.boundX=e,this.boundY=i,this.trigger("updateBounds",t),[this.boundX,this.boundY]}},{key:"zoomIn",value:function(t){this.zoomTo(this.current.scale+(t||this.option("step")))}},{key:"zoomOut",value:function(t){this.zoomTo(this.current.scale-(t||this.option("step")))}},{key:"toggleZoom",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=this.option("maxScale"),i=this.option("baseScale");this.zoomTo(this.current.scale>i+.5*(e-i)?i:e,t)}},{key:"zoomTo",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},i=e.x,n=void 0===i?null:i,o=e.y,s=void 0===o?null:o,a=e.friction,r=void 0===a?this.option("zoomFriction"):a;t||(t=this.option("baseScale")),t=Math.max(Math.min(t,this.option("maxScale")),this.option("minScale"));var l=this.contentDim.width,c=this.contentDim.height,h=l*this.current.scale,d=c*this.current.scale,u=l*t,f=c*t;null===n&&(n=.5*h),null===s&&(s=.5*d),!1===this.option("zoomInCentered")&&(n<.5*h&&(n=h),n>h&&(n=0),s<0&&(s=d),s>d&&(s=0));var v=h>0?n/h:0,p=d>0?s/d:0,g=(u-h)*(v-.5),m=(f-d)*(p-.5);Math.abs(g)<1&&(g=0),Math.abs(m)<1&&(m=0),n=this.current.x-g,s=this.current.y-m,this.panTo({x:n,y:s,scale:t,friction:r})}},{key:"panTo",value:function(t){var e=t.x,i=void 0===e?0:e,n=t.y,o=void 0===n?0:n,s=t.scale,a=void 0===s?this.current.scale:s,r=t.friction,l=void 0===r?this.option("friction"):r,c=t.ignoreBounds,h=void 0!==c&&c;if(l||this.stopMoving(),!0!==h){var u=d(this.updateBounds(a),2),f=u[0],v=u[1];f&&(i=Math.max(Math.min(i,f.to),f.from)),v&&(o=Math.max(Math.min(o,v.to),v.from))}return l>0&&(Math.abs(i-this.current.x)>.1||Math.abs(o-this.current.y)>.1||Math.abs(a-this.current.scale)>.1)?(this.state="panning",this.friction=l,this.pan={x:i,y:o,scale:a},this.velocity={x:(1/this.friction-1)*(i-this.current.x),y:(1/this.friction-1)*(o-this.current.y),scale:(1/this.friction-1)*(a-this.current.scale)},this.animate(),this):(this.pendingAnimateUpdate&&(cancelAnimationFrame(this.pendingAnimateUpdate),this.pendingAnimateUpdate=null),this.state="ready",this.stopMoving(),this.current={x:i,y:o,scale:a},this.transform(),this.handleCursor(),this.trigger("afterAnimate",!0),this)}},{key:"animate",value:function(){var t=this;if(!this.pendingAnimateUpdate){if(this.applyBoundForce(),this.applyDragForce(),this.velocity.x*=this.friction,this.velocity.y*=this.friction,this.velocity.scale*=this.friction,this.current.x+=this.velocity.x,this.current.y+=this.velocity.y,this.current.scale+=this.velocity.scale,"dragging"==this.state||"pointerdown"==this.state||Math.abs(this.velocity.x)>.05||Math.abs(this.velocity.y)>.05||Math.abs(this.velocity.scale)>.05)return this.transform(),void(this.pendingAnimateUpdate=requestAnimationFrame((function(){t.pendingAnimateUpdate=null,t.animate()})));this.current.x=y(this.current.x+this.velocity.x/(1/this.friction-1)),this.current.y=y(this.current.y+this.velocity.y/(1/this.friction-1)),Math.abs(this.current.x)<.5&&(this.current.x=0),Math.abs(this.current.y)<.5&&(this.current.y=0),this.current.scale=y(this.current.scale+this.velocity.scale/(1/this.friction-1),1e4),Math.abs(this.current.scale-1)<.01&&(this.current.scale=1),this.state="ready",this.stopMoving(),this.transform(),this.handleCursor(),this.trigger("afterAnimate")}}},{key:"handleCursor",value:function(){var t=this.option("draggableClass");t&&this.option("touch")&&(this.contentDim.width<=this.viewportDim.width&&1==this.option("panOnlyZoomed")&&this.current.scale<=this.option("baseScale")?this.$viewport.classList.remove(t):this.$viewport.classList.add(t))}},{key:"isMoved",value:function(){return 0!==this.current.x||0!==this.current.y||1!==this.current.scale||this.velocity.x>0||this.velocity.y>0||this.velocity.scale>0}},{key:"stopMoving",value:function(){this.velocity={x:0,y:0,scale:0}}},{key:"transform",value:function(){this.trigger("beforeTransform");var t=y(this.current.x,100),e=y(this.current.y,100),i=y(this.current.scale,1e5);Math.abs(t)<=.1&&Math.abs(e)<=.1&&Math.abs(i-1)<=.1?this.$content.style.transform="":this.$content.style.transform="translate3d(".concat(t,"px, ").concat(e,"px, 0px) scale(").concat(i,")"),this.trigger("afterTransform")}},{key:"applyBoundForce",value:function(){if("decel"===this.state){var t,e,i,n,o={x:0,y:0},s=this.option("bounceForce"),a=this.boundX,r=this.boundY;if(a&&(t=this.current.xa.to),r&&(i=this.current.yr.to),t||e){var l=(t?a.from:a.to)-this.current.x,c=l*s,h=this.current.x+(this.velocity.x+c)/(1/this.friction-1);t&&ha.to||(c=l*s-this.velocity.x),o.x=c}if(i||n){var d=(i?r.from:r.to)-this.current.y,u=d*s,f=this.current.y+(this.velocity.y+u)/(1/this.friction-1);i&&fr.to||(u=d*s-this.velocity.y),o.y=u}this.velocity.x+=o.x,this.velocity.y+=o.y}}},{key:"applyDragForce",value:function(){"dragging"===this.state&&(this.velocity={x:(1/this.friction-1)*(this.drag.endPosition.x-this.current.x),y:(1/this.friction-1)*(this.drag.endPosition.y-this.current.y),scale:(1/this.friction-1)*(this.drag.endPosition.scale-this.current.scale)})}},{key:"attachEvents",value:function(){var t=this,e=this.$viewport;this.resizeObserver=this.resizeObserver||new b((function(e){t.pendingResizeUpdate=t.pendingResizeUpdate||setTimeout((function(){t.pendingResizeUpdate=null;var i=e&&e[0].contentRect;!i&&t.$viewport&&(i=t.$viewport.getBoundingClientRect()),i&&(Math.abs(i.width-t.viewportDim.width)>1||Math.abs(i.height-t.viewportDim.height)>1)&&t.updateMetrics()}),50)})),this.resizeObserver.observe(e),e.addEventListener("click",this.onClick,{passive:!1}),e.addEventListener("wheel",this.onWheel,{passive:!1}),this.option("touch")&&(window.PointerEvent?(e.addEventListener("pointerdown",this.onPointerDown,{passive:!1}),e.addEventListener("pointermove",this.onPointerMove,{passive:!1}),e.addEventListener("pointerup",this.onPointerUp),e.addEventListener("pointercancel",this.onPointerUp)):(e.addEventListener("touchstart",this.onPointerDown,{passive:!1}),e.addEventListener("touchmove",this.onPointerMove,{passive:!1}),e.addEventListener("touchend",this.onPointerUp),e.addEventListener("touchcancel",this.onPointerUp),e.addEventListener("mousedown",this.onPointerDown)))}},{key:"detachEvents",value:function(){this.resizeObserver&&this.resizeObserver.disconnect(),this.resizeObserver=null,this.pendingResizeUpdate&&(clearTimeout(this.pendingResizeUpdate),this.pendingResizeUpdate=null);var t=this.$viewport;window.PointerEvent?(t.removeEventListener("pointerdown",this.onPointerDown,{passive:!1}),t.removeEventListener("pointermove",this.onPointerMove,{passive:!1}),t.removeEventListener("pointerup",this.onPointerUp),t.removeEventListener("pointercancel",this.onPointerUp)):(t.removeEventListener("touchstart",this.onPointerDown,{passive:!1}),t.removeEventListener("touchmove",this.onPointerMove,{passive:!1}),t.removeEventListener("touchend",this.onPointerUp),t.removeEventListener("touchcancel",this.onPointerUp),t.removeEventListener("mousedown",this.onPointerDown)),t.removeEventListener("click",this.onClick,{passive:!1}),t.removeEventListener("wheel",this.onWheel,{passive:!1})}},{key:"copyPointer",value:function(t){return{pointerId:t.pointerId,clientX:t.clientX,clientY:t.clientY}}},{key:"findPointerIndex",value:function(t){for(var e=this.pointers.length;e--;)if(this.pointers[e].pointerId===t.pointerId)return e;return-1}},{key:"addPointer",value:function(t){var e=0;if(t.touches&&t.touches.length){var i,n=p(t.touches);try{for(n.s();!(i=n.n()).done;){var o=i.value;o.pointerId=e++,this.addPointer(o)}}catch(t){n.e(t)}finally{n.f()}}else(e=this.findPointerIndex(t))>-1&&this.pointers.splice(e,1),this.pointers.push(t)}},{key:"removePointer",value:function(t){if(t.touches)for(;this.pointers.length;)this.pointers.pop();else{var e=this.findPointerIndex(t);e>-1&&this.pointers.splice(e,1)}}},{key:"getMiddlePoint",value:function(){var t=u(this.pointers),e=(t=t.sort((function(t,e){return e.pointerId-t.pointerId}))).shift(),i=t.shift();return i?{clientX:.5*(e.clientX-i.clientX)+i.clientX,clientY:.5*(e.clientY-i.clientY)+i.clientY}:{clientX:e?e.clientX:0,clientY:e?e.clientY:0}}},{key:"getDistance",value:function(t,e){if(!(t=(t=t||u(this.pointers)).slice())||t.length<2)return 0;var i=(t=t.sort((function(t,e){return e.pointerId-t.pointerId}))).shift(),n=t.shift(),o=Math.abs(n.clientX-i.clientX);if("x"===e)return o;var s=Math.abs(n.clientY-i.clientY);return"y"===e?s:Math.sqrt(Math.pow(o,2)+Math.pow(s,2))}},{key:"resetDragState",value:function(){var t=this.$content.getClientRects()[0],e=t.left,i=t.top,n=this.getMiddlePoint(),o={top:i,left:e,x:this.current.x,y:this.current.y,scale:this.current.scale};m(this.drag,{startPosition:m({},o),startPoint:m({},n),startDistance:this.getDistance(),endPosition:m({},o),endPoint:m({},n),distance:0,distanceX:0,distanceY:0}),"pointerdown"===this.state&&(this.lockAxis=null,this.drag.startTime=new Date,this.drag.firstPosition=Object.assign({},o)),this.stopMoving(),this.friction=this.option("friction")}},{key:"onPointerDown",value:function(t){if(t&&!(t.button&&t.button>0))if(this.option("panOnlyZoomed")&&this.velocity.scale)t.preventDefault();else{if(this.resetDragState(),!this.pointers.length){if(-1!==["BUTTON","TEXTAREA","OPTION","INPUT","SELECT","VIDEO"].indexOf(t.target.nodeName))return;if(this.option("textSelection")&&function(t,e,i){for(var n=t.childNodes,o=document.createRange(),s=0;s=r.left&&i>=r.top&&e<=r.right&&i<=r.bottom)return a}}return!1}(t.target,t.clientX,t.clientY))return;if(w(t.target))return}var e;if((e=window.getSelection?window.getSelection():document.selection)&&e.rangeCount&&e.getRangeAt(0).getClientRects().length&&(e.removeAllRanges?e.removeAllRanges():e.empty&&e.empty()),this.pointers.length>1||this.pointers.length&&this.lockAxis)t.preventDefault();else if(!1!==this.trigger("touchStart",t))if(t.preventDefault(),this.state="pointerdown",this.addPointer(this.copyPointer(t)),this.resetDragState(),window.PointerEvent)try{t.target.setPointerCapture(t.pointerId)}catch(t){}else document.addEventListener("mousemove",this.onPointerMove,{passive:!1}),document.addEventListener("mouseup",this.onPointerUp,{passive:!1})}}},{key:"onPointerMove",value:function(t){if(!(t.targetTouches&&t.targetTouches.length>1||"pointerdown"!==this.state&&"dragging"!==this.state))if(0!=this.trigger("touchMove",t)){if(this.addPointer(this.copyPointer(t)),!(this.pointers.length>1&&!1===this.option("pinchToZoom")))if(1==this.option("panOnlyZoomed")&&this.current.scale===this.option("baseScale")&&this.pointers.length<2)t.preventDefault();else{var e=this.getMiddlePoint(),i=[e,this.drag.startPoint];this.drag.distance=this.getDistance(i);var n=this.events.click&&this.events.click.length||this.events.doubleClick&&this.events.doubleClick.length||this.option.click||this.option.doubleClick;if(!(this.drag.distance<6&&(n||this.option("lockAxis")&&!this.lockAxis))&&("pointerdown"==this.state&&(this.state="dragging"),"dragging"===this.state)){var o=this.option("lockAxis");if(!this.lockAxis&&o)if("xy"===o){var s=this.getDistance(i,"x"),a=this.getDistance(i,"y"),r=Math.abs(180*Math.atan2(a,s)/Math.PI);this.lockAxis=r>45&&r<135?"y":"x"}else this.lockAxis=o;t.preventDefault(),t.stopPropagation(),this.$viewport.classList.add(this.option("draggingClass")),this.animate();var l=this.current.scale,c=0,h=0;if(this.current.scale===this.option("baseScale")&&"y"===this.lockAxis||(c=e.clientX-this.drag.startPoint.clientX),this.current.scale===this.option("baseScale")&&"x"===this.lockAxis||(h=e.clientY-this.drag.startPoint.clientY),this.drag.endPosition.x=this.drag.startPosition.x+c,this.drag.endPosition.y=this.drag.startPosition.y+h,this.pointers.length>1){this.drag.middlePoint=e,l=this.drag.startPosition.scale*this.getDistance()/this.drag.startDistance,l=Math.max(Math.min(l,2*this.option("maxScale")),.5*this.option("minScale"));var d=this.$content.width,u=this.$content.height,f=d*this.drag.startPosition.scale,v=u*this.drag.startPosition.scale,p=u*l,g=(d*l-f)*((this.drag.startPoint.clientX-this.drag.startPosition.left)/f-.5),m=(p-v)*((this.drag.startPoint.clientY-this.drag.startPosition.top)/v-.5);this.drag.endPosition.x-=g,this.drag.endPosition.y-=m,this.drag.endPosition.scale=l,this.updateBounds(l)}this.applyDragResistance()}}}else t.preventDefault()}},{key:"onPointerUp",value:function(t){if(this.removePointer(t),window.PointerEvent)try{t.target.releasePointerCapture(t.pointerId)}catch(t){}else document.removeEventListener("mousemove",this.onPointerMove,{passive:!1}),document.removeEventListener("mouseup",this.onPointerUp,{passive:!1});if(this.pointers.length>0)return t.preventDefault(),void this.resetDragState();if("pointerdown"===this.state||"dragging"===this.state){this.$viewport.classList.remove(this.option("draggingClass"));var e=this.$content.getClientRects()[0],i=e.top,n=e.left,o=this.drag;if(m(!0,o,{elapsedTime:new Date-o.startTime,distanceX:o.endPosition.x-o.firstPosition.x,distanceY:o.endPosition.y-o.firstPosition.y,endPosition:{top:i,left:n}}),o.distance=Math.sqrt(Math.pow(o.distanceX,2)+Math.pow(o.distanceY,2)),this.state="decel",this.friction=this.option("decelFriction"),this.pan={x:this.current.x+this.velocity.x/(1/this.friction-1),y:this.current.y+this.velocity.y/(1/this.friction-1),scale:this.current.scale+this.velocity.scale/(1/this.friction-1)},!1!==this.trigger("touchEnd",t)&&"decel"===this.state){var s=this.option("minScale");if(this.current.scale.01){var r={friction:.64};o.middlePoint&&(r.x=o.middlePoint.clientX-n,r.y=o.middlePoint.clientY-i),this.zoomTo(a,r)}}}}}},{key:"applyDragResistance",value:function(){var t,e,i,n,o=this.boundX,s=this.boundY;if(o&&(t=this.drag.endPosition.xo.to),s&&(i=this.drag.endPosition.ys.to),t||e){var a=t?o.from:o.to,r=this.drag.endPosition.x-a;this.drag.endPosition.x=a+.3*r}if(i||n){var l=i?s.from:s.to,c=this.drag.endPosition.y-l;this.drag.endPosition.y=l+.3*c}}},{key:"onWheel",value:function(t){!1!==this.trigger("wheel",t)&&"zoom"==this.option("wheel",t)&&this.zoomWithWheel(t)}},{key:"zoomWithWheel",value:function(t){void 0===this.changedDelta&&(this.changedDelta=0);var e=this.current.scale,i=Math.max(-1,Math.min(1,-t.deltaY||-t.deltaX||t.wheelDelta||-t.detail));if(i<0&&e<=this.option("minScale")||i>0&&e>=this.option("maxScale")){if(this.changedDelta+=Math.abs(i),this.changedDelta>this.option("wheelLimit"))return}else this.changedDelta=0;e=e*(100+i*this.option("wheelFactor"))/100,t.preventDefault();var n=this.$content.getClientRects()[0],o=n.top,s=n.left,a=t.clientX-s,r=t.clientY-o;this.zoomTo(e,{x:a,y:r})}},{key:"onClick",value:function(t){var e=this;if(!t.defaultPrevented){if(window.getSelection().toString().length)return t.stopPropagation(),void t.stopImmediatePropagation();if(this.drag.startPosition&&this.drag.endPosition&&(Math.abs(this.drag.endPosition.top-this.drag.startPosition.top)>1||Math.abs(this.drag.endPosition.left-this.drag.startPosition.left)>1))return t.stopPropagation(),void t.stopImmediatePropagation();if(this.drag.distance>(this.lockAxis?6:1))return t.preventDefault(),t.stopPropagation(),void t.stopImmediatePropagation();var i=null,n=null;void 0!==t.clientX&&void 0!==t.clientY&&(i=t.clientX-this.$content.getClientRects()[0].left,n=t.clientY-this.$content.getClientRects()[0].top);var o=this.options.doubleClick;if(!o&&this.events.doubleClick&&this.events.doubleClick.length&&(o=!0),o){if(!this.clickTimer)return this.lastClickEvent=t,void(this.clickTimer=setTimeout((function(){e.clickTimer=null,!1!==e.trigger("click",t)&&"toggleZoom"===e.option("click")&&e.toggleZoom({x:i,y:n})}),this.option("clickDelay")));this.getDistance([t,this.lastClickEvent])>=6||(clearTimeout(this.clickTimer),this.clickTimer=null,!1!==this.trigger("doubleClick",t)&&"toggleZoom"===this.option("doubleClick")&&this.toggleZoom({x:i,y:n}))}else{if(!1===this.trigger("click",t))return;"toggleZoom"===this.option("click")&&this.toggleZoom({x:i,y:n})}}}},{key:"destroy",value:function(){"destroy"!==this.state&&(this.state="destroy",this.$viewport.classList.remove("not-selectable"),this.$content instanceof HTMLImageElement&&!this.$content.complete&&(this.$content.onload=null,this.$content.onerror=null),this.pendingAnimateUpdate&&(cancelAnimationFrame(this.pendingAnimateUpdate),this.pendingAnimateUpdate=null),this.clickTimer&&(clearTimeout(this.clickTimer),this.clickTimer=null),this.detachEvents(),this.pointers=[],this.resetValues(),this.$viewport=null,this.$content=null,this.options={},this.events={})}}]),n}(k);C.version="4.0.0-alpha.1",C.Plugins={};var P=function(t,e){var i=0;return function(){var n=(new Date).getTime();if(!(n-i1&&this.carousel.elemDimWidth=t-1&&this.$next.setAttribute("disabled","")))}},{key:"cleanup",value:function(){this.$prev&&this.$prev.remove(),this.$prev=null,this.$next&&this.$next.remove(),this.$next=null,this.$container&&this.$container.remove(),this.$container=null}},{key:"attach",value:function(){this.carousel.on("refresh change",this.onRefresh)}},{key:"detach",value:function(){this.carousel.off("refresh change",this.onRefresh),this.cleanup()}}]),t}();S.defaults={prevTpl:'',nextTpl:'',classNames:{main:"carousel__nav",button:"carousel__button",next:"is-next",prev:"is-prev"}};var E=function(){function t(e){i(this,t),this.carousel=e,this.$list=null,this.events={change:this.onChange.bind(this),refresh:this.onRefresh.bind(this)}}return o(t,[{key:"buildList",value:function(){var t=this;if(!(this.carousel.pages.length<2)){var e=document.createElement("ol");return e.classList.add("carousel__dots"),e.addEventListener("click",(function(e){if("page"in e.target.dataset){e.preventDefault(),e.stopPropagation();var i=parseInt(e.target.dataset.page,10),n=t.carousel;i!==n.page&&(n.pages.length<3&&n.option("infinite")?n[0==i?"slidePrev":"slideNext"]():n.slideTo(i))}})),this.$list=e,this.carousel.$element.appendChild(e),this.carousel.$element.classList.add("has-dots"),e}}},{key:"removeList",value:function(){this.$list&&(this.$list.parentNode.removeChild(this.$list),this.$list=null)}},{key:"rebuildDots",value:function(){var t=this,e=this.$list,i=!!e,n=this.carousel.pages.length;if(n<2)i&&this.removeList();else{i||(e=this.buildList());var o=this.$list.children.length;if(o>n)for(var s=n;s1&&void 0!==arguments[1]?arguments[1]:{};return i(this,n),s=m(!0,{},M,s),(o=e.call(this,s)).state="init",o.$element=t,t.Carousel=l(o),o.page=o.pageIndex=null,o.prevPage=o.prevPageIndex=null,o.slideNext=P(o.slideNext.bind(l(o)),250),o.slidePrev=P(o.slidePrev.bind(l(o)),250),o.attachPlugins(n.Plugins),o.trigger("init"),o.initLayout(),o.initSlides(),o.initPanzoom(),o.state="ready",o.trigger("ready"),o}return o(n,[{key:"initLayout",value:function(){if(!(this.$element instanceof HTMLElement))throw new Error("No root element provided");var t,e,i=this.option("classNames");(this.$viewport=this.option("viewport")||this.$element.querySelector("."+i.viewport),this.$viewport)||(this.$viewport=document.createElement("div"),this.$viewport.classList.add(i.viewport),(t=this.$viewport).append.apply(t,u(this.$element.childNodes)),this.$element.appendChild(this.$viewport));(this.$track=this.option("track")||this.$element.querySelector("."+i.track),this.$track)||(this.$track=document.createElement("div"),this.$track.classList.add(i.track),(e=this.$track).append.apply(e,u(this.$viewport.childNodes)),this.$viewport.appendChild(this.$track))}},{key:"initSlides",value:function(){var t=this;this.slides=[],this.$viewport.querySelectorAll("."+this.option("classNames.slide")).forEach((function(e){var i={$el:e,isDom:!0};t.slides.push(i),t.trigger("createSlide",i,t.slides.length)})),Array.isArray(this.options.slides)&&(this.slides=m(!0,u(this.slides),this.options.slides))}},{key:"updatePage",value:function(){var t=this.page;null===t&&(t=this.page=this.option("initialPage")),this.updateMetrics();var e=this.pages;e[t]||(t=e.length?e[e.length-1].index:0),this.slideTo(t,{friction:0})}},{key:"updateBounds",value:function(){var t=this.Panzoom,e=this.option("infinite"),i=this.option("infiniteX",e),n=this.option("infiniteY",e);i&&(t.boundX=null),n&&(t.boundY=null),i||n||(t.boundX={from:-1*this.pages[this.pages.length-1].left,to:-1*this.pages[0].left})}},{key:"initPanzoom",value:function(){var t=this,e=m(!0,{},{content:this.$track,click:!1,doubleClick:!1,wheel:!1,pinchToZoom:!1,lockAxis:"x",textSelection:function(){return t.option("textSelection",!1)},panOnlyZoomed:function(){return t.option("panOnlyZoomed",t.elemDimWidth1?i-1:0),o=1;o1&&t.drag.elapsedTime<350&&Math.abs(t.drag.distanceY)<1&&Math.abs(t.drag.distanceX)>5)this[t.drag.distanceX<0?"slideNext":"slidePrev"]();else if(e){var i=d(this.getPageFromPosition(-1*this.Panzoom.pan.x),2)[1];this.setPage(i)}else this.slideToClosest()}},{key:"manageInfiniteTrack",value:function(){if(!(!this.option("infiniteX",this.option("infinite"))||this.pages.length<2||this.elemDimWidtht.viewportDim.width&&(t.current.x-=t.contentDim.width,t.drag.firstPosition&&(t.drag.firstPosition.x-=t.contentDim.width),this.pageIndex=this.pageIndex+this.pages.length,e=!0),e&&"dragging"===t.state&&t.resetDragState(),e}}},{key:"manageSlideVisiblity",value:function(){var t=this,e=this.elemDimWidth,i=this.wrapDimWidth,n=-1*this.Panzoom.current.x;Math.abs(n)<.1&&(n=0);var o=this.option("preload"),s=this.option("infiniteX",this.option("infinite")),a=parseFloat(window.getComputedStyle(this.$viewport,null).getPropertyValue("padding-left")),r=parseFloat(window.getComputedStyle(this.$viewport,null).getPropertyValue("padding-right"));this.slides.forEach((function(l){var c,h,d=0;c=n-a,h=n+i+r,c-=o*(i+a+r),h+=o*(i+a+r);var u=l.left+l.width>c&&l.leftc&&l.leftc&&l.leftn&&l.left<=n+i+r&&(d=0)):t.removeSlideEl(l),l.hasDiff=d}));var l=0,c=0;this.slides.forEach((function(t,i){var n=0;t.$el?(i!==l||t.hasDiff?n=c+t.hasDiff*e:c=0,t.$el.style.left=Math.abs(n)>.1?"".concat(c+t.hasDiff*e,"px"):"",l++):c+=t.width})),this.Panzoom.viewportDim.height=this.Panzoom.$content.clientHeight,this.markSelectedSlides()}},{key:"markSelectedSlides",value:function(){var t=this,e=this.option("classNames.slideSelected"),i="aria-hidden";this.slides.forEach((function(n,o){var s=n.$el;if(s){var a=t.pages[t.page];a&&a.indexes&&a.indexes.indexOf(o)>-1?(e&&!s.classList.contains(e)&&(s.classList.add(e),t.trigger("selectSlide",n)),s.removeAttribute(i)):(e&&s.classList.contains(e)&&(s.classList.remove(e),t.trigger("unselectSlide",n)),s.setAttribute(i,!0))}}))}},{key:"createSlideEl",value:function(t){if(t){if(!t.$el){var e,i=document.createElement("div");if(i.dataset.index=t.index,i.classList.add(this.option("classNames.slide")),t.customClass)(e=i.classList).add.apply(e,u(t.customClass.split(" ")));t.html&&(i.innerHTML=t.html);var n=[];this.slides.forEach((function(t,e){t.$el&&n.push(e)}));var o=t.index,s=null;if(n.length){var a=n.reduce((function(t,e){return Math.abs(e-o)this.wrapDimWidth)for(var l=0;lthis.wrapDimWidth)&&(a.push({indexes:[],slides:[]}),c=a.length-1,h=0),h+=f.width,a[c].indexes.push(d),a[c].slides.push(f)}var v=this.option("center"),p=this.option("fill");a.forEach((function(t,i){t.index=i,t.width=t.slides.reduce((function(t,e){return t+e.width}),0),t.left=t.slides[0].left,v&&(t.left+=.5*(e.wrapDimWidth-t.width)*-1),p&&!e.option("infiniteX",e.option("infinite"))&&e.elemDimWidth>e.wrapDimWidth&&(t.left=Math.max(t.left,0),t.left=Math.min(t.left,e.elemDimWidth-e.wrapDimWidth))}));var g,m=[];a.forEach((function(t){g&&t.left===g.left?(g.width+=t.width,g.slides=[].concat(u(g.slides),u(t.slides)),g.indexes=[].concat(u(g.indexes),u(t.indexes))):(t.index=m.length,g=t,m.push(t))})),this.pages=m,this.manageSlideVisiblity(),this.trigger("refresh")}},{key:"setPage",value:function(t,e){var i=0,n=parseInt(t,10)||0,o=this.page,s=this.pageIndex,a=this.pages.length;if(t=(n%a+a)%a,this.option("infiniteX",this.option("infinite"))&&this.elemDimWidth>this.wrapDimWidth){var r=Math.floor(n/a)||0,l=this.elemDimWidth;if(i=this.pages[t].left+r*l,!0===e&&a>2){var c=-1*this.Panzoom.current.x,h=i-l,d=i+l,u=Math.abs(c-i),f=Math.abs(c-h),v=Math.abs(c-d);v1&&void 0!==arguments[1]?arguments[1]:{},i=e.friction,n=void 0===i?this.option("friction"):i;this.Panzoom.panTo({x:-1*this.setPage(t,!0),y:0,friction:n})}},{key:"slideToClosest",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=this.getPageFromPosition(-1*this.Panzoom.pan.x),i=d(e,2),n=i[1];this.slideTo(n,t)}},{key:"slideNext",value:function(){this.slideTo(this.pageIndex+1)}},{key:"slidePrev",value:function(){this.slideTo(this.pageIndex-1)}},{key:"getPageforSlide",value:function(t){var e=this.pages.find((function(e){return e.indexes.indexOf(t)>-1}));return e?e.index:null}},{key:"getPageFromPosition",value:function(t){var e=this.pages.length;this.option("center")&&(t+=.5*this.wrapDimWidth);var i=Math.floor(t/this.elemDimWidth);t-=i*this.elemDimWidth;var n=this.slides.find((function(e){return e.leftt}));if(n){var o=this.getPageforSlide(n.index);return[o,o+i*e]}return[0,0]}},{key:"removeSlideEl",value:function(t){t.$el&&!t.isDom&&(this.trigger("deleteSlide",t),t.$el.remove(),t.$el=null)}},{key:"destroy",value:function(){var t=this;this.state="destroy",this.slides.forEach((function(e){t.removeSlideEl(e)})),this.Panzoom.destroy(),this.options={},this.events={}}}]),n}(k);A.version="4.0.0-alpha.1",A.Plugins=T;var D=!("undefined"==typeof window||!window.document||!window.document.createElement),I=function(){function t(e){i(this,t),this.fancybox=e,this.viewport=null,this.pendingUpdate=null;for(var n=0,o=["onReady","onResize","onTouchstart","onTouchmove"];n.1&&(o="".concat(e.width*i,"px"),s="".concat(e.height*i,"px"),a="translate3d(".concat(e.offsetLeft,"px, ").concat(e.offsetTop,"px, 0) scale(").concat(1/i,")")),n.style.width=o,n.style.height=s,n.style.transform=a,t.Carousel&&t.Carousel.updateMetrics()}}},{key:"onTouchstart",value:function(t){this.startY=t.touches?t.touches[0].screenY:t.screenY}},{key:"onTouchmove",value:function(t){var e=this.startY,i=window.innerWidth/window.document.documentElement.clientWidth;if(!(t.touches.length>1||1!==i)){var n=t.target,o=w(n);if(o){var s=window.getComputedStyle(o),a=parseInt(s.getPropertyValue("height"),10),r=t.touches?t.touches[0].screenY:t.screenY,l=e<=r&&0===o.scrollTop,c=e>=r&&o.scrollHeight-o.scrollTop===a;(l||c)&&t.preventDefault()}else t.preventDefault()}}},{key:"cleanup",value:function(){this.pendingUpdate&&(cancelAnimationFrame(this.pendingUpdate),this.pendingUpdate=null);var t=this.viewport;t&&(t.removeEventListener("resize",this.onResize),this.viewport=null),window.removeEventListener("touchstart",this.onTouchstart,!1),window.removeEventListener("touchmove",this.onTouchmove,!1)}},{key:"attach",value:function(){this.fancybox.on("initLayout",this.onReady)}},{key:"detach",value:function(){this.fancybox.off("initLayout",this.onReady),this.cleanup()}}]),t}(),z=function(){function t(e){i(this,t),this.fancybox=e,this.$wrap=null,this.state="init";for(var n=0,o=["onReady","onClosing","onKeydown"];n'),customClass:"has-thumb has-".concat(e.type||"image")})})),t}},{key:"toggle",value:function(){return"ready"===this.state?(this.Carousel.Panzoom.detachEvents(),this.$wrap.style.display="none",void(this.state="hidden")):"hidden"===this.state?(this.$wrap.style.display="",this.Carousel.Panzoom.attachEvents(),void(this.state="ready")):void this.initLayout()}},{key:"cleanup",value:function(){this.Carousel&&(this.Carousel.destroy(),this.Carousel=null),this.$wrap&&(this.$wrap.remove(),this.$wrap=null),this.state="init"}},{key:"attach",value:function(){this.fancybox.on(this.events)}},{key:"detach",value:function(){this.fancybox.off(this.events),this.cleanup()}}]),t}();z.defaults={autoStart:!0,minSlideCount:3,key:"t"};var _=function(t){return Object.entries(t).map((function(t){return t.map(encodeURIComponent).join("=")})).join("&")},R=function(){function t(e){i(this,t),this.fancybox=e;for(var n=0,o=["onPrepare","onCreateSlide","onDeleteSlide","onSelectSlide","onUnselectSlide","onRefresh","onMessage"];n0?"svembed":"embed"),i="map"):(n=e.match(/(?:maps\.)?google\.([a-z]{2,3}(?:\.[a-z]{2})?)\/(?:maps\/search\/)(.*)/i))&&(t.src="//maps.google.".concat(n[1],"/maps?q=").concat(n[2].replace("query=","q=").replace("api=1",""),"&output=embed"),i="map");i||("#"===e.charAt(0)?i="inline":(n=e.match(/\.(mp4|mov|ogv|webm)((\?|#).*)?$/i))?(i="html5video",t.format=t.format||"video/"+("ogv"===n[1]?"ogg":n[1])):e.match(/(^data:image\/[a-z0-9+\/=]*,)|(\.(jp(e|g|eg)|gif|png|bmp|webp|svg|ico)((\?|#).*)?$)/i)?i="image":e.match(/\.(pdf)((\?|#).*)?$/i)&&(i="pdf")),t.type=i||this.fancybox.option("defaultType","image"),"html5video"!==i&&"video"!==i||(t.video=m({},this.fancybox.option("Html.video"),t.video),t.width&&t.height?t.ratio=parseFloat(t.width)/parseFloat(t.height):t.ratio=t.ratio||t.video.ratio)}}},{key:"loadInlineContent",value:function(t){var e;if(t.src instanceof HTMLElement)e=t.src;else if("string"==typeof t.src){var i=t.src.split("#",2),n=2===i.length&&""===i[0]?i[1]:i[0];e=document.getElementById(n)}if(e){if("clone"===t.type||e.$placeHolder){var o=(e=e.cloneNode(!0)).getAttribute("id");o=o?"".concat(o,"--clone"):"clone-".concat(this.fancybox.id,"-").concat(t.index),e.setAttribute("id",o)}else{var s=document.createElement("div");s.classList.add("fancybox-placeholder"),e.parentNode.insertBefore(s,e),e.$placeHolder=s}this.fancybox.setContent(t,e)}else this.fancybox.setError(t,"{{ELEMENT_NOT_FOUND}}")}},{key:"loadAjaxContent",value:function(t){var e=this.fancybox,i=new XMLHttpRequest;e.showLoading(t),i.onreadystatechange=function(){i.readyState===XMLHttpRequest.DONE&&"ready"===e.state&&(e.hideLoading(t),200===i.status?e.setContent(t,i.responseText):e.setError(t,404===i.status?"{{AJAX_NOT_FOUND}}":"{{AJAX_FORBIDDEN}}"))},i.open("GET",t.src),i.send(t.ajax||null),t.xhr=i}},{key:"loadIframeContent",value:function(t){var e=this,i=this.fancybox,n=document.createElement("iframe");if(n.className="fancybox__iframe",n.setAttribute("id","fancybox__iframe_".concat(i.id,"_").concat(t.index)),n.setAttribute("allow","autoplay; fullscreen"),n.setAttribute("scrolling","auto"),t.$iframe=n,"iframe"!==t.type||!1===t.preload)return n.setAttribute("src",t.src),void this.fancybox.setContent(t,n);i.showLoading(t);var o=document.createElement("div");o.style.visibility="hidden",this.fancybox.setContent(t,o),o.appendChild(n),n.onerror=function(){i.setError(t,"{{IFRAME_ERROR}}")},n.onload=function(){var s=!1;"yes"!==n.dataset.ready&&(n.dataset.ready="yes",s=!0),n.src.length&&(i.hideLoading(t),n.parentNode.style.visibility="",!1!==t.autoSize&&e.autoSizeIframe(n),s&&i.animateCSS(o,i.option("showClass")))},n.setAttribute("src",t.src)}},{key:"setAspectRatio",value:function(t){var e=t.ratio;if(e&&t.$content){t.$content.style.maxWidth="",t.$content.style.maxHeight="";var i=t.$content.offsetWidth,n=t.$content.offsetHeight,o=t.width,s=t.height;if(o&&s&&(i>o||n>s)){var a=Math.min(o/i,s/n);i*=a,n*=a}e\n \n Sorry, your browser doesn\'t support embedded videos, download and watch with your favorite video player!\n',format:""}};var O=function(t){var e=t.naturalWidth,i=t.naturalHeight,n=t.width,o=t.height,s=e/i,a={width:n,height:o};return s>n/o?a.height=n/s:a.width=o*s,a.left=.5*(n-a.width),a.right=e+a.left,a},N=function(){function t(e){i(this,t),this.fancybox=e;for(var n=0,o=["onReady","onClosing","onPageChange","onCreateSlide","onRemoveSlide","onRefresh","onImageStatusChange"];n.1),{top:l,left:c,scale:e.width/a,opacity:h}}},{key:"zoomIn",value:function(){var t=this.fancybox;if("init"!==t.Carousel.state){var e=t.getSlide(),i=e.Panzoom,n=this.getZoomInfo(e),o=n.top,s=n.left,a=n.scale,r=n.opacity;e.state="zoomIn",i.detachEvents(),t.trigger("reveal",e),i.panTo({x:-1*s,y:-1*o,scale:a,friction:0,ignoreBounds:!0}),e.$content.style.visibility="",!0===r&&i.on("afterTransform",(function(t){"zoomIn"!==e.state&&"zoomOut"!==e.state||(t.$content.style.opacity=Math.min(1,t.current.scale))})),i.panTo({x:0,y:0,scale:1,friction:this.fancybox.option("Image.zoomFriction")})}}},{key:"zoomOut",value:function(){var t=this,e=this.fancybox,i=e.getSlide(),n=i.Panzoom;if(n){i.state="zoomOut",e.state="customClosing",i.$caption&&(i.$caption.style.visibility="hidden");var o=.75*this.fancybox.option("Image.zoomFriction"),s=function(){var e=t.getZoomInfo(i),s=e.top,a=e.left,r=e.scale;n.panTo({x:-1*a,y:-1*s,scale:r,ignoreBounds:!0,friction:o}),o*=.98};window.addEventListener("scroll",s),n.on("afterAnimate",(function(){window.removeEventListener("scroll",s),e.destroy()})),s()}}},{key:"handleCursor",value:function(t){var e=t.Panzoom,i=this.fancybox.option("Image.click"),n=t.$el.classList;e&&"toggleZoom"===i?n[e&&1===e.current.scale&&e.option("maxScale")-e.current.scale>.01?"add":"remove"](this.fancybox.option("Image.canZoomInClass")):"close"===i&&n.add(this.fancybox.option("Image.canZoomOutClass"))}},{key:"onWheel",value:function(t,e){switch(this.fancybox.option("Image.wheel")){case"zoom":t.zoomWithWheel(e);break;case"close":this.fancybox.close();break;case"slide":this.fancybox[e.deltaY<0?"prev":"next"]()}e.preventDefault()}},{key:"onClick",value:function(t,e){if(!(this.fancybox.Carousel.Panzoom.drag.distance>=6||this.fancybox.Carousel.Panzoom.lockAxis||"IMG"!=e.target.tagName&&!e.target.classList.contains("fancybox__content")))switch(e.preventDefault(),e.stopPropagation(),this.fancybox.option("Image.click")){case"toggleZoom":var i=e.clientX-t.$content.getClientRects()[0].left,n=e.clientY-t.$content.getClientRects()[0].top;t.toggleZoom({x:i,y:n});break;case"close":this.fancybox.close();break;case"next":this.fancybox.next();break;case"prev":this.fancybox.prev()}}},{key:"onRefresh",value:function(t,e){var i=this;e.slides.forEach((function(t){t.Panzoom&&i.updateDimensions(t)}))}},{key:"onRemoveSlide",value:function(t,e,i){i.$image&&(i.$el.classList.remove(t.option("Image.canZoomInClass")),i.$image.onload=i.$image.onerror=null,i.$image.remove(),i.$image=null),i.Panzoom&&(i.Panzoom.destroy(),i.Panzoom=null),delete i.$el.dataset.imageFit}},{key:"onClosing",value:function(t){t.Carousel.slides.forEach((function(t){t.$image&&(t.$image.onload=t.$image.onerror=null),t.Panzoom&&t.Panzoom.detachEvents()})),"closing"===this.fancybox.state&&this.canZoom()&&this.zoomOut()}},{key:"onPageChange",value:function(t,e){var i=this,n=t.getSlide();e.slides.forEach((function(t){t.Panzoom&&"done"===t.state&&(t.index!==n.index?t.Panzoom.panTo({x:0,y:0,scale:1,friction:.8}):0===e.Panzoom.velocity.x&&i.revealContent(t))}))}},{key:"attach",value:function(){this.fancybox.on(this.events)}},{key:"detach",value:function(){this.fancybox.off(this.events)}}]),t}();N.defaults={Panzoom:{maxScale:1},canZoomInClass:"can-zoom_in",canZoomOutClass:"can-zoom_out",zoom:!0,zoomOpacity:"auto",zoomFriction:.8,ignoreCoveredThumbnail:!1,click:"toggleZoom",doubleClick:null,wheel:"zoom",fit:"contain"};var F=function(){var t=window.location.hash.substr(1),e=t.split("-"),i=e.length>1&&/^\+?\d+$/.test(e[e.length-1])&&parseInt(e.pop(-1),10)||null;return{hash:t,slug:e.join("-"),index:i}},B={ScrollLock:I,Thumbs:z,Html:R,Image:N,Hash:function(){function t(e){i(this,t),this.fancybox=e,this.events={closing:this.onClosing.bind(this),"Carousel.ready Carousel.change":this.onChange.bind(this)},this.hasCreatedHistory=!1,this.origHash="",this.timer=null}return o(t,[{key:"onChange",value:function(t,e){var i=this;this.timer&&clearTimeout(this.timer);var n=null===e.prevPage,o=t.getSlide(),s=o.$trigger&&o.$trigger.dataset,a=window.location.hash.substr(1),r=!1;if(o.slug)r=o.slug;else{var l=s&&s.fancybox;l&&l.length&&"true"!==l&&(r=l+(e.slides.length>1?"-"+(o.index+1):""))}n&&(this.origHash=a!==r?this.origHash:""),r&&a!==r&&(this.timer=setTimeout((function(){try{window.history[n?"pushState":"replaceState"]({},document.title,window.location.pathname+window.location.search+"#"+r),n&&(i.hasCreatedHistory=!0)}catch(t){}}),300))}},{key:"onClosing",value:function(){if(this.timer&&clearTimeout(this.timer),!0!==this.hasSilentClose){if(!this.hasCreatedHistory)try{return void window.history.replaceState({},document.title,window.location.pathname+window.location.search+(this.origHash?"#"+this.origHash:""))}catch(t){}window.history.back()}}},{key:"attach",value:function(t){t.on(this.events)}},{key:"detach",value:function(t){t.off(this.events)}}],[{key:"startFromUrl",value:function(){if(!t.Fancybox.getInstance()){var e=F(),i=e.hash,n=e.slug,o=e.index;if(n){var s=document.querySelector('[data-slug="'.concat(i,'"]'));if(s&&s.dispatchEvent(new CustomEvent("click",{bubbles:!0,cancelable:!0})),!t.Fancybox.getInstance()){var a=document.querySelectorAll('[data-fancybox="'.concat(n,'"]'));a.length&&(null===o&&1===a.length?s=a[0]:o&&(s=a[o-1]),s&&s.dispatchEvent(new CustomEvent("click",{bubbles:!0,cancelable:!0})))}}}}},{key:"onHashChange",value:function(){var e=F(),i=e.slug,n=e.index,o=t.Fancybox.getInstance();if(o){if(i){var s,a=o.Carousel,r=p(a.slides);try{for(r.s();!(s=r.n()).done;){var l=s.value;if(l.slug&&l.slug===i)return a.slideTo(l.index)}}catch(t){r.e(t)}finally{r.f()}var c=o.getSlide(),h=c.$trigger&&c.$trigger.dataset;if(h&&h.fancybox===i)return a.slideTo(n-1)}o.plugins.Hash.hasSilentClose=!0,o.close()}t.startFromUrl()}},{key:"onReady",value:function(){window.addEventListener("hashchange",t.onHashChange,!1),t.startFromUrl()}},{key:"create",value:function(){D&&window.requestAnimationFrame((function(){t.onReady()}))}},{key:"destroy",value:function(){window.removeEventListener("hashchange",t.onHashChange,!1)}}]),t}()},W=0,H=null,U=function(t){s(n,t);var e=h(n);function n(t){var o,s=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};i(this,n);var a,r=function(t,e){var i=m(!0,{},t[e.startIndex]||{});return t.forEach((function(t){var e=t.$trigger;if(e){var i=e.dataset||{};t.src=i.src||e.getAttribute("href")||t.src,t.type=i.type||t.type}})),m(!0,{},n.defaults,e,i)};return a=!1,document.createElement("div").focus({get preventScroll(){return a=!0,!1}}),H=a,(o=e.call(this,r(t,s))).state="init",o.items=t,o.bindHandlers(),o.attachPlugins(n.Plugins),o.trigger("init"),!0===o.option("hideScrollbar")&&o.hideScrollbar(),o.initLayout(),o.initCarousel(o.getSlides()),o.attachEvents(),o.state="ready",o.trigger("ready"),o.$container.setAttribute("aria-hidden","false"),o}return o(n,[{key:"bindHandlers",value:function(){for(var t=0,e=["onMousedown","onKeydown","onClick","onCreateSlide","onSettle","onTouchMove","onTouchEnd","onTransform"];t1?"x":"";return e.options.dragToClose&&(t+="y"),t}},on:{"*":function(t){for(var i=arguments.length,n=new Array(i>1?i-1:0),o=1;o=150||Math.abs(e)>=35&&t.drag.elapsedTime<350)&&(this.option("hideClass")&&(this.getSlide().hideClass="fancybox-throwOut".concat(t.current.y<0?"Up":"Down")),this.close())}},{key:"onTransform",value:function(t){if(this.$backdrop){var e=Math.abs(t.current.y),i=e<1?"":Math.max(0,Math.min(1,1-e/t.$content.clientHeight*1.5));this.$container.style.setProperty("--fancybox-ts",i?"0s":""),this.$container.style.setProperty("--fancybox-opacity",i)}}},{key:"onMousedown",value:function(){document.body.classList.add("is-using-mouse")}},{key:"onKeydown",value:function(t){if(n.getInstance().id===this.id){document.body.classList.remove("is-using-mouse");var e=t.key;if("Tab"===e&&this.option("trapFocus"))this.focus(t);else{var i=this.option("keyboard");if(i&&!t.ctrlKey&&!t.altKey&&!t.shiftKey){var o=document.activeElement&&document.activeElement.classList,s=o&&o.contains("carousel__button");if("Escape"!==e&&!s)if(t.target.isContentEditable||-1!==["BUTTON","TEXTAREA","OPTION","INPUT","SELECT","VIDEO"].indexOf(t.target.nodeName))return;if(!1!==this.trigger("keydown",e)){"Enter"!==e&&t.preventDefault();var a=i[e];"function"==typeof this[a]&&this[a]()}}}}}},{key:"getSlide",value:function(){var t=this.Carousel;if(!t)return null;var e=null===t.page?t.option("initialPage"):t.page,i=t.pages||[];return i.length&&i[e]?i[e].slides[0]:null}},{key:"focus",value:function(t){var e=function(t){t.setActive?t.setActive():H?t.focus({preventScroll:!0}):t.focus()};t&&t.preventDefault();var i=this.getSlide().$el;i.tabIndex=0;var n,o=[],s=p([].slice.call(this.$container.querySelectorAll(["a[href]","area[href]",'input:not([disabled]):not([type="hidden"]):not([aria-hidden])',"select:not([disabled]):not([aria-hidden])","textarea:not([disabled]):not([aria-hidden])","button:not([disabled]):not([aria-hidden])","iframe","object","embed","video","audio","[contenteditable]",'[tabindex]:not([tabindex^="-"]):not([disabled]):not([aria-hidden])'])));try{for(s.s();!(n=s.n()).done;){var a=n.value;if(!a.classList||!a.classList.contains("fancybox__slide")){var r=a.closest(".fancybox__slide");r?r===i&&o[a.hasAttribute("autofocus")?"unshift":"push"](a):o.push(a)}}}catch(t){s.e(t)}finally{s.f()}if(o.length){this.Carousel.pages.length>1&&o.push(i);var l=o.indexOf(document.activeElement),c=t&&!t.shiftKey,h=t&&t.shiftKey;return c?l===o.length-1?e(o[0]):e(o[l+1]):h?e(0===l?o[o.length-1]:o[l-1]):l<0?e(o[0]):void 0}}},{key:"hideScrollbar",value:function(){if(D){var t=window.innerWidth-document.documentElement.getBoundingClientRect().width,e="fancybox-style-noscroll",i=document.getElementById(e);i||t&&((i=document.createElement("style")).id=e,i.type="text/css",i.innerHTML=".compensate-for-scrollbar {padding-right: ".concat(t,"px;}"),document.getElementsByTagName("head")[0].appendChild(i),document.body.classList.add("compensate-for-scrollbar"))}}},{key:"revealScrollbar",value:function(){document.body.classList.remove("compensate-for-scrollbar");var t=document.getElementById("fancybox-style-noscroll");t&&t.remove()}},{key:"clearContent",value:function(t){this.Carousel.trigger("deleteSlide",t),t.$content&&(t.$content.remove(),t.$content=null),t._className&&t.$el.classList.remove(t._className)}},{key:"setContent",value:function(t,e){var i,n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},o=t.$el;if(e instanceof HTMLElement?["img","iframe","video","audio"].indexOf(e.nodeName.toLowerCase())>-1?(i=document.createElement("div")).appendChild(e):i=e:(i=document.createElement("div")).innerHTML=e,!(i instanceof Element))throw new Error("Element expected");return t._className="has-".concat(n.suffix||t.type||"unknown"),o.classList.add(t._className),i.classList.add("fancybox__content"),"none"!==i.style.display&&"none"!==window.getComputedStyle(i).getPropertyValue("display")||(i.style.display="flex"),t.id&&i.setAttribute("id",t.id),t.$content=i,o.insertBefore(i,o.querySelector(".fancybox__caption")),this.manageCloseButton(t),"loading"!==t.state&&(this.trigger("load",t),this.revealContent(t)),i}},{key:"manageCloseButton",value:function(t){var e=this,i=void 0===t.closeButton?this.option("closeButton"):t.closeButton;if(i&&(!this.$closeButton||"inside"===i)){var n=document.createElement("button");n.classList.add("carousel__button","is-close"),n.setAttribute("title",this.options.l10n.CLOSE),n.innerHTML=this.option("template.closeButton"),n.addEventListener("click",(function(t){return e.close(t)})),"inside"===i?(t.$closeButton&&t.$closeButton.remove(),t.$closeButton=t.$content.appendChild(n)):this.$closeButton=this.$container.insertBefore(n,this.$container.firstChild)}}},{key:"revealContent",value:function(t){var e=this;if(this.trigger("reveal",t),t.$content.style.visibility="","error"!==t.state&&null===this.Carousel.prevPage&&t.index===this.options.startIndex){t.state="animating";var i=void 0===t.showClass?this.option("showClass"):t.showClass;this.animateCSS(t.$content,i,(function(){e.done(t)}))}else this.done(t)}},{key:"animateCSS",value:function(t,e,i){if(t&&t.dispatchEvent(new CustomEvent("animationend",{bubbles:!0,cancelable:!0})),t&&e){t.addEventListener("animationend",(function n(o){o.currentTarget===this&&(t.classList.remove(e),t.removeEventListener("animationend",n),i&&i())})),t.classList.add(e)}else"function"==typeof i&&i()}},{key:"done",value:function(t){if("init"===this.state||"ready"===this.state){t.state="done",this.trigger("done",t);var e=this.getSlide();e&&t.index===e.index&&this.option("autoFocus")&&this.focus()}}},{key:"setError",value:function(t,e){this.hideLoading(t),this.clearContent(t),t.state="error";var i=document.createElement("div");i.classList.add("fancybox-error"),i.innerHTML=this.localize(e||"

{{ERROR}}

"),this.setContent(t,i,{suffix:"error"})}},{key:"showLoading",value:function(t){var e=this;t.state="loading",t.$el.classList.add("is-loading");var i=t.$el.querySelector(".fancybox__spinner");i||((i=document.createElement("div")).classList.add("fancybox__spinner"),i.innerHTML=this.option("template.spinner"),i.addEventListener("click",(function(){e.Carousel.Panzoom.velocity||e.close()})),t.$el.insertBefore(i,t.$el.firstChild))}},{key:"hideLoading",value:function(t){var e=t.$el.querySelector(".fancybox__spinner");e&&e.remove(),t.$el.classList.remove("is-loading")}},{key:"next",value:function(){var t=this.Carousel;t&&t.pages.length>1&&t.slideNext()}},{key:"prev",value:function(){var t=this.Carousel;t&&t.pages.length>1&&t.slidePrev()}},{key:"jumpTo",value:function(){var t;this.Carousel&&(t=this.Carousel).slideTo.apply(t,arguments)}},{key:"close",value:function(t){var e=this;if(t&&t.preventDefault(),!(["closing","customClosing","destroy"].indexOf(this.state)>-1)&&!1!==this.trigger("shouldClose",t)&&(this.state="closing",this.Carousel.Panzoom.destroy(),this.detachEvents(),this.trigger("closing",t),"destroy"!==this.state)){this.$container.setAttribute("aria-hidden","true"),this.$container.classList.add("is-closing");var i=this.getSlide();if(this.Carousel.slides.forEach((function(t){t.$content&&t.index!==i.index&&t.$content.remove()})),"closing"===this.state){var n=void 0===i.hideClass?this.option("hideClass"):i.hideClass;this.animateCSS(i.$content,n,(function(){e.destroy()}))}}}},{key:"destroy",value:function(){this.state="destroy",this.trigger("destroy");var t=this.option("placeFocusBack")?this.getSlide().$trigger:null;if(this.Carousel.destroy(),this.detachPlugins(),this.Carousel=null,this.options={},this.events={},this.$container.remove(),this.$container=this.$backdrop=this.$carousel=null,t)if(H)t.focus({preventScroll:!0});else{var e=document.body.scrollTop;t.focus(),document.body.scrollTop=e}var i=n.getInstance();i?i.focus():(document.documentElement.classList.remove("with-fancybox"),document.body.classList.remove("is-using-mouse"),this.revealScrollbar())}}],[{key:"show",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return new n(t,e)}},{key:"fromEvent",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(!t.defaultPrevented&&!(t.button&&0!==t.button||t.ctrlKey||t.metaKey||t.shiftKey)){var i,o,s,a=!1,r=t.target;if((r.matches("[data-fancybox-trigger]")||(r=r.closest("[data-fancybox-trigger]")))&&(s=r&&r.dataset&&r.dataset.fancyboxTrigger),s){var l=document.querySelectorAll('[data-fancybox="'.concat(s,'"]')),c=parseInt(r.dataset.fancyboxIndex,10)||0;r=l.length?l[c]:r}r||(r=t.target),Array.from(n.openers.keys()).reverse().some((function(e){if((i=r).matches(e)||(i=i.closest(e)))return t.preventDefault(),o=e,!0})),o&&(e.target=i,i.origTarget=t.target,a=n.fromOpener(o,e));var h=n.getInstance();return h&&"ready"===h.state&&t.detail&&document.body.classList.add("is-using-mouse"),a}}},{key:"fromOpener",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},i=function(t){for(var e=["false","0","no","null"],i=["true","1","yes"],n=Object.assign({},t.dataset),o=0,s=Object.entries(n);o-1)n[r]=!1;else if(i.indexOf(n[r])>-1)n[r]=!0;else try{n[r]=JSON.parse(l)}catch(t){n[r]=l}}return delete n.fancybox,delete n.type,t instanceof Element&&(n.$trigger=t),n},o=[],s=e.startIndex||0,a=(e=m({},e,n.openers.get(t))).groupAttr;void 0===a&&(a="data-fancybox");var r=e.target;if(a){if(r&&t&&t==="[".concat(a,"]")){var l=r.getAttribute("".concat(a));t=!(!l||!l.length||"true"===l)&&"[".concat(a,"='").concat(l,"']")}}else t=!1;if(t&&(o=[].slice.call(document.querySelectorAll(t))),!o.length&&r&&(o=[r]),!o.length)return!1;var c=n.getInstance();return!(c&&o.indexOf(c.options.$trigger)>-1)&&(s=r?o.indexOf(r):s,new n(o=o.map(i),m({},e,{startIndex:s,$trigger:r})))}},{key:"bind",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(D){if(!n.openers.size){document.body.addEventListener("click",n.fromEvent,!1);for(var i=0,o=Object.entries(n.Plugins||{});i0&&void 0!==arguments[0])||arguments[0],e=null;e=n.getInstance();)if(e.close(),!t)return}}]),n}(k);U.version="4.0.0-alpha.1",U.defaults={startIndex:0,preload:1,infinite:!0,showClass:"fancybox-zoomInUp",hideClass:"fancybox-fadeOut",animated:!0,hideScrollbar:!0,parentEl:null,mainClass:null,autoFocus:!0,trapFocus:!0,placeFocusBack:!0,click:"close",closeButton:"inside",dragToClose:!0,keyboard:{Escape:"close",Delete:"close",Backspace:"close",PageUp:"next",PageDown:"prev",ArrowUp:"next",ArrowDown:"prev",ArrowRight:"next",ArrowLeft:"prev"},template:{closeButton:'',spinner:'',main:null},l10n:{CLOSE:"Close",NEXT:"Next",PREV:"Previous",MODAL:"You can close this modal content with the ESC key",ERROR:"Something Went Wrong, Please Try Again Later",IMAGE_ERROR:"Image Not Found",ELEMENT_NOT_FOUND:"HTML Element Not Found",AJAX_NOT_FOUND:"Error Loading AJAX : Not Found",AJAX_FORBIDDEN:"Error Loading AJAX : Forbidden",IFRAME_ERROR:"Error Loading Page"}},U.openers=new Map,U.Plugins=B,U.isMobile=function(){return!!navigator&&/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent)},U.bind("[data-fancybox]"),t.Carousel=A,t.Fancybox=U,t.Panzoom=C})); diff --git a/dist/panzoom.controls.css b/dist/panzoom.controls.css index 40921b1..9ca443d 100644 --- a/dist/panzoom.controls.css +++ b/dist/panzoom.controls.css @@ -1 +1 @@ -.panzoom__controls{position:absolute;bottom:16px;right:16px;display:flex;flex-direction:column;transform-origin:bottom right;transform:scale(0.75)}.panzoom__button{cursor:pointer;margin:0;padding:10px;border:0;color:#222;background:#eee}@media(hover: hover){.panzoom__button:hover{background:#ccc}}.panzoom__button svg{vertical-align:top;pointer-events:none;fill:none;stroke:currentColor;stroke-width:2;stroke-linecap:round;stroke-linejoin:round} \ No newline at end of file +.panzoom__controls{position:absolute;top:16px;left:16px;display:flex;flex-direction:column;transform-origin:top left;transform:scale(0.75)}.panzoom__button{cursor:pointer;margin:0;padding:10px;border:0;border-radius:0;color:#222;background:#eee}@media(hover: hover){.panzoom__button:hover{background:#ccc}}.panzoom__button svg{vertical-align:top;pointer-events:none;fill:none;stroke:currentColor;stroke-width:2;stroke-linecap:round;stroke-linejoin:round} \ No newline at end of file diff --git a/src/Carousel/Carousel.js b/src/Carousel/Carousel.js index 94cc411..9f15394 100644 --- a/src/Carousel/Carousel.js +++ b/src/Carousel/Carousel.js @@ -34,7 +34,7 @@ const defaults = { // Should the gap be filled before first and after last slide if `infinite: false` fill: true, - // Should carousel settle at specific page after drag event + // Should Carousel settle at any position after a swipe. dragFree: false, classNames: { diff --git a/src/Fancybox/Fancybox.js b/src/Fancybox/Fancybox.js index 3598a65..6845c84 100644 --- a/src/Fancybox/Fancybox.js +++ b/src/Fancybox/Fancybox.js @@ -9,12 +9,6 @@ import { Carousel } from "../Carousel/Carousel.js"; import { Plugins } from "./plugins/index.js"; const defaults = { - // If browser scrollbar should be hidden - hideScrollbar: true, - - // Virtual slides - items: [], - // Index of active slide on the start startIndex: 0, @@ -33,6 +27,33 @@ const defaults = { // Should backdrop and UI elements fade in/out on start/close animated: true, + // If browser scrollbar should be hidden + hideScrollbar: true, + + // Element containing main structure + parentEl: null, + + // Custom class name or multiple space-separated class names for the container + mainClass: null, + + // Set focus on first focusable element after displaying content + autoFocus: true, + + // Trap focus inside Fancybox + trapFocus: true, + + // Set focus back to trigger element after closing Fancybox + placeFocusBack: true, + + // Action to take when the user clicks on the backdrop + click: "close", // "close" | "next" + + // Position of the close button - over the content or at top right corner of viewport + closeButton: "inside", // "inside" | "outside" + + // Allow user to drag content up/down to close instance + dragToClose: true, + // Enable keyboard navigation keyboard: { Escape: "close", @@ -46,57 +67,32 @@ const defaults = { ArrowLeft: "prev", }, - // HTML template for various elements + // HTML templates for various elements template: { + // Close button icon closeButton: '', - + // Loading indicator icon spinner: '', - /* If `main` option is not provided, the structure is generated like this: - - */ + // Main container element main: null, }, - // Element containing main structure - parentEl: null, - - // Custom class or space-separated classes for the main element - mainClass: null, - - // Set focus on first focusable element after displaying content - autoFocus: true, - - // Trap focus inside fancybox - trapFocus: true, - - // Set focus back to trigger element after closing fancybox - placeFocusBack: true, - - // Action to take when the user clicks on the backdrop - click: "close", // close / next + /* Note: If the `template.main` option is not provided, the structure is generated as follows by default: + + */ - // Position of the close button - over the content or at top right corner of viewport - closeButton: "inside", // "inside" | "outside" - - // Allow user to drag content up/down to close instance - dragToClose: true, - - // Example how to import other translations: - // `import de from "./l10n/de";` - // and then set `l10n: de` as an option + // Localization of strings l10n: { CLOSE: "Close", NEXT: "Next", PREV: "Previous", - MODAL: "You can close this modal content with the ESC key", - ERROR: "Something Went Wrong, Please Try Again Later", IMAGE_ERROR: "Image Not Found", ELEMENT_NOT_FOUND: "HTML Element Not Found", @@ -115,11 +111,11 @@ class Fancybox extends Base { * @constructs Fancybox * @param {Object} [options] - Options for Fancybox */ - constructor(options = {}) { - const handleOptions = function (options) { - const firstOpts = extend(true, {}, options.items[options.startIndex || 0] || {}); + constructor(items, options = {}) { + const handleOptions = function (items, options) { + const firstOpts = extend(true, {}, items[options.startIndex] || {}); - options.items.forEach((item) => { + items.forEach((item) => { const $trigger = item.$trigger; if ($trigger) { @@ -148,9 +144,10 @@ class Fancybox extends Base { return rez; })(); - super(handleOptions(options)); + super(handleOptions(items, options)); this.state = "init"; + this.items = items; this.bindHandlers(); @@ -307,7 +304,7 @@ class Fancybox extends Base { * @returns {Array} Slides */ getSlides() { - const slides = [...this.options.items]; + const slides = [...this.items]; slides.forEach((slide) => { // Support items without `src`, e.g., when `data-fancybox` attribute added directly to `` element @@ -606,8 +603,7 @@ class Fancybox extends Base { } /** - * Retrieve active slide - * This will be first slide from current page of main carousel + * Get the active slide. This will be the first slide from the current page of the main carousel. */ getSlide() { const carousel = this.Carousel; @@ -625,7 +621,7 @@ class Fancybox extends Base { } /** - * Place focus on first focusable element inside current slide + * Place focus on the first focusable element inside current slide * @param {Event} [event] - Focus event */ focus(event) { @@ -722,8 +718,8 @@ class Fancybox extends Base { } /** - * Hide vertical page scrollbar and adjust `body` right padding value to prevent content from shofting - * (e.g., `body` will be wider and content can expand ) + * Hide vertical page scrollbar and adjust right padding value of `body` element to prevent content from shifting + * (otherwise the `body` element may become wider and the content may expand horizontally). */ hideScrollbar() { if (!canUseDOM) { @@ -782,6 +778,7 @@ class Fancybox extends Base { slide.$el.classList.remove(slide._className); } } + /** * Set new content for given slide * @param {Object} slide - Carousel slide @@ -833,7 +830,7 @@ class Fancybox extends Base { this.manageCloseButton(slide); if (slide.state !== "loading") { - this.trigger("afterLoad", slide); + this.trigger("load", slide); this.revealContent(slide); } @@ -1047,7 +1044,7 @@ class Fancybox extends Base { } /** - * Start closing current instance + * Start closing the current instance * @param {Event} [event] - Optional click event */ close(event) { @@ -1160,9 +1157,7 @@ class Fancybox extends Base { * @returns {Object} Fancybox instance */ static show(items, options = {}) { - options.items = items; - - return new Fancybox(options); + return new Fancybox(items, options); } /** @@ -1345,8 +1340,8 @@ class Fancybox extends Base { // * Create new fancybox instance return new Fancybox( + items, extend({}, options, { - items: items, startIndex: index, $trigger: target, }) @@ -1354,13 +1349,11 @@ class Fancybox extends Base { } /** - * Add selector to opener list for basic event delegation - * When user clicks on the document, the script will check if click target matches any selector, - * and will start Fancybox if one is found - * @param {String} opener - Selector that should match trigger elements - * @param {Object} options - Custom options + * Attach a click handler function that starts Fancybox to the selected items, as well as to all future matching elements. + * @param {String} selector - Selector that should match trigger elements + * @param {Object} [options] - Custom options */ - static assign(opener, options = {}) { + static bind(selector, options = {}) { if (!canUseDOM) { return; } @@ -1378,15 +1371,15 @@ class Fancybox extends Base { } } - Fancybox.openers.set(opener, options); + Fancybox.openers.set(selector, options); } /** - * Remove selector from the the opener list - * @param {String} opener - Selector + * Remove the click handler that was attached with `bind()` + * @param {String} selector - A selector which should match the one originally passed to .bind() */ - static trash(opener) { - Fancybox.openers.delete(opener); + static unbind(selector) { + Fancybox.openers.delete(selector); if (!Fancybox.openers.size) { Fancybox.destroy(); @@ -1394,16 +1387,22 @@ class Fancybox extends Base { } /** - * Clean up bindings + * Immediately destroy all instances (without closing animation) and clean up all bindings.. */ static destroy() { + let fb; + + while ((fb = Fancybox.getInstance())) { + fb.destroy(); + } + Fancybox.openers = new Map(); document.body.removeEventListener("click", Fancybox.fromEvent, false); } /** - * Returns instance by identifier or the top most instance, if identifier is not provided + * Retrieve instance by identifier or the top most instance, if identifier is not provided * @param {String|Numeric} [id] - Optional instance identifier */ static getInstance(id) { @@ -1427,7 +1426,7 @@ class Fancybox extends Base { } /** - * Close currently active instances + * Close all or topmost currently active instance. * @param {boolean} [all] - All or only topmost active instance */ static close(all = true) { @@ -1458,6 +1457,6 @@ Fancybox.isMobile = () => navigator ? /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent) : false; // Auto init with default options -Fancybox.assign("[data-fancybox]"); +Fancybox.bind("[data-fancybox]"); export { Fancybox }; diff --git a/src/Fancybox/l10n/de.js b/src/Fancybox/l10n/de.js index 0c605a4..4044bea 100644 --- a/src/Fancybox/l10n/de.js +++ b/src/Fancybox/l10n/de.js @@ -2,12 +2,11 @@ export default { CLOSE: "Schließen", NEXT: "Weiter", PREV: "Zurück", + MODAL: "Sie können diesen modalen Inhalt mit der ESC-Taste schließen", ERROR: "Die angeforderten Daten konnten nicht geladen werden.
Bitte versuchen Sie es später nochmal.", - PLAY_START: "Diaschau starten", - PLAY_STOP: "Diaschau beenden", - FULL_SCREEN: "Vollbild", - THUMBS: "Vorschaubilder", - DOWNLOAD: "Herunterladen", - SHARE: "Teilen", - ZOOM: "Vergrößern", + IMAGE_ERROR: "Bild nicht gefunden", + ELEMENT_NOT_FOUND: "HTML-Element nicht gefunden", + AJAX_NOT_FOUND: "Fehler beim Laden von AJAX: Nicht gefunden", + AJAX_FORBIDDEN: "Fehler beim Laden von AJAX: Verboten", + IFRAME_ERROR: "Fehler beim Laden der Seite", }; diff --git a/src/Fancybox/plugins/Html/Html.js b/src/Fancybox/plugins/Html/Html.js index 9595131..903113b 100644 --- a/src/Fancybox/plugins/Html/Html.js +++ b/src/Fancybox/plugins/Html/Html.js @@ -78,7 +78,7 @@ export class Html { * Check if each gallery item has type when fancybox starts */ onPrepare() { - this.fancybox.options.items.forEach((slide) => { + this.fancybox.items.forEach((slide) => { this.processType(slide); }); } @@ -102,6 +102,10 @@ export class Html { let type = slide.type || this.fancybox.options.type, rez = null; + if (src && typeof src !== "string") { + return; + } + if ( (rez = src.match( /(?:youtube\.com|youtu\.be|youtube\-nocookie\.com)\/(?:watch\?(?:.*&)?v=|v\/|u\/|embed\/?)?(videoseries\?list=(?:.*)|[\w-]{11}|\?listType=(?:.*)&list=(?:.*))(?:.*)/i diff --git a/src/Fancybox/plugins/Image/Image.js b/src/Fancybox/plugins/Image/Image.js index a6c8e05..5b44796 100644 --- a/src/Fancybox/plugins/Image/Image.js +++ b/src/Fancybox/plugins/Image/Image.js @@ -27,13 +27,13 @@ const defaults = { ignoreCoveredThumbnail: false, // Action to be performed when user clicks on the image - click: "toggleZoom", // "toggleZoom" | "next" | "close" + click: "toggleZoom", // "toggleZoom" | "next" | "close" | null // Action to be performed when double-click event is detected on the image - doubleClick: "", // "toggleZoom" + doubleClick: null, // "toggleZoom" | null // Action to be performed when user rotates a wheel button on a pointing device - wheel: "zoom", // "zoom" | "slide" | "close" + wheel: "zoom", // "zoom" | "slide" | "close" | null // How image should be resized to fit its container fit: "contain", // "contain" | "contain-w" | "cover" @@ -195,9 +195,9 @@ export class Image { panOnlyZoomed: true, // Disable default click/wheel events; custom callbacks will replace them - click: false, - doubleClick: false, - wheel: false, + click: null, + doubleClick: null, + wheel: null, on: { afterAnimate: (panzoom) => { diff --git a/src/Fancybox/plugins/Thumbs/Thumbs.js b/src/Fancybox/plugins/Thumbs/Thumbs.js index fa5500f..b6f5325 100644 --- a/src/Fancybox/plugins/Thumbs/Thumbs.js +++ b/src/Fancybox/plugins/Thumbs/Thumbs.js @@ -2,8 +2,11 @@ import { extend } from "../../../shared/utils/extend.js"; import { Carousel } from "../../../Carousel/Carousel.js"; const defaults = { + // Automatically show thumbnails when opened autoStart: true, + // The minimum number of images in the gallery to display thumbnails minSlideCount: 3, + // Keyboard shortcut to toggle thumbnail container key: "t", }; @@ -121,7 +124,7 @@ export class Thumbs { getSlides() { const slides = []; - this.fancybox.options.items.forEach((slide) => { + this.fancybox.items.forEach((slide) => { const thumb = slide.thumb; if (thumb) { diff --git a/src/Panzoom/plugins/Controls/Controls.scss b/src/Panzoom/plugins/Controls/Controls.scss index 7eaabc2..286576a 100644 --- a/src/Panzoom/plugins/Controls/Controls.scss +++ b/src/Panzoom/plugins/Controls/Controls.scss @@ -1,12 +1,12 @@ .panzoom__controls { position: absolute; - bottom: 16px; - right: 16px; + top: 16px; + left: 16px; display: flex; flex-direction: column; - transform-origin: bottom right; + transform-origin: top left; transform: scale(0.75); } @@ -15,6 +15,7 @@ margin: 0; padding: 10px; border: 0; + border-radius: 0; color: #222; background: #eee;