vendor: 78 bytes, lines 1-3
1/******/ (() => { // webpackBootstrap 2/******/ var __webpack_modules__ = ({ 3
vendor: 142,667 bytes, lines 4-21
4/***/ "./node_modules/@fancyapps/ui/dist/index.esm.js": 5/*!******************************************************!*\ 6 !*** ./node_modules/@fancyapps/ui/dist/index.esm.js ***! 7 \******************************************************/ 8/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { 9 10"use strict"; 11__webpack_require__.r(__webpack_exports__); 12/* harmony export */ __webpack_require__.d(__webpack_exports__, { 13/* harmony export */ Carousel: () => (/* binding */ K), 14/* harmony export */ Fancybox: () => (/* binding */ ce), 15/* harmony export */ Panzoom: () => (/* binding */ R) 16/* harmony export */ }); 17const t=(t,e=1e4)=>(t=parseFloat(t+"")||0,Math.round((t+Number.EPSILON)*e)/e),e=function(t){if(!(t&&t instanceof Element&&t.offsetParent))return!1;const e=t.scrollHeight>t.clientHeight,i=window.getComputedStyle(t).overflowY,n=-1!==i.indexOf("hidden"),s=-1!==i.indexOf("visible");return e&&!n&&!s},i=function(t,n=void 0){return!(!t||t===document.body||n&&t===n)&&(e(t)?t:i(t.parentElement,n))},n=function(t){var e=(new DOMParser).parseFromString(t,"text/html").body;if(e.childElementCount>1){for(var i=document.createElement("div");e.firstChild;)i.appendChild(e.firstChild);return i}return e.firstChild},s=t=>`${t||""}`.split(" ").filter((t=>!!t)),o=(t,e,i)=>{t&&s(e).forEach((e=>{t.classList.toggle(e,i||!1)}))};class a{constructor(t){Object.defineProperty(this,"pageX",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"pageY",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"clientX",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"clientY",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"id",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"time",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"nativePointer",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),this.nativePointer=t,this.pageX=t.pageX,this.pageY=t.pageY,this.clientX=t.clientX,this.clientY=t.clientY,this.id=self.Touch&&t instanceof Touch?t.identifier:-1,this.time=Date.now()}}const r={passive:!1};class l{constructor(t,{start:e=(()=>!0),move:i=(()=>{}),end:n=(()=>{})}){Object.defineProperty(this,"element",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"startCallback",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"moveCallback",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"endCallback",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"currentPointers",{enumerable:!0,configurable:!0,writable:!0,value:[]}),Object.defineProperty(this,"startPointers",{enumerable:!0,configurable:!0,writable:!0,value:[]}),this.element=t,this.startCallback=e,this.moveCallback=i,this.endCallback=n;for(const t of["onPointerStart","onTouchStart","onMove","onTouchEnd","onPointerEnd","onWindowBlur"])this[t]=this[t].bind(this);this.element.addEventListener("mousedown",this.onPointerStart,r),this.element.addEventListener("touchstart",this.onTouchStart,r),this.element.addEventListener("touchmove",this.onMove,r),this.element.addEventListener("touchend",this.onTouchEnd),this.element.addEventListener("touchcancel",this.onTouchEnd)}onPointerStart(t){if(!t.buttons||0!==t.button)return;const e=new a(t);this.currentPointers.some((t=>t.id===e.id))||this.triggerPointerStart(e,t)&&(window.addEventListener("mousemove",this.onMove),window.addEventListener("mouseup",this.onPointerEnd),window.addEventListener("blur",this.onWindowBlur))}onTouchStart(t){for(const e of Array.from(t.changedTouches||[]))this.triggerPointerStart(new a(e),t);window.addEventListener("blur",this.onWindowBlur)}onMove(t){const e=this.currentPointers.slice(),i="changedTouches"in t?Array.from(t.changedTouches||[]).map((t=>new a(t))):[new a(t)],n=[];for(const t of i){const e=this.currentPointers.findIndex((e=>e.id===t.id));e<0||(n.push(t),this.currentPointers[e]=t)}n.length&&this.moveCallback(t,this.currentPointers.slice(),e)}onPointerEnd(t){t.buttons>0&&0!==t.button||(this.triggerPointerEnd(t,new a(t)),window.removeEventListener("mousemove",this.onMove),window.removeEventListener("mouseup",this.onPointerEnd),window.removeEventListener("blur",this.onWindowBlur))}onTouchEnd(t){for(const e of Array.from(t.changedTouches||[]))this.triggerPointerEnd(t,new a(e))}triggerPointerStart(t,e){return!!this.startCallback(e,t,this.currentPointers.slice())&&(this.currentPointers.push(t),this.startPointers.push(t),!0)}triggerPointerEnd(t,e){const i=this.currentPointers.findIndex((t=>t.id===e.id));i<0||(this.currentPointers.splice(i,1),this.startPointers.splice(i,1),this.endCallback(t,e,this.currentPointers.slice()))}onWindowBlur(){this.clear()}clear(){for(;this.currentPointers.length;){const t=this.currentPointers[this.currentPointers.length-1];this.currentPointers.splice(this.currentPointers.length-1,1),this.startPointers.splice(this.currentPointers.length-1,1),this.endCallback(new Event("touchend",{bubbles:!0,cancelable:!0,clientX:t.clientX,clientY:t.clientY}),t,this.currentPointers.slice())}}stop(){this.element.removeEventListener("mousedown",this.onPointerStart,r),this.element.removeEventListener("touchstart",this.onTouchStart,r),this.element.removeEventListener("touchmove",this.onMove,r),this.element.removeEventListener("touchend",this.onTouchEnd),this.element.removeEventListener("touchcancel",this.onTouchEnd),window.removeEventListener("mousemove",this.onMove),window.removeEventListener("mouseup",this.onPointerEnd),window.removeEventListener("blur",this.onWindowBlur)}}function c(t,e){return e?Math.sqrt(Math.pow(e.clientX-t.clientX,2)+Math.pow(e.clientY-t.clientY,2)):0}function h(t,e){return e?{clientX:(t.clientX+e.clientX)/2,clientY:(t.clientY+e.clientY)/2}:t}const d=t=>"object"==typeof t&&null!==t&&t.constructor===Object&&"[object Object]"===Object.prototype.toString.call(t),u=(t,...e)=>{const i=e.length;for(let n=0;n<i;n++){const i=e[n]||{};Object.entries(i).forEach((([e,i])=>{const n=Array.isArray(i)?[]:{};t[e]||Object.assign(t,{[e]:n}),d(i)?Object.assign(t[e],u(n,i)):Array.isArray(i)?Object.assign(t,{[e]:[...i]}):Object.assign(t,{[e]:i})}))}return t},f=function(t,e){return t.split(".").reduce(((t,e)=>"object"==typeof t?t[e]:void 0),e)};class p{constructor(t={}){Object.defineProperty(this,"options",{enumerable:!0,configurable:!0,writable:!0,value:t}),Object.defineProperty(this,"events",{enumerable:!0,configurable:!0,writable:!0,value:new Map}),this.setOptions(t);for(const t of Object.getOwnPropertyNames(Object.getPrototypeOf(this)))t.startsWith("on")&&"function"==typeof this[t]&&(this[t]=this[t].bind(this))}setOptions(t){this.options=t?u({},this.constructor.defaults,t):{};for(const[t,e]of Object.entries(this.option("on")||{}))this.on(t,e)}option(t,...e){let i=f(t,this.options);return i&&"function"==typeof i&&(i=i.call(this,this,...e)),i}optionFor(t,e,i,...n){let s=f(e,t);var o;"string"!=typeof(o=s)||isNaN(o)||isNaN(parseFloat(o))||(s=parseFloat(s)),"true"===s&&(s=!0),"false"===s&&(s=!1),s&&"function"==typeof s&&(s=s.call(this,this,t,...n));let a=f(e,this.options);return a&&"function"==typeof a?s=a.call(this,this,t,...n,s):void 0===s&&(s=a),void 0===s?i:s}cn(t){const e=this.options.classes;return e&&e[t]||""}localize(t,e=[]){t=String(t).replace(/\{\{(\w+).?(\w+)?\}\}/g,((t,e,i)=>{let n="";return i?n=this.option(`${e[0]+e.toLowerCase().substring(1)}.l10n.${i}`):e&&(n=this.option(`l10n.${e}`)),n||(n=t),n}));for(let i=0;i<e.length;i++)t=t.split(e[i][0]).join(e[i][1]);return t=t.replace(/\{\{(.*?)\}\}/g,((t,e)=>e))}on(t,e){let i=[];"string"==typeof t?i=t.split(" "):Array.isArray(t)&&(i=t),this.events||(this.events=new Map),i.forEach((t=>{let i=this.events.get(t);i||(this.events.set(t,[]),i=[]),i.includes(e)||i.push(e),this.events.set(t,i)}))}off(t,e){let i=[];"string"==typeof t?i=t.split(" "):Array.isArray(t)&&(i=t),i.forEach((t=>{const i=this.events.get(t);if(Array.isArray(i)){const t=i.indexOf(e);t>-1&&i.splice(t,1)}}))}emit(t,...e){[...this.events.get(t)||[]].forEach((t=>t(this,...e))),"*"!==t&&this.emit("*",t,...e)}}Object.defineProperty(p,"version",{enumerable:!0,configurable:!0,writable:!0,value:"5.0.28"}),Object.defineProperty(p,"defaults",{enumerable:!0,configurable:!0,writable:!0,value:{}});class g extends p{constructor(t={}){super(t),Object.defineProperty(this,"plugins",{enumerable:!0,configurable:!0,writable:!0,value:{}})}attachPlugins(t={}){const e=new Map;for(const[i,n]of Object.entries(t)){const t=this.option(i),s=this.plugins[i];s||!1===t?s&&!1===t&&(s.detach(),delete this.plugins[i]):e.set(i,new n(this,t||{}))}for(const[t,i]of e)this.plugins[t]=i,i.attach()}detachPlugins(t){t=t||Object.keys(this.plugins);for(const e of t){const t=this.plugins[e];t&&t.detach(),delete this.plugins[e]}return this.emit("detachPlugins"),this}}var m;!function(t){t[t.Init=0]="Init",t[t.Error=1]="Error",t[t.Ready=2]="Ready",t[t.Panning=3]="Panning",t[t.Mousemove=4]="Mousemove",t[t.Destroy=5]="Destroy"}(m||(m={}));const b=["a","b","c","d","e","f"],v={PANUP:"Move up",PANDOWN:"Move down",PANLEFT:"Move left",PANRIGHT:"Move right",ZOOMIN:"Zoom in",ZOOMOUT:"Zoom out",TOGGLEZOOM:"Toggle zoom level",TOGGLE1TO1:"Toggle zoom level",ITERATEZOOM:"Toggle zoom level",ROTATECCW:"Rotate counterclockwise",ROTATECW:"Rotate clockwise",FLIPX:"Flip horizontally",FLIPY:"Flip vertically",FITX:"Fit horizontally",FITY:"Fit vertically",RESET:"Reset",TOGGLEFS:"Toggle fullscreen"},y={content:null,width:"auto",height:"auto",panMode:"drag",touch:!0,dragMinThreshold:3,lockAxis:!1,mouseMoveFactor:1,mouseMoveFriction:.12,zoom:!0,pinchToZoom:!0,panOnlyZoomed:"auto",minScale:1,maxScale:2,friction:.25,dragFriction:.35,decelFriction:.05,click:"toggleZoom",dblClick:!1,wheel:"zoom",wheelLimit:7,spinner:!0,bounds:"auto",infinite:!1,rubberband:!0,bounce:!0,maxVelocity:75,transformParent:!1,classes:{content:"f-panzoom__content",isLoading:"is-loading",canZoomIn:"can-zoom_in",canZoomOut:"can-zoom_out",isDraggable:"is-draggable",isDragging:"is-dragging",inFullscreen:"in-fullscreen",htmlHasFullscreen:"with-panzoom-in-fullscreen"},l10n:v},w='<div class="f-spinner"><svg viewBox="0 0 50 50"><circle cx="25" cy="25" r="20"></circle><circle cx="25" cy="25" r="20"></circle></svg></div>',x=t=>t&&null!==t&&t instanceof Element&&"nodeType"in t,E=(t,e)=>{t&&s(e).forEach((e=>{t.classList.remove(e)}))},S=(t,e)=>{t&&s(e).forEach((e=>{t.classList.add(e)}))},P={a:1,b:0,c:0,d:1,e:0,f:0},C=1e5,T=1e4,M="mousemove",O="drag",A="content";let L=null,z=null;class R extends g{get fits(){return this.contentRect.width-this.contentRect.fitWidth<1&&this.contentRect.height-this.contentRect.fitHeight<1}get isTouchDevice(){return null===z&&(z=window.matchMedia("(hover: none)").matches),z}get isMobile(){return null===L&&(L=/iPhone|iPad|iPod|Android/i.test(navigator.userAgent)),L}get panMode(){return this.options.panMode!==M||this.isTouchDevice?O:M}get panOnlyZoomed(){const t=this.options.panOnlyZoomed;return"auto"===t?this.isTouchDevice:t}get isInfinite(){return this.option("infinite")}get angle(){return 180*Math.atan2(this.current.b,this.current.a)/Math.PI||0}get targetAngle(){return 180*Math.atan2(this.target.b,this.target.a)/Math.PI||0}get scale(){const{a:t,b:e}=this.current;return Math.sqrt(t*t+e*e)||1}get targetScale(){const{a:t,b:e}=this.target;return Math.sqrt(t*t+e*e)||1}get minScale(){return this.option("minScale")||1}get fullScale(){const{contentRect:t}=this;return t.fullWidth/t.fitWidth||1}get maxScale(){return this.fullScale*(this.option("maxScale")||1)||1}get coverScale(){const{containerRect:t,contentRect:e}=this,i=Math.max(t.height/e.fitHeight,t.width/e.fitWidth)||1;return Math.min(this.fullScale,i)}get isScaling(){return Math.abs(this.targetScale-this.scale)>1e-5&&!this.isResting}get isContentLoading(){const t=this.content;return!!(t&&t instanceof HTMLImageElement)&&!t.complete}get isResting(){if(this.isBouncingX||this.isBouncingY)return!1;for(const t of b){const e="e"==t||"f"===t?1e-4:1e-5;if(Math.abs(this.target[t]-this.current[t])>e)return!1}return!(!this.ignoreBounds&&!this.checkBounds().inBounds)}constructor(t,e={},i={}){var s;if(super(e),Object.defineProperty(this,"pointerTracker",{enumerable:!0,configurable:!0,writable:!0,value:null}),Object.defineProperty(this,"resizeObserver",{enumerable:!0,configurable:!0,writable:!0,value:null}),Object.defineProperty(this,"updateTimer",{enumerable:!0,configurable:!0,writable:!0,value:null}),Object.defineProperty(this,"clickTimer",{enumerable:!0,configurable:!0,writable:!0,value:null}),Object.defineProperty(this,"rAF",{enumerable:!0,configurable:!0,writable:!0,value:null}),Object.defineProperty(this,"isTicking",{enumerable:!0,configurable:!0,writable:!0,value:!1}),Object.defineProperty(this,"ignoreBounds",{enumerable:!0,configurable:!0,writable:!0,value:!1}),Object.defineProperty(this,"isBouncingX",{enumerable:!0,configurable:!0,writable:!0,value:!1}),Object.defineProperty(this,"isBouncingY",{enumerable:!0,configurable:!0,writable:!0,value:!1}),Object.defineProperty(this,"clicks",{enumerable:!0,configurable:!0,writable:!0,value:0}),Object.defineProperty(this,"trackingPoints",{enumerable:!0,configurable:!0,writable:!0,value:[]}),Object.defineProperty(this,"pwt",{enumerable:!0,configurable:!0,writable:!0,value:0}),Object.defineProperty(this,"cwd",{enumerable:!0,configurable:!0,writable:!0,value:0}),Object.defineProperty(this,"pmme",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"friction",{enumerable:!0,configurable:!0,writable:!0,value:0}),Object.defineProperty(this,"state",{enumerable:!0,configurable:!0,writable:!0,value:m.Init}),Object.defineProperty(this,"isDragging",{enumerable:!0,configurable:!0,writable:!0,value:!1}),Object.defineProperty(this,"container",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"content",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"spinner",{enumerable:!0,configurable:!0,writable:!0,value:null}),Object.defineProperty(this,"containerRect",{enumerable:!0,configurable:!0,writable:!0,value:{width:0,height:0,innerWidth:0,innerHeight:0}}),Object.defineProperty(this,"contentRect",{enumerable:!0,configurable:!0,writable:!0,value:{top:0,right:0,bottom:0,left:0,fullWidth:0,fullHeight:0,fitWidth:0,fitHeight:0,width:0,height:0}}),Object.defineProperty(this,"dragStart",{enumerable:!0,configurable:!0,writable:!0,value:{x:0,y:0,top:0,left:0,time:0}}),Object.defineProperty(this,"dragOffset",{enumerable:!0,configurable:!0,writable:!0,value:{x:0,y:0,time:0}}),Object.defineProperty(this,"current",{enumerable:!0,configurable:!0,writable:!0,value:Object.assign({},P)}),Object.defineProperty(this,"target",{enumerable:!0,configurable:!0,writable:!0,value:Object.assign({},P)}),Object.defineProperty(this,"velocity",{enumerable:!0,configurable:!0,writable:!0,value:{a:0,b:0,c:0,d:0,e:0,f:0}}),Object.defineProperty(this,"lockedAxis",{enumerable:!0,configurable:!0,writable:!0,value:!1}),!t)throw new Error("Container Element Not Found");this.container=t,this.initContent(),this.attachPlugins(Object.assign(Object.assign({},R.Plugins),i)),this.emit("attachPlugins"),this.emit("init");const o=this.content;if(o.addEventListener("load",this.onLoad),o.addEventListener("error",this.onError),this.isContentLoading){if(this.option("spinner")){t.classList.add(this.cn("isLoading"));const e=n(w);!t.contains(o)||o.parentElement instanceof HTMLPictureElement?this.spinner=t.appendChild(e):this.spinner=(null===(s=o.parentElement)||void 0===s?void 0:s.insertBefore(e,o))||null}this.emit("beforeLoad")}else queueMicrotask((()=>{this.enable()}))}initContent(){const{container:t}=this,e=this.cn(A);let i=this.option(A)||t.querySelector(`.${e}`);if(i||(i=t.querySelector("img,picture")||t.firstElementChild,i&&S(i,e)),i instanceof HTMLPictureElement&&(i=i.querySelector("img")),!i)throw new Error("No content found");this.content=i}onLoad(){const{spinner:t,container:e,state:i}=this;t&&(t.remove(),this.spinner=null),this.option("spinner")&&e.classList.remove(this.cn("isLoading")),this.emit("afterLoad"),i===m.Init?this.enable():this.updateMetrics()}onError(){this.state!==m.Destroy&&(this.spinner&&(this.spinner.remove(),this.spinner=null),this.stop(),this.detachEvents(),this.state=m.Error,this.emit("error"))}attachObserver(){var t;const e=()=>{const{container:t,containerRect:e}=this;return Math.abs(e.width-t.getBoundingClientRect().width)>.1||Math.abs(e.height-t.getBoundingClientRect().height)>.1};this.resizeObserver||void 0===window.ResizeObserver||(this.resizeObserver=new ResizeObserver((()=>{this.updateTimer||(e()?(this.onResize(),this.isMobile&&(this.updateTimer=setTimeout((()=>{e()&&this.onResize(),this.updateTimer=null}),500))):this.updateTimer&&(clearTimeout(this.updateTimer),this.updateTimer=null))}))),null===(t=this.resizeObserver)||void 0===t||t.observe(this.container)}detachObserver(){var t;null===(t=this.resizeObserver)||void 0===t||t.disconnect()}attachEvents(){const{container:t}=this;t.addEventListener("click",this.onClick,{passive:!1,capture:!1}),t.addEventListener("wheel",this.onWheel,{passive:!1}),this.pointerTracker=new l(t,{start:this.onPointerDown,move:this.onPointerMove,end:this.onPointerUp}),document.addEventListener(M,this.onMouseMove)}detachEvents(){var t;const{container:e}=this;e.removeEventListener("click",this.onClick,{passive:!1,capture:!1}),e.removeEventListener("wheel",this.onWheel,{passive:!1}),null===(t=this.pointerTracker)||void 0===t||t.stop(),this.pointerTracker=null,document.removeEventListener(M,this.onMouseMove),document.removeEventListener("keydown",this.onKeydown,!0),this.clickTimer&&(clearTimeout(this.clickTimer),this.clickTimer=null),this.updateTimer&&(clearTimeout(this.updateTimer),this.updateTimer=null)}animate(){this.setTargetForce();const t=this.friction,e=this.option("maxVelocity");for(const i of b)t?(this.velocity[i]*=1-t,e&&!this.isScaling&&(this.velocity[i]=Math.max(Math.min(this.velocity[i],e),-1*e)),this.current[i]+=this.velocity[i]):this.current[i]=this.target[i];this.setTransform(),this.setEdgeForce(),!this.isResting||this.isDragging?this.rAF=requestAnimationFrame((()=>this.animate())):this.stop("current")}setTargetForce(){for(const t of b)"e"===t&&this.isBouncingX||"f"===t&&this.isBouncingY||(this.velocity[t]=(1/(1-this.friction)-1)*(this.target[t]-this.current[t]))}checkBounds(t=0,e=0){const{current:i}=this,n=i.e+t,s=i.f+e,o=this.getBounds(),{x:a,y:r}=o,l=a.min,c=a.max,h=r.min,d=r.max;let u=0,f=0;return l!==1/0&&n<l?u=l-n:c!==1/0&&n>c&&(u=c-n),h!==1/0&&s<h?f=h-s:d!==1/0&&s>d&&(f=d-s),Math.abs(u)<1e-4&&(u=0),Math.abs(f)<1e-4&&(f=0),Object.assign(Object.assign({},o),{xDiff:u,yDiff:f,inBounds:!u&&!f})}clampTargetBounds(){const{target:t}=this,{x:e,y:i}=this.getBounds();e.min!==1/0&&(t.e=Math.max(t.e,e.min)),e.max!==1/0&&(t.e=Math.min(t.e,e.max)),i.min!==1/0&&(t.f=Math.max(t.f,i.min)),i.max!==1/0&&(t.f=Math.min(t.f,i.max))}calculateContentDim(t=this.current){const{content:e,contentRect:i}=this,{fitWidth:n,fitHeight:s,fullWidth:o,fullHeight:a}=i;let r=o,l=a;if(this.option("zoom")||0!==this.angle){const i=!(e instanceof HTMLImageElement)&&("none"===window.getComputedStyle(e).maxWidth||"none"===window.getComputedStyle(e).maxHeight),c=i?o:n,h=i?a:s,d=this.getMatrix(t),u=new DOMPoint(0,0).matrixTransform(d),f=new DOMPoint(0+c,0).matrixTransform(d),p=new DOMPoint(0+c,0+h).matrixTransform(d),g=new DOMPoint(0,0+h).matrixTransform(d),m=Math.abs(p.x-u.x),b=Math.abs(p.y-u.y),v=Math.abs(g.x-f.x),y=Math.abs(g.y-f.y);r=Math.max(m,v),l=Math.max(b,y)}return{contentWidth:r,contentHeight:l}}setEdgeForce(){if(this.ignoreBounds||this.isDragging||this.panMode===M||this.targetScale<this.scale)return this.isBouncingX=!1,void(this.isBouncingY=!1);const{target:t}=this,{x:e,y:i,xDiff:n,yDiff:s}=this.checkBounds();const o=this.option("maxVelocity");let a=this.velocity.e,r=this.velocity.f;0!==n?(this.isBouncingX=!0,n*a<=0?a+=.14*n:(a=.14*n,e.min!==1/0&&(this.target.e=Math.max(t.e,e.min)),e.max!==1/0&&(this.target.e=Math.min(t.e,e.max))),o&&(a=Math.max(Math.min(a,o),-1*o))):this.isBouncingX=!1,0!==s?(this.isBouncingY=!0,s*r<=0?r+=.14*s:(r=.14*s,i.min!==1/0&&(this.target.f=Math.max(t.f,i.min)),i.max!==1/0&&(this.target.f=Math.min(t.f,i.max))),o&&(r=Math.max(Math.min(r,o),-1*o))):this.isBouncingY=!1,this.isBouncingX&&(this.velocity.e=a),this.isBouncingY&&(this.velocity.f=r)}enable(){const{content:t}=this,e=new DOMMatrixReadOnly(window.getComputedStyle(t).transform);for(const t of b)this.current[t]=this.target[t]=e[t];this.updateMetrics(),this.attachObserver(),this.attachEvents(),this.state=m.Ready,this.emit("ready")}onClick(t){var e;"click"===t.type&&0===t.detail&&(this.dragOffset.x=0,this.dragOffset.y=0),this.isDragging&&(null===(e=this.pointerTracker)||void 0===e||e.clear(),this.trackingPoints=[],this.startDecelAnim());const i=t.target;if(!i||t.defaultPrevented)return;if(i.hasAttribute("disabled"))return t.preventDefault(),void t.stopPropagation();if((()=>{const t=window.getSelection();return t&&"Range"===t.type})()&&!i.closest("button"))return;const n=i.closest("[data-panzoom-action]"),s=i.closest("[data-panzoom-change]"),o=n||s,a=o&&x(o)?o.dataset:null;if(a){const e=a.panzoomChange,i=a.panzoomAction;if((e||i)&&t.preventDefault(),e){let t={};try{t=JSON.parse(e)}catch(t){console&&console.warn("The given data was not valid JSON")}return void this.applyChange(t)}if(i)return void(this[i]&&this[i]())}if(Math.abs(this.dragOffset.x)>3||Math.abs(this.dragOffset.y)>3)return t.preventDefault(),void t.stopPropagation();if(i.closest("[data-fancybox]"))return;const r=this.content.getBoundingClientRect(),l=this.dragStart;if(l.time&&!this.canZoomOut()&&(Math.abs(r.x-l.x)>2||Math.abs(r.y-l.y)>2))return;this.dragStart.time=0;const c=e=>{this.option("zoom",t)&&e&&"string"==typeof e&&/(iterateZoom)|(toggle(Zoom|Full|Cover|Max)|(zoomTo(Fit|Cover|Max)))/.test(e)&&"function"==typeof this[e]&&(t.preventDefault(),this[e]({event:t}))},h=this.option("click",t),d=this.option("dblClick",t);d?(this.clicks++,1==this.clicks&&(this.clickTimer=setTimeout((()=>{1===this.clicks?(this.emit("click",t),!t.defaultPrevented&&h&&c(h)):(this.emit("dblClick",t),t.defaultPrevented||c(d)),this.clicks=0,this.clickTimer=null}),350))):(this.emit("click",t),!t.defaultPrevented&&h&&c(h))}addTrackingPoint(t){const e=this.trackingPoints.filter((t=>t.time>Date.now()-100));e.push(t),this.trackingPoints=e}onPointerDown(t,e,i){var n;if(!1===this.option("touch",t))return!1;this.pwt=0,this.dragOffset={x:0,y:0,time:0},this.trackingPoints=[];const s=this.content.getBoundingClientRect();if(this.dragStart={x:s.x,y:s.y,top:s.top,left:s.left,time:Date.now()},this.clickTimer)return!1;if(this.panMode===M&&this.targetScale>1)return t.preventDefault(),t.stopPropagation(),!1;const o=t.composedPath()[0];if(!i.length){if(["TEXTAREA","OPTION","INPUT","SELECT","VIDEO","IFRAME"].includes(o.nodeName)||o.closest("[contenteditable],[data-selectable],[data-draggable],[data-clickable],[data-panzoom-change],[data-panzoom-action]"))return!1;null===(n=window.getSelection())||void 0===n||n.removeAllRanges()}if("mousedown"===t.type)["A","BUTTON"].includes(o.nodeName)||t.preventDefault();else if(Math.abs(this.velocity.a)>.3)return!1;return this.target.e=this.current.e,this.target.f=this.current.f,this.stop(),this.isDragging||(this.isDragging=!0,this.addTrackingPoint(e),this.emit("touchStart",t)),!0}onPointerMove(e,n,s){if(!1===this.option("touch",e))return;if(!this.isDragging)return;if(n.length<2&&this.panOnlyZoomed&&t(this.targetScale)<=t(this.minScale))return;if(this.emit("touchMove",e),e.defaultPrevented)return;this.addTrackingPoint(n[0]);const{content:o}=this,a=h(s[0],s[1]),r=h(n[0],n[1]);let l=0,d=0;if(n.length>1){const t=o.getBoundingClientRect();l=a.clientX-t.left-.5*t.width,d=a.clientY-t.top-.5*t.height}const u=c(s[0],s[1]),f=c(n[0],n[1]);let p=u?f/u:1,g=r.clientX-a.clientX,m=r.clientY-a.clientY;this.dragOffset.x+=g,this.dragOffset.y+=m,this.dragOffset.time=Date.now()-this.dragStart.time;let b=t(this.targetScale)===t(this.minScale)&&this.option("lockAxis");if(b&&!this.lockedAxis)if("xy"===b||"y"===b||"touchmove"===e.type){if(Math.abs(this.dragOffset.x)<6&&Math.abs(this.dragOffset.y)<6)return void e.preventDefault();const t=Math.abs(180*Math.atan2(this.dragOffset.y,this.dragOffset.x)/Math.PI);this.lockedAxis=t>45&&t<135?"y":"x",this.dragOffset.x=0,this.dragOffset.y=0,g=0,m=0}else this.lockedAxis=b;if(i(e.target,this.content)&&(b="x",this.dragOffset.y=0),b&&"xy"!==b&&this.lockedAxis!==b&&t(this.targetScale)===t(this.minScale))return;e.cancelable&&e.preventDefault(),this.container.classList.add(this.cn("isDragging"));const v=this.checkBounds(g,m);this.option("rubberband")?("x"!==this.isInfinite&&(v.xDiff>0&&g<0||v.xDiff<0&&g>0)&&(g*=Math.max(0,.5-Math.abs(.75/this.contentRect.fitWidth*v.xDiff))),"y"!==this.isInfinite&&(v.yDiff>0&&m<0||v.yDiff<0&&m>0)&&(m*=Math.max(0,.5-Math.abs(.75/this.contentRect.fitHeight*v.yDiff)))):(v.xDiff&&(g=0),v.yDiff&&(m=0));const y=this.targetScale,w=this.minScale,x=this.maxScale;y<.5*w&&(p=Math.max(p,w)),y>1.5*x&&(p=Math.min(p,x)),"y"===this.lockedAxis&&t(y)===t(w)&&(g=0),"x"===this.lockedAxis&&t(y)===t(w)&&(m=0),this.applyChange({originX:l,originY:d,panX:g,panY:m,scale:p,friction:this.option("dragFriction"),ignoreBounds:!0})}onPointerUp(t,e,n){if(n.length)return this.dragOffset.x=0,this.dragOffset.y=0,void(this.trackingPoints=[]);this.container.classList.remove(this.cn("isDragging")),this.isDragging&&(this.addTrackingPoint(e),this.panOnlyZoomed&&this.contentRect.width-this.contentRect.fitWidth<1&&this.contentRect.height-this.contentRect.fitHeight<1&&(this.trackingPoints=[]),i(t.target,this.content)&&"y"===this.lockedAxis&&(this.trackingPoints=[]),this.emit("touchEnd",t),this.isDragging=!1,this.lockedAxis=!1,this.state!==m.Destroy&&(t.defaultPrevented||this.startDecelAnim()))}startDecelAnim(){var e;const i=this.isScaling;this.rAF&&(cancelAnimationFrame(this.rAF),this.rAF=null),this.isBouncingX=!1,this.isBouncingY=!1;for(const t of b)this.velocity[t]=0;this.target.e=this.current.e,this.target.f=this.current.f,E(this.container,"is-scaling"),E(this.container,"is-animating"),this.isTicking=!1;const{trackingPoints:n}=this,s=n[0],o=n[n.length-1];let a=0,r=0,l=0;o&&s&&(a=o.clientX-s.clientX,r=o.clientY-s.clientY,l=o.time-s.time);const c=(null===(e=window.visualViewport)||void 0===e?void 0:e.scale)||1;1!==c&&(a*=c,r*=c);let h=0,d=0,u=0,f=0,p=this.option("decelFriction");const g=this.targetScale;if(l>0){u=Math.abs(a)>3?a/(l/30):0,f=Math.abs(r)>3?r/(l/30):0;const t=this.option("maxVelocity");t&&(u=Math.max(Math.min(u,t),-1*t),f=Math.max(Math.min(f,t),-1*t))}u&&(h=u/(1/(1-p)-1)),f&&(d=f/(1/(1-p)-1)),("y"===this.option("lockAxis")||"xy"===this.option("lockAxis")&&"y"===this.lockedAxis&&t(g)===this.minScale)&&(h=u=0),("x"===this.option("lockAxis")||"xy"===this.option("lockAxis")&&"x"===this.lockedAxis&&t(g)===this.minScale)&&(d=f=0);const m=this.dragOffset.x,v=this.dragOffset.y,y=this.option("dragMinThreshold")||0;Math.abs(m)<y&&Math.abs(v)<y&&(h=d=0,u=f=0),(this.option("zoom")&&(g<this.minScale-1e-5||g>this.maxScale+1e-5)||i&&!h&&!d)&&(p=.35),this.applyChange({panX:h,panY:d,friction:p}),this.emit("decel",u,f,m,v)}onWheel(t){var e=[-t.deltaX||0,-t.deltaY||0,-t.detail||0].reduce((function(t,e){return Math.abs(e)>Math.abs(t)?e:t}));const i=Math.max(-1,Math.min(1,e));if(this.emit("wheel",t,i),this.panMode===M)return;if(t.defaultPrevented)return;const n=this.option("wheel");"pan"===n?(t.preventDefault(),this.panOnlyZoomed&&!this.canZoomOut()||this.applyChange({panX:2*-t.deltaX,panY:2*-t.deltaY,bounce:!1})):"zoom"===n&&!1!==this.option("zoom")&&this.zoomWithWheel(t)}onMouseMove(t){this.panWithMouse(t)}onKeydown(t){"Escape"===t.key&&this.toggleFS()}onResize(){this.updateMetrics(),this.checkBounds().inBounds||this.requestTick()}setTransform(){this.emit("beforeTransform");const{current:e,target:i,content:n,contentRect:s}=this,o=Object.assign({},P);for(const n of b){const s="e"==n||"f"===n?T:C;o[n]=t(e[n],s),Math.abs(i[n]-e[n])<("e"==n||"f"===n?.51:.001)&&(e[n]=i[n])}let{a:a,b:r,c:l,d:c,e:h,f:d}=o,u=`matrix(${a}, ${r}, ${l}, ${c}, ${h}, ${d})`,f=n.parentElement instanceof HTMLPictureElement?n.parentElement:n;if(this.option("transformParent")&&(f=f.parentElement||f),f.style.transform===u)return;f.style.transform=u;const{contentWidth:p,contentHeight:g}=this.calculateContentDim();s.width=p,s.height=g,this.emit("afterTransform")}updateMetrics(e=!1){var i;if(!this||this.state===m.Destroy)return;if(this.isContentLoading)return;const n=Math.max(1,(null===(i=window.visualViewport)||void 0===i?void 0:i.scale)||1),{container:s,content:o}=this,a=o instanceof HTMLImageElement,r=s.getBoundingClientRect(),l=getComputedStyle(this.container);let c=r.width*n,h=r.height*n;const d=parseFloat(l.paddingTop)+parseFloat(l.paddingBottom),u=c-(parseFloat(l.paddingLeft)+parseFloat(l.paddingRight)),f=h-d;this.containerRect={width:c,height:h,innerWidth:u,innerHeight:f};let p=this.option("width")||"auto",g=this.option("height")||"auto";"auto"===p&&(p=parseFloat(o.dataset.width||"")||(t=>{let e=0;return e=t instanceof HTMLImageElement?t.naturalWidth:t instanceof SVGElement?t.width.baseVal.value:Math.max(t.offsetWidth,t.scrollWidth),e||0})(o)),"auto"===g&&(g=parseFloat(o.dataset.height||"")||(t=>{let e=0;return e=t instanceof HTMLImageElement?t.naturalHeight:t instanceof SVGElement?t.height.baseVal.value:Math.max(t.offsetHeight,t.scrollHeight),e||0})(o));let b=o.parentElement instanceof HTMLPictureElement?o.parentElement:o;this.option("transformParent")&&(b=b.parentElement||b);const v=b.getAttribute("style")||"";b.style.setProperty("transform","none","important"),a&&(b.style.width="",b.style.height=""),b.offsetHeight;const y=o.getBoundingClientRect();let w=y.width*n,x=y.height*n,E=0,S=0;a&&(Math.abs(p-w)>1||Math.abs(g-x)>1)&&({width:w,height:x,top:E,left:S}=((t,e,i,n)=>{const s=i/n;return s>t/e?(i=t,n=t/s):(i=e*s,n=e),{width:i,height:n,top:.5*(e-n),left:.5*(t-i)}})(w,x,p,g)),this.contentRect=Object.assign(Object.assign({},this.contentRect),{top:y.top-r.top+E,bottom:r.bottom-y.bottom+E,left:y.left-r.left+S,right:r.right-y.right+S,fitWidth:w,fitHeight:x,width:w,height:x,fullWidth:p,fullHeight:g}),b.style.cssText=v,a&&(b.style.width=`${w}px`,b.style.height=`${x}px`),this.setTransform(),!0!==e&&this.emit("refresh"),this.ignoreBounds||(t(this.targetScale)<t(this.minScale)?this.zoomTo(this.minScale,{friction:0}):this.targetScale>this.maxScale?this.zoomTo(this.maxScale,{friction:0}):this.state===m.Init||this.checkBounds().inBounds||this.requestTick()),this.updateControls()}calculateBounds(){const{contentWidth:e,contentHeight:i}=this.calculateContentDim(this.target),{targetScale:n,lockedAxis:s}=this,{fitWidth:o,fitHeight:a}=this.contentRect;let r=0,l=0,c=0,h=0;const d=this.option("infinite");if(!0===d||s&&d===s)r=-1/0,c=1/0,l=-1/0,h=1/0;else{let{containerRect:s,contentRect:d}=this,u=t(o*n,T),f=t(a*n,T),{innerWidth:p,innerHeight:g}=s;if(s.width===u&&(p=s.width),s.width===f&&(g=s.height),e>p){c=.5*(e-p),r=-1*c;let t=.5*(d.right-d.left);r+=t,c+=t}if(o>p&&e<p&&(r-=.5*(o-p),c-=.5*(o-p)),i>g){h=.5*(i-g),l=-1*h;let t=.5*(d.bottom-d.top);l+=t,h+=t}a>g&&i<g&&(r-=.5*(a-g),c-=.5*(a-g))}return{x:{min:r,max:c},y:{min:l,max:h}}}getBounds(){const t=this.option("bounds");return"auto"!==t?t:this.calculateBounds()}updateControls(){const e=this,i=e.container,{panMode:n,contentRect:s,fullScale:a,targetScale:r,coverScale:l,maxScale:c,minScale:h}=e;let d={toggleMax:r-h<.5*(c-h)?c:h,toggleCover:r-h<.5*(l-h)?l:h,toggleZoom:r-h<.5*(a-h)?a:h}[e.option("click")||""]||h,u=e.canZoomIn(),f=e.canZoomOut(),p=n===O&&!!this.option("touch"),g=f&&p;if(p&&(t(r)<t(h)&&!this.panOnlyZoomed&&(g=!0),(t(s.width,1)>t(s.fitWidth,1)||t(s.height,1)>t(s.fitHeight,1))&&(g=!0)),t(s.width*r,1)<t(s.fitWidth,1)&&(g=!1),n===M&&(g=!1),o(i,this.cn("isDraggable"),g),!this.option("zoom"))return;let m=u&&t(d)>t(r),b=!m&&!g&&f&&t(d)<t(r);o(i,this.cn("canZoomIn"),m),o(i,this.cn("canZoomOut"),b);for(const t of i.querySelectorAll('[data-panzoom-action="zoomIn"]'))u?(t.removeAttribute("disabled"),t.removeAttribute("tabindex")):(t.setAttribute("disabled",""),t.setAttribute("tabindex","-1"));for(const t of i.querySelectorAll('[data-panzoom-action="zoomOut"]'))f?(t.removeAttribute("disabled"),t.removeAttribute("tabindex")):(t.setAttribute("disabled",""),t.setAttribute("tabindex","-1"));for(const t of i.querySelectorAll('[data-panzoom-action="toggleZoom"],[data-panzoom-action="iterateZoom"]')){u||f?(t.removeAttribute("disabled"),t.removeAttribute("tabindex")):(t.setAttribute("disabled",""),t.setAttribute("tabindex","-1"));const e=t.querySelector("g");e&&(e.style.display=u?"":"none")}}panTo({x:t=this.target.e,y:e=this.target.f,scale:i=this.targetScale,friction:n=this.option("friction"),angle:s=0,originX:o=0,originY:a=0,flipX:r=!1,flipY:l=!1,ignoreBounds:c=!1}){this.state!==m.Destroy&&this.applyChange({panX:t-this.target.e,panY:e-this.target.f,scale:i/this.targetScale,angle:s,originX:o,originY:a,friction:n,flipX:r,flipY:l,ignoreBounds:c})}applyChange({panX:e=0,panY:i=0,scale:n=1,angle:s=0,originX:o=-this.current.e,originY:a=-this.current.f,friction:r=this.option("friction"),flipX:l=!1,flipY:c=!1,ignoreBounds:h=!1,bounce:d=this.option("bounce")}){const u=this.state;if(u===m.Destroy)return;this.rAF&&(cancelAnimationFrame(this.rAF),this.rAF=null),this.friction=r||0,this.ignoreBounds=h;const{current:f}=this,p=f.e,g=f.f,v=this.getMatrix(this.target);let y=(new DOMMatrix).translate(p,g).translate(o,a).translate(e,i);if(this.option("zoom")){if(!h){const t=this.targetScale,e=this.minScale,i=this.maxScale;t*n<e&&(n=e/t),t*n>i&&(n=i/t)}y=y.scale(n)}y=y.translate(-o,-a).translate(-p,-g).multiply(v),s&&(y=y.rotate(s)),l&&(y=y.scale(-1,1)),c&&(y=y.scale(1,-1));for(const e of b)"e"!==e&&"f"!==e&&(y[e]>this.minScale+1e-5||y[e]<this.minScale-1e-5)?this.target[e]=y[e]:this.target[e]=t(y[e],T);(this.targetScale<this.scale||Math.abs(n-1)>.1||this.panMode===M||!1===d)&&!h&&this.clampTargetBounds(),u===m.Init?this.animate():this.isResting||(this.state=m.Panning,this.requestTick())}stop(t=!1){if(this.state===m.Init||this.state===m.Destroy)return;const e=this.isTicking;this.rAF&&(cancelAnimationFrame(this.rAF),this.rAF=null),this.isBouncingX=!1,this.isBouncingY=!1;for(const e of b)this.velocity[e]=0,"current"===t?this.current[e]=this.target[e]:"target"===t&&(this.target[e]=this.current[e]);this.setTransform(),E(this.container,"is-scaling"),E(this.container,"is-animating"),this.isTicking=!1,this.state=m.Ready,e&&(this.emit("endAnimation"),this.updateControls())}requestTick(){this.isTicking||(this.emit("startAnimation"),this.updateControls(),S(this.container,"is-animating"),this.isScaling&&S(this.container,"is-scaling")),this.isTicking=!0,this.rAF||(this.rAF=requestAnimationFrame((()=>this.animate())))}panWithMouse(e,i=this.option("mouseMoveFriction")){if(this.pmme=e,this.panMode!==M||!e)return;if(t(this.targetScale)<=t(this.minScale))return;this.emit("mouseMove",e);const{container:n,containerRect:s,contentRect:o}=this,a=s.width,r=s.height,l=n.getBoundingClientRect(),c=(e.clientX||0)-l.left,h=(e.clientY||0)-l.top;let{contentWidth:d,contentHeight:u}=this.calculateContentDim(this.target);const f=this.option("mouseMoveFactor");f>1&&(d!==a&&(d*=f),u!==r&&(u*=f));let p=.5*(d-a)-c/a*100/100*(d-a);p+=.5*(o.right-o.left);let g=.5*(u-r)-h/r*100/100*(u-r);g+=.5*(o.bottom-o.top),this.applyChange({panX:p-this.target.e,panY:g-this.target.f,friction:i})}zoomWithWheel(e){if(this.state===m.Destroy||this.state===m.Init)return;const i=Date.now();if(i-this.pwt<45)return void e.preventDefault();this.pwt=i;var n=[-e.deltaX||0,-e.deltaY||0,-e.detail||0].reduce((function(t,e){return Math.abs(e)>Math.abs(t)?e:t}));const s=Math.max(-1,Math.min(1,n)),{targetScale:o,maxScale:a,minScale:r}=this;let l=o*(100+45*s)/100;t(l)<t(r)&&t(o)<=t(r)?(this.cwd+=Math.abs(s),l=r):t(l)>t(a)&&t(o)>=t(a)?(this.cwd+=Math.abs(s),l=a):(this.cwd=0,l=Math.max(Math.min(l,a),r)),this.cwd>this.option("wheelLimit")||(e.preventDefault(),t(l)!==t(o)&&this.zoomTo(l,{event:e}))}canZoomIn(){return this.option("zoom")&&(t(this.contentRect.width,1)<t(this.contentRect.fitWidth,1)||t(this.targetScale)<t(this.maxScale))}canZoomOut(){return this.option("zoom")&&t(this.targetScale)>t(this.minScale)}zoomIn(t=1.25,e){this.zoomTo(this.targetScale*t,e)}zoomOut(t=.8,e){this.zoomTo(this.targetScale*t,e)}zoomToFit(t){this.zoomTo("fit",t)}zoomToCover(t){this.zoomTo("cover",t)}zoomToFull(t){this.zoomTo("full",t)}zoomToMax(t){this.zoomTo("max",t)}toggleZoom(t){this.zoomTo(this.targetScale-this.minScale<.5*(this.fullScale-this.minScale)?"full":"fit",t)}toggleMax(t){this.zoomTo(this.targetScale-this.minScale<.5*(this.maxScale-this.minScale)?"max":"fit",t)}toggleCover(t){this.zoomTo(this.targetScale-this.minScale<.5*(this.coverScale-this.minScale)?"cover":"fit",t)}iterateZoom(t){this.zoomTo("next",t)}zoomTo(t=1,{friction:e="auto",originX:i="auto",originY:n="auto",event:s}={}){if(this.isContentLoading||this.state===m.Destroy)return;const{targetScale:o}=this;this.stop();let a=1;if(this.panMode===M&&(s=this.pmme||s),s||"auto"===i||"auto"===n){const t=this.content.getBoundingClientRect(),e=this.container.getBoundingClientRect(),o=s?s.clientX:e.left+.5*e.width,a=s?s.clientY:e.top+.5*e.height;i=o-t.left-.5*t.width,n=a-t.top-.5*t.height}const r=this.fullScale,l=this.maxScale,c=this.coverScale;if("number"==typeof t)a=t/o||1;else if("full"===t)a=r/o||1;else if("cover"===t)a=c/o||1;else if("max"===t)a=l/o||1;else if("fit"===t)a=1/o||1;else if("next"===t){let t=[1,r,l].sort(((t,e)=>t-e)),e=t.findIndex((t=>t>o+1e-5));a=t[e]/o||1/o}e="auto"===e?a>1?.15:.25:e,this.applyChange({scale:a,originX:i,originY:n,friction:e}),s&&this.panMode===M&&this.panWithMouse(s,e)}rotateCCW(){this.applyChange({angle:-90})}rotateCW(){this.applyChange({angle:90})}flipX(){this.applyChange({flipX:!0})}flipY(){this.applyChange({flipY:!0})}fitX(){this.stop("target");const{containerRect:t,contentRect:e,target:i}=this;this.applyChange({panX:.5*t.width-(e.left+.5*e.fitWidth)-i.e,panY:.5*t.height-(e.top+.5*e.fitHeight)-i.f,scale:t.width/e.fitWidth/this.targetScale,originX:0,originY:0,ignoreBounds:!0})}fitY(){this.stop("target");const{containerRect:t,contentRect:e,target:i}=this;this.applyChange({panX:.5*t.width-(e.left+.5*e.fitWidth)-i.e,panY:.5*t.innerHeight-(e.top+.5*e.fitHeight)-i.f,scale:t.height/e.fitHeight/this.targetScale,originX:0,originY:0,ignoreBounds:!0})}toggleFS(){const{container:t}=this,e=this.cn("inFullscreen"),i=this.cn("htmlHasFullscreen");t.classList.toggle(e);const n=t.classList.contains(e);n?(document.documentElement.classList.add(i),document.addEventListener("keydown",this.onKeydown,!0)):(document.documentElement.classList.remove(i),document.removeEventListener("keydown",this.onKeydown,!0)),this.updateMetrics(),this.emit(n?"enterFS":"exitFS")}getMatrix(t=this.current){const{a:e,b:i,c:n,d:s,e:o,f:a}=t;return new DOMMatrix([e,i,n,s,o,a])}reset(t){if(this.state!==m.Init&&this.state!==m.Destroy){this.stop("current");for(const t of b)this.target[t]=P[t];this.target.a=this.minScale,this.target.d=this.minScale,this.clampTargetBounds(),this.isResting||(this.friction=void 0===t?this.option("friction"):t,this.state=m.Panning,this.requestTick())}}destroy(){this.stop(),this.state=m.Destroy,this.detachEvents(),this.detachObserver();const{container:t,content:e}=this,i=this.option("classes")||{};for(const e of Object.values(i))t.classList.remove(e+"");e&&(e.removeEventListener("load",this.onLoad),e.removeEventListener("error",this.onError)),this.detachPlugins()}}Object.defineProperty(R,"defaults",{enumerable:!0,configurable:!0,writable:!0,value:y}),Object.defineProperty(R,"Plugins",{enumerable:!0,configurable:!0,writable:!0,value:{}});const k=function(t,e){let i=!0;return(...n)=>{i&&(i=!1,t(...n),setTimeout((()=>{i=!0}),e))}},I=(t,e)=>{let i=[];return t.childNodes.forEach((t=>{t.nodeType!==Node.ELEMENT_NODE||e&&!t.matches(e)||i.push(t)})),i},D={viewport:null,track:null,enabled:!0,slides:[],axis:"x",transition:"fade",preload:1,slidesPerPage:"auto",initialPage:0,friction:.12,Panzoom:{decelFriction:.12},center:!0,infinite:!0,fill:!0,dragFree:!1,adaptiveHeight:!1,direction:"ltr",classes:{container:"f-carousel",viewport:"f-carousel__viewport",track:"f-carousel__track",slide:"f-carousel__slide",isLTR:"is-ltr",isRTL:"is-rtl",isHorizontal:"is-horizontal",isVertical:"is-vertical",inTransition:"in-transition",isSelected:"is-selected"},l10n:{NEXT:"Next slide",PREV:"Previous slide",GOTO:"Go to slide #%d"}};var F;!function(t){t[t.Init=0]="Init",t[t.Ready=1]="Ready",t[t.Destroy=2]="Destroy"}(F||(F={}));const j=t=>{if("string"==typeof t||t instanceof HTMLElement)t={html:t};else{const e=t.thumb;void 0!==e&&("string"==typeof e&&(t.thumbSrc=e),e instanceof HTMLImageElement&&(t.thumbEl=e,t.thumbElSrc=e.src,t.thumbSrc=e.src),delete t.thumb)}return Object.assign({html:"",el:null,isDom:!1,class:"",customClass:"",index:-1,dim:0,gap:0,pos:0,transition:!1},t)},H=(t={})=>Object.assign({index:-1,slides:[],dim:0,pos:-1},t);class B extends p{constructor(t,e){super(e),Object.defineProperty(this,"instance",{enumerable:!0,configurable:!0,writable:!0,value:t})}attach(){}detach(){}}const N={classes:{list:"f-carousel__dots",isDynamic:"is-dynamic",hasDots:"has-dots",dot:"f-carousel__dot",isBeforePrev:"is-before-prev",isPrev:"is-prev",isCurrent:"is-current",isNext:"is-next",isAfterNext:"is-after-next"},dotTpl:'<button type="button" data-carousel-page="%i" aria-label="{{GOTO}}"><span class="f-carousel__dot" aria-hidden="true"></span></button>',dynamicFrom:11,maxCount:1/0,minCount:2};class _ extends B{constructor(){super(...arguments),Object.defineProperty(this,"isDynamic",{enumerable:!0,configurable:!0,writable:!0,value:!1}),Object.defineProperty(this,"list",{enumerable:!0,configurable:!0,writable:!0,value:null})}onRefresh(){this.refresh()}build(){let t=this.list;if(!t){t=document.createElement("ul"),S(t,this.cn("list")),t.setAttribute("role","tablist");const e=this.instance.container;e.appendChild(t),S(e,this.cn("hasDots")),this.list=t}return t}refresh(){var t;const e=this.instance.pages.length,i=Math.min(2,this.option("minCount")),n=Math.max(2e3,this.option("maxCount")),s=this.option("dynamicFrom");if(e<i||e>n)return void this.cleanup();const a="number"==typeof s&&e>5&&e>=s,r=!this.list||this.isDynamic!==a||this.list.children.length!==e;r&&this.cleanup();const l=this.build();if(o(l,this.cn("isDynamic"),!!a),r)for(let t=0;t<e;t++)l.append(this.createItem(t));let c,h=0;for(const e of[...l.children]){const i=h===this.instance.page;i&&(c=e),o(e,this.cn("isCurrent"),i),null===(t=e.children[0])||void 0===t||t.setAttribute("aria-selected",i?"true":"false");for(const t of["isBeforePrev","isPrev","isNext","isAfterNext"])E(e,this.cn(t));h++}if(c=c||l.firstChild,a&&c){const t=c.previousElementSibling,e=t&&t.previousElementSibling;S(t,this.cn("isPrev")),S(e,this.cn("isBeforePrev"));const i=c.nextElementSibling,n=i&&i.nextElementSibling;S(i,this.cn("isNext")),S(n,this.cn("isAfterNext"))}this.isDynamic=a}createItem(t=0){var e;const i=document.createElement("li");i.setAttribute("role","presentation");const s=n(this.instance.localize(this.option("dotTpl"),[["%d",t+1]]).replace(/\%i/g,t+""));return i.appendChild(s),null===(e=i.children[0])||void 0===e||e.setAttribute("role","tab"),i}cleanup(){this.list&&(this.list.remove(),this.list=null),this.isDynamic=!1,E(this.instance.container,this.cn("hasDots"))}attach(){this.instance.on(["refresh","change"],this.onRefresh)}detach(){this.instance.off(["refresh","change"],this.onRefresh),this.cleanup()}}Object.defineProperty(_,"defaults",{enumerable:!0,configurable:!0,writable:!0,value:N});const $="disabled",W="next",X="prev";class q extends B{constructor(){super(...arguments),Object.defineProperty(this,"container",{enumerable:!0,configurable:!0,writable:!0,value:null}),Object.defineProperty(this,"prev",{enumerable:!0,configurable:!0,writable:!0,value:null}),Object.defineProperty(this,"next",{enumerable:!0,configurable:!0,writable:!0,value:null}),Object.defineProperty(this,"isDom",{enumerable:!0,configurable:!0,writable:!0,value:!1})}onRefresh(){const t=this.instance,e=t.pages.length,i=t.page;if(e<2)return void this.cleanup();this.build();let n=this.prev,s=this.next;n&&s&&(n.removeAttribute($),s.removeAttribute($),t.isInfinite||(i<=0&&n.setAttribute($,""),i>=e-1&&s.setAttribute($,"")))}addBtn(t){var e;const i=this.instance,n=document.createElement("button");n.setAttribute("tabindex","0"),n.setAttribute("title",i.localize(`{{${t.toUpperCase()}}}`)),S(n,this.cn("button")+" "+this.cn(t===W?"isNext":"isPrev"));const s=i.isRTL?t===W?X:W:t;var o;return n.innerHTML=i.localize(this.option(`${s}Tpl`)),n.dataset[`carousel${o=t,o?o.match("^[a-z]")?o.charAt(0).toUpperCase()+o.substring(1):o:""}`]="true",null===(e=this.container)||void 0===e||e.appendChild(n),n}build(){const t=this.instance.container,e=this.cn("container");let{container:i,prev:n,next:s}=this;i||(i=t.querySelector("."+e),this.isDom=!!i),i||(i=document.createElement("div"),S(i,e),t.appendChild(i)),this.container=i,s||(s=i.querySelector("[data-carousel-next]")),s||(s=this.addBtn(W)),this.next=s,n||(n=i.querySelector("[data-carousel-prev]")),n||(n=this.addBtn(X)),this.prev=n}cleanup(){this.isDom||(this.prev&&this.prev.remove(),this.next&&this.next.remove(),this.container&&this.container.remove()),this.prev=null,this.next=null,this.container=null,this.isDom=!1}attach(){this.instance.on(["refresh","change"],this.onRefresh)}detach(){this.instance.off(["refresh","change"],this.onRefresh),this.cleanup()}}Object.defineProperty(q,"defaults",{enumerable:!0,configurable:!0,writable:!0,value:{classes:{container:"f-carousel__nav",button:"f-button",isNext:"is-next",isPrev:"is-prev"},nextTpl:'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" tabindex="-1"><path d="M9 3l9 9-9 9"/></svg>',prevTpl:'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" tabindex="-1"><path d="M15 3l-9 9 9 9"/></svg>'}});class Y extends B{constructor(){super(...arguments),Object.defineProperty(this,"selectedIndex",{enumerable:!0,configurable:!0,writable:!0,value:null}),Object.defineProperty(this,"target",{enumerable:!0,configurable:!0,writable:!0,value:null}),Object.defineProperty(this,"nav",{enumerable:!0,configurable:!0,writable:!0,value:null})}addAsTargetFor(t){this.target=this.instance,this.nav=t,this.attachEvents()}addAsNavFor(t){this.nav=this.instance,this.target=t,this.attachEvents()}attachEvents(){const{nav:t,target:e}=this;t&&e&&(t.options.initialSlide=e.options.initialPage,t.state===F.Ready?this.onNavReady(t):t.on("ready",this.onNavReady),e.state===F.Ready?this.onTargetReady(e):e.on("ready",this.onTargetReady))}onNavReady(t){t.on("createSlide",this.onNavCreateSlide),t.on("Panzoom.click",this.onNavClick),t.on("Panzoom.touchEnd",this.onNavTouch),this.onTargetChange()}onTargetReady(t){t.on("change",this.onTargetChange),t.on("Panzoom.refresh",this.onTargetChange),this.onTargetChange()}onNavClick(t,e,i){this.onNavTouch(t,t.panzoom,i)}onNavTouch(t,e,i){var n,s;if(Math.abs(e.dragOffset.x)>3||Math.abs(e.dragOffset.y)>3)return;const o=i.target,{nav:a,target:r}=this;if(!a||!r||!o)return;const l=o.closest("[data-index]");if(i.stopPropagation(),i.preventDefault(),!l)return;const c=parseInt(l.dataset.index||"",10)||0,h=r.getPageForSlide(c),d=a.getPageForSlide(c);a.slideTo(d),r.slideTo(h,{friction:(null===(s=null===(n=this.nav)||void 0===n?void 0:n.plugins)||void 0===s?void 0:s.Sync.option("friction"))||0}),this.markSelectedSlide(c)}onNavCreateSlide(t,e){e.index===this.selectedIndex&&this.markSelectedSlide(e.index)}onTargetChange(){var t,e;const{target:i,nav:n}=this;if(!i||!n)return;if(n.state!==F.Ready||i.state!==F.Ready)return;const s=null===(e=null===(t=i.pages[i.page])||void 0===t?void 0:t.slides[0])||void 0===e?void 0:e.index,o=n.getPageForSlide(s);this.markSelectedSlide(s),n.slideTo(o,null===n.prevPage&&null===i.prevPage?{friction:0}:void 0)}markSelectedSlide(t){const e=this.nav;e&&e.state===F.Ready&&(this.selectedIndex=t,[...e.slides].map((e=>{e.el&&e.el.classList[e.index===t?"add":"remove"]("is-nav-selected")})))}attach(){const t=this;let e=t.options.target,i=t.options.nav;e?t.addAsNavFor(e):i&&t.addAsTargetFor(i)}detach(){const t=this,e=t.nav,i=t.target;e&&(e.off("ready",t.onNavReady),e.off("createSlide",t.onNavCreateSlide),e.off("Panzoom.click",t.onNavClick),e.off("Panzoom.touchEnd",t.onNavTouch)),t.nav=null,i&&(i.off("ready",t.onTargetReady),i.off("refresh",t.onTargetChange),i.off("change",t.onTargetChange)),t.target=null}}Object.defineProperty(Y,"defaults",{enumerable:!0,configurable:!0,writable:!0,value:{friction:.35}});const V={Navigation:q,Dots:_,Sync:Y},Z="animationend",U="isSelected",G="slide";class K extends g{get axis(){return this.isHorizontal?"e":"f"}get isEnabled(){return this.state===F.Ready}get isInfinite(){let t=!1;const{contentDim:e,viewportDim:i,pages:n,slides:s}=this,o=s[0];return n.length>=2&&o&&e+o.dim>=i&&(t=this.option("infinite")),t}get isRTL(){return"rtl"===this.option("direction")}get isHorizontal(){return"x"===this.option("axis")}constructor(t,e={},i={}){if(super(),Object.defineProperty(this,"bp",{enumerable:!0,configurable:!0,writable:!0,value:""}),Object.defineProperty(this,"lp",{enumerable:!0,configurable:!0,writable:!0,value:0}),Object.defineProperty(this,"userOptions",{enumerable:!0,configurable:!0,writable:!0,value:{}}),Object.defineProperty(this,"userPlugins",{enumerable:!0,configurable:!0,writable:!0,value:{}}),Object.defineProperty(this,"state",{enumerable:!0,configurable:!0,writable:!0,value:F.Init}),Object.defineProperty(this,"page",{enumerable:!0,configurable:!0,writable:!0,value:0}),Object.defineProperty(this,"prevPage",{enumerable:!0,configurable:!0,writable:!0,value:null}),Object.defineProperty(this,"container",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"viewport",{enumerable:!0,configurable:!0,writable:!0,value:null}),Object.defineProperty(this,"track",{enumerable:!0,configurable:!0,writable:!0,value:null}),Object.defineProperty(this,"slides",{enumerable:!0,configurable:!0,writable:!0,value:[]}),Object.defineProperty(this,"pages",{enumerable:!0,configurable:!0,writable:!0,value:[]}),Object.defineProperty(this,"panzoom",{enumerable:!0,configurable:!0,writable:!0,value:null}),Object.defineProperty(this,"inTransition",{enumerable:!0,configurable:!0,writable:!0,value:new Set}),Object.defineProperty(this,"contentDim",{enumerable:!0,configurable:!0,writable:!0,value:0}),Object.defineProperty(this,"viewportDim",{enumerable:!0,configurable:!0,writable:!0,value:0}),"string"==typeof t&&(t=document.querySelector(t)),!t||!x(t))throw new Error("No Element found");this.container=t,this.slideNext=k(this.slideNext.bind(this),150),this.slidePrev=k(this.slidePrev.bind(this),150),this.userOptions=e,this.userPlugins=i,queueMicrotask((()=>{this.processOptions()}))}processOptions(){var t,e;const i=u({},K.defaults,this.userOptions);let n="";const s=i.breakpoints;if(s&&d(s))for(const[t,e]of Object.entries(s))window.matchMedia(t).matches&&d(e)&&(n+=t,u(i,e));n===this.bp&&this.state!==F.Init||(this.bp=n,this.state===F.Ready&&(i.initialSlide=(null===(e=null===(t=this.pages[this.page])||void 0===t?void 0:t.slides[0])||void 0===e?void 0:e.index)||0),this.state!==F.Init&&this.destroy(),super.setOptions(i),!1===this.option("enabled")?this.attachEvents():setTimeout((()=>{this.init()}),0))}init(){this.state=F.Init,this.emit("init"),this.attachPlugins(Object.assign(Object.assign({},K.Plugins),this.userPlugins)),this.emit("attachPlugins"),this.initLayout(),this.initSlides(),this.updateMetrics(),this.setInitialPosition(),this.initPanzoom(),this.attachEvents(),this.state=F.Ready,this.emit("ready")}initLayout(){const{container:t}=this,e=this.option("classes");S(t,this.cn("container")),o(t,e.isLTR,!this.isRTL),o(t,e.isRTL,this.isRTL),o(t,e.isVertical,!this.isHorizontal),o(t,e.isHorizontal,this.isHorizontal);let i=this.option("viewport")||t.querySelector(`.${e.viewport}`);i||(i=document.createElement("div"),S(i,e.viewport),i.append(...I(t,`.${e.slide}`)),t.prepend(i)),i.addEventListener("scroll",this.onScroll);let n=this.option("track")||t.querySelector(`.${e.track}`);n||(n=document.createElement("div"),S(n,e.track),n.append(...Array.from(i.childNodes))),n.setAttribute("aria-live","polite"),i.contains(n)||i.prepend(n),this.viewport=i,this.track=n,this.emit("initLayout")}initSlides(){const{track:t}=this;if(!t)return;const e=[...this.slides],i=[];[...I(t,`.${this.cn(G)}`)].forEach((t=>{if(x(t)){const e=j({el:t,isDom:!0,index:this.slides.length});i.push(e)}}));for(let t of[...this.option("slides",[])||[],...e]){const e=j(t);i.push(e)}this.slides=i;for(let t=0;t<this.slides.length;t++)this.slides[t].index=t;for(const t of i)this.emit("beforeInitSlide",t,t.index),this.emit("initSlide",t,t.index);this.emit("initSlides")}setInitialPage(){const t=this.option("initialSlide");this.page="number"==typeof t?this.getPageForSlide(t):parseInt(this.option("initialPage",0)+"",10)||0}setInitialPosition(){const{track:t,pages:e,isHorizontal:i}=this;if(!t||!e.length)return;let n=this.page;e[n]||(this.page=n=0);const s=(e[n].pos||0)*(this.isRTL&&i?1:-1),o=i?`${s}px`:"0",a=i?"0":`${s}px`;t.style.transform=`translate3d(${o}, ${a}, 0) scale(1)`,this.option("adaptiveHeight")&&this.setViewportHeight()}initPanzoom(){this.panzoom&&(this.panzoom.destroy(),this.panzoom=null);const t=this.option("Panzoom")||{};this.panzoom=new R(this.viewport,u({},{content:this.track,zoom:!1,panOnlyZoomed:!1,lockAxis:this.isHorizontal?"x":"y",infinite:this.isInfinite,click:!1,dblClick:!1,touch:t=>!(this.pages.length<2&&!t.options.infinite),bounds:()=>this.getBounds(),maxVelocity:t=>Math.abs(t.target[this.axis]-t.current[this.axis])<2*this.viewportDim?100:0},t)),this.panzoom.on("*",((t,e,...i)=>{this.emit(`Panzoom.${e}`,t,...i)})),this.panzoom.on("decel",this.onDecel),this.panzoom.on("refresh",this.onRefresh),this.panzoom.on("beforeTransform",this.onBeforeTransform),this.panzoom.on("endAnimation",this.onEndAnimation)}attachEvents(){const t=this.container;t&&(t.addEventListener("click",this.onClick,{passive:!1,capture:!1}),t.addEventListener("slideTo",this.onSlideTo)),window.addEventListener("resize",this.onResize)}createPages(){let t=[];const{contentDim:e,viewportDim:i}=this;let n=this.option("slidesPerPage");n=("auto"===n||e<=i)&&!1!==this.option("fill")?1/0:parseFloat(n+"");let s=0,o=0,a=0;for(const e of this.slides)(!t.length||o+e.dim-i>.05||a>=n)&&(t.push(H()),s=t.length-1,o=0,a=0),t[s].slides.push(e),o+=e.dim+e.gap,a++;return t}processPages(){const e=this.pages,{contentDim:i,viewportDim:n,isInfinite:s}=this,o=this.option("center"),a=this.option("fill"),r=a&&o&&i>n&&!s;if(e.forEach(((t,e)=>{var s;t.index=e,t.pos=(null===(s=t.slides[0])||void 0===s?void 0:s.pos)||0,t.dim=0;for(const[e,i]of t.slides.entries())t.dim+=i.dim,e<t.slides.length-1&&(t.dim+=i.gap);r&&t.pos+.5*t.dim<.5*n?t.pos=0:r&&t.pos+.5*t.dim>=i-.5*n?t.pos=i-n:o&&(t.pos+=-.5*(n-t.dim))})),e.forEach(((e,o)=>{a&&!s&&i>n&&(e.pos=Math.max(e.pos,0),e.pos=Math.min(e.pos,i-n)),e.pos=t(e.pos,1e3),e.dim=t(e.dim,1e3),Math.abs(e.pos)<=.1&&(e.pos=0)})),s)return e;const l=[];let c;return e.forEach((t=>{const e=Object.assign({},t);c&&e.pos===c.pos?(c.dim+=e.dim,c.slides=[...c.slides,...e.slides]):(e.index=l.length,c=e,l.push(e))})),l}getPageFromIndex(t=0){const e=this.pages.length;let i;return t=parseInt((t||0).toString())||0,i=this.isInfinite?(t%e+e)%e:Math.max(Math.min(t,e-1),0),i}getSlideMetrics(e){var i,n;const s=this.isHorizontal?"width":"height";let o=0,a=0,r=e.el;const l=r&&!r.parentNode;if(r?o=parseFloat(r.dataset[s]||"")||0:(r=document.createElement("div"),r.style.visibility="hidden",(this.track||document.body).prepend(r)),S(r,this.cn(G)+" "+e.class+" "+e.customClass),o)r.style[s]=`${o}px`,r.style["width"===s?"height":"width"]="";else{l&&(this.track||document.body).prepend(r);const t=Math.max(1,(null===(i=window.visualViewport)||void 0===i?void 0:i.scale)||1);o=r.getBoundingClientRect()[s]*t}const c=getComputedStyle(r);return"content-box"===c.boxSizing&&(this.isHorizontal?(o+=parseFloat(c.paddingLeft)||0,o+=parseFloat(c.paddingRight)||0):(o+=parseFloat(c.paddingTop)||0,o+=parseFloat(c.paddingBottom)||0)),a=parseFloat(c[this.isHorizontal?"marginRight":"marginBottom"])||0,l?null===(n=r.parentElement)||void 0===n||n.removeChild(r):e.el||r.remove(),{dim:t(o,1e3),gap:t(a,1e3)}}getBounds(){const{isInfinite:t,isRTL:e,isHorizontal:i,pages:n}=this;let s={min:0,max:0};if(t)s={min:-1/0,max:1/0};else if(n.length){const t=n[0].pos,o=n[n.length-1].pos;s=e&&i?{min:t,max:o}:{min:-1*o,max:-1*t}}return{x:i?s:{min:0,max:0},y:i?{min:0,max:0}:s}}repositionSlides(){let e,{isHorizontal:i,isRTL:n,isInfinite:s,viewport:o,viewportDim:a,contentDim:r,page:l,pages:c,slides:h,panzoom:d}=this,u=0,f=0,p=0,g=0;d?g=-1*d.current[this.axis]:c[l]&&(g=c[l].pos||0),e=i?n?"right":"left":"top",n&&i&&(g*=-1);for(const i of h){const n=i.el;n?("top"===e?(n.style.right="",n.style.left=""):n.style.top="",i.index!==u?n.style[e]=0===f?"":`${t(f,1e3)}px`:n.style[e]="",p+=i.dim+i.gap,u++):f+=i.dim+i.gap}if(s&&p&&o){let n=getComputedStyle(o),s="padding",l=i?"Right":"Bottom",c=parseFloat(n[s+(i?"Left":"Top")]);g-=c,a+=c,a+=parseFloat(n[s+l]);for(const i of h)i.el&&(t(i.pos)<t(a)&&t(i.pos+i.dim+i.gap)<t(g)&&t(g)>t(r-a)&&(i.el.style[e]=`${t(f+p,1e3)}px`),t(i.pos+i.gap)>=t(r-a)&&t(i.pos)>t(g+a)&&t(g)<t(a)&&(i.el.style[e]=`-${t(p,1e3)}px`))}let m,b,v=[...this.inTransition];if(v.length>1&&(m=c[v[0]],b=c[v[1]]),m&&b){let i=0;for(const n of h)n.el?this.inTransition.has(n.index)&&m.slides.indexOf(n)<0&&(n.el.style[e]=`${t(i+(m.pos-b.pos),1e3)}px`):i+=n.dim+n.gap}}createSlideEl(t){const{track:e,slides:i}=this;if(!e||!t)return;if(t.el&&t.el.parentNode)return;const n=t.el||document.createElement("div");S(n,this.cn(G)),S(n,t.class),S(n,t.customClass);const s=t.html;s&&(s instanceof HTMLElement?n.appendChild(s):n.innerHTML=t.html+"");const o=[];i.forEach(((t,e)=>{t.el&&o.push(e)}));const a=t.index;let r=null;if(o.length){r=i[o.reduce(((t,e)=>Math.abs(e-a)<Math.abs(t-a)?e:t))]}const l=r&&r.el&&r.el.parentNode?r.index<t.index?r.el.nextSibling:r.el:null;e.insertBefore(n,e.contains(l)?l:null),t.el=n,this.emit("createSlide",t)}removeSlideEl(t,e=!1){const i=t.el;if(!i||!i.parentNode)return;const n=this.cn(U);if(i.classList.contains(n)&&(E(i,n),this.emit("unselectSlide",t)),t.isDom&&!e)return i.removeAttribute("aria-hidden"),i.removeAttribute("data-index"),void(i.style.left="");this.emit("removeSlide",t);const s=new CustomEvent(Z);i.dispatchEvent(s),t.el&&(t.el.remove(),t.el=null)}transitionTo(t=0,e=this.option("transition")){var i,n,s,o;if(!e)return!1;const a=this.page,{pages:r,panzoom:l}=this;t=parseInt((t||0).toString())||0;const c=this.getPageFromIndex(t);if(!l||!r[c]||r.length<2||Math.abs(((null===(n=null===(i=r[a])||void 0===i?void 0:i.slides[0])||void 0===n?void 0:n.dim)||0)-this.viewportDim)>1)return!1;const h=t>a?1:-1,d=r[c].pos*(this.isRTL?1:-1);if(a===c&&Math.abs(d-l.target[this.axis])<1)return!1;this.clearTransitions();const u=l.isResting;S(this.container,this.cn("inTransition"));const f=(null===(s=r[a])||void 0===s?void 0:s.slides[0])||null,p=(null===(o=r[c])||void 0===o?void 0:o.slides[0])||null;this.inTransition.add(p.index),this.createSlideEl(p);let g=f.el,m=p.el;u||e===G||(e="fadeFast",g=null);const b=this.isRTL?"next":"prev",v=this.isRTL?"prev":"next";return g&&(this.inTransition.add(f.index),f.transition=e,g.addEventListener(Z,this.onAnimationEnd),g.classList.add(`f-${e}Out`,`to-${h>0?v:b}`)),m&&(p.transition=e,m.addEventListener(Z,this.onAnimationEnd),m.classList.add(`f-${e}In`,`from-${h>0?b:v}`)),l.current[this.axis]=d,l.target[this.axis]=d,l.requestTick(),this.onChange(c),!0}manageSlideVisiblity(){const t=new Set,e=new Set,i=this.getVisibleSlides(parseFloat(this.option("preload",0)+"")||0);for(const n of this.slides)i.has(n)?t.add(n):e.add(n);for(const e of this.inTransition)t.add(this.slides[e]);for(const e of t)this.createSlideEl(e),this.lazyLoadSlide(e);for(const i of e)t.has(i)||this.removeSlideEl(i);this.markSelectedSlides(),this.repositionSlides()}markSelectedSlides(){if(!this.pages[this.page]||!this.pages[this.page].slides)return;const t="aria-hidden";let e=this.cn(U);if(e)for(const i of this.slides){const n=i.el;n&&(n.dataset.index=`${i.index}`,n.classList.contains("f-thumbs__slide")?this.getVisibleSlides(0).has(i)?n.removeAttribute(t):n.setAttribute(t,"true"):this.pages[this.page].slides.includes(i)?(n.classList.contains(e)||(S(n,e),this.emit("selectSlide",i)),n.removeAttribute(t)):(n.classList.contains(e)&&(E(n,e),this.emit("unselectSlide",i)),n.setAttribute(t,"true")))}}flipInfiniteTrack(){const t=this.panzoom;if(!t||!this.isInfinite)return;const e="x"===this.option("axis")?"e":"f",{viewportDim:i,contentDim:n}=this;let s=t.current[e],o=t.target[e]-s,a=0,r=.5*i,l=n;this.isRTL&&this.isHorizontal?(s<-r&&(a=-1,s+=l),s>l-r&&(a=1,s-=l)):(s>r&&(a=1,s-=l),s<-l+r&&(a=-1,s+=l)),a&&(t.current[e]=s,t.target[e]=s+o)}lazyLoadSlide(t){const e=this,i=t&&t.el;if(!i)return;const s=new Set,o="f-fadeIn";i.querySelectorAll("[data-lazy-srcset]").forEach((t=>{t instanceof HTMLImageElement&&s.add(t)}));let a=Array.from(i.querySelectorAll("[data-lazy-src]"));i.dataset.lazySrc&&a.push(i),a.map((t=>{t instanceof HTMLImageElement?s.add(t):x(t)&&(t.style.backgroundImage=`url('${t.dataset.lazySrc||""}')`,delete t.dataset.lazySrc)}));const r=(t,i,n)=>{n&&(n.remove(),n=null),i.complete&&(i.classList.add(o),setTimeout((()=>{i.classList.remove(o)}),350),i.style.visibility=""),this.option("adaptiveHeight")&&t.el&&this.pages[this.page].slides.indexOf(t)>-1&&(e.updateMetrics(),e.setViewportHeight()),this.emit("load",t)};for(const e of s){let i=null;e.src=e.dataset.lazySrcset||e.dataset.lazySrc||"",delete e.dataset.lazySrc,delete e.dataset.lazySrcset,e.style.visibility="hidden",e.addEventListener("error",(()=>{r(t,e,i)})),e.addEventListener("load",(()=>{r(t,e,i)})),setTimeout((()=>{e.parentNode&&t.el&&(e.complete?r(t,e,i):(i=n(w),e.parentNode.insertBefore(i,e)))}),300)}}onAnimationEnd(t){var e;const i=t.target,n=i?parseInt(i.dataset.index||"",10)||0:-1,s=this.slides[n],o=t.animationName;if(!i||!s||!o)return;const a=!!this.inTransition.has(n)&&s.transition;a&&o.substring(0,a.length+2)===`f-${a}`&&this.inTransition.delete(n),this.inTransition.size||this.clearTransitions(),n===this.page&&(null===(e=this.panzoom)||void 0===e?void 0:e.isResting)&&this.emit("settle")}onDecel(t,e=0,i=0,n=0,s=0){const{isRTL:o,isHorizontal:a,axis:r,pages:l}=this,c=l.length,h=Math.abs(Math.atan2(i,e)/(Math.PI/180));let d=0;if(d=h>45&&h<135?a?0:i:a?e:0,!c)return;const u=this.option("dragFree");let f=this.page,p=o&&a?1:-1;const g=t.target[r]*p,m=t.current[r]*p;let{pageIndex:b}=this.getPageFromPosition(g),{pageIndex:v}=this.getPageFromPosition(m);u?this.onChange(b):(Math.abs(d)>5?(l[f].dim<document.documentElement["client"+(this.isHorizontal?"Width":"Height")]-1&&(f=v),f=o&&a?d<0?f-1:f+1:d<0?f+1:f-1):f=0===n&&0===s?f:v,this.slideTo(f,{transition:!1,friction:t.option("decelFriction")}))}onClick(t){const e=t.target,i=e&&x(e)?e.dataset:null;let n,s;i&&(void 0!==i.carouselPage?(s="slideTo",n=i.carouselPage):void 0!==i.carouselNext?s="slideNext":void 0!==i.carouselPrev&&(s="slidePrev")),s?(t.preventDefault(),t.stopPropagation(),e&&!e.hasAttribute("disabled")&&this[s](n)):this.emit("click",t)}onSlideTo(t){const e=t.detail||0;this.slideTo(this.getPageForSlide(e),{friction:0})}onChange(t,e=0){const i=this.page;this.prevPage=i,this.page=t,this.option("adaptiveHeight")&&this.setViewportHeight(),t!==i&&(this.markSelectedSlides(),this.emit("change",t,i,e))}onRefresh(){let t=this.contentDim,e=this.viewportDim;this.updateMetrics(),this.contentDim===t&&this.viewportDim===e||this.slideTo(this.page,{friction:0,transition:!1})}onScroll(){var t;null===(t=this.viewport)||void 0===t||t.scroll(0,0)}onResize(){this.option("breakpoints")&&this.processOptions()}onBeforeTransform(t){this.lp!==t.current[this.axis]&&(this.flipInfiniteTrack(),this.manageSlideVisiblity()),this.lp=t.current.e}onEndAnimation(){this.inTransition.size||this.emit("settle")}reInit(t=null,e=null){this.destroy(),this.state=F.Init,this.userOptions=t||this.userOptions,this.userPlugins=e||this.userPlugins,this.processOptions()}slideTo(t=0,{friction:e=this.option("friction"),transition:i=this.option("transition")}={}){if(this.state===F.Destroy)return;t=parseInt((t||0).toString())||0;const n=this.getPageFromIndex(t),{axis:s,isHorizontal:o,isRTL:a,pages:r,panzoom:l}=this,c=r.length,h=a&&o?1:-1;if(!l||!c)return;if(this.page!==n){const e=new Event("beforeChange",{bubbles:!0,cancelable:!0});if(this.emit("beforeChange",e,t),e.defaultPrevented)return}if(this.transitionTo(t,i))return;let d=r[n].pos;if(this.isInfinite){const e=this.contentDim,i=l.target[s]*h;if(2===c)d+=e*Math.floor(parseFloat(t+"")/2);else{d=[d,d-e,d+e].reduce((function(t,e){return Math.abs(e-i)<Math.abs(t-i)?e:t}))}}d*=h,Math.abs(l.target[s]-d)<1||(l.panTo({x:o?d:0,y:o?0:d,friction:e}),this.onChange(n))}slideToClosest(t){if(this.panzoom){const{pageIndex:e}=this.getPageFromPosition(this.panzoom.current[this.isHorizontal?"e":"f"]);this.slideTo(e,t)}}slideNext(){this.slideTo(this.page+1)}slidePrev(){this.slideTo(this.page-1)}clearTransitions(){this.inTransition.clear(),E(this.container,this.cn("inTransition"));const t=["to-prev","to-next","from-prev","from-next"];for(const e of this.slides){const i=e.el;if(i){i.removeEventListener(Z,this.onAnimationEnd),i.classList.remove(...t);const n=e.transition;n&&i.classList.remove(`f-${n}Out`,`f-${n}In`)}}this.manageSlideVisiblity()}addSlide(t,e){var i,n,s,o;const a=this.panzoom,r=(null===(i=this.pages[this.page])||void 0===i?void 0:i.pos)||0,l=(null===(n=this.pages[this.page])||void 0===n?void 0:n.dim)||0,c=this.contentDim<this.viewportDim;let h=Array.isArray(e)?e:[e];const d=[];for(const t of h)d.push(j(t));this.slides.splice(t,0,...d);for(let t=0;t<this.slides.length;t++)this.slides[t].index=t;for(const t of d)this.emit("beforeInitSlide",t,t.index);if(this.page>=t&&(this.page+=d.length),this.updateMetrics(),a){const e=(null===(s=this.pages[this.page])||void 0===s?void 0:s.pos)||0,i=(null===(o=this.pages[this.page])||void 0===o?void 0:o.dim)||0,n=this.pages.length||1,h=this.isRTL?l-i:i-l,d=this.isRTL?r-e:e-r;c&&1===n?(t<=this.page&&(a.current[this.axis]-=h,a.target[this.axis]-=h),a.panTo({[this.isHorizontal?"x":"y"]:-1*e})):d&&t<=this.page&&(a.target[this.axis]-=d,a.current[this.axis]-=d,a.requestTick())}for(const t of d)this.emit("initSlide",t,t.index)}prependSlide(t){this.addSlide(0,t)}appendSlide(t){this.addSlide(this.slides.length,t)}removeSlide(t){const e=this.slides.length;t=(t%e+e)%e,this.removeSlideEl(this.slides[t],!0),this.slides.splice(t,1);for(let t=0;t<this.slides.length;t++)this.slides[t].index=t;this.updateMetrics(),this.slideTo(this.page,{friction:0,transition:!1})}updateMetrics(){const{panzoom:e,viewport:i,track:n,slides:s,isHorizontal:o,isInfinite:a}=this;if(!n)return;const r=o?"width":"height",l=o?"offsetWidth":"offsetHeight";if(i){let e=Math.max(i[l],t(i.getBoundingClientRect()[r],1e3)),n=getComputedStyle(i),s="padding",a=o?"Right":"Bottom";e-=parseFloat(n[s+(o?"Left":"Top")])+parseFloat(n[s+a]),this.viewportDim=e}let c,h=0;for(const[e,i]of s.entries()){let n=0,o=0;!i.el&&c?(n=c.dim,o=c.gap):(({dim:n,gap:o}=this.getSlideMetrics(i)),c=i),n=t(n,1e3),o=t(o,1e3),i.dim=n,i.gap=o,i.pos=h,h+=n,(a||e<s.length-1)&&(h+=o)}h=t(h,1e3),this.contentDim=h,e&&(e.contentRect[r]=h,e.contentRect["e"===this.axis?"fullWidth":"fullHeight"]=h),this.pages=this.createPages(),this.pages=this.processPages(),this.state===F.Init&&this.setInitialPage(),this.page=Math.max(0,Math.min(this.page,this.pages.length-1)),this.manageSlideVisiblity(),this.emit("refresh")}getProgress(e,i=!1,n=!1){void 0===e&&(e=this.page);const s=this,o=s.panzoom,a=s.contentDim,r=s.pages[e]||0;if(!r||!o)return e>this.page?-1:1;let l=-1*o.current.e,c=t((l-r.pos)/(1*r.dim),1e3),h=c,d=c;this.isInfinite&&!0!==n&&(h=t((l-r.pos+a)/(1*r.dim),1e3),d=t((l-r.pos-a)/(1*r.dim),1e3));let u=[c,h,d].reduce((function(t,e){return Math.abs(e)<Math.abs(t)?e:t}));return i?u:u>1?1:u<-1?-1:u}setViewportHeight(){const{page:t,pages:e,viewport:i,isHorizontal:n}=this;if(!i||!e[t])return;let s=0;n&&this.track&&(this.track.style.height="auto",e[t].slides.forEach((t=>{t.el&&(s=Math.max(s,t.el.offsetHeight))}))),i.style.height=s?`${s}px`:""}getPageForSlide(t){for(const e of this.pages)for(const i of e.slides)if(i.index===t)return e.index;return-1}getVisibleSlides(t=0){var e;const i=new Set;let{contentDim:n,viewportDim:s,pages:o,page:a}=this;n=n+(null===(e=this.slides[this.slides.length-1])||void 0===e?void 0:e.gap)||0;let r=0;r=this.panzoom&&this.panzoom.state!==m.Init&&this.panzoom.state!==m.Destroy?-1*this.panzoom.current[this.axis]:o[a]&&o[a].pos||0,this.isInfinite&&(r-=Math.floor(r/n)*n),this.isRTL&&this.isHorizontal&&(r*=-1);const l=r-s*t,c=r+s*(t+1),h=this.isInfinite?[-1,0,1]:[0];for(const t of this.slides)for(const e of h){const s=t.pos+e*n,o=s+t.dim+t.gap;s<c&&o>l&&i.add(t)}return i}getPageFromPosition(t){var e;const{viewportDim:i,contentDim:n}=this,s=this.pages.length,o=this.slides.length,a=this.slides[o-1];let r=0,l=0,c=0;const h=this.option("center");h&&(t+=.5*i),this.isInfinite||(t=Math.max((null===(e=this.slides[0])||void 0===e?void 0:e.pos)||0,Math.min(t,a.pos)));const d=n+a.gap;c=Math.floor(t/d)||0,t-=c*d;let u=a,f=this.slides.find((e=>{const i=t+(u&&!h?.5*u.dim:0);return u=e,e.pos<=i&&e.pos+e.dim+e.gap>i}));return f||(f=a),l=this.getPageForSlide(f.index),r=l+c*s,{page:r,pageIndex:l}}destroy(){if([F.Destroy].includes(this.state))return;this.state=F.Destroy;const{container:t,viewport:e,track:i,slides:n,panzoom:s}=this,o=this.option("classes");t.removeEventListener("click",this.onClick,{passive:!1,capture:!1}),t.removeEventListener("slideTo",this.onSlideTo),window.removeEventListener("resize",this.onResize),s&&(s.destroy(),this.panzoom=null),n&&n.forEach((t=>{this.removeSlideEl(t)})),this.detachPlugins(),e&&(e.removeEventListener("scroll",this.onScroll),e.offsetParent&&i&&i.offsetParent&&e.replaceWith(...i.childNodes));for(const[e,i]of Object.entries(o))"container"!==e&&i&&t.classList.remove(i);this.track=null,this.viewport=null,this.page=0,this.slides=[];const a=this.events.get("ready");this.events=new Map,a&&this.events.set("ready",a)}}Object.defineProperty(K,"Panzoom",{enumerable:!0,configurable:!0,writable:!0,value:R}),Object.defineProperty(K,"defaults",{enumerable:!0,configurable:!0,writable:!0,value:D}),Object.defineProperty(K,"Plugins",{enumerable:!0,configurable:!0,writable:!0,value:V});const J=function(t){if(!x(t))return 0;const e=window.scrollY,i=window.innerHeight,n=e+i,s=t.getBoundingClientRect(),o=s.y+e,a=s.height,r=o+a;if(e>r||n<o)return 0;if(e<o&&n>r)return 100;if(o<e&&r>n)return 100;let l=a;o<e&&(l-=e-o),r>n&&(l-=r-n);const c=l/i*100;return Math.round(c)},Q=!("undefined"==typeof window||!window.document||!window.document.createElement);let tt;const et=["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]):not(.fancybox-focus-guard)","iframe","object","embed","video","audio","[contenteditable]",'[tabindex]:not([tabindex^="-"]):not([disabled]):not([aria-hidden])'].join(","),it=t=>{if(t&&Q){void 0===tt&&document.createElement("div").focus({get preventScroll(){return tt=!0,!1}});try{if(tt)t.focus({preventScroll:!0});else{const e=window.scrollY||document.body.scrollTop,i=window.scrollX||document.body.scrollLeft;t.focus(),document.body.scrollTo({top:e,left:i,behavior:"auto"})}}catch(t){}}},nt={dragToClose:!0,hideScrollbar:!0,Carousel:{classes:{container:"fancybox__carousel",viewport:"fancybox__viewport",track:"fancybox__track",slide:"fancybox__slide"}},contentClick:"toggleZoom",contentDblClick:!1,backdropClick:"close",animated:!0,idle:3500,showClass:"f-zoomInUp",hideClass:"f-fadeOut",commonCaption:!1,parentEl:null,startIndex:0,l10n:Object.assign(Object.assign({},v),{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",TOGGLE_ZOOM:"Toggle zoom level",TOGGLE_THUMBS:"Toggle thumbnails",TOGGLE_SLIDESHOW:"Toggle slideshow",TOGGLE_FULLSCREEN:"Toggle full-screen mode",DOWNLOAD:"Download"}),tpl:{closeButton:'<button data-fancybox-close class="f-button is-close-btn" title="{{CLOSE}}"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" tabindex="-1"><path d="M20 20L4 4m16 0L4 20"/></svg></button>',main:'<div class="fancybox__container" role="dialog" aria-modal="true" aria-label="{{MODAL}}" tabindex="-1">\n <div class="fancybox__backdrop"></div>\n <div class="fancybox__carousel"></div>\n <div class="fancybox__footer"></div>\n </div>'},groupAll:!1,groupAttr:"data-fancybox",defaultType:"image",defaultDisplay:"block",autoFocus:!0,trapFocus:!0,placeFocusBack:!0,closeButton:"auto",keyboard:{Escape:"close",Delete:"close",Backspace:"close",PageUp:"next",PageDown:"prev",ArrowUp:"prev",ArrowDown:"next",ArrowRight:"next",ArrowLeft:"prev"},Fullscreen:{autoStart:!1},compact:()=>window.matchMedia("(max-width: 578px), (max-height: 578px)").matches,wheel:"zoom"};var st,ot;!function(t){t[t.Init=0]="Init",t[t.Ready=1]="Ready",t[t.Closing=2]="Closing",t[t.CustomClosing=3]="CustomClosing",t[t.Destroy=4]="Destroy"}(st||(st={})),function(t){t[t.Loading=0]="Loading",t[t.Opening=1]="Opening",t[t.Ready=2]="Ready",t[t.Closing=3]="Closing"}(ot||(ot={}));const at=()=>{queueMicrotask((()=>{(()=>{const{slug:t,index:e}=rt.parseURL(),i=ce.getInstance();if(i&&!1!==i.option("Hash")){const n=i.carousel;if(t&&n){for(let e of n.slides)if(e.slug&&e.slug===t)return n.slideTo(e.index);if(t===i.option("slug"))return n.slideTo(e-1);const s=i.getSlide(),o=s&&s.triggerEl&&s.triggerEl.dataset;if(o&&o.fancybox===t)return n.slideTo(e-1)}rt.hasSilentClose=!0,i.close()}rt.startFromUrl()})()}))};class rt extends B{constructor(){super(...arguments),Object.defineProperty(this,"origHash",{enumerable:!0,configurable:!0,writable:!0,value:""}),Object.defineProperty(this,"timer",{enumerable:!0,configurable:!0,writable:!0,value:null})}onChange(){const t=this.instance,e=t.carousel;this.timer&&clearTimeout(this.timer);const i=t.getSlide();if(!e||!i)return;const n=t.isOpeningSlide(i),s=new URL(document.URL).hash;let o,a=i.slug||void 0,r=i.triggerEl||void 0;o=a||this.instance.option("slug"),!o&&r&&r.dataset&&(o=r.dataset.fancybox);let l="";o&&"true"!==o&&(l="#"+o+(!a&&e.slides.length>1?"-"+(i.index+1):"")),n&&(this.origHash=s!==l?s:""),l&&s!==l&&(this.timer=setTimeout((()=>{try{t.state===st.Ready&&window.history[n?"pushState":"replaceState"]({},document.title,window.location.pathname+window.location.search+l)}catch(t){}}),300))}onClose(){if(this.timer&&clearTimeout(this.timer),!0!==rt.hasSilentClose)try{window.history.replaceState({},document.title,window.location.pathname+window.location.search+(this.origHash||""))}catch(t){}}attach(){const t=this.instance;t.on(["Carousel.ready","Carousel.change"],this.onChange),t.on("close",this.onClose)}detach(){const t=this.instance;t.off(["Carousel.ready","Carousel.change"],this.onChange),t.off("close",this.onClose)}static parseURL(){const t=window.location.hash.slice(1),e=t.split("-"),i=e[e.length-1],n=i&&/^\+?\d+$/.test(i)&&parseInt(e.pop()||"1",10)||1;return{hash:t,slug:e.join("-"),index:n}}static startFromUrl(){if(rt.hasSilentClose=!1,ce.getInstance()||!1===ce.defaults.Hash)return;const{hash:t,slug:e,index:i}=rt.parseURL();if(!e)return;let n=document.querySelector(`[data-slug="${t}"]`);if(n&&n.dispatchEvent(new CustomEvent("click",{bubbles:!0,cancelable:!0})),ce.getInstance())return;const s=document.querySelectorAll(`[data-fancybox="${e}"]`);s.length&&(n=s[i-1],n&&n.dispatchEvent(new CustomEvent("click",{bubbles:!0,cancelable:!0})))}static destroy(){window.removeEventListener("hashchange",at,!1)}}function lt(){window.addEventListener("hashchange",at,!1),setTimeout((()=>{rt.startFromUrl()}),500)}Object.defineProperty(rt,"defaults",{enumerable:!0,configurable:!0,writable:!0,value:{}}),Object.defineProperty(rt,"hasSilentClose",{enumerable:!0,configurable:!0,writable:!0,value:!1}),Q&&(/complete|interactive|loaded/.test(document.readyState)?lt():document.addEventListener("DOMContentLoaded",lt));const ct="is-zooming-in";class ht extends B{onCreateSlide(t,e,i){const n=this.instance.optionFor(i,"src")||"";i.el&&"image"===i.type&&"string"==typeof n&&this.setImage(i,n)}onRemoveSlide(t,e,i){i.panzoom&&i.panzoom.destroy(),i.panzoom=void 0,i.imageEl=void 0}onChange(t,e,i,n){E(this.instance.container,ct);for(const t of e.slides){const e=t.panzoom;e&&t.index!==i&&e.reset(.35)}}onClose(){var t;const e=this.instance,i=e.container,n=e.getSlide();if(!i||!i.parentElement||!n)return;const{el:s,contentEl:o,panzoom:a,thumbElSrc:r}=n;if(!s||!r||!o||!a||a.isContentLoading||a.state===m.Init||a.state===m.Destroy)return;a.updateMetrics();let l=this.getZoomInfo(n);if(!l)return;this.instance.state=st.CustomClosing,i.classList.remove(ct),i.classList.add("is-zooming-out"),o.style.backgroundImage=`url('${r}')`;const c=i.getBoundingClientRect();1===((null===(t=window.visualViewport)||void 0===t?void 0:t.scale)||1)&&Object.assign(i.style,{position:"absolute",top:`${window.scrollY}px`,left:`${window.scrollX}px`,bottom:"auto",right:"auto",width:`${c.width}px`,height:`${c.height}px`,overflow:"hidden"});const{x:h,y:d,scale:u,opacity:f}=l;if(f){const t=((t,e,i,n)=>{const s=e-t,o=n-i;return e=>i+((e-t)/s*o||0)})(a.scale,u,1,0);a.on("afterTransform",(()=>{o.style.opacity=t(a.scale)+""}))}a.on("endAnimation",(()=>{e.destroy()})),a.target.a=u,a.target.b=0,a.target.c=0,a.target.d=u,a.panTo({x:h,y:d,scale:u,friction:f?.2:.33,ignoreBounds:!0}),a.isResting&&e.destroy()}setImage(t,e){const i=this.instance;t.src=e,this.process(t,e).then((e=>{const{contentEl:n,imageEl:s,thumbElSrc:o,el:a}=t;if(i.isClosing()||!n||!s)return;n.offsetHeight;const r=!!i.isOpeningSlide(t)&&this.getZoomInfo(t);if(this.option("protected")&&a){a.addEventListener("contextmenu",(t=>{t.preventDefault()}));const t=document.createElement("div");S(t,"fancybox-protected"),n.appendChild(t)}if(o&&r){const s=e.contentRect,a=Math.max(s.fullWidth,s.fullHeight);let c=null;!r.opacity&&a>1200&&(c=document.createElement("img"),S(c,"fancybox-ghost"),c.src=o,n.appendChild(c));const h=()=>{c&&(S(c,"f-fadeFastOut"),setTimeout((()=>{c&&(c.remove(),c=null)}),200))};(l=o,new Promise(((t,e)=>{const i=new Image;i.onload=t,i.onerror=e,i.src=l}))).then((()=>{i.hideLoading(t),t.state=ot.Opening,this.instance.emit("reveal",t),this.zoomIn(t).then((()=>{h(),this.instance.done(t)}),(()=>{})),c&&setTimeout((()=>{h()}),a>2500?800:200)}),(()=>{i.hideLoading(t),i.revealContent(t)}))}else{const n=this.optionFor(t,"initialSize"),s=this.optionFor(t,"zoom"),o={event:i.prevMouseMoveEvent||i.options.event,friction:s?.12:0};let a=i.optionFor(t,"showClass")||void 0,r=!0;i.isOpeningSlide(t)&&("full"===n?e.zoomToFull(o):"cover"===n?e.zoomToCover(o):"max"===n?e.zoomToMax(o):r=!1,e.stop("current")),r&&a&&(a=e.isDragging?"f-fadeIn":""),i.hideLoading(t),i.revealContent(t,a)}var l}),(()=>{i.setError(t,"{{IMAGE_ERROR}}")}))}process(t,e){return new Promise(((i,s)=>{var o;const a=this.instance,r=t.el;a.clearContent(t),a.showLoading(t);let l=this.optionFor(t,"content");if("string"==typeof l&&(l=n(l)),!l||!x(l)){if(l=document.createElement("img"),l instanceof HTMLImageElement){let i="",n=t.caption;i="string"==typeof n&&n?n.replace(/<[^>]+>/gi,"").substring(0,1e3):`Image ${t.index+1} of ${null===(o=a.carousel)||void 0===o?void 0:o.pages.length}`,l.src=e||"",l.alt=i,l.draggable=!1,t.srcset&&l.setAttribute("srcset",t.srcset),this.instance.isOpeningSlide(t)&&(l.fetchPriority="high")}t.sizes&&l.setAttribute("sizes",t.sizes)}S(l,"fancybox-image"),t.imageEl=l,a.setContent(t,l,!1);t.panzoom=new R(r,u({transformParent:!0},this.option("Panzoom")||{},{content:l,width:a.optionFor(t,"width","auto"),height:a.optionFor(t,"height","auto"),wheel:()=>{const t=a.option("wheel");return("zoom"===t||"pan"==t)&&t},click:(e,i)=>{var n,s;if(a.isCompact||a.isClosing())return!1;if(t.index!==(null===(n=a.getSlide())||void 0===n?void 0:n.index))return!1;if(i){const t=i.composedPath()[0];if(["A","BUTTON","TEXTAREA","OPTION","INPUT","SELECT","VIDEO"].includes(t.nodeName))return!1}let o=!i||i.target&&(null===(s=t.contentEl)||void 0===s?void 0:s.contains(i.target));return a.option(o?"contentClick":"backdropClick")||!1},dblClick:()=>a.isCompact?"toggleZoom":a.option("contentDblClick")||!1,spinner:!1,panOnlyZoomed:!0,wheelLimit:1/0,on:{ready:t=>{i(t)},error:()=>{s()},destroy:()=>{s()}}}))}))}zoomIn(t){return new Promise(((e,i)=>{const n=this.instance,s=n.container,{panzoom:o,contentEl:a,el:r}=t;o&&o.updateMetrics();const l=this.getZoomInfo(t);if(!(l&&r&&a&&o&&s))return void i();const{x:c,y:h,scale:d,opacity:u}=l,f=()=>{t.state!==ot.Closing&&(u&&(a.style.opacity=Math.max(Math.min(1,1-(1-o.scale)/(1-d)),0)+""),o.scale>=1&&o.scale>o.targetScale-.1&&e(o))},p=t=>{(t.scale<.99||t.scale>1.01)&&!t.isDragging||(E(s,ct),a.style.opacity="",t.off("endAnimation",p),t.off("touchStart",p),t.off("afterTransform",f),e(t))};o.on("endAnimation",p),o.on("touchStart",p),o.on("afterTransform",f),o.on(["error","destroy"],(()=>{i()})),o.panTo({x:c,y:h,scale:d,friction:0,ignoreBounds:!0}),o.stop("current");const g={event:"mousemove"===o.panMode?n.prevMouseMoveEvent||n.options.event:void 0},m=this.optionFor(t,"initialSize");S(s,ct),n.hideLoading(t),"full"===m?o.zoomToFull(g):"cover"===m?o.zoomToCover(g):"max"===m?o.zoomToMax(g):o.reset(.172)}))}getZoomInfo(t){var e;const{el:i,imageEl:n,thumbEl:s,panzoom:o}=t;if(!i||!n||!s||!o||J(s)<3||!this.optionFor(t,"zoom")||this.instance.state===st.Destroy)return!1;if(1!==((null===(e=window.visualViewport)||void 0===e?void 0:e.scale)||1))return!1;let{top:a,left:r,width:l,height:c}=s.getBoundingClientRect(),{top:h,left:d,fitWidth:u,fitHeight:f}=o.contentRect;if(!(l&&c&&u&&f))return!1;const p=o.container.getBoundingClientRect();d+=p.left,h+=p.top;const g=-1*(d+.5*u-(r+.5*l)),m=-1*(h+.5*f-(a+.5*c)),b=l/u;let v=this.option("zoomOpacity")||!1;return"auto"===v&&(v=Math.abs(l/c-u/f)>.1),{x:g,y:m,scale:b,opacity:v}}attach(){const t=this,e=t.instance;e.on("Carousel.change",t.onChange),e.on("Carousel.createSlide",t.onCreateSlide),e.on("Carousel.removeSlide",t.onRemoveSlide),e.on("close",t.onClose)}detach(){const t=this,e=t.instance;e.off("Carousel.change",t.onChange),e.off("Carousel.createSlide",t.onCreateSlide),e.off("Carousel.removeSlide",t.onRemoveSlide),e.off("close",t.onClose)}}Object.defineProperty(ht,"defaults",{enumerable:!0,configurable:!0,writable:!0,value:{initialSize:"fit",Panzoom:{maxScale:1},protected:!1,zoom:!0,zoomOpacity:"auto"}}),"function"==typeof SuppressedError&&SuppressedError;const dt="html",ut="image",ft="map",pt="youtube",gt="vimeo",mt="html5video",bt=(t,e={})=>{const i=new URL(t),n=new URLSearchParams(i.search),s=new URLSearchParams;for(const[t,i]of[...n,...Object.entries(e)]){let e=i.toString();"t"===t?s.set("start",parseInt(e).toString()):s.set(t,e)}let o=s.toString(),a=t.match(/#t=((.*)?\d+s)/);return a&&(o+=`#t=${a[1]}`),o},vt={ajax:null,autoSize:!0,iframeAttr:{allow:"autoplay; fullscreen",scrolling:"auto"},preload:!0,videoAutoplay:!0,videoRatio:16/9,videoTpl:'<video class="fancybox__html5video" playsinline controls controlsList="nodownload" poster="{{poster}}">\n <source src="{{src}}" type="{{format}}" />Sorry, your browser doesn\'t support embedded videos.</video>',videoFormat:"",vimeo:{byline:1,color:"00adef",controls:1,dnt:1,muted:0},youtube:{controls:1,enablejsapi:1,nocookie:1,rel:0,fs:1}},yt=["image","html","ajax","inline","clone","iframe","map","pdf","html5video","youtube","vimeo"];class wt extends B{onBeforeInitSlide(t,e,i){this.processType(i)}onCreateSlide(t,e,i){this.setContent(i)}onClearContent(t,e){e.xhr&&(e.xhr.abort(),e.xhr=null);const i=e.iframeEl;i&&(i.onload=i.onerror=null,i.src="//about:blank",e.iframeEl=null);const n=e.contentEl,s=e.placeholderEl;if("inline"===e.type&&n&&s)n.classList.remove("fancybox__content"),"none"!==n.style.display&&(n.style.display="none"),s.parentNode&&s.parentNode.insertBefore(n,s),s.remove(),e.contentEl=void 0,e.placeholderEl=void 0;else for(;e.el&&e.el.firstChild;)e.el.removeChild(e.el.firstChild)}onSelectSlide(t,e,i){i.state===ot.Ready&&this.playVideo()}onUnselectSlide(t,e,i){var n,s;if(i.type===mt){try{null===(s=null===(n=i.el)||void 0===n?void 0:n.querySelector("video"))||void 0===s||s.pause()}catch(t){}return}let o;i.type===gt?o={method:"pause",value:"true"}:i.type===pt&&(o={event:"command",func:"pauseVideo"}),o&&i.iframeEl&&i.iframeEl.contentWindow&&i.iframeEl.contentWindow.postMessage(JSON.stringify(o),"*"),i.poller&&clearTimeout(i.poller)}onDone(t,e){t.isCurrentSlide(e)&&!t.isClosing()&&this.playVideo()}onRefresh(t,e){e.slides.forEach((t=>{t.el&&(this.resizeIframe(t),this.setAspectRatio(t))}))}onMessage(t){try{let e=JSON.parse(t.data);if("https://player.vimeo.com"===t.origin){if("ready"===e.event)for(let e of Array.from(document.getElementsByClassName("fancybox__iframe")))e instanceof HTMLIFrameElement&&e.contentWindow===t.source&&(e.dataset.ready="true")}else if(t.origin.match(/^https:\/\/(www.)?youtube(-nocookie)?.com$/)&&"onReady"===e.event){const t=document.getElementById(e.id);t&&(t.dataset.ready="true")}}catch(t){}}loadAjaxContent(t){const e=this.instance.optionFor(t,"src")||"";this.instance.showLoading(t);const i=this.instance,n=new XMLHttpRequest;i.showLoading(t),n.onreadystatechange=function(){n.readyState===XMLHttpRequest.DONE&&i.state===st.Ready&&(i.hideLoading(t),200===n.status?i.setContent(t,n.responseText):i.setError(t,404===n.status?"{{AJAX_NOT_FOUND}}":"{{AJAX_FORBIDDEN}}"))};const s=t.ajax||null;n.open(s?"POST":"GET",e+""),n.setRequestHeader("Content-Type","application/x-www-form-urlencoded"),n.setRequestHeader("X-Requested-With","XMLHttpRequest"),n.send(s),t.xhr=n}setInlineContent(t){let e=null;if(x(t.src))e=t.src;else if("string"==typeof t.src){const i=t.src.split("#",2).pop();e=i?document.getElementById(i):null}if(e){if("clone"===t.type||e.closest(".fancybox__slide")){e=e.cloneNode(!0);const i=e.dataset.animationName;i&&(e.classList.remove(i),delete e.dataset.animationName);let n=e.getAttribute("id");n=n?`${n}--clone`:`clone-${this.instance.id}-${t.index}`,e.setAttribute("id",n)}else if(e.parentNode){const i=document.createElement("div");i.classList.add("fancybox-placeholder"),e.parentNode.insertBefore(i,e),t.placeholderEl=i}this.instance.setContent(t,e)}else this.instance.setError(t,"{{ELEMENT_NOT_FOUND}}")}setIframeContent(t){const{src:e,el:i}=t;if(!e||"string"!=typeof e||!i)return;i.classList.add("is-loading");const n=this.instance,s=document.createElement("iframe");s.className="fancybox__iframe",s.setAttribute("id",`fancybox__iframe_${n.id}_${t.index}`);for(const[e,i]of Object.entries(this.optionFor(t,"iframeAttr")||{}))s.setAttribute(e,i);s.onerror=()=>{n.setError(t,"{{IFRAME_ERROR}}")},t.iframeEl=s;const o=this.optionFor(t,"preload");if("iframe"!==t.type||!1===o)return s.setAttribute("src",t.src+""),n.setContent(t,s,!1),this.resizeIframe(t),void n.revealContent(t);n.showLoading(t),s.onload=()=>{if(!s.src.length)return;const e="true"!==s.dataset.ready;s.dataset.ready="true",this.resizeIframe(t),e?n.revealContent(t):n.hideLoading(t)},s.setAttribute("src",e),n.setContent(t,s,!1)}resizeIframe(t){const{type:e,iframeEl:i}=t;if(e===pt||e===gt)return;const n=null==i?void 0:i.parentElement;if(!i||!n)return;let s=t.autoSize;void 0===s&&(s=this.optionFor(t,"autoSize"));let o=t.width||0,a=t.height||0;o&&a&&(s=!1);const r=n&&n.style;if(!1!==t.preload&&!1!==s&&r)try{const t=window.getComputedStyle(n),e=parseFloat(t.paddingLeft)+parseFloat(t.paddingRight),s=parseFloat(t.paddingTop)+parseFloat(t.paddingBottom),l=i.contentWindow;if(l){const t=l.document,i=t.getElementsByTagName(dt)[0],n=t.body;r.width="",n.style.overflow="hidden",o=o||i.scrollWidth+e,r.width=`${o}px`,n.style.overflow="",r.flex="0 0 auto",r.height=`${n.scrollHeight}px`,a=i.scrollHeight+s}}catch(t){}if(o||a){const t={flex:"0 1 auto",width:"",height:""};o&&"auto"!==o&&(t.width=`${o}px`),a&&"auto"!==a&&(t.height=`${a}px`),Object.assign(r,t)}}playVideo(){const t=this.instance.getSlide();if(!t)return;const{el:e}=t;if(!e||!e.offsetParent)return;if(!this.optionFor(t,"videoAutoplay"))return;if(t.type===mt)try{const t=e.querySelector("video");if(t){const e=t.play();void 0!==e&&e.then((()=>{})).catch((e=>{t.muted=!0,t.play()}))}}catch(t){}if(t.type!==pt&&t.type!==gt)return;const i=()=>{if(t.iframeEl&&t.iframeEl.contentWindow){let e;if("true"===t.iframeEl.dataset.ready)return e=t.type===pt?{event:"command",func:"playVideo"}:{method:"play",value:"true"},e&&t.iframeEl.contentWindow.postMessage(JSON.stringify(e),"*"),void(t.poller=void 0);t.type===pt&&(e={event:"listening",id:t.iframeEl.getAttribute("id")},t.iframeEl.contentWindow.postMessage(JSON.stringify(e),"*"))}t.poller=setTimeout(i,250)};i()}processType(t){if(t.html)return t.type=dt,t.src=t.html,void(t.html="");const e=this.instance.optionFor(t,"src","");if(!e||"string"!=typeof e)return;let i=t.type,n=null;if(n=e.match(/(youtube\.com|youtu\.be|youtube\-nocookie\.com)\/(?:watch\?(?:.*&)?v=|v\/|u\/|shorts\/|embed\/?)?(videoseries\?list=(?:.*)|[\w-]{11}|\?listType=(?:.*)&list=(?:.*))(?:.*)/i)){const s=this.optionFor(t,pt),{nocookie:o}=s,a=function(t,e){var i={};for(var n in t)Object.prototype.hasOwnProperty.call(t,n)&&e.indexOf(n)<0&&(i[n]=t[n]);if(null!=t&&"function"==typeof Object.getOwnPropertySymbols){var s=0;for(n=Object.getOwnPropertySymbols(t);s<n.length;s++)e.indexOf(n[s])<0&&Object.prototype.propertyIsEnumerable.call(t,n[s])&&(i[n[s]]=t[n[s]])}return i}(s,["nocookie"]),r=`www.youtube${o?"-nocookie":""}.com`,l=bt(e,a),c=encodeURIComponent(n[2]);t.videoId=c,t.src=`https://${r}/embed/${c}?${l}`,t.thumbSrc=t.thumbSrc||`https://i.ytimg.com/vi/${c}/mqdefault.jpg`,i=pt}else if(n=e.match(/^.+vimeo.com\/(?:\/)?([\d]+)((\/|\?h=)([a-z0-9]+))?(.*)?/)){const s=bt(e,this.optionFor(t,gt)),o=encodeURIComponent(n[1]),a=n[4]||"";t.videoId=o,t.src=`https://player.vimeo.com/video/${o}?${a?`h=${a}${s?"&":""}`:""}${s}`,i=gt}if(!i&&t.triggerEl){const e=t.triggerEl.dataset.type;yt.includes(e)&&(i=e)}i||"string"==typeof e&&("#"===e.charAt(0)?i="inline":(n=e.match(/\.(mp4|mov|ogv|webm)((\?|#).*)?$/i))?(i=mt,t.videoFormat=t.videoFormat||"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=ut:e.match(/\.(pdf)((\?|#).*)?$/i)&&(i="pdf")),(n=e.match(/(?:maps\.)?google\.([a-z]{2,3}(?:\.[a-z]{2})?)\/(?:(?:(?:maps\/(?:place\/(?:.*)\/)?\@(.*),(\d+.?\d+?)z))|(?:\?ll=))(.*)?/i))?(t.src=`https://maps.google.${n[1]}/?ll=${(n[2]?n[2]+"&z="+Math.floor(parseFloat(n[3]))+(n[4]?n[4].replace(/^\//,"&"):""):n[4]+"").replace(/\?/,"&")}&output=${n[4]&&n[4].indexOf("layer=c")>0?"svembed":"embed"}`,i=ft):(n=e.match(/(?:maps\.)?google\.([a-z]{2,3}(?:\.[a-z]{2})?)\/(?:maps\/search\/)(.*)/i))&&(t.src=`https://maps.google.${n[1]}/maps?q=${n[2].replace("query=","q=").replace("api=1","")}&output=embed`,i=ft),i=i||this.instance.option("defaultType"),t.type=i,i===ut&&(t.thumbSrc=t.thumbSrc||t.src)}setContent(t){const e=this.instance.optionFor(t,"src")||"";if(t&&t.type&&e){switch(t.type){case dt:this.instance.setContent(t,e);break;case mt:const i=this.option("videoTpl");i&&this.instance.setContent(t,i.replace(/\{\{src\}\}/gi,e+"").replace(/\{\{format\}\}/gi,this.optionFor(t,"videoFormat")||"").replace(/\{\{poster\}\}/gi,t.poster||t.thumbSrc||""));break;case"inline":case"clone":this.setInlineContent(t);break;case"ajax":this.loadAjaxContent(t);break;case"pdf":case ft:case pt:case gt:t.preload=!1;case"iframe":this.setIframeContent(t)}this.setAspectRatio(t)}}setAspectRatio(t){const e=t.contentEl;if(!(t.el&&e&&t.type&&[pt,gt,mt].includes(t.type)))return;let i,n=t.width||"auto",s=t.height||"auto";if("auto"===n||"auto"===s){i=this.optionFor(t,"videoRatio");const e=(i+"").match(/(\d+)\s*\/\s?(\d+)/);i=e&&e.length>2?parseFloat(e[1])/parseFloat(e[2]):parseFloat(i+"")}else n&&s&&(i=n/s);if(!i)return;e.style.aspectRatio="",e.style.width="",e.style.height="",e.offsetHeight;const o=e.getBoundingClientRect(),a=o.width||1,r=o.height||1;e.style.aspectRatio=i+"",i<a/r?(s="auto"===s?r:Math.min(r,s),e.style.width="auto",e.style.height=`${s}px`):(n="auto"===n?a:Math.min(a,n),e.style.width=`${n}px`,e.style.height="auto")}attach(){const t=this,e=t.instance;e.on("Carousel.beforeInitSlide",t.onBeforeInitSlide),e.on("Carousel.createSlide",t.onCreateSlide),e.on("Carousel.selectSlide",t.onSelectSlide),e.on("Carousel.unselectSlide",t.onUnselectSlide),e.on("Carousel.Panzoom.refresh",t.onRefresh),e.on("done",t.onDone),e.on("clearContent",t.onClearContent),window.addEventListener("message",t.onMessage)}detach(){const t=this,e=t.instance;e.off("Carousel.beforeInitSlide",t.onBeforeInitSlide),e.off("Carousel.createSlide",t.onCreateSlide),e.off("Carousel.selectSlide",t.onSelectSlide),e.off("Carousel.unselectSlide",t.onUnselectSlide),e.off("Carousel.Panzoom.refresh",t.onRefresh),e.off("done",t.onDone),e.off("clearContent",t.onClearContent),window.removeEventListener("message",t.onMessage)}}Object.defineProperty(wt,"defaults",{enumerable:!0,configurable:!0,writable:!0,value:vt});const xt="play",Et="pause",St="ready";class Pt extends B{constructor(){super(...arguments),Object.defineProperty(this,"state",{enumerable:!0,configurable:!0,writable:!0,value:St}),Object.defineProperty(this,"inHover",{enumerable:!0,configurable:!0,writable:!0,value:!1}),Object.defineProperty(this,"timer",{enumerable:!0,configurable:!0,writable:!0,value:null}),Object.defineProperty(this,"progressBar",{enumerable:!0,configurable:!0,writable:!0,value:null})}get isActive(){return this.state!==St}onReady(t){this.option("autoStart")&&(t.isInfinite||t.page<t.pages.length-1)&&this.start()}onChange(){var t;(null===(t=this.instance.panzoom)||void 0===t?void 0:t.isResting)||(this.removeProgressBar(),this.pause())}onSettle(){this.resume()}onVisibilityChange(){"visible"===document.visibilityState?this.resume():this.pause()}onMouseEnter(){this.inHover=!0,this.pause()}onMouseLeave(){var t;this.inHover=!1,(null===(t=this.instance.panzoom)||void 0===t?void 0:t.isResting)&&this.resume()}onTimerEnd(){const t=this.instance;"play"===this.state&&(t.isInfinite||t.page!==t.pages.length-1?t.slideNext():t.slideTo(0))}removeProgressBar(){this.progressBar&&(this.progressBar.remove(),this.progressBar=null)}createProgressBar(){var t;if(!this.option("showProgress"))return null;this.removeProgressBar();const e=this.instance,i=(null===(t=e.pages[e.page])||void 0===t?void 0:t.slides)||[];let n=this.option("progressParentEl");if(n||(n=(1===i.length?i[0].el:null)||e.viewport),!n)return null;const s=document.createElement("div");return S(s,"f-progress"),n.prepend(s),this.progressBar=s,s.offsetHeight,s}set(){const t=this,e=t.instance;if(e.pages.length<2)return;if(t.timer)return;const i=t.option("timeout");t.state=xt,S(e.container,"has-autoplay");let n=t.createProgressBar();n&&(n.style.transitionDuration=`${i}ms`,n.style.transform="scaleX(1)"),t.timer=setTimeout((()=>{t.timer=null,t.inHover||t.onTimerEnd()}),i),t.emit("set")}clear(){const t=this;t.timer&&(clearTimeout(t.timer),t.timer=null),t.removeProgressBar()}start(){const t=this;if(t.set(),t.state!==St){if(t.option("pauseOnHover")){const e=t.instance.container;e.addEventListener("mouseenter",t.onMouseEnter,!1),e.addEventListener("mouseleave",t.onMouseLeave,!1)}document.addEventListener("visibilitychange",t.onVisibilityChange,!1),t.emit("start")}}stop(){const t=this,e=t.state,i=t.instance.container;t.clear(),t.state=St,i.removeEventListener("mouseenter",t.onMouseEnter,!1),i.removeEventListener("mouseleave",t.onMouseLeave,!1),document.removeEventListener("visibilitychange",t.onVisibilityChange,!1),E(i,"has-autoplay"),e!==St&&t.emit("stop")}pause(){const t=this;t.state===xt&&(t.state=Et,t.clear(),t.emit(Et))}resume(){const t=this,e=t.instance;if(e.isInfinite||e.page!==e.pages.length-1)if(t.state!==xt){if(t.state===Et&&!t.inHover){const e=new Event("resume",{bubbles:!0,cancelable:!0});t.emit("resume",e),e.defaultPrevented||t.set()}}else t.set();else t.stop()}toggle(){this.state===xt||this.state===Et?this.stop():this.start()}attach(){const t=this,e=t.instance;e.on("ready",t.onReady),e.on("Panzoom.startAnimation",t.onChange),e.on("Panzoom.endAnimation",t.onSettle),e.on("Panzoom.touchMove",t.onChange)}detach(){const t=this,e=t.instance;e.off("ready",t.onReady),e.off("Panzoom.startAnimation",t.onChange),e.off("Panzoom.endAnimation",t.onSettle),e.off("Panzoom.touchMove",t.onChange),t.stop()}}Object.defineProperty(Pt,"defaults",{enumerable:!0,configurable:!0,writable:!0,value:{autoStart:!0,pauseOnHover:!0,progressParentEl:null,showProgress:!0,timeout:3e3}});class Ct extends B{constructor(){super(...arguments),Object.defineProperty(this,"ref",{enumerable:!0,configurable:!0,writable:!0,value:null})}onPrepare(t){const e=t.carousel;if(!e)return;const i=t.container;i&&(e.options.Autoplay=u({autoStart:!1},this.option("Autoplay")||{},{pauseOnHover:!1,timeout:this.option("timeout"),progressParentEl:()=>this.option("progressParentEl")||null,on:{start:()=>{t.emit("startSlideshow")},set:e=>{var n;i.classList.add("has-slideshow"),(null===(n=t.getSlide())||void 0===n?void 0:n.state)!==ot.Ready&&e.pause()},stop:()=>{i.classList.remove("has-slideshow"),t.isCompact||t.endIdle(),t.emit("endSlideshow")},resume:(e,i)=>{var n,s,o;!i||!i.cancelable||(null===(n=t.getSlide())||void 0===n?void 0:n.state)===ot.Ready&&(null===(o=null===(s=t.carousel)||void 0===s?void 0:s.panzoom)||void 0===o?void 0:o.isResting)||i.preventDefault()}}}),e.attachPlugins({Autoplay:Pt}),this.ref=e.plugins.Autoplay)}onReady(t){const e=t.carousel,i=this.ref;i&&e&&this.option("playOnStart")&&(e.isInfinite||e.page<e.pages.length-1)&&i.start()}onDone(t,e){const i=this.ref,n=t.carousel;if(!i||!n)return;const s=e.panzoom;s&&s.on("startAnimation",(()=>{t.isCurrentSlide(e)&&i.stop()})),t.isCurrentSlide(e)&&i.resume()}onKeydown(t,e){var i;const n=this.ref;n&&e===this.option("key")&&"BUTTON"!==(null===(i=document.activeElement)||void 0===i?void 0:i.nodeName)&&n.toggle()}attach(){const t=this,e=t.instance;e.on("Carousel.init",t.onPrepare),e.on("Carousel.ready",t.onReady),e.on("done",t.onDone),e.on("keydown",t.onKeydown)}detach(){const t=this,e=t.instance;e.off("Carousel.init",t.onPrepare),e.off("Carousel.ready",t.onReady),e.off("done",t.onDone),e.off("keydown",t.onKeydown)}}Object.defineProperty(Ct,"defaults",{enumerable:!0,configurable:!0,writable:!0,value:{key:" ",playOnStart:!1,progressParentEl:t=>{var e;return(null===(e=t.instance.container)||void 0===e?void 0:e.querySelector(".fancybox__toolbar [data-fancybox-toggle-slideshow]"))||t.instance.container},timeout:3e3}});const Tt={classes:{container:"f-thumbs f-carousel__thumbs",viewport:"f-thumbs__viewport",track:"f-thumbs__track",slide:"f-thumbs__slide",isResting:"is-resting",isSelected:"is-selected",isLoading:"is-loading",hasThumbs:"has-thumbs"},minCount:2,parentEl:null,thumbTpl:'<button class="f-thumbs__slide__button" tabindex="0" type="button" aria-label="{{GOTO}}" data-carousel-index="%i"><img class="f-thumbs__slide__img" data-lazy-src="{{%s}}" alt="" /></button>',type:"modern"};var Mt;!function(t){t[t.Init=0]="Init",t[t.Ready=1]="Ready",t[t.Hidden=2]="Hidden"}(Mt||(Mt={}));const Ot="isResting",At="thumbWidth",Lt="thumbHeight",zt="thumbClipWidth";let Rt=class extends B{constructor(){super(...arguments),Object.defineProperty(this,"type",{enumerable:!0,configurable:!0,writable:!0,value:"modern"}),Object.defineProperty(this,"container",{enumerable:!0,configurable:!0,writable:!0,value:null}),Object.defineProperty(this,"track",{enumerable:!0,configurable:!0,writable:!0,value:null}),Object.defineProperty(this,"carousel",{enumerable:!0,configurable:!0,writable:!0,value:null}),Object.defineProperty(this,"thumbWidth",{enumerable:!0,configurable:!0,writable:!0,value:0}),Object.defineProperty(this,"thumbClipWidth",{enumerable:!0,configurable:!0,writable:!0,value:0}),Object.defineProperty(this,"thumbHeight",{enumerable:!0,configurable:!0,writable:!0,value:0}),Object.defineProperty(this,"thumbGap",{enumerable:!0,configurable:!0,writable:!0,value:0}),Object.defineProperty(this,"thumbExtraGap",{enumerable:!0,configurable:!0,writable:!0,value:0}),Object.defineProperty(this,"state",{enumerable:!0,configurable:!0,writable:!0,value:Mt.Init})}get isModern(){return"modern"===this.type}onInitSlide(t,e){const i=e.el?e.el.dataset:void 0;i&&(e.thumbSrc=i.thumbSrc||e.thumbSrc||"",e[zt]=parseFloat(i[zt]||"")||e[zt]||0,e[Lt]=parseFloat(i.thumbHeight||"")||e[Lt]||0),this.addSlide(e)}onInitSlides(){this.build()}onChange(){var t;if(!this.isModern)return;const e=this.container,i=this.instance,n=i.panzoom,s=this.carousel,a=s?s.panzoom:null,r=i.page;if(n&&s&&a){if(n.isDragging){E(e,this.cn(Ot));let n=(null===(t=s.pages[r])||void 0===t?void 0:t.pos)||0;n+=i.getProgress(r)*(this[zt]+this.thumbGap);let o=a.getBounds();-1*n>o.x.min&&-1*n<o.x.max&&a.panTo({x:-1*n,friction:.12})}else o(e,this.cn(Ot),n.isResting);this.shiftModern()}}onRefresh(){this.updateProps();for(const t of this.instance.slides||[])this.resizeModernSlide(t);this.shiftModern()}isDisabled(){const t=this.option("minCount")||0;if(t){const e=this.instance;let i=0;for(const t of e.slides||[])t.thumbSrc&&i++;if(i<t)return!0}const e=this.option("type");return["modern","classic"].indexOf(e)<0}getThumb(t){const e=this.option("thumbTpl")||"";return{html:this.instance.localize(e,[["%i",t.index],["%d",t.index+1],["%s",t.thumbSrc||"data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7"]])}}addSlide(t){const e=this.carousel;e&&e.addSlide(t.index,this.getThumb(t))}getSlides(){const t=[];for(const e of this.instance.slides||[])t.push(this.getThumb(e));return t}resizeModernSlide(t){this.isModern&&(t[At]=t[zt]&&t[Lt]?Math.round(this[Lt]*(t[zt]/t[Lt])):this[At])}updateProps(){const t=this.container;if(!t)return;const e=e=>parseFloat(getComputedStyle(t).getPropertyValue("--f-thumb-"+e))||0;this.thumbGap=e("gap"),this.thumbExtraGap=e("extra-gap"),this[At]=e("width")||40,this[zt]=e("clip-width")||40,this[Lt]=e("height")||40}build(){const t=this;if(t.state!==Mt.Init)return;if(t.isDisabled())return;const e=t.instance,i=e.container,n=t.getSlides(),s=t.option("type");t.type=s;const o=document.createElement("div");S(o,t.cn("container")),S(o,`is-${s}`);const a=t.option("parentEl");a?a.appendChild(o):i.after(o),S(i,t.cn("hasThumbs")),t.container=o,t.updateProps();const r=document.createElement("div");S(r,t.cn("track")),o.appendChild(r),t.track=r;const l=u({},{track:r,infinite:!1,center:!0,fill:"classic"===s,dragFree:!0,slidesPerPage:1,transition:!1,preload:.25,friction:.12,Panzoom:{maxVelocity:0},Dots:!1,Navigation:!1,classes:{container:"f-thumbs",viewport:"f-thumbs__viewport",track:"f-thumbs__track",slide:"f-thumbs__slide"}},t.option("Carousel")||{},{Sync:{target:e},slides:n}),c=new e.constructor(o,l);c.on("createSlide",((e,i)=>{t.setProps(i.index),t.emit("createSlide",i,i.el)})),c.on("ready",(()=>{t.shiftModern(),t.emit("ready")})),c.on("refresh",(()=>{t.shiftModern()})),c.on("Panzoom.click",((e,i,n)=>{t.onClick(n)})),t.carousel=c,t.state=Mt.Ready}onClick(t){t.preventDefault(),t.stopPropagation();const e=this.instance,{pages:i,page:n}=e,s=t=>{if(t){const e=t.closest("[data-carousel-index]");if(e)return[parseInt(e.dataset.carouselIndex||"",10)||0,e]}return[-1,void 0]},o=(t,e)=>{const i=document.elementFromPoint(t,e);return i?s(i):[-1,void 0]};let[a,r]=s(t.target);if(a>-1)return;const l=this[zt],c=t.clientX,h=t.clientY;let[d,u]=o(c-l,h),[f,p]=o(c+l,h);u&&p?(a=Math.abs(c-u.getBoundingClientRect().right)<Math.abs(c-p.getBoundingClientRect().left)?d:f,a===n&&(a=a===d?f:d)):u?a=d:p&&(a=f),a>-1&&i[a]&&e.slideTo(a)}getShift(t){var e;const i=this,{instance:n}=i,s=i.carousel;if(!n||!s)return 0;const o=i[At],a=i[zt],r=i.thumbGap,l=i.thumbExtraGap;if(!(null===(e=s.slides[t])||void 0===e?void 0:e.el))return 0;const c=.5*(o-a),h=n.pages.length-1;let d=n.getProgress(0),u=n.getProgress(h),f=n.getProgress(t,!1,!0),p=0,g=c+l+r;const m=d<0&&d>-1,b=u>0&&u<1;return 0===t?(p=g*Math.abs(d),b&&1===d&&(p-=g*Math.abs(u))):t===h?(p=g*Math.abs(u)*-1,m&&-1===u&&(p+=g*Math.abs(d))):m||b?(p=-1*g,p+=g*Math.abs(d),p+=g*(1-Math.abs(u))):p=g*f,p}setProps(e){const i=this;if(!i.isModern)return;const{instance:n}=i,s=i.carousel;if(n&&s){const o=s.slides[e].el;if(o&&o.childNodes.length){let s=t(1-Math.abs(n.getProgress(e))),a=t(i.getShift(e));o.style.setProperty("--progress",s?s+"":""),o.style.setProperty("--shift",a+"")}}}shiftModern(){const t=this;if(!t.isModern)return;const{instance:e,track:i}=t,n=e.panzoom,s=t.carousel;if(!(e&&i&&n&&s))return;if(n.state===m.Init||n.state===m.Destroy)return;for(const i of e.slides)t.setProps(i.index);let o=(t[zt]+t.thumbGap)*(s.slides.length||0);i.style.setProperty("--width",o+"")}cleanup(){const t=this;t.carousel&&t.carousel.destroy(),t.carousel=null,t.container&&t.container.remove(),t.container=null,t.track&&t.track.remove(),t.track=null,t.state=Mt.Init,E(t.instance.container,t.cn("hasThumbs"))}attach(){const t=this,e=t.instance;e.on("initSlide",t.onInitSlide),e.state===F.Init?e.on("initSlides",t.onInitSlides):t.onInitSlides(),e.on(["change","Panzoom.afterTransform"],t.onChange),e.on("Panzoom.refresh",t.onRefresh)}detach(){const t=this,e=t.instance;e.off("initSlide",t.onInitSlide),e.off("initSlides",t.onInitSlides),e.off(["change","Panzoom.afterTransform"],t.onChange),e.off("Panzoom.refresh",t.onRefresh),t.cleanup()}};Object.defineProperty(Rt,"defaults",{enumerable:!0,configurable:!0,writable:!0,value:Tt});const kt=Object.assign(Object.assign({},Tt),{key:"t",showOnStart:!0,parentEl:null}),It="is-masked",Dt="aria-hidden";class Ft extends B{constructor(){super(...arguments),Object.defineProperty(this,"ref",{enumerable:!0,configurable:!0,writable:!0,value:null}),Object.defineProperty(this,"hidden",{enumerable:!0,configurable:!0,writable:!0,value:!1})}get isEnabled(){const t=this.ref;return t&&!t.isDisabled()}get isHidden(){return this.hidden}onClick(t,e){e.stopPropagation()}onCreateSlide(t,e){var i,n,s;const o=(null===(s=null===(n=null===(i=this.instance)||void 0===i?void 0:i.carousel)||void 0===n?void 0:n.slides[e.index])||void 0===s?void 0:s.type)||"",a=e.el;if(a&&o){let t=`for-${o}`;["video","youtube","vimeo","html5video"].includes(o)&&(t+=" for-video"),S(a,t)}}onInit(){var t;const e=this,i=e.instance,n=i.carousel;if(e.ref||!n)return;const s=e.option("parentEl")||i.footer||i.container;if(!s)return;const o=u({},e.options,{parentEl:s,classes:{container:"f-thumbs fancybox__thumbs"},Carousel:{Sync:{friction:i.option("Carousel.friction")||0}},on:{ready:t=>{const i=t.container;i&&this.hidden&&(e.refresh(),i.style.transition="none",e.hide(),i.offsetHeight,queueMicrotask((()=>{i.style.transition="",e.show()})))}}});o.Carousel=o.Carousel||{},o.Carousel.on=u((null===(t=e.options.Carousel)||void 0===t?void 0:t.on)||{},{click:this.onClick,createSlide:this.onCreateSlide}),n.options.Thumbs=o,n.attachPlugins({Thumbs:Rt}),e.ref=n.plugins.Thumbs,e.option("showOnStart")||(e.ref.state=Mt.Hidden,e.hidden=!0)}onResize(){var t;const e=null===(t=this.ref)||void 0===t?void 0:t.container;e&&(e.style.maxHeight="")}onKeydown(t,e){const i=this.option("key");i&&i===e&&this.toggle()}toggle(){const t=this.ref;if(t&&!t.isDisabled())return t.state===Mt.Hidden?(t.state=Mt.Init,void t.build()):void(this.hidden?this.show():this.hide())}show(){const t=this.ref;if(!t||t.isDisabled())return;const e=t.container;e&&(this.refresh(),e.offsetHeight,e.removeAttribute(Dt),e.classList.remove(It),this.hidden=!1)}hide(){const t=this.ref,e=t&&t.container;e&&(this.refresh(),e.offsetHeight,e.classList.add(It),e.setAttribute(Dt,"true")),this.hidden=!0}refresh(){const t=this.ref;if(!t||!t.state)return;const e=t.container,i=(null==e?void 0:e.firstChild)||null;e&&i&&i.childNodes.length&&(e.style.maxHeight=`${i.getBoundingClientRect().height}px`)}attach(){const t=this,e=t.instance;e.state===st.Init?e.on("Carousel.init",t.onInit):t.onInit(),e.on("resize",t.onResize),e.on("keydown",t.onKeydown)}detach(){var t;const e=this,i=e.instance;i.off("Carousel.init",e.onInit),i.off("resize",e.onResize),i.off("keydown",e.onKeydown),null===(t=i.carousel)||void 0===t||t.detachPlugins(["Thumbs"]),e.ref=null}}Object.defineProperty(Ft,"defaults",{enumerable:!0,configurable:!0,writable:!0,value:kt});const jt={panLeft:{icon:'<svg><path d="M5 12h14M5 12l6 6M5 12l6-6"/></svg>',change:{panX:-100}},panRight:{icon:'<svg><path d="M5 12h14M13 18l6-6M13 6l6 6"/></svg>',change:{panX:100}},panUp:{icon:'<svg><path d="M12 5v14M18 11l-6-6M6 11l6-6"/></svg>',change:{panY:-100}},panDown:{icon:'<svg><path d="M12 5v14M18 13l-6 6M6 13l6 6"/></svg>',change:{panY:100}},zoomIn:{icon:'<svg><circle cx="11" cy="11" r="7.5"/><path d="m21 21-4.35-4.35M11 8v6M8 11h6"/></svg>',action:"zoomIn"},zoomOut:{icon:'<svg><circle cx="11" cy="11" r="7.5"/><path d="m21 21-4.35-4.35M8 11h6"/></svg>',action:"zoomOut"},toggle1to1:{icon:'<svg><path d="M3.51 3.07c5.74.02 11.48-.02 17.22.02 1.37.1 2.34 1.64 2.18 3.13 0 4.08.02 8.16 0 12.23-.1 1.54-1.47 2.64-2.79 2.46-5.61-.01-11.24.02-16.86-.01-1.36-.12-2.33-1.65-2.17-3.14 0-4.07-.02-8.16 0-12.23.1-1.36 1.22-2.48 2.42-2.46Z"/><path d="M5.65 8.54h1.49v6.92m8.94-6.92h1.49v6.92M11.5 9.4v.02m0 5.18v0"/></svg>',action:"toggleZoom"},toggleZoom:{icon:'<svg><g><line x1="11" y1="8" x2="11" y2="14"></line></g><circle cx="11" cy="11" r="7.5"/><path d="m21 21-4.35-4.35M8 11h6"/></svg>',action:"toggleZoom"},iterateZoom:{icon:'<svg><g><line x1="11" y1="8" x2="11" y2="14"></line></g><circle cx="11" cy="11" r="7.5"/><path d="m21 21-4.35-4.35M8 11h6"/></svg>',action:"iterateZoom"},rotateCCW:{icon:'<svg><path d="M15 4.55a8 8 0 0 0-6 14.9M9 15v5H4M18.37 7.16v.01M13 19.94v.01M16.84 18.37v.01M19.37 15.1v.01M19.94 11v.01"/></svg>',action:"rotateCCW"},rotateCW:{icon:'<svg><path d="M9 4.55a8 8 0 0 1 6 14.9M15 15v5h5M5.63 7.16v.01M4.06 11v.01M4.63 15.1v.01M7.16 18.37v.01M11 19.94v.01"/></svg>',action:"rotateCW"},flipX:{icon:'<svg style="stroke-width: 1.3"><path d="M12 3v18M16 7v10h5L16 7M8 7v10H3L8 7"/></svg>',action:"flipX"},flipY:{icon:'<svg style="stroke-width: 1.3"><path d="M3 12h18M7 16h10L7 21v-5M7 8h10L7 3v5"/></svg>',action:"flipY"},fitX:{icon:'<svg><path d="M4 12V6a2 2 0 0 1 2-2h12a2 2 0 0 1 2 2v6M10 18H3M21 18h-7M6 15l-3 3 3 3M18 15l3 3-3 3"/></svg>',action:"fitX"},fitY:{icon:'<svg><path d="M12 20H6a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2h6M18 14v7M18 3v7M15 18l3 3 3-3M15 6l3-3 3 3"/></svg>',action:"fitY"},reset:{icon:'<svg><path d="M20 11A8.1 8.1 0 0 0 4.5 9M4 5v4h4M4 13a8.1 8.1 0 0 0 15.5 2m.5 4v-4h-4"/></svg>',action:"reset"},toggleFS:{icon:'<svg><g><path d="M14.5 9.5 21 3m0 0h-6m6 0v6M3 21l6.5-6.5M3 21v-6m0 6h6"/></g><g><path d="m14 10 7-7m-7 7h6m-6 0V4M3 21l7-7m0 0v6m0-6H4"/></g></svg>',action:"toggleFS"}};var Ht;!function(t){t[t.Init=0]="Init",t[t.Ready=1]="Ready",t[t.Disabled=2]="Disabled"}(Ht||(Ht={}));const Bt={absolute:"auto",display:{left:["infobar"],middle:[],right:["iterateZoom","slideshow","fullscreen","thumbs","close"]},enabled:"auto",items:{infobar:{tpl:'<div class="fancybox__infobar" tabindex="-1"><span data-fancybox-current-index></span>/<span data-fancybox-count></span></div>'},download:{tpl:'<a class="f-button" title="{{DOWNLOAD}}" data-fancybox-download href="javasript:;"><svg><path d="M4 17v2a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2v-2M7 11l5 5 5-5M12 4v12"/></svg></a>'},prev:{tpl:'<button class="f-button" title="{{PREV}}" data-fancybox-prev><svg><path d="m15 6-6 6 6 6"/></svg></button>'},next:{tpl:'<button class="f-button" title="{{NEXT}}" data-fancybox-next><svg><path d="m9 6 6 6-6 6"/></svg></button>'},slideshow:{tpl:'<button class="f-button" title="{{TOGGLE_SLIDESHOW}}" data-fancybox-toggle-slideshow><svg><g><path d="M8 4v16l13 -8z"></path></g><g><path d="M8 4v15M17 4v15"/></g></svg></button>'},fullscreen:{tpl:'<button class="f-button" title="{{TOGGLE_FULLSCREEN}}" data-fancybox-toggle-fullscreen><svg><g><path d="M4 8V6a2 2 0 0 1 2-2h2M4 16v2a2 2 0 0 0 2 2h2M16 4h2a2 2 0 0 1 2 2v2M16 20h2a2 2 0 0 0 2-2v-2"/></g><g><path d="M15 19v-2a2 2 0 0 1 2-2h2M15 5v2a2 2 0 0 0 2 2h2M5 15h2a2 2 0 0 1 2 2v2M5 9h2a2 2 0 0 0 2-2V5"/></g></svg></button>'},thumbs:{tpl:'<button class="f-button" title="{{TOGGLE_THUMBS}}" data-fancybox-toggle-thumbs><svg><circle cx="5.5" cy="5.5" r="1"/><circle cx="12" cy="5.5" r="1"/><circle cx="18.5" cy="5.5" r="1"/><circle cx="5.5" cy="12" r="1"/><circle cx="12" cy="12" r="1"/><circle cx="18.5" cy="12" r="1"/><circle cx="5.5" cy="18.5" r="1"/><circle cx="12" cy="18.5" r="1"/><circle cx="18.5" cy="18.5" r="1"/></svg></button>'},close:{tpl:'<button class="f-button" title="{{CLOSE}}" data-fancybox-close><svg><path d="m19.5 4.5-15 15M4.5 4.5l15 15"/></svg></button>'}},parentEl:null},Nt={tabindex:"-1",width:"24",height:"24",viewBox:"0 0 24 24",xmlns:"http://www.w3.org/2000/svg"};class _t extends B{constructor(){super(...arguments),Object.defineProperty(this,"state",{enumerable:!0,configurable:!0,writable:!0,value:Ht.Init}),Object.defineProperty(this,"container",{enumerable:!0,configurable:!0,writable:!0,value:null})}onReady(t){var e;if(!t.carousel)return;let i=this.option("display"),n=this.option("absolute"),s=this.option("enabled");if("auto"===s){const t=this.instance.carousel;let e=0;if(t)for(const i of t.slides)(i.panzoom||"image"===i.type)&&e++;e||(s=!1)}s||(i=void 0);let o=0;const a={left:[],middle:[],right:[]};if(i)for(const t of["left","middle","right"])for(const n of i[t]){const i=this.createEl(n);i&&(null===(e=a[t])||void 0===e||e.push(i),o++)}let r=null;if(o&&(r=this.createContainer()),r){for(const[t,e]of Object.entries(a)){const i=document.createElement("div");S(i,"fancybox__toolbar__column is-"+t);for(const t of e)i.appendChild(t);"auto"!==n||"middle"!==t||e.length||(n=!0),r.appendChild(i)}!0===n&&S(r,"is-absolute"),this.state=Ht.Ready,this.onRefresh()}else this.state=Ht.Disabled}onClick(t){var e,i;const n=this.instance,s=n.getSlide(),o=null==s?void 0:s.panzoom,a=t.target,r=a&&x(a)?a.dataset:null;if(!r)return;if(void 0!==r.fancyboxToggleThumbs)return t.preventDefault(),t.stopPropagation(),void(null===(e=n.plugins.Thumbs)||void 0===e||e.toggle());if(void 0!==r.fancyboxToggleFullscreen)return t.preventDefault(),t.stopPropagation(),void this.instance.toggleFullscreen();if(void 0!==r.fancyboxToggleSlideshow){t.preventDefault(),t.stopPropagation();const e=null===(i=n.carousel)||void 0===i?void 0:i.plugins.Autoplay;let s=e.isActive;return o&&"mousemove"===o.panMode&&!s&&o.reset(),void(s?e.stop():e.start())}const l=r.panzoomAction,c=r.panzoomChange;if((c||l)&&(t.preventDefault(),t.stopPropagation()),c){let t={};try{t=JSON.parse(c)}catch(t){}o&&o.applyChange(t)}else l&&o&&o[l]&&o[l]()}onChange(){this.onRefresh()}onRefresh(){if(this.instance.isClosing())return;const t=this.container;if(!t)return;const e=this.instance.getSlide();if(!e||e.state!==ot.Ready)return;const i=e&&!e.error&&e.panzoom;for(const e of t.querySelectorAll("[data-panzoom-action]"))i?(e.removeAttribute("disabled"),e.removeAttribute("tabindex")):(e.setAttribute("disabled",""),e.setAttribute("tabindex","-1"));let n=i&&i.canZoomIn(),s=i&&i.canZoomOut();for(const e of t.querySelectorAll('[data-panzoom-action="zoomIn"]'))n?(e.removeAttribute("disabled"),e.removeAttribute("tabindex")):(e.setAttribute("disabled",""),e.setAttribute("tabindex","-1"));for(const e of t.querySelectorAll('[data-panzoom-action="zoomOut"]'))s?(e.removeAttribute("disabled"),e.removeAttribute("tabindex")):(e.setAttribute("disabled",""),e.setAttribute("tabindex","-1"));for(const e of t.querySelectorAll('[data-panzoom-action="toggleZoom"],[data-panzoom-action="iterateZoom"]')){s||n?(e.removeAttribute("disabled"),e.removeAttribute("tabindex")):(e.setAttribute("disabled",""),e.setAttribute("tabindex","-1"));const t=e.querySelector("g");t&&(t.style.display=n?"":"none")}}onDone(t,e){var i;null===(i=e.panzoom)||void 0===i||i.on("afterTransform",(()=>{this.instance.isCurrentSlide(e)&&this.onRefresh()})),this.instance.isCurrentSlide(e)&&this.onRefresh()}createContainer(){const t=this.instance.container;if(!t)return null;const e=this.option("parentEl")||t,i=document.createElement("div");return S(i,"fancybox__toolbar"),e.prepend(i),i.addEventListener("click",this.onClick,{passive:!1,capture:!0}),t&&S(t,"has-toolbar"),this.container=i,i}createEl(t){const e=this.instance,i=e.carousel;if(!i)return null;if("toggleFS"===t)return null;if("fullscreen"===t&&!e.fsAPI)return null;let s=null;const o=i.slides.length||0;let a=0,r=0;for(const t of i.slides)(t.panzoom||"image"===t.type)&&a++,("image"===t.type||t.downloadSrc)&&r++;if(o<2&&["infobar","prev","next"].includes(t))return s;if(void 0!==jt[t]&&!a)return null;if("download"===t&&!r)return null;if("thumbs"===t){const t=e.plugins.Thumbs;if(!t||!t.isEnabled)return null}if("slideshow"===t){if(!i.plugins.Autoplay||o<2)return null}if(void 0!==jt[t]){const e=jt[t];s=document.createElement("button"),s.setAttribute("title",this.instance.localize(`{{${t.toUpperCase()}}}`)),S(s,"f-button"),e.action&&(s.dataset.panzoomAction=e.action),e.change&&(s.dataset.panzoomChange=JSON.stringify(e.change)),s.appendChild(n(this.instance.localize(e.icon)))}else{const e=(this.option("items")||[])[t];e&&(s=n(this.instance.localize(e.tpl)),"function"==typeof e.click&&s.addEventListener("click",(t=>{t.preventDefault(),t.stopPropagation(),"function"==typeof e.click&&e.click.call(this,this,t)})))}const l=null==s?void 0:s.querySelector("svg");if(l)for(const[t,e]of Object.entries(Nt))l.getAttribute(t)||l.setAttribute(t,String(e));return s}removeContainer(){const t=this.container;t&&t.remove(),this.container=null,this.state=Ht.Disabled;const e=this.instance.container;e&&E(e,"has-toolbar")}attach(){const t=this,e=t.instance;e.on("Carousel.initSlides",t.onReady),e.on("done",t.onDone),e.on(["reveal","Carousel.change"],t.onChange),t.onReady(t.instance)}detach(){const t=this,e=t.instance;e.off("Carousel.initSlides",t.onReady),e.off("done",t.onDone),e.off(["reveal","Carousel.change"],t.onChange),t.removeContainer()}}Object.defineProperty(_t,"defaults",{enumerable:!0,configurable:!0,writable:!0,value:Bt});const $t={Hash:rt,Html:wt,Images:ht,Slideshow:Ct,Thumbs:Ft,Toolbar:_t},Wt="with-fancybox",Xt="hide-scrollbar",qt="--fancybox-scrollbar-compensate",Yt="--fancybox-body-margin",Vt="is-using-tab",Zt="is-animated",Ut="is-compact",Gt="is-loading",Kt="has-caption",Jt="disabled",Qt="tabindex",te="download",ee="href",ie="src",ne=t=>"string"==typeof t,se=function(){var t=window.getSelection();return t&&"Range"===t.type};let oe=null,ae=null;const re=new Map;let le=0;class ce extends g{get isIdle(){return this.idle}get isCompact(){return this.option("compact")}constructor(t=[],e={},i={}){super(e),Object.defineProperty(this,"userSlides",{enumerable:!0,configurable:!0,writable:!0,value:[]}),Object.defineProperty(this,"userPlugins",{enumerable:!0,configurable:!0,writable:!0,value:{}}),Object.defineProperty(this,"idle",{enumerable:!0,configurable:!0,writable:!0,value:!1}),Object.defineProperty(this,"idleTimer",{enumerable:!0,configurable:!0,writable:!0,value:null}),Object.defineProperty(this,"clickTimer",{enumerable:!0,configurable:!0,writable:!0,value:null}),Object.defineProperty(this,"pwt",{enumerable:!0,configurable:!0,writable:!0,value:0}),Object.defineProperty(this,"ignoreFocusChange",{enumerable:!0,configurable:!0,writable:!0,value:!1}),Object.defineProperty(this,"state",{enumerable:!0,configurable:!0,writable:!0,value:st.Init}),Object.defineProperty(this,"id",{enumerable:!0,configurable:!0,writable:!0,value:0}),Object.defineProperty(this,"container",{enumerable:!0,configurable:!0,writable:!0,value:null}),Object.defineProperty(this,"footer",{enumerable:!0,configurable:!0,writable:!0,value:null}),Object.defineProperty(this,"caption",{enumerable:!0,configurable:!0,writable:!0,value:null}),Object.defineProperty(this,"carousel",{enumerable:!0,configurable:!0,writable:!0,value:null}),Object.defineProperty(this,"lastFocus",{enumerable:!0,configurable:!0,writable:!0,value:null}),Object.defineProperty(this,"prevMouseMoveEvent",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"fsAPI",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),this.fsAPI=(()=>{let t,e="",i="",n="";return document.fullscreenEnabled?(e="requestFullscreen",i="exitFullscreen",n="fullscreenElement"):document.webkitFullscreenEnabled&&(e="webkitRequestFullscreen",i="webkitExitFullscreen",n="webkitFullscreenElement"),e&&(t={request:function(t){return"webkitRequestFullscreen"===e?t[e](Element.ALLOW_KEYBOARD_INPUT):t[e]()},exit:function(){return document[n]&&document[i]()},isFullscreen:function(){return document[n]}}),t})(),this.id=e.id||++le,re.set(this.id,this),this.userSlides=t,this.userPlugins=i,queueMicrotask((()=>{this.init()}))}init(){if(this.state===st.Destroy)return;this.state=st.Init,this.attachPlugins(Object.assign(Object.assign({},ce.Plugins),this.userPlugins)),this.emit("init"),this.emit("attachPlugins"),!0===this.option("hideScrollbar")&&(()=>{if(!Q)return;const t=document,e=t.body,i=t.documentElement;if(e.classList.contains(Xt))return;let n=window.innerWidth-i.getBoundingClientRect().width;const s=parseFloat(window.getComputedStyle(e).marginRight);n<0&&(n=0),i.style.setProperty(qt,`${n}px`),s&&e.style.setProperty(Yt,`${s}px`),e.classList.add(Xt)})(),this.initLayout(),this.scale();const t=()=>{this.initCarousel(this.userSlides),this.state=st.Ready,this.attachEvents(),this.emit("ready"),setTimeout((()=>{this.container&&this.container.setAttribute("aria-hidden","false")}),16)},e=this.fsAPI;this.option("Fullscreen.autoStart")&&e&&!e.isFullscreen()?e.request(this.container).then((()=>t())).catch((()=>t())):t()}initLayout(){var t,e;const i=this.option("parentEl")||document.body,s=n(this.localize(this.option("tpl.main")||""));s&&(s.setAttribute("id",`fancybox-${this.id}`),s.setAttribute("aria-label",this.localize("{{MODAL}}")),s.classList.toggle(Ut,this.isCompact),S(s,this.option("mainClass")||""),this.container=s,this.footer=s.querySelector(".fancybox__footer"),i.appendChild(s),S(document.documentElement,Wt),oe&&ae||(oe=document.createElement("span"),S(oe,"fancybox-focus-guard"),oe.setAttribute(Qt,"0"),oe.setAttribute("aria-hidden","true"),oe.setAttribute("aria-label","Focus guard"),ae=oe.cloneNode(),null===(t=s.parentElement)||void 0===t||t.insertBefore(oe,s),null===(e=s.parentElement)||void 0===e||e.append(ae)),s.addEventListener("mousedown",(()=>{E(s,Vt)})),this.option("animated")&&(S(s,Zt),setTimeout((()=>{this.isClosing()||E(s,Zt)}),350)),this.emit("initLayout"))}initCarousel(t){const i=this.container;if(!i)return;const n=i.querySelector(".fancybox__carousel");if(!n)return;const s=this.carousel=new K(n,u({},{slides:t,transition:"fade",Panzoom:{lockAxis:this.option("dragToClose")?"xy":"x",infinite:!!this.option("dragToClose")&&"y"},Dots:!1,Navigation:{classes:{container:"fancybox__nav",button:"f-button",isNext:"is-next",isPrev:"is-prev"}},initialPage:this.option("startIndex"),l10n:this.option("l10n")},this.option("Carousel")||{}));s.on("*",((t,e,...i)=>{this.emit(`Carousel.${e}`,t,...i)})),s.on(["ready","change"],(()=>{this.manageCaption()})),this.on("Carousel.removeSlide",((t,e,i)=>{this.clearContent(i),i.state=void 0})),s.on("Panzoom.touchStart",(()=>{var t,e;this.isCompact||this.endIdle(),(null===(t=document.activeElement)||void 0===t?void 0:t.closest(".f-thumbs"))&&(null===(e=this.container)||void 0===e||e.focus())})),s.on("settle",(()=>{this.idleTimer||this.isCompact||!this.option("idle")||this.setIdle(),this.option("autoFocus")&&!this.isClosing&&this.checkFocus()})),this.option("dragToClose")&&(s.on("Panzoom.afterTransform",((t,i)=>{const n=this.getSlide();if(n&&e(n.el))return;const s=this.container;if(s){const t=Math.abs(i.current.f),e=t<1?"":Math.max(.5,Math.min(1,1-t/i.contentRect.fitHeight*1.5));s.style.setProperty("--fancybox-ts",e?"0s":""),s.style.setProperty("--fancybox-opacity",e+"")}})),s.on("Panzoom.touchEnd",((t,i,n)=>{var s;const o=this.getSlide();if(o&&e(o.el))return;if(i.isMobile&&document.activeElement&&-1!==["TEXTAREA","INPUT"].indexOf(null===(s=document.activeElement)||void 0===s?void 0:s.nodeName))return;const a=Math.abs(i.dragOffset.y);"y"===i.lockedAxis&&(a>=200||a>=50&&i.dragOffset.time<300)&&(n&&n.cancelable&&n.preventDefault(),this.close(n,"f-throwOut"+(i.current.f<0?"Up":"Down")))}))),s.on("change",(t=>{var e;let i=null===(e=this.getSlide())||void 0===e?void 0:e.triggerEl;if(i){const e=new CustomEvent("slideTo",{bubbles:!0,cancelable:!0,detail:t.page});i.dispatchEvent(e)}})),s.on(["refresh","change"],(t=>{const e=this.container;if(!e)return;for(const i of e.querySelectorAll("[data-fancybox-current-index]"))i.innerHTML=t.page+1;for(const i of e.querySelectorAll("[data-fancybox-count]"))i.innerHTML=t.pages.length;if(!t.isInfinite){for(const i of e.querySelectorAll("[data-fancybox-next]"))t.page<t.pages.length-1?(i.removeAttribute(Jt),i.removeAttribute(Qt)):(i.setAttribute(Jt,""),i.setAttribute(Qt,"-1"));for(const i of e.querySelectorAll("[data-fancybox-prev]"))t.page>0?(i.removeAttribute(Jt),i.removeAttribute(Qt)):(i.setAttribute(Jt,""),i.setAttribute(Qt,"-1"))}const i=this.getSlide();if(!i)return;let n=i.downloadSrc||"";n||"image"!==i.type||i.error||!ne(i[ie])||(n=i[ie]);for(const t of e.querySelectorAll("[data-fancybox-download]")){const e=i.downloadFilename;n?(t.removeAttribute(Jt),t.removeAttribute(Qt),t.setAttribute(ee,n),t.setAttribute(te,e||n),t.setAttribute("target","_blank")):(t.setAttribute(Jt,""),t.setAttribute(Qt,"-1"),t.removeAttribute(ee),t.removeAttribute(te))}})),this.emit("initCarousel")}attachEvents(){const t=this,e=t.container;if(!e)return;e.addEventListener("click",t.onClick,{passive:!1,capture:!1}),e.addEventListener("wheel",t.onWheel,{passive:!1,capture:!1}),document.addEventListener("keydown",t.onKeydown,{passive:!1,capture:!0}),document.addEventListener("visibilitychange",t.onVisibilityChange,!1),document.addEventListener("mousemove",t.onMousemove),t.option("trapFocus")&&document.addEventListener("focus",t.onFocus,!0),window.addEventListener("resize",t.onResize);const i=window.visualViewport;i&&(i.addEventListener("scroll",t.onResize),i.addEventListener("resize",t.onResize))}detachEvents(){const t=this,e=t.container;if(!e)return;document.removeEventListener("keydown",t.onKeydown,{passive:!1,capture:!0}),e.removeEventListener("wheel",t.onWheel,{passive:!1,capture:!1}),e.removeEventListener("click",t.onClick,{passive:!1,capture:!1}),document.removeEventListener("mousemove",t.onMousemove),window.removeEventListener("resize",t.onResize);const i=window.visualViewport;i&&(i.removeEventListener("resize",t.onResize),i.removeEventListener("scroll",t.onResize)),document.removeEventListener("visibilitychange",t.onVisibilityChange,!1),document.removeEventListener("focus",t.onFocus,!0)}scale(){const t=this.container;if(!t)return;const e=window.visualViewport,i=Math.max(1,(null==e?void 0:e.scale)||1);let n="",s="",o="";if(e&&i>1){let t=`${e.offsetLeft}px`,a=`${e.offsetTop}px`;n=e.width*i+"px",s=e.height*i+"px",o=`translate3d(${t}, ${a}, 0) scale(${1/i})`}t.style.transform=o,t.style.width=n,t.style.height=s}onClick(t){var e,i;const{container:n,isCompact:s}=this;if(!n||this.isClosing())return;!s&&this.option("idle")&&this.resetIdle();const o=t.composedPath()[0];if(o.closest(".f-spinner")||o.closest("[data-fancybox-close]"))return t.preventDefault(),void this.close(t);if(o.closest("[data-fancybox-prev]"))return t.preventDefault(),void this.prev();if(o.closest("[data-fancybox-next]"))return t.preventDefault(),void this.next();const a=document.activeElement;if(se()&&a&&n.contains(a))return;if(o===(null===(e=this.carousel)||void 0===e?void 0:e.container))return;if(s&&"image"===(null===(i=this.getSlide())||void 0===i?void 0:i.type))return void(this.clickTimer?(clearTimeout(this.clickTimer),this.clickTimer=null):this.clickTimer=setTimeout((()=>{this.toggleIdle(),this.clickTimer=null}),350));if(this.emit("click",t),t.defaultPrevented)return;let r=!1;if(o.closest(".fancybox__content")){if(a){if(a.closest("[contenteditable]"))return;o.matches(et)||a.blur()}if(se())return;r=this.option("contentClick")}else o.closest(".fancybox__carousel")&&!o.matches(et)&&(r=this.option("backdropClick"));"close"===r?(t.preventDefault(),this.close(t)):"next"===r?(t.preventDefault(),this.next()):"prev"===r&&(t.preventDefault(),this.prev())}onWheel(t){const e=t.target;let n=this.option("wheel",t);e.closest(".fancybox__thumbs")&&(n="slide");const s="slide"===n,o=[-t.deltaX||0,-t.deltaY||0,-t.detail||0].reduce((function(t,e){return Math.abs(e)>Math.abs(t)?e:t})),a=Math.max(-1,Math.min(1,o)),r=Date.now();this.pwt&&r-this.pwt<300?s&&t.preventDefault():(this.pwt=r,this.emit("wheel",t,a),t.defaultPrevented||("close"===n?(t.preventDefault(),this.close(t)):"slide"===n&&(i(e)||(t.preventDefault(),this[a>0?"prev":"next"]()))))}onKeydown(t){if(!this.isTopmost())return;this.isCompact||!this.option("idle")||this.isClosing()||this.resetIdle();const e=t.key,i=this.option("keyboard");if(!i)return;const n=t.composedPath()[0],s=document.activeElement&&document.activeElement.classList,o=s&&s.contains("f-button")||n.dataset.carouselPage||n.dataset.carouselIndex;if("Escape"!==e&&!o&&x(n)){if(n.isContentEditable||-1!==["TEXTAREA","OPTION","INPUT","SELECT","VIDEO"].indexOf(n.nodeName))return}if("Tab"===t.key?S(this.container,Vt):E(this.container,Vt),t.ctrlKey||t.altKey||t.shiftKey)return;this.emit("keydown",e,t);const a=i[e];a&&"function"==typeof this[a]&&(t.preventDefault(),this[a]())}onResize(){const t=this.container;if(!t)return;const e=this.isCompact;t.classList.toggle(Ut,e),this.manageCaption(this.getSlide()),this.isCompact?this.clearIdle():this.endIdle(),this.scale(),this.emit("resize")}onFocus(t){this.isTopmost()&&this.checkFocus(t)}onMousemove(t){this.prevMouseMoveEvent=t,!this.isCompact&&this.option("idle")&&this.resetIdle()}onVisibilityChange(){"visible"===document.visibilityState?this.checkFocus():this.endIdle()}manageCloseBtn(t){const e=this.optionFor(t,"closeButton")||!1;if("auto"===e){const t=this.plugins.Toolbar;if(t&&t.state===Ht.Ready)return}if(!e)return;if(!t.contentEl||t.closeBtnEl)return;const i=this.option("tpl.closeButton");if(i){const e=n(this.localize(i));t.closeBtnEl=t.contentEl.appendChild(e),t.el&&S(t.el,"has-close-btn")}}manageCaption(t=void 0){var e,i;const n="fancybox__caption",s=this.container;if(!s)return;E(s,Kt);const o=this.isCompact||this.option("commonCaption"),a=!o;if(this.caption&&this.stop(this.caption),a&&this.caption&&(this.caption.remove(),this.caption=null),o&&!this.caption)for(const t of(null===(e=this.carousel)||void 0===e?void 0:e.slides)||[])t.captionEl&&(t.captionEl.remove(),t.captionEl=void 0,E(t.el,Kt),null===(i=t.el)||void 0===i||i.removeAttribute("aria-labelledby"));if(t||(t=this.getSlide()),!t||o&&!this.isCurrentSlide(t))return;const r=t.el;let l=this.optionFor(t,"caption","");if(!l)return void(o&&this.caption&&this.animate(this.caption,"f-fadeOut",(()=>{this.caption&&(this.caption.innerHTML="")})));let c=null;if(a){if(c=t.captionEl||null,r&&!c){const e=n+`_${this.id}_${t.index}`;c=document.createElement("div"),S(c,n),c.setAttribute("id",e),t.captionEl=r.appendChild(c),S(r,Kt),r.setAttribute("aria-labelledby",e)}}else{if(c=this.caption,c||(c=s.querySelector("."+n)),!c){c=document.createElement("div"),c.dataset.fancyboxCaption="",S(c,n);(this.footer||s).prepend(c)}S(s,Kt),this.caption=c}c&&(c.innerHTML="",ne(l)||"number"==typeof l?c.innerHTML=l+"":l instanceof HTMLElement&&c.appendChild(l))}checkFocus(t){this.focus(t)}focus(t){var e;if(this.ignoreFocusChange)return;const i=document.activeElement||null,n=(null==t?void 0:t.target)||null,s=this.container,o=this.getSlide();if(!s||!(null===(e=this.carousel)||void 0===e?void 0:e.viewport))return;if(!t&&i&&s.contains(i))return;const a=o&&o.state===ot.Ready?o.el:null;if(!a||a.contains(i)||s===i)return;t&&t.cancelable&&t.preventDefault(),this.ignoreFocusChange=!0;const r=Array.from(s.querySelectorAll(et));let l=[],c=null;for(let t of r){const e=!t.offsetParent||!!t.closest('[aria-hidden="true"]'),i=a&&a.contains(t),n=!this.carousel.viewport.contains(t);if(t===s||(i||n)&&!e){l.push(t);const e=t.dataset.origTabindex;void 0!==e&&e&&(t.tabIndex=parseFloat(e)),t.removeAttribute("data-orig-tabindex"),!t.hasAttribute("autoFocus")&&c||(c=t)}else{const e=void 0===t.dataset.origTabindex?t.getAttribute("tabindex")||"":t.dataset.origTabindex;e&&(t.dataset.origTabindex=e),t.tabIndex=-1}}let h=null;t?(!n||l.indexOf(n)<0)&&(h=c||s,l.length&&(i===ae?h=l[0]:this.lastFocus!==s&&i!==oe||(h=l[l.length-1]))):h=o&&"image"===o.type?s:c||s,h&&it(h),this.lastFocus=document.activeElement,this.ignoreFocusChange=!1}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)}isTopmost(){var t;return(null===(t=ce.getInstance())||void 0===t?void 0:t.id)==this.id}animate(t=null,e="",i){if(!t||!e)return void(i&&i());this.stop(t);const n=s=>{s.target===t&&t.dataset.animationName&&(t.removeEventListener("animationend",n),delete t.dataset.animationName,i&&i(),E(t,e))};t.dataset.animationName=e,t.addEventListener("animationend",n),S(t,e)}stop(t){t&&t.dispatchEvent(new CustomEvent("animationend",{bubbles:!1,cancelable:!0,currentTarget:t}))}setContent(t,e="",i=!0){if(this.isClosing())return;const s=t.el;if(!s)return;let o=null;if(x(e)?o=e:(o=n(e+""),x(o)||(o=document.createElement("div"),o.innerHTML=e+"")),["img","picture","iframe","video","audio"].includes(o.nodeName.toLowerCase())){const t=document.createElement("div");t.appendChild(o),o=t}x(o)&&t.filter&&!t.error&&(o=o.querySelector(t.filter)),o&&x(o)?(S(o,"fancybox__content"),t.id&&o.setAttribute("id",t.id),"none"!==o.style.display&&"none"!==getComputedStyle(o).getPropertyValue("display")||(o.style.display=t.display||this.option("defaultDisplay")||"flex"),s.classList.add(`has-${t.error?"error":t.type||"unknown"}`),s.prepend(o),t.contentEl=o,i&&this.revealContent(t),this.manageCloseBtn(t),this.manageCaption(t)):this.setError(t,"{{ELEMENT_NOT_FOUND}}")}revealContent(t,e){const i=t.el,n=t.contentEl;i&&n&&(this.emit("reveal",t),this.hideLoading(t),t.state=ot.Opening,(e=this.isOpeningSlide(t)?void 0===e?this.optionFor(t,"showClass"):e:"f-fadeIn")?this.animate(n,e,(()=>{this.done(t)})):this.done(t))}done(t){this.isClosing()||(t.state=ot.Ready,this.emit("done",t),S(t.el,"is-done"),this.isCurrentSlide(t)&&this.option("autoFocus")&&queueMicrotask((()=>{var e;null===(e=t.panzoom)||void 0===e||e.updateControls(),this.option("autoFocus")&&(this.option("autoFocus")?this.focus():this.checkFocus())})),this.isOpeningSlide(t)&&!this.isCompact&&this.option("idle")&&this.setIdle())}isCurrentSlide(t){const e=this.getSlide();return!(!t||!e)&&e.index===t.index}isOpeningSlide(t){var e,i;return null===(null===(e=this.carousel)||void 0===e?void 0:e.prevPage)&&t.index===(null===(i=this.getSlide())||void 0===i?void 0:i.index)}showLoading(t){t.state=ot.Loading;const e=t.el;if(!e)return;S(e,Gt),this.emit("loading",t),t.spinnerEl||setTimeout((()=>{if(!this.isClosing()&&!t.spinnerEl&&t.state===ot.Loading){let i=n(w);t.spinnerEl=i,e.prepend(i),this.animate(i,"f-fadeIn")}}),250)}hideLoading(t){const e=t.el;if(!e)return;const i=t.spinnerEl;this.isClosing()?null==i||i.remove():(E(e,Gt),i&&this.animate(i,"f-fadeOut",(()=>{i.remove()})),t.state===ot.Loading&&(this.emit("loaded",t),t.state=ot.Ready))}setError(t,e){if(this.isClosing())return;const i=new Event("error",{bubbles:!0,cancelable:!0});if(this.emit("error",i,t),i.defaultPrevented)return;t.error=e,this.hideLoading(t),this.clearContent(t);const n=document.createElement("div");n.classList.add("fancybox-error"),n.innerHTML=this.localize(e||"<p>{{ERROR}}</p>"),this.setContent(t,n)}clearContent(t){if(void 0===t.state)return;this.emit("clearContent",t),t.contentEl&&(t.contentEl.remove(),t.contentEl=void 0);const e=t.el;e&&(E(e,"has-error"),E(e,"has-unknown"),E(e,`has-${t.type||"unknown"}`)),t.closeBtnEl&&t.closeBtnEl.remove(),t.closeBtnEl=void 0,t.captionEl&&t.captionEl.remove(),t.captionEl=void 0,t.spinnerEl&&t.spinnerEl.remove(),t.spinnerEl=void 0}getSlide(){var t;const e=this.carousel;return(null===(t=null==e?void 0:e.pages[null==e?void 0:e.page])||void 0===t?void 0:t.slides[0])||void 0}close(t,e){if(this.isClosing())return;const i=new Event("shouldClose",{bubbles:!0,cancelable:!0});if(this.emit("shouldClose",i,t),i.defaultPrevented)return;t&&t.cancelable&&(t.preventDefault(),t.stopPropagation());const n=this.fsAPI,s=()=>{this.proceedClose(t,e)};n&&n.isFullscreen()===this.container?Promise.resolve(n.exit()).then((()=>s())):s()}clearIdle(){this.idleTimer&&clearTimeout(this.idleTimer),this.idleTimer=null}setIdle(t=!1){const e=()=>{this.clearIdle(),this.idle=!0,S(this.container,"is-idle"),this.emit("setIdle")};if(this.clearIdle(),!this.isClosing())if(t)e();else{const t=this.option("idle");t&&(this.idleTimer=setTimeout(e,t))}}endIdle(){this.clearIdle(),this.idle&&!this.isClosing()&&(this.idle=!1,E(this.container,"is-idle"),this.emit("endIdle"))}resetIdle(){this.endIdle(),this.setIdle()}toggleIdle(){this.idle?this.endIdle():this.setIdle(!0)}toggleFullscreen(){const t=this.fsAPI;t&&(t.isFullscreen()?t.exit():this.container&&t.request(this.container))}isClosing(){return[st.Closing,st.CustomClosing,st.Destroy].includes(this.state)}proceedClose(t,e){var i,n;this.state=st.Closing,this.clearIdle(),this.detachEvents();const s=this.container,o=this.carousel,a=this.getSlide(),r=a&&this.option("placeFocusBack")?a.triggerEl||this.option("triggerEl"):null;if(r&&(J(r)?it(r):r.focus()),s&&(S(s,"is-closing"),s.setAttribute("aria-hidden","true"),this.option("animated")&&S(s,Zt),s.style.pointerEvents="none"),o){o.clearTransitions(),null===(i=o.panzoom)||void 0===i||i.destroy(),null===(n=o.plugins.Navigation)||void 0===n||n.detach();for(const t of o.slides){t.state=ot.Closing,this.hideLoading(t);const e=t.contentEl;e&&this.stop(e);const i=null==t?void 0:t.panzoom;i&&(i.stop(),i.detachEvents(),i.detachObserver()),this.isCurrentSlide(t)||o.emit("removeSlide",t)}}this.emit("close",t),this.state!==st.CustomClosing?(void 0===e&&a&&(e=this.optionFor(a,"hideClass")),e&&a?(this.animate(a.contentEl,e,(()=>{o&&o.emit("removeSlide",a)})),setTimeout((()=>{this.destroy()}),500)):this.destroy()):setTimeout((()=>{this.destroy()}),500)}destroy(){var t;if(this.state===st.Destroy)return;this.state=st.Destroy,null===(t=this.carousel)||void 0===t||t.destroy();const e=this.container;e&&e.remove(),re.delete(this.id);const i=ce.getInstance();i?i.focus():(oe&&(oe.remove(),oe=null),ae&&(ae.remove(),ae=null),E(document.documentElement,Wt),(()=>{if(!Q)return;const t=document,e=t.body;e.classList.remove(Xt),e.style.setProperty(Yt,""),t.documentElement.style.setProperty(qt,"")})(),this.emit("destroy"))}static bind(t,e,i){if(!Q)return;let n,s="",o={};if(void 0===t?n=document.body:ne(t)?(n=document.body,s=t,"object"==typeof e&&(o=e||{})):(n=t,ne(e)&&(s=e),"object"==typeof i&&(o=i||{})),!n||!x(n))return;s=s||"[data-fancybox]";const a=ce.openers.get(n)||new Map;a.set(s,o),ce.openers.set(n,a),1===a.size&&n.addEventListener("click",ce.fromEvent)}static unbind(t,e){let i,n="";if(ne(t)?(i=document.body,n=t):(i=t,ne(e)&&(n=e)),!i)return;const s=ce.openers.get(i);s&&n&&s.delete(n),n&&s||(ce.openers.delete(i),i.removeEventListener("click",ce.fromEvent))}static destroy(){let t;for(;t=ce.getInstance();)t.destroy();for(const t of ce.openers.keys())t.removeEventListener("click",ce.fromEvent);ce.openers=new Map}static fromEvent(t){if(t.defaultPrevented)return;if(t.button&&0!==t.button)return;if(t.ctrlKey||t.metaKey||t.shiftKey)return;let e=t.composedPath()[0];const i=e.closest("[data-fancybox-trigger]");if(i){const t=i.dataset.fancyboxTrigger||"",n=document.querySelectorAll(`[data-fancybox="${t}"]`),s=parseInt(i.dataset.fancyboxIndex||"",10)||0;e=n[s]||e}if(!(e&&e instanceof Element))return;let n,s,o,a;if([...ce.openers].reverse().find((([t,i])=>!(!t.contains(e)||![...i].reverse().find((([i,r])=>{let l=e.closest(i);return!!l&&(n=t,s=i,o=l,a=r,!0)}))))),!n||!s||!o)return;a=a||{},t.preventDefault(),e=o;let r=[],l=u({},nt,a);l.event=t,l.triggerEl=e,l.delegate=i;const c=l.groupAll,h=l.groupAttr,d=h&&e?e.getAttribute(`${h}`):"";if((!e||d||c)&&(r=[].slice.call(n.querySelectorAll(s))),e&&!c&&(r=d?r.filter((t=>t.getAttribute(`${h}`)===d)):[e]),!r.length)return;const f=ce.getInstance();return f&&f.options.triggerEl&&r.indexOf(f.options.triggerEl)>-1?void 0:(e&&(l.startIndex=r.indexOf(e)),ce.fromNodes(r,l))}static fromSelector(t,e,i){let n=null,s="",o={};if(ne(t)?(n=document.body,s=t,"object"==typeof e&&(o=e||{})):t instanceof HTMLElement&&ne(e)&&(n=t,s=e,"object"==typeof i&&(o=i||{})),!n||!s)return!1;const a=ce.openers.get(n);return!!a&&(o=u({},a.get(s)||{},o),!!o&&ce.fromNodes(Array.from(n.querySelectorAll(s)),o))}static fromNodes(t,e){e=u({},nt,e||{});const i=[];for(const n of t){const t=n.dataset||{},s=t[ie]||n.getAttribute(ee)||n.getAttribute("currentSrc")||n.getAttribute(ie)||void 0;let o;const a=e.delegate;let r;a&&i.length===e.startIndex&&(o=a instanceof HTMLImageElement?a:a.querySelector("img:not([aria-hidden])")),o||(o=n instanceof HTMLImageElement?n:n.querySelector("img:not([aria-hidden])")),o&&(r=o.currentSrc||o[ie]||void 0,!r&&o.dataset&&(r=o.dataset.lazySrc||o.dataset[ie]||void 0));const l={src:s,triggerEl:n,thumbEl:o,thumbElSrc:r,thumbSrc:r};for(const e in t){let i=t[e]+"";i="false"!==i&&("true"===i||i),l[e]=i}i.push(l)}return new ce(i,e)}static getInstance(t){if(t)return re.get(t);return Array.from(re.values()).reverse().find((t=>!t.isClosing()&&t))||null}static getSlide(){var t;return(null===(t=ce.getInstance())||void 0===t?void 0:t.getSlide())||null}static show(t=[],e={}){return new ce(t,e)}static next(){const t=ce.getInstance();t&&t.next()}static prev(){const t=ce.getInstance();t&&t.prev()}static close(t=!0,...e){if(t)for(const t of re.values())t.close(...e);else{const t=ce.getInstance();t&&t.close(...e)}}}Object.defineProperty(ce,"version",{enumerable:!0,configurable:!0,writable:!0,value:"5.0.28"}),Object.defineProperty(ce,"defaults",{enumerable:!0,configurable:!0,writable:!0,value:nt}),Object.defineProperty(ce,"Plugins",{enumerable:!0,configurable:!0,writable:!0,value:$t}),Object.defineProperty(ce,"openers",{enumerable:!0,configurable:!0,writable:!0,value:new Map}); 18 19 20/***/ }), 21
22/***/ "./library/js/libs/p81-accordion.js": 23/*!******************************************!*\ 24 !*** ./library/js/libs/p81-accordion.js ***! 25 \******************************************/ 26/***/ (() => { 27 28jQuery(document).ready(function ($) { 29 // Code for accordions 30 var $hdr = "h2"; // set heading level to look out for 31 var $acc_id = 1; // global id counter 32 33 /* The setup function that runs when the page has loaded */ 34 35 // Firstly, look for all headers of the right level within an accordion container 36 $(".accordion-container").find(".accordion-strip >" + $hdr).each(function () { 37 // Store current ID value 38 var $this_id = $acc_id; 39 // Get the current contents of the header 40 var $this_text = $(this).text(); 41 42 // empty the header 43 $(this).empty(); 44 45 // Construct the button string with the attributes we need 46 var $this_button = '<button data-id="' + $this_id + '" id="accordion-button-' + $this_id + '" ' + ' aria-controls="accordion-panel-' + $this_id + '" aria-expanded="false">' + $this_text + "</button>"; 47 48 // Add the button string into the heading 49 $(this).append($this_button); 50 51 // Get the set of elements between this header and the next header, or the end of 52 // the accordion container 53 var $set = $(this).nextUntil($hdr); 54 55 // Set up the panel string 56 var $this_panel = '<div class="accordion-panel hidden" id="accordion-panel-' + $this_id + '" aria-labelledby="accordion-button-' + $this_id + '"></div>'; 57 58 // Wrap everything in a <div> with the necessary elements included. 59 // This will be the accordion panel that is hidden by default and shown on demand. 60 $set.wrapAll($this_panel); 61 62 // Now increment the $acc_id value ready for the next one 63 $acc_id++; 64 }); 65 66 // Now set up the event listeners 67 // Look for all buttons that are inside a correct level heading inside the accordion container 68 $(".accordion-container").find($hdr).find("button").on("click", function (e) { 69 var $thisId = $(this).attr("data-id"); 70 if ($(this).attr("aria-expanded") == "true") { 71 hideAccordion($(this)); 72 $(this).focus(); 73 } else { 74 showAccordion($(this)); 75 } 76 }).on("keydown", function (e) { 77 if (e.key !== "Escape") { 78 return; 79 } 80 if ($(this).attr("aria-expanded") !== "true") { 81 return; 82 } 83 hideAccordion($(this)); 84 e.preventDefault(); 85 }); 86 function showAccordion(obj) { 87 // Being passed a button 88 var $thisId = $(obj).attr("data-id"); 89 var $panel = $("#accordion-panel-" + $thisId); 90 // console.log("In showAccordion - "+$thisId); 91 $(obj).closest(".accordion-strip").addClass("active"); 92 $($panel).removeClass("hidden"); 93 $(obj).attr("aria-expanded", "true"); 94 $(obj).focus(); 95 } 96 function hideAccordion(obj) { 97 // Being passed a button 98 var $thisId = $(obj).attr("data-id"); 99 var $panel = $("#accordion-panel-" + $thisId); 100 // console.log("In hideAccordion - " + $thisId); 101 $(obj).closest(".accordion-strip").removeClass("active"); 102 $($panel).addClass("hidden"); 103 $(obj).attr("aria-expanded", "false"); 104 $(obj).focus(); 105 } 106}); 107 108/***/ }), 109
110/***/ "./library/js/libs/p81-sliders.js": 111/*!****************************************!*\ 112 !*** ./library/js/libs/p81-sliders.js ***! 113 \****************************************/ 114/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { 115 116"use strict"; 117__webpack_require__.r(__webpack_exports__); 118/* harmony import */ var swiper_bundle__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! swiper/bundle */ "./node_modules/swiper/swiper-bundle.mjs"); 119/* harmony import */ var swiper_css_bundle__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! swiper/css/bundle */ "./node_modules/swiper/swiper-bundle.css"); 120var $ = __webpack_require__(/*! jquery */ "./node_modules/jquery/dist/jquery.js"); 121 122 123var prefersReducedMotion = typeof window.matchMedia === 'function' && window.matchMedia('(prefers-reduced-motion: reduce)').matches; 124var hpHeroSlider = new swiper_bundle__WEBPACK_IMPORTED_MODULE_0__["default"]('.hp-hero__slider', { 125 slidesPerView: 1, 126 loop: true, 127 effect: 'fade', 128 autoplay: prefersReducedMotion ? false : { 129 delay: 5000 130 }, 131 pagination: { 132 el: '.hp-hero__slider .swiper-pagination', 133 clickable: true 134 } 135}); 136if (!prefersReducedMotion && hpHeroSlider.autoplay) { 137 $(".hp-hero__slider__nav .autoplay-toggle").on('click', function (e) { 138 if ($(this).hasClass('pause')) { 139 hpHeroSlider.autoplay.stop(); 140 $(this).removeClass('pause').addClass('play').attr("aria-label", "Play slider"); 141 } else { 142 hpHeroSlider.autoplay.start(); 143 $(this).removeClass('play').addClass('pause').attr("aria-label", "Pause slider"); 144 } 145 }); 146} else { 147 $(".hp-hero__slider__nav .autoplay-toggle").attr("hidden", true).attr("aria-hidden", "true"); 148} 149var latestNewsSlider = new swiper_bundle__WEBPACK_IMPORTED_MODULE_0__["default"]('.latest-news__slider .swiper', { 150 slidesPerView: 1, 151 spaceBetween: 30, 152 loop: true, 153 navigation: { 154 nextEl: ".latest-news__slider__next", 155 prevEl: ".latest-news__slider__prev" 156 }, 157 breakpoints: { 158 768: { 159 slidesPerView: 2, 160 spaceBetween: 30 161 }, 162 1025: { 163 slidesPerView: 3, 164 spaceBetween: 30 165 } 166 } 167}); 168var latestNewsSliderInner = new swiper_bundle__WEBPACK_IMPORTED_MODULE_0__["default"]('.latest-news__slider-inner .swiper', { 169 slidesPerView: 1, 170 spaceBetween: 30, 171 loop: true, 172 navigation: { 173 nextEl: ".latest-news__slider__next", 174 prevEl: ".latest-news__slider__prev" 175 }, 176 breakpoints: { 177 768: { 178 slidesPerView: 2, 179 spaceBetween: 30 180 }, 181 1025: { 182 slidesPerView: 3, 183 spaceBetween: 30 184 }, 185 1200: { 186 slidesPerView: 4, 187 spaceBetween: 30 188 } 189 } 190}); 191var videoEmbedSlider = new swiper_bundle__WEBPACK_IMPORTED_MODULE_0__["default"]('.video-embeds__wrap .swiper', { 192 slidesPerView: 1, 193 spaceBetween: 30, 194 loop: false, 195 navigation: { 196 nextEl: ".video-embeds__wrap__next", 197 prevEl: ".video-embeds__wrap__prev" 198 } 199}); 200var imagesSlider = new swiper_bundle__WEBPACK_IMPORTED_MODULE_0__["default"]('.images-block__wrap--slider', { 201 slidesPerView: 1, 202 spaceBetween: 30, 203 loop: false, 204 navigation: { 205 nextEl: ".images-block__nav__next", 206 prevEl: ".images-block__nav__prev" 207 }, 208 pagination: { 209 el: '.images-block__wrap--slider .swiper-pagination', 210 clickable: true, 211 dynamicBullets: true 212 } 213}); 214 215/***/ }), 216
217/***/ "./library/js/scripts.js": 218/*!*******************************!*\ 219 !*** ./library/js/scripts.js ***! 220 \*******************************/ 221/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { 222 223"use strict"; 224__webpack_require__.r(__webpack_exports__); 225/* harmony import */ var _fancyapps_ui__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @fancyapps/ui */ "./node_modules/@fancyapps/ui/dist/index.esm.js"); 226// FontAwesomeConfig = { searchPseudoElements: false }; 227// import '@fortawesome/fontawesome-free/js/fontawesome'; 228// import '@fortawesome/fontawesome-free/js/solid'; 229// import '@fortawesome/fontawesome-free/js/brands'; 230 231jQuery(document).ready(function ($) { 232 /* ====================== SHOW IE11 NOTIFICATION ====================== */ 233 function showBrowserAlert() { 234 var ie11True = false; 235 // true on IE11, false on Edge and other IEs/browsers. 236 var isIE11 = !!window.MSInputMethodContext && !!document.documentMode, 237 ua = window.navigator.userAgent, 238 array, 239 // Declare the array variable 240 version; // Declare the version variable 241 242 if (ua.indexOf("AppleWebKit") > 0) { 243 ie11True = false; 244 } else if (ua.indexOf("Lunascape") > 0) { 245 ie11True = false; 246 } else if (ua.indexOf("Sleipnir") > 0) { 247 ie11True = false; 248 } else { 249 array = /(msie|rv:?)\s?([\d\.]+)/.exec(ua); 250 version = array ? array[2] : ''; 251 ie11True = version === 11 || version == 11.0 || version == 10 || version == 10.0 ? true : false; 252 } 253 if (ie11True) { 254 $('<div class="unsupported-browser unsupported-browser--active"><div class="unsupported-browser__inner"><h3>Sorry about this, but...</h3><p>It looks like you\'re using Internet Explorer 10 or 11. Parts of this website may not work or display correctly. Please consider using a different browser.</p> <ul class="unsupported-browser__links"><li><a href="https://www.google.com/intl/en_uk/chrome/" target="_blank" class="unsupported-browser__link unsupported-browser__link--chrome" aria-label="Download Chrome"></a></li><li><a href="https://www.microsoft.com/en-us/edge" target="_blank" class="unsupported-browser__link unsupported-browser__link--edge" aria-label="Download Microsoft Edge" ></a></li><li><a href="https://www.mozilla.org/en-GB/firefox/new/" target="_blank" class="unsupported-browser__link unsupported-browser__link--firefox" aria-label="Download Firefox"></a></li></ul></div></div>').prependTo('body'); 255 } 256 } 257 showBrowserAlert(); 258 259 /* ====================== REMOVE EMPTY P TAG ====================== */ 260 $('p').each(function () { 261 var $this = $(this); 262 if ($this.html().replace(/\s| /g, '').length == 0) $this.remove(); 263 }); 264 265 /* ====================== FANCYBOX FUNCTIONS ====================== */ 266 var triggerEl; 267 _fancyapps_ui__WEBPACK_IMPORTED_MODULE_0__.Fancybox.bind("[data-fancybox]", { 268 on: { 269 done: function done(fancybox, slide) { 270 triggerEl = slide.triggerEl; 271 if (triggerEl) { 272 if (fancybox.state === 1) { 273 triggerEl.setAttribute("aria-expanded", "true"); 274 } 275 } 276 }, 277 close: function close(fancybox, slide) { 278 if (triggerEl) { 279 triggerEl.setAttribute("aria-expanded", "false"); 280 } 281 } 282 } 283 }); 284 285 /* ====================== FUNCTION TO CHECK IF ELEMENT IS IN VIEWPORT ====================== */ 286 function isElementInViewport(element) { 287 var $element = $(element); 288 289 // Get the element's position and dimensions relative to the viewport 290 var elementTop = $element.offset().top; 291 var elementBottom = elementTop + $element.height(); 292 var viewportTop = $(window).scrollTop(); 293 var viewportBottom = viewportTop + $(window).height(); 294 295 // Check if any part of the element is within the viewport 296 return elementBottom > viewportTop && elementTop < viewportBottom; 297 } 298 299 /* ====================== NAV MENU ITEM ====================== */ 300 301 function mobile_nav() { 302 $('.nav li.menu-item-has-children > .menu-item__toggle').on("click", function (e) { 303 $(".nav li.menu-item-has-children").not($(this).parents('.menu-item-has-children')).removeClass('active'); 304 if ($(this).attr('aria-expanded') === 'false') { 305 $(this).parent().addClass('active'); 306 $(this).attr('aria-expanded', 'true'); 307 $(this).next('.mega-menu__wrap').addClass('open'); 308 $(this).next('.sub-menu').addClass('open'); 309 } else if ($(this).attr('aria-expanded') === 'true') { 310 $(this).attr('aria-expanded', 'false'); 311 $(this).parent().removeClass('active'); 312 $(this).next('.mega-menu__wrap').removeClass('open'); 313 $(this).next('.sub-menu').removeClass('open'); 314 } 315 }); 316 if ($(window).width() <= 1025) { 317 $('.nav li.back-step .back-to-menu').on("click", function (e) { 318 $(this).parent().parent('.sub-menu.open').removeClass('open'); 319 $(this).parent().parent().parent().find('.menu-item__toggle').attr('aria-expanded', 'false'); 320 $(this).parent().parent().parent().parent('.mega-menu__wrap.open').removeClass('open'); 321 $(this).parent().parent().parent().parent().parent().find('.menu-item__toggle').attr('aria-expanded', 'false'); 322 }); 323 $('.header__top__nav-toggle').on("click", function (e) { 324 var $button = $(this); 325 var currentExpanded = $button.attr('aria-expanded'); 326 var newExpanded = currentExpanded === 'true' ? 'false' : 'true'; 327 $button.attr('aria-expanded', newExpanded); 328 $('.header__navigation').toggleClass('open'); 329 if ($('.header__navigation').hasClass('open')) { 330 $button.attr('aria-label', 'Close menu navigation'); 331 $('.header__top__nav-toggle__label').html('<i class="fa-solid fa-xmark"></i>Close'); 332 window.scrollTo(0, 0); 333 $("html, body").addClass("noscroll"); 334 var $first = $('.header__navigation').find('a, button').filter(':visible').first(); 335 if ($first.length) { 336 $first.trigger('focus'); 337 } 338 } else { 339 $button.attr('aria-label', 'Show menu navigation'); 340 $('.header__top__nav-toggle__label').html('<i class="fa-solid fa-bars"></i>Menu'); 341 $("html, body").removeClass("noscroll"); 342 $(".header__navigation .mega-menu__wrap").removeClass('open'); 343 $(".header__navigation .sub-menu").removeClass('open'); 344 $('.nav li.menu-item-has-children > .menu-item__toggle').attr('aria-expanded', 'false'); 345 $button.trigger('focus'); 346 } 347 }); 348 } 349 ; 350 } 351 ; 352 mobile_nav(); 353 $(document).on('keydown', function (e) { 354 if (e.key !== 'Escape') { 355 return; 356 } 357 if ($('.header__top__search').hasClass('header__top__search--active')) { 358 $('.header__top__search .header__top__search__close').trigger('click'); 359 e.preventDefault(); 360 return; 361 } 362 if ($('.header__navigation').hasClass('open')) { 363 $('.header__top__nav-toggle').trigger('click'); 364 e.preventDefault(); 365 } 366 }); 367 368 /* ====================== MOBILE SEARCH TOGGLE ====================== */ 369 function mobile_search() { 370 if ($(window).width() <= 1025) { 371 $(".header__top__mobile-search").on('click', function (e) { 372 var $button = $(this); 373 var currentExpanded = $button.attr('aria-expanded'); 374 var newExpanded = currentExpanded === 'true' ? 'false' : 'true'; 375 $('.header__top__search').toggleClass('header__top__search--active'); 376 $button.attr('aria-expanded', newExpanded); 377 var $buttonClose = $('.header__top__search__close'); 378 var currentExpandedClose = $buttonClose.attr('aria-expanded'); 379 var newExpandedClose = currentExpandedClose === 'true' ? 'false' : 'true'; 380 $buttonClose.attr('aria-expanded', newExpandedClose); 381 var tabIndexElements = document.querySelectorAll('.header__top__search button, .header__top__search input');
382 tabIndexElements.forEach(function (element) { 383 var currentTabIndex = element.tabIndex; 384 var newExpanded = currentTabIndex === -1 ? 0 : -1; 385 element.setAttribute('tabIndex', newExpanded); 386 }); 387 if ($('.header__navigation').hasClass('open')) { 388 $('.header').removeClass('header--nav-open'); 389 $('.header__navigation').removeClass('open'); 390 $("html, body").removeClass("noscroll"); 391 $('.header__top__nav-toggle__label').html('<i class="fa-solid fa-bars"></i>Menu'); 392 var _tabIndexElements = document.querySelectorAll('.nav > li > a, .nav .nav__droptoggle'); 393 _tabIndexElements.forEach(function (element) { 394 element.setAttribute('tabIndex', -1); 395 }); 396 } 397 setTimeout(function () { 398 $('.header__top__search .searchform input').focus(); 399 }, 200); 400 }); 401 $('.header__top__search .header__top__search__close').on("click", function (e) { 402 e.preventDefault(); 403 var $button = $(this); 404 var currentExpanded = $button.attr('aria-expanded'); 405 var newExpanded = currentExpanded === 'true' ? 'false' : 'true'; 406 $button.attr('aria-expanded', newExpanded); 407 var tabIndexElements = document.querySelectorAll('.header__top__search button, .header__top__search input'); 408 tabIndexElements.forEach(function (element) { 409 var currentTabIndex = element.tabIndex; 410 var newExpanded = currentTabIndex === -1 ? 0 : -1; 411 element.setAttribute('tabIndex', newExpanded); 412 }); 413 $('.header__top__search').removeClass('header__top__search--active'); 414 $('.header__top__mobile-search').attr('aria-expanded', 'false'); 415 if ($(window).width() <= 1025) { 416 $('.header__top__mobile-search').trigger('focus'); 417 } 418 }); 419 } 420 ; 421 } 422 ; 423 mobile_search(); 424 425 /* ====================== SERVICE FINDER A-Z ====================== */ 426 427 $('.service-finder__letters button.letter').on("keydown click", function (e) { 428 if (e.type === 'keydown' && e.key !== 'Enter' && e.key !== ' ') { 429 return; 430 } 431 e.preventDefault(); 432 $('.service-finder__letters button.letter').removeClass('letter--active').attr('aria-pressed', false); 433 $('.service-finder__clear').addClass('service-finder__clear--show'); 434 $(this).addClass('letter--active').attr('aria-pressed', true); 435 var filterValue = $(this).data("letter").toUpperCase(); // Get the filter value and convert it to uppercase 436 $('.service-finder__results-group > li').each(function (index) { 437 var letter = $(this).data('letter').toUpperCase(); // Get the site name from the first column and convert it to uppercase 438 if (letter == filterValue || filterValue === '') { 439 // If the site name includes the filter value or filter is empty 440 $(this).show(); // Show the row 441 $(this).attr('aria-hidden', false); 442 } else { 443 $(this).hide(); // Hide the row 444 $(this).attr('aria-hidden', true); 445 } 446 }); 447 var elementToCheck = $(".service-finder__results"); 448 if (!isElementInViewport(elementToCheck)) { 449 $('html, body').animate({ 450 scrollTop: elementToCheck.offset().top - 80 451 }, 1000); // Change the duration as needed (in milliseconds) 452 } 453 }); 454 $('.service-finder__clear').on("click", function (e) { 455 e.preventDefault(); 456 $(this).removeClass('service-finder__clear--show'); 457 $('.service-finder__letters button.letter').removeClass('letter--active'); 458 $('.service-finder__results-group > li').each(function (index) { 459 $(this).show(); // Show the row 460 $(this).attr('aria-hidden', false); 461 }); 462 }); 463 464 /* ====================== TRAVELINE INTEGRATION ====================== */ 465 var CONFIG = { 466 tnjpID: "G-J4L3ER26JB", 467 formContainerId: "journeyPlannerForm", 468 resultsContainerId: "journeyPlannerResults", 469 mode: "Mobile", 470 callbacks: false, 471 history: true, 472 analytics: false, 473 scrollWrapper: "journey-results-container" 474 }; 475 window.onload = function () { 476 if ($('#journeyPlannerForm').length) { 477 new MXDTraveline(CONFIG); 478 } 479 }; 480 481 /* ====================== ORDER DOWNLOADS TABLE BY FILENAME SORT ====================== */ 482 var ascendingFileName = false;
483 $('.download-search__list .sort--filename').on("click", function () { 484 var table = $('#download-table'); 485 var columnIndex = 0; // Change this to the index of the column you want to sort 486 var rows = table.find('tbody tr').get(); 487 rows.sort(function (a, b) { 488 var aValue = $(a).find('td').eq(columnIndex).text(); 489 var bValue = $(b).find('td').eq(columnIndex).text(); 490 return ascendingFileName ? aValue.localeCompare(bValue) : bValue.localeCompare(aValue); 491 }); 492 $.each(rows, function (index, row) { 493 table.children('tbody').append(row); 494 }); 495 ascendingFileName = !ascendingFileName; 496 updateSortFileName(); 497 }); 498 if ($('.download-search__list').length) { 499 var table = $('#download-table'); 500 var columnIndex = 0; // Change this to the index of the column you want to sort 501 var rows = table.find('tbody tr').get(); 502 rows.sort(function (a, b) { 503 var aValue = $(a).find('td').eq(columnIndex).text(); 504 var bValue = $(b).find('td').eq(columnIndex).text(); 505 return aValue.localeCompare(bValue); 506 }); 507 $.each(rows, function (index, row) { 508 table.children('tbody').append(row); 509 }); 510 } 511 function updateSortFileName() { 512 $('#download-table .sort--date').removeClass('sort--desc'); 513 $('#download-table .sort--date').removeClass('sort--asc'); 514 if (ascendingFileName) { 515 $('#download-table .sort--filename').addClass('sort--desc'); 516 $('#download-table .sort--filename').removeClass('sort--asc'); 517 } else { 518 $('#download-table .sort--filename').removeClass('sort--desc'); 519 $('#download-table .sort--filename').addClass('sort--asc'); 520 } 521 } 522 523 /* ====================== ADD HIDDEN SPAN TO ALL LINKS THAT OPEN IN NEW TAB ====================== */ 524 function addNoOpener(link) { 525 var linkTypes = (link.getAttribute('rel') || '').split(' '); 526 if (!linkTypes.includes('noopener')) { 527 linkTypes.push('noopener'); 528 } 529 link.setAttribute('rel', linkTypes.join(' ').trim()); 530 } 531 function addNewTabMessage(link) { 532 if (!link.querySelector('.screen-reader-text')) { 533 link.insertAdjacentHTML('beforeend', '<span class="screen-reader-text">(opens in a new tab)</span>'); 534 } 535 } 536 document.querySelectorAll('a[target="_blank"]:not(.ignore-blank)').forEach(function (link) { 537 addNoOpener(link); 538 addNewTabMessage(link); 539 }); 540 541 /* ====================== SCROLL TO TOP BUTTON ====================== */ 542 var scrollToTopButton = $('#scrollToTop'); 543 544 // Function to check scroll position and toggle button visibility 545 function toggleScrollButton() { 546 var feedbackElement = $('.give-feedback'); 547 var commentsElement = $('.comments-wrap'); 548 if (commentsElement.length) { 549 var feedbackElementTop = commentsElement.offset().top - $(window).height(); 550 } else { 551 var feedbackElementTop = feedbackElement.offset().top - $(window).height(); 552 } 553 if ($(document).scrollTop() > feedbackElementTop) { 554 scrollToTopButton.addClass('fixed'); 555 } else { 556 scrollToTopButton.removeClass('fixed'); 557 if ($(document).scrollTop() > 500) { 558 scrollToTopButton.css('display', 'block'); 559 } else { 560 scrollToTopButton.css('display', 'none'); 561 } 562 } 563 } 564 if (scrollToTopButton.length) { 565 // Add a scroll event listener 566 $(window).scroll(toggleScrollButton); 567 } 568 569 // Function to scroll to the top when the button is clicked 570 scrollToTopButton.click(function () { 571 $('html, body').animate({ 572 scrollTop: 0 573 }, 'slow'); 574 }); 575 576 /* ====================== SEARCHFORM CLEAR ====================== */ 577 var inputFields = $(".searchform input[type='search']"); 578 var clearButtons = $(".searchform__clear"); 579 580 // Attach event listeners to each input field and clear button 581 inputFields.each(function (index) { 582 $(this).on("input", function () { 583 // Show or hide the clear button based on input value 584 clearButtons.eq(index).toggle($(this).val().length > 0); 585 }); 586 clearButtons.eq(index).on("click", function () { 587 // Clear the input and hide the clear button 588 inputFields.eq(index).val(""); 589 $(this).hide(); 590 }); 591 }); 592 /* ====================== REMOVE nbsp ====================== */ 593 $('.body-content').each(function () { 594 var content = $(this).html(); 595 content = content.replace(/ /g, ' '); 596 $(this).html(content); 597 }); 598}); 599 600/***/ }), 601 602/***/ "./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[7].oneOf[1].use[1]!./node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[7].oneOf[1].use[2]!./node_modules/swiper/swiper-bundle.css": 603/*!*********************************************************************************************************************************************************************************************************!*\ 604 !*** ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[7].oneOf[1].use[1]!./node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[7].oneOf[1].use[2]!./node_modules/swiper/swiper-bundle.css ***! 605 \*********************************************************************************************************************************************************************************************************/ 606/***/ ((module, __webpack_exports__, __webpack_require__) => { 607 608"use strict"; 609__webpack_require__.r(__webpack_exports__); 610/* harmony export */ __webpack_require__.d(__webpack_exports__, { 611/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) 612/* harmony export */ }); 613/* harmony import */ var _css_loader_dist_runtime_cssWithMappingToString_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../css-loader/dist/runtime/cssWithMappingToString.js */ "./node_modules/css-loader/dist/runtime/cssWithMappingToString.js"); 614/* harmony import */ var _css_loader_dist_runtime_cssWithMappingToString_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_css_loader_dist_runtime_cssWithMappingToString_js__WEBPACK_IMPORTED_MODULE_0__); 615/* harmony import */ var _css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../css-loader/dist/runtime/api.js */ "./node_modules/css-loader/dist/runtime/api.js"); 616/* harmony import */ var _css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__); 617// Imports 618 619 620var ___CSS_LOADER_EXPORT___ = _css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_css_loader_dist_runtime_cssWithMappingToString_js__WEBPACK_IMPORTED_MODULE_0___default())); 621// Module
622___CSS_LOADER_EXPORT___.push([module.id, "/**\n * Swiper 11.0.5\n * Most modern mobile touch slider and framework with hardware accelerated transitions\n * https://swiperjs.com\n *\n * Copyright 2014-2023 Vladimir Kharlampidi\n *\n * Released under the MIT License\n *\n * Released on: November 22, 2023\n */\n\n/* FONT_START */\n@font-face {\n font-family: 'swiper-icons';\n src: url('data:application/font-woff;charset=utf-8;base64, d09GRgABAAAAAAZgABAAAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABGRlRNAAAGRAAAABoAAAAci6qHkUdERUYAAAWgAAAAIwAAACQAYABXR1BPUwAABhQAAAAuAAAANuAY7+xHU1VCAAAFxAAAAFAAAABm2fPczU9TLzIAAAHcAAAASgAAAGBP9V5RY21hcAAAAkQAAACIAAABYt6F0cBjdnQgAAACzAAAAAQAAAAEABEBRGdhc3AAAAWYAAAACAAAAAj//wADZ2x5ZgAAAywAAADMAAAD2MHtryVoZWFkAAABbAAAADAAAAA2E2+eoWhoZWEAAAGcAAAAHwAAACQC9gDzaG10eAAAAigAAAAZAAAArgJkABFsb2NhAAAC0AAAAFoAAABaFQAUGG1heHAAAAG8AAAAHwAAACAAcABAbmFtZQAAA/gAAAE5AAACXvFdBwlwb3N0AAAFNAAAAGIAAACE5s74hXjaY2BkYGAAYpf5Hu/j+W2+MnAzMYDAzaX6QjD6/4//Bxj5GA8AuRwMYGkAPywL13jaY2BkYGA88P8Agx4j+/8fQDYfA1AEBWgDAIB2BOoAeNpjYGRgYNBh4GdgYgABEMnIABJzYNADCQAACWgAsQB42mNgYfzCOIGBlYGB0YcxjYGBwR1Kf2WQZGhhYGBiYGVmgAFGBiQQkOaawtDAoMBQxXjg/wEGPcYDDA4wNUA2CCgwsAAAO4EL6gAAeNpj2M0gyAACqxgGNWBkZ2D4/wMA+xkDdgAAAHjaY2BgYGaAYBkGRgYQiAHyGMF8FgYHIM3DwMHABGQrMOgyWDLEM1T9/w8UBfEMgLzE////P/5//f/V/xv+r4eaAAeMbAxwIUYmIMHEgKYAYjUcsDAwsLKxc3BycfPw8jEQA/gZBASFhEVExcQlJKWkZWTl5BUUlZRVVNXUNTQZBgMAAMR+E+gAEQFEAAAAKgAqACoANAA+AEgAUgBcAGYAcAB6AIQAjgCYAKIArAC2AMAAygDUAN4A6ADyAPwBBgEQARoBJAEuATgBQgFMAVYBYAFqAXQBfgGIAZIBnAGmAbIBzgHsAAB42u2NMQ6CUAyGW568x9AneYYgm4MJbhKFaExIOAVX8ApewSt4Bic4AfeAid3VOBixDxfPYEza5O+Xfi04YADggiUIULCuEJK8VhO4bSvpdnktHI5QCYtdi2sl8ZnXaHlqUrNKzdKcT8cjlq+rwZSvIVczNiezsfnP/uznmfPFBNODM2K7MTQ45YEAZqGP81AmGGcF3iPqOop0r1SPTaTbVkfUe4HXj97wYE+yNwWYxwWu4v1ugWHgo3S1XdZEVqWM7ET0cfnLGxWfkgR42o2PvWrDMBSFj/IHLaF0zKjRgdiVMwScNRAoWUoH78Y2icB/yIY09An6AH2Bdu/UB+yxopYshQiEvnvu0dURgDt8QeC8PDw7Fpji3fEA4z/PEJ6YOB5hKh4dj3EvXhxPqH/SKUY3rJ7srZ4FZnh1PMAtPhwP6fl2PMJMPDgeQ4rY8YT6Gzao0eAEA409DuggmTnFnOcSCiEiLMgxCiTI6Cq5DZUd3Qmp10vO0LaLTd2cjN4fOumlc7lUYbSQcZFkutRG7g6JKZKy0RmdLY680CDnEJ+UMkpFFe1RN7nxdVpXrC4aTtnaurOnYercZg2YVmLN/d/gczfEimrE/fs/bOuq29Zmn8tloORaXgZgGa78yO9/cnXm2BpaGvq25Dv9S4E9+5SIc9PqupJKhYFSSl47+Qcr1mYNAAAAeNptw0cKwkAAAMDZJA8Q7OUJvkLsPfZ6zFVERPy8qHh2YER+3i/BP83vIBLLySsoKimrqKqpa2hp6+jq6RsYGhmbmJqZSy0sraxtbO3sHRydnEMU4uR6yx7JJXveP7WrDycAAAAAAAH//wACeNpjYGRgYOABYhkgZgJCZgZNBkYGLQZtIJsFLMYAAAw3ALgAeNolizEKgDAQBCchRbC2sFER0YD6qVQiBCv/H9ezGI6Z5XBAw8CBK/m5iQQVauVbXLnOrMZv2oLdKFa8Pjuru2hJzGabmOSLzNMzvutpB3N42mNgZGBg4GKQYzBhYMxJLMlj4GBgAYow/P/PAJJhLM6sSoWKfWCAAwDAjgbRAAB42mNgYGBkAIIbCZo5IPrmUn0hGA0AO8EFTQAA');\n font-weight: 400;\n font-style: normal;\n}\n/* FONT_END */\n:root {\n --swiper-theme-color: #007aff;\n /*\n --swiper-preloader-color: var(--swiper-theme-color);\n --swiper-wrapper-transition-timing-function: initial;\n */\n}\n:host {\n position: relative;\n display: block;\n margin-left: auto;\n margin-right: auto;\n z-index: 1;\n}\n.swiper {\n margin-left: auto;\n margin-right: auto;\n position: relative;\n overflow: hidden;\n list-style: none;\n padding: 0;\n /* Fix of Webkit flickering */\n z-index: 1;\n display: block;\n}\n.swiper-vertical > .swiper-wrapper {\n flex-direction: column;\n}\n.swiper-wrapper {\n position: relative;\n width: 100%;\n height: 100%;\n z-index: 1;\n display: flex;\n transition-property: transform;\n transition-timing-function: var(--swiper-wrapper-transition-timing-function, initial);\n box-sizing: content-box;\n}\n.swiper-android .swiper-slide,\n.swiper-ios .swiper-slide,\n.swiper-wrapper {\n transform: translate3d(0px, 0, 0);\n}\n.swiper-horizontal {\n touch-action: pan-y;\n}\n.swiper-vertical {\n touch-action: pan-x;\n}\n.swiper-slide {\n flex-shrink: 0;\n width: 100%;\n height: 100%;\n position: relative;\n transition-property: transform;\n display: block;\n}\n.swiper-slide-invisible-blank {\n visibility: hidden;\n}\n/* Auto Height */\n.swiper-autoheight,\n.swiper-autoheight .swiper-slide {\n height: auto;\n}\n.swiper-autoheight .swiper-wrapper {\n align-items: flex-start;\n transition-property: transform, height;\n}\n.swiper-backface-hidden .swiper-slide {\n transform: translateZ(0);\n backface-visibility: hidden;\n}\n/* 3D Effects */\n.swiper-3d.swiper-css-mode .swiper-wrapper {\n perspective: 1200px;\n}\n.swiper-3d .swiper-wrapper {\n transform-style: preserve-3d;\n}\n.swiper-3d {\n perspective: 1200px;\n}\n.swiper-3d .swiper-slide,\n.swiper-3d .swiper-cube-shadow {\n transform-style: preserve-3d;\n}\n/* CSS Mode */\n.swiper-css-mode > .swiper-wrapper {\n overflow: auto;\n scrollbar-width: none;\n /* For Firefox */\n -ms-overflow-style: none;\n /* For Internet Explorer and Edge */\n}\n.swiper-css-mode > .swiper-wrapper::-webkit-scrollbar {\n display: none;\n}\n.swiper-css-mode > .swiper-wrapper > .swiper-slide {\n scroll-snap-align: start start;\n}\n.swiper-css-mode.swiper-horizontal > .swiper-wrapper {\n scroll-snap-type: x mandatory;\n}\n.swiper-css-mode.swiper-vertical > .swiper-wrapper {\n scroll-snap-type: y mandatory;\n}\n.swiper-css-mode.swiper-free-mode > .swiper-wrapper {\n scroll-snap-type: none;\n}\n.swiper-css-mode.swiper-free-mode > .swiper-wrapper > .swiper-slide {\n scroll-snap-align: none;\n}\n.swiper-css-mode.swiper-centered > .swiper-wrapper::before {\n content: '';\n flex-shrink: 0;\n order: 9999;\n}\n.swiper-css-mode.swiper-centered > .swiper-wrapper > .swiper-slide {\n scroll-snap-align: center center;\n scroll-snap-stop: always;\n}\n.swiper-css-mode.swiper-centered.swiper-horizontal > .swiper-wrapper > .swiper-slide:first-child {\n margin-inline-start: var(--swiper-centered-offset-before);\n}\n.swiper-css-mode.swiper-centered.swiper-horizontal > .swiper-wrapper::before {\n height: 100%;\n min-height: 1px;\n width: var(--swiper-centered-offset-after);\n}\n.swiper-css-mode.swiper-centered.swiper-vertical > .swiper-wrapper > .swiper-slide:first-child {\n margin-block-start: var(--swiper-centered-offset-before);\n}\n.swiper-css-mode.swiper-centered.swiper-vertical > .swiper-wrapper::before {\n width: 100%;\n min-width: 1px;\n height: var(--swiper-centered-offset-after);\n}\n/* Slide styles start */\n/* 3D Shadows */\n.swiper-3d .swiper-slide-shadow,\n.swiper-3d .swiper-slide-shadow-left,\n.swiper-3d .swiper-slide-shadow-right,\n.swiper-3d .swiper-slide-shadow-top,\n.swiper-3d .swiper-slide-shadow-bottom,\n.swiper-3d .swiper-slide-shadow,\n.swiper-3d .swiper-slide-shadow-left,\n.swiper-3d .swiper-slide-shadow-right,\n.swiper-3d .swiper-slide-shadow-top,\n.swiper-3d .swiper-slide-shadow-bottom {\n position: absolute;\n left: 0;\n top: 0;\n width: 100%;\n height: 100%;\n pointer-events: none;\n z-index: 10;\n}\n.swiper-3d .swiper-slide-shadow {\n background: rgba(0, 0, 0, 0.15);\n}\n.swiper-3d .swiper-slide-shadow-left {\n background-image: linear-gradient(to left, rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0));\n}\n.swiper-3d .swiper-slide-shadow-right {\n background-image: linear-gradient(to right, rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0));\n}\n.swiper-3d .swiper-slide-shadow-top {\n background-image: linear-gradient(to top, rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0));\n}\n.swiper-3d .swiper-slide-shadow-bottom {\n background-image: linear-gradient(to bottom, rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0));\n}\n.swiper-lazy-preloader {\n width: 42px;\n height: 42px;\n position: absolute;\n left: 50%;\n top: 50%;\n margin-left: -21px;\n margin-top: -21px;\n z-index: 10;\n transform-origin: 50%;\n box-sizing: border-box;\n border: 4px solid var(--swiper-preloader-color, var(--swiper-theme-color));\n border-radius: 50%;\n border-top-color: transparent;\n}\n.swiper:not(.swiper-watch-progress) .swiper-lazy-preloader,\n.swiper-watch-progress .swiper-slide-visible .swiper-lazy-preloader {\n animation: swiper-preloader-spin 1s infinite linear;\n}\n.swiper-lazy-preloader-white {\n --swiper-preloader-color: #fff;\n}\n.swiper-lazy-preloader-black {\n --swiper-preloader-color: #000;\n}\n@keyframes swiper-preloader-spin {\n 0% {\n transform: rotate(0deg);\n }\n 100% {\n transform: rotate(360deg);\n }\n}\n/* Slide styles end */\n.swiper-virtual .swiper-slide {\n -webkit-backface-visibility: hidden;\n transform: translateZ(0);\n}
622\n.swiper-virtual.swiper-css-mode .swiper-wrapper::after {\n content: '';\n position: absolute;\n left: 0;\n top: 0;\n pointer-events: none;\n}\n.swiper-virtual.swiper-css-mode.swiper-horizontal .swiper-wrapper::after {\n height: 1px;\n width: var(--swiper-virtual-size);\n}\n.swiper-virtual.swiper-css-mode.swiper-vertical .swiper-wrapper::after {\n width: 1px;\n height: var(--swiper-virtual-size);\n}\n:root {\n --swiper-navigation-size: 44px;\n /*\n --swiper-navigation-top-offset: 50%;\n --swiper-navigation-sides-offset: 10px;\n --swiper-navigation-color: var(--swiper-theme-color);\n */\n}\n.swiper-button-prev,\n.swiper-button-next {\n position: absolute;\n top: var(--swiper-navigation-top-offset, 50%);\n width: calc(var(--swiper-navigation-size) / 44 * 27);\n height: var(--swiper-navigation-size);\n margin-top: calc(0px - (var(--swiper-navigation-size) / 2));\n z-index: 10;\n cursor: pointer;\n display: flex;\n align-items: center;\n justify-content: center;\n color: var(--swiper-navigation-color, var(--swiper-theme-color));\n}\n.swiper-button-prev.swiper-button-disabled,\n.swiper-button-next.swiper-button-disabled {\n opacity: 0.35;\n cursor: auto;\n pointer-events: none;\n}\n.swiper-button-prev.swiper-button-hidden,\n.swiper-button-next.swiper-button-hidden {\n opacity: 0;\n cursor: auto;\n pointer-events: none;\n}\n.swiper-navigation-disabled .swiper-button-prev,\n.swiper-navigation-disabled .swiper-button-next {\n display: none !important;\n}\n.swiper-button-prev svg,\n.swiper-button-next svg {\n width: 100%;\n height: 100%;\n -o-object-fit: contain;\n object-fit: contain;\n transform-origin: center;\n}\n.swiper-rtl .swiper-button-prev svg,\n.swiper-rtl .swiper-button-next svg {\n transform: rotate(180deg);\n}\n.swiper-button-prev,\n.swiper-rtl .swiper-button-next {\n left: var(--swiper-navigation-sides-offset, 10px);\n right: auto;\n}\n.swiper-button-next,\n.swiper-rtl .swiper-button-prev {\n right: var(--swiper-navigation-sides-offset, 10px);\n left: auto;\n}\n.swiper-button-lock {\n display: none;\n}\n/* Navigation font start */\n.swiper-button-prev:after,\n.swiper-button-next:after {\n font-family: swiper-icons;\n font-size: var(--swiper-navigation-size);\n text-transform: none !important;\n letter-spacing: 0;\n font-variant: initial;\n line-height: 1;\n}\n.swiper-button-prev:after,\n.swiper-rtl .swiper-button-next:after {\n
622content: 'prev';\n}\n.swiper-button-next,\n.swiper-rtl .swiper-button-prev {\n right: var(--swiper-navigation-sides-offset, 10px);\n left: auto;\n}\n.swiper-button-next:after,\n.swiper-rtl .swiper-button-prev:after {\n content: 'next';\n}\n/* Navigation font end */\n:root {\n /*\n --swiper-pagination-color: var(--swiper-theme-color);\n --swiper-pagination-left: auto;\n --swiper-pagination-right: 8px;\n --swiper-pagination-bottom: 8px;\n --swiper-pagination-top: auto;\n --swiper-pagination-fraction-color: inherit;\n --swiper-pagination-progressbar-bg-color: rgba(0,0,0,0.25);\n --swiper-pagination-progressbar-size: 4px;\n --swiper-pagination-bullet-size: 8px;\n --swiper-pagination-bullet-width: 8px;\n --swiper-pagination-bullet-height: 8px;\n --swiper-pagination-bullet-border-radius: 50%;\n --swiper-pagination-bullet-inactive-color: #000;\n --swiper-pagination-bullet-inactive-opacity: 0.2;\n --swiper-pagination-bullet-opacity: 1;\n --swiper-pagination-bullet-horizontal-gap: 4px;\n --swiper-pagination-bullet-vertical-gap: 6px;\n */\n}\n.swiper-pagination {\n position: absolute;\n text-align: center;\n transition: 300ms opacity;\n transform: translate3d(0, 0, 0);\n z-index: 10;\n}\n.swiper-pagination.swiper-pagination-hidden {\n opacity: 0;\n}\n.swiper-pagination-disabled > .swiper-pagination,\n.swiper-pagination.swiper-pagination-disabled {\n display: none !important;\n}\n/* Common Styles */\n.swiper-pagination-fraction,\n.swiper-pagination-custom,\n.swiper-horizontal > .swiper-pagination-bullets,\n.swiper-pagination-bullets.swiper-pagination-horizontal {\n bottom: var(--swiper-pagination-bottom, 8px);\n top: var(--swiper-pagination-top, auto);\n left: 0;\n width: 100%;\n}\n/* Bullets */\n.swiper-pagination-bullets-dynamic {\n overflow: hidden;\n font-size: 0;\n}\n.swiper-pagination-bullets-dynamic .swiper-pagination-bullet {\n transform: scale(0.33);\n position: relative;\n}\n.swiper-pagination-bullets-dynamic .swiper-pagination-bullet-active {\n transform: scale(1);\n}\n.swiper-pagination-bullets-dynamic .swiper-pagination-bullet-active-main {\n transform: scale(1);\n}\n.swiper-pagination-bullets-dynamic .swiper-pagination-bullet-active-prev {\n transform: scale(0.66);\n}\n.swiper-pagination-bullets-dynamic .swiper-pagination-bullet-active-prev-prev {\n transform: scale(0.33);\n}\n.swiper-pagination-bullets-dynamic .swiper-pagination-bullet-active-next {\n transform: scale(0.66);\n}\n.swiper-pagination-bullets-dynamic .swiper-pagination-bullet-active-next-next {\n transform: scale(0.33);\n}\n.swiper-pagination-bullet {\n width: var(--swiper-pagination-bullet-width, var(--swiper-pagination-bullet-size, 8px));\n height: var(--swiper-pagination-bullet-height, var(--swiper-pagination-bullet-size, 8px));\n display: inline-block;\n border-radius: var(--swiper-pagination-bullet-border-radius, 50%);\n background: var(--swiper-pagination-bullet-inactive-color, #000);\n opacity: var(--swiper-pagination-bullet-inactive-opacity, 0.2);\n}\nbutton.swiper-pagination-bullet {\n border: none;\n margin: 0;\n padding: 0;\n box-shadow: none;\n -webkit-appearance: none;\n -moz-appearance: none;\n appearance: none;\n}\n.swiper-pagination-clickable .swiper-pagination-bullet {\n cursor: pointer;\n}\n.swiper-pagination-bullet:only-child {\n display: none !important;\n}\n.swiper-pagination-bullet-active {\n opacity: var(--swiper-pagination-bullet-opacity, 1);\n background: var(--swiper-pagination-color, var(--swiper-theme-color));\n}\n.swiper-vertical > .swiper-pagination-bullets,\n.swiper-pagination-vertical.swiper-pagination-bullets {\n right: var(--swiper-pagination-right, 8px);\n left: var(--swiper-pagination-left, auto);\n top: 50%;\n transform: translate3d(0px, -50%, 0);\n}\n.swiper-vertical > .swiper-pagination-bullets .swiper-pagination-bullet,\n.swiper-pagination-vertical.swiper-pagination-bullets .swiper-pagination-bullet {\n margin: var(--swiper-pagination-bullet-vertical-gap, 6px) 0;\n display: block;\n}\n.swiper-vertical > .swiper-pagination-bullets.swiper-pagination-bullets-dynamic,\n.swiper-pagination-vertical.swiper-pagination-bullets.swiper-pagination-bullets-dynamic {\n top: 50%;\n transform: translateY(-50%);\n width: 8px;\n}\n.swiper-vertical > .swiper-pagination-bullets.swiper-pagination-bullets-dynamic .swiper-pagination-bullet,\n.swiper-pagination-vertical.swiper-pagination-bullets.swiper-pagination-bullets-dynamic .swiper-pagination-bullet {\n display: inline-block;\n transition: 200ms transform,\n 200ms top;\n}\n.swiper-horizontal > .swiper-pagination-bullets .swiper-pagination-bullet,\n.swiper-pagination-horizontal.swiper-pagination-bullets .swiper-pagination-bullet {\n margin: 0 var(--swiper-pagination-bullet-horizontal-gap, 4px);\n}\n.swiper-horizontal > .swiper-pagination-bullets.swiper-pagination-bullets-dynamic,\n.swiper-pagination-horizontal.swiper-pagination-bullets.swiper-pagination-bullets-dynamic {\n left: 50%;\n transform: translateX(-50%);\n white-space: nowrap;\n}\n.swiper-horizontal > .swiper-pagination-bullets.swiper-pagination-bullets-dynamic .swiper-pagination-bullet,\n.swiper-pagination-horizontal.swiper-pagination-bullets.swiper-pagination-bullets-dynamic .swiper-pagination-bullet {\n transition: 200ms transform,\n 200ms left;\n}\n.swiper-horizontal.swiper-rtl > .swiper-pagination-bullets-dynamic .swiper-pagination-bullet {\n transition: 200ms transform,\n 200ms right;\n}\n/* Fraction */\n.swiper-pagination-fraction {\n color: var(--swiper-pagination-fraction-color, inherit);\n}\n/* Progress */\n.swiper-pagination-progressbar {\n background: var(--swiper-pagination-progressbar-bg-color, rgba(0, 0, 0, 0.25));\n position: absolute;\n}\n.swiper-pagination-progressbar .swiper-pagination-progressbar-fill {\n background: var(--swiper-pagination-color, var(--swiper-theme-color));\n position: absolute;\n left: 0;\n top: 0;\n width: 100%;\n height: 100%;\n transform: scale(0);\n transform-origin: left top;\n}\n.swiper-rtl .swiper-pagination-progressbar .swiper-pagination-progressbar-fill {\n transform-origin: right top;\n}\n.swiper-horizontal > .swiper-pagination-progressbar,\n.swiper-pagination-progressbar.swiper-pagination-horizontal,\n.swiper-vertical > .swiper-pagination-progressbar.swiper-pagination-progressbar-opposite,\n.swiper-pagination-progressbar.swiper-pagination-vertical.swiper-pagination-progressbar-opposite {\n width: 100%;\n height: var(--swiper-pagination-progressbar-size, 4px);\n left: 0;\n top: 0;\n}\n.swiper-vertical > .swiper-pagination-progressbar,\n.swiper-pagination-progressbar.swiper-pagination-vertical,\n.swiper-horizontal > .swiper-pagination-progressbar.swiper-pagination-progressbar-opposite,\n.swiper-pagination-progressbar.swiper-pagination-horizontal.swiper-pagination-progressbar-opposite {\n width: var(--swiper-pagination-progressbar-size, 4px);\n height: 100%;\n left: 0;\n top: 0;\n}\n.swiper-pagination-lock {\n display: none;\n}\n:root {\n /*\n --swiper-scrollbar-border-radius: 10px;\n --swiper-scrollbar-top: auto;\n --swiper-scrollbar-bottom: 4px;\n --swiper-scrollbar-left: auto;\n --swiper-scrollbar-right: 4px;\n --swiper-scrollbar-sides-offset: 1%;\n --swiper-scrollbar-bg-color: rgba(0, 0, 0, 0.1);
622\n --swiper-scrollbar-drag-bg-color: rgba(0, 0, 0, 0.5);\n --swiper-scrollbar-size: 4px;\n */\n}\n.swiper-scrollbar {\n border-radius: var(--swiper-scrollbar-border-radius, 10px);\n position: relative;\n touch-action: none;\n background: var(--swiper-scrollbar-bg-color, rgba(0, 0, 0, 0.1));\n}\n.swiper-scrollbar-disabled > .swiper-scrollbar,\n.swiper-scrollbar.swiper-scrollbar-disabled {\n display: none !important;\n}\n.swiper-horizontal > .swiper-scrollbar,\n.swiper-scrollbar.swiper-scrollbar-horizontal {\n position: absolute;\n left: var(--swiper-scrollbar-sides-offset, 1%);\n bottom: var(--swiper-scrollbar-bottom, 4px);\n top: var(--swiper-scrollbar-top, auto);\n z-index: 50;\n height: var(--swiper-scrollbar-size, 4px);\n width: calc(100% - 2 * var(--swiper-scrollbar-sides-offset, 1%));\n}\n.swiper-vertical > .swiper-scrollbar,\n.swiper-scrollbar.swiper-scrollbar-vertical {\n position: absolute;\n left: var(--swiper-scrollbar-left, auto);\n right: var(--swiper-scrollbar-right, 4px);\n top: var(--swiper-scrollbar-sides-offset, 1%);\n z-index: 50;\n width: var(--swiper-scrollbar-size, 4px);\n height: calc(100% - 2 * var(--swiper-scrollbar-sides-offset, 1%));\n}\n.swiper-scrollbar-drag {\n height: 100%;\n width: 100%;\n position: relative;\n background: var(--swiper-scrollbar-drag-bg-color, rgba(0, 0, 0, 0.5));\n border-radius: var(--swiper-scrollbar-border-radius, 10px);\n left: 0;\n top: 0;\n}\n.swiper-scrollbar-cursor-drag {\n cursor: move;\n}\n.swiper-scrollbar-lock {\n display: none;\n}\n/* Zoom container styles start */\n.swiper-zoom-container {\n width: 100%;\n height: 100%;\n display: flex;\n justify-content: center;\n align-items: center;\n text-align: center;\n}\n.swiper-zoom-container > img,\n.swiper-zoom-container > svg,\n.swiper-zoom-container > canvas {\n max-width: 100%;\n max-height: 100%;\n -o-object-fit: contain;\n object-fit: contain;\n}\n/* Zoom container styles end */\n.swiper-slide-zoomed {\n cursor: move;\n touch-action: none;\n}\n/* a11y */\n.swiper .swiper-notification {\n position: absolute;\n left: 0;\n top: 0;\n pointer-events: none;\n opacity: 0;\n z-index: -1000;\n}\n.swiper-free-mode > .swiper-wrapper {\n transition-timing-function: ease-out;\n margin: 0 auto;\n}\n.swiper-grid > .swiper-wrapper {\n flex-wrap: wrap;\n}\n.swiper-grid-column > .swiper-wrapper {\n flex-wrap: wrap;\n flex-direction: column;\n}\n.swiper-fade.swiper-free-mode .swiper-slide {\n transition-timing-function: ease-out;\n}\n.swiper-fade .swiper-slide {\n pointer-events: none;\n transition-property: opacity;\n}\n.swiper-fade .swiper-slide .swiper-slide {\n pointer-events: none;\n}\n.swiper-fade .swiper-slide-active {\n pointer-events: auto;\n}\n.swiper-fade .swiper-slide-active .swiper-slide-active {\n pointer-events: auto;\n}\n.swiper-cube {\n overflow: visible;\n}\n.swiper-cube .swiper-slide {\n pointer-events: none;\n backface-visibility: hidden;\n z-index: 1;\n visibility: hidden;\n transform-origin: 0 0;\n width: 100%;\n height: 100%;\n}\n.swiper-cube .swiper-slide .swiper-slide {\n pointer-events: none;\n}\n.swiper-cube.swiper-rtl .swiper-slide {\n transform-origin: 100% 0;\n}\n.swiper-cube .swiper-slide-active,\n.swiper-cube .swiper-slide-active .swiper-slide-active {\n pointer-events: auto;\n}\n.swiper-cube .swiper-slide-active,\n.swiper-cube .swiper-slide-next,\n.swiper-cube .swiper-slide-prev {\n pointer-events: auto;\n visibility: visible;\n}\n.swiper-cube .swiper-cube-shadow {\n position: absolute;\n left: 0;\n bottom: 0px;\n width: 100%;\n height: 100%;\n opacity: 0.6;\n z-index: 0;\n}\n.swiper-cube .swiper-cube-shadow:before {\n content: '';\n background: #000;\n position: absolute;\n left: 0;\n top: 0;\n bottom: 0;\n right: 0;\n filter: blur(50px);\n}\n.swiper-cube .swiper-slide-next + .swiper-slide {\n pointer-events: auto;\n visibility: visible;\n}\n/* Cube slide shadows start */\n.swiper-cube .swiper-slide-shadow-cube.swiper-slide-shadow-top,\n.swiper-cube .swiper-slide-shadow-cube.swiper-slide-shadow-bottom,\n.swiper-cube .swiper-slide-shadow-cube.swiper-slide-shadow-left,\n.swiper-cube .swiper-slide-shadow-cube.swiper-slide-shadow-right {\n z-index: 0;\n backface-visibility: hidden;\n}\n/* Cube slide shadows end */\n.swiper-flip {\n overflow: visible;\n}\n.swiper-flip .swiper-slide {\n pointer-events: none;\n backface-visibility: hidden;\n z-index: 1;\n}\n.swiper-flip .swiper-slide .swiper-slide {\n pointer-events: none;\n}\n.swiper-flip .swiper-slide-active,\n.swiper-flip .swiper-slide-active .swiper-slide-active {\n pointer-events: auto;\n}\n/* Flip slide shadows start */\n.swiper-flip .swiper-slide-shadow-flip.swiper-slide-shadow-top,\n.swiper-flip .swiper-slide-shadow-flip.swiper-slide-shadow-bottom,\n.swiper-flip .swiper-slide-shadow-flip.swiper-slide-shadow-left,\n.swiper-flip .swiper-slide-shadow-flip.swiper-slide-shadow-right {\n z-index: 0;\n backface-visibility: hidden;\n}\n/* Flip slide shadows end */\n.swiper-creative .swiper-slide {\n backface-visibility: hidden;\n overflow: hidden;\n transition-property: transform, opacity, height;\n}\n.swiper-cards {\n overflow: visible;\n}\n.swiper-cards .swiper-slide {\n transform-origin: center bottom;\n backface-visibility: hidden;\n overflow: hidden;\n}\n", "",{"version":3,"sources":["webpack://./node_modules/swiper/swiper-bundle.css"],"names":[],"mappings":"AAAA;;;;;;;;;;EAUE;;AAEF,eAAe;AACf;EACE,2BAA2B;EAC3B,6rEAA6rE;EAC7rE,gBAAgB;EAChB,kBAAkB;AACpB;AACA,aAAa;AACb;EACE,6BAA6B;EAC7B;;;GAGC;AACH;AACA;EACE,kBAAkB;EAClB,cAAc;EACd,iBAAiB;EACjB,kBAAkB;EAClB,UAAU;AACZ;AACA;EACE,iBAAiB;EACjB,kBAAkB;EAClB,kBAAkB;EAClB,gBAAgB;EAChB,gBAAgB;EAChB,UAAU;EACV,6BAA6B;EAC7B,UAAU;EACV,cAAc;AAChB;AACA;EACE,sBAAsB;AACxB;AACA;EACE,kBAAkB;EAClB,WAAW;EACX,YAAY;EACZ,UAAU;EACV,aAAa;EACb,8BAA8B;EAC9B,qFAAqF;EACrF,uBAAuB;AACzB;AACA;;;EAGE,iCAAiC;AACnC;AACA;EACE,mBAAmB;AACrB;AACA;EACE,mBAAmB;AACrB;AACA;EACE,cAAc;EACd,WAAW;EACX,YAAY;EACZ,kBAAkB;EAClB,8BAA8B;EAC9B,cAAc;AAChB;AACA;EACE,kBAAkB;AACpB;AACA,gBAAgB;AAChB;;EAEE,YAAY;AACd;AACA;EACE,uBAAuB;EACvB,sCAAsC;AACxC;AACA;EACE,wBAAwB;EAEhB,2BAA2B;AACrC;AACA,eAAe;AACf;EACE,mBAAmB;AACrB;AACA;EACE,4BAA4B;AAC9B;AACA;EACE,mBAAmB;AACrB;AACA;;EAEE,4BAA4B;AAC9B;AACA,aAAa;AACb;EACE,cAAc;EACd,qBAAqB;EACrB,gBAAgB;EAChB,wBAAwB;EACxB,mCAAmC;AACrC;AACA;EACE,aAAa;AACf;AACA;EACE,8BAA8B;AAChC;AACA;EACE,6BAA6B;AAC/B;AACA;EACE,6BAA6B;AAC/B;AACA;EACE,sBAAsB;AACxB;AACA;EACE,uBAAuB;AACzB;AACA;EACE,WAAW;EACX,cAAc;EACd,WAAW;AACb;
622AACA;EACE,gCAAgC;EAChC,wBAAwB;AAC1B;AACA;EACE,yDAAyD;AAC3D;AACA;EACE,YAAY;EACZ,eAAe;EACf,0CAA0C;AAC5C;AACA;EACE,wDAAwD;AAC1D;AACA;EACE,WAAW;EACX,cAAc;EACd,2CAA2C;AAC7C;AACA,uBAAuB;AACvB,eAAe;AACf;;;;;;;;;;EAUE,kBAAkB;EAClB,OAAO;EACP,MAAM;EACN,WAAW;EACX,YAAY;EACZ,oBAAoB;EACpB,WAAW;AACb;AACA;EACE,+BAA+B;AACjC;AACA;EACE,gFAAgF;AAClF;AACA;EACE,iFAAiF;AACnF;AACA;EACE,+EAA+E;AACjF;AACA;EACE,kFAAkF;AACpF;AACA;EACE,WAAW;EACX,YAAY;EACZ,kBAAkB;EAClB,SAAS;EACT,QAAQ;EACR,kBAAkB;EAClB,iBAAiB;EACjB,WAAW;EACX,qBAAqB;EACrB,sBAAsB;EACtB,0EAA0E;EAC1E,kBAAkB;EAClB,6BAA6B;AAC/B;AACA;;EAEE,mDAAmD;AACrD;AACA;EACE,8BAA8B;AAChC;AACA;EACE,8BAA8B;AAChC;AACA;EACE;IACE,uBAAuB;EACzB;EACA;IACE,yBAAyB;EAC3B;AACF;AACA,qBAAqB;AACrB;EACE,mCAAmC;EACnC,wBAAwB;AAC1B;AACA;EACE,WAAW;EACX,kBAAkB;EAClB,OAAO;EACP,MAAM;EACN,oBAAoB;AACtB;AACA;EACE,WAAW;EACX,iCAAiC;AACnC;AACA;EACE,UAAU;EACV,kCAAkC;AACpC;AACA;EACE,8BAA8B;EAC9B;;;;GAIC;AACH;AACA;;EAEE,kBAAkB;EAClB,6CAA6C;EAC7C,oDAAoD;EACpD,qCAAqC;EACrC,2DAA2D;EAC3D,WAAW;EACX,eAAe;EACf,aAAa;EACb,mBAAmB;EACnB,uBAAuB;EACvB,gEAAgE;AAClE;AACA;;EAEE,aAAa;EACb,YAAY;EACZ,oBAAoB;AACtB;AACA;;EAEE,UAAU;EACV,YAAY;EACZ,oBAAoB;AACtB;AACA;;EAEE,wBAAwB;AAC1B;AACA;;EAEE,WAAW;EACX,YAAY;EACZ,sBAAmB;KAAnB,mBAAmB;EACnB,wBAAwB;AAC1B;AACA;;EAEE,yBAAyB;AAC3B;AACA;;EAEE,iDAAiD;EACjD,WAAW;AACb;AACA;;EAEE,kDAAkD;EAClD,UAAU;AACZ;AACA;EACE,aAAa;AACf;AACA,0BAA0B;AAC1B;;EAEE,yBAAyB;EACzB,wCAAwC;EACxC,+BAA+B;EAC/B,iBAAiB;EACjB,qBAAqB;EACrB,cAAc;AAChB;AACA;;EAEE,eAAe;AACjB;AACA;;EAEE,kDAAkD;EAClD,UAAU;AACZ;AACA;;EAEE,eAAe;AACjB;AACA,wBAAwB;AACxB;EACE;;;;;;;;;;;;;;;;;;GAkBC;AACH;AACA;EACE,kBAAkB;EAClB,kBAAkB;EAClB,yBAAyB;EACzB,+BAA+B;EAC/B,WAAW;AACb;AACA;EACE,UAAU;AACZ;AACA;;EAEE,wBAAwB;AAC1B;AACA,kBAAkB;AAClB;;;;EAIE,4CAA4C;EAC5C,uCAAuC;EACvC,OAAO;EACP,WAAW;AACb;AACA,YAAY;AACZ;EACE,gBAAgB;EAChB,YAAY;AACd;AACA;EACE,sBAAsB;EACtB,kBAAkB;AACpB;AACA;EACE,mBAAmB;AACrB;AACA;EACE,mBAAmB;AACrB;AACA;EACE,sBAAsB;AACxB;AACA;EACE,sBAAsB;AACxB;AACA;EACE,sBAAsB;AACxB;AACA;EACE,sBAAsB;AACxB;AACA;EACE,uFAAuF;EACvF,yFAAyF;EACzF,qBAAqB;EACrB,iEAAiE;EACjE,gEAAgE;EAChE,8DAA8D;AAChE;AACA;EACE,YAAY;EACZ,SAAS;EACT,UAAU;EACV,gBAAgB;EAChB,wBAAwB;UAChB,qBAAgB;OAAhB,gBAAgB;AAC1B;AACA;EACE,eAAe;AACjB;AACA;EACE,wBAAwB;AAC1B;AACA;EACE,mDAAmD;EACnD,qEAAqE;AACvE;AACA;;EAEE,0CAA0C;EAC1C,yCAAyC;EACzC,QAAQ;EACR,oCAAoC;AACtC;AACA;;EAEE,2DAA2D;EAC3D,cAAc;AAChB;AACA;;EAEE,QAAQ;EACR,2BAA2B;EAC3B,UAAU;AACZ;AACA;;EAEE,qBAAqB;EACrB;iBACe;AACjB;AACA;;EAEE,6DAA6D;AAC/D;AACA;;EAEE,SAAS;EACT,2BAA2B;EAC3B,mBAAmB;AACrB;AACA;;EAEE;kBACgB;AAClB;AACA;EACE;eACa;AACf;AACA,aAAa;AACb;EACE,uDAAuD;AACzD;AACA,aAAa;AACb;EACE,8EAA8E;EAC9E,kBAAkB;AACpB;AACA;EACE,qEAAqE;EACrE,kBAAkB;EAClB,OAAO;EACP,MAAM;EACN,WAAW;EACX,YAAY;EACZ,mBAAmB;EACnB,0BAA0B;AAC5B;AACA;EACE,2BAA2B;AAC7B;AACA;;;;EAIE,WAAW;EACX,sDAAsD;EACtD,OAAO;EACP,MAAM;AACR;AACA;;;;EAIE,qDAAqD;EACrD,YAAY;EACZ,OAAO;EACP,MAAM;AACR;AACA;EACE,aAAa;AACf;AACA;EACE;;;;;;;;;;GAUC;AACH;AACA;EACE,0DAA0D;EAC1D,kBAAkB;EAClB,kBAAkB;EAClB,gEAAgE;AAClE;AACA;;EAEE,wBAAwB;AAC1B;AACA;;EAEE,kBAAkB;EAClB,8CAA8C;EAC9C,2CAA2C;EAC3C,sCAAsC;EACtC,WAAW;EACX,yCAAyC;EACzC,gEAAgE;AAClE;AACA;;EAEE,kBAAkB;EAClB,wCAAwC;EACxC,yCAAyC;EACzC,6CAA6C;EAC7C,WAAW;EACX,wCAAwC;EACxC,iEAAiE;AACnE;AACA;EACE,YAAY;EACZ,WAAW;EACX,kBAAkB;EAClB,qEAAqE;EACrE,0DAA0D;EAC1D,OAAO;EACP,MAAM;AACR;AACA;EACE,YAAY;AACd;AACA;EACE,aAAa;AACf;AACA,gCAAgC;AAChC;EACE,WAAW;EACX,YAAY;EACZ,aAAa;EACb,uBAAuB;EACvB,mBAAmB;EACnB,kBAAkB;AACpB;AACA;;;EAGE,eAAe;EACf,gBAAgB;EAChB,sBAAmB;KAAnB,mBAAmB;AACrB;AACA,8BAA8B;AAC9B;EACE,YAAY;EACZ,kBAAkB;AACpB;AACA,SAAS;AACT;EACE,kBAAkB;EAClB,OAAO;EACP,MAAM;EACN,oBAAoB;EACpB,UAAU;EACV,cAAc;AAChB;AACA;EACE,oCAAoC;EACpC,cAAc;AAChB;AACA;EACE,eAAe;AACjB;AACA;EACE,eAAe;EACf,sBAAsB;AACxB;AACA;EACE,oCAAoC;AACtC;AACA;EACE,oBAAoB;EACpB,4BAA4B;AAC9B;AACA;EACE,oBAAoB;AACtB;AACA;EACE,oBAAoB;AACtB;AACA;EACE,oBAAoB;AACtB;AACA;EACE,iBAAiB;AACnB;AACA;EACE,oBAAoB;EAEZ,2BAA2B;EACnC,UAAU;EACV,kBAAkB;EAClB,qBAAqB;EACrB,WAAW;EACX,YAAY;AACd;AACA;EACE,oBAAoB;AACtB;AACA;EACE,wBAAwB;AAC1B;AACA;;EAEE,oBAAoB;AACtB;AACA;;;EAGE,oBAAoB;EACpB,mBAAmB;AACrB;AACA;EACE,kBAAkB;EAClB,OAAO;EACP,WAAW;EACX,WAAW;EACX,YAAY;EACZ,YAAY;EACZ,UAAU;AACZ;AACA;EACE,WAAW;EACX,gBAAgB;EAChB,kBAAkB;EAClB,OAAO;EACP,MAAM;EACN,SAAS;EACT,QAAQ;EACR,kBAAkB;AACpB;AACA;EACE,oBAAoB;EACpB,mBAAmB;AACrB;AACA,6BAA6B;AAC7B;;;;EAIE,UAAU;EAEF,2BAA2B;AACrC;AACA,2BAA2B;AAC3B;EACE,iBAAiB;AACnB;AACA;EACE,oBAAoB;EAEZ,2BAA2B;EACnC,UAAU;AACZ;AACA;EACE,oBAAoB;AACtB;AACA;;EAEE,oBAAoB;AACtB;AACA,6BAA6B;AAC7B;;;;EAIE,UAAU;EAEF,2BAA2B;AACrC;AACA,2BAA2B;AAC3B;EAEU,2BAA2B;EACnC,gBAAgB;EAChB,+CAA+C;AACjD;AACA;EACE,iBAAiB;AACnB;AACA;EACE,+BAA+B;EAEvB,2BAA2B;EACnC,gBAAgB;AAClB","sourcesContent":["/**\n * Swiper 11.0.5\n * Most modern mobile touch slider and framework with hardware accelerated transitions\n * https://swiperjs.com\n *\n * Copyright 2014-2023 Vladimir Kharlampidi\n *\n * Released under the MIT License\n *\n * Released on: November 22, 2023\n */\n\n/* FONT_START */\n@font-face {\n font-family: 'swiper-icons';\n src: url('data:application/font-woff;charset=utf-8;base64, d09GRgABAAAAAAZgABAAAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABGRlRNAAAGRAAAABoAAAAci6qHkUdERUYAAAWgAAAAIwAAACQAYABXR1BPUwAABhQAAAAuAAAANuAY7+xHU1VCAAAFxAAAAFAAAABm2fPczU9TLzIAAAHcAAAASgAAAGBP9V5RY21hcAAAAkQAAACIAAABYt6F0cBjdnQgAAACzAAAAAQAAAAEABEBRGdhc3AAAAWYAAAACAAAAAj//wADZ2x5ZgAAAywAAADMAAAD2MHtryVoZWFkAAABbAAAADAAAAA2E2+eoWhoZWEAAAGcAAAAHwAAACQC9gDzaG10eAAAAigAAAAZAAAArgJkABFsb2NhAAAC0AAAAFoAAABaFQAUGG1heHAAAAG8AAAAHwAAACAAcABAbmFtZQAAA/gAAAE5AAACXvFdBwlwb3N0AAAFNAAAAGIAAACE5s74hXjaY2BkYGAAYpf5
622Hu/j+W2+MnAzMYDAzaX6QjD6/4//Bxj5GA8AuRwMYGkAPywL13jaY2BkYGA88P8Agx4j+/8fQDYfA1AEBWgDAIB2BOoAeNpjYGRgYNBh4GdgYgABEMnIABJzYNADCQAACWgAsQB42mNgYfzCOIGBlYGB0YcxjYGBwR1Kf2WQZGhhYGBiYGVmgAFGBiQQkOaawtDAoMBQxXjg/wEGPcYDDA4wNUA2CCgwsAAAO4EL6gAAeNpj2M0gyAACqxgGNWBkZ2D4/wMA+xkDdgAAAHjaY2BgYGaAYBkGRgYQiAHyGMF8FgYHIM3DwMHABGQrMOgyWDLEM1T9/w8UBfEMgLzE////P/5//f/V/xv+r4eaAAeMbAxwIUYmIMHEgKYAYjUcsDAwsLKxc3BycfPw8jEQA/gZBASFhEVExcQlJKWkZWTl5BUUlZRVVNXUNTQZBgMAAMR+E+gAEQFEAAAAKgAqACoANAA+AEgAUgBcAGYAcAB6AIQAjgCYAKIArAC2AMAAygDUAN4A6ADyAPwBBgEQARoBJAEuATgBQgFMAVYBYAFqAXQBfgGIAZIBnAGmAbIBzgHsAAB42u2NMQ6CUAyGW568x9AneYYgm4MJbhKFaExIOAVX8ApewSt4Bic4AfeAid3VOBixDxfPYEza5O+Xfi04YADggiUIULCuEJK8VhO4bSvpdnktHI5QCYtdi2sl8ZnXaHlqUrNKzdKcT8cjlq+rwZSvIVczNiezsfnP/uznmfPFBNODM2K7MTQ45YEAZqGP81AmGGcF3iPqOop0r1SPTaTbVkfUe4HXj97wYE+yNwWYxwWu4v1ugWHgo3S1XdZEVqWM7ET0cfnLGxWfkgR42o2PvWrDMBSFj/IHLaF0zKjRgdiVMwScNRAoWUoH78Y2icB/yIY09An6AH2Bdu/UB+yxopYshQiEvnvu0dURgDt8QeC8PDw7Fpji3fEA4z/PEJ6YOB5hKh4dj3EvXhxPqH/SKUY3rJ7srZ4FZnh1PMAtPhwP6fl2PMJMPDgeQ4rY8YT6Gzao0eAEA409DuggmTnFnOcSCiEiLMgxCiTI6Cq5DZUd3Qmp10vO0LaLTd2cjN4fOumlc7lUYbSQcZFkutRG7g6JKZKy0RmdLY680CDnEJ+UMkpFFe1RN7nxdVpXrC4aTtnaurOnYercZg2YVmLN/d/gczfEimrE/fs/bOuq29Zmn8tloORaXgZgGa78yO9/cnXm2BpaGvq25Dv9S4E9+5SIc9PqupJKhYFSSl47+Qcr1mYNAAAAeNptw0cKwkAAAMDZJA8Q7OUJvkLsPfZ6zFVERPy8qHh2YER+3i/BP83vIBLLySsoKimrqKqpa2hp6+jq6RsYGhmbmJqZSy0sraxtbO3sHRydnEMU4uR6yx7JJXveP7WrDycAAAAAAAH//wACeNpjYGRgYOABYhkgZgJCZgZNBkYGLQZtIJsFLMYAAAw3ALgAeNolizEKgDAQBCchRbC2sFER0YD6qVQiBCv/H9ezGI6Z5XBAw8CBK/m5iQQVauVbXLnOrMZv2oLdKFa8Pjuru2hJzGabmOSLzNMzvutpB3N42mNgZGBg4GKQYzBhYMxJLMlj4GBgAYow/P/PAJJhLM6sSoWKfWCAAwDAjgbRAAB42mNgYGBkAIIbCZo5IPrmUn0hGA0AO8EFTQAA');\n font-weight: 400;\n font-style: normal;\n}\n/* FONT_END */\n:root {\n --swiper-theme-color: #007aff;\n /*\n --swiper-preloader-color: var(--swiper-theme-color);\n --swiper-wrapper-transition-timing-function: initial;\n */\n}\n:host {\n position: relative;\n display: block;\n margin-left: auto;\n margin-right: auto;\n z-index: 1;\n}\n.swiper {\n margin-left: auto;\n margin-right: auto;\n position: relative;\n overflow: hidden;\n list-style: none;\n padding: 0;\n /* Fix of Webkit flickering */\n z-index: 1;\n display: block;\n}\n.swiper-vertical > .swiper-wrapper {\n flex-direction: column;\n}\n.swiper-wrapper {\n position: relative;\n width: 100%;\n height: 100%;\n z-index: 1;\n display: flex;\n transition-property: transform;\n transition-timing-function: var(--swiper-wrapper-transition-timing-function, initial);\n box-sizing: content-box;\n}\n.swiper-android .swiper-slide,\n.swiper-ios .swiper-slide,\n.swiper-wrapper {\n transform: translate3d(0px, 0, 0);\n}\n.swiper-horizontal {\n touch-action: pan-y;\n}\n.swiper-vertical {\n touch-action: pan-x;\n}\n.swiper-slide {\n flex-shrink: 0;\n width: 100%;\n height: 100%;\n position: relative;\n transition-property: transform;\n display: block;\n}\n.swiper-slide-invisible-blank {\n visibility: hidden;\n}\n/* Auto Height */\n.swiper-autoheight,\n.swiper-autoheight .swiper-slide {\n height: auto;\n}\n.swiper-autoheight .swiper-wrapper {\n align-items: flex-start;\n transition-property: transform, height;\n}\n.swiper-backface-hidden .swiper-slide {\n transform: translateZ(0);\n -webkit-backface-visibility: hidden;\n backface-visibility: hidden;\n}\n/* 3D Effects */\n.swiper-3d.swiper-css-mode .swiper-wrapper {\n perspective: 1200px;\n}\n.swiper-3d .swiper-wrapper {\n transform-style: preserve-3d;\n}\n.swiper-3d {\n perspective: 1200px;\n}\n.swiper-3d .swiper-slide,\n.swiper-3d .swiper-cube-shadow {\n transform-style: preserve-3d;\n}\n/* CSS Mode */\n.swiper-css-mode > .swiper-wrapper {\n overflow: auto;\n scrollbar-width: none;\n /* For Firefox */\n -ms-overflow-style: none;\n /* For Internet Explorer and Edge */\n}\n.swiper-css-mode > .swiper-wrapper::-webkit-scrollbar {\n display: none;\n}\n.swiper-css-mode > .swiper-wrapper > .swiper-slide {\n scroll-snap-align: start start;\n}\n.swiper-css-mode.swiper-horizontal > .swiper-wrapper {\n scroll-snap-type: x mandatory;\n}\n.swiper-css-mode.swiper-vertical > .swiper-wrapper {\n scroll-snap-type: y mandatory;\n}\n.swiper-css-mode.swiper-free-mode > .swiper-wrapper {\n scroll-snap-type: none;\n}\n.swiper-css-mode.swiper-free-mode > .swiper-wrapper > .swiper-slide {\n scroll-snap-align: none;\n}\n.swiper-css-mode.swiper-centered > .swiper-wrapper::before {\n content: '';\n flex-shrink: 0;\n order: 9999;\n}\n.swiper-css-mode.swiper-centered > .swiper-wrapper > .swiper-slide {\n scroll-snap-align: center center;\n scroll-snap-stop: always;\n}\n.swiper-css-mode.swiper-centered.swiper-horizontal > .swiper-wrapper > .swiper-slide:first-child {\n margin-inline-start: var(--swiper-centered-offset-before);\n}\n.swiper-css-mode.swiper-centered.swiper-horizontal > .swiper-wrapper::before {\n height: 100%;\n min-height: 1px;\n width: var(--swiper-centered-offset-after);\n}\n.swiper-css-mode.swiper-centered.swiper-vertical > .swiper-wrapper > .swiper-slide:first-child {\n margin-block-start: var(--swiper-centered-offset-before);\n}\n.swiper-css-mode.swiper-centered.swiper-vertical > .swiper-wrapper::before {\n width: 100%;\n min-width: 1px;\n height: var(--swiper-centered-offset-after);\n}\n/* Slide styles start */\n/* 3D Shadows */\n.swiper-3d .swiper-slide-shadow,\n.swiper-3d .swiper-slide-shadow-left,\n.swiper-3d .swiper-slide-shadow-right,\n.swiper-3d .swiper-slide-shadow-top,\n.swiper-3d .swiper-slide-shadow-bottom,\n.swiper-3d .swiper-slide-shadow,\n.swiper-3d .swiper-slide-shadow-left,\n.swiper-3d .swiper-slide-shadow-right,\n.swiper-3d .swiper-slide-shadow-top,\n.swiper-3d .swiper-slide-shadow-bottom {\n position: absolute;\n left: 0;\n top: 0;\n width: 100%;\n height: 100%;\n pointer-events: none;\n z-index: 10;\n}\n.swiper-3d .swiper-slide-shadow {\n background: rgba(0, 0, 0, 0.15);\n}\n.swiper-3d .swiper-slide-shadow-left {\n background-image: linear-gradient(to left, rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0));\n}\n.swiper-3d .swiper-slide-shadow-right {\n background-image: linear-gradient(to right, rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0));\n}\n.swiper-3d .swiper-slide-shadow-top {\n background-image: linear-gradient(to top, rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0));\n}\n.swiper-3d .swiper-slide-shadow-bottom {\n background-image: linear-gradient(to bottom, rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0));\n}\n.swiper-lazy-preloader {\n width: 42px;\n height: 42px;\n position: absolute;\n left: 50%;\n top: 50%;\n margin-left: -21px;\n margin-top: -21px;\n z-index: 10;\n transform-origin: 50%;\n box-sizing: border-box;\n border: 4px solid var(--swiper-preloader-color, var(--swiper-theme-color));\n border-radius: 50%;\n border-top-color: transparent;\n}\n.swiper:not(.swiper-watch-progress) .swiper-lazy-preloader,\n.swiper-watch-progress .swiper-slide-visible .swiper-lazy-preloader {\n animation: swiper-preloader-spin 1s infinite linear;\n}\n.swiper-lazy-preloader-white {\n --swiper-preloader-color: #fff;\n}\n.swiper-lazy-preloader-black {\n --swiper-preloader-color: #000;\n}\n@keyframes swiper-preloader-spin {\n 0% {\n transform: rotate(0deg);\n }\n 100% {\n transform: rotate(360deg);\n }\n}\n/* Slide styles end */\n.swiper-virtual .swiper-slide {\n -webkit-backface-visibility: hidden;\n transform: translateZ(0);\n}
622\n.swiper-virtual.swiper-css-mode .swiper-wrapper::after {\n content: '';\n position: absolute;\n left: 0;\n top: 0;\n pointer-events: none;\n}\n.swiper-virtual.swiper-css-mode.swiper-horizontal .swiper-wrapper::after {\n height: 1px;\n width: var(--swiper-virtual-size);\n}\n.swiper-virtual.swiper-css-mode.swiper-vertical .swiper-wrapper::after {\n width: 1px;\n height: var(--swiper-virtual-size);\n}\n:root {\n --swiper-navigation-size: 44px;\n /*\n --swiper-navigation-top-offset: 50%;\n --swiper-navigation-sides-offset: 10px;\n --swiper-navigation-color: var(--swiper-theme-color);\n */\n}\n.swiper-button-prev,\n.swiper-button-next {\n position: absolute;\n top: var(--swiper-navigation-top-offset, 50%);\n width: calc(var(--swiper-navigation-size) / 44 * 27);\n height: var(--swiper-navigation-size);\n margin-top: calc(0px - (var(--swiper-navigation-size) / 2));\n z-index: 10;\n cursor: pointer;\n display: flex;\n align-items: center;\n justify-content: center;\n color: var(--swiper-navigation-color, var(--swiper-theme-color));\n}\n.swiper-button-prev.swiper-button-disabled,\n.swiper-button-next.swiper-button-disabled {\n opacity: 0.35;\n cursor: auto;\n pointer-events: none;\n}\n.swiper-button-prev.swiper-button-hidden,\n.swiper-button-next.swiper-button-hidden {\n opacity: 0;\n cursor: auto;\n pointer-events: none;\n}\n.swiper-navigation-disabled .swiper-button-prev,\n.swiper-navigation-disabled .swiper-button-next {\n display: none !important;\n}\n.swiper-button-prev svg,\n.swiper-button-next svg {\n width: 100%;\n height: 100%;\n object-fit: contain;\n transform-origin: center;\n}\n.swiper-rtl .swiper-button-prev svg,\n.swiper-rtl .swiper-button-next svg {\n transform: rotate(180deg);\n}\n.swiper-button-prev,\n.swiper-rtl .swiper-button-next {\n left: var(--swiper-navigation-sides-offset, 10px);\n right: auto;\n}\n.swiper-button-next,\n.swiper-rtl .swiper-button-prev {\n right: var(--swiper-navigation-sides-offset, 10px);\n left: auto;\n}\n.swiper-button-lock {\n display: none;\n}\n/* Navigation font start */\n.swiper-button-prev:after,\n.swiper-button-next:after {\n font-family: swiper-icons;\n font-size: var(--swiper-navigation-size);\n text-transform: none !important;\n letter-spacing: 0;\n font-variant: initial;\n line-height: 1;\n}\n.swiper-button-prev:after,\n.swiper-rtl .swiper-button-next:after {\n
622content: 'prev';\n}\n.swiper-button-next,\n.swiper-rtl .swiper-button-prev {\n right: var(--swiper-navigation-sides-offset, 10px);\n left: auto;\n}\n.swiper-button-next:after,\n.swiper-rtl .swiper-button-prev:after {\n content: 'next';\n}\n/* Navigation font end */\n:root {\n /*\n --swiper-pagination-color: var(--swiper-theme-color);\n --swiper-pagination-left: auto;\n --swiper-pagination-right: 8px;\n --swiper-pagination-bottom: 8px;\n --swiper-pagination-top: auto;\n --swiper-pagination-fraction-color: inherit;\n --swiper-pagination-progressbar-bg-color: rgba(0,0,0,0.25);\n --swiper-pagination-progressbar-size: 4px;\n --swiper-pagination-bullet-size: 8px;\n --swiper-pagination-bullet-width: 8px;\n --swiper-pagination-bullet-height: 8px;\n --swiper-pagination-bullet-border-radius: 50%;\n --swiper-pagination-bullet-inactive-color: #000;\n --swiper-pagination-bullet-inactive-opacity: 0.2;\n --swiper-pagination-bullet-opacity: 1;\n --swiper-pagination-bullet-horizontal-gap: 4px;\n --swiper-pagination-bullet-vertical-gap: 6px;\n */\n}\n.swiper-pagination {\n position: absolute;\n text-align: center;\n transition: 300ms opacity;\n transform: translate3d(0, 0, 0);\n z-index: 10;\n}\n.swiper-pagination.swiper-pagination-hidden {\n opacity: 0;\n}\n.swiper-pagination-disabled > .swiper-pagination,\n.swiper-pagination.swiper-pagination-disabled {\n display: none !important;\n}\n/* Common Styles */\n.swiper-pagination-fraction,\n.swiper-pagination-custom,\n.swiper-horizontal > .swiper-pagination-bullets,\n.swiper-pagination-bullets.swiper-pagination-horizontal {\n bottom: var(--swiper-pagination-bottom, 8px);\n top: var(--swiper-pagination-top, auto);\n left: 0;\n width: 100%;\n}\n/* Bullets */\n.swiper-pagination-bullets-dynamic {\n overflow: hidden;\n font-size: 0;\n}\n.swiper-pagination-bullets-dynamic .swiper-pagination-bullet {\n transform: scale(0.33);\n position: relative;\n}\n.swiper-pagination-bullets-dynamic .swiper-pagination-bullet-active {\n transform: scale(1);\n}\n.swiper-pagination-bullets-dynamic .swiper-pagination-bullet-active-main {\n transform: scale(1);\n}\n.swiper-pagination-bullets-dynamic .swiper-pagination-bullet-active-prev {\n transform: scale(0.66);\n}\n.swiper-pagination-bullets-dynamic .swiper-pagination-bullet-active-prev-prev {\n transform: scale(0.33);\n}\n.swiper-pagination-bullets-dynamic .swiper-pagination-bullet-active-next {\n transform: scale(0.66);\n}\n.swiper-pagination-bullets-dynamic .swiper-pagination-bullet-active-next-next {\n transform: scale(0.33);\n}\n.swiper-pagination-bullet {\n width: var(--swiper-pagination-bullet-width, var(--swiper-pagination-bullet-size, 8px));\n height: var(--swiper-pagination-bullet-height, var(--swiper-pagination-bullet-size, 8px));\n display: inline-block;\n border-radius: var(--swiper-pagination-bullet-border-radius, 50%);\n background: var(--swiper-pagination-bullet-inactive-color, #000);\n opacity: var(--swiper-pagination-bullet-inactive-opacity, 0.2);\n}\nbutton.swiper-pagination-bullet {\n border: none;\n margin: 0;\n padding: 0;\n box-shadow: none;\n -webkit-appearance: none;\n appearance: none;\n}\n.swiper-pagination-clickable .swiper-pagination-bullet {\n cursor: pointer;\n}\n.swiper-pagination-bullet:only-child {\n display: none !important;\n}\n.swiper-pagination-bullet-active {\n opacity: var(--swiper-pagination-bullet-opacity, 1);\n background: var(--swiper-pagination-color, var(--swiper-theme-color));\n}\n.swiper-vertical > .swiper-pagination-bullets,\n.swiper-pagination-vertical.swiper-pagination-bullets {\n right: var(--swiper-pagination-right, 8px);\n left: var(--swiper-pagination-left, auto);\n top: 50%;\n transform: translate3d(0px, -50%, 0);\n}\n.swiper-vertical > .swiper-pagination-bullets .swiper-pagination-bullet,\n.swiper-pagination-vertical.swiper-pagination-bullets .swiper-pagination-bullet {\n margin: var(--swiper-pagination-bullet-vertical-gap, 6px) 0;\n display: block;\n}\n.swiper-vertical > .swiper-pagination-bullets.swiper-pagination-bullets-dynamic,\n.swiper-pagination-vertical.swiper-pagination-bullets.swiper-pagination-bullets-dynamic {\n top: 50%;\n transform: translateY(-50%);\n width: 8px;\n}\n.swiper-vertical > .swiper-pagination-bullets.swiper-pagination-bullets-dynamic .swiper-pagination-bullet,\n.swiper-pagination-vertical.swiper-pagination-bullets.swiper-pagination-bullets-dynamic .swiper-pagination-bullet {\n display: inline-block;\n transition: 200ms transform,\n 200ms top;\n}\n.swiper-horizontal > .swiper-pagination-bullets .swiper-pagination-bullet,\n.swiper-pagination-horizontal.swiper-pagination-bullets .swiper-pagination-bullet {\n margin: 0 var(--swiper-pagination-bullet-horizontal-gap, 4px);\n}\n.swiper-horizontal > .swiper-pagination-bullets.swiper-pagination-bullets-dynamic,\n.swiper-pagination-horizontal.swiper-pagination-bullets.swiper-pagination-bullets-dynamic {\n left: 50%;\n transform: translateX(-50%);\n white-space: nowrap;\n}\n.swiper-horizontal > .swiper-pagination-bullets.swiper-pagination-bullets-dynamic .swiper-pagination-bullet,\n.swiper-pagination-horizontal.swiper-pagination-bullets.swiper-pagination-bullets-dynamic .swiper-pagination-bullet {\n transition: 200ms transform,\n 200ms left;\n}\n.swiper-horizontal.swiper-rtl > .swiper-pagination-bullets-dynamic .swiper-pagination-bullet {\n transition: 200ms transform,\n 200ms right;\n}\n/* Fraction */\n.swiper-pagination-fraction {\n color: var(--swiper-pagination-fraction-color, inherit);\n}\n/* Progress */\n.swiper-pagination-progressbar {\n background: var(--swiper-pagination-progressbar-bg-color, rgba(0, 0, 0, 0.25));\n position: absolute;\n}\n.swiper-pagination-progressbar .swiper-pagination-progressbar-fill {\n background: var(--swiper-pagination-color, var(--swiper-theme-color));\n position: absolute;\n left: 0;\n top: 0;\n width: 100%;\n height: 100%;\n transform: scale(0);\n transform-origin: left top;\n}\n.swiper-rtl .swiper-pagination-progressbar .swiper-pagination-progressbar-fill {\n transform-origin: right top;\n}\n.swiper-horizontal > .swiper-pagination-progressbar,\n.swiper-pagination-progressbar.swiper-pagination-horizontal,\n.swiper-vertical > .swiper-pagination-progressbar.swiper-pagination-progressbar-opposite,\n.swiper-pagination-progressbar.swiper-pagination-vertical.swiper-pagination-progressbar-opposite {\n width: 100%;\n height: var(--swiper-pagination-progressbar-size, 4px);\n left: 0;\n top: 0;\n}\n.swiper-vertical > .swiper-pagination-progressbar,\n.swiper-pagination-progressbar.swiper-pagination-vertical,\n.swiper-horizontal > .swiper-pagination-progressbar.swiper-pagination-progressbar-opposite,\n.swiper-pagination-progressbar.swiper-pagination-horizontal.swiper-pagination-progressbar-opposite {\n width: var(--swiper-pagination-progressbar-size, 4px);\n height: 100%;\n left: 0;\n top: 0;\n}\n.swiper-pagination-lock {\n display: none;\n}\n:root {\n /*\n --swiper-scrollbar-border-radius: 10px;\n --swiper-scrollbar-top: auto;\n --swiper-scrollbar-bottom: 4px;\n --swiper-scrollbar-left: auto;\n --swiper-scrollbar-right: 4px;\n --swiper-scrollbar-sides-offset: 1%;\n --swiper-scrollbar-bg-color: rgba(0, 0, 0, 0.1);
622\n --swiper-scrollbar-drag-bg-color: rgba(0, 0, 0, 0.5);\n --swiper-scrollbar-size: 4px;\n */\n}\n.swiper-scrollbar {\n border-radius: var(--swiper-scrollbar-border-radius, 10px);\n position: relative;\n touch-action: none;\n background: var(--swiper-scrollbar-bg-color, rgba(0, 0, 0, 0.1));\n}\n.swiper-scrollbar-disabled > .swiper-scrollbar,\n.swiper-scrollbar.swiper-scrollbar-disabled {\n display: none !important;\n}\n.swiper-horizontal > .swiper-scrollbar,\n.swiper-scrollbar.swiper-scrollbar-horizontal {\n position: absolute;\n left: var(--swiper-scrollbar-sides-offset, 1%);\n bottom: var(--swiper-scrollbar-bottom, 4px);\n top: var(--swiper-scrollbar-top, auto);\n z-index: 50;\n height: var(--swiper-scrollbar-size, 4px);\n width: calc(100% - 2 * var(--swiper-scrollbar-sides-offset, 1%));\n}\n.swiper-vertical > .swiper-scrollbar,\n.swiper-scrollbar.swiper-scrollbar-vertical {\n position: absolute;\n left: var(--swiper-scrollbar-left, auto);\n right: var(--swiper-scrollbar-right, 4px);\n top: var(--swiper-scrollbar-sides-offset, 1%);\n z-index: 50;\n width: var(--swiper-scrollbar-size, 4px);\n height: calc(100% - 2 * var(--swiper-scrollbar-sides-offset, 1%));\n}\n.swiper-scrollbar-drag {\n height: 100%;\n width: 100%;\n position: relative;\n background: var(--swiper-scrollbar-drag-bg-color, rgba(0, 0, 0, 0.5));\n border-radius: var(--swiper-scrollbar-border-radius, 10px);\n left: 0;\n top: 0;\n}\n.swiper-scrollbar-cursor-drag {\n cursor: move;\n}\n.swiper-scrollbar-lock {\n display: none;\n}\n/* Zoom container styles start */\n.swiper-zoom-container {\n width: 100%;\n height: 100%;\n display: flex;\n justify-content: center;\n align-items: center;\n text-align: center;\n}\n.swiper-zoom-container > img,\n.swiper-zoom-container > svg,\n.swiper-zoom-container > canvas {\n max-width: 100%;\n max-height: 100%;\n object-fit: contain;\n}\n/* Zoom container styles end */\n.swiper-slide-zoomed {\n cursor: move;\n touch-action: none;\n}\n/* a11y */\n.swiper .swiper-notification {\n position: absolute;\n left: 0;\n top: 0;\n pointer-events: none;\n opacity: 0;\n z-index: -1000;\n}\n.swiper-free-mode > .swiper-wrapper {\n transition-timing-function: ease-out;\n margin: 0 auto;\n}\n.swiper-grid > .swiper-wrapper {\n flex-wrap: wrap;\n}\n.swiper-grid-column > .swiper-wrapper {\n flex-wrap: wrap;\n flex-direction: column;\n}\n.swiper-fade.swiper-free-mode .swiper-slide {\n transition-timing-function: ease-out;\n}\n.swiper-fade .swiper-slide {\n pointer-events: none;\n transition-property: opacity;\n}\n.swiper-fade .swiper-slide .swiper-slide {\n pointer-events: none;\n}\n.swiper-fade .swiper-slide-active {\n pointer-events: auto;\n}\n.swiper-fade .swiper-slide-active .swiper-slide-active {\n pointer-events: auto;\n}\n.swiper-cube {\n overflow: visible;\n}\n.swiper-cube .swiper-slide {\n pointer-events: none;\n -webkit-backface-visibility: hidden;\n backface-visibility: hidden;\n z-index: 1;\n visibility: hidden;\n transform-origin: 0 0;\n width: 100%;\n height: 100%;\n}\n.swiper-cube .swiper-slide .swiper-slide {\n pointer-events: none;\n}\n.swiper-cube.swiper-rtl .swiper-slide {\n transform-origin: 100% 0;\n}\n.swiper-cube .swiper-slide-active,\n.swiper-cube .swiper-slide-active .swiper-slide-active {\n pointer-events: auto;\n}\n.swiper-cube .swiper-slide-active,\n.swiper-cube .swiper-slide-next,\n.swiper-cube .swiper-slide-prev {\n pointer-events: auto;\n visibility: visible;\n}\n.swiper-cube .swiper-cube-shadow {\n position: absolute;\n left: 0;\n bottom: 0px;\n width: 100%;\n height: 100%;\n opacity: 0.6;\n z-index: 0;\n}\n.swiper-cube .swiper-cube-shadow:before {\n content: '';\n background: #000;\n position: absolute;\n left: 0;\n top: 0;\n bottom: 0;\n right: 0;\n filter: blur(50px);\n}\n.swiper-cube .swiper-slide-next + .swiper-slide {\n pointer-events: auto;\n visibility: visible;\n}\n/* Cube slide shadows start */\n.swiper-cube .swiper-slide-shadow-cube.swiper-slide-shadow-top,\n.swiper-cube .swiper-slide-shadow-cube.swiper-slide-shadow-bottom,\n.swiper-cube .swiper-slide-shadow-cube.swiper-slide-shadow-left,\n.swiper-cube .swiper-slide-shadow-cube.swiper-slide-shadow-right {\n z-index: 0;\n -webkit-backface-visibility: hidden;\n backface-visibility: hidden;\n}\n/* Cube slide shadows end */\n.swiper-flip {\n overflow: visible;\n}\n.swiper-flip .swiper-slide {\n pointer-events: none;\n -webkit-backface-visibility: hidden;\n backface-visibility: hidden;\n z-index: 1;\n}\n.swiper-flip .swiper-slide .swiper-slide {\n pointer-events: none;\n}\n.swiper-flip .swiper-slide-active,\n.swiper-flip .swiper-slide-active .swiper-slide-active {\n pointer-events: auto;\n}\n/* Flip slide shadows start */\n.swiper-flip .swiper-slide-shadow-flip.swiper-slide-shadow-top,\n.swiper-flip .swiper-slide-shadow-flip.swiper-slide-shadow-bottom,\n.swiper-flip .swiper-slide-shadow-flip.swiper-slide-shadow-left,\n.swiper-flip .swiper-slide-shadow-flip.swiper-slide-shadow-right {\n z-index: 0;\n -webkit-backface-visibility: hidden;\n backface-visibility: hidden;\n}\n/* Flip slide shadows end */\n.swiper-creative .swiper-slide {\n -webkit-backface-visibility: hidden;\n backface-visibility: hidden;\n overflow: hidden;\n transition-property: transform, opacity, height;\n}\n.swiper-cards {\n overflow: visible;\n}\n.swiper-cards .swiper-slide {\n transform-origin: center bottom;\n -webkit-backface-visibility: hidden;\n backface-visibility: hidden;\n overflow: hidden;\n}\n"],"sourceRoot":""}]); 623// Exports 624/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_
624LOADER_EXPORT___); 625 626 627/***/ }), 628
vendor: 1,872 bytes, lines 629-704
629/***/ "./node_modules/css-loader/dist/runtime/api.js": 630/*!*****************************************************!*\ 631 !*** ./node_modules/css-loader/dist/runtime/api.js ***! 632 \*****************************************************/ 633/***/ ((module) => { 634 635"use strict"; 636 637 638/* 639 MIT License http://www.opensource.org/licenses/mit-license.php 640 Author Tobias Koppers @sokra 641*/ 642// css base code, injected by the css-loader 643// eslint-disable-next-line func-names 644module.exports = function (cssWithMappingToString) { 645 var list = []; // return the list of modules as css string 646 647 list.toString = function toString() { 648 return this.map(function (item) { 649 var content = cssWithMappingToString(item); 650 651 if (item[2]) { 652 return "@media ".concat(item[2], " {").concat(content, "}"); 653 } 654 655 return content; 656 }).join(""); 657 }; // import a list of modules into the list 658 // eslint-disable-next-line func-names 659 660 661 list.i = function (modules, mediaQuery, dedupe) { 662 if (typeof modules === "string") { 663 // eslint-disable-next-line no-param-reassign 664 modules = [[null, modules, ""]]; 665 } 666 667 var alreadyImportedModules = {}; 668 669 if (dedupe) { 670 for (var i = 0; i < this.length; i++) { 671 // eslint-disable-next-line prefer-destructuring 672 var id = this[i][0]; 673 674 if (id != null) { 675 alreadyImportedModules[id] = true; 676 } 677 } 678 } 679 680 for (var _i = 0; _i < modules.length; _i++) { 681 var item = [].concat(modules[_i]); 682 683 if (dedupe && alreadyImportedModules[item[0]]) { 684 // eslint-disable-next-line no-continue 685 continue; 686 } 687 688 if (mediaQuery) { 689 if (!item[2]) { 690 item[2] = mediaQuery; 691 } else { 692 item[2] = "".concat(mediaQuery, " and ").concat(item[2]); 693 } 694 } 695 696 list.push(item); 697 } 698 }; 699 700 return list; 701}; 702 703/***/ }), 704
vendor: 2,667 bytes, lines 705-750
705/***/ "./node_modules/css-loader/dist/runtime/cssWithMappingToString.js": 706/*!************************************************************************!*\ 707 !*** ./node_modules/css-loader/dist/runtime/cssWithMappingToString.js ***! 708 \************************************************************************/ 709/***/ ((module) => { 710 711"use strict"; 712 713 714function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); } 715 716function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } 717 718function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); } 719 720function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; } 721 722function _iterableToArrayLimit(arr, i) { var _i = arr && (typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"]); if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } 723 724function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; } 725 726module.exports = function cssWithMappingToString(item) { 727 var _item = _slicedToArray(item, 4), 728 content = _item[1], 729 cssMapping = _item[3]; 730 731 if (!cssMapping) { 732 return content; 733 } 734 735 if (typeof btoa === "function") { 736 // eslint-disable-next-line no-undef 737 var base64 = btoa(unescape(encodeURIComponent(JSON.stringify(cssMapping)))); 738 var data = "sourceMappingURL=data:application/json;charset=utf-8;base64,".concat(base64); 739 var sourceMapping = "/*# ".concat(data, " */"); 740 var sourceURLs = cssMapping.sources.map(function (source) { 741 return "/*# sourceURL=".concat(cssMapping.sourceRoot || "").concat(source, " */"); 742 }); 743 return [content].concat(sourceURLs).concat([sourceMapping]).join("\n"); 744 } 745 746 return [content].join("\n"); 747}; 748 749/***/ }), 750
vendor: 285,755 bytes, lines 751-11477
751/***/ "./node_modules/jquery/dist/jquery.js": 752/*!********************************************!*\ 753 !*** ./node_modules/jquery/dist/jquery.js ***! 754 \********************************************/ 755/***/ (function(module, exports) { 756 757var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;/*! 758 * jQuery JavaScript Library v3.7.1 759 * https://jquery.com/ 760 * 761 * Copyright OpenJS Foundation and other contributors 762 * Released under the MIT license 763 * https://jquery.org/license 764 * 765 * Date: 2023-08-28T13:37Z 766 */ 767( function( global, factory ) { 768 769 "use strict"; 770 771 if ( true && typeof module.exports === "object" ) { 772 773 // For CommonJS and CommonJS-like environments where a proper `window` 774 // is present, execute the factory and get jQuery. 775 // For environments that do not have a `window` with a `document` 776 // (such as Node.js), expose a factory as module.exports. 777 // This accentuates the need for the creation of a real `window`. 778 // e.g. var jQuery = require("jquery")(window); 779 // See ticket trac-14549 for more info. 780 module.exports = global.document ? 781 factory( global, true ) : 782 function( w ) { 783 if ( !w.document ) { 784 throw new Error( "jQuery requires a window with a document" ); 785 } 786 return factory( w ); 787 }; 788 } else { 789 factory( global ); 790 } 791 792// Pass this if window is not defined yet 793} )( typeof window !== "undefined" ? window : this, function( window, noGlobal ) { 794 795// Edge <= 12 - 13+, Firefox <=18 - 45+, IE 10 - 11, Safari 5.1 - 9+, iOS 6 - 9.1 796// throw exceptions when non-strict code (e.g., ASP.NET 4.5) accesses strict mode 797// arguments.callee.caller (trac-13335). But as of jQuery 3.0 (2016), strict mode should be common 798// enough that all such attempts are guarded in a try block. 799"use strict"; 800 801var arr = []; 802 803var getProto = Object.getPrototypeOf; 804 805var slice = arr.slice; 806 807var flat = arr.flat ? function( array ) { 808 return arr.flat.call( array ); 809} : function( array ) { 810 return arr.concat.apply( [], array ); 811}; 812 813 814var push = arr.push; 815 816var indexOf = arr.indexOf; 817 818var class2type = {}; 819 820var toString = class2type.toString; 821 822var hasOwn = class2type.hasOwnProperty; 823 824var fnToString = hasOwn.toString; 825 826var ObjectFunctionString = fnToString.call( Object ); 827 828var support = {}; 829 830var isFunction = function isFunction( obj ) { 831 832 // Support: Chrome <=57, Firefox <=52 833 // In some browsers, typeof returns "function" for HTML <object> elements 834 // (i.e., `typeof document.createElement( "object" ) === "function"`). 835 // We don't want to classify *any* DOM node as a function. 836 // Support: QtWeb <=3.8.5, WebKit <=534.34, wkhtmltopdf tool <=0.12.5 837 // Plus for old WebKit, typeof returns "function" for HTML collections 838 // (e.g., `typeof document.getElementsByTagName("div") === "function"`). (gh-4756) 839 return typeof obj === "function" && typeof obj.nodeType !== "number" && 840 typeof obj.item !== "function"; 841 }; 842 843 844var isWindow = function isWindow( obj ) { 845 return obj != null && obj === obj.window; 846 }; 847 848 849var document = window.document; 850 851 852 853 var preservedScriptAttributes = { 854 type: true, 855 src: true, 856 nonce: true, 857 noModule: true 858 }; 859 860 function DOMEval( code, node, doc ) { 861 doc = doc || document; 862 863 var i, val, 864 script = doc.createElement( "script" ); 865 866 script.text = code; 867 if ( node ) { 868 for ( i in preservedScriptAttributes ) { 869 870 // Support: Firefox 64+, Edge 18+ 871 // Some browsers don't support the "nonce" property on scripts. 872 // On the other hand, just using `getAttribute` is not enough as 873 // the `nonce` attribute is reset to an empty string whenever it 874 // becomes browsing-context connected. 875 // See https://github.com/whatwg/html/issues/2369 876 // See https://html.spec.whatwg.org/#nonce-attributes 877 // The `node.getAttribute` check was added for the sake of 878 // `jQuery.globalEval` so that it can fake a nonce-containing node 879 // via an object. 880 val = node[ i ] || node.getAttribute && node.getAttribute( i ); 881 if ( val ) { 882 script.setAttribute( i, val ); 883 } 884 } 885 } 886 doc.head.appendChild( script ).parentNode.removeChild( script ); 887 } 888 889 890function toType( obj ) { 891 if ( obj == null ) { 892 return obj + ""; 893 } 894 895 // Support: Android <=2.3 only (functionish RegExp) 896 return typeof obj === "object" || typeof obj === "function" ? 897 class2type[ toString.call( obj ) ] || "object" : 898 typeof obj; 899} 900/* global Symbol */ 901// Defining this global in .eslintrc.json would create a danger of using the global 902// unguarded in another place, it seems safer to define global only for this module 903 904 905 906var version = "3.7.1", 907 908 rhtmlSuffix = /HTML$/i, 909 910 // Define a local copy of jQuery 911 jQuery = function( selector, context ) { 912 913 // The jQuery object is actually just the init constructor 'enhanced' 914 // Need init if jQuery is called (just allow error to be thrown if not included) 915 return new jQuery.fn.init( selector, context ); 916 }; 917 918jQuery.fn = jQuery.prototype = { 919 920 // The current version of jQuery being used 921 jquery: version, 922 923 constructor: jQuery, 924 925 // The default length of a jQuery object is 0 926 length: 0, 927 928 toArray: function() { 929 return slice.call( this ); 930 }, 931 932 // Get the Nth element in the matched element set OR 933 // Get the whole matched element set as a clean array 934 get: function( num ) { 935 936 // Return all the elements in a clean array 937 if ( num == null ) { 938 return slice.call( this ); 939 } 940 941 // Return just the one element from the set 942 return num < 0 ? this[ num + this.length ] : this[ num ]; 943 }, 944 945 // Take an array of elements and push it onto the stack 946 // (returning the new matched element set) 947 pushStack: function( elems ) { 948 949 // Build a new jQuery matched element set 950 var ret = jQuery.merge( this.constructor(), elems ); 951 952 // Add the old object onto the stack (as a reference) 953 ret.prevObject = this; 954 955 // Return the newly-formed element set 956 return ret; 957 }, 958 959 // Execute a callback for every element in the matched set. 960 each: function( callback ) { 961 return jQuery.each( this, callback ); 962 }, 963 964 map: function( callback ) { 965 return this.pushStack( jQuery.map( this, function( elem, i ) { 966 return callback.call( elem, i, elem ); 967 } ) ); 968 }, 969 970 slice: function() { 971 return this.pushStack( slice.apply( this, arguments ) ); 972 }, 973 974 first: function() { 975 return this.eq( 0 ); 976 }, 977 978 last: function() { 979 return this.eq( -1 ); 980 }, 981 982 even: function() { 983 return this.pushStack( jQuery.grep( this, function( _elem, i ) { 984 return ( i + 1 ) % 2; 985 } ) ); 986 }, 987 988 odd: function() { 989 return this.pushStack( jQuery.grep( this, function( _elem, i ) { 990 return i % 2; 991 } ) ); 992 }, 993 994 eq: function( i ) { 995 var len = this.length, 996 j = +i + ( i < 0 ? len : 0 ); 997 return this.pushStack( j >= 0 && j < len ? [ this[ j ] ] : [] ); 998 }, 999 1000 end: function() { 1001 return this.prevObject || this.constructor(); 1002 }, 1003 1004 // For internal use only. 1005 // Behaves like an Array's method, not like a jQuery method. 1006 push: push, 1007 sort: arr.sort, 1008 splice: arr.splice 1009}; 1010 1011jQuery.extend = jQuery.fn.extend = function() { 1012 var options, name, src, copy, copyIsArray, clone, 1013 target = arguments[ 0 ] || {}, 1014 i = 1, 1015 length = arguments.length, 1016 deep = false; 1017 1018 // Handle a deep copy situation 1019 if ( typeof target === "boolean" ) { 1020 deep = target; 1021 1022 // Skip the boolean and the target 1023 target = arguments[ i ] || {}; 1024 i++; 1025 } 1026 1027 // Handle case when target is a string or something (possible in deep copy) 1028 if ( typeof target !== "object" && !isFunction( target ) ) { 1029 target = {}; 1030 } 1031 1032 // Extend jQuery itself if only one argument is passed 1033 if ( i === length ) { 1034 target = this; 1035 i--; 1036 } 1037 1038 for ( ; i < length; i++ ) { 1039 1040 // Only deal with non-null/undefined values 1041 if ( ( options = arguments[ i ] ) != null ) { 1042 1043 // Extend the base object 1044 for ( name in options ) { 1045 copy = options[ name ]; 1046 1047 // Prevent Object.prototype pollution 1048 // Prevent never-ending loop 1049 if ( name === "__proto__" || target === copy ) { 1050 continue; 1051 } 1052 1053 // Recurse if we're merging plain objects or arrays 1054 if ( deep && copy && ( jQuery.isPlainObject( copy ) || 1055 ( copyIsArray = Array.isArray( copy ) ) ) ) { 1056 src = target[ name ]; 1057 1058 // Ensure proper type for the source value 1059 if ( copyIsArray && !Array.isArray( src ) ) { 1060 clone = []; 1061 } else if ( !copyIsArray && !jQuery.isPlainObject( src ) ) { 1062 clone = {}; 1063 } else { 1064 clone = src; 1065 } 1066 copyIsArray = false; 1067 1068 // Never move original objects, clone them 1069 target[ name ] = jQuery.extend( deep, clone, copy ); 1070 1071 // Don't bring in undefined values 1072 } else if ( copy !== undefined ) { 1073 target[ name ] = copy; 1074 } 1075 } 1076 } 1077 } 1078 1079 // Return the modified object 1080 return target; 1081}; 1082 1083jQuery.extend( { 1084 1085 // Unique for each copy of jQuery on the page 1086 expando: "jQuery" + ( version + Math.random() ).replace( /\D/g, "" ), 1087 1088 // Assume jQuery is ready without the ready module 1089 isReady: true, 1090 1091 error: function( msg ) { 1092 throw new Error( msg ); 1093 }, 1094 1095 noop: function() {}, 1096 1097 isPlainObject: function( obj ) { 1098 var proto, Ctor; 1099 1100 // Detect obvious negatives 1101 // Use toString instead of jQuery.type to catch host objects 1102 if ( !obj || toString.call( obj ) !== "[object Object]" ) { 1103 return false; 1104 } 1105 1106 proto = getProto( obj ); 1107 1108 // Objects with no prototype (e.g., `Object.create( null )`) are plain 1109 if ( !proto ) { 1110 return true; 1111 } 1112 1113 // Objects with prototype are plain iff they were constructed by a global Object function 1114 Ctor = hasOwn.call( proto, "constructor" ) && proto.constructor; 1115 return typeof Ctor === "function" && fnToString.call( Ctor ) === ObjectFunctionString; 1116 }, 1117 1118 isEmptyObject: function( obj ) { 1119 var name; 1120 1121 for ( name in obj ) { 1122 return false; 1123 } 1124 return true; 1125 }, 1126 1127 // Evaluates a script in a provided context; falls back to the global one 1128 // if not specified. 1129 globalEval: function( code, options, doc ) { 1130 DOMEval( code, { nonce: options && options.nonce }, doc ); 1131 }, 1132 1133 each: function( obj, callback ) { 1134 var length, i = 0; 1135 1136 if ( isArrayLike( obj ) ) { 1137 length = obj.length; 1138 for ( ; i < length; i++ ) { 1139 if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) { 1140 break; 1141 } 1142 } 1143 } else { 1144 for ( i in obj ) { 1145 if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) { 1146 break; 1147 } 1148 } 1149 } 1150 1151 return obj; 1152 }, 1153 1154 1155 // Retrieve the text value of an array of DOM nodes 1156 text: function( elem ) { 1157 var node, 1158 ret = "", 1159 i = 0, 1160 nodeType = elem.nodeType; 1161 1162 if ( !nodeType ) { 1163 1164 // If no nodeType, this is expected to be an array 1165 while ( ( node = elem[ i++ ] ) ) { 1166 1167 // Do not traverse comment nodes 1168 ret += jQuery.text( node ); 1169 } 1170 } 1171 if ( nodeType === 1 || nodeType === 11 ) { 1172 return elem.textContent; 1173 } 1174 if ( nodeType === 9 ) { 1175 return elem.documentElement.textContent; 1176 } 1177 if ( nodeType === 3 || nodeType === 4 ) { 1178 return elem.nodeValue; 1179 } 1180 1181 // Do not include comment or processing instruction nodes 1182 1183 return ret; 1184 }, 1185 1186 // results is for internal usage only 1187 makeArray: function( arr, results ) { 1188 var ret = results || []; 1189 1190 if ( arr != null ) { 1191 if ( isArrayLike( Object( arr ) ) ) { 1192 jQuery.merge( ret, 1193 typeof arr === "string" ? 1194 [ arr ] : arr 1195 ); 1196 } else { 1197 push.call( ret, arr ); 1198 } 1199 } 1200 1201 return ret; 1202 }, 1203 1204 inArray: function( elem, arr, i ) { 1205 return arr == null ? -1 : indexOf.call( arr, elem, i ); 1206 }, 1207 1208 isXMLDoc: function( elem ) { 1209 var namespace = elem && elem.namespaceURI, 1210 docElem = elem && ( elem.ownerDocument || elem ).documentElement; 1211 1212 // Assume HTML when documentElement doesn't yet exist, such as inside 1213 // document fragments. 1214 return !rhtmlSuffix.test( namespace || docElem && docElem.nodeName || "HTML" ); 1215 }, 1216 1217 // Support: Android <=4.0 only, PhantomJS 1 only 1218 // push.apply(_, arraylike) throws on ancient WebKit 1219 merge: function( first, second ) { 1220 var len = +second.length, 1221 j = 0, 1222 i = first.length; 1223 1224 for ( ; j < len; j++ ) { 1225 first[ i++ ] = second[ j ]; 1226 } 1227 1228 first.length = i; 1229 1230 return first; 1231 }, 1232 1233 grep: function( elems, callback, invert ) { 1234 var callbackInverse, 1235 matches = [], 1236 i = 0, 1237 length = elems.length, 1238 callbackExpect = !invert; 1239 1240 // Go through the array, only saving the items 1241 // that pass the validator function 1242 for ( ; i < length; i++ ) { 1243 callbackInverse = !callback( elems[ i ], i ); 1244 if ( callbackInverse !== callbackExpect ) { 1245 matches.push( elems[ i ] ); 1246 } 1247 } 1248 1249 return matches; 1250 }, 1251 1252 // arg is for internal usage only 1253 map: function( elems, callback, arg ) { 1254 var length, value, 1255 i = 0, 1256 ret = []; 1257 1258 // Go through the array, translating each of the items to their new values 1259 if ( isArrayLike( elems ) ) { 1260 length = elems.length; 1261 for ( ; i < length; i++ ) { 1262 value = callback( elems[ i ], i, arg ); 1263 1264 if ( value != null ) { 1265 ret.push( value ); 1266 } 1267 } 1268 1269 // Go through every key on the object, 1270 } else { 1271 for ( i in elems ) { 1272 value = callback( elems[ i ], i, arg ); 1273 1274 if ( value != null ) { 1275 ret.push( value ); 1276 } 1277 } 1278 } 1279 1280 // Flatten any nested arrays 1281 return flat( ret ); 1282 }, 1283 1284 // A global GUID counter for objects 1285 guid: 1, 1286 1287 // jQuery.support is not used in Core but other projects attach their 1288 // properties to it so it needs to exist. 1289 support: support 1290} ); 1291 1292if ( typeof Symbol === "function" ) { 1293 jQuery.fn[ Symbol.iterator ] = arr[ Symbol.iterator ]; 1294} 1295 1296// Populate the class2type map 1297jQuery.each( "Boolean Number String Function Array Date RegExp Object Error Symbol".split( " " ), 1298 function( _i, name ) { 1299 class2type[ "[object " + name + "]" ] = name.toLowerCase(); 1300 } ); 1301 1302function isArrayLike( obj ) { 1303 1304 // Support: real iOS 8.2 only (not reproducible in simulator) 1305 // `in` check used to prevent JIT error (gh-2145) 1306 // hasOwn isn't used here due to false negatives 1307 // regarding Nodelist length in IE 1308 var length = !!obj && "length" in obj && obj.length, 1309 type = toType( obj ); 1310 1311 if ( isFunction( obj ) || isWindow( obj ) ) { 1312 return false; 1313 } 1314 1315 return type === "array" || length === 0 || 1316 typeof length === "number" && length > 0 && ( length - 1 ) in obj; 1317} 1318 1319 1320function nodeName( elem, name ) { 1321 1322 return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase(); 1323 1324} 1325var pop = arr.pop; 1326 1327 1328var sort = arr.sort; 1329 1330 1331var splice = arr.splice; 1332 1333 1334var whitespace = "[\\x20\\t\\r\\n\\f]"; 1335 1336 1337var rtrimCSS = new RegExp( 1338 "^" + whitespace + "+|((?:^|[^\\\\])(?:\\\\.)*)" + whitespace + "+$", 1339 "g" 1340); 1341 1342 1343 1344 1345// Note: an element does not contain itself 1346jQuery.contains = function( a, b ) { 1347 var bup = b && b.parentNode; 1348 1349 return a === bup || !!( bup && bup.nodeType === 1 && ( 1350 1351 // Support: IE 9 - 11+ 1352 // IE doesn't have `contains` on SVG. 1353 a.contains ? 1354 a.contains( bup ) : 1355 a.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16 1356 ) ); 1357}; 1358 1359 1360 1361 1362// CSS string/identifier serialization 1363// https://drafts.csswg.org/cssom/#common-serializing-idioms 1364var rcssescape = /([\0-\x1f\x7f]|^-?\d)|^-$|[^\x80-\uFFFF\w-]/g; 1365 1366function fcssescape( ch, asCodePoint ) { 1367 if ( asCodePoint ) { 1368 1369 // U+0000 NULL becomes U+FFFD REPLACEMENT CHARACTER 1370 if ( ch === "\0" ) { 1371 return "\uFFFD"; 1372 } 1373 1374 // Control characters and (dependent upon position) numbers get escaped as code points 1375 return ch.slice( 0, -1 ) + "\\" + ch.charCodeAt( ch.length - 1 ).toString( 16 ) + " "; 1376 } 1377 1378 // Other potentially-special ASCII characters get backslash-escaped 1379 return "\\" + ch; 1380} 1381 1382jQuery.escapeSelector = function( sel ) { 1383 return ( sel + "" ).replace( rcssescape, fcssescape ); 1384}; 1385 1386 1387 1388 1389var preferredDoc = document, 1390 pushNative = push; 1391 1392( function() { 1393 1394var i, 1395 Expr, 1396 outermostContext, 1397 sortInput, 1398 hasDuplicate, 1399 push = pushNative, 1400 1401 // Local document vars 1402 document, 1403 documentElement, 1404 documentIsHTML, 1405 rbuggyQSA, 1406 matches, 1407 1408 // Instance-specific data 1409 expando = jQuery.expando, 1410 dirruns = 0, 1411 done = 0, 1412 classCache = createCache(), 1413 tokenCache = createCache(), 1414 compilerCache = createCache(), 1415 nonnativeSelectorCache = createCache(), 1416 sortOrder = function( a, b ) { 1417 if ( a === b ) { 1418 hasDuplicate = true; 1419 } 1420 return 0; 1421 }, 1422 1423 booleans = "checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|" + 1424 "loop|multiple|open|readonly|required|scoped", 1425 1426 // Regular expressions 1427 1428 // https://www.w3.org/TR/css-syntax-3/#ident-token-diagram 1429 identifier = "(?:\\\\[\\da-fA-F]{1,6}" + whitespace + 1430 "?|\\\\[^\\r\\n\\f]|[\\w-]|[^\0-\\x7f])+", 1431 1432 // Attribute selectors: https://www.w3.org/TR/selectors/#attribute-selectors 1433 attributes = "\\[" + whitespace + "*(" + identifier + ")(?:" + whitespace + 1434 1435 // Operator (capture 2) 1436 "*([*^$|!~]?=)" + whitespace + 1437 1438 // "Attribute values must be CSS identifiers [capture 5] or strings [capture 3 or capture 4]" 1439 "*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|(" + identifier + "))|)" + 1440 whitespace + "*\\]", 1441 1442 pseudos = ":(" + identifier + ")(?:\\((" + 1443 1444 // To reduce the number of selectors needing tokenize in the preFilter, prefer arguments: 1445 // 1. quoted (capture 3; capture 4 or capture 5) 1446 "('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|" + 1447 1448 // 2. simple (capture 6) 1449 "((?:\\\\.|[^\\\\()[\\]]|" + attributes + ")*)|" + 1450 1451 // 3. anything else (capture 2) 1452 ".*" + 1453 ")\\)|)", 1454 1455 // Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter 1456 rwhitespace = new RegExp( whitespace + "+", "g" ), 1457 1458 rcomma = new RegExp( "^" + whitespace + "*," + whitespace + "*" ), 1459 rleadingCombinator = new RegExp( "^" + whitespace + "*([>+~]|" + whitespace + ")" + 1460 whitespace + "*" ), 1461 rdescend = new RegExp( whitespace + "|>" ), 1462 1463 rpseudo = new RegExp( pseudos ), 1464 ridentifier = new RegExp( "^" + identifier + "$" ), 1465 1466 matchExpr = { 1467 ID: new RegExp( "^#(" + identifier + ")" ), 1468 CLASS: new RegExp( "^\\.(" + identifier + ")" ), 1469 TAG: new RegExp( "^(" + identifier + "|[*])" ), 1470 ATTR: new RegExp( "^" + attributes ), 1471 PSEUDO: new RegExp( "^" + pseudos ), 1472 CHILD: new RegExp( 1473 "^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(" + 1474 whitespace + "*(even|odd|(([+-]|)(\\d*)n|)" + whitespace + "*(?:([+-]|)" + 1475 whitespace + "*(\\d+)|))" + whitespace + "*\\)|)", "i" ), 1476 bool: new RegExp( "^(?:" + booleans + ")$", "i" ), 1477 1478 // For use in libraries implementing .is() 1479 // We use this for POS matching in `select` 1480 needsContext: new RegExp( "^" + whitespace + 1481 "*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(" + whitespace + 1482 "*((?:-\\d)?\\d*)" + whitespace + "*\\)|)(?=[^-]|$)", "i" ) 1483 }, 1484 1485 rinputs = /^(?:input|select|textarea|button)$/i, 1486 rheader = /^h\d$/i, 1487 1488 // Easily-parseable/retrievable ID or TAG or CLASS selectors 1489 rquickExpr = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/, 1490 1491 rsibling = /[+~]/, 1492 1493 // CSS escapes 1494 // https://www.w3.org/TR/CSS21/syndata.html#escaped-characters 1495 runescape = new RegExp( "\\\\[\\da-fA-F]{1,6}" + whitespace + 1496 "?|\\\\([^\\r\\n\\f])", "g" ), 1497 funescape = function( escape, nonHex ) { 1498 var high = "0x" + escape.slice( 1 ) - 0x10000; 1499 1500 if ( nonHex ) { 1501 1502 // Strip the backslash prefix from a non-hex escape sequence 1503 return nonHex; 1504 } 1505 1506 // Replace a hexadecimal escape sequence with the encoded Unicode code point 1507 // Support: IE <=11+ 1508 // For values outside the Basic Multilingual Plane (BMP), manually construct a 1509 // surrogate pair 1510 return high < 0 ? 1511 String.fromCharCode( high + 0x10000 ) : 1512 String.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 ); 1513 }, 1514 1515 // Used for iframes; see `setDocument`. 1516 // Support: IE 9 - 11+, Edge 12 - 18+ 1517 // Removing the function wrapper causes a "Permission Denied" 1518 // error in IE/Edge. 1519 unloadHandler = function() { 1520 setDocument(); 1521 }, 1522 1523 inDisabledFieldset = addCombinator( 1524 function( elem ) { 1525 return elem.disabled === true && nodeName( elem, "fieldset" ); 1526 }, 1527 { dir: "parentNode", next: "legend" } 1528 ); 1529 1530// Support: IE <=9 only 1531// Accessing document.activeElement can throw unexpectedly 1532// https://bugs.jquery.com/ticket/13393 1533function safeActiveElement() { 1534 try { 1535 return document.activeElement; 1536 } catch ( err ) { } 1537} 1538 1539// Optimize for push.apply( _, NodeList ) 1540try { 1541 push.apply( 1542 ( arr = slice.call( preferredDoc.childNodes ) ), 1543 preferredDoc.childNodes 1544 ); 1545 1546 // Support: Android <=4.0 1547 // Detect silently failing push.apply 1548 // eslint-disable-next-line no-unused-expressions 1549 arr[ preferredDoc.childNodes.length ].nodeType; 1550} catch ( e ) { 1551 push = { 1552 apply: function( target, els ) { 1553 pushNative.apply( target, slice.call( els ) ); 1554 }, 1555 call: function( target ) { 1556 pushNative.apply( target, slice.call( arguments, 1 ) ); 1557 } 1558 }; 1559} 1560 1561function find( selector, context, results, seed ) { 1562 var m, i, elem, nid, match, groups, newSelector, 1563 newContext = context && context.ownerDocument, 1564 1565 // nodeType defaults to 9, since context defaults to document 1566 nodeType = context ? context.nodeType : 9; 1567 1568 results = results || []; 1569 1570 // Return early from calls with invalid selector or context 1571 if ( typeof selector !== "string" || !selector || 1572 nodeType !== 1 && nodeType !== 9 && nodeType !== 11 ) { 1573 1574 return results; 1575 } 1576 1577 // Try to shortcut find operations (as opposed to filters) in HTML documents 1578 if ( !seed ) { 1579 setDocument( context ); 1580 context = context || document; 1581 1582 if ( documentIsHTML ) { 1583 1584 // If the selector is sufficiently simple, try using a "get*By*" DOM method 1585 // (excepting DocumentFragment context, where the methods don't exist) 1586 if ( nodeType !== 11 && ( match = rquickExpr.exec( selector ) ) ) { 1587 1588 // ID selector 1589 if ( ( m = match[ 1 ] ) ) { 1590 1591 // Document context 1592 if ( nodeType === 9 ) { 1593 if ( ( elem = context.getElementById( m ) ) ) { 1594 1595 // Support: IE 9 only 1596 // getElementById can match elements by name instead of ID 1597 if ( elem.id === m ) { 1598 push.call( results, elem ); 1599 return results; 1600 } 1601 } else { 1602 return results; 1603 } 1604 1605 // Element context 1606 } else { 1607 1608 // Support: IE 9 only 1609 // getElementById can match elements by name instead of ID 1610 if ( newContext && ( elem = newContext.getElementById( m ) ) && 1611 find.contains( context, elem ) && 1612 elem.id === m ) { 1613 1614 push.call( results, elem ); 1615 return results; 1616 } 1617 } 1618 1619 // Type selector 1620 } else if ( match[ 2 ] ) { 1621 push.apply( results, context.getElementsByTagName( selector ) ); 1622 return results; 1623 1624 // Class selector 1625 } else if ( ( m = match[ 3 ] ) && context.getElementsByClassName ) { 1626 push.apply( results, context.getElementsByClassName( m ) ); 1627 return results; 1628 } 1629 } 1630 1631 // Take advantage of querySelectorAll 1632 if ( !nonnativeSelectorCache[ selector + " " ] && 1633 ( !rbuggyQSA || !rbuggyQSA.test( selector ) ) ) { 1634 1635 newSelector = selector; 1636 newContext = context; 1637 1638 // qSA considers elements outside a scoping root when evaluating child or 1639 // descendant combinators, which is not what we want. 1640 // In such cases, we work around the behavior by prefixing every selector in the 1641 // list with an ID selector referencing the scope context. 1642 // The technique has to be used as well when a leading combinator is used 1643 // as such selectors are not recognized by querySelectorAll. 1644 // Thanks to Andrew Dupont for this technique. 1645 if ( nodeType === 1 && 1646 ( rdescend.test( selector ) || rleadingCombinator.test( selector ) ) ) { 1647 1648 // Expand context for sibling selectors 1649 newContext = rsibling.test( selector ) && testContext( context.parentNode ) || 1650 context; 1651 1652 // We can use :scope instead of the ID hack if the browser 1653 // supports it & if we're not changing the context. 1654 // Support: IE 11+, Edge 17 - 18+ 1655 // IE/Edge sometimes throw a "Permission denied" error when 1656 // strict-comparing two documents; shallow comparisons work. 1657 // eslint-disable-next-line eqeqeq 1658 if ( newContext != context || !support.scope ) { 1659 1660 // Capture the context ID, setting it first if necessary 1661 if ( ( nid = context.getAttribute( "id" ) ) ) { 1662 nid = jQuery.escapeSelector( nid ); 1663 } else { 1664 context.setAttribute( "id", ( nid = expando ) ); 1665 } 1666 } 1667 1668 // Prefix every selector in the list 1669 groups = tokenize( selector ); 1670 i = groups.length; 1671 while ( i-- ) { 1672 groups[ i ] = ( nid ? "#" + nid : ":scope" ) + " " + 1673 toSelector( groups[ i ] ); 1674 } 1675 newSelector = groups.join( "," ); 1676 } 1677 1678 try { 1679 push.apply( results, 1680 newContext.querySelectorAll( newSelector ) 1681 ); 1682 return results; 1683 } catch ( qsaError ) { 1684 nonnativeSelectorCache( selector, true ); 1685 } finally { 1686 if ( nid === expando ) { 1687 context.removeAttribute( "id" ); 1688 } 1689 } 1690 } 1691 } 1692 } 1693 1694 // All others 1695 return select( selector.replace( rtrimCSS, "$1" ), context, results, seed ); 1696} 1697 1698/** 1699 * Create key-value caches of limited size 1700 * @returns {function(string, object)} Returns the Object data after storing it on itself with 1701 * property name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength) 1702 * deleting the oldest entry 1703 */ 1704function createCache() { 1705 var keys = []; 1706 1707 function cache( key, value ) { 1708 1709 // Use (key + " ") to avoid collision with native prototype properties 1710 // (see https://github.com/jquery/sizzle/issues/157) 1711 if ( keys.push( key + " " ) > Expr.cacheLength ) { 1712 1713 // Only keep the most recent entries 1714 delete cache[ keys.shift() ]; 1715 } 1716 return ( cache[ key + " " ] = value ); 1717 } 1718 return cache; 1719} 1720 1721/** 1722 * Mark a function for special use by jQuery selector module 1723 * @param {Function} fn The function to mark 1724 */ 1725function markFunction( fn ) { 1726 fn[ expando ] = true; 1727 return fn; 1728} 1729 1730/** 1731 * Support testing using an element 1732 * @param {Function} fn Passed the created element and returns a boolean result 1733 */ 1734function assert( fn ) { 1735 var el = document.createElement( "fieldset" ); 1736 1737 try { 1738 return !!fn( el ); 1739 } catch ( e ) { 1740 return false; 1741 } finally { 1742 1743 // Remove from its parent by default 1744 if ( el.parentNode ) { 1745 el.parentNode.removeChild( el ); 1746 } 1747 1748 // release memory in IE 1749 el = null; 1750 } 1751} 1752 1753/** 1754 * Returns a function to use in pseudos for input types 1755 * @param {String} type 1756 */ 1757function createInputPseudo( type ) { 1758 return function( elem ) { 1759 return nodeName( elem, "input" ) && elem.type === type; 1760 }; 1761} 1762 1763/** 1764 * Returns a function to use in pseudos for buttons 1765 * @param {String} type 1766 */ 1767function createButtonPseudo( type ) { 1768 return function( elem ) { 1769 return ( nodeName( elem, "input" ) || nodeName( elem, "button" ) ) && 1770 elem.type === type; 1771 }; 1772} 1773 1774/** 1775 * Returns a function to use in pseudos for :enabled/:disabled 1776 * @param {Boolean} disabled true for :disabled; false for :enabled 1777 */ 1778function createDisabledPseudo( disabled ) { 1779 1780 // Known :disabled false positives: fieldset[disabled] > legend:nth-of-type(n+2) :can-disable 1781 return function( elem ) { 1782 1783 // Only certain elements can match :enabled or :disabled 1784 // https://html.spec.whatwg.org/multipage/scripting.html#selector-enabled 1785 // https://html.spec.whatwg.org/multipage/scripting.html#selector-disabled 1786 if ( "form" in elem ) { 1787 1788 // Check for inherited disabledness on relevant non-disabled elements: 1789 // * listed form-associated elements in a disabled fieldset 1790 // https://html.spec.whatwg.org/multipage/forms.html#category-listed 1791 // https://html.spec.whatwg.org/multipage/forms.html#concept-fe-disabled 1792 // * option elements in a disabled optgroup 1793 // https://html.spec.whatwg.org/multipage/forms.html#concept-option-disabled 1794 // All such elements have a "form" property. 1795 if ( elem.parentNode && elem.disabled === false ) { 1796 1797 // Option elements defer to a parent optgroup if present 1798 if ( "label" in elem ) { 1799 if ( "label" in elem.parentNode ) { 1800 return elem.parentNode.disabled === disabled; 1801 } else { 1802 return elem.disabled === disabled; 1803 } 1804 } 1805 1806 // Support: IE 6 - 11+ 1807 // Use the isDisabled shortcut property to check for disabled fieldset ancestors 1808 return elem.isDisabled === disabled || 1809 1810 // Where there is no isDisabled, check manually 1811 elem.isDisabled !== !disabled && 1812 inDisabledFieldset( elem ) === disabled; 1813 } 1814 1815 return elem.disabled === disabled; 1816 1817 // Try to winnow out elements that can't be disabled before trusting the disabled property. 1818 // Some victims get caught in our net (label, legend, menu, track), but it shouldn't 1819 // even exist on them, let alone have a boolean value. 1820 } else if ( "label" in elem ) { 1821 return elem.disabled === disabled; 1822 } 1823 1824 // Remaining elements are neither :enabled nor :disabled 1825 return false; 1826 }; 1827} 1828 1829/** 1830 * Returns a function to use in pseudos for positionals 1831 * @param {Function} fn 1832 */ 1833function createPositionalPseudo( fn ) { 1834 return markFunction( function( argument ) { 1835 argument = +argument; 1836 return markFunction( function( seed, matches ) { 1837 var j, 1838 matchIndexes = fn( [], seed.length, argument ), 1839 i = matchIndexes.length; 1840 1841 // Match elements found at the specified indexes 1842 while ( i-- ) { 1843 if ( seed[ ( j = matchIndexes[ i ] ) ] ) { 1844 seed[ j ] = !( matches[ j ] = seed[ j ] ); 1845 } 1846 } 1847 } ); 1848 } ); 1849} 1850 1851/** 1852 * Checks a node for validity as a jQuery selector context 1853 * @param {Element|Object=} context 1854 * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value 1855 */ 1856function testContext( context ) { 1857 return context && typeof context.getElementsByTagName !== "undefined" && context; 1858} 1859 1860/** 1861 * Sets document-related variables once based on the current document 1862 * @param {Element|Object} [node] An element or document object to use to set the document 1863 * @returns {Object} Returns the current document 1864 */ 1865function setDocument( node ) { 1866 var subWindow, 1867 doc = node ? node.ownerDocument || node : preferredDoc; 1868 1869 // Return early if doc is invalid or already selected 1870 // Support: IE 11+, Edge 17 - 18+ 1871 // IE/Edge sometimes throw a "Permission denied" error when strict-comparing 1872 // two documents; shallow comparisons work. 1873 // eslint-disable-next-line eqeqeq 1874 if ( doc == document || doc.nodeType !== 9 || !doc.documentElement ) { 1875 return document; 1876 } 1877 1878 // Update global variables 1879 document = doc; 1880 documentElement = document.documentElement; 1881 documentIsHTML = !jQuery.isXMLDoc( document ); 1882 1883 // Support: iOS 7 only, IE 9 - 11+ 1884 // Older browsers didn't support unprefixed `matches`. 1885 matches = documentElement.matches || 1886 documentElement.webkitMatchesSelector || 1887 documentElement.msMatchesSelector; 1888 1889 // Support: IE 9 - 11+, Edge 12 - 18+ 1890 // Accessing iframe documents after unload throws "permission denied" errors 1891 // (see trac-13936). 1892 // Limit the fix to IE & Edge Legacy; despite Edge 15+ implementing `matches`, 1893 // all IE 9+ and Edge Legacy versions implement `msMatchesSelector` as well. 1894 if ( documentElement.msMatchesSelector && 1895 1896 // Support: IE 11+, Edge 17 - 18+ 1897 // IE/Edge sometimes throw a "Permission denied" error when strict-comparing 1898 // two documents; shallow comparisons work. 1899 // eslint-disable-next-line eqeqeq 1900 preferredDoc != document && 1901 ( subWindow = document.defaultView ) && subWindow.top !== subWindow ) { 1902 1903 // Support: IE 9 - 11+, Edge 12 - 18+ 1904 subWindow.addEventListener( "unload", unloadHandler ); 1905 } 1906 1907 // Support: IE <10 1908 // Check if getElementById returns elements by name 1909 // The broken getElementById methods don't pick up programmatically-set names, 1910 // so use a roundabout getElementsByName test 1911 support.getById = assert( function( el ) { 1912 documentElement.appendChild( el ).id = jQuery.expando; 1913 return !document.getElementsByName || 1914 !document.getElementsByName( jQuery.expando ).length; 1915 } ); 1916 1917 // Support: IE 9 only 1918 // Check to see if it's possible to do matchesSelector 1919 // on a disconnected node. 1920 support.disconnectedMatch = assert( function( el ) { 1921 return matches.call( el, "*" ); 1922 } ); 1923 1924 // Support: IE 9 - 11+, Edge 12 - 18+ 1925 // IE/Edge don't support the :scope pseudo-class. 1926 support.scope = assert( function() { 1927 return document.querySelectorAll( ":scope" ); 1928 } ); 1929 1930 // Support: Chrome 105 - 111 only, Safari 15.4 - 16.3 only 1931 // Make sure the `:has()` argument is parsed unforgivingly. 1932 // We include `*` in the test to detect buggy implementations that are 1933 // _selectively_ forgiving (specifically when the list includes at least 1934 // one valid selector). 1935 // Note that we treat complete lack of support for `:has()` as if it were 1936 // spec-compliant support, which is fine because use of `:has()` in such 1937 // environments will fail in the qSA path and fall back to jQuery traversal 1938 // anyway. 1939 support.cssHas = assert( function() { 1940 try { 1941 document.querySelector( ":has(*,:jqfake)" ); 1942 return false; 1943 } catch ( e ) { 1944 return true; 1945 } 1946 } ); 1947 1948 // ID filter and find 1949 if ( support.getById ) { 1950 Expr.filter.ID = function( id ) { 1951 var attrId = id.replace( runescape, funescape ); 1952 return function( elem ) { 1953 return elem.getAttribute( "id" ) === attrId; 1954 }; 1955 }; 1956 Expr.find.ID = function( id, context ) { 1957 if ( typeof context.getElementById !== "undefined" && documentIsHTML ) { 1958 var elem = context.getElementById( id ); 1959 return elem ? [ elem ] : []; 1960 } 1961 }; 1962 } else { 1963 Expr.filter.ID = function( id ) { 1964 var attrId = id.replace( runescape, funescape ); 1965 return function( elem ) { 1966 var node = typeof elem.getAttributeNode !== "undefined" && 1967 elem.getAttributeNode( "id" ); 1968 return node && node.value === attrId; 1969 }; 1970 }; 1971 1972 // Support: IE 6 - 7 only 1973 // getElementById is not reliable as a find shortcut 1974 Expr.find.ID = function( id, context ) { 1975 if ( typeof context.getElementById !== "undefined" && documentIsHTML ) { 1976 var node, i, elems, 1977 elem = context.getElementById( id ); 1978 1979 if ( elem ) { 1980 1981 // Verify the id attribute 1982 node = elem.getAttributeNode( "id" ); 1983 if ( node && node.value === id ) { 1984 return [ elem ]; 1985 } 1986 1987 // Fall back on getElementsByName 1988 elems = context.getElementsByName( id ); 1989 i = 0; 1990 while ( ( elem = elems[ i++ ] ) ) { 1991 node = elem.getAttributeNode( "id" ); 1992 if ( node && node.value === id ) { 1993 return [ elem ]; 1994 } 1995 } 1996 } 1997 1998 return []; 1999 } 2000 }; 2001 } 2002 2003 // Tag 2004 Expr.find.TAG = function( tag, context ) { 2005 if ( typeof context.getElementsByTagName !== "undefined" ) { 2006 return context.getElementsByTagName( tag ); 2007 2008 // DocumentFragment nodes don't have gEBTN 2009 } else { 2010 return context.querySelectorAll( tag ); 2011 } 2012 }; 2013 2014 // Class 2015 Expr.find.CLASS = function( className, context ) { 2016 if ( typeof context.getElementsByClassName !== "undefined" && documentIsHTML ) { 2017 return context.getElementsByClassName( className ); 2018 } 2019 }; 2020 2021 /* QSA/matchesSelector 2022 ---------------------------------------------------------------------- */ 2023 2024 // QSA and matchesSelector support 2025 2026 rbuggyQSA = []; 2027 2028 // Build QSA regex 2029 // Regex strategy adopted from Diego Perini 2030 assert( function( el ) { 2031 2032 var input; 2033 2034 documentElement.appendChild( el ).innerHTML = 2035 "<a id='" + expando + "' href='' disabled='disabled'></a>" + 2036 "<select id='" + expando + "-\r\\' disabled='disabled'>" + 2037 "<option selected=''></option></select>"; 2038 2039 // Support: iOS <=7 - 8 only 2040 // Boolean attributes and "value" are not treated correctly in some XML documents 2041 if ( !el.querySelectorAll( "[selected]" ).length ) { 2042 rbuggyQSA.push( "\\[" + whitespace + "*(?:value|" + booleans + ")" ); 2043 } 2044 2045 // Support: iOS <=7 - 8 only 2046 if ( !el.querySelectorAll( "[id~=" + expando + "-]" ).length ) { 2047 rbuggyQSA.push( "~=" ); 2048 } 2049 2050 // Support: iOS 8 only 2051 // https://bugs.webkit.org/show_bug.cgi?id=136851 2052 // In-page `selector#id sibling-combinator selector` fails 2053 if ( !el.querySelectorAll( "a#" + expando + "+*" ).length ) { 2054 rbuggyQSA.push( ".#.+[+~]" ); 2055 } 2056 2057 // Support: Chrome <=105+, Firefox <=104+, Safari <=15.4+ 2058 // In some of the document kinds, these selectors wouldn't work natively. 2059 // This is probably OK but for backwards compatibility we want to maintain 2060 // handling them through jQuery traversal in jQuery 3.x. 2061 if ( !el.querySelectorAll( ":checked" ).length ) { 2062 rbuggyQSA.push( ":checked" ); 2063 } 2064 2065 // Support: Windows 8 Native Apps 2066 // The type and name attributes are restricted during .innerHTML assignment 2067 input = document.createElement( "input" ); 2068 input.setAttribute( "type", "hidden" ); 2069 el.appendChild( input ).setAttribute( "name", "D" ); 2070 2071 // Support: IE 9 - 11+ 2072 // IE's :disabled selector does not pick up the children of disabled fieldsets 2073 // Support: Chrome <=105+, Firefox <=104+, Safari <=15.4+ 2074 // In some of the document kinds, these selectors wouldn't work natively. 2075 // This is probably OK but for backwards compatibility we want to maintain 2076 // handling them through jQuery traversal in jQuery 3.x. 2077 documentElement.appendChild( el ).disabled = true; 2078 if ( el.querySelectorAll( ":disabled" ).length !== 2 ) { 2079 rbuggyQSA.push( ":enabled", ":disabled" ); 2080 } 2081 2082 // Support: IE 11+, Edge 15 - 18+ 2083 // IE 11/Edge don't find elements on a `[name='']` query in some cases. 2084 // Adding a temporary attribute to the document before the selection works 2085 // around the issue. 2086 // Interestingly, IE 10 & older don't seem to have the issue. 2087 input = document.createElement( "input" ); 2088 input.setAttribute( "name", "" ); 2089 el.appendChild( input ); 2090 if ( !el.querySelectorAll( "[name='']" ).length ) { 2091 rbuggyQSA.push( "\\[" + whitespace + "*name" + whitespace + "*=" + 2092 whitespace + "*(?:''|\"\")" ); 2093 } 2094 } ); 2095 2096 if ( !support.cssHas ) { 2097 2098 // Support: Chrome 105 - 110+, Safari 15.4 - 16.3+ 2099 // Our regular `try-catch` mechanism fails to detect natively-unsupported 2100 // pseudo-classes inside `:has()` (such as `:has(:contains("Foo"))`) 2101 // in browsers that parse the `:has()` argument as a forgiving selector list. 2102 // https://drafts.csswg.org/selectors/#relational now requires the argument 2103 // to be parsed unforgivingly, but browsers have not yet fully adjusted. 2104 rbuggyQSA.push( ":has" ); 2105 } 2106 2107 rbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join( "|" ) ); 2108 2109 /* Sorting 2110 ---------------------------------------------------------------------- */ 2111 2112 // Document order sorting 2113 sortOrder = function( a, b ) { 2114 2115 // Flag for duplicate removal 2116 if ( a === b ) { 2117 hasDuplicate = true; 2118 return 0; 2119 } 2120 2121 // Sort on method existence if only one input has compareDocumentPosition 2122 var compare = !a.compareDocumentPosition - !b.compareDocumentPosition; 2123 if ( compare ) { 2124 return compare; 2125 } 2126 2127 // Calculate position if both inputs belong to the same document 2128 // Support: IE 11+, Edge 17 - 18+ 2129 // IE/Edge sometimes throw a "Permission denied" error when strict-comparing 2130 // two documents; shallow comparisons work. 2131 // eslint-disable-next-line eqeqeq 2132 compare = ( a.ownerDocument || a ) == ( b.ownerDocument || b ) ? 2133 a.compareDocumentPosition( b ) : 2134 2135 // Otherwise we know they are disconnected 2136 1; 2137 2138 // Disconnected nodes 2139 if ( compare & 1 || 2140 ( !support.sortDetached && b.compareDocumentPosition( a ) === compare ) ) { 2141 2142 // Choose the first element that is related to our preferred document 2143 // Support: IE 11+, Edge 17 - 18+ 2144 // IE/Edge sometimes throw a "Permission denied" error when strict-comparing 2145 // two documents; shallow comparisons work. 2146 // eslint-disable-next-line eqeqeq 2147 if ( a === document || a.ownerDocument == preferredDoc && 2148 find.contains( preferredDoc, a ) ) { 2149 return -1; 2150 } 2151 2152 // Support: IE 11+, Edge 17 - 18+ 2153 // IE/Edge sometimes throw a "Permission denied" error when strict-comparing 2154 // two documents; shallow comparisons work. 2155 // eslint-disable-next-line eqeqeq 2156 if ( b === document || b.ownerDocument == preferredDoc && 2157 find.contains( preferredDoc, b ) ) { 2158 return 1; 2159 } 2160 2161 // Maintain original order 2162 return sortInput ? 2163 ( indexOf.call( sortInput, a ) - indexOf.call( sortInput, b ) ) : 2164 0; 2165 } 2166 2167 return compare & 4 ? -1 : 1; 2168 }; 2169 2170 return document; 2171} 2172 2173find.matches = function( expr, elements ) { 2174 return find( expr, null, null, elements ); 2175}; 2176 2177find.matchesSelector = function( elem, expr ) { 2178 setDocument( elem ); 2179 2180 if ( documentIsHTML && 2181 !nonnativeSelectorCache[ expr + " " ] && 2182 ( !rbuggyQSA || !rbuggyQSA.test( expr ) ) ) { 2183 2184 try { 2185 var ret = matches.call( elem, expr ); 2186 2187 // IE 9's matchesSelector returns false on disconnected nodes 2188 if ( ret || support.disconnectedMatch || 2189 2190 // As well, disconnected nodes are said to be in a document 2191 // fragment in IE 9 2192 elem.document && elem.document.nodeType !== 11 ) { 2193 return ret; 2194 } 2195 } catch ( e ) { 2196 nonnativeSelectorCache( expr, true ); 2197 } 2198 } 2199 2200 return find( expr, document, null, [ elem ] ).length > 0; 2201}; 2202 2203find.contains = function( context, elem ) { 2204 2205 // Set document vars if needed 2206 // Support: IE 11+, Edge 17 - 18+ 2207 // IE/Edge sometimes throw a "Permission denied" error when strict-comparing 2208 // two documents; shallow comparisons work. 2209 // eslint-disable-next-line eqeqeq 2210 if ( ( context.ownerDocument || context ) != document ) { 2211 setDocument( context ); 2212 } 2213 return jQuery.contains( context, elem ); 2214}; 2215 2216 2217find.attr = function( elem, name ) { 2218 2219 // Set document vars if needed 2220 // Support: IE 11+, Edge 17 - 18+ 2221 // IE/Edge sometimes throw a "Permission denied" error when strict-comparing 2222 // two documents; shallow comparisons work. 2223 // eslint-disable-next-line eqeqeq 2224 if ( ( elem.ownerDocument || elem ) != document ) { 2225 setDocument( elem ); 2226 } 2227 2228 var fn = Expr.attrHandle[ name.toLowerCase() ], 2229 2230 // Don't get fooled by Object.prototype properties (see trac-13807) 2231 val = fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ? 2232 fn( elem, name, !documentIsHTML ) : 2233 undefined; 2234 2235 if ( val !== undefined ) { 2236 return val; 2237 } 2238 2239 return elem.getAttribute( name ); 2240}; 2241 2242find.error = function( msg ) { 2243 throw new Error( "Syntax error, unrecognized expression: " + msg ); 2244}; 2245 2246/** 2247 * Document sorting and removing duplicates 2248 * @param {ArrayLike} results 2249 */ 2250jQuery.uniqueSort = function( results ) { 2251 var elem, 2252 duplicates = [], 2253 j = 0, 2254 i = 0; 2255 2256 // Unless we *know* we can detect duplicates, assume their presence 2257 // 2258 // Support: Android <=4.0+ 2259 // Testing for detecting duplicates is unpredictable so instead assume we can't 2260 // depend on duplicate detection in all browsers without a stable sort. 2261 hasDuplicate = !support.sortStable; 2262 sortInput = !support.sortStable && slice.call( results, 0 ); 2263 sort.call( results, sortOrder ); 2264 2265 if ( hasDuplicate ) { 2266 while ( ( elem = results[ i++ ] ) ) { 2267 if ( elem === results[ i ] ) { 2268 j = duplicates.push( i ); 2269 } 2270 } 2271 while ( j-- ) { 2272 splice.call( results, duplicates[ j ], 1 ); 2273 } 2274 } 2275 2276 // Clear input after sorting to release objects 2277 // See https://github.com/jquery/sizzle/pull/225 2278 sortInput = null; 2279 2280 return results; 2281}; 2282 2283jQuery.fn.uniqueSort = function() { 2284 return this.pushStack( jQuery.uniqueSort( slice.apply( this ) ) ); 2285}; 2286 2287Expr = jQuery.expr = { 2288 2289 // Can be adjusted by the user 2290 cacheLength: 50, 2291 2292 createPseudo: markFunction, 2293 2294 match: matchExpr, 2295 2296 attrHandle: {}, 2297 2298 find: {}, 2299 2300 relative: { 2301 ">": { dir: "parentNode", first: true }, 2302 " ": { dir: "parentNode" }, 2303 "+": { dir: "previousSibling", first: true }, 2304 "~": { dir: "previousSibling" } 2305 }, 2306 2307 preFilter: { 2308 ATTR: function( match ) { 2309 match[ 1 ] = match[ 1 ].replace( runescape, funescape ); 2310 2311 // Move the given value to match[3] whether quoted or unquoted 2312 match[ 3 ] = ( match[ 3 ] || match[ 4 ] || match[ 5 ] || "" ) 2313 .replace( runescape, funescape ); 2314 2315 if ( match[ 2 ] === "~=" ) { 2316 match[ 3 ] = " " + match[ 3 ] + " "; 2317 } 2318 2319 return match.slice( 0, 4 ); 2320 }, 2321 2322 CHILD: function( match ) { 2323 2324 /* matches from matchExpr["CHILD"] 2325 1 type (only|nth|...) 2326 2 what (child|of-type) 2327 3 argument (even|odd|\d*|\d*n([+-]\d+)?|...) 2328 4 xn-component of xn+y argument ([+-]?\d*n|) 2329 5 sign of xn-component 2330 6 x of xn-component 2331 7 sign of y-component 2332 8 y of y-component 2333 */ 2334 match[ 1 ] = match[ 1 ].toLowerCase(); 2335 2336 if ( match[ 1 ].slice( 0, 3 ) === "nth" ) { 2337 2338 // nth-* requires argument 2339 if ( !match[ 3 ] ) { 2340 find.error( match[ 0 ] ); 2341 } 2342 2343 // numeric x and y parameters for Expr.filter.CHILD 2344 // remember that false/true cast respectively to 0/1 2345 match[ 4 ] = +( match[ 4 ] ? 2346 match[ 5 ] + ( match[ 6 ] || 1 ) : 2347 2 * ( match[ 3 ] === "even" || match[ 3 ] === "odd" ) 2348 ); 2349 match[ 5 ] = +( ( match[ 7 ] + match[ 8 ] ) || match[ 3 ] === "odd" ); 2350 2351 // other types prohibit arguments 2352 } else if ( match[ 3 ] ) { 2353 find.error( match[ 0 ] ); 2354 } 2355 2356 return match; 2357 }, 2358 2359 PSEUDO: function( match ) { 2360 var excess, 2361 unquoted = !match[ 6 ] && match[ 2 ]; 2362 2363 if ( matchExpr.CHILD.test( match[ 0 ] ) ) { 2364 return null; 2365 } 2366 2367 // Accept quoted arguments as-is 2368 if ( match[ 3 ] ) { 2369 match[ 2 ] = match[ 4 ] || match[ 5 ] || ""; 2370 2371 // Strip excess characters from unquoted arguments 2372 } else if ( unquoted && rpseudo.test( unquoted ) && 2373 2374 // Get excess from tokenize (recursively) 2375 ( excess = tokenize( unquoted, true ) ) && 2376 2377 // advance to the next closing parenthesis 2378 ( excess = unquoted.indexOf( ")", unquoted.length - excess ) - unquoted.length ) ) { 2379 2380 // excess is a negative index 2381 match[ 0 ] = match[ 0 ].slice( 0, excess ); 2382 match[ 2 ] = unquoted.slice( 0, excess ); 2383 } 2384 2385 // Return only captures needed by the pseudo filter method (type and argument) 2386 return match.slice( 0, 3 ); 2387 } 2388 }, 2389 2390 filter: { 2391 2392 TAG: function( nodeNameSelector ) { 2393 var expectedNodeName = nodeNameSelector.replace( runescape, funescape ).toLowerCase(); 2394 return nodeNameSelector === "*" ? 2395 function() { 2396 return true; 2397 } : 2398 function( elem ) { 2399 return nodeName( elem, expectedNodeName ); 2400 }; 2401 }, 2402 2403 CLASS: function( className ) { 2404 var pattern = classCache[ className + " " ]; 2405 2406 return pattern || 2407 ( pattern = new RegExp( "(^|" + whitespace + ")" + className + 2408 "(" + whitespace + "|$)" ) ) && 2409 classCache( className, function( elem ) { 2410 return pattern.test( 2411 typeof elem.className === "string" && elem.className || 2412 typeof elem.getAttribute !== "undefined" && 2413 elem.getAttribute( "class" ) || 2414 "" 2415 ); 2416 } ); 2417 }, 2418 2419 ATTR: function( name, operator, check ) { 2420 return function( elem ) { 2421 var result = find.attr( elem, name ); 2422 2423 if ( result == null ) { 2424 return operator === "!="; 2425 } 2426 if ( !operator ) { 2427 return true; 2428 } 2429 2430 result += ""; 2431 2432 if ( operator === "=" ) { 2433 return result === check; 2434 } 2435 if ( operator === "!=" ) { 2436 return result !== check; 2437 } 2438 if ( operator === "^=" ) { 2439 return check && result.indexOf( check ) === 0; 2440 } 2441 if ( operator === "*=" ) { 2442 return check && result.indexOf( check ) > -1; 2443 } 2444 if ( operator === "$=" ) { 2445 return check && result.slice( -check.length ) === check; 2446 } 2447 if ( operator === "~=" ) { 2448 return ( " " + result.replace( rwhitespace, " " ) + " " ) 2449 .indexOf( check ) > -1; 2450 } 2451 if ( operator === "|=" ) { 2452 return result === check || result.slice( 0, check.length + 1 ) === check + "-"; 2453 } 2454 2455 return false; 2456 }; 2457 }, 2458 2459 CHILD: function( type, what, _argument, first, last ) { 2460 var simple = type.slice( 0, 3 ) !== "nth", 2461 forward = type.slice( -4 ) !== "last", 2462 ofType = what === "of-type"; 2463 2464 return first === 1 && last === 0 ? 2465 2466 // Shortcut for :nth-*(n) 2467 function( elem ) { 2468 return !!elem.parentNode; 2469 } : 2470 2471 function( elem, _context, xml ) { 2472 var cache, outerCache, node, nodeIndex, start, 2473 dir = simple !== forward ? "nextSibling" : "previousSibling", 2474 parent = elem.parentNode, 2475 name = ofType && elem.nodeName.toLowerCase(), 2476 useCache = !xml && !ofType, 2477 diff = false; 2478 2479 if ( parent ) { 2480 2481 // :(first|last|only)-(child|of-type) 2482 if ( simple ) { 2483 while ( dir ) { 2484 node = elem; 2485 while ( ( node = node[ dir ] ) ) { 2486 if ( ofType ? 2487 nodeName( node, name ) : 2488 node.nodeType === 1 ) { 2489 2490 return false; 2491 } 2492 } 2493 2494 // Reverse direction for :only-* (if we haven't yet done so) 2495 start = dir = type === "only" && !start && "nextSibling"; 2496 } 2497 return true; 2498 } 2499 2500 start = [ forward ? parent.firstChild : parent.lastChild ]; 2501 2502 // non-xml :nth-child(...) stores cache data on `parent` 2503 if ( forward && useCache ) { 2504 2505 // Seek `elem` from a previously-cached index 2506 outerCache = parent[ expando ] || ( parent[ expando ] = {} ); 2507 cache = outerCache[ type ] || []; 2508 nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ]; 2509 diff = nodeIndex && cache[ 2 ]; 2510 node = nodeIndex && parent.childNodes[ nodeIndex ]; 2511 2512 while ( ( node = ++nodeIndex && node && node[ dir ] || 2513 2514 // Fallback to seeking `elem` from the start 2515 ( diff = nodeIndex = 0 ) || start.pop() ) ) { 2516 2517 // When found, cache indexes on `parent` and break 2518 if ( node.nodeType === 1 && ++diff && node === elem ) { 2519 outerCache[ type ] = [ dirruns, nodeIndex, diff ]; 2520 break; 2521 } 2522 } 2523 2524 } else { 2525 2526 // Use previously-cached element index if available 2527 if ( useCache ) { 2528 outerCache = elem[ expando ] || ( elem[ expando ] = {} ); 2529 cache = outerCache[ type ] || []; 2530 nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ]; 2531 diff = nodeIndex; 2532 } 2533 2534 // xml :nth-child(...) 2535 // or :nth-last-child(...) or :nth(-last)?-of-type(...) 2536 if ( diff === false ) { 2537 2538 // Use the same loop as above to seek `elem` from the start 2539 while ( ( node = ++nodeIndex && node && node[ dir ] || 2540 ( diff = nodeIndex = 0 ) || start.pop() ) ) { 2541 2542 if ( ( ofType ? 2543 nodeName( node, name ) : 2544 node.nodeType === 1 ) && 2545 ++diff ) { 2546 2547 // Cache the index of each encountered element 2548 if ( useCache ) { 2549 outerCache = node[ expando ] || 2550 ( node[ expando ] = {} ); 2551 outerCache[ type ] = [ dirruns, diff ]; 2552 } 2553 2554 if ( node === elem ) { 2555 break; 2556 } 2557 } 2558 } 2559 } 2560 } 2561 2562 // Incorporate the offset, then check against cycle size 2563 diff -= last; 2564 return diff === first || ( diff % first === 0 && diff / first >= 0 ); 2565 } 2566 }; 2567 }, 2568 2569 PSEUDO: function( pseudo, argument ) { 2570 2571 // pseudo-class names are case-insensitive 2572 // https://www.w3.org/TR/selectors/#pseudo-classes 2573 // Prioritize by case sensitivity in case custom pseudos are added with uppercase letters 2574 // Remember that setFilters inherits from pseudos 2575 var args, 2576 fn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] || 2577 find.error( "unsupported pseudo: " + pseudo ); 2578 2579 // The user may use createPseudo to indicate that 2580 // arguments are needed to create the filter function 2581 // just as jQuery does 2582 if ( fn[ expando ] ) { 2583 return fn( argument ); 2584 } 2585 2586 // But maintain support for old signatures 2587 if ( fn.length > 1 ) { 2588 args = [ pseudo, pseudo, "", argument ]; 2589 return Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ? 2590 markFunction( function( seed, matches ) { 2591 var idx, 2592 matched = fn( seed, argument ), 2593 i = matched.length; 2594 while ( i-- ) { 2595 idx = indexOf.call( seed, matched[ i ] ); 2596 seed[ idx ] = !( matches[ idx ] = matched[ i ] ); 2597 } 2598 } ) : 2599 function( elem ) { 2600 return fn( elem, 0, args ); 2601 }; 2602 } 2603 2604 return fn; 2605 } 2606 }, 2607 2608 pseudos: { 2609 2610 // Potentially complex pseudos 2611 not: markFunction( function( selector ) { 2612 2613 // Trim the selector passed to compile 2614 // to avoid treating leading and trailing 2615 // spaces as combinators 2616 var input = [], 2617 results = [], 2618 matcher = compile( selector.replace( rtrimCSS, "$1" ) ); 2619 2620 return matcher[ expando ] ? 2621 markFunction( function( seed, matches, _context, xml ) { 2622 var elem, 2623 unmatched = matcher( seed, null, xml, [] ), 2624 i = seed.length; 2625 2626 // Match elements unmatched by `matcher` 2627 while ( i-- ) { 2628 if ( ( elem = unmatched[ i ] ) ) { 2629 seed[ i ] = !( matches[ i ] = elem ); 2630 } 2631 } 2632 } ) : 2633 function( elem, _context, xml ) { 2634 input[ 0 ] = elem; 2635 matcher( input, null, xml, results ); 2636 2637 // Don't keep the element 2638 // (see https://github.com/jquery/sizzle/issues/299) 2639 input[ 0 ] = null; 2640 return !results.pop(); 2641 }; 2642 } ), 2643 2644 has: markFunction( function( selector ) { 2645 return function( elem ) { 2646 return find( selector, elem ).length > 0; 2647 }; 2648 } ), 2649 2650 contains: markFunction( function( text ) { 2651 text = text.replace( runescape, funescape ); 2652 return function( elem ) { 2653 return ( elem.textContent || jQuery.text( elem ) ).indexOf( text ) > -1; 2654 }; 2655 } ), 2656 2657 // "Whether an element is represented by a :lang() selector 2658 // is based solely on the element's language value 2659 // being equal to the identifier C, 2660 // or beginning with the identifier C immediately followed by "-". 2661 // The matching of C against the element's language value is performed case-insensitively. 2662 // The identifier C does not have to be a valid language name." 2663 // https://www.w3.org/TR/selectors/#lang-pseudo 2664 lang: markFunction( function( lang ) { 2665 2666 // lang value must be a valid identifier 2667 if ( !ridentifier.test( lang || "" ) ) { 2668 find.error( "unsupported lang: " + lang ); 2669 } 2670 lang = lang.replace( runescape, funescape ).toLowerCase(); 2671 return function( elem ) { 2672 var elemLang; 2673 do { 2674 if ( ( elemLang = documentIsHTML ? 2675 elem.lang : 2676 elem.getAttribute( "xml:lang" ) || elem.getAttribute( "lang" ) ) ) { 2677 2678 elemLang = elemLang.toLowerCase(); 2679 return elemLang === lang || elemLang.indexOf( lang + "-" ) === 0; 2680 } 2681 } while ( ( elem = elem.parentNode ) && elem.nodeType === 1 ); 2682 return false; 2683 }; 2684 } ), 2685 2686 // Miscellaneous 2687 target: function( elem ) { 2688 var hash = window.location && window.location.hash; 2689 return hash && hash.slice( 1 ) === elem.id; 2690 }, 2691 2692 root: function( elem ) { 2693 return elem === documentElement; 2694 }, 2695 2696 focus: function( elem ) { 2697 return elem === safeActiveElement() && 2698 document.hasFocus() && 2699 !!( elem.type || elem.href || ~elem.tabIndex ); 2700 }, 2701 2702 // Boolean properties 2703 enabled: createDisabledPseudo( false ), 2704 disabled: createDisabledPseudo( true ), 2705 2706 checked: function( elem ) { 2707 2708 // In CSS3, :checked should return both checked and selected elements 2709 // https://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked 2710 return ( nodeName( elem, "input" ) && !!elem.checked ) || 2711 ( nodeName( elem, "option" ) && !!elem.selected ); 2712 }, 2713 2714 selected: function( elem ) { 2715 2716 // Support: IE <=11+ 2717 // Accessing the selectedIndex property 2718 // forces the browser to treat the default option as 2719 // selected when in an optgroup. 2720 if ( elem.parentNode ) { 2721 // eslint-disable-next-line no-unused-expressions 2722 elem.parentNode.selectedIndex; 2723 } 2724 2725 return elem.selected === true; 2726 }, 2727 2728 // Contents 2729 empty: function( elem ) { 2730 2731 // https://www.w3.org/TR/selectors/#empty-pseudo 2732 // :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5), 2733 // but not by others (comment: 8; processing instruction: 7; etc.) 2734 // nodeType < 6 works because attributes (2) do not appear as children 2735 for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) { 2736 if ( elem.nodeType < 6 ) { 2737 return false; 2738 } 2739 } 2740 return true; 2741 }, 2742 2743 parent: function( elem ) { 2744 return !Expr.pseudos.empty( elem ); 2745 }, 2746 2747 // Element/input types 2748 header: function( elem ) { 2749 return rheader.test( elem.nodeName ); 2750 }, 2751 2752 input: function( elem ) { 2753 return rinputs.test( elem.nodeName ); 2754 }, 2755 2756 button: function( elem ) { 2757 return nodeName( elem, "input" ) && elem.type === "button" || 2758 nodeName( elem, "button" ); 2759 }, 2760 2761 text: function( elem ) { 2762 var attr; 2763 return nodeName( elem, "input" ) && elem.type === "text" && 2764 2765 // Support: IE <10 only 2766 // New HTML5 attribute values (e.g., "search") appear 2767 // with elem.type === "text" 2768 ( ( attr = elem.getAttribute( "type" ) ) == null || 2769 attr.toLowerCase() === "text" ); 2770 }, 2771 2772 // Position-in-collection 2773 first: createPositionalPseudo( function() { 2774 return [ 0 ]; 2775 } ), 2776 2777 last: createPositionalPseudo( function( _matchIndexes, length ) { 2778 return [ length - 1 ]; 2779 } ), 2780 2781 eq: createPositionalPseudo( function( _matchIndexes, length, argument ) { 2782 return [ argument < 0 ? argument + length : argument ]; 2783 } ), 2784 2785 even: createPositionalPseudo( function( matchIndexes, length ) { 2786 var i = 0; 2787 for ( ; i < length; i += 2 ) { 2788 matchIndexes.push( i ); 2789 } 2790 return matchIndexes; 2791 } ), 2792 2793 odd: createPositionalPseudo( function( matchIndexes, length ) { 2794 var i = 1; 2795 for ( ; i < length; i += 2 ) { 2796 matchIndexes.push( i ); 2797 } 2798 return matchIndexes; 2799 } ), 2800 2801 lt: createPositionalPseudo( function( matchIndexes, length, argument ) { 2802 var i; 2803 2804 if ( argument < 0 ) { 2805 i = argument + length; 2806 } else if ( argument > length ) { 2807 i = length; 2808 } else { 2809 i = argument; 2810 } 2811 2812 for ( ; --i >= 0; ) { 2813 matchIndexes.push( i ); 2814 } 2815 return matchIndexes; 2816 } ), 2817 2818 gt: createPositionalPseudo( function( matchIndexes, length, argument ) { 2819 var i = argument < 0 ? argument + length : argument; 2820 for ( ; ++i < length; ) { 2821 matchIndexes.push( i ); 2822 } 2823 return matchIndexes; 2824 } ) 2825 } 2826}; 2827 2828Expr.pseudos.nth = Expr.pseudos.eq; 2829 2830// Add button/input type pseudos 2831for ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) { 2832 Expr.pseudos[ i ] = createInputPseudo( i ); 2833} 2834for ( i in { submit: true, reset: true } ) { 2835 Expr.pseudos[ i ] = createButtonPseudo( i ); 2836} 2837 2838// Easy API for creating new setFilters 2839function setFilters() {} 2840setFilters.prototype = Expr.filters = Expr.pseudos; 2841Expr.setFilters = new setFilters(); 2842 2843function tokenize( selector, parseOnly ) { 2844 var matched, match, tokens, type, 2845 soFar, groups, preFilters, 2846 cached = tokenCache[ selector + " " ]; 2847 2848 if ( cached ) { 2849 return parseOnly ? 0 : cached.slice( 0 ); 2850 } 2851 2852 soFar = selector; 2853 groups = []; 2854 preFilters = Expr.preFilter; 2855 2856 while ( soFar ) { 2857 2858 // Comma and first run 2859 if ( !matched || ( match = rcomma.exec( soFar ) ) ) { 2860 if ( match ) { 2861 2862 // Don't consume trailing commas as valid 2863 soFar = soFar.slice( match[ 0 ].length ) || soFar; 2864 } 2865 groups.push( ( tokens = [] ) ); 2866 } 2867 2868 matched = false; 2869 2870 // Combinators 2871 if ( ( match = rleadingCombinator.exec( soFar ) ) ) { 2872 matched = match.shift(); 2873 tokens.push( { 2874 value: matched, 2875 2876 // Cast descendant combinators to space 2877 type: match[ 0 ].replace( rtrimCSS, " " ) 2878 } ); 2879 soFar = soFar.slice( matched.length ); 2880 } 2881 2882 // Filters 2883 for ( type in Expr.filter ) { 2884 if ( ( match = matchExpr[ type ].exec( soFar ) ) && ( !preFilters[ type ] || 2885 ( match = preFilters[ type ]( match ) ) ) ) { 2886 matched = match.shift(); 2887 tokens.push( { 2888 value: matched, 2889 type: type, 2890 matches: match 2891 } ); 2892 soFar = soFar.slice( matched.length ); 2893 } 2894 } 2895 2896 if ( !matched ) { 2897 break; 2898 } 2899 } 2900 2901 // Return the length of the invalid excess 2902 // if we're just parsing 2903 // Otherwise, throw an error or return tokens 2904 if ( parseOnly ) { 2905 return soFar.length; 2906 } 2907 2908 return soFar ? 2909 find.error( selector ) : 2910 2911 // Cache the tokens 2912 tokenCache( selector, groups ).slice( 0 ); 2913} 2914 2915function toSelector( tokens ) { 2916 var i = 0, 2917 len = tokens.length, 2918 selector = ""; 2919 for ( ; i < len; i++ ) { 2920 selector += tokens[ i ].value; 2921 } 2922 return selector; 2923} 2924 2925function addCombinator( matcher, combinator, base ) { 2926 var dir = combinator.dir, 2927 skip = combinator.next, 2928 key = skip || dir, 2929 checkNonElements = base && key === "parentNode", 2930 doneName = done++; 2931 2932 return combinator.first ? 2933 2934 // Check against closest ancestor/preceding element 2935 function( elem, context, xml ) { 2936 while ( ( elem = elem[ dir ] ) ) { 2937 if ( elem.nodeType === 1 || checkNonElements ) { 2938 return matcher( elem, context, xml ); 2939 } 2940 } 2941 return false; 2942 } : 2943 2944 // Check against all ancestor/preceding elements 2945 function( elem, context, xml ) { 2946 var oldCache, outerCache, 2947 newCache = [ dirruns, doneName ]; 2948 2949 // We can't set arbitrary data on XML nodes, so they don't benefit from combinator caching 2950 if ( xml ) { 2951 while ( ( elem = elem[ dir ] ) ) { 2952 if ( elem.nodeType === 1 || checkNonElements ) { 2953 if ( matcher( elem, context, xml ) ) { 2954 return true; 2955 } 2956 } 2957 } 2958 } else { 2959 while ( ( elem = elem[ dir ] ) ) { 2960 if ( elem.nodeType === 1 || checkNonElements ) { 2961 outerCache = elem[ expando ] || ( elem[ expando ] = {} ); 2962 2963 if ( skip && nodeName( elem, skip ) ) { 2964 elem = elem[ dir ] || elem; 2965 } else if ( ( oldCache = outerCache[ key ] ) && 2966 oldCache[ 0 ] === dirruns && oldCache[ 1 ] === doneName ) { 2967 2968 // Assign to newCache so results back-propagate to previous elements 2969 return ( newCache[ 2 ] = oldCache[ 2 ] ); 2970 } else { 2971 2972 // Reuse newcache so results back-propagate to previous elements 2973 outerCache[ key ] = newCache; 2974 2975 // A match means we're done; a fail means we have to keep checking 2976 if ( ( newCache[ 2 ] = matcher( elem, context, xml ) ) ) { 2977 return true; 2978 } 2979 } 2980 } 2981 } 2982 } 2983 return false; 2984 }; 2985} 2986 2987function elementMatcher( matchers ) { 2988 return matchers.length > 1 ? 2989 function( elem, context, xml ) { 2990 var i = matchers.length; 2991 while ( i-- ) { 2992 if ( !matchers[ i ]( elem, context, xml ) ) { 2993 return false; 2994 } 2995 } 2996 return true; 2997 } : 2998 matchers[ 0 ]; 2999} 3000 3001function multipleContexts( selector, contexts, results ) { 3002 var i = 0, 3003 len = contexts.length; 3004 for ( ; i < len; i++ ) { 3005 find( selector, contexts[ i ], results ); 3006 } 3007 return results; 3008} 3009 3010function condense( unmatched, map, filter, context, xml ) { 3011 var elem, 3012 newUnmatched = [], 3013 i = 0, 3014 len = unmatched.length, 3015 mapped = map != null; 3016 3017 for ( ; i < len; i++ ) { 3018 if ( ( elem = unmatched[ i ] ) ) { 3019 if ( !filter || filter( elem, context, xml ) ) { 3020 newUnmatched.push( elem ); 3021 if ( mapped ) { 3022 map.push( i ); 3023 } 3024 } 3025 } 3026 } 3027 3028 return newUnmatched; 3029} 3030 3031function setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) { 3032 if ( postFilter && !postFilter[ expando ] ) { 3033 postFilter = setMatcher( postFilter ); 3034 } 3035 if ( postFinder && !postFinder[ expando ] ) { 3036 postFinder = setMatcher( postFinder, postSelector ); 3037 } 3038 return markFunction( function( seed, results, context, xml ) { 3039 var temp, i, elem, matcherOut, 3040 preMap = [], 3041 postMap = [], 3042 preexisting = results.length, 3043 3044 // Get initial elements from seed or context 3045 elems = seed || 3046 multipleContexts( selector || "*", 3047 context.nodeType ? [ context ] : context, [] ), 3048 3049 // Prefilter to get matcher input, preserving a map for seed-results synchronization 3050 matcherIn = preFilter && ( seed || !selector ) ? 3051 condense( elems, preMap, preFilter, context, xml ) : 3052 elems; 3053 3054 if ( matcher ) { 3055 3056 // If we have a postFinder, or filtered seed, or non-seed postFilter 3057 // or preexisting results, 3058 matcherOut = postFinder || ( seed ? preFilter : preexisting || postFilter ) ? 3059 3060 // ...intermediate processing is necessary 3061 [] : 3062 3063 // ...otherwise use results directly 3064 results; 3065 3066 // Find primary matches 3067 matcher( matcherIn, matcherOut, context, xml ); 3068 } else { 3069 matcherOut = matcherIn; 3070 } 3071 3072 // Apply postFilter 3073 if ( postFilter ) { 3074 temp = condense( matcherOut, postMap ); 3075 postFilter( temp, [], context, xml ); 3076 3077 // Un-match failing elements by moving them back to matcherIn 3078 i = temp.length; 3079 while ( i-- ) { 3080 if ( ( elem = temp[ i ] ) ) { 3081 matcherOut[ postMap[ i ] ] = !( matcherIn[ postMap[ i ] ] = elem ); 3082 } 3083 } 3084 } 3085 3086 if ( seed ) { 3087 if ( postFinder || preFilter ) { 3088 if ( postFinder ) { 3089 3090 // Get the final matcherOut by condensing this intermediate into postFinder contexts 3091 temp = []; 3092 i = matcherOut.length; 3093 while ( i-- ) { 3094 if ( ( elem = matcherOut[ i ] ) ) { 3095 3096 // Restore matcherIn since elem is not yet a final match 3097 temp.push( ( matcherIn[ i ] = elem ) ); 3098 } 3099 } 3100 postFinder( null, ( matcherOut = [] ), temp, xml ); 3101 } 3102 3103 // Move matched elements from seed to results to keep them synchronized 3104 i = matcherOut.length; 3105 while ( i-- ) { 3106 if ( ( elem = matcherOut[ i ] ) && 3107 ( temp = postFinder ? indexOf.call( seed, elem ) : preMap[ i ] ) > -1 ) { 3108 3109 seed[ temp ] = !( results[ temp ] = elem ); 3110 } 3111 } 3112 } 3113 3114 // Add elements to results, through postFinder if defined 3115 } else { 3116 matcherOut = condense( 3117 matcherOut === results ? 3118 matcherOut.splice( preexisting, matcherOut.length ) : 3119 matcherOut 3120 ); 3121 if ( postFinder ) { 3122 postFinder( null, results, matcherOut, xml ); 3123 } else { 3124 push.apply( results, matcherOut ); 3125 } 3126 } 3127 } ); 3128} 3129 3130function matcherFromTokens( tokens ) { 3131 var checkContext, matcher, j, 3132 len = tokens.length, 3133 leadingRelative = Expr.relative[ tokens[ 0 ].type ], 3134 implicitRelative = leadingRelative || Expr.relative[ " " ], 3135 i = leadingRelative ? 1 : 0, 3136 3137 // The foundational matcher ensures that elements are reachable from top-level context(s) 3138 matchContext = addCombinator( function( elem ) { 3139 return elem === checkContext; 3140 }, implicitRelative, true ), 3141 matchAnyContext = addCombinator( function( elem ) { 3142 return indexOf.call( checkContext, elem ) > -1; 3143 }, implicitRelative, true ), 3144 matchers = [ function( elem, context, xml ) { 3145 3146 // Support: IE 11+, Edge 17 - 18+ 3147 // IE/Edge sometimes throw a "Permission denied" error when strict-comparing 3148 // two documents; shallow comparisons work. 3149 // eslint-disable-next-line eqeqeq 3150 var ret = ( !leadingRelative && ( xml || context != outermostContext ) ) || ( 3151 ( checkContext = context ).nodeType ? 3152 matchContext( elem, context, xml ) : 3153 matchAnyContext( elem, context, xml ) ); 3154 3155 // Avoid hanging onto element 3156 // (see https://github.com/jquery/sizzle/issues/299) 3157 checkContext = null; 3158 return ret; 3159 } ]; 3160 3161 for ( ; i < len; i++ ) { 3162 if ( ( matcher = Expr.relative[ tokens[ i ].type ] ) ) { 3163 matchers = [ addCombinator( elementMatcher( matchers ), matcher ) ]; 3164 } else { 3165 matcher = Expr.filter[ tokens[ i ].type ].apply( null, tokens[ i ].matches ); 3166 3167 // Return special upon seeing a positional matcher 3168 if ( matcher[ expando ] ) { 3169 3170 // Find the next relative operator (if any) for proper handling 3171 j = ++i; 3172 for ( ; j < len; j++ ) { 3173 if ( Expr.relative[ tokens[ j ].type ] ) { 3174 break; 3175 } 3176 } 3177 return setMatcher( 3178 i > 1 && elementMatcher( matchers ), 3179 i > 1 && toSelector( 3180 3181 // If the preceding token was a descendant combinator, insert an implicit any-element `*` 3182 tokens.slice( 0, i - 1 ) 3183 .concat( { value: tokens[ i - 2 ].type === " " ? "*" : "" } ) 3184 ).replace( rtrimCSS, "$1" ), 3185 matcher, 3186 i < j && matcherFromTokens( tokens.slice( i, j ) ), 3187 j < len && matcherFromTokens( ( tokens = tokens.slice( j ) ) ), 3188 j < len && toSelector( tokens ) 3189 ); 3190 } 3191 matchers.push( matcher ); 3192 } 3193 } 3194 3195 return elementMatcher( matchers ); 3196} 3197 3198function matcherFromGroupMatchers( elementMatchers, setMatchers ) { 3199 var bySet = setMatchers.length > 0, 3200 byElement = elementMatchers.length > 0, 3201 superMatcher = function( seed, context, xml, results, outermost ) { 3202 var elem, j, matcher, 3203 matchedCount = 0, 3204 i = "0", 3205 unmatched = seed && [], 3206 setMatched = [], 3207 contextBackup = outermostContext, 3208 3209 // We must always have either seed elements or outermost context 3210 elems = seed || byElement && Expr.find.TAG( "*", outermost ), 3211 3212 // Use integer dirruns iff this is the outermost matcher 3213 dirrunsUnique = ( dirruns += contextBackup == null ? 1 : Math.random() || 0.1 ), 3214 len = elems.length; 3215 3216 if ( outermost ) { 3217 3218 // Support: IE 11+, Edge 17 - 18+ 3219 // IE/Edge sometimes throw a "Permission denied" error when strict-comparing 3220 // two documents; shallow comparisons work. 3221 // eslint-disable-next-line eqeqeq 3222 outermostContext = context == document || context || outermost; 3223 } 3224 3225 // Add elements passing elementMatchers directly to results 3226 // Support: iOS <=7 - 9 only 3227 // Tolerate NodeList properties (IE: "length"; Safari: <number>) matching 3228 // elements by id. (see trac-14142) 3229 for ( ; i !== len && ( elem = elems[ i ] ) != null; i++ ) { 3230 if ( byElement && elem ) { 3231 j = 0; 3232 3233 // Support: IE 11+, Edge 17 - 18+ 3234 // IE/Edge sometimes throw a "Permission denied" error when strict-comparing 3235 // two documents; shallow comparisons work. 3236 // eslint-disable-next-line eqeqeq 3237 if ( !context && elem.ownerDocument != document ) { 3238 setDocument( elem ); 3239 xml = !documentIsHTML; 3240 } 3241 while ( ( matcher = elementMatchers[ j++ ] ) ) { 3242 if ( matcher( elem, context || document, xml ) ) { 3243 push.call( results, elem ); 3244 break; 3245 } 3246 } 3247 if ( outermost ) { 3248 dirruns = dirrunsUnique; 3249 } 3250 } 3251 3252 // Track unmatched elements for set filters 3253 if ( bySet ) { 3254 3255 // They will have gone through all possible matchers 3256 if ( ( elem = !matcher && elem ) ) { 3257 matchedCount--; 3258 } 3259 3260 // Lengthen the array for every element, matched or not 3261 if ( seed ) { 3262 unmatched.push( elem ); 3263 } 3264 } 3265 } 3266 3267 // `i` is now the count of elements visited above, and adding it to `matchedCount` 3268 // makes the latter nonnegative. 3269 matchedCount += i; 3270 3271 // Apply set filters to unmatched elements 3272 // NOTE: This can be skipped if there are no unmatched elements (i.e., `matchedCount` 3273 // equals `i`), unless we didn't visit _any_ elements in the above loop because we have 3274 // no element matchers and no seed. 3275 // Incrementing an initially-string "0" `i` allows `i` to remain a string only in that 3276 // case, which will result in a "00" `matchedCount` that differs from `i` but is also 3277 // numerically zero. 3278 if ( bySet && i !== matchedCount ) { 3279 j = 0; 3280 while ( ( matcher = setMatchers[ j++ ] ) ) { 3281 matcher( unmatched, setMatched, context, xml ); 3282 } 3283 3284 if ( seed ) { 3285 3286 // Reintegrate element matches to eliminate the need for sorting 3287 if ( matchedCount > 0 ) { 3288 while ( i-- ) { 3289 if ( !( unmatched[ i ] || setMatched[ i ] ) ) { 3290 setMatched[ i ] = pop.call( results ); 3291 } 3292 } 3293 } 3294 3295 // Discard index placeholder values to get only actual matches 3296 setMatched = condense( setMatched ); 3297 } 3298 3299 // Add matches to results 3300 push.apply( results, setMatched ); 3301 3302 // Seedless set matches succeeding multiple successful matchers stipulate sorting 3303 if ( outermost && !seed && setMatched.length > 0 && 3304 ( matchedCount + setMatchers.length ) > 1 ) { 3305 3306 jQuery.uniqueSort( results ); 3307 } 3308 } 3309 3310 // Override manipulation of globals by nested matchers 3311 if ( outermost ) { 3312 dirruns = dirrunsUnique; 3313 outermostContext = contextBackup; 3314 } 3315 3316 return unmatched; 3317 }; 3318 3319 return bySet ? 3320 markFunction( superMatcher ) : 3321 superMatcher; 3322} 3323 3324function compile( selector, match /* Internal Use Only */ ) { 3325 var i, 3326 setMatchers = [], 3327 elementMatchers = [], 3328 cached = compilerCache[ selector + " " ]; 3329 3330 if ( !cached ) { 3331 3332 // Generate a function of recursive functions that can be used to check each element 3333 if ( !match ) { 3334 match = tokenize( selector ); 3335 } 3336 i = match.length; 3337 while ( i-- ) { 3338 cached = matcherFromTokens( match[ i ] ); 3339 if ( cached[ expando ] ) { 3340 setMatchers.push( cached ); 3341 } else { 3342 elementMatchers.push( cached ); 3343 } 3344 } 3345 3346 // Cache the compiled function 3347 cached = compilerCache( selector, 3348 matcherFromGroupMatchers( elementMatchers, setMatchers ) ); 3349 3350 // Save selector and tokenization 3351 cached.selector = selector; 3352 } 3353 return cached; 3354} 3355 3356/** 3357 * A low-level selection function that works with jQuery's compiled 3358 * selector functions 3359 * @param {String|Function} selector A selector or a pre-compiled 3360 * selector function built with jQuery selector compile 3361 * @param {Element} context 3362 * @param {Array} [results] 3363 * @param {Array} [seed] A set of elements to match against 3364 */ 3365function select( selector, context, results, seed ) { 3366 var i, tokens, token, type, find, 3367 compiled = typeof selector === "function" && selector, 3368 match = !seed && tokenize( ( selector = compiled.selector || selector ) ); 3369 3370 results = results || []; 3371 3372 // Try to minimize operations if there is only one selector in the list and no seed 3373 // (the latter of which guarantees us context) 3374 if ( match.length === 1 ) { 3375 3376 // Reduce context if the leading compound selector is an ID 3377 tokens = match[ 0 ] = match[ 0 ].slice( 0 ); 3378 if ( tokens.length > 2 && ( token = tokens[ 0 ] ).type === "ID" && 3379 context.nodeType === 9 && documentIsHTML && Expr.relative[ tokens[ 1 ].type ] ) { 3380 3381 context = ( Expr.find.ID( 3382 token.matches[ 0 ].replace( runescape, funescape ), 3383 context 3384 ) || [] )[ 0 ]; 3385 if ( !context ) { 3386 return results; 3387 3388 // Precompiled matchers will still verify ancestry, so step up a level 3389 } else if ( compiled ) { 3390 context = context.parentNode; 3391 } 3392 3393 selector = selector.slice( tokens.shift().value.length ); 3394 } 3395 3396 // Fetch a seed set for right-to-left matching 3397 i = matchExpr.needsContext.test( selector ) ? 0 : tokens.length; 3398 while ( i-- ) { 3399 token = tokens[ i ]; 3400 3401 // Abort if we hit a combinator 3402 if ( Expr.relative[ ( type = token.type ) ] ) { 3403 break; 3404 } 3405 if ( ( find = Expr.find[ type ] ) ) { 3406 3407 // Search, expanding context for leading sibling combinators 3408 if ( ( seed = find( 3409 token.matches[ 0 ].replace( runescape, funescape ), 3410 rsibling.test( tokens[ 0 ].type ) && 3411 testContext( context.parentNode ) || context 3412 ) ) ) { 3413 3414 // If seed is empty or no tokens remain, we can return early 3415 tokens.splice( i, 1 ); 3416 selector = seed.length && toSelector( tokens ); 3417 if ( !selector ) { 3418 push.apply( results, seed ); 3419 return results; 3420 } 3421 3422 break; 3423 } 3424 } 3425 } 3426 } 3427 3428 // Compile and execute a filtering function if one is not provided 3429 // Provide `match` to avoid retokenization if we modified the selector above 3430 ( compiled || compile( selector, match ) )( 3431 seed, 3432 context, 3433 !documentIsHTML, 3434 results, 3435 !context || rsibling.test( selector ) && testContext( context.parentNode ) || context 3436 ); 3437 return results; 3438} 3439 3440// One-time assignments 3441 3442// Support: Android <=4.0 - 4.1+ 3443// Sort stability 3444support.sortStable = expando.split( "" ).sort( sortOrder ).join( "" ) === expando; 3445 3446// Initialize against the default document 3447setDocument(); 3448 3449// Support: Android <=4.0 - 4.1+ 3450// Detached nodes confoundingly follow *each other* 3451support.sortDetached = assert( function( el ) { 3452 3453 // Should return 1, but returns 4 (following) 3454 return el.compareDocumentPosition( document.createElement( "fieldset" ) ) & 1; 3455} ); 3456 3457jQuery.find = find; 3458 3459// Deprecated 3460jQuery.expr[ ":" ] = jQuery.expr.pseudos; 3461jQuery.unique = jQuery.uniqueSort; 3462 3463// These have always been private, but they used to be documented as part of 3464// Sizzle so let's maintain them for now for backwards compatibility purposes. 3465find.compile = compile; 3466find.select = select; 3467find.setDocument = setDocument; 3468find.tokenize = tokenize; 3469 3470find.escape = jQuery.escapeSelector; 3471find.getText = jQuery.text; 3472find.isXML = jQuery.isXMLDoc; 3473find.selectors = jQuery.expr; 3474find.support = jQuery.support; 3475find.uniqueSort = jQuery.uniqueSort; 3476 3477 /* eslint-enable */ 3478 3479} )(); 3480 3481 3482var dir = function( elem, dir, until ) { 3483 var matched = [], 3484 truncate = until !== undefined; 3485 3486 while ( ( elem = elem[ dir ] ) && elem.nodeType !== 9 ) { 3487 if ( elem.nodeType === 1 ) { 3488 if ( truncate && jQuery( elem ).is( until ) ) { 3489 break; 3490 } 3491 matched.push( elem ); 3492 } 3493 } 3494 return matched; 3495}; 3496 3497 3498var siblings = function( n, elem ) { 3499 var matched = []; 3500 3501 for ( ; n; n = n.nextSibling ) { 3502 if ( n.nodeType === 1 && n !== elem ) { 3503 matched.push( n ); 3504 } 3505 } 3506 3507 return matched; 3508}; 3509 3510 3511var rneedsContext = jQuery.expr.match.needsContext; 3512 3513var rsingleTag = ( /^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i ); 3514 3515 3516 3517// Implement the identical functionality for filter and not 3518function winnow( elements, qualifier, not ) { 3519 if ( isFunction( qualifier ) ) { 3520 return jQuery.grep( elements, function( elem, i ) { 3521 return !!qualifier.call( elem, i, elem ) !== not; 3522 } ); 3523 } 3524 3525 // Single element 3526 if ( qualifier.nodeType ) { 3527 return jQuery.grep( elements, function( elem ) { 3528 return ( elem === qualifier ) !== not; 3529 } ); 3530 } 3531 3532 // Arraylike of elements (jQuery, arguments, Array) 3533 if ( typeof qualifier !== "string" ) { 3534 return jQuery.grep( elements, function( elem ) { 3535 return ( indexOf.call( qualifier, elem ) > -1 ) !== not; 3536 } ); 3537 } 3538 3539 // Filtered directly for both simple and complex selectors 3540 return jQuery.filter( qualifier, elements, not ); 3541} 3542 3543jQuery.filter = function( expr, elems, not ) { 3544 var elem = elems[ 0 ]; 3545 3546 if ( not ) { 3547 expr = ":not(" + expr + ")"; 3548 } 3549 3550 if ( elems.length === 1 && elem.nodeType === 1 ) { 3551 return jQuery.find.matchesSelector( elem, expr ) ? [ elem ] : []; 3552 } 3553 3554 return jQuery.find.matches( expr, jQuery.grep( elems, function( elem ) { 3555 return elem.nodeType === 1; 3556 } ) ); 3557}; 3558 3559jQuery.fn.extend( { 3560 find: function( selector ) { 3561 var i, ret, 3562 len = this.length, 3563 self = this; 3564 3565 if ( typeof selector !== "string" ) { 3566 return this.pushStack( jQuery( selector ).filter( function() { 3567 for ( i = 0; i < len; i++ ) { 3568 if ( jQuery.contains( self[ i ], this ) ) { 3569 return true; 3570 } 3571 } 3572 } ) ); 3573 } 3574 3575 ret = this.pushStack( [] ); 3576 3577 for ( i = 0; i < len; i++ ) { 3578 jQuery.find( selector, self[ i ], ret ); 3579 } 3580 3581 return len > 1 ? jQuery.uniqueSort( ret ) : ret; 3582 }, 3583 filter: function( selector ) { 3584 return this.pushStack( winnow( this, selector || [], false ) ); 3585 }, 3586 not: function( selector ) { 3587 return this.pushStack( winnow( this, selector || [], true ) ); 3588 }, 3589 is: function( selector ) { 3590 return !!winnow( 3591 this, 3592 3593 // If this is a positional/relative selector, check membership in the returned set 3594 // so $("p:first").is("p:last") won't return true for a doc with two "p". 3595 typeof selector === "string" && rneedsContext.test( selector ) ? 3596 jQuery( selector ) : 3597 selector || [], 3598 false 3599 ).length; 3600 } 3601} ); 3602 3603 3604// Initialize a jQuery object 3605 3606 3607// A central reference to the root jQuery(document) 3608var rootjQuery, 3609 3610 // A simple way to check for HTML strings 3611 // Prioritize #id over <tag> to avoid XSS via location.hash (trac-9521) 3612 // Strict HTML recognition (trac-11290: must start with <) 3613 // Shortcut simple #id case for speed 3614 rquickExpr = /^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/, 3615 3616 init = jQuery.fn.init = function( selector, context, root ) { 3617 var match, elem; 3618 3619 // HANDLE: $(""), $(null), $(undefined), $(false) 3620 if ( !selector ) { 3621 return this; 3622 } 3623 3624 // Method init() accepts an alternate rootjQuery 3625 // so migrate can support jQuery.sub (gh-2101) 3626 root = root || rootjQuery; 3627 3628 // Handle HTML strings 3629 if ( typeof selector === "string" ) { 3630 if ( selector[ 0 ] === "<" && 3631 selector[ selector.length - 1 ] === ">" && 3632 selector.length >= 3 ) { 3633 3634 // Assume that strings that start and end with <> are HTML and skip the regex check 3635 match = [ null, selector, null ]; 3636 3637 } else { 3638 match = rquickExpr.exec( selector ); 3639 } 3640 3641 // Match html or make sure no context is specified for #id 3642 if ( match && ( match[ 1 ] || !context ) ) { 3643 3644 // HANDLE: $(html) -> $(array) 3645 if ( match[ 1 ] ) { 3646 context = context instanceof jQuery ? context[ 0 ] : context; 3647 3648 // Option to run scripts is true for back-compat 3649 // Intentionally let the error be thrown if parseHTML is not present 3650 jQuery.merge( this, jQuery.parseHTML( 3651 match[ 1 ], 3652 context && context.nodeType ? context.ownerDocument || context : document, 3653 true 3654 ) ); 3655 3656 // HANDLE: $(html, props) 3657 if ( rsingleTag.test( match[ 1 ] ) && jQuery.isPlainObject( context ) ) { 3658 for ( match in context ) { 3659 3660 // Properties of context are called as methods if possible 3661 if ( isFunction( this[ match ] ) ) { 3662 this[ match ]( context[ match ] ); 3663 3664 // ...and otherwise set as attributes 3665 } else { 3666 this.attr( match, context[ match ] ); 3667 } 3668 } 3669 } 3670 3671 return this; 3672 3673 // HANDLE: $(#id) 3674 } else { 3675 elem = document.getElementById( match[ 2 ] ); 3676 3677 if ( elem ) { 3678 3679 // Inject the element directly into the jQuery object 3680 this[ 0 ] = elem; 3681 this.length = 1; 3682 } 3683 return this; 3684 } 3685 3686 // HANDLE: $(expr, $(...)) 3687 } else if ( !context || context.jquery ) { 3688 return ( context || root ).find( selector ); 3689 3690 // HANDLE: $(expr, context) 3691 // (which is just equivalent to: $(context).find(expr) 3692 } else { 3693 return this.constructor( context ).find( selector ); 3694 } 3695 3696 // HANDLE: $(DOMElement) 3697 } else if ( selector.nodeType ) { 3698 this[ 0 ] = selector; 3699 this.length = 1; 3700 return this; 3701 3702 // HANDLE: $(function) 3703 // Shortcut for document ready 3704 } else if ( isFunction( selector ) ) { 3705 return root.ready !== undefined ? 3706 root.ready( selector ) : 3707 3708 // Execute immediately if ready is not present 3709 selector( jQuery ); 3710 } 3711 3712 return jQuery.makeArray( selector, this ); 3713 }; 3714 3715// Give the init function the jQuery prototype for later instantiation 3716init.prototype = jQuery.fn; 3717 3718// Initialize central reference 3719rootjQuery = jQuery( document ); 3720 3721 3722var rparentsprev = /^(?:parents|prev(?:Until|All))/, 3723 3724 // Methods guaranteed to produce a unique set when starting from a unique set 3725 guaranteedUnique = { 3726 children: true, 3727 contents: true, 3728 next: true, 3729 prev: true 3730 }; 3731 3732jQuery.fn.extend( { 3733 has: function( target ) { 3734 var targets = jQuery( target, this ), 3735 l = targets.length; 3736 3737 return this.filter( function() { 3738 var i = 0; 3739 for ( ; i < l; i++ ) { 3740 if ( jQuery.contains( this, targets[ i ] ) ) { 3741 return true; 3742 } 3743 } 3744 } ); 3745 }, 3746 3747 closest: function( selectors, context ) { 3748 var cur, 3749 i = 0, 3750 l = this.length, 3751 matched = [], 3752 targets = typeof selectors !== "string" && jQuery( selectors ); 3753 3754 // Positional selectors never match, since there's no _selection_ context 3755 if ( !rneedsContext.test( selectors ) ) { 3756 for ( ; i < l; i++ ) { 3757 for ( cur = this[ i ]; cur && cur !== context; cur = cur.parentNode ) { 3758 3759 // Always skip document fragments 3760 if ( cur.nodeType < 11 && ( targets ? 3761 targets.index( cur ) > -1 : 3762 3763 // Don't pass non-elements to jQuery#find 3764 cur.nodeType === 1 && 3765 jQuery.find.matchesSelector( cur, selectors ) ) ) { 3766 3767 matched.push( cur ); 3768 break; 3769 } 3770 } 3771 } 3772 } 3773 3774 return this.pushStack( matched.length > 1 ? jQuery.uniqueSort( matched ) : matched ); 3775 }, 3776 3777 // Determine the position of an element within the set 3778 index: function( elem ) { 3779 3780 // No argument, return index in parent 3781 if ( !elem ) { 3782 return ( this[ 0 ] && this[ 0 ].parentNode ) ? this.first().prevAll().length : -1; 3783 } 3784 3785 // Index in selector 3786 if ( typeof elem === "string" ) { 3787 return indexOf.call( jQuery( elem ), this[ 0 ] ); 3788 } 3789 3790 // Locate the position of the desired element 3791 return indexOf.call( this, 3792 3793 // If it receives a jQuery object, the first element is used 3794 elem.jquery ? elem[ 0 ] : elem 3795 ); 3796 }, 3797 3798 add: function( selector, context ) { 3799 return this.pushStack( 3800 jQuery.uniqueSort( 3801 jQuery.merge( this.get(), jQuery( selector, context ) ) 3802 ) 3803 ); 3804 }, 3805 3806 addBack: function( selector ) { 3807 return this.add( selector == null ? 3808 this.prevObject : this.prevObject.filter( selector ) 3809 ); 3810 } 3811} ); 3812 3813function sibling( cur, dir ) { 3814 while ( ( cur = cur[ dir ] ) && cur.nodeType !== 1 ) {} 3815 return cur; 3816} 3817 3818jQuery.each( { 3819 parent: function( elem ) { 3820 var parent = elem.parentNode; 3821 return parent && parent.nodeType !== 11 ? parent : null; 3822 }, 3823 parents: function( elem ) { 3824 return dir( elem, "parentNode" ); 3825 }, 3826 parentsUntil: function( elem, _i, until ) { 3827 return dir( elem, "parentNode", until ); 3828 }, 3829 next: function( elem ) { 3830 return sibling( elem, "nextSibling" ); 3831 }, 3832 prev: function( elem ) { 3833 return sibling( elem, "previousSibling" ); 3834 }, 3835 nextAll: function( elem ) { 3836 return dir( elem, "nextSibling" ); 3837 }, 3838 prevAll: function( elem ) { 3839 return dir( elem, "previousSibling" ); 3840 }, 3841 nextUntil: function( elem, _i, until ) { 3842 return dir( elem, "nextSibling", until ); 3843 }, 3844 prevUntil: function( elem, _i, until ) { 3845 return dir( elem, "previousSibling", until ); 3846 }, 3847 siblings: function( elem ) { 3848 return siblings( ( elem.parentNode || {} ).firstChild, elem ); 3849 }, 3850 children: function( elem ) { 3851 return siblings( elem.firstChild ); 3852 }, 3853 contents: function( elem ) { 3854 if ( elem.contentDocument != null && 3855 3856 // Support: IE 11+ 3857 // <object> elements with no `data` attribute has an object 3858 // `contentDocument` with a `null` prototype. 3859 getProto( elem.contentDocument ) ) { 3860 3861 return elem.contentDocument; 3862 } 3863 3864 // Support: IE 9 - 11 only, iOS 7 only, Android Browser <=4.3 only 3865 // Treat the template element as a regular one in browsers that 3866 // don't support it. 3867 if ( nodeName( elem, "template" ) ) { 3868 elem = elem.content || elem; 3869 } 3870 3871 return jQuery.merge( [], elem.childNodes ); 3872 } 3873}, function( name, fn ) { 3874 jQuery.fn[ name ] = function( until, selector ) { 3875 var matched = jQuery.map( this, fn, until ); 3876 3877 if ( name.slice( -5 ) !== "Until" ) { 3878 selector = until; 3879 } 3880 3881 if ( selector && typeof selector === "string" ) { 3882 matched = jQuery.filter( selector, matched ); 3883 } 3884 3885 if ( this.length > 1 ) { 3886 3887 // Remove duplicates 3888 if ( !guaranteedUnique[ name ] ) { 3889 jQuery.uniqueSort( matched ); 3890 } 3891 3892 // Reverse order for parents* and prev-derivatives 3893 if ( rparentsprev.test( name ) ) { 3894 matched.reverse(); 3895 } 3896 } 3897 3898 return this.pushStack( matched ); 3899 }; 3900} ); 3901var rnothtmlwhite = ( /[^\x20\t\r\n\f]+/g ); 3902 3903 3904 3905// Convert String-formatted options into Object-formatted ones 3906function createOptions( options ) { 3907 var object = {}; 3908 jQuery.each( options.match( rnothtmlwhite ) || [], function( _, flag ) { 3909 object[ flag ] = true; 3910 } ); 3911 return object; 3912} 3913 3914/* 3915 * Create a callback list using the following parameters: 3916 * 3917 * options: an optional list of space-separated options that will change how 3918 * the callback list behaves or a more traditional option object 3919 * 3920 * By default a callback list will act like an event callback list and can be 3921 * "fired" multiple times. 3922 * 3923 * Possible options: 3924 * 3925 * once: will ensure the callback list can only be fired once (like a Deferred) 3926 * 3927 * memory: will keep track of previous values and will call any callback added 3928 * after the list has been fired right away with the latest "memorized" 3929 * values (like a Deferred) 3930 * 3931 * unique: will ensure a callback can only be added once (no duplicate in the list) 3932 * 3933 * stopOnFalse: interrupt callings when a callback returns false 3934 * 3935 */ 3936jQuery.Callbacks = function( options ) { 3937 3938 // Convert options from String-formatted to Object-formatted if needed 3939 // (we check in cache first) 3940 options = typeof options === "string" ? 3941 createOptions( options ) : 3942 jQuery.extend( {}, options ); 3943 3944 var // Flag to know if list is currently firing 3945 firing, 3946 3947 // Last fire value for non-forgettable lists 3948 memory, 3949 3950 // Flag to know if list was already fired 3951 fired, 3952 3953 // Flag to prevent firing 3954 locked, 3955 3956 // Actual callback list 3957 list = [], 3958 3959 // Queue of execution data for repeatable lists 3960 queue = [], 3961 3962 // Index of currently firing callback (modified by add/remove as needed) 3963 firingIndex = -1, 3964 3965 // Fire callbacks 3966 fire = function() { 3967 3968 // Enforce single-firing 3969 locked = locked || options.once; 3970 3971 // Execute callbacks for all pending executions, 3972 // respecting firingIndex overrides and runtime changes 3973 fired = firing = true; 3974 for ( ; queue.length; firingIndex = -1 ) { 3975 memory = queue.shift(); 3976 while ( ++firingIndex < list.length ) { 3977 3978 // Run callback and check for early termination 3979 if ( list[ firingIndex ].apply( memory[ 0 ], memory[ 1 ] ) === false && 3980 options.stopOnFalse ) { 3981 3982 // Jump to end and forget the data so .add doesn't re-fire 3983 firingIndex = list.length; 3984 memory = false; 3985 } 3986 } 3987 } 3988 3989 // Forget the data if we're done with it 3990 if ( !options.memory ) { 3991 memory = false; 3992 } 3993 3994 firing = false; 3995 3996 // Clean up if we're done firing for good 3997 if ( locked ) { 3998 3999 // Keep an empty list if we have data for future add calls 4000 if ( memory ) { 4001 list = []; 4002 4003 // Otherwise, this object is spent 4004 } else { 4005 list = ""; 4006 } 4007 } 4008 }, 4009 4010 // Actual Callbacks object 4011 self = { 4012 4013 // Add a callback or a collection of callbacks to the list 4014 add: function() { 4015 if ( list ) { 4016 4017 // If we have memory from a past run, we should fire after adding 4018 if ( memory && !firing ) { 4019 firingIndex = list.length - 1; 4020 queue.push( memory ); 4021 } 4022 4023 ( function add( args ) { 4024 jQuery.each( args, function( _, arg ) { 4025 if ( isFunction( arg ) ) { 4026 if ( !options.unique || !self.has( arg ) ) { 4027 list.push( arg ); 4028 } 4029 } else if ( arg && arg.length && toType( arg ) !== "string" ) { 4030 4031 // Inspect recursively 4032 add( arg ); 4033 } 4034 } ); 4035 } )( arguments ); 4036 4037 if ( memory && !firing ) { 4038 fire(); 4039 } 4040 } 4041 return this; 4042 }, 4043 4044 // Remove a callback from the list 4045 remove: function() { 4046 jQuery.each( arguments, function( _, arg ) { 4047 var index; 4048 while ( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) { 4049 list.splice( index, 1 ); 4050 4051 // Handle firing indexes 4052 if ( index <= firingIndex ) { 4053 firingIndex--; 4054 } 4055 } 4056 } ); 4057 return this; 4058 }, 4059 4060 // Check if a given callback is in the list. 4061 // If no argument is given, return whether or not list has callbacks attached. 4062 has: function( fn ) { 4063 return fn ? 4064 jQuery.inArray( fn, list ) > -1 : 4065 list.length > 0; 4066 }, 4067 4068 // Remove all callbacks from the list 4069 empty: function() { 4070 if ( list ) { 4071 list = []; 4072 } 4073 return this; 4074 }, 4075 4076 // Disable .fire and .add 4077 // Abort any current/pending executions 4078 // Clear all callbacks and values 4079 disable: function() { 4080 locked = queue = []; 4081 list = memory = ""; 4082 return this; 4083 }, 4084 disabled: function() { 4085 return !list; 4086 }, 4087 4088 // Disable .fire 4089 // Also disable .add unless we have memory (since it would have no effect) 4090 // Abort any pending executions 4091 lock: function() { 4092 locked = queue = []; 4093 if ( !memory && !firing ) { 4094 list = memory = ""; 4095 } 4096 return this; 4097 }, 4098 locked: function() { 4099 return !!locked; 4100 }, 4101 4102 // Call all callbacks with the given context and arguments 4103 fireWith: function( context, args ) { 4104 if ( !locked ) { 4105 args = args || []; 4106 args = [ context, args.slice ? args.slice() : args ]; 4107 queue.push( args ); 4108 if ( !firing ) { 4109 fire(); 4110 } 4111 } 4112 return this; 4113 }, 4114 4115 // Call all the callbacks with the given arguments 4116 fire: function() { 4117 self.fireWith( this, arguments ); 4118 return this; 4119 }, 4120 4121 // To know if the callbacks have already been called at least once 4122 fired: function() { 4123 return !!fired; 4124 } 4125 }; 4126 4127 return self; 4128}; 4129 4130 4131function Identity( v ) { 4132 return v; 4133} 4134function Thrower( ex ) { 4135 throw ex; 4136} 4137 4138function adoptValue( value, resolve, reject, noValue ) { 4139 var method; 4140 4141 try { 4142 4143 // Check for promise aspect first to privilege synchronous behavior 4144 if ( value && isFunction( ( method = value.promise ) ) ) { 4145 method.call( value ).done( resolve ).fail( reject ); 4146 4147 // Other thenables 4148 } else if ( value && isFunction( ( method = value.then ) ) ) { 4149 method.call( value, resolve, reject ); 4150 4151 // Other non-thenables 4152 } else { 4153 4154 // Control `resolve` arguments by letting Array#slice cast boolean `noValue` to integer: 4155 // * false: [ value ].slice( 0 ) => resolve( value ) 4156 // * true: [ value ].slice( 1 ) => resolve() 4157 resolve.apply( undefined, [ value ].slice( noValue ) ); 4158 } 4159 4160 // For Promises/A+, convert exceptions into rejections 4161 // Since jQuery.when doesn't unwrap thenables, we can skip the extra checks appearing in 4162 // Deferred#then to conditionally suppress rejection. 4163 } catch ( value ) { 4164 4165 // Support: Android 4.0 only 4166 // Strict mode functions invoked without .call/.apply get global-object context 4167 reject.apply( undefined, [ value ] ); 4168 } 4169} 4170 4171jQuery.extend( { 4172 4173 Deferred: function( func ) { 4174 var tuples = [ 4175 4176 // action, add listener, callbacks, 4177 // ... .then handlers, argument index, [final state] 4178 [ "notify", "progress", jQuery.Callbacks( "memory" ), 4179 jQuery.Callbacks( "memory" ), 2 ], 4180 [ "resolve", "done", jQuery.Callbacks( "once memory" ), 4181 jQuery.Callbacks( "once memory" ), 0, "resolved" ], 4182 [ "reject", "fail", jQuery.Callbacks( "once memory" ), 4183 jQuery.Callbacks( "once memory" ), 1, "rejected" ] 4184 ], 4185 state = "pending", 4186 promise = { 4187 state: function() { 4188 return state; 4189 }, 4190 always: function() { 4191 deferred.done( arguments ).fail( arguments ); 4192 return this; 4193 }, 4194 "catch": function( fn ) { 4195 return promise.then( null, fn ); 4196 }, 4197 4198 // Keep pipe for back-compat 4199 pipe: function( /* fnDone, fnFail, fnProgress */ ) { 4200 var fns = arguments; 4201 4202 return jQuery.Deferred( function( newDefer ) { 4203 jQuery.each( tuples, function( _i, tuple ) { 4204 4205 // Map tuples (progress, done, fail) to arguments (done, fail, progress) 4206 var fn = isFunction( fns[ tuple[ 4 ] ] ) && fns[ tuple[ 4 ] ]; 4207 4208 // deferred.progress(function() { bind to newDefer or newDefer.notify }) 4209 // deferred.done(function() { bind to newDefer or newDefer.resolve }) 4210 // deferred.fail(function() { bind to newDefer or newDefer.reject }) 4211 deferred[ tuple[ 1 ] ]( function() { 4212 var returned = fn && fn.apply( this, arguments ); 4213 if ( returned && isFunction( returned.promise ) ) { 4214 returned.promise() 4215 .progress( newDefer.notify ) 4216 .done( newDefer.resolve ) 4217 .fail( newDefer.reject ); 4218 } else { 4219 newDefer[ tuple[ 0 ] + "With" ]( 4220 this, 4221 fn ? [ returned ] : arguments 4222 ); 4223 } 4224 } ); 4225 } ); 4226 fns = null; 4227 } ).promise(); 4228 }, 4229 then: function( onFulfilled, onRejected, onProgress ) { 4230 var maxDepth = 0; 4231 function resolve( depth, deferred, handler, special ) { 4232 return function() { 4233 var that = this, 4234 args = arguments, 4235 mightThrow = function() { 4236 var returned, then; 4237 4238 // Support: Promises/A+ section 2.3.3.3.3 4239 // https://promisesaplus.com/#point-59 4240 // Ignore double-resolution attempts 4241 if ( depth < maxDepth ) { 4242 return; 4243 } 4244 4245 returned = handler.apply( that, args ); 4246 4247 // Support: Promises/A+ section 2.3.1 4248 // https://promisesaplus.com/#point-48 4249 if ( returned === deferred.promise() ) { 4250 throw new TypeError( "Thenable self-resolution" ); 4251 } 4252 4253 // Support: Promises/A+ sections 2.3.3.1, 3.5 4254 // https://promisesaplus.com/#point-54 4255 // https://promisesaplus.com/#point-75 4256 // Retrieve `then` only once 4257 then = returned && 4258 4259 // Support: Promises/A+ section 2.3.4 4260 // https://promisesaplus.com/#point-64 4261 // Only check objects and functions for thenability 4262 ( typeof returned === "object" || 4263 typeof returned === "function" ) && 4264 returned.then; 4265 4266 // Handle a returned thenable 4267 if ( isFunction( then ) ) { 4268 4269 // Special processors (notify) just wait for resolution 4270 if ( special ) { 4271 then.call( 4272 returned, 4273 resolve( maxDepth, deferred, Identity, special ), 4274 resolve( maxDepth, deferred, Thrower, special ) 4275 ); 4276 4277 // Normal processors (resolve) also hook into progress 4278 } else { 4279 4280 // ...and disregard older resolution values 4281 maxDepth++; 4282 4283 then.call( 4284 returned, 4285 resolve( maxDepth, deferred, Identity, special ), 4286 resolve( maxDepth, deferred, Thrower, special ), 4287 resolve( maxDepth, deferred, Identity, 4288 deferred.notifyWith ) 4289 ); 4290 } 4291 4292 // Handle all other returned values 4293 } else { 4294 4295 // Only substitute handlers pass on context 4296 // and multiple values (non-spec behavior) 4297 if ( handler !== Identity ) { 4298 that = undefined; 4299 args = [ returned ]; 4300 } 4301 4302 // Process the value(s) 4303 // Default process is resolve 4304 ( special || deferred.resolveWith )( that, args ); 4305 } 4306 }, 4307 4308 // Only normal processors (resolve) catch and reject exceptions 4309 process = special ? 4310 mightThrow : 4311 function() { 4312 try { 4313 mightThrow(); 4314 } catch ( e ) { 4315 4316 if ( jQuery.Deferred.exceptionHook ) { 4317 jQuery.Deferred.exceptionHook( e, 4318 process.error ); 4319 } 4320 4321 // Support: Promises/A+ section 2.3.3.3.4.1 4322 // https://promisesaplus.com/#point-61 4323 // Ignore post-resolution exceptions 4324 if ( depth + 1 >= maxDepth ) { 4325 4326 // Only substitute handlers pass on context 4327 // and multiple values (non-spec behavior) 4328 if ( handler !== Thrower ) { 4329 that = undefined; 4330 args = [ e ]; 4331 } 4332 4333 deferred.rejectWith( that, args ); 4334 } 4335 } 4336 }; 4337 4338 // Support: Promises/A+ section 2.3.3.3.1 4339 // https://promisesaplus.com/#point-57 4340 // Re-resolve promises immediately to dodge false rejection from 4341 // subsequent errors 4342 if ( depth ) { 4343 process(); 4344 } else { 4345 4346 // Call an optional hook to record the error, in case of exception 4347 // since it's otherwise lost when execution goes async 4348 if ( jQuery.Deferred.getErrorHook ) { 4349 process.error = jQuery.Deferred.getErrorHook(); 4350 4351 // The deprecated alias of the above. While the name suggests 4352 // returning the stack, not an error instance, jQuery just passes 4353 // it directly to `console.warn` so both will work; an instance 4354 // just better cooperates with source maps. 4355 } else if ( jQuery.Deferred.getStackHook ) { 4356 process.error = jQuery.Deferred.getStackHook(); 4357 } 4358 window.setTimeout( process ); 4359 } 4360 }; 4361 } 4362 4363 return jQuery.Deferred( function( newDefer ) { 4364 4365 // progress_handlers.add( ... ) 4366 tuples[ 0 ][ 3 ].add( 4367 resolve( 4368 0, 4369 newDefer, 4370 isFunction( onProgress ) ? 4371 onProgress : 4372 Identity, 4373 newDefer.notifyWith 4374 ) 4375 ); 4376 4377 // fulfilled_handlers.add( ... ) 4378 tuples[ 1 ][ 3 ].add( 4379 resolve( 4380 0, 4381 newDefer, 4382 isFunction( onFulfilled ) ? 4383 onFulfilled : 4384 Identity 4385 ) 4386 ); 4387 4388 // rejected_handlers.add( ... ) 4389 tuples[ 2 ][ 3 ].add( 4390 resolve( 4391 0, 4392 newDefer, 4393 isFunction( onRejected ) ? 4394 onRejected : 4395 Thrower 4396 ) 4397 ); 4398 } ).promise(); 4399 }, 4400 4401 // Get a promise for this deferred 4402 // If obj is provided, the promise aspect is added to the object 4403 promise: function( obj ) { 4404 return obj != null ? jQuery.extend( obj, promise ) : promise; 4405 } 4406 }, 4407 deferred = {}; 4408 4409 // Add list-specific methods 4410 jQuery.each( tuples, function( i, tuple ) { 4411 var list = tuple[ 2 ], 4412 stateString = tuple[ 5 ]; 4413 4414 // promise.progress = list.add 4415 // promise.done = list.add 4416 // promise.fail = list.add 4417 promise[ tuple[ 1 ] ] = list.add; 4418 4419 // Handle state 4420 if ( stateString ) { 4421 list.add( 4422 function() { 4423 4424 // state = "resolved" (i.e., fulfilled) 4425 // state = "rejected" 4426 state = stateString; 4427 }, 4428 4429 // rejected_callbacks.disable 4430 // fulfilled_callbacks.disable 4431 tuples[ 3 - i ][ 2 ].disable, 4432 4433 // rejected_handlers.disable 4434 // fulfilled_handlers.disable 4435 tuples[ 3 - i ][ 3 ].disable, 4436 4437 // progress_callbacks.lock 4438 tuples[ 0 ][ 2 ].lock, 4439 4440 // progress_handlers.lock 4441 tuples[ 0 ][ 3 ].lock 4442 ); 4443 } 4444 4445 // progress_handlers.fire 4446 // fulfilled_handlers.fire 4447 // rejected_handlers.fire 4448 list.add( tuple[ 3 ].fire ); 4449 4450 // deferred.notify = function() { deferred.notifyWith(...) } 4451 // deferred.resolve = function() { deferred.resolveWith(...) } 4452 // deferred.reject = function() { deferred.rejectWith(...) } 4453 deferred[ tuple[ 0 ] ] = function() { 4454 deferred[ tuple[ 0 ] + "With" ]( this === deferred ? undefined : this, arguments ); 4455 return this; 4456 }; 4457 4458 // deferred.notifyWith = list.fireWith 4459 // deferred.resolveWith = list.fireWith 4460 // deferred.rejectWith = list.fireWith 4461 deferred[ tuple[ 0 ] + "With" ] = list.fireWith; 4462 } ); 4463 4464 // Make the deferred a promise 4465 promise.promise( deferred ); 4466 4467 // Call given func if any 4468 if ( func ) { 4469 func.call( deferred, deferred ); 4470 } 4471 4472 // All done! 4473 return deferred; 4474 }, 4475 4476 // Deferred helper 4477 when: function( singleValue ) { 4478 var 4479 4480 // count of uncompleted subordinates 4481 remaining = arguments.length, 4482 4483 // count of unprocessed arguments 4484 i = remaining, 4485 4486 // subordinate fulfillment data 4487 resolveContexts = Array( i ), 4488 resolveValues = slice.call( arguments ), 4489 4490 // the primary Deferred 4491 primary = jQuery.Deferred(), 4492 4493 // subordinate callback factory 4494 updateFunc = function( i ) { 4495 return function( value ) { 4496 resolveContexts[ i ] = this; 4497 resolveValues[ i ] = arguments.length > 1 ? slice.call( arguments ) : value; 4498 if ( !( --remaining ) ) { 4499 primary.resolveWith( resolveContexts, resolveValues ); 4500 } 4501 }; 4502 }; 4503 4504 // Single- and empty arguments are adopted like Promise.resolve 4505 if ( remaining <= 1 ) { 4506 adoptValue( singleValue, primary.done( updateFunc( i ) ).resolve, primary.reject, 4507 !remaining ); 4508 4509 // Use .then() to unwrap secondary thenables (cf. gh-3000) 4510 if ( primary.state() === "pending" || 4511 isFunction( resolveValues[ i ] && resolveValues[ i ].then ) ) { 4512 4513 return primary.then(); 4514 } 4515 } 4516 4517 // Multiple arguments are aggregated like Promise.all array elements 4518 while ( i-- ) { 4519 adoptValue( resolveValues[ i ], updateFunc( i ), primary.reject ); 4520 } 4521 4522 return primary.promise(); 4523 } 4524} ); 4525 4526 4527// These usually indicate a programmer mistake during development, 4528// warn about them ASAP rather than swallowing them by default. 4529var rerrorNames = /^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/; 4530 4531// If `jQuery.Deferred.getErrorHook` is defined, `asyncError` is an error 4532// captured before the async barrier to get the original error cause 4533// which may otherwise be hidden. 4534jQuery.Deferred.exceptionHook = function( error, asyncError ) { 4535 4536 // Support: IE 8 - 9 only 4537 // Console exists when dev tools are open, which can happen at any time 4538 if ( window.console && window.console.warn && error && rerrorNames.test( error.name ) ) { 4539 window.console.warn( "jQuery.Deferred exception: " + error.message, 4540 error.stack, asyncError ); 4541 } 4542}; 4543 4544 4545 4546 4547jQuery.readyException = function( error ) { 4548 window.setTimeout( function() { 4549 throw error; 4550 } ); 4551}; 4552 4553 4554 4555 4556// The deferred used on DOM ready 4557var readyList = jQuery.Deferred(); 4558 4559jQuery.fn.ready = function( fn ) { 4560 4561 readyList 4562 .then( fn ) 4563 4564 // Wrap jQuery.readyException in a function so that the lookup 4565 // happens at the time of error handling instead of callback 4566 // registration. 4567 .catch( function( error ) { 4568 jQuery.readyException( error ); 4569 } ); 4570 4571 return this; 4572}; 4573 4574jQuery.extend( { 4575 4576 // Is the DOM ready to be used? Set to true once it occurs. 4577 isReady: false, 4578 4579 // A counter to track how many items to wait for before 4580 // the ready event fires. See trac-6781 4581 readyWait: 1, 4582 4583 // Handle when the DOM is ready 4584 ready: function( wait ) { 4585 4586 // Abort if there are pending holds or we're already ready 4587 if ( wait === true ? --jQuery.readyWait : jQuery.isReady ) { 4588 return; 4589 } 4590 4591 // Remember that the DOM is ready 4592 jQuery.isReady = true; 4593 4594 // If a normal DOM Ready event fired, decrement, and wait if need be 4595 if ( wait !== true && --jQuery.readyWait > 0 ) { 4596 return; 4597 } 4598 4599 // If there are functions bound, to execute 4600 readyList.resolveWith( document, [ jQuery ] ); 4601 } 4602} ); 4603 4604jQuery.ready.then = readyList.then; 4605 4606// The ready event handler and self cleanup method 4607function completed() { 4608 document.removeEventListener( "DOMContentLoaded", completed ); 4609 window.removeEventListener( "load", completed ); 4610 jQuery.ready(); 4611} 4612 4613// Catch cases where $(document).ready() is called 4614// after the browser event has already occurred. 4615// Support: IE <=9 - 10 only 4616// Older IE sometimes signals "interactive" too soon 4617if ( document.readyState === "complete" || 4618 ( document.readyState !== "loading" && !document.documentElement.doScroll ) ) { 4619 4620 // Handle it asynchronously to allow scripts the opportunity to delay ready 4621 window.setTimeout( jQuery.ready ); 4622 4623} else { 4624 4625 // Use the handy event callback 4626 document.addEventListener( "DOMContentLoaded", completed ); 4627 4628 // A fallback to window.onload, that will always work 4629 window.addEventListener( "load", completed ); 4630} 4631 4632 4633 4634 4635// Multifunctional method to get and set values of a collection 4636// The value/s can optionally be executed if it's a function 4637var access = function( elems, fn, key, value, chainable, emptyGet, raw ) { 4638 var i = 0, 4639 len = elems.length, 4640 bulk = key == null; 4641 4642 // Sets many values 4643 if ( toType( key ) === "object" ) { 4644 chainable = true; 4645 for ( i in key ) { 4646 access( elems, fn, i, key[ i ], true, emptyGet, raw ); 4647 } 4648 4649 // Sets one value 4650 } else if ( value !== undefined ) { 4651 chainable = true; 4652 4653 if ( !isFunction( value ) ) { 4654 raw = true; 4655 } 4656 4657 if ( bulk ) { 4658 4659 // Bulk operations run against the entire set 4660 if ( raw ) { 4661 fn.call( elems, value ); 4662 fn = null; 4663 4664 // ...except when executing function values 4665 } else { 4666 bulk = fn; 4667 fn = function( elem, _key, value ) { 4668 return bulk.call( jQuery( elem ), value ); 4669 }; 4670 } 4671 } 4672 4673 if ( fn ) { 4674 for ( ; i < len; i++ ) { 4675 fn( 4676 elems[ i ], key, raw ? 4677 value : 4678 value.call( elems[ i ], i, fn( elems[ i ], key ) ) 4679 ); 4680 } 4681 } 4682 } 4683 4684 if ( chainable ) { 4685 return elems; 4686 } 4687 4688 // Gets 4689 if ( bulk ) { 4690 return fn.call( elems ); 4691 } 4692 4693 return len ? fn( elems[ 0 ], key ) : emptyGet; 4694}; 4695 4696 4697// Matches dashed string for camelizing 4698var rmsPrefix = /^-ms-/, 4699 rdashAlpha = /-([a-z])/g; 4700 4701// Used by camelCase as callback to replace() 4702function fcamelCase( _all, letter ) { 4703 return letter.toUpperCase(); 4704} 4705 4706// Convert dashed to camelCase; used by the css and data modules 4707// Support: IE <=9 - 11, Edge 12 - 15 4708// Microsoft forgot to hump their vendor prefix (trac-9572) 4709function camelCase( string ) { 4710 return string.replace( rmsPrefix, "ms-" ).replace( rdashAlpha, fcamelCase ); 4711} 4712var acceptData = function( owner ) { 4713 4714 // Accepts only: 4715 // - Node 4716 // - Node.ELEMENT_NODE 4717 // - Node.DOCUMENT_NODE 4718 // - Object 4719 // - Any 4720 return owner.nodeType === 1 || owner.nodeType === 9 || !( +owner.nodeType ); 4721}; 4722 4723 4724 4725 4726function Data() { 4727 this.expando = jQuery.expando + Data.uid++; 4728} 4729 4730Data.uid = 1; 4731 4732Data.prototype = { 4733 4734 cache: function( owner ) { 4735 4736 // Check if the owner object already has a cache 4737 var value = owner[ this.expando ]; 4738 4739 // If not, create one 4740 if ( !value ) { 4741 value = {}; 4742 4743 // We can accept data for non-element nodes in modern browsers, 4744 // but we should not, see trac-8335. 4745 // Always return an empty object. 4746 if ( acceptData( owner ) ) { 4747 4748 // If it is a node unlikely to be stringify-ed or looped over 4749 // use plain assignment 4750 if ( owner.nodeType ) { 4751 owner[ this.expando ] = value; 4752 4753 // Otherwise secure it in a non-enumerable property 4754 // configurable must be true to allow the property to be 4755 // deleted when data is removed 4756 } else { 4757 Object.defineProperty( owner, this.expando, { 4758 value: value, 4759 configurable: true 4760 } ); 4761 } 4762 } 4763 } 4764 4765 return value; 4766 }, 4767 set: function( owner, data, value ) { 4768 var prop, 4769 cache = this.cache( owner ); 4770 4771 // Handle: [ owner, key, value ] args 4772 // Always use camelCase key (gh-2257) 4773 if ( typeof data === "string" ) { 4774 cache[ camelCase( data ) ] = value; 4775 4776 // Handle: [ owner, { properties } ] args 4777 } else { 4778 4779 // Copy the properties one-by-one to the cache object 4780 for ( prop in data ) { 4781 cache[ camelCase( prop ) ] = data[ prop ]; 4782 } 4783 } 4784 return cache; 4785 }, 4786 get: function( owner, key ) { 4787 return key === undefined ? 4788 this.cache( owner ) : 4789 4790 // Always use camelCase key (gh-2257) 4791 owner[ this.expando ] && owner[ this.expando ][ camelCase( key ) ]; 4792 }, 4793 access: function( owner, key, value ) { 4794 4795 // In cases where either: 4796 // 4797 // 1. No key was specified 4798 // 2. A string key was specified, but no value provided 4799 // 4800 // Take the "read" path and allow the get method to determine 4801 // which value to return, respectively either: 4802 // 4803 // 1. The entire cache object 4804 // 2. The data stored at the key 4805 // 4806 if ( key === undefined || 4807 ( ( key && typeof key === "string" ) && value === undefined ) ) { 4808 4809 return this.get( owner, key ); 4810 } 4811 4812 // When the key is not a string, or both a key and value 4813 // are specified, set or extend (existing objects) with either: 4814 // 4815 // 1. An object of properties 4816 // 2. A key and value 4817 // 4818 this.set( owner, key, value ); 4819 4820 // Since the "set" path can have two possible entry points 4821 // return the expected data based on which path was taken[*] 4822 return value !== undefined ? value : key; 4823 }, 4824 remove: function( owner, key ) { 4825 var i, 4826 cache = owner[ this.expando ]; 4827 4828 if ( cache === undefined ) { 4829 return; 4830 } 4831 4832 if ( key !== undefined ) { 4833 4834 // Support array or space separated string of keys 4835 if ( Array.isArray( key ) ) { 4836 4837 // If key is an array of keys... 4838 // We always set camelCase keys, so remove that. 4839 key = key.map( camelCase ); 4840 } else { 4841 key = camelCase( key ); 4842 4843 // If a key with the spaces exists, use it. 4844 // Otherwise, create an array by matching non-whitespace 4845 key = key in cache ? 4846 [ key ] : 4847 ( key.match( rnothtmlwhite ) || [] ); 4848 } 4849 4850 i = key.length; 4851 4852 while ( i-- ) { 4853 delete cache[ key[ i ] ]; 4854 } 4855 } 4856 4857 // Remove the expando if there's no more data 4858 if ( key === undefined || jQuery.isEmptyObject( cache ) ) { 4859 4860 // Support: Chrome <=35 - 45 4861 // Webkit & Blink performance suffers when deleting properties 4862 // from DOM nodes, so set to undefined instead 4863 // https://bugs.chromium.org/p/chromium/issues/detail?id=378607 (bug restricted) 4864 if ( owner.nodeType ) { 4865 owner[ this.expando ] = undefined; 4866 } else { 4867 delete owner[ this.expando ]; 4868 } 4869 } 4870 }, 4871 hasData: function( owner ) { 4872 var cache = owner[ this.expando ]; 4873 return cache !== undefined && !jQuery.isEmptyObject( cache ); 4874 } 4875}; 4876var dataPriv = new Data(); 4877 4878var dataUser = new Data(); 4879 4880 4881 4882// Implementation Summary 4883// 4884// 1. Enforce API surface and semantic compatibility with 1.9.x branch 4885// 2. Improve the module's maintainability by reducing the storage 4886// paths to a single mechanism. 4887// 3. Use the same single mechanism to support "private" and "user" data. 4888// 4. _Never_ expose "private" data to user code (TODO: Drop _data, _removeData) 4889// 5. Avoid exposing implementation details on user objects (eg. expando properties) 4890// 6. Provide a clear path for implementation upgrade to WeakMap in 2014 4891 4892var rbrace = /^(?:\{[\w\W]*\}|\[[\w\W]*\])$/, 4893 rmultiDash = /[A-Z]/g; 4894 4895function getData( data ) { 4896 if ( data === "true" ) { 4897 return true; 4898 } 4899 4900 if ( data === "false" ) { 4901 return false; 4902 } 4903 4904 if ( data === "null" ) { 4905 return null; 4906 } 4907 4908 // Only convert to a number if it doesn't change the string 4909 if ( data === +data + "" ) { 4910 return +data; 4911 } 4912 4913 if ( rbrace.test( data ) ) { 4914 return JSON.parse( data ); 4915 } 4916 4917 return data; 4918} 4919 4920function dataAttr( elem, key, data ) { 4921 var name; 4922 4923 // If nothing was found internally, try to fetch any 4924 // data from the HTML5 data-* attribute 4925 if ( data === undefined && elem.nodeType === 1 ) { 4926 name = "data-" + key.replace( rmultiDash, "-$&" ).toLowerCase(); 4927 data = elem.getAttribute( name ); 4928 4929 if ( typeof data === "string" ) { 4930 try { 4931 data = getData( data ); 4932 } catch ( e ) {} 4933 4934 // Make sure we set the data so it isn't changed later 4935 dataUser.set( elem, key, data ); 4936 } else { 4937 data = undefined; 4938 } 4939 } 4940 return data; 4941} 4942 4943jQuery.extend( { 4944 hasData: function( elem ) { 4945 return dataUser.hasData( elem ) || dataPriv.hasData( elem ); 4946 }, 4947 4948 data: function( elem, name, data ) { 4949 return dataUser.access( elem, name, data ); 4950 }, 4951 4952 removeData: function( elem, name ) { 4953 dataUser.remove( elem, name ); 4954 }, 4955 4956 // TODO: Now that all calls to _data and _removeData have been replaced 4957 // with direct calls to dataPriv methods, these can be deprecated. 4958 _data: function( elem, name, data ) { 4959 return dataPriv.access( elem, name, data ); 4960 }, 4961 4962 _removeData: function( elem, name ) { 4963 dataPriv.remove( elem, name ); 4964 } 4965} ); 4966 4967jQuery.fn.extend( { 4968 data: function( key, value ) { 4969 var i, name, data, 4970 elem = this[ 0 ], 4971 attrs = elem && elem.attributes; 4972 4973 // Gets all values 4974 if ( key === undefined ) { 4975 if ( this.length ) { 4976 data = dataUser.get( elem ); 4977 4978 if ( elem.nodeType === 1 && !dataPriv.get( elem, "hasDataAttrs" ) ) { 4979 i = attrs.length; 4980 while ( i-- ) { 4981 4982 // Support: IE 11 only 4983 // The attrs elements can be null (trac-14894) 4984 if ( attrs[ i ] ) { 4985 name = attrs[ i ].name; 4986 if ( name.indexOf( "data-" ) === 0 ) { 4987 name = camelCase( name.slice( 5 ) ); 4988 dataAttr( elem, name, data[ name ] ); 4989 } 4990 } 4991 } 4992 dataPriv.set( elem, "hasDataAttrs", true ); 4993 } 4994 } 4995 4996 return data; 4997 } 4998 4999 // Sets multiple values 5000 if ( typeof key === "object" ) { 5001 return this.each( function() { 5002 dataUser.set( this, key ); 5003 } ); 5004 } 5005 5006 return access( this, function( value ) { 5007 var data; 5008 5009 // The calling jQuery object (element matches) is not empty 5010 // (and therefore has an element appears at this[ 0 ]) and the 5011 // `value` parameter was not undefined. An empty jQuery object 5012 // will result in `undefined` for elem = this[ 0 ] which will 5013 // throw an exception if an attempt to read a data cache is made. 5014 if ( elem && value === undefined ) { 5015 5016 // Attempt to get data from the cache 5017 // The key will always be camelCased in Data 5018 data = dataUser.get( elem, key ); 5019 if ( data !== undefined ) { 5020 return data; 5021 } 5022 5023 // Attempt to "discover" the data in 5024 // HTML5 custom data-* attrs 5025 data = dataAttr( elem, key ); 5026 if ( data !== undefined ) { 5027 return data; 5028 } 5029 5030 // We tried really hard, but the data doesn't exist. 5031 return; 5032 } 5033 5034 // Set the data... 5035 this.each( function() { 5036 5037 // We always store the camelCased key 5038 dataUser.set( this, key, value ); 5039 } ); 5040 }, null, value, arguments.length > 1, null, true ); 5041 }, 5042 5043 removeData: function( key ) { 5044 return this.each( function() { 5045 dataUser.remove( this, key ); 5046 } ); 5047 } 5048} ); 5049 5050 5051jQuery.extend( { 5052 queue: function( elem, type, data ) { 5053 var queue; 5054 5055 if ( elem ) { 5056 type = ( type || "fx" ) + "queue"; 5057 queue = dataPriv.get( elem, type ); 5058 5059 // Speed up dequeue by getting out quickly if this is just a lookup 5060 if ( data ) { 5061 if ( !queue || Array.isArray( data ) ) { 5062 queue = dataPriv.access( elem, type, jQuery.makeArray( data ) ); 5063 } else { 5064 queue.push( data ); 5065 } 5066 } 5067 return queue || []; 5068 } 5069 }, 5070 5071 dequeue: function( elem, type ) { 5072 type = type || "fx"; 5073 5074 var queue = jQuery.queue( elem, type ), 5075 startLength = queue.length, 5076 fn = queue.shift(), 5077 hooks = jQuery._queueHooks( elem, type ), 5078 next = function() { 5079 jQuery.dequeue( elem, type ); 5080 }; 5081 5082 // If the fx queue is dequeued, always remove the progress sentinel 5083 if ( fn === "inprogress" ) { 5084 fn = queue.shift(); 5085 startLength--; 5086 } 5087 5088 if ( fn ) { 5089 5090 // Add a progress sentinel to prevent the fx queue from being 5091 // automatically dequeued 5092 if ( type === "fx" ) { 5093 queue.unshift( "inprogress" ); 5094 } 5095 5096 // Clear up the last queue stop function 5097 delete hooks.stop; 5098 fn.call( elem, next, hooks ); 5099 } 5100 5101 if ( !startLength && hooks ) { 5102 hooks.empty.fire(); 5103 } 5104 }, 5105 5106 // Not public - generate a queueHooks object, or return the current one 5107 _queueHooks: function( elem, type ) { 5108 var key = type + "queueHooks"; 5109 return dataPriv.get( elem, key ) || dataPriv.access( elem, key, { 5110 empty: jQuery.Callbacks( "once memory" ).add( function() { 5111 dataPriv.remove( elem, [ type + "queue", key ] ); 5112 } ) 5113 } ); 5114 } 5115} ); 5116 5117jQuery.fn.extend( { 5118 queue: function( type, data ) { 5119 var setter = 2; 5120 5121 if ( typeof type !== "string" ) { 5122 data = type; 5123 type = "fx"; 5124 setter--; 5125 } 5126 5127 if ( arguments.length < setter ) { 5128 return jQuery.queue( this[ 0 ], type ); 5129 } 5130 5131 return data === undefined ? 5132 this : 5133 this.each( function() { 5134 var queue = jQuery.queue( this, type, data ); 5135 5136 // Ensure a hooks for this queue 5137 jQuery._queueHooks( this, type ); 5138 5139 if ( type === "fx" && queue[ 0 ] !== "inprogress" ) { 5140 jQuery.dequeue( this, type ); 5141 } 5142 } ); 5143 }, 5144 dequeue: function( type ) { 5145 return this.each( function() { 5146 jQuery.dequeue( this, type ); 5147 } ); 5148 }, 5149 clearQueue: function( type ) { 5150 return this.queue( type || "fx", [] ); 5151 }, 5152 5153 // Get a promise resolved when queues of a certain type 5154 // are emptied (fx is the type by default) 5155 promise: function( type, obj ) { 5156 var tmp, 5157 count = 1, 5158 defer = jQuery.Deferred(), 5159 elements = this, 5160 i = this.length, 5161 resolve = function() { 5162 if ( !( --count ) ) { 5163 defer.resolveWith( elements, [ elements ] ); 5164 } 5165 }; 5166 5167 if ( typeof type !== "string" ) { 5168 obj = type; 5169 type = undefined; 5170 } 5171 type = type || "fx"; 5172 5173 while ( i-- ) { 5174 tmp = dataPriv.get( elements[ i ], type + "queueHooks" ); 5175 if ( tmp && tmp.empty ) { 5176 count++; 5177 tmp.empty.add( resolve ); 5178 } 5179 } 5180 resolve(); 5181 return defer.promise( obj ); 5182 } 5183} ); 5184var pnum = ( /[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/ ).source; 5185 5186var rcssNum = new RegExp( "^(?:([+-])=|)(" + pnum + ")([a-z%]*)$", "i" ); 5187 5188 5189var cssExpand = [ "Top", "Right", "Bottom", "Left" ]; 5190 5191var documentElement = document.documentElement; 5192 5193 5194 5195 var isAttached = function( elem ) { 5196 return jQuery.contains( elem.ownerDocument, elem ); 5197 }, 5198 composed = { composed: true }; 5199 5200 // Support: IE 9 - 11+, Edge 12 - 18+, iOS 10.0 - 10.2 only 5201 // Check attachment across shadow DOM boundaries when possible (gh-3504) 5202 // Support: iOS 10.0-10.2 only 5203 // Early iOS 10 versions support `attachShadow` but not `getRootNode`, 5204 // leading to errors. We need to check for `getRootNode`. 5205 if ( documentElement.getRootNode ) { 5206 isAttached = function( elem ) { 5207 return jQuery.contains( elem.ownerDocument, elem ) || 5208 elem.getRootNode( composed ) === elem.ownerDocument; 5209 }; 5210 } 5211var isHiddenWithinTree = function( elem, el ) { 5212 5213 // isHiddenWithinTree might be called from jQuery#filter function; 5214 // in that case, element will be second argument 5215 elem = el || elem; 5216 5217 // Inline style trumps all 5218 return elem.style.display === "none" || 5219 elem.style.display === "" && 5220 5221 // Otherwise, check computed style 5222 // Support: Firefox <=43 - 45 5223 // Disconnected elements can have computed display: none, so first confirm that elem is 5224 // in the document. 5225 isAttached( elem ) && 5226 5227 jQuery.css( elem, "display" ) === "none"; 5228 }; 5229 5230 5231 5232function adjustCSS( elem, prop, valueParts, tween ) { 5233 var adjusted, scale, 5234 maxIterations = 20, 5235 currentValue = tween ? 5236 function() { 5237 return tween.cur(); 5238 } : 5239 function() { 5240 return jQuery.css( elem, prop, "" ); 5241 }, 5242 initial = currentValue(), 5243 unit = valueParts && valueParts[ 3 ] || ( jQuery.cssNumber[ prop ] ? "" : "px" ), 5244 5245 // Starting value computation is required for potential unit mismatches 5246 initialInUnit = elem.nodeType && 5247 ( jQuery.cssNumber[ prop ] || unit !== "px" && +initial ) && 5248 rcssNum.exec( jQuery.css( elem, prop ) ); 5249 5250 if ( initialInUnit && initialInUnit[ 3 ] !== unit ) { 5251 5252 // Support: Firefox <=54 5253 // Halve the iteration target value to prevent interference from CSS upper bounds (gh-2144) 5254 initial = initial / 2; 5255 5256 // Trust units reported by jQuery.css 5257 unit = unit || initialInUnit[ 3 ]; 5258 5259 // Iteratively approximate from a nonzero starting point 5260 initialInUnit = +initial || 1; 5261 5262 while ( maxIterations-- ) { 5263 5264 // Evaluate and update our best guess (doubling guesses that zero out). 5265 // Finish if the scale equals or crosses 1 (making the old*new product non-positive). 5266 jQuery.style( elem, prop, initialInUnit + unit ); 5267 if ( ( 1 - scale ) * ( 1 - ( scale = currentValue() / initial || 0.5 ) ) <= 0 ) { 5268 maxIterations = 0; 5269 } 5270 initialInUnit = initialInUnit / scale; 5271 5272 } 5273 5274 initialInUnit = initialInUnit * 2; 5275 jQuery.style( elem, prop, initialInUnit + unit ); 5276 5277 // Make sure we update the tween properties later on 5278 valueParts = valueParts || []; 5279 } 5280 5281 if ( valueParts ) { 5282 initialInUnit = +initialInUnit || +initial || 0; 5283 5284 // Apply relative offset (+=/-=) if specified 5285 adjusted = valueParts[ 1 ] ? 5286 initialInUnit + ( valueParts[ 1 ] + 1 ) * valueParts[ 2 ] : 5287 +valueParts[ 2 ]; 5288 if ( tween ) { 5289 tween.unit = unit; 5290 tween.start = initialInUnit; 5291 tween.end = adjusted; 5292 } 5293 } 5294 return adjusted; 5295} 5296 5297 5298var defaultDisplayMap = {}; 5299 5300function getDefaultDisplay( elem ) { 5301 var temp, 5302 doc = elem.ownerDocument, 5303 nodeName = elem.nodeName, 5304 display = defaultDisplayMap[ nodeName ]; 5305 5306 if ( display ) { 5307 return display; 5308 } 5309 5310 temp = doc.body.appendChild( doc.createElement( nodeName ) ); 5311 display = jQuery.css( temp, "display" ); 5312 5313 temp.parentNode.removeChild( temp ); 5314 5315 if ( display === "none" ) { 5316 display = "block"; 5317 } 5318 defaultDisplayMap[ nodeName ] = display; 5319 5320 return display; 5321} 5322 5323function showHide( elements, show ) { 5324 var display, elem, 5325 values = [], 5326 index = 0, 5327 length = elements.length; 5328 5329 // Determine new display value for elements that need to change 5330 for ( ; index < length; index++ ) { 5331 elem = elements[ index ]; 5332 if ( !elem.style ) { 5333 continue; 5334 } 5335 5336 display = elem.style.display; 5337 if ( show ) { 5338 5339 // Since we force visibility upon cascade-hidden elements, an immediate (and slow) 5340 // check is required in this first loop unless we have a nonempty display value (either 5341 // inline or about-to-be-restored) 5342 if ( display === "none" ) { 5343 values[ index ] = dataPriv.get( elem, "display" ) || null; 5344 if ( !values[ index ] ) { 5345 elem.style.display = ""; 5346 } 5347 } 5348 if ( elem.style.display === "" && isHiddenWithinTree( elem ) ) { 5349 values[ index ] = getDefaultDisplay( elem ); 5350 } 5351 } else { 5352 if ( display !== "none" ) { 5353 values[ index ] = "none"; 5354 5355 // Remember what we're overwriting 5356 dataPriv.set( elem, "display", display ); 5357 } 5358 } 5359 } 5360 5361 // Set the display of the elements in a second loop to avoid constant reflow 5362 for ( index = 0; index < length; index++ ) { 5363 if ( values[ index ] != null ) { 5364 elements[ index ].style.display = values[ index ]; 5365 } 5366 } 5367 5368 return elements; 5369} 5370 5371jQuery.fn.extend( { 5372 show: function() { 5373 return showHide( this, true ); 5374 }, 5375 hide: function() { 5376 return showHide( this ); 5377 }, 5378 toggle: function( state ) { 5379 if ( typeof state === "boolean" ) { 5380 return state ? this.show() : this.hide(); 5381 } 5382 5383 return this.each( function() { 5384 if ( isHiddenWithinTree( this ) ) { 5385 jQuery( this ).show(); 5386 } else { 5387 jQuery( this ).hide(); 5388 } 5389 } ); 5390 } 5391} ); 5392var rcheckableType = ( /^(?:checkbox|radio)$/i ); 5393 5394var rtagName = ( /<([a-z][^\/\0>\x20\t\r\n\f]*)/i ); 5395 5396var rscriptType = ( /^$|^module$|\/(?:java|ecma)script/i ); 5397 5398 5399 5400( function() { 5401 var fragment = document.createDocumentFragment(), 5402 div = fragment.appendChild( document.createElement( "div" ) ), 5403 input = document.createElement( "input" ); 5404 5405 // Support: Android 4.0 - 4.3 only 5406 // Check state lost if the name is set (trac-11217) 5407 // Support: Windows Web Apps (WWA) 5408 // `name` and `type` must use .setAttribute for WWA (trac-14901) 5409 input.setAttribute( "type", "radio" ); 5410 input.setAttribute( "checked", "checked" ); 5411 input.setAttribute( "name", "t" ); 5412 5413 div.appendChild( input ); 5414 5415 // Support: Android <=4.1 only 5416 // Older WebKit doesn't clone checked state correctly in fragments 5417 support.checkClone = div.cloneNode( true ).cloneNode( true ).lastChild.checked; 5418 5419 // Support: IE <=11 only 5420 // Make sure textarea (and checkbox) defaultValue is properly cloned 5421 div.innerHTML = "<textarea>x</textarea>"; 5422 support.noCloneChecked = !!div.cloneNode( true ).lastChild.defaultValue; 5423 5424 // Support: IE <=9 only 5425 // IE <=9 replaces <option> tags with their contents when inserted outside of 5426 // the select element. 5427 div.innerHTML = "<option></option>"; 5428 support.option = !!div.lastChild; 5429} )(); 5430 5431 5432// We have to close these tags to support XHTML (trac-13200) 5433var wrapMap = { 5434 5435 // XHTML parsers do not magically insert elements in the 5436 // same way that tag soup parsers do. So we cannot shorten 5437 // this by omitting <tbody> or other required elements. 5438 thead: [ 1, "<table>", "</table>" ], 5439 col: [ 2, "<table><colgroup>", "</colgroup></table>" ], 5440 tr: [ 2, "<table><tbody>", "</tbody></table>" ], 5441 td: [ 3, "<table><tbody><tr>", "</tr></tbody></table>" ], 5442 5443 _default: [ 0, "", "" ] 5444}; 5445 5446wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead; 5447wrapMap.th = wrapMap.td; 5448 5449// Support: IE <=9 only 5450if ( !support.option ) { 5451 wrapMap.optgroup = wrapMap.option = [ 1, "<select multiple='multiple'>", "</select>" ]; 5452} 5453 5454 5455function getAll( context, tag ) { 5456 5457 // Support: IE <=9 - 11 only 5458 // Use typeof to avoid zero-argument method invocation on host objects (trac-15151) 5459 var ret; 5460 5461 if ( typeof context.getElementsByTagName !== "undefined" ) { 5462 ret = context.getElementsByTagName( tag || "*" ); 5463 5464 } else if ( typeof context.querySelectorAll !== "undefined" ) { 5465 ret = context.querySelectorAll( tag || "*" ); 5466 5467 } else { 5468 ret = []; 5469 } 5470 5471 if ( tag === undefined || tag && nodeName( context, tag ) ) { 5472 return jQuery.merge( [ context ], ret ); 5473 } 5474 5475 return ret; 5476} 5477 5478 5479// Mark scripts as having already been evaluated 5480function setGlobalEval( elems, refElements ) { 5481 var i = 0, 5482 l = elems.length; 5483 5484 for ( ; i < l; i++ ) { 5485 dataPriv.set( 5486 elems[ i ], 5487 "globalEval", 5488 !refElements || dataPriv.get( refElements[ i ], "globalEval" ) 5489 ); 5490 } 5491} 5492 5493 5494var rhtml = /<|&#?\w+;/; 5495 5496function buildFragment( elems, context, scripts, selection, ignored ) { 5497 var elem, tmp, tag, wrap, attached, j, 5498 fragment = context.createDocumentFragment(), 5499 nodes = [], 5500 i = 0, 5501 l = elems.length; 5502 5503 for ( ; i < l; i++ ) { 5504 elem = elems[ i ]; 5505 5506 if ( elem || elem === 0 ) { 5507 5508 // Add nodes directly 5509 if ( toType( elem ) === "object" ) { 5510 5511 // Support: Android <=4.0 only, PhantomJS 1 only 5512 // push.apply(_, arraylike) throws on ancient WebKit 5513 jQuery.merge( nodes, elem.nodeType ? [ elem ] : elem ); 5514 5515 // Convert non-html into a text node 5516 } else if ( !rhtml.test( elem ) ) { 5517 nodes.push( context.createTextNode( elem ) ); 5518 5519 // Convert html into DOM nodes 5520 } else { 5521 tmp = tmp || fragment.appendChild( context.createElement( "div" ) ); 5522 5523 // Deserialize a standard representation 5524 tag = ( rtagName.exec( elem ) || [ "", "" ] )[ 1 ].toLowerCase(); 5525 wrap = wrapMap[ tag ] || wrapMap._default; 5526 tmp.innerHTML = wrap[ 1 ] + jQuery.htmlPrefilter( elem ) + wrap[ 2 ]; 5527 5528 // Descend through wrappers to the right content 5529 j = wrap[ 0 ]; 5530 while ( j-- ) { 5531 tmp = tmp.lastChild; 5532 } 5533 5534 // Support: Android <=4.0 only, PhantomJS 1 only 5535 // push.apply(_, arraylike) throws on ancient WebKit 5536 jQuery.merge( nodes, tmp.childNodes ); 5537 5538 // Remember the top-level container 5539 tmp = fragment.firstChild; 5540 5541 // Ensure the created nodes are orphaned (trac-12392) 5542 tmp.textContent = ""; 5543 } 5544 } 5545 } 5546 5547 // Remove wrapper from fragment 5548 fragment.textContent = ""; 5549 5550 i = 0; 5551 while ( ( elem = nodes[ i++ ] ) ) { 5552 5553 // Skip elements already in the context collection (trac-4087) 5554 if ( selection && jQuery.inArray( elem, selection ) > -1 ) { 5555 if ( ignored ) { 5556 ignored.push( elem ); 5557 } 5558 continue; 5559 } 5560 5561 attached = isAttached( elem ); 5562 5563 // Append to fragment 5564 tmp = getAll( fragment.appendChild( elem ), "script" ); 5565 5566 // Preserve script evaluation history 5567 if ( attached ) { 5568 setGlobalEval( tmp ); 5569 } 5570 5571 // Capture executables 5572 if ( scripts ) { 5573 j = 0; 5574 while ( ( elem = tmp[ j++ ] ) ) { 5575 if ( rscriptType.test( elem.type || "" ) ) { 5576 scripts.push( elem ); 5577 } 5578 } 5579 } 5580 } 5581 5582 return fragment; 5583} 5584 5585 5586var rtypenamespace = /^([^.]*)(?:\.(.+)|)/; 5587 5588function returnTrue() { 5589 return true; 5590} 5591 5592function returnFalse() { 5593 return false; 5594} 5595 5596function on( elem, types, selector, data, fn, one ) { 5597 var origFn, type; 5598 5599 // Types can be a map of types/handlers 5600 if ( typeof types === "object" ) { 5601 5602 // ( types-Object, selector, data ) 5603 if ( typeof selector !== "string" ) { 5604 5605 // ( types-Object, data ) 5606 data = data || selector; 5607 selector = undefined; 5608 } 5609 for ( type in types ) { 5610 on( elem, type, selector, data, types[ type ], one ); 5611 } 5612 return elem; 5613 } 5614 5615 if ( data == null && fn == null ) { 5616 5617 // ( types, fn ) 5618 fn = selector; 5619 data = selector = undefined; 5620 } else if ( fn == null ) { 5621 if ( typeof selector === "string" ) { 5622 5623 // ( types, selector, fn ) 5624 fn = data; 5625 data = undefined; 5626 } else { 5627 5628 // ( types, data, fn ) 5629 fn = data; 5630 data = selector; 5631 selector = undefined; 5632 } 5633 } 5634 if ( fn === false ) { 5635 fn = returnFalse; 5636 } else if ( !fn ) { 5637 return elem; 5638 } 5639 5640 if ( one === 1 ) { 5641 origFn = fn; 5642 fn = function( event ) { 5643 5644 // Can use an empty set, since event contains the info 5645 jQuery().off( event ); 5646 return origFn.apply( this, arguments ); 5647 }; 5648 5649 // Use same guid so caller can remove using origFn 5650 fn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ ); 5651 } 5652 return elem.each( function() { 5653 jQuery.event.add( this, types, fn, data, selector ); 5654 } ); 5655} 5656 5657/* 5658 * Helper functions for managing events -- not part of the public interface. 5659 * Props to Dean Edwards' addEvent library for many of the ideas. 5660 */ 5661jQuery.event = { 5662 5663 global: {}, 5664 5665 add: function( elem, types, handler, data, selector ) { 5666 5667 var handleObjIn, eventHandle, tmp, 5668 events, t, handleObj, 5669 special, handlers, type, namespaces, origType, 5670 elemData = dataPriv.get( elem ); 5671 5672 // Only attach events to objects that accept data 5673 if ( !acceptData( elem ) ) { 5674 return; 5675 } 5676 5677 // Caller can pass in an object of custom data in lieu of the handler 5678 if ( handler.handler ) { 5679 handleObjIn = handler; 5680 handler = handleObjIn.handler; 5681 selector = handleObjIn.selector; 5682 } 5683 5684 // Ensure that invalid selectors throw exceptions at attach time 5685 // Evaluate against documentElement in case elem is a non-element node (e.g., document) 5686 if ( selector ) { 5687 jQuery.find.matchesSelector( documentElement, selector ); 5688 } 5689 5690 // Make sure that the handler has a unique ID, used to find/remove it later 5691 if ( !handler.guid ) { 5692 handler.guid = jQuery.guid++; 5693 } 5694 5695 // Init the element's event structure and main handler, if this is the first 5696 if ( !( events = elemData.events ) ) { 5697 events = elemData.events = Object.create( null ); 5698 } 5699 if ( !( eventHandle = elemData.handle ) ) { 5700 eventHandle = elemData.handle = function( e ) { 5701 5702 // Discard the second event of a jQuery.event.trigger() and 5703 // when an event is called after a page has unloaded 5704 return typeof jQuery !== "undefined" && jQuery.event.triggered !== e.type ? 5705 jQuery.event.dispatch.apply( elem, arguments ) : undefined; 5706 }; 5707 } 5708 5709 // Handle multiple events separated by a space 5710 types = ( types || "" ).match( rnothtmlwhite ) || [ "" ]; 5711 t = types.length; 5712 while ( t-- ) { 5713 tmp = rtypenamespace.exec( types[ t ] ) || []; 5714 type = origType = tmp[ 1 ]; 5715 namespaces = ( tmp[ 2 ] || "" ).split( "." ).sort(); 5716 5717 // There *must* be a type, no attaching namespace-only handlers 5718 if ( !type ) { 5719 continue; 5720 } 5721 5722 // If event changes its type, use the special event handlers for the changed type 5723 special = jQuery.event.special[ type ] || {}; 5724 5725 // If selector defined, determine special event api type, otherwise given type 5726 type = ( selector ? special.delegateType : special.bindType ) || type; 5727 5728 // Update special based on newly reset type 5729 special = jQuery.event.special[ type ] || {}; 5730 5731 // handleObj is passed to all event handlers 5732 handleObj = jQuery.extend( { 5733 type: type, 5734 origType: origType, 5735 data: data, 5736 handler: handler, 5737 guid: handler.guid, 5738 selector: selector, 5739 needsContext: selector && jQuery.expr.match.needsContext.test( selector ), 5740 namespace: namespaces.join( "." ) 5741 }, handleObjIn ); 5742 5743 // Init the event handler queue if we're the first 5744 if ( !( handlers = events[ type ] ) ) { 5745 handlers = events[ type ] = []; 5746 handlers.delegateCount = 0; 5747 5748 // Only use addEventListener if the special events handler returns false 5749 if ( !special.setup || 5750 special.setup.call( elem, data, namespaces, eventHandle ) === false ) { 5751 5752 if ( elem.addEventListener ) { 5753 elem.addEventListener( type, eventHandle ); 5754 } 5755 } 5756 } 5757 5758 if ( special.add ) { 5759 special.add.call( elem, handleObj ); 5760 5761 if ( !handleObj.handler.guid ) { 5762 handleObj.handler.guid = handler.guid; 5763 } 5764 } 5765 5766 // Add to the element's handler list, delegates in front 5767 if ( selector ) { 5768 handlers.splice( handlers.delegateCount++, 0, handleObj ); 5769 } else { 5770 handlers.push( handleObj ); 5771 } 5772 5773 // Keep track of which events have ever been used, for event optimization 5774 jQuery.event.global[ type ] = true; 5775 } 5776 5777 }, 5778 5779 // Detach an event or set of events from an element 5780 remove: function( elem, types, handler, selector, mappedTypes ) { 5781 5782 var j, origCount, tmp, 5783 events, t, handleObj, 5784 special, handlers, type, namespaces, origType, 5785 elemData = dataPriv.hasData( elem ) && dataPriv.get( elem ); 5786 5787 if ( !elemData || !( events = elemData.events ) ) { 5788 return; 5789 } 5790 5791 // Once for each type.namespace in types; type may be omitted 5792 types = ( types || "" ).match( rnothtmlwhite ) || [ "" ]; 5793 t = types.length; 5794 while ( t-- ) { 5795 tmp = rtypenamespace.exec( types[ t ] ) || []; 5796 type = origType = tmp[ 1 ]; 5797 namespaces = ( tmp[ 2 ] || "" ).split( "." ).sort(); 5798 5799 // Unbind all events (on this namespace, if provided) for the element 5800 if ( !type ) { 5801 for ( type in events ) { 5802 jQuery.event.remove( elem, type + types[ t ], handler, selector, true ); 5803 } 5804 continue; 5805 } 5806 5807 special = jQuery.event.special[ type ] || {}; 5808 type = ( selector ? special.delegateType : special.bindType ) || type; 5809 handlers = events[ type ] || []; 5810 tmp = tmp[ 2 ] && 5811 new RegExp( "(^|\\.)" + namespaces.join( "\\.(?:.*\\.|)" ) + "(\\.|$)" ); 5812 5813 // Remove matching events 5814 origCount = j = handlers.length; 5815 while ( j-- ) { 5816 handleObj = handlers[ j ]; 5817 5818 if ( ( mappedTypes || origType === handleObj.origType ) && 5819 ( !handler || handler.guid === handleObj.guid ) && 5820 ( !tmp || tmp.test( handleObj.namespace ) ) && 5821 ( !selector || selector === handleObj.selector || 5822 selector === "**" && handleObj.selector ) ) { 5823 handlers.splice( j, 1 ); 5824 5825 if ( handleObj.selector ) { 5826 handlers.delegateCount--; 5827 } 5828 if ( special.remove ) { 5829 special.remove.call( elem, handleObj ); 5830 } 5831 } 5832 } 5833 5834 // Remove generic event handler if we removed something and no more handlers exist 5835 // (avoids potential for endless recursion during removal of special event handlers) 5836 if ( origCount && !handlers.length ) { 5837 if ( !special.teardown || 5838 special.teardown.call( elem, namespaces, elemData.handle ) === false ) { 5839 5840 jQuery.removeEvent( elem, type, elemData.handle ); 5841 } 5842 5843 delete events[ type ]; 5844 } 5845 } 5846 5847 // Remove data and the expando if it's no longer used 5848 if ( jQuery.isEmptyObject( events ) ) { 5849 dataPriv.remove( elem, "handle events" ); 5850 } 5851 }, 5852 5853 dispatch: function( nativeEvent ) { 5854 5855 var i, j, ret, matched, handleObj, handlerQueue, 5856 args = new Array( arguments.length ), 5857 5858 // Make a writable jQuery.Event from the native event object 5859 event = jQuery.event.fix( nativeEvent ), 5860 5861 handlers = ( 5862 dataPriv.get( this, "events" ) || Object.create( null ) 5863 )[ event.type ] || [], 5864 special = jQuery.event.special[ event.type ] || {}; 5865 5866 // Use the fix-ed jQuery.Event rather than the (read-only) native event 5867 args[ 0 ] = event; 5868 5869 for ( i = 1; i < arguments.length; i++ ) { 5870 args[ i ] = arguments[ i ]; 5871 } 5872 5873 event.delegateTarget = this; 5874 5875 // Call the preDispatch hook for the mapped type, and let it bail if desired 5876 if ( special.preDispatch && special.preDispatch.call( this, event ) === false ) { 5877 return; 5878 } 5879 5880 // Determine handlers 5881 handlerQueue = jQuery.event.handlers.call( this, event, handlers ); 5882 5883 // Run delegates first; they may want to stop propagation beneath us 5884 i = 0; 5885 while ( ( matched = handlerQueue[ i++ ] ) && !event.isPropagationStopped() ) { 5886 event.currentTarget = matched.elem; 5887 5888 j = 0; 5889 while ( ( handleObj = matched.handlers[ j++ ] ) && 5890 !event.isImmediatePropagationStopped() ) { 5891 5892 // If the event is namespaced, then each handler is only invoked if it is 5893 // specially universal or its namespaces are a superset of the event's. 5894 if ( !event.rnamespace || handleObj.namespace === false || 5895 event.rnamespace.test( handleObj.namespace ) ) { 5896 5897 event.handleObj = handleObj; 5898 event.data = handleObj.data; 5899 5900 ret = ( ( jQuery.event.special[ handleObj.origType ] || {} ).handle || 5901 handleObj.handler ).apply( matched.elem, args ); 5902 5903 if ( ret !== undefined ) { 5904 if ( ( event.result = ret ) === false ) { 5905 event.preventDefault(); 5906 event.stopPropagation(); 5907 } 5908 } 5909 } 5910 } 5911 } 5912 5913 // Call the postDispatch hook for the mapped type 5914 if ( special.postDispatch ) { 5915 special.postDispatch.call( this, event ); 5916 } 5917 5918 return event.result; 5919 }, 5920 5921 handlers: function( event, handlers ) { 5922 var i, handleObj, sel, matchedHandlers, matchedSelectors, 5923 handlerQueue = [], 5924 delegateCount = handlers.delegateCount, 5925 cur = event.target; 5926 5927 // Find delegate handlers 5928 if ( delegateCount && 5929 5930 // Support: IE <=9 5931 // Black-hole SVG <use> instance trees (trac-13180) 5932 cur.nodeType && 5933 5934 // Support: Firefox <=42 5935 // Suppress spec-violating clicks indicating a non-primary pointer button (trac-3861) 5936 // https://www.w3.org/TR/DOM-Level-3-Events/#event-type-click 5937 // Support: IE 11 only 5938 // ...but not arrow key "clicks" of radio inputs, which can have `button` -1 (gh-2343) 5939 !( event.type === "click" && event.button >= 1 ) ) { 5940 5941 for ( ; cur !== this; cur = cur.parentNode || this ) { 5942 5943 // Don't check non-elements (trac-13208) 5944 // Don't process clicks on disabled elements (trac-6911, trac-8165, trac-11382, trac-11764) 5945 if ( cur.nodeType === 1 && !( event.type === "click" && cur.disabled === true ) ) { 5946 matchedHandlers = []; 5947 matchedSelectors = {}; 5948 for ( i = 0; i < delegateCount; i++ ) { 5949 handleObj = handlers[ i ]; 5950 5951 // Don't conflict with Object.prototype properties (trac-13203) 5952 sel = handleObj.selector + " "; 5953 5954 if ( matchedSelectors[ sel ] === undefined ) { 5955 matchedSelectors[ sel ] = handleObj.needsContext ? 5956 jQuery( sel, this ).index( cur ) > -1 : 5957 jQuery.find( sel, this, null, [ cur ] ).length; 5958 } 5959 if ( matchedSelectors[ sel ] ) { 5960 matchedHandlers.push( handleObj ); 5961 } 5962 } 5963 if ( matchedHandlers.length ) { 5964 handlerQueue.push( { elem: cur, handlers: matchedHandlers } ); 5965 } 5966 } 5967 } 5968 } 5969 5970 // Add the remaining (directly-bound) handlers 5971 cur = this; 5972 if ( delegateCount < handlers.length ) { 5973 handlerQueue.push( { elem: cur, handlers: handlers.slice( delegateCount ) } ); 5974 } 5975 5976 return handlerQueue; 5977 }, 5978 5979 addProp: function( name, hook ) { 5980 Object.defineProperty( jQuery.Event.prototype, name, { 5981 enumerable: true, 5982 configurable: true, 5983 5984 get: isFunction( hook ) ? 5985 function() { 5986 if ( this.originalEvent ) { 5987 return hook( this.originalEvent ); 5988 } 5989 } : 5990 function() { 5991 if ( this.originalEvent ) { 5992 return this.originalEvent[ name ]; 5993 } 5994 }, 5995 5996 set: function( value ) { 5997 Object.defineProperty( this, name, { 5998 enumerable: true, 5999 configurable: true, 6000 writable: true, 6001 value: value 6002 } ); 6003 } 6004 } ); 6005 }, 6006 6007 fix: function( originalEvent ) { 6008 return originalEvent[ jQuery.expando ] ? 6009 originalEvent : 6010 new jQuery.Event( originalEvent ); 6011 }, 6012 6013 special: { 6014 load: { 6015 6016 // Prevent triggered image.load events from bubbling to window.load 6017 noBubble: true 6018 }, 6019 click: { 6020 6021 // Utilize native event to ensure correct state for checkable inputs 6022 setup: function( data ) { 6023 6024 // For mutual compressibility with _default, replace `this` access with a local var. 6025 // `|| data` is dead code meant only to preserve the variable through minification. 6026 var el = this || data; 6027 6028 // Claim the first handler 6029 if ( rcheckableType.test( el.type ) && 6030 el.click && nodeName( el, "input" ) ) { 6031 6032 // dataPriv.set( el, "click", ... ) 6033 leverageNative( el, "click", true ); 6034 } 6035 6036 // Return false to allow normal processing in the caller 6037 return false; 6038 }, 6039 trigger: function( data ) { 6040 6041 // For mutual compressibility with _default, replace `this` access with a local var. 6042 // `|| data` is dead code meant only to preserve the variable through minification. 6043 var el = this || data; 6044 6045 // Force setup before triggering a click 6046 if ( rcheckableType.test( el.type ) && 6047 el.click && nodeName( el, "input" ) ) { 6048 6049 leverageNative( el, "click" ); 6050 } 6051 6052 // Return non-false to allow normal event-path propagation 6053 return true; 6054 }, 6055 6056 // For cross-browser consistency, suppress native .click() on links 6057 // Also prevent it if we're currently inside a leveraged native-event stack 6058 _default: function( event ) { 6059 var target = event.target; 6060 return rcheckableType.test( target.type ) && 6061 target.click && nodeName( target, "input" ) && 6062 dataPriv.get( target, "click" ) || 6063 nodeName( target, "a" ); 6064 } 6065 }, 6066 6067 beforeunload: { 6068 postDispatch: function( event ) { 6069 6070 // Support: Firefox 20+ 6071 // Firefox doesn't alert if the returnValue field is not set. 6072 if ( event.result !== undefined && event.originalEvent ) { 6073 event.originalEvent.returnValue = event.result; 6074 } 6075 } 6076 } 6077 } 6078}; 6079 6080// Ensure the presence of an event listener that handles manually-triggered 6081// synthetic events by interrupting progress until reinvoked in response to 6082// *native* events that it fires directly, ensuring that state changes have 6083// already occurred before other listeners are invoked. 6084function leverageNative( el, type, isSetup ) { 6085 6086 // Missing `isSetup` indicates a trigger call, which must force setup through jQuery.event.add 6087 if ( !isSetup ) { 6088 if ( dataPriv.get( el, type ) === undefined ) { 6089 jQuery.event.add( el, type, returnTrue ); 6090 } 6091 return; 6092 } 6093 6094 // Register the controller as a special universal handler for all event namespaces 6095 dataPriv.set( el, type, false ); 6096 jQuery.event.add( el, type, { 6097 namespace: false, 6098 handler: function( event ) { 6099 var result, 6100 saved = dataPriv.get( this, type ); 6101 6102 if ( ( event.isTrigger & 1 ) && this[ type ] ) { 6103 6104 // Interrupt processing of the outer synthetic .trigger()ed event 6105 if ( !saved ) { 6106 6107 // Store arguments for use when handling the inner native event 6108 // There will always be at least one argument (an event object), so this array 6109 // will not be confused with a leftover capture object. 6110 saved = slice.call( arguments ); 6111 dataPriv.set( this, type, saved ); 6112 6113 // Trigger the native event and capture its result 6114 this[ type ](); 6115 result = dataPriv.get( this, type ); 6116 dataPriv.set( this, type, false ); 6117 6118 if ( saved !== result ) { 6119 6120 // Cancel the outer synthetic event 6121 event.stopImmediatePropagation(); 6122 event.preventDefault(); 6123 6124 return result; 6125 } 6126 6127 // If this is an inner synthetic event for an event with a bubbling surrogate 6128 // (focus or blur), assume that the surrogate already propagated from triggering 6129 // the native event and prevent that from happening again here. 6130 // This technically gets the ordering wrong w.r.t. to `.trigger()` (in which the 6131 // bubbling surrogate propagates *after* the non-bubbling base), but that seems 6132 // less bad than duplication. 6133 } else if ( ( jQuery.event.special[ type ] || {} ).delegateType ) { 6134 event.stopPropagation(); 6135 } 6136 6137 // If this is a native event triggered above, everything is now in order 6138 // Fire an inner synthetic event with the original arguments 6139 } else if ( saved ) { 6140 6141 // ...and capture the result 6142 dataPriv.set( this, type, jQuery.event.trigger( 6143 saved[ 0 ], 6144 saved.slice( 1 ), 6145 this 6146 ) ); 6147 6148 // Abort handling of the native event by all jQuery handlers while allowing 6149 // native handlers on the same element to run. On target, this is achieved 6150 // by stopping immediate propagation just on the jQuery event. However, 6151 // the native event is re-wrapped by a jQuery one on each level of the 6152 // propagation so the only way to stop it for jQuery is to stop it for 6153 // everyone via native `stopPropagation()`. This is not a problem for 6154 // focus/blur which don't bubble, but it does also stop click on checkboxes 6155 // and radios. We accept this limitation. 6156 event.stopPropagation(); 6157 event.isImmediatePropagationStopped = returnTrue; 6158 } 6159 } 6160 } ); 6161} 6162 6163jQuery.removeEvent = function( elem, type, handle ) { 6164 6165 // This "if" is needed for plain objects 6166 if ( elem.removeEventListener ) { 6167 elem.removeEventListener( type, handle ); 6168 } 6169}; 6170 6171jQuery.Event = function( src, props ) { 6172 6173 // Allow instantiation without the 'new' keyword 6174 if ( !( this instanceof jQuery.Event ) ) { 6175 return new jQuery.Event( src, props ); 6176 } 6177 6178 // Event object 6179 if ( src && src.type ) { 6180 this.originalEvent = src; 6181 this.type = src.type; 6182 6183 // Events bubbling up the document may have been marked as prevented 6184 // by a handler lower down the tree; reflect the correct value. 6185 this.isDefaultPrevented = src.defaultPrevented || 6186 src.defaultPrevented === undefined && 6187 6188 // Support: Android <=2.3 only 6189 src.returnValue === false ? 6190 returnTrue : 6191 returnFalse; 6192 6193 // Create target properties 6194 // Support: Safari <=6 - 7 only 6195 // Target should not be a text node (trac-504, trac-13143) 6196 this.target = ( src.target && src.target.nodeType === 3 ) ? 6197 src.target.parentNode : 6198 src.target; 6199 6200 this.currentTarget = src.currentTarget; 6201 this.relatedTarget = src.relatedTarget; 6202 6203 // Event type 6204 } else { 6205 this.type = src; 6206 } 6207 6208 // Put explicitly provided properties onto the event object 6209 if ( props ) { 6210 jQuery.extend( this, props ); 6211 } 6212 6213 // Create a timestamp if incoming event doesn't have one 6214 this.timeStamp = src && src.timeStamp || Date.now(); 6215 6216 // Mark it as fixed 6217 this[ jQuery.expando ] = true; 6218}; 6219 6220// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding 6221// https://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html 6222jQuery.Event.prototype = { 6223 constructor: jQuery.Event, 6224 isDefaultPrevented: returnFalse, 6225 isPropagationStopped: returnFalse, 6226 isImmediatePropagationStopped: returnFalse, 6227 isSimulated: false, 6228 6229 preventDefault: function() { 6230 var e = this.originalEvent; 6231 6232 this.isDefaultPrevented = returnTrue; 6233 6234 if ( e && !this.isSimulated ) { 6235 e.preventDefault(); 6236 } 6237 }, 6238 stopPropagation: function() { 6239 var e = this.originalEvent; 6240 6241 this.isPropagationStopped = returnTrue; 6242 6243 if ( e && !this.isSimulated ) { 6244 e.stopPropagation(); 6245 } 6246 }, 6247 stopImmediatePropagation: function() { 6248 var e = this.originalEvent; 6249 6250 this.isImmediatePropagationStopped = returnTrue; 6251 6252 if ( e && !this.isSimulated ) { 6253 e.stopImmediatePropagation(); 6254 } 6255 6256 this.stopPropagation(); 6257 } 6258}; 6259 6260// Includes all common event props including KeyEvent and MouseEvent specific props 6261jQuery.each( { 6262 altKey: true, 6263 bubbles: true, 6264 cancelable: true, 6265 changedTouches: true, 6266 ctrlKey: true, 6267 detail: true, 6268 eventPhase: true, 6269 metaKey: true, 6270 pageX: true, 6271 pageY: true, 6272 shiftKey: true, 6273 view: true, 6274 "char": true, 6275 code: true, 6276 charCode: true, 6277 key: true, 6278 keyCode: true, 6279 button: true, 6280 buttons: true, 6281 clientX: true, 6282 clientY: true, 6283 offsetX: true, 6284 offsetY: true, 6285 pointerId: true, 6286 pointerType: true, 6287 screenX: true, 6288 screenY: true, 6289 targetTouches: true, 6290 toElement: true, 6291 touches: true, 6292 which: true 6293}, jQuery.event.addProp ); 6294 6295jQuery.each( { focus: "focusin", blur: "focusout" }, function( type, delegateType ) { 6296 6297 function focusMappedHandler( nativeEvent ) { 6298 if ( document.documentMode ) { 6299 6300 // Support: IE 11+ 6301 // Attach a single focusin/focusout handler on the document while someone wants 6302 // focus/blur. This is because the former are synchronous in IE while the latter 6303 // are async. In other browsers, all those handlers are invoked synchronously. 6304 6305 // `handle` from private data would already wrap the event, but we need 6306 // to change the `type` here. 6307 var handle = dataPriv.get( this, "handle" ), 6308 event = jQuery.event.fix( nativeEvent ); 6309 event.type = nativeEvent.type === "focusin" ? "focus" : "blur"; 6310 event.isSimulated = true; 6311 6312 // First, handle focusin/focusout 6313 handle( nativeEvent ); 6314 6315 // ...then, handle focus/blur 6316 // 6317 // focus/blur don't bubble while focusin/focusout do; simulate the former by only 6318 // invoking the handler at the lower level. 6319 if ( event.target === event.currentTarget ) { 6320 6321 // The setup part calls `leverageNative`, which, in turn, calls 6322 // `jQuery.event.add`, so event handle will already have been set 6323 // by this point. 6324 handle( event ); 6325 } 6326 } else { 6327 6328 // For non-IE browsers, attach a single capturing handler on the document 6329 // while someone wants focusin/focusout. 6330 jQuery.event.simulate( delegateType, nativeEvent.target, 6331 jQuery.event.fix( nativeEvent ) ); 6332 } 6333 } 6334 6335 jQuery.event.special[ type ] = { 6336 6337 // Utilize native event if possible so blur/focus sequence is correct 6338 setup: function() { 6339 6340 var attaches; 6341 6342 // Claim the first handler 6343 // dataPriv.set( this, "focus", ... ) 6344 // dataPriv.set( this, "blur", ... ) 6345 leverageNative( this, type, true ); 6346 6347 if ( document.documentMode ) { 6348 6349 // Support: IE 9 - 11+ 6350 // We use the same native handler for focusin & focus (and focusout & blur) 6351 // so we need to coordinate setup & teardown parts between those events. 6352 // Use `delegateType` as the key as `type` is already used by `leverageNative`. 6353 attaches = dataPriv.get( this, delegateType ); 6354 if ( !attaches ) { 6355 this.addEventListener( delegateType, focusMappedHandler ); 6356 } 6357 dataPriv.set( this, delegateType, ( attaches || 0 ) + 1 ); 6358 } else { 6359 6360 // Return false to allow normal processing in the caller 6361 return false; 6362 } 6363 }, 6364 trigger: function() { 6365 6366 // Force setup before trigger 6367 leverageNative( this, type ); 6368 6369 // Return non-false to allow normal event-path propagation 6370 return true; 6371 }, 6372 6373 teardown: function() { 6374 var attaches; 6375 6376 if ( document.documentMode ) { 6377 attaches = dataPriv.get( this, delegateType ) - 1; 6378 if ( !attaches ) { 6379 this.removeEventListener( delegateType, focusMappedHandler ); 6380 dataPriv.remove( this, delegateType ); 6381 } else { 6382 dataPriv.set( this, delegateType, attaches ); 6383 } 6384 } else { 6385 6386 // Return false to indicate standard teardown should be applied 6387 return false; 6388 } 6389 }, 6390 6391 // Suppress native focus or blur if we're currently inside 6392 // a leveraged native-event stack 6393 _default: function( event ) { 6394 return dataPriv.get( event.target, type ); 6395 }, 6396 6397 delegateType: delegateType 6398 }; 6399 6400 // Support: Firefox <=44 6401 // Firefox doesn't have focus(in | out) events 6402 // Related ticket - https://bugzilla.mozilla.org/show_bug.cgi?id=687787 6403 // 6404 // Support: Chrome <=48 - 49, Safari <=9.0 - 9.1 6405 // focus(in | out) events fire after focus & blur events, 6406 // which is spec violation - http://www.w3.org/TR/DOM-Level-3-Events/#events-focusevent-event-order 6407 // Related ticket - https://bugs.chromium.org/p/chromium/issues/detail?id=449857 6408 // 6409 // Support: IE 9 - 11+ 6410 // To preserve relative focusin/focus & focusout/blur event order guaranteed on the 3.x branch, 6411 // attach a single handler for both events in IE. 6412 jQuery.event.special[ delegateType ] = { 6413 setup: function() { 6414 6415 // Handle: regular nodes (via `this.ownerDocument`), window 6416 // (via `this.document`) & document (via `this`). 6417 var doc = this.ownerDocument || this.document || this, 6418 dataHolder = document.documentMode ? this : doc, 6419 attaches = dataPriv.get( dataHolder, delegateType ); 6420 6421 // Support: IE 9 - 11+ 6422 // We use the same native handler for focusin & focus (and focusout & blur) 6423 // so we need to coordinate setup & teardown parts between those events. 6424 // Use `delegateType` as the key as `type` is already used by `leverageNative`. 6425 if ( !attaches ) { 6426 if ( document.documentMode ) { 6427 this.addEventListener( delegateType, focusMappedHandler ); 6428 } else { 6429 doc.addEventListener( type, focusMappedHandler, true ); 6430 } 6431 } 6432 dataPriv.set( dataHolder, delegateType, ( attaches || 0 ) + 1 ); 6433 }, 6434 teardown: function() { 6435 var doc = this.ownerDocument || this.document || this, 6436 dataHolder = document.documentMode ? this : doc, 6437 attaches = dataPriv.get( dataHolder, delegateType ) - 1; 6438 6439 if ( !attaches ) { 6440 if ( document.documentMode ) { 6441 this.removeEventListener( delegateType, focusMappedHandler ); 6442 } else { 6443 doc.removeEventListener( type, focusMappedHandler, true ); 6444 } 6445 dataPriv.remove( dataHolder, delegateType ); 6446 } else { 6447 dataPriv.set( dataHolder, delegateType, attaches ); 6448 } 6449 } 6450 }; 6451} ); 6452 6453// Create mouseenter/leave events using mouseover/out and event-time checks 6454// so that event delegation works in jQuery. 6455// Do the same for pointerenter/pointerleave and pointerover/pointerout 6456// 6457// Support: Safari 7 only 6458// Safari sends mouseenter too often; see: 6459// https://bugs.chromium.org/p/chromium/issues/detail?id=470258 6460// for the description of the bug (it existed in older Chrome versions as well). 6461jQuery.each( { 6462 mouseenter: "mouseover", 6463 mouseleave: "mouseout", 6464 pointerenter: "pointerover", 6465 pointerleave: "pointerout" 6466}, function( orig, fix ) { 6467 jQuery.event.special[ orig ] = { 6468 delegateType: fix, 6469 bindType: fix, 6470 6471 handle: function( event ) { 6472 var ret, 6473 target = this, 6474 related = event.relatedTarget, 6475 handleObj = event.handleObj; 6476 6477 // For mouseenter/leave call the handler if related is outside the target. 6478 // NB: No relatedTarget if the mouse left/entered the browser window 6479 if ( !related || ( related !== target && !jQuery.contains( target, related ) ) ) { 6480 event.type = handleObj.origType; 6481 ret = handleObj.handler.apply( this, arguments ); 6482 event.type = fix; 6483 } 6484 return ret; 6485 } 6486 }; 6487} ); 6488 6489jQuery.fn.extend( { 6490 6491 on: function( types, selector, data, fn ) { 6492 return on( this, types, selector, data, fn ); 6493 }, 6494 one: function( types, selector, data, fn ) { 6495 return on( this, types, selector, data, fn, 1 ); 6496 }, 6497 off: function( types, selector, fn ) { 6498 var handleObj, type; 6499 if ( types && types.preventDefault && types.handleObj ) { 6500 6501 // ( event ) dispatched jQuery.Event 6502 handleObj = types.handleObj; 6503 jQuery( types.delegateTarget ).off( 6504 handleObj.namespace ? 6505 handleObj.origType + "." + handleObj.namespace : 6506 handleObj.origType, 6507 handleObj.selector, 6508 handleObj.handler 6509 ); 6510 return this; 6511 } 6512 if ( typeof types === "object" ) { 6513 6514 // ( types-object [, selector] ) 6515 for ( type in types ) { 6516 this.off( type, selector, types[ type ] ); 6517 } 6518 return this; 6519 } 6520 if ( selector === false || typeof selector === "function" ) { 6521 6522 // ( types [, fn] ) 6523 fn = selector; 6524 selector = undefined; 6525 } 6526 if ( fn === false ) { 6527 fn = returnFalse; 6528 } 6529 return this.each( function() { 6530 jQuery.event.remove( this, types, fn, selector ); 6531 } ); 6532 } 6533} ); 6534 6535 6536var 6537 6538 // Support: IE <=10 - 11, Edge 12 - 13 only 6539 // In IE/Edge using regex groups here causes severe slowdowns. 6540 // See https://connect.microsoft.com/IE/feedback/details/1736512/ 6541 rnoInnerhtml = /<script|<style|<link/i, 6542 6543 // checked="checked" or checked 6544 rchecked = /checked\s*(?:[^=]|=\s*.checked.)/i, 6545 6546 rcleanScript = /^\s*<!\[CDATA\[|\]\]>\s*$/g; 6547 6548// Prefer a tbody over its parent table for containing new rows 6549function manipulationTarget( elem, content ) { 6550 if ( nodeName( elem, "table" ) && 6551 nodeName( content.nodeType !== 11 ? content : content.firstChild, "tr" ) ) { 6552 6553 return jQuery( elem ).children( "tbody" )[ 0 ] || elem; 6554 } 6555 6556 return elem; 6557} 6558 6559// Replace/restore the type attribute of script elements for safe DOM manipulation 6560function disableScript( elem ) { 6561 elem.type = ( elem.getAttribute( "type" ) !== null ) + "/" + elem.type; 6562 return elem; 6563} 6564function restoreScript( elem ) { 6565 if ( ( elem.type || "" ).slice( 0, 5 ) === "true/" ) { 6566 elem.type = elem.type.slice( 5 ); 6567 } else { 6568 elem.removeAttribute( "type" ); 6569 } 6570 6571 return elem; 6572} 6573 6574function cloneCopyEvent( src, dest ) { 6575 var i, l, type, pdataOld, udataOld, udataCur, events; 6576 6577 if ( dest.nodeType !== 1 ) { 6578 return; 6579 } 6580 6581 // 1. Copy private data: events, handlers, etc. 6582 if ( dataPriv.hasData( src ) ) { 6583 pdataOld = dataPriv.get( src ); 6584 events = pdataOld.events; 6585 6586 if ( events ) { 6587 dataPriv.remove( dest, "handle events" ); 6588 6589 for ( type in events ) { 6590 for ( i = 0, l = events[ type ].length; i < l; i++ ) { 6591 jQuery.event.add( dest, type, events[ type ][ i ] ); 6592 } 6593 } 6594 } 6595 } 6596 6597 // 2. Copy user data 6598 if ( dataUser.hasData( src ) ) { 6599 udataOld = dataUser.access( src ); 6600 udataCur = jQuery.extend( {}, udataOld ); 6601 6602 dataUser.set( dest, udataCur ); 6603 } 6604} 6605 6606// Fix IE bugs, see support tests 6607function fixInput( src, dest ) { 6608 var nodeName = dest.nodeName.toLowerCase(); 6609 6610 // Fails to persist the checked state of a cloned checkbox or radio button. 6611 if ( nodeName === "input" && rcheckableType.test( src.type ) ) { 6612 dest.checked = src.checked; 6613 6614 // Fails to return the selected option to the default selected state when cloning options 6615 } else if ( nodeName === "input" || nodeName === "textarea" ) { 6616 dest.defaultValue = src.defaultValue; 6617 } 6618} 6619 6620function domManip( collection, args, callback, ignored ) { 6621 6622 // Flatten any nested arrays 6623 args = flat( args ); 6624 6625 var fragment, first, scripts, hasScripts, node, doc, 6626 i = 0, 6627 l = collection.length, 6628 iNoClone = l - 1, 6629 value = args[ 0 ], 6630 valueIsFunction = isFunction( value ); 6631 6632 // We can't cloneNode fragments that contain checked, in WebKit 6633 if ( valueIsFunction || 6634 ( l > 1 && typeof value === "string" && 6635 !support.checkClone && rchecked.test( value ) ) ) { 6636 return collection.each( function( index ) { 6637 var self = collection.eq( index ); 6638 if ( valueIsFunction ) { 6639 args[ 0 ] = value.call( this, index, self.html() ); 6640 } 6641 domManip( self, args, callback, ignored ); 6642 } ); 6643 } 6644 6645 if ( l ) { 6646 fragment = buildFragment( args, collection[ 0 ].ownerDocument, false, collection, ignored ); 6647 first = fragment.firstChild; 6648 6649 if ( fragment.childNodes.length === 1 ) { 6650 fragment = first; 6651 } 6652 6653 // Require either new content or an interest in ignored elements to invoke the callback 6654 if ( first || ignored ) { 6655 scripts = jQuery.map( getAll( fragment, "script" ), disableScript ); 6656 hasScripts = scripts.length; 6657 6658 // Use the original fragment for the last item 6659 // instead of the first because it can end up 6660 // being emptied incorrectly in certain situations (trac-8070). 6661 for ( ; i < l; i++ ) { 6662 node = fragment; 6663 6664 if ( i !== iNoClone ) { 6665 node = jQuery.clone( node, true, true ); 6666 6667 // Keep references to cloned scripts for later restoration 6668 if ( hasScripts ) { 6669 6670 // Support: Android <=4.0 only, PhantomJS 1 only 6671 // push.apply(_, arraylike) throws on ancient WebKit 6672 jQuery.merge( scripts, getAll( node, "script" ) ); 6673 } 6674 } 6675 6676 callback.call( collection[ i ], node, i ); 6677 } 6678 6679 if ( hasScripts ) { 6680 doc = scripts[ scripts.length - 1 ].ownerDocument; 6681 6682 // Re-enable scripts 6683 jQuery.map( scripts, restoreScript ); 6684 6685 // Evaluate executable scripts on first document insertion 6686 for ( i = 0; i < hasScripts; i++ ) { 6687 node = scripts[ i ]; 6688 if ( rscriptType.test( node.type || "" ) && 6689 !dataPriv.access( node, "globalEval" ) && 6690 jQuery.contains( doc, node ) ) { 6691 6692 if ( node.src && ( node.type || "" ).toLowerCase() !== "module" ) { 6693 6694 // Optional AJAX dependency, but won't run scripts if not present 6695 if ( jQuery._evalUrl && !node.noModule ) { 6696 jQuery._evalUrl( node.src, { 6697 nonce: node.nonce || node.getAttribute( "nonce" ) 6698 }, doc ); 6699 } 6700 } else { 6701 6702 // Unwrap a CDATA section containing script contents. This shouldn't be 6703 // needed as in XML documents they're already not visible when 6704 // inspecting element contents and in HTML documents they have no 6705 // meaning but we're preserving that logic for backwards compatibility. 6706 // This will be removed completely in 4.0. See gh-4904. 6707 DOMEval( node.textContent.replace( rcleanScript, "" ), node, doc ); 6708 } 6709 } 6710 } 6711 } 6712 } 6713 } 6714 6715 return collection; 6716} 6717 6718function remove( elem, selector, keepData ) { 6719 var node, 6720 nodes = selector ? jQuery.filter( selector, elem ) : elem, 6721 i = 0; 6722 6723 for ( ; ( node = nodes[ i ] ) != null; i++ ) { 6724 if ( !keepData && node.nodeType === 1 ) { 6725 jQuery.cleanData( getAll( node ) ); 6726 } 6727 6728 if ( node.parentNode ) { 6729 if ( keepData && isAttached( node ) ) { 6730 setGlobalEval( getAll( node, "script" ) ); 6731 } 6732 node.parentNode.removeChild( node ); 6733 } 6734 } 6735 6736 return elem; 6737} 6738 6739jQuery.extend( { 6740 htmlPrefilter: function( html ) { 6741 return html; 6742 }, 6743 6744 clone: function( elem, dataAndEvents, deepDataAndEvents ) { 6745 var i, l, srcElements, destElements, 6746 clone = elem.cloneNode( true ), 6747 inPage = isAttached( elem ); 6748 6749 // Fix IE cloning issues 6750 if ( !support.noCloneChecked && ( elem.nodeType === 1 || elem.nodeType === 11 ) && 6751 !jQuery.isXMLDoc( elem ) ) { 6752 6753 // We eschew jQuery#find here for performance reasons: 6754 // https://jsperf.com/getall-vs-sizzle/2 6755 destElements = getAll( clone ); 6756 srcElements = getAll( elem ); 6757 6758 for ( i = 0, l = srcElements.length; i < l; i++ ) { 6759 fixInput( srcElements[ i ], destElements[ i ] ); 6760 } 6761 } 6762 6763 // Copy the events from the original to the clone 6764 if ( dataAndEvents ) { 6765 if ( deepDataAndEvents ) { 6766 srcElements = srcElements || getAll( elem ); 6767 destElements = destElements || getAll( clone ); 6768 6769 for ( i = 0, l = srcElements.length; i < l; i++ ) { 6770 cloneCopyEvent( srcElements[ i ], destElements[ i ] ); 6771 } 6772 } else { 6773 cloneCopyEvent( elem, clone ); 6774 } 6775 } 6776 6777 // Preserve script evaluation history 6778 destElements = getAll( clone, "script" ); 6779 if ( destElements.length > 0 ) { 6780 setGlobalEval( destElements, !inPage && getAll( elem, "script" ) ); 6781 } 6782 6783 // Return the cloned set 6784 return clone; 6785 }, 6786 6787 cleanData: function( elems ) { 6788 var data, elem, type, 6789 special = jQuery.event.special, 6790 i = 0; 6791 6792 for ( ; ( elem = elems[ i ] ) !== undefined; i++ ) { 6793 if ( acceptData( elem ) ) { 6794 if ( ( data = elem[ dataPriv.expando ] ) ) { 6795 if ( data.events ) { 6796 for ( type in data.events ) { 6797 if ( special[ type ] ) { 6798 jQuery.event.remove( elem, type ); 6799 6800 // This is a shortcut to avoid jQuery.event.remove's overhead 6801 } else { 6802 jQuery.removeEvent( elem, type, data.handle ); 6803 } 6804 } 6805 } 6806 6807 // Support: Chrome <=35 - 45+ 6808 // Assign undefined instead of using delete, see Data#remove 6809 elem[ dataPriv.expando ] = undefined; 6810 } 6811 if ( elem[ dataUser.expando ] ) { 6812 6813 // Support: Chrome <=35 - 45+ 6814 // Assign undefined instead of using delete, see Data#remove 6815 elem[ dataUser.expando ] = undefined; 6816 } 6817 } 6818 } 6819 } 6820} ); 6821 6822jQuery.fn.extend( { 6823 detach: function( selector ) { 6824 return remove( this, selector, true ); 6825 }, 6826 6827 remove: function( selector ) { 6828 return remove( this, selector ); 6829 }, 6830 6831 text: function( value ) { 6832 return access( this, function( value ) { 6833 return value === undefined ? 6834 jQuery.text( this ) : 6835 this.empty().each( function() { 6836 if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { 6837 this.textContent = value; 6838 } 6839 } ); 6840 }, null, value, arguments.length ); 6841 }, 6842 6843 append: function() { 6844 return domManip( this, arguments, function( elem ) { 6845 if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { 6846 var target = manipulationTarget( this, elem ); 6847 target.appendChild( elem ); 6848 } 6849 } ); 6850 }, 6851 6852 prepend: function() { 6853 return domManip( this, arguments, function( elem ) { 6854 if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { 6855 var target = manipulationTarget( this, elem ); 6856 target.insertBefore( elem, target.firstChild ); 6857 } 6858 } ); 6859 }, 6860 6861 before: function() { 6862 return domManip( this, arguments, function( elem ) { 6863 if ( this.parentNode ) { 6864 this.parentNode.insertBefore( elem, this ); 6865 } 6866 } ); 6867 }, 6868 6869 after: function() { 6870 return domManip( this, arguments, function( elem ) { 6871 if ( this.parentNode ) { 6872 this.parentNode.insertBefore( elem, this.nextSibling ); 6873 } 6874 } ); 6875 }, 6876 6877 empty: function() { 6878 var elem, 6879 i = 0; 6880 6881 for ( ; ( elem = this[ i ] ) != null; i++ ) { 6882 if ( elem.nodeType === 1 ) { 6883 6884 // Prevent memory leaks 6885 jQuery.cleanData( getAll( elem, false ) ); 6886 6887 // Remove any remaining nodes 6888 elem.textContent = ""; 6889 } 6890 } 6891 6892 return this; 6893 }, 6894 6895 clone: function( dataAndEvents, deepDataAndEvents ) { 6896 dataAndEvents = dataAndEvents == null ? false : dataAndEvents; 6897 deepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents; 6898 6899 return this.map( function() { 6900 return jQuery.clone( this, dataAndEvents, deepDataAndEvents ); 6901 } ); 6902 }, 6903 6904 html: function( value ) { 6905 return access( this, function( value ) { 6906 var elem = this[ 0 ] || {}, 6907 i = 0, 6908 l = this.length; 6909 6910 if ( value === undefined && elem.nodeType === 1 ) { 6911 return elem.innerHTML; 6912 } 6913 6914 // See if we can take a shortcut and just use innerHTML 6915 if ( typeof value === "string" && !rnoInnerhtml.test( value ) && 6916 !wrapMap[ ( rtagName.exec( value ) || [ "", "" ] )[ 1 ].toLowerCase() ] ) { 6917 6918 value = jQuery.htmlPrefilter( value ); 6919 6920 try { 6921 for ( ; i < l; i++ ) { 6922 elem = this[ i ] || {}; 6923 6924 // Remove element nodes and prevent memory leaks 6925 if ( elem.nodeType === 1 ) { 6926 jQuery.cleanData( getAll( elem, false ) ); 6927 elem.innerHTML = value; 6928 } 6929 } 6930 6931 elem = 0; 6932 6933 // If using innerHTML throws an exception, use the fallback method 6934 } catch ( e ) {} 6935 } 6936 6937 if ( elem ) { 6938 this.empty().append( value ); 6939 } 6940 }, null, value, arguments.length ); 6941 }, 6942 6943 replaceWith: function() { 6944 var ignored = []; 6945 6946 // Make the changes, replacing each non-ignored context element with the new content 6947 return domManip( this, arguments, function( elem ) { 6948 var parent = this.parentNode; 6949 6950 if ( jQuery.inArray( this, ignored ) < 0 ) { 6951 jQuery.cleanData( getAll( this ) ); 6952 if ( parent ) { 6953 parent.replaceChild( elem, this ); 6954 } 6955 } 6956 6957 // Force callback invocation 6958 }, ignored ); 6959 } 6960} ); 6961 6962jQuery.each( { 6963 appendTo: "append", 6964 prependTo: "prepend", 6965 insertBefore: "before", 6966 insertAfter: "after", 6967 replaceAll: "replaceWith" 6968}, function( name, original ) { 6969 jQuery.fn[ name ] = function( selector ) { 6970 var elems, 6971 ret = [], 6972 insert = jQuery( selector ), 6973 last = insert.length - 1, 6974 i = 0; 6975 6976 for ( ; i <= last; i++ ) { 6977 elems = i === last ? this : this.clone( true ); 6978 jQuery( insert[ i ] )[ original ]( elems ); 6979 6980 // Support: Android <=4.0 only, PhantomJS 1 only 6981 // .get() because push.apply(_, arraylike) throws on ancient WebKit 6982 push.apply( ret, elems.get() ); 6983 } 6984 6985 return this.pushStack( ret ); 6986 }; 6987} ); 6988var rnumnonpx = new RegExp( "^(" + pnum + ")(?!px)[a-z%]+$", "i" ); 6989 6990var rcustomProp = /^--/; 6991 6992 6993var getStyles = function( elem ) { 6994 6995 // Support: IE <=11 only, Firefox <=30 (trac-15098, trac-14150) 6996 // IE throws on elements created in popups 6997 // FF meanwhile throws on frame elements through "defaultView.getComputedStyle" 6998 var view = elem.ownerDocument.defaultView; 6999 7000 if ( !view || !view.opener ) { 7001 view = window; 7002 } 7003 7004 return view.getComputedStyle( elem ); 7005 }; 7006 7007var swap = function( elem, options, callback ) { 7008 var ret, name, 7009 old = {}; 7010 7011 // Remember the old values, and insert the new ones 7012 for ( name in options ) { 7013 old[ name ] = elem.style[ name ]; 7014 elem.style[ name ] = options[ name ]; 7015 } 7016 7017 ret = callback.call( elem ); 7018 7019 // Revert the old values 7020 for ( name in options ) { 7021 elem.style[ name ] = old[ name ]; 7022 } 7023 7024 return ret; 7025}; 7026 7027 7028var rboxStyle = new RegExp( cssExpand.join( "|" ), "i" ); 7029 7030 7031 7032( function() { 7033 7034 // Executing both pixelPosition & boxSizingReliable tests require only one layout 7035 // so they're executed at the same time to save the second computation. 7036 function computeStyleTests() { 7037 7038 // This is a singleton, we need to execute it only once 7039 if ( !div ) { 7040 return; 7041 } 7042 7043 container.style.cssText = "position:absolute;left:-11111px;width:60px;" + 7044 "margin-top:1px;padding:0;border:0"; 7045 div.style.cssText = 7046 "position:relative;display:block;box-sizing:border-box;overflow:scroll;" + 7047 "margin:auto;border:1px;padding:1px;" + 7048 "width:60%;top:1%"; 7049 documentElement.appendChild( container ).appendChild( div ); 7050 7051 var divStyle = window.getComputedStyle( div ); 7052 pixelPositionVal = divStyle.top !== "1%"; 7053 7054 // Support: Android 4.0 - 4.3 only, Firefox <=3 - 44 7055 reliableMarginLeftVal = roundPixelMeasures( divStyle.marginLeft ) === 12; 7056 7057 // Support: Android 4.0 - 4.3 only, Safari <=9.1 - 10.1, iOS <=7.0 - 9.3 7058 // Some styles come back with percentage values, even though they shouldn't 7059 div.style.right = "60%"; 7060 pixelBoxStylesVal = roundPixelMeasures( divStyle.right ) === 36; 7061 7062 // Support: IE 9 - 11 only 7063 // Detect misreporting of content dimensions for box-sizing:border-box elements 7064 boxSizingReliableVal = roundPixelMeasures( divStyle.width ) === 36; 7065 7066 // Support: IE 9 only 7067 // Detect overflow:scroll screwiness (gh-3699) 7068 // Support: Chrome <=64 7069 // Don't get tricked when zoom affects offsetWidth (gh-4029) 7070 div.style.position = "absolute"; 7071 scrollboxSizeVal = roundPixelMeasures( div.offsetWidth / 3 ) === 12; 7072 7073 documentElement.removeChild( container ); 7074 7075 // Nullify the div so it wouldn't be stored in the memory and 7076 // it will also be a sign that checks already performed 7077 div = null; 7078 } 7079 7080 function roundPixelMeasures( measure ) { 7081 return Math.round( parseFloat( measure ) ); 7082 } 7083 7084 var pixelPositionVal, boxSizingReliableVal, scrollboxSizeVal, pixelBoxStylesVal, 7085 reliableTrDimensionsVal, reliableMarginLeftVal, 7086 container = document.createElement( "div" ), 7087 div = document.createElement( "div" ); 7088 7089 // Finish early in limited (non-browser) environments 7090 if ( !div.style ) { 7091 return; 7092 } 7093 7094 // Support: IE <=9 - 11 only 7095 // Style of cloned element affects source element cloned (trac-8908) 7096 div.style.backgroundClip = "content-box"; 7097 div.cloneNode( true ).style.backgroundClip = ""; 7098 support.clearCloneStyle = div.style.backgroundClip === "content-box"; 7099 7100 jQuery.extend( support, { 7101 boxSizingReliable: function() { 7102 computeStyleTests(); 7103 return boxSizingReliableVal; 7104 }, 7105 pixelBoxStyles: function() { 7106 computeStyleTests(); 7107 return pixelBoxStylesVal; 7108 }, 7109 pixelPosition: function() { 7110 computeStyleTests(); 7111 return pixelPositionVal; 7112 }, 7113 reliableMarginLeft: function() { 7114 computeStyleTests(); 7115 return reliableMarginLeftVal; 7116 }, 7117 scrollboxSize: function() { 7118 computeStyleTests(); 7119 return scrollboxSizeVal; 7120 }, 7121 7122 // Support: IE 9 - 11+, Edge 15 - 18+ 7123 // IE/Edge misreport `getComputedStyle` of table rows with width/height 7124 // set in CSS while `offset*` properties report correct values. 7125 // Behavior in IE 9 is more subtle than in newer versions & it passes 7126 // some versions of this test; make sure not to make it pass there! 7127 // 7128 // Support: Firefox 70+ 7129 // Only Firefox includes border widths 7130 // in computed dimensions. (gh-4529) 7131 reliableTrDimensions: function() { 7132 var table, tr, trChild, trStyle; 7133 if ( reliableTrDimensionsVal == null ) { 7134 table = document.createElement( "table" ); 7135 tr = document.createElement( "tr" ); 7136 trChild = document.createElement( "div" ); 7137 7138 table.style.cssText = "position:absolute;left:-11111px;border-collapse:separate"; 7139 tr.style.cssText = "box-sizing:content-box;border:1px solid"; 7140 7141 // Support: Chrome 86+ 7142 // Height set through cssText does not get applied. 7143 // Computed height then comes back as 0. 7144 tr.style.height = "1px"; 7145 trChild.style.height = "9px"; 7146 7147 // Support: Android 8 Chrome 86+ 7148 // In our bodyBackground.html iframe, 7149 // display for all div elements is set to "inline", 7150 // which causes a problem only in Android 8 Chrome 86. 7151 // Ensuring the div is `display: block` 7152 // gets around this issue. 7153 trChild.style.display = "block"; 7154 7155 documentElement 7156 .appendChild( table ) 7157 .appendChild( tr ) 7158 .appendChild( trChild ); 7159 7160 trStyle = window.getComputedStyle( tr ); 7161 reliableTrDimensionsVal = ( parseInt( trStyle.height, 10 ) + 7162 parseInt( trStyle.borderTopWidth, 10 ) + 7163 parseInt( trStyle.borderBottomWidth, 10 ) ) === tr.offsetHeight; 7164 7165 documentElement.removeChild( table ); 7166 } 7167 return reliableTrDimensionsVal; 7168 } 7169 } ); 7170} )(); 7171 7172 7173function curCSS( elem, name, computed ) { 7174 var width, minWidth, maxWidth, ret, 7175 isCustomProp = rcustomProp.test( name ), 7176 7177 // Support: Firefox 51+ 7178 // Retrieving style before computed somehow 7179 // fixes an issue with getting wrong values 7180 // on detached elements 7181 style = elem.style; 7182 7183 computed = computed || getStyles( elem ); 7184 7185 // getPropertyValue is needed for: 7186 // .css('filter') (IE 9 only, trac-12537) 7187 // .css('--customProperty) (gh-3144) 7188 if ( computed ) { 7189 7190 // Support: IE <=9 - 11+ 7191 // IE only supports `"float"` in `getPropertyValue`; in computed styles 7192 // it's only available as `"cssFloat"`. We no longer modify properties 7193 // sent to `.css()` apart from camelCasing, so we need to check both. 7194 // Normally, this would create difference in behavior: if 7195 // `getPropertyValue` returns an empty string, the value returned 7196 // by `.css()` would be `undefined`. This is usually the case for 7197 // disconnected elements. However, in IE even disconnected elements 7198 // with no styles return `"none"` for `getPropertyValue( "float" )` 7199 ret = computed.getPropertyValue( name ) || computed[ name ]; 7200 7201 if ( isCustomProp && ret ) { 7202 7203 // Support: Firefox 105+, Chrome <=105+ 7204 // Spec requires trimming whitespace for custom properties (gh-4926). 7205 // Firefox only trims leading whitespace. Chrome just collapses 7206 // both leading & trailing whitespace to a single space. 7207 // 7208 // Fall back to `undefined` if empty string returned. 7209 // This collapses a missing definition with property defined 7210 // and set to an empty string but there's no standard API 7211 // allowing us to differentiate them without a performance penalty 7212 // and returning `undefined` aligns with older jQuery. 7213 // 7214 // rtrimCSS treats U+000D CARRIAGE RETURN and U+000C FORM FEED 7215 // as whitespace while CSS does not, but this is not a problem 7216 // because CSS preprocessing replaces them with U+000A LINE FEED 7217 // (which *is* CSS whitespace) 7218 // https://www.w3.org/TR/css-syntax-3/#input-preprocessing 7219 ret = ret.replace( rtrimCSS, "$1" ) || undefined; 7220 } 7221 7222 if ( ret === "" && !isAttached( elem ) ) { 7223 ret = jQuery.style( elem, name ); 7224 } 7225 7226 // A tribute to the "awesome hack by Dean Edwards" 7227 // Android Browser returns percentage for some values, 7228 // but width seems to be reliably pixels. 7229 // This is against the CSSOM draft spec: 7230 // https://drafts.csswg.org/cssom/#resolved-values 7231 if ( !support.pixelBoxStyles() && rnumnonpx.test( ret ) && rboxStyle.test( name ) ) { 7232 7233 // Remember the original values 7234 width = style.width; 7235 minWidth = style.minWidth; 7236 maxWidth = style.maxWidth; 7237 7238 // Put in the new values to get a computed value out 7239 style.minWidth = style.maxWidth = style.width = ret; 7240 ret = computed.width; 7241 7242 // Revert the changed values 7243 style.width = width; 7244 style.minWidth = minWidth; 7245 style.maxWidth = maxWidth; 7246 } 7247 } 7248 7249 return ret !== undefined ? 7250 7251 // Support: IE <=9 - 11 only 7252 // IE returns zIndex value as an integer. 7253 ret + "" : 7254 ret; 7255} 7256 7257 7258function addGetHookIf( conditionFn, hookFn ) { 7259 7260 // Define the hook, we'll check on the first run if it's really needed. 7261 return { 7262 get: function() { 7263 if ( conditionFn() ) { 7264 7265 // Hook not needed (or it's not possible to use it due 7266 // to missing dependency), remove it. 7267 delete this.get; 7268 return; 7269 } 7270 7271 // Hook needed; redefine it so that the support test is not executed again. 7272 return ( this.get = hookFn ).apply( this, arguments ); 7273 } 7274 }; 7275} 7276 7277 7278var cssPrefixes = [ "Webkit", "Moz", "ms" ], 7279 emptyStyle = document.createElement( "div" ).style, 7280 vendorProps = {}; 7281 7282// Return a vendor-prefixed property or undefined 7283function vendorPropName( name ) { 7284 7285 // Check for vendor prefixed names 7286 var capName = name[ 0 ].toUpperCase() + name.slice( 1 ), 7287 i = cssPrefixes.length; 7288 7289 while ( i-- ) { 7290 name = cssPrefixes[ i ] + capName; 7291 if ( name in emptyStyle ) { 7292 return name; 7293 } 7294 } 7295} 7296 7297// Return a potentially-mapped jQuery.cssProps or vendor prefixed property 7298function finalPropName( name ) { 7299 var final = jQuery.cssProps[ name ] || vendorProps[ name ]; 7300 7301 if ( final ) { 7302 return final; 7303 } 7304 if ( name in emptyStyle ) { 7305 return name; 7306 } 7307 return vendorProps[ name ] = vendorPropName( name ) || name; 7308} 7309 7310 7311var 7312 7313 // Swappable if display is none or starts with table 7314 // except "table", "table-cell", or "table-caption" 7315 // See here for display values: https://developer.mozilla.org/en-US/docs/CSS/display 7316 rdisplayswap = /^(none|table(?!-c[ea]).+)/, 7317 cssShow = { position: "absolute", visibility: "hidden", display: "block" }, 7318 cssNormalTransform = { 7319 letterSpacing: "0", 7320 fontWeight: "400" 7321 }; 7322 7323function setPositiveNumber( _elem, value, subtract ) { 7324 7325 // Any relative (+/-) values have already been 7326 // normalized at this point 7327 var matches = rcssNum.exec( value ); 7328 return matches ? 7329 7330 // Guard against undefined "subtract", e.g., when used as in cssHooks 7331 Math.max( 0, matches[ 2 ] - ( subtract || 0 ) ) + ( matches[ 3 ] || "px" ) : 7332 value; 7333} 7334 7335function boxModelAdjustment( elem, dimension, box, isBorderBox, styles, computedVal ) { 7336 var i = dimension === "width" ? 1 : 0, 7337 extra = 0, 7338 delta = 0, 7339 marginDelta = 0; 7340 7341 // Adjustment may not be necessary 7342 if ( box === ( isBorderBox ? "border" : "content" ) ) { 7343 return 0; 7344 } 7345 7346 for ( ; i < 4; i += 2 ) { 7347 7348 // Both box models exclude margin 7349 // Count margin delta separately to only add it after scroll gutter adjustment. 7350 // This is needed to make negative margins work with `outerHeight( true )` (gh-3982). 7351 if ( box === "margin" ) { 7352 marginDelta += jQuery.css( elem, box + cssExpand[ i ], true, styles ); 7353 } 7354 7355 // If we get here with a content-box, we're seeking "padding" or "border" or "margin" 7356 if ( !isBorderBox ) { 7357 7358 // Add padding 7359 delta += jQuery.css( elem, "padding" + cssExpand[ i ], true, styles ); 7360 7361 // For "border" or "margin", add border 7362 if ( box !== "padding" ) { 7363 delta += jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); 7364 7365 // But still keep track of it otherwise 7366 } else { 7367 extra += jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); 7368 } 7369 7370 // If we get here with a border-box (content + padding + border), we're seeking "content" or 7371 // "padding" or "margin" 7372 } else { 7373 7374 // For "content", subtract padding 7375 if ( box === "content" ) { 7376 delta -= jQuery.css( elem, "padding" + cssExpand[ i ], true, styles ); 7377 } 7378 7379 // For "content" or "padding", subtract border 7380 if ( box !== "margin" ) { 7381 delta -= jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); 7382 } 7383 } 7384 } 7385 7386 // Account for positive content-box scroll gutter when requested by providing computedVal 7387 if ( !isBorderBox && computedVal >= 0 ) { 7388 7389 // offsetWidth/offsetHeight is a rounded sum of content, padding, scroll gutter, and border 7390 // Assuming integer scroll gutter, subtract the rest and round down 7391 delta += Math.max( 0, Math.ceil( 7392 elem[ "offset" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] - 7393 computedVal - 7394 delta - 7395 extra - 7396 0.5 7397 7398 // If offsetWidth/offsetHeight is unknown, then we can't determine content-box scroll gutter 7399 // Use an explicit zero to avoid NaN (gh-3964) 7400 ) ) || 0; 7401 } 7402 7403 return delta + marginDelta; 7404} 7405 7406function getWidthOrHeight( elem, dimension, extra ) { 7407 7408 // Start with computed style 7409 var styles = getStyles( elem ), 7410 7411 // To avoid forcing a reflow, only fetch boxSizing if we need it (gh-4322). 7412 // Fake content-box until we know it's needed to know the true value. 7413 boxSizingNeeded = !support.boxSizingReliable() || extra, 7414 isBorderBox = boxSizingNeeded && 7415 jQuery.css( elem, "boxSizing", false, styles ) === "border-box", 7416 valueIsBorderBox = isBorderBox, 7417 7418 val = curCSS( elem, dimension, styles ), 7419 offsetProp = "offset" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ); 7420 7421 // Support: Firefox <=54 7422 // Return a confounding non-pixel value or feign ignorance, as appropriate. 7423 if ( rnumnonpx.test( val ) ) { 7424 if ( !extra ) { 7425 return val; 7426 } 7427 val = "auto"; 7428 } 7429 7430 7431 // Support: IE 9 - 11 only 7432 // Use offsetWidth/offsetHeight for when box sizing is unreliable. 7433 // In those cases, the computed value can be trusted to be border-box. 7434 if ( ( !support.boxSizingReliable() && isBorderBox || 7435 7436 // Support: IE 10 - 11+, Edge 15 - 18+ 7437 // IE/Edge misreport `getComputedStyle` of table rows with width/height 7438 // set in CSS while `offset*` properties report correct values. 7439 // Interestingly, in some cases IE 9 doesn't suffer from this issue. 7440 !support.reliableTrDimensions() && nodeName( elem, "tr" ) || 7441 7442 // Fall back to offsetWidth/offsetHeight when value is "auto" 7443 // This happens for inline elements with no explicit setting (gh-3571) 7444 val === "auto" || 7445 7446 // Support: Android <=4.1 - 4.3 only 7447 // Also use offsetWidth/offsetHeight for misreported inline dimensions (gh-3602) 7448 !parseFloat( val ) && jQuery.css( elem, "display", false, styles ) === "inline" ) && 7449 7450 // Make sure the element is visible & connected 7451 elem.getClientRects().length ) { 7452 7453 isBorderBox = jQuery.css( elem, "boxSizing", false, styles ) === "border-box"; 7454 7455 // Where available, offsetWidth/offsetHeight approximate border box dimensions. 7456 // Where not available (e.g., SVG), assume unreliable box-sizing and interpret the 7457 // retrieved value as a content box dimension. 7458 valueIsBorderBox = offsetProp in elem; 7459 if ( valueIsBorderBox ) { 7460 val = elem[ offsetProp ]; 7461 } 7462 } 7463 7464 // Normalize "" and auto 7465 val = parseFloat( val ) || 0; 7466 7467 // Adjust for the element's box model 7468 return ( val + 7469 boxModelAdjustment( 7470 elem, 7471 dimension, 7472 extra || ( isBorderBox ? "border" : "content" ), 7473 valueIsBorderBox, 7474 styles, 7475 7476 // Provide the current computed size to request scroll gutter calculation (gh-3589) 7477 val 7478 ) 7479 ) + "px"; 7480} 7481 7482jQuery.extend( { 7483 7484 // Add in style property hooks for overriding the default 7485 // behavior of getting and setting a style property 7486 cssHooks: { 7487 opacity: { 7488 get: function( elem, computed ) { 7489 if ( computed ) { 7490 7491 // We should always get a number back from opacity 7492 var ret = curCSS( elem, "opacity" ); 7493 return ret === "" ? "1" : ret; 7494 } 7495 } 7496 } 7497 }, 7498 7499 // Don't automatically add "px" to these possibly-unitless properties 7500 cssNumber: { 7501 animationIterationCount: true, 7502 aspectRatio: true, 7503 borderImageSlice: true, 7504 columnCount: true, 7505 flexGrow: true, 7506 flexShrink: true, 7507 fontWeight: true, 7508 gridArea: true, 7509 gridColumn: true, 7510 gridColumnEnd: true, 7511 gridColumnStart: true, 7512 gridRow: true, 7513 gridRowEnd: true, 7514 gridRowStart: true, 7515 lineHeight: true, 7516 opacity: true, 7517 order: true, 7518 orphans: true, 7519 scale: true, 7520 widows: true, 7521 zIndex: true, 7522 zoom: true, 7523 7524 // SVG-related 7525 fillOpacity: true, 7526 floodOpacity: true, 7527 stopOpacity: true, 7528 strokeMiterlimit: true, 7529 strokeOpacity: true 7530 }, 7531 7532 // Add in properties whose names you wish to fix before 7533 // setting or getting the value 7534 cssProps: {}, 7535 7536 // Get and set the style property on a DOM Node 7537 style: function( elem, name, value, extra ) { 7538 7539 // Don't set styles on text and comment nodes 7540 if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) { 7541 return; 7542 } 7543 7544 // Make sure that we're working with the right name 7545 var ret, type, hooks, 7546 origName = camelCase( name ), 7547 isCustomProp = rcustomProp.test( name ), 7548 style = elem.style; 7549 7550 // Make sure that we're working with the right name. We don't 7551 // want to query the value if it is a CSS custom property 7552 // since they are user-defined. 7553 if ( !isCustomProp ) { 7554 name = finalPropName( origName ); 7555 } 7556 7557 // Gets hook for the prefixed version, then unprefixed version 7558 hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ]; 7559 7560 // Check if we're setting a value 7561 if ( value !== undefined ) { 7562 type = typeof value; 7563 7564 // Convert "+=" or "-=" to relative numbers (trac-7345) 7565 if ( type === "string" && ( ret = rcssNum.exec( value ) ) && ret[ 1 ] ) { 7566 value = adjustCSS( elem, name, ret ); 7567 7568 // Fixes bug trac-9237 7569 type = "number"; 7570 } 7571 7572 // Make sure that null and NaN values aren't set (trac-7116) 7573 if ( value == null || value !== value ) { 7574 return; 7575 } 7576 7577 // If a number was passed in, add the unit (except for certain CSS properties) 7578 // The isCustomProp check can be removed in jQuery 4.0 when we only auto-append 7579 // "px" to a few hardcoded values. 7580 if ( type === "number" && !isCustomProp ) { 7581 value += ret && ret[ 3 ] || ( jQuery.cssNumber[ origName ] ? "" : "px" ); 7582 } 7583 7584 // background-* props affect original clone's values 7585 if ( !support.clearCloneStyle && value === "" && name.indexOf( "background" ) === 0 ) { 7586 style[ name ] = "inherit"; 7587 } 7588 7589 // If a hook was provided, use that value, otherwise just set the specified value 7590 if ( !hooks || !( "set" in hooks ) || 7591 ( value = hooks.set( elem, value, extra ) ) !== undefined ) { 7592 7593 if ( isCustomProp ) { 7594 style.setProperty( name, value ); 7595 } else { 7596 style[ name ] = value; 7597 } 7598 } 7599 7600 } else { 7601 7602 // If a hook was provided get the non-computed value from there 7603 if ( hooks && "get" in hooks && 7604 ( ret = hooks.get( elem, false, extra ) ) !== undefined ) { 7605 7606 return ret; 7607 } 7608 7609 // Otherwise just get the value from the style object 7610 return style[ name ]; 7611 } 7612 }, 7613 7614 css: function( elem, name, extra, styles ) { 7615 var val, num, hooks, 7616 origName = camelCase( name ), 7617 isCustomProp = rcustomProp.test( name ); 7618 7619 // Make sure that we're working with the right name. We don't 7620 // want to modify the value if it is a CSS custom property 7621 // since they are user-defined. 7622 if ( !isCustomProp ) { 7623 name = finalPropName( origName ); 7624 } 7625 7626 // Try prefixed name followed by the unprefixed name 7627 hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ]; 7628 7629 // If a hook was provided get the computed value from there 7630 if ( hooks && "get" in hooks ) { 7631 val = hooks.get( elem, true, extra ); 7632 } 7633 7634 // Otherwise, if a way to get the computed value exists, use that 7635 if ( val === undefined ) { 7636 val = curCSS( elem, name, styles ); 7637 } 7638 7639 // Convert "normal" to computed value 7640 if ( val === "normal" && name in cssNormalTransform ) { 7641 val = cssNormalTransform[ name ]; 7642 } 7643 7644 // Make numeric if forced or a qualifier was provided and val looks numeric 7645 if ( extra === "" || extra ) { 7646 num = parseFloat( val ); 7647 return extra === true || isFinite( num ) ? num || 0 : val; 7648 } 7649 7650 return val; 7651 } 7652} ); 7653 7654jQuery.each( [ "height", "width" ], function( _i, dimension ) { 7655 jQuery.cssHooks[ dimension ] = { 7656 get: function( elem, computed, extra ) { 7657 if ( computed ) { 7658 7659 // Certain elements can have dimension info if we invisibly show them 7660 // but it must have a current display style that would benefit 7661 return rdisplayswap.test( jQuery.css( elem, "display" ) ) && 7662 7663 // Support: Safari 8+ 7664 // Table columns in Safari have non-zero offsetWidth & zero 7665 // getBoundingClientRect().width unless display is changed. 7666 // Support: IE <=11 only 7667 // Running getBoundingClientRect on a disconnected node 7668 // in IE throws an error. 7669 ( !elem.getClientRects().length || !elem.getBoundingClientRect().width ) ? 7670 swap( elem, cssShow, function() { 7671 return getWidthOrHeight( elem, dimension, extra ); 7672 } ) : 7673 getWidthOrHeight( elem, dimension, extra ); 7674 } 7675 }, 7676 7677 set: function( elem, value, extra ) { 7678 var matches, 7679 styles = getStyles( elem ), 7680 7681 // Only read styles.position if the test has a chance to fail 7682 // to avoid forcing a reflow. 7683 scrollboxSizeBuggy = !support.scrollboxSize() && 7684 styles.position === "absolute", 7685 7686 // To avoid forcing a reflow, only fetch boxSizing if we need it (gh-3991) 7687 boxSizingNeeded = scrollboxSizeBuggy || extra, 7688 isBorderBox = boxSizingNeeded && 7689 jQuery.css( elem, "boxSizing", false, styles ) === "border-box", 7690 subtract = extra ? 7691 boxModelAdjustment( 7692 elem, 7693 dimension, 7694 extra, 7695 isBorderBox, 7696 styles 7697 ) : 7698 0; 7699 7700 // Account for unreliable border-box dimensions by comparing offset* to computed and 7701 // faking a content-box to get border and padding (gh-3699) 7702 if ( isBorderBox && scrollboxSizeBuggy ) { 7703 subtract -= Math.ceil( 7704 elem[ "offset" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] - 7705 parseFloat( styles[ dimension ] ) - 7706 boxModelAdjustment( elem, dimension, "border", false, styles ) - 7707 0.5 7708 ); 7709 } 7710 7711 // Convert to pixels if value adjustment is needed 7712 if ( subtract && ( matches = rcssNum.exec( value ) ) && 7713 ( matches[ 3 ] || "px" ) !== "px" ) { 7714 7715 elem.style[ dimension ] = value; 7716 value = jQuery.css( elem, dimension ); 7717 } 7718 7719 return setPositiveNumber( elem, value, subtract ); 7720 } 7721 }; 7722} ); 7723 7724jQuery.cssHooks.marginLeft = addGetHookIf( support.reliableMarginLeft, 7725 function( elem, computed ) { 7726 if ( computed ) { 7727 return ( parseFloat( curCSS( elem, "marginLeft" ) ) || 7728 elem.getBoundingClientRect().left - 7729 swap( elem, { marginLeft: 0 }, function() { 7730 return elem.getBoundingClientRect().left; 7731 } ) 7732 ) + "px"; 7733 } 7734 } 7735); 7736 7737// These hooks are used by animate to expand properties 7738jQuery.each( { 7739 margin: "", 7740 padding: "", 7741 border: "Width" 7742}, function( prefix, suffix ) { 7743 jQuery.cssHooks[ prefix + suffix ] = { 7744 expand: function( value ) { 7745 var i = 0, 7746 expanded = {}, 7747 7748 // Assumes a single number if not a string 7749 parts = typeof value === "string" ? value.split( " " ) : [ value ]; 7750 7751 for ( ; i < 4; i++ ) { 7752 expanded[ prefix + cssExpand[ i ] + suffix ] = 7753 parts[ i ] || parts[ i - 2 ] || parts[ 0 ]; 7754 } 7755 7756 return expanded; 7757 } 7758 }; 7759 7760 if ( prefix !== "margin" ) { 7761 jQuery.cssHooks[ prefix + suffix ].set = setPositiveNumber; 7762 } 7763} ); 7764 7765jQuery.fn.extend( { 7766 css: function( name, value ) { 7767 return access( this, function( elem, name, value ) { 7768 var styles, len, 7769 map = {}, 7770 i = 0; 7771 7772 if ( Array.isArray( name ) ) { 7773 styles = getStyles( elem ); 7774 len = name.length; 7775 7776 for ( ; i < len; i++ ) { 7777 map[ name[ i ] ] = jQuery.css( elem, name[ i ], false, styles ); 7778 } 7779 7780 return map; 7781 } 7782 7783 return value !== undefined ? 7784 jQuery.style( elem, name, value ) : 7785 jQuery.css( elem, name ); 7786 }, name, value, arguments.length > 1 ); 7787 } 7788} ); 7789 7790 7791function Tween( elem, options, prop, end, easing ) { 7792 return new Tween.prototype.init( elem, options, prop, end, easing ); 7793} 7794jQuery.Tween = Tween; 7795 7796Tween.prototype = { 7797 constructor: Tween, 7798 init: function( elem, options, prop, end, easing, unit ) { 7799 this.elem = elem; 7800 this.prop = prop; 7801 this.easing = easing || jQuery.easing._default; 7802 this.options = options; 7803 this.start = this.now = this.cur(); 7804 this.end = end; 7805 this.unit = unit || ( jQuery.cssNumber[ prop ] ? "" : "px" ); 7806 }, 7807 cur: function() { 7808 var hooks = Tween.propHooks[ this.prop ]; 7809 7810 return hooks && hooks.get ? 7811 hooks.get( this ) : 7812 Tween.propHooks._default.get( this ); 7813 }, 7814 run: function( percent ) { 7815 var eased, 7816 hooks = Tween.propHooks[ this.prop ]; 7817 7818 if ( this.options.duration ) { 7819 this.pos = eased = jQuery.easing[ this.easing ]( 7820 percent, this.options.duration * percent, 0, 1, this.options.duration 7821 ); 7822 } else { 7823 this.pos = eased = percent; 7824 } 7825 this.now = ( this.end - this.start ) * eased + this.start; 7826 7827 if ( this.options.step ) { 7828 this.options.step.call( this.elem, this.now, this ); 7829 } 7830 7831 if ( hooks && hooks.set ) { 7832 hooks.set( this ); 7833 } else { 7834 Tween.propHooks._default.set( this ); 7835 } 7836 return this; 7837 } 7838}; 7839 7840Tween.prototype.init.prototype = Tween.prototype; 7841 7842Tween.propHooks = { 7843 _default: { 7844 get: function( tween ) { 7845 var result; 7846 7847 // Use a property on the element directly when it is not a DOM element, 7848 // or when there is no matching style property that exists. 7849 if ( tween.elem.nodeType !== 1 || 7850 tween.elem[ tween.prop ] != null && tween.elem.style[ tween.prop ] == null ) { 7851 return tween.elem[ tween.prop ]; 7852 } 7853 7854 // Passing an empty string as a 3rd parameter to .css will automatically 7855 // attempt a parseFloat and fallback to a string if the parse fails. 7856 // Simple values such as "10px" are parsed to Float; 7857 // complex values such as "rotate(1rad)" are returned as-is. 7858 result = jQuery.css( tween.elem, tween.prop, "" ); 7859 7860 // Empty strings, null, undefined and "auto" are converted to 0. 7861 return !result || result === "auto" ? 0 : result; 7862 }, 7863 set: function( tween ) { 7864 7865 // Use step hook for back compat. 7866 // Use cssHook if its there. 7867 // Use .style if available and use plain properties where available. 7868 if ( jQuery.fx.step[ tween.prop ] ) { 7869 jQuery.fx.step[ tween.prop ]( tween ); 7870 } else if ( tween.elem.nodeType === 1 && ( 7871 jQuery.cssHooks[ tween.prop ] || 7872 tween.elem.style[ finalPropName( tween.prop ) ] != null ) ) { 7873 jQuery.style( tween.elem, tween.prop, tween.now + tween.unit ); 7874 } else { 7875 tween.elem[ tween.prop ] = tween.now; 7876 } 7877 } 7878 } 7879}; 7880 7881// Support: IE <=9 only 7882// Panic based approach to setting things on disconnected nodes 7883Tween.propHooks.scrollTop = Tween.propHooks.scrollLeft = { 7884 set: function( tween ) { 7885 if ( tween.elem.nodeType && tween.elem.parentNode ) { 7886 tween.elem[ tween.prop ] = tween.now; 7887 } 7888 } 7889}; 7890 7891jQuery.easing = { 7892 linear: function( p ) { 7893 return p; 7894 }, 7895 swing: function( p ) { 7896 return 0.5 - Math.cos( p * Math.PI ) / 2; 7897 }, 7898 _default: "swing" 7899}; 7900 7901jQuery.fx = Tween.prototype.init; 7902 7903// Back compat <1.8 extension point 7904jQuery.fx.step = {}; 7905 7906 7907 7908 7909var 7910 fxNow, inProgress, 7911 rfxtypes = /^(?:toggle|show|hide)$/, 7912 rrun = /queueHooks$/; 7913 7914function schedule() { 7915 if ( inProgress ) { 7916 if ( document.hidden === false && window.requestAnimationFrame ) { 7917 window.requestAnimationFrame( schedule ); 7918 } else { 7919 window.setTimeout( schedule, jQuery.fx.interval ); 7920 } 7921 7922 jQuery.fx.tick(); 7923 } 7924} 7925 7926// Animations created synchronously will run synchronously 7927function createFxNow() { 7928 window.setTimeout( function() { 7929 fxNow = undefined; 7930 } ); 7931 return ( fxNow = Date.now() ); 7932} 7933 7934// Generate parameters to create a standard animation 7935function genFx( type, includeWidth ) { 7936 var which, 7937 i = 0, 7938 attrs = { height: type }; 7939 7940 // If we include width, step value is 1 to do all cssExpand values, 7941 // otherwise step value is 2 to skip over Left and Right 7942 includeWidth = includeWidth ? 1 : 0; 7943 for ( ; i < 4; i += 2 - includeWidth ) { 7944 which = cssExpand[ i ]; 7945 attrs[ "margin" + which ] = attrs[ "padding" + which ] = type; 7946 } 7947 7948 if ( includeWidth ) { 7949 attrs.opacity = attrs.width = type; 7950 } 7951 7952 return attrs; 7953} 7954 7955function createTween( value, prop, animation ) { 7956 var tween, 7957 collection = ( Animation.tweeners[ prop ] || [] ).concat( Animation.tweeners[ "*" ] ), 7958 index = 0, 7959 length = collection.length; 7960 for ( ; index < length; index++ ) { 7961 if ( ( tween = collection[ index ].call( animation, prop, value ) ) ) { 7962 7963 // We're done with this property 7964 return tween; 7965 } 7966 } 7967} 7968 7969function defaultPrefilter( elem, props, opts ) { 7970 var prop, value, toggle, hooks, oldfire, propTween, restoreDisplay, display, 7971 isBox = "width" in props || "height" in props, 7972 anim = this, 7973 orig = {}, 7974 style = elem.style, 7975 hidden = elem.nodeType && isHiddenWithinTree( elem ), 7976 dataShow = dataPriv.get( elem, "fxshow" ); 7977 7978 // Queue-skipping animations hijack the fx hooks 7979 if ( !opts.queue ) { 7980 hooks = jQuery._queueHooks( elem, "fx" ); 7981 if ( hooks.unqueued == null ) { 7982 hooks.unqueued = 0; 7983 oldfire = hooks.empty.fire; 7984 hooks.empty.fire = function() { 7985 if ( !hooks.unqueued ) { 7986 oldfire(); 7987 } 7988 }; 7989 } 7990 hooks.unqueued++; 7991 7992 anim.always( function() { 7993 7994 // Ensure the complete handler is called before this completes 7995 anim.always( function() { 7996 hooks.unqueued--; 7997 if ( !jQuery.queue( elem, "fx" ).length ) { 7998 hooks.empty.fire(); 7999 } 8000 } ); 8001 } ); 8002 } 8003 8004 // Detect show/hide animations 8005 for ( prop in props ) { 8006 value = props[ prop ]; 8007 if ( rfxtypes.test( value ) ) { 8008 delete props[ prop ]; 8009 toggle = toggle || value === "toggle"; 8010 if ( value === ( hidden ? "hide" : "show" ) ) { 8011 8012 // Pretend to be hidden if this is a "show" and 8013 // there is still data from a stopped show/hide 8014 if ( value === "show" && dataShow && dataShow[ prop ] !== undefined ) { 8015 hidden = true; 8016 8017 // Ignore all other no-op show/hide data 8018 } else { 8019 continue; 8020 } 8021 } 8022 orig[ prop ] = dataShow && dataShow[ prop ] || jQuery.style( elem, prop ); 8023 } 8024 } 8025 8026 // Bail out if this is a no-op like .hide().hide() 8027 propTween = !jQuery.isEmptyObject( props ); 8028 if ( !propTween && jQuery.isEmptyObject( orig ) ) { 8029 return; 8030 } 8031 8032 // Restrict "overflow" and "display" styles during box animations 8033 if ( isBox && elem.nodeType === 1 ) { 8034 8035 // Support: IE <=9 - 11, Edge 12 - 15 8036 // Record all 3 overflow attributes because IE does not infer the shorthand 8037 // from identically-valued overflowX and overflowY and Edge just mirrors 8038 // the overflowX value there. 8039 opts.overflow = [ style.overflow, style.overflowX, style.overflowY ]; 8040 8041 // Identify a display type, preferring old show/hide data over the CSS cascade 8042 restoreDisplay = dataShow && dataShow.display; 8043 if ( restoreDisplay == null ) { 8044 restoreDisplay = dataPriv.get( elem, "display" ); 8045 } 8046 display = jQuery.css( elem, "display" ); 8047 if ( display === "none" ) { 8048 if ( restoreDisplay ) { 8049 display = restoreDisplay; 8050 } else { 8051 8052 // Get nonempty value(s) by temporarily forcing visibility 8053 showHide( [ elem ], true ); 8054 restoreDisplay = elem.style.display || restoreDisplay; 8055 display = jQuery.css( elem, "display" ); 8056 showHide( [ elem ] ); 8057 } 8058 } 8059 8060 // Animate inline elements as inline-block 8061 if ( display === "inline" || display === "inline-block" && restoreDisplay != null ) { 8062 if ( jQuery.css( elem, "float" ) === "none" ) { 8063 8064 // Restore the original display value at the end of pure show/hide animations 8065 if ( !propTween ) { 8066 anim.done( function() { 8067 style.display = restoreDisplay; 8068 } ); 8069 if ( restoreDisplay == null ) { 8070 display = style.display; 8071 restoreDisplay = display === "none" ? "" : display; 8072 } 8073 } 8074 style.display = "inline-block"; 8075 } 8076 } 8077 } 8078 8079 if ( opts.overflow ) { 8080 style.overflow = "hidden"; 8081 anim.always( function() { 8082 style.overflow = opts.overflow[ 0 ]; 8083 style.overflowX = opts.overflow[ 1 ]; 8084 style.overflowY = opts.overflow[ 2 ]; 8085 } ); 8086 } 8087 8088 // Implement show/hide animations 8089 propTween = false; 8090 for ( prop in orig ) { 8091 8092 // General show/hide setup for this element animation 8093 if ( !propTween ) { 8094 if ( dataShow ) { 8095 if ( "hidden" in dataShow ) { 8096 hidden = dataShow.hidden; 8097 } 8098 } else { 8099 dataShow = dataPriv.access( elem, "fxshow", { display: restoreDisplay } ); 8100 } 8101 8102 // Store hidden/visible for toggle so `.stop().toggle()` "reverses" 8103 if ( toggle ) { 8104 dataShow.hidden = !hidden; 8105 } 8106 8107 // Show elements before animating them 8108 if ( hidden ) { 8109 showHide( [ elem ], true ); 8110 } 8111 8112 /* eslint-disable no-loop-func */ 8113 8114 anim.done( function() { 8115 8116 /* eslint-enable no-loop-func */ 8117 8118 // The final step of a "hide" animation is actually hiding the element 8119 if ( !hidden ) { 8120 showHide( [ elem ] ); 8121 } 8122 dataPriv.remove( elem, "fxshow" ); 8123 for ( prop in orig ) { 8124 jQuery.style( elem, prop, orig[ prop ] ); 8125 } 8126 } ); 8127 } 8128 8129 // Per-property setup 8130 propTween = createTween( hidden ? dataShow[ prop ] : 0, prop, anim ); 8131 if ( !( prop in dataShow ) ) { 8132 dataShow[ prop ] = propTween.start; 8133 if ( hidden ) { 8134 propTween.end = propTween.start; 8135 propTween.start = 0; 8136 } 8137 } 8138 } 8139} 8140 8141function propFilter( props, specialEasing ) { 8142 var index, name, easing, value, hooks; 8143 8144 // camelCase, specialEasing and expand cssHook pass 8145 for ( index in props ) { 8146 name = camelCase( index ); 8147 easing = specialEasing[ name ]; 8148 value = props[ index ]; 8149 if ( Array.isArray( value ) ) { 8150 easing = value[ 1 ]; 8151 value = props[ index ] = value[ 0 ]; 8152 } 8153 8154 if ( index !== name ) { 8155 props[ name ] = value; 8156 delete props[ index ]; 8157 } 8158 8159 hooks = jQuery.cssHooks[ name ]; 8160 if ( hooks && "expand" in hooks ) { 8161 value = hooks.expand( value ); 8162 delete props[ name ]; 8163 8164 // Not quite $.extend, this won't overwrite existing keys. 8165 // Reusing 'index' because we have the correct "name" 8166 for ( index in value ) { 8167 if ( !( index in props ) ) { 8168 props[ index ] = value[ index ]; 8169 specialEasing[ index ] = easing; 8170 } 8171 } 8172 } else { 8173 specialEasing[ name ] = easing; 8174 } 8175 } 8176} 8177 8178function Animation( elem, properties, options ) { 8179 var result, 8180 stopped, 8181 index = 0, 8182 length = Animation.prefilters.length, 8183 deferred = jQuery.Deferred().always( function() { 8184 8185 // Don't match elem in the :animated selector 8186 delete tick.elem; 8187 } ), 8188 tick = function() { 8189 if ( stopped ) { 8190 return false; 8191 } 8192 var currentTime = fxNow || createFxNow(), 8193 remaining = Math.max( 0, animation.startTime + animation.duration - currentTime ), 8194 8195 // Support: Android 2.3 only 8196 // Archaic crash bug won't allow us to use `1 - ( 0.5 || 0 )` (trac-12497) 8197 temp = remaining / animation.duration || 0, 8198 percent = 1 - temp, 8199 index = 0, 8200 length = animation.tweens.length; 8201 8202 for ( ; index < length; index++ ) { 8203 animation.tweens[ index ].run( percent ); 8204 } 8205 8206 deferred.notifyWith( elem, [ animation, percent, remaining ] ); 8207 8208 // If there's more to do, yield 8209 if ( percent < 1 && length ) { 8210 return remaining; 8211 } 8212 8213 // If this was an empty animation, synthesize a final progress notification 8214 if ( !length ) { 8215 deferred.notifyWith( elem, [ animation, 1, 0 ] ); 8216 } 8217 8218 // Resolve the animation and report its conclusion 8219 deferred.resolveWith( elem, [ animation ] ); 8220 return false; 8221 }, 8222 animation = deferred.promise( { 8223 elem: elem, 8224 props: jQuery.extend( {}, properties ), 8225 opts: jQuery.extend( true, { 8226 specialEasing: {}, 8227 easing: jQuery.easing._default 8228 }, options ), 8229 originalProperties: properties, 8230 originalOptions: options, 8231 startTime: fxNow || createFxNow(), 8232 duration: options.duration, 8233 tweens: [], 8234 createTween: function( prop, end ) { 8235 var tween = jQuery.Tween( elem, animation.opts, prop, end, 8236 animation.opts.specialEasing[ prop ] || animation.opts.easing ); 8237 animation.tweens.push( tween ); 8238 return tween; 8239 }, 8240 stop: function( gotoEnd ) { 8241 var index = 0, 8242 8243 // If we are going to the end, we want to run all the tweens 8244 // otherwise we skip this part 8245 length = gotoEnd ? animation.tweens.length : 0; 8246 if ( stopped ) { 8247 return this; 8248 } 8249 stopped = true; 8250 for ( ; index < length; index++ ) { 8251 animation.tweens[ index ].run( 1 ); 8252 } 8253 8254 // Resolve when we played the last frame; otherwise, reject 8255 if ( gotoEnd ) { 8256 deferred.notifyWith( elem, [ animation, 1, 0 ] ); 8257 deferred.resolveWith( elem, [ animation, gotoEnd ] ); 8258 } else { 8259 deferred.rejectWith( elem, [ animation, gotoEnd ] ); 8260 } 8261 return this; 8262 } 8263 } ), 8264 props = animation.props; 8265 8266 propFilter( props, animation.opts.specialEasing ); 8267 8268 for ( ; index < length; index++ ) { 8269 result = Animation.prefilters[ index ].call( animation, elem, props, animation.opts ); 8270 if ( result ) { 8271 if ( isFunction( result.stop ) ) { 8272 jQuery._queueHooks( animation.elem, animation.opts.queue ).stop = 8273 result.stop.bind( result ); 8274 } 8275 return result; 8276 } 8277 } 8278 8279 jQuery.map( props, createTween, animation ); 8280 8281 if ( isFunction( animation.opts.start ) ) { 8282 animation.opts.start.call( elem, animation ); 8283 } 8284 8285 // Attach callbacks from options 8286 animation 8287 .progress( animation.opts.progress ) 8288 .done( animation.opts.done, animation.opts.complete ) 8289 .fail( animation.opts.fail ) 8290 .always( animation.opts.always ); 8291 8292 jQuery.fx.timer( 8293 jQuery.extend( tick, { 8294 elem: elem, 8295 anim: animation, 8296 queue: animation.opts.queue 8297 } ) 8298 ); 8299 8300 return animation; 8301} 8302 8303jQuery.Animation = jQuery.extend( Animation, { 8304 8305 tweeners: { 8306 "*": [ function( prop, value ) { 8307 var tween = this.createTween( prop, value ); 8308 adjustCSS( tween.elem, prop, rcssNum.exec( value ), tween ); 8309 return tween; 8310 } ] 8311 }, 8312 8313 tweener: function( props, callback ) { 8314 if ( isFunction( props ) ) { 8315 callback = props; 8316 props = [ "*" ]; 8317 } else { 8318 props = props.match( rnothtmlwhite ); 8319 } 8320 8321 var prop, 8322 index = 0, 8323 length = props.length; 8324 8325 for ( ; index < length; index++ ) { 8326 prop = props[ index ]; 8327 Animation.tweeners[ prop ] = Animation.tweeners[ prop ] || []; 8328 Animation.tweeners[ prop ].unshift( callback ); 8329 } 8330 }, 8331 8332 prefilters: [ defaultPrefilter ], 8333 8334 prefilter: function( callback, prepend ) { 8335 if ( prepend ) { 8336 Animation.prefilters.unshift( callback ); 8337 } else { 8338 Animation.prefilters.push( callback ); 8339 } 8340 } 8341} ); 8342 8343jQuery.speed = function( speed, easing, fn ) { 8344 var opt = speed && typeof speed === "object" ? jQuery.extend( {}, speed ) : { 8345 complete: fn || !fn && easing || 8346 isFunction( speed ) && speed, 8347 duration: speed, 8348 easing: fn && easing || easing && !isFunction( easing ) && easing 8349 }; 8350 8351 // Go to the end state if fx are off 8352 if ( jQuery.fx.off ) { 8353 opt.duration = 0; 8354 8355 } else { 8356 if ( typeof opt.duration !== "number" ) { 8357 if ( opt.duration in jQuery.fx.speeds ) { 8358 opt.duration = jQuery.fx.speeds[ opt.duration ]; 8359 8360 } else { 8361 opt.duration = jQuery.fx.speeds._default; 8362 } 8363 } 8364 } 8365 8366 // Normalize opt.queue - true/undefined/null -> "fx" 8367 if ( opt.queue == null || opt.queue === true ) { 8368 opt.queue = "fx"; 8369 } 8370 8371 // Queueing 8372 opt.old = opt.complete; 8373 8374 opt.complete = function() { 8375 if ( isFunction( opt.old ) ) { 8376 opt.old.call( this ); 8377 } 8378 8379 if ( opt.queue ) { 8380 jQuery.dequeue( this, opt.queue ); 8381 } 8382 }; 8383 8384 return opt; 8385}; 8386 8387jQuery.fn.extend( { 8388 fadeTo: function( speed, to, easing, callback ) { 8389 8390 // Show any hidden elements after setting opacity to 0 8391 return this.filter( isHiddenWithinTree ).css( "opacity", 0 ).show() 8392 8393 // Animate to the value specified 8394 .end().animate( { opacity: to }, speed, easing, callback ); 8395 }, 8396 animate: function( prop, speed, easing, callback ) { 8397 var empty = jQuery.isEmptyObject( prop ), 8398 optall = jQuery.speed( speed, easing, callback ), 8399 doAnimation = function() { 8400 8401 // Operate on a copy of prop so per-property easing won't be lost 8402 var anim = Animation( this, jQuery.extend( {}, prop ), optall ); 8403 8404 // Empty animations, or finishing resolves immediately 8405 if ( empty || dataPriv.get( this, "finish" ) ) { 8406 anim.stop( true ); 8407 } 8408 }; 8409 8410 doAnimation.finish = doAnimation; 8411 8412 return empty || optall.queue === false ? 8413 this.each( doAnimation ) : 8414 this.queue( optall.queue, doAnimation ); 8415 }, 8416 stop: function( type, clearQueue, gotoEnd ) { 8417 var stopQueue = function( hooks ) { 8418 var stop = hooks.stop; 8419 delete hooks.stop; 8420 stop( gotoEnd ); 8421 }; 8422 8423 if ( typeof type !== "string" ) { 8424 gotoEnd = clearQueue; 8425 clearQueue = type; 8426 type = undefined; 8427 } 8428 if ( clearQueue ) { 8429 this.queue( type || "fx", [] ); 8430 } 8431 8432 return this.each( function() { 8433 var dequeue = true, 8434 index = type != null && type + "queueHooks", 8435 timers = jQuery.timers, 8436 data = dataPriv.get( this ); 8437 8438 if ( index ) { 8439 if ( data[ index ] && data[ index ].stop ) { 8440 stopQueue( data[ index ] ); 8441 } 8442 } else { 8443 for ( index in data ) { 8444 if ( data[ index ] && data[ index ].stop && rrun.test( index ) ) { 8445 stopQueue( data[ index ] ); 8446 } 8447 } 8448 } 8449 8450 for ( index = timers.length; index--; ) { 8451 if ( timers[ index ].elem === this && 8452 ( type == null || timers[ index ].queue === type ) ) { 8453 8454 timers[ index ].anim.stop( gotoEnd ); 8455 dequeue = false; 8456 timers.splice( index, 1 ); 8457 } 8458 } 8459 8460 // Start the next in the queue if the last step wasn't forced. 8461 // Timers currently will call their complete callbacks, which 8462 // will dequeue but only if they were gotoEnd. 8463 if ( dequeue || !gotoEnd ) { 8464 jQuery.dequeue( this, type ); 8465 } 8466 } ); 8467 }, 8468 finish: function( type ) { 8469 if ( type !== false ) { 8470 type = type || "fx"; 8471 } 8472 return this.each( function() { 8473 var index, 8474 data = dataPriv.get( this ), 8475 queue = data[ type + "queue" ], 8476 hooks = data[ type + "queueHooks" ], 8477 timers = jQuery.timers, 8478 length = queue ? queue.length : 0; 8479 8480 // Enable finishing flag on private data 8481 data.finish = true; 8482 8483 // Empty the queue first 8484 jQuery.queue( this, type, [] ); 8485 8486 if ( hooks && hooks.stop ) { 8487 hooks.stop.call( this, true ); 8488 } 8489 8490 // Look for any active animations, and finish them 8491 for ( index = timers.length; index--; ) { 8492 if ( timers[ index ].elem === this && timers[ index ].queue === type ) { 8493 timers[ index ].anim.stop( true ); 8494 timers.splice( index, 1 ); 8495 } 8496 } 8497 8498 // Look for any animations in the old queue and finish them 8499 for ( index = 0; index < length; index++ ) { 8500 if ( queue[ index ] && queue[ index ].finish ) { 8501 queue[ index ].finish.call( this ); 8502 } 8503 } 8504 8505 // Turn off finishing flag 8506 delete data.finish; 8507 } ); 8508 } 8509} ); 8510 8511jQuery.each( [ "toggle", "show", "hide" ], function( _i, name ) { 8512 var cssFn = jQuery.fn[ name ]; 8513 jQuery.fn[ name ] = function( speed, easing, callback ) { 8514 return speed == null || typeof speed === "boolean" ? 8515 cssFn.apply( this, arguments ) : 8516 this.animate( genFx( name, true ), speed, easing, callback ); 8517 }; 8518} ); 8519 8520// Generate shortcuts for custom animations 8521jQuery.each( { 8522 slideDown: genFx( "show" ), 8523 slideUp: genFx( "hide" ), 8524 slideToggle: genFx( "toggle" ), 8525 fadeIn: { opacity: "show" }, 8526 fadeOut: { opacity: "hide" }, 8527 fadeToggle: { opacity: "toggle" } 8528}, function( name, props ) { 8529 jQuery.fn[ name ] = function( speed, easing, callback ) { 8530 return this.animate( props, speed, easing, callback ); 8531 }; 8532} ); 8533 8534jQuery.timers = []; 8535jQuery.fx.tick = function() { 8536 var timer, 8537 i = 0, 8538 timers = jQuery.timers; 8539 8540 fxNow = Date.now(); 8541 8542 for ( ; i < timers.length; i++ ) { 8543 timer = timers[ i ]; 8544 8545 // Run the timer and safely remove it when done (allowing for external removal) 8546 if ( !timer() && timers[ i ] === timer ) { 8547 timers.splice( i--, 1 ); 8548 } 8549 } 8550 8551 if ( !timers.length ) { 8552 jQuery.fx.stop(); 8553 } 8554 fxNow = undefined; 8555}; 8556 8557jQuery.fx.timer = function( timer ) { 8558 jQuery.timers.push( timer ); 8559 jQuery.fx.start(); 8560}; 8561 8562jQuery.fx.interval = 13; 8563jQuery.fx.start = function() { 8564 if ( inProgress ) { 8565 return; 8566 } 8567 8568 inProgress = true; 8569 schedule(); 8570}; 8571 8572jQuery.fx.stop = function() { 8573 inProgress = null; 8574}; 8575 8576jQuery.fx.speeds = { 8577 slow: 600, 8578 fast: 200, 8579 8580 // Default speed 8581 _default: 400 8582}; 8583 8584 8585// Based off of the plugin by Clint Helfers, with permission. 8586jQuery.fn.delay = function( time, type ) { 8587 time = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time; 8588 type = type || "fx"; 8589 8590 return this.queue( type, function( next, hooks ) { 8591 var timeout = window.setTimeout( next, time ); 8592 hooks.stop = function() { 8593 window.clearTimeout( timeout ); 8594 }; 8595 } ); 8596}; 8597 8598 8599( function() { 8600 var input = document.createElement( "input" ), 8601 select = document.createElement( "select" ), 8602 opt = select.appendChild( document.createElement( "option" ) ); 8603 8604 input.type = "checkbox"; 8605 8606 // Support: Android <=4.3 only 8607 // Default value for a checkbox should be "on" 8608 support.checkOn = input.value !== ""; 8609 8610 // Support: IE <=11 only 8611 // Must access selectedIndex to make default options select 8612 support.optSelected = opt.selected; 8613 8614 // Support: IE <=11 only 8615 // An input loses its value after becoming a radio 8616 input = document.createElement( "input" ); 8617 input.value = "t"; 8618 input.type = "radio"; 8619 support.radioValue = input.value === "t"; 8620} )(); 8621 8622 8623var boolHook, 8624 attrHandle = jQuery.expr.attrHandle; 8625 8626jQuery.fn.extend( { 8627 attr: function( name, value ) { 8628 return access( this, jQuery.attr, name, value, arguments.length > 1 ); 8629 }, 8630 8631 removeAttr: function( name ) { 8632 return this.each( function() { 8633 jQuery.removeAttr( this, name ); 8634 } ); 8635 } 8636} ); 8637 8638jQuery.extend( { 8639 attr: function( elem, name, value ) { 8640 var ret, hooks, 8641 nType = elem.nodeType; 8642 8643 // Don't get/set attributes on text, comment and attribute nodes 8644 if ( nType === 3 || nType === 8 || nType === 2 ) { 8645 return; 8646 } 8647 8648 // Fallback to prop when attributes are not supported 8649 if ( typeof elem.getAttribute === "undefined" ) { 8650 return jQuery.prop( elem, name, value ); 8651 } 8652 8653 // Attribute hooks are determined by the lowercase version 8654 // Grab necessary hook if one is defined 8655 if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) { 8656 hooks = jQuery.attrHooks[ name.toLowerCase() ] || 8657 ( jQuery.expr.match.bool.test( name ) ? boolHook : undefined ); 8658 } 8659 8660 if ( value !== undefined ) { 8661 if ( value === null ) { 8662 jQuery.removeAttr( elem, name ); 8663 return; 8664 } 8665 8666 if ( hooks && "set" in hooks && 8667 ( ret = hooks.set( elem, value, name ) ) !== undefined ) { 8668 return ret; 8669 } 8670 8671 elem.setAttribute( name, value + "" ); 8672 return value; 8673 } 8674 8675 if ( hooks && "get" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) { 8676 return ret; 8677 } 8678 8679 ret = jQuery.find.attr( elem, name ); 8680 8681 // Non-existent attributes return null, we normalize to undefined 8682 return ret == null ? undefined : ret; 8683 }, 8684 8685 attrHooks: { 8686 type: { 8687 set: function( elem, value ) { 8688 if ( !support.radioValue && value === "radio" && 8689 nodeName( elem, "input" ) ) { 8690 var val = elem.value; 8691 elem.setAttribute( "type", value ); 8692 if ( val ) { 8693 elem.value = val; 8694 } 8695 return value; 8696 } 8697 } 8698 } 8699 }, 8700 8701 removeAttr: function( elem, value ) { 8702 var name, 8703 i = 0, 8704 8705 // Attribute names can contain non-HTML whitespace characters 8706 // https://html.spec.whatwg.org/multipage/syntax.html#attributes-2 8707 attrNames = value && value.match( rnothtmlwhite ); 8708 8709 if ( attrNames && elem.nodeType === 1 ) { 8710 while ( ( name = attrNames[ i++ ] ) ) { 8711 elem.removeAttribute( name ); 8712 } 8713 } 8714 } 8715} ); 8716 8717// Hooks for boolean attributes 8718boolHook = { 8719 set: function( elem, value, name ) { 8720 if ( value === false ) { 8721 8722 // Remove boolean attributes when set to false 8723 jQuery.removeAttr( elem, name ); 8724 } else { 8725 elem.setAttribute( name, name ); 8726 } 8727 return name; 8728 } 8729}; 8730 8731jQuery.each( jQuery.expr.match.bool.source.match( /\w+/g ), function( _i, name ) { 8732 var getter = attrHandle[ name ] || jQuery.find.attr; 8733 8734 attrHandle[ name ] = function( elem, name, isXML ) { 8735 var ret, handle, 8736 lowercaseName = name.toLowerCase(); 8737 8738 if ( !isXML ) { 8739 8740 // Avoid an infinite loop by temporarily removing this function from the getter 8741 handle = attrHandle[ lowercaseName ]; 8742 attrHandle[ lowercaseName ] = ret; 8743 ret = getter( elem, name, isXML ) != null ? 8744 lowercaseName : 8745 null; 8746 attrHandle[ lowercaseName ] = handle; 8747 } 8748 return ret; 8749 }; 8750} ); 8751 8752 8753 8754 8755var rfocusable = /^(?:input|select|textarea|button)$/i, 8756 rclickable = /^(?:a|area)$/i; 8757 8758jQuery.fn.extend( { 8759 prop: function( name, value ) { 8760 return access( this, jQuery.prop, name, value, arguments.length > 1 ); 8761 }, 8762 8763 removeProp: function( name ) { 8764 return this.each( function() { 8765 delete this[ jQuery.propFix[ name ] || name ]; 8766 } ); 8767 } 8768} ); 8769 8770jQuery.extend( { 8771 prop: function( elem, name, value ) { 8772 var ret, hooks, 8773 nType = elem.nodeType; 8774 8775 // Don't get/set properties on text, comment and attribute nodes 8776 if ( nType === 3 || nType === 8 || nType === 2 ) { 8777 return; 8778 } 8779 8780 if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) { 8781 8782 // Fix name and attach hooks 8783 name = jQuery.propFix[ name ] || name; 8784 hooks = jQuery.propHooks[ name ]; 8785 } 8786 8787 if ( value !== undefined ) { 8788 if ( hooks && "set" in hooks && 8789 ( ret = hooks.set( elem, value, name ) ) !== undefined ) { 8790 return ret; 8791 } 8792 8793 return ( elem[ name ] = value ); 8794 } 8795 8796 if ( hooks && "get" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) { 8797 return ret; 8798 } 8799 8800 return elem[ name ]; 8801 }, 8802 8803 propHooks: { 8804 tabIndex: { 8805 get: function( elem ) { 8806 8807 // Support: IE <=9 - 11 only 8808 // elem.tabIndex doesn't always return the 8809 // correct value when it hasn't been explicitly set 8810 // Use proper attribute retrieval (trac-12072) 8811 var tabindex = jQuery.find.attr( elem, "tabindex" ); 8812 8813 if ( tabindex ) { 8814 return parseInt( tabindex, 10 ); 8815 } 8816 8817 if ( 8818 rfocusable.test( elem.nodeName ) || 8819 rclickable.test( elem.nodeName ) && 8820 elem.href 8821 ) { 8822 return 0; 8823 } 8824 8825 return -1; 8826 } 8827 } 8828 }, 8829 8830 propFix: { 8831 "for": "htmlFor", 8832 "class": "className" 8833 } 8834} ); 8835 8836// Support: IE <=11 only 8837// Accessing the selectedIndex property 8838// forces the browser to respect setting selected 8839// on the option 8840// The getter ensures a default option is selected 8841// when in an optgroup 8842// eslint rule "no-unused-expressions" is disabled for this code 8843// since it considers such accessions noop 8844if ( !support.optSelected ) { 8845 jQuery.propHooks.selected = { 8846 get: function( elem ) { 8847 8848 /* eslint no-unused-expressions: "off" */ 8849 8850 var parent = elem.parentNode; 8851 if ( parent && parent.parentNode ) { 8852 parent.parentNode.selectedIndex; 8853 } 8854 return null; 8855 }, 8856 set: function( elem ) { 8857 8858 /* eslint no-unused-expressions: "off" */ 8859 8860 var parent = elem.parentNode; 8861 if ( parent ) { 8862 parent.selectedIndex; 8863 8864 if ( parent.parentNode ) { 8865 parent.parentNode.selectedIndex; 8866 } 8867 } 8868 } 8869 }; 8870} 8871 8872jQuery.each( [ 8873 "tabIndex", 8874 "readOnly", 8875 "maxLength", 8876 "cellSpacing", 8877 "cellPadding", 8878 "rowSpan", 8879 "colSpan", 8880 "useMap", 8881 "frameBorder", 8882 "contentEditable" 8883], function() { 8884 jQuery.propFix[ this.toLowerCase() ] = this; 8885} ); 8886 8887 8888 8889 8890 // Strip and collapse whitespace according to HTML spec 8891 // https://infra.spec.whatwg.org/#strip-and-collapse-ascii-whitespace 8892 function stripAndCollapse( value ) { 8893 var tokens = value.match( rnothtmlwhite ) || []; 8894 return tokens.join( " " ); 8895 } 8896 8897 8898function getClass( elem ) { 8899 return elem.getAttribute && elem.getAttribute( "class" ) || ""; 8900} 8901 8902function classesToArray( value ) { 8903 if ( Array.isArray( value ) ) { 8904 return value; 8905 } 8906 if ( typeof value === "string" ) { 8907 return value.match( rnothtmlwhite ) || []; 8908 } 8909 return []; 8910} 8911 8912jQuery.fn.extend( { 8913 addClass: function( value ) { 8914 var classNames, cur, curValue, className, i, finalValue; 8915 8916 if ( isFunction( value ) ) { 8917 return this.each( function( j ) { 8918 jQuery( this ).addClass( value.call( this, j, getClass( this ) ) ); 8919 } ); 8920 } 8921 8922 classNames = classesToArray( value ); 8923 8924 if ( classNames.length ) { 8925 return this.each( function() { 8926 curValue = getClass( this ); 8927 cur = this.nodeType === 1 && ( " " + stripAndCollapse( curValue ) + " " ); 8928 8929 if ( cur ) { 8930 for ( i = 0; i < classNames.length; i++ ) { 8931 className = classNames[ i ]; 8932 if ( cur.indexOf( " " + className + " " ) < 0 ) { 8933 cur += className + " "; 8934 } 8935 } 8936 8937 // Only assign if different to avoid unneeded rendering. 8938 finalValue = stripAndCollapse( cur ); 8939 if ( curValue !== finalValue ) { 8940 this.setAttribute( "class", finalValue ); 8941 } 8942 } 8943 } ); 8944 } 8945 8946 return this; 8947 }, 8948 8949 removeClass: function( value ) { 8950 var classNames, cur, curValue, className, i, finalValue; 8951 8952 if ( isFunction( value ) ) { 8953 return this.each( function( j ) { 8954 jQuery( this ).removeClass( value.call( this, j, getClass( this ) ) ); 8955 } ); 8956 } 8957 8958 if ( !arguments.length ) { 8959 return this.attr( "class", "" ); 8960 } 8961 8962 classNames = classesToArray( value ); 8963 8964 if ( classNames.length ) { 8965 return this.each( function() { 8966 curValue = getClass( this ); 8967 8968 // This expression is here for better compressibility (see addClass) 8969 cur = this.nodeType === 1 && ( " " + stripAndCollapse( curValue ) + " " ); 8970 8971 if ( cur ) { 8972 for ( i = 0; i < classNames.length; i++ ) { 8973 className = classNames[ i ]; 8974 8975 // Remove *all* instances 8976 while ( cur.indexOf( " " + className + " " ) > -1 ) { 8977 cur = cur.replace( " " + className + " ", " " ); 8978 } 8979 } 8980 8981 // Only assign if different to avoid unneeded rendering. 8982 finalValue = stripAndCollapse( cur ); 8983 if ( curValue !== finalValue ) { 8984 this.setAttribute( "class", finalValue ); 8985 } 8986 } 8987 } ); 8988 } 8989 8990 return this; 8991 }, 8992 8993 toggleClass: function( value, stateVal ) { 8994 var classNames, className, i, self, 8995 type = typeof value, 8996 isValidValue = type === "string" || Array.isArray( value ); 8997 8998 if ( isFunction( value ) ) { 8999 return this.each( function( i ) { 9000 jQuery( this ).toggleClass( 9001 value.call( this, i, getClass( this ), stateVal ), 9002 stateVal 9003 ); 9004 } ); 9005 } 9006 9007 if ( typeof stateVal === "boolean" && isValidValue ) { 9008 return stateVal ? this.addClass( value ) : this.removeClass( value ); 9009 } 9010 9011 classNames = classesToArray( value ); 9012 9013 return this.each( function() { 9014 if ( isValidValue ) { 9015 9016 // Toggle individual class names 9017 self = jQuery( this ); 9018 9019 for ( i = 0; i < classNames.length; i++ ) { 9020 className = classNames[ i ]; 9021 9022 // Check each className given, space separated list 9023 if ( self.hasClass( className ) ) { 9024 self.removeClass( className ); 9025 } else { 9026 self.addClass( className ); 9027 } 9028 } 9029 9030 // Toggle whole class name 9031 } else if ( value === undefined || type === "boolean" ) { 9032 className = getClass( this ); 9033 if ( className ) { 9034 9035 // Store className if set 9036 dataPriv.set( this, "__className__", className ); 9037 } 9038 9039 // If the element has a class name or if we're passed `false`, 9040 // then remove the whole classname (if there was one, the above saved it). 9041 // Otherwise bring back whatever was previously saved (if anything), 9042 // falling back to the empty string if nothing was stored. 9043 if ( this.setAttribute ) { 9044 this.setAttribute( "class", 9045 className || value === false ? 9046 "" : 9047 dataPriv.get( this, "__className__" ) || "" 9048 ); 9049 } 9050 } 9051 } ); 9052 }, 9053 9054 hasClass: function( selector ) { 9055 var className, elem, 9056 i = 0; 9057 9058 className = " " + selector + " "; 9059 while ( ( elem = this[ i++ ] ) ) { 9060 if ( elem.nodeType === 1 && 9061 ( " " + stripAndCollapse( getClass( elem ) ) + " " ).indexOf( className ) > -1 ) { 9062 return true; 9063 } 9064 } 9065 9066 return false; 9067 } 9068} ); 9069 9070 9071 9072 9073var rreturn = /\r/g; 9074 9075jQuery.fn.extend( { 9076 val: function( value ) { 9077 var hooks, ret, valueIsFunction, 9078 elem = this[ 0 ]; 9079 9080 if ( !arguments.length ) { 9081 if ( elem ) { 9082 hooks = jQuery.valHooks[ elem.type ] || 9083 jQuery.valHooks[ elem.nodeName.toLowerCase() ]; 9084 9085 if ( hooks && 9086 "get" in hooks && 9087 ( ret = hooks.get( elem, "value" ) ) !== undefined 9088 ) { 9089 return ret; 9090 } 9091 9092 ret = elem.value; 9093 9094 // Handle most common string cases 9095 if ( typeof ret === "string" ) { 9096 return ret.replace( rreturn, "" ); 9097 } 9098 9099 // Handle cases where value is null/undef or number 9100 return ret == null ? "" : ret; 9101 } 9102 9103 return; 9104 } 9105 9106 valueIsFunction = isFunction( value ); 9107 9108 return this.each( function( i ) { 9109 var val; 9110 9111 if ( this.nodeType !== 1 ) { 9112 return; 9113 } 9114 9115 if ( valueIsFunction ) { 9116 val = value.call( this, i, jQuery( this ).val() ); 9117 } else { 9118 val = value; 9119 } 9120 9121 // Treat null/undefined as ""; convert numbers to string 9122 if ( val == null ) { 9123 val = ""; 9124 9125 } else if ( typeof val === "number" ) { 9126 val += ""; 9127 9128 } else if ( Array.isArray( val ) ) { 9129 val = jQuery.map( val, function( value ) { 9130 return value == null ? "" : value + ""; 9131 } ); 9132 } 9133 9134 hooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ]; 9135 9136 // If set returns undefined, fall back to normal setting 9137 if ( !hooks || !( "set" in hooks ) || hooks.set( this, val, "value" ) === undefined ) { 9138 this.value = val; 9139 } 9140 } ); 9141 } 9142} ); 9143 9144jQuery.extend( { 9145 valHooks: { 9146 option: { 9147 get: function( elem ) { 9148 9149 var val = jQuery.find.attr( elem, "value" ); 9150 return val != null ? 9151 val : 9152 9153 // Support: IE <=10 - 11 only 9154 // option.text throws exceptions (trac-14686, trac-14858) 9155 // Strip and collapse whitespace 9156 // https://html.spec.whatwg.org/#strip-and-collapse-whitespace 9157 stripAndCollapse( jQuery.text( elem ) ); 9158 } 9159 }, 9160 select: { 9161 get: function( elem ) { 9162 var value, option, i, 9163 options = elem.options, 9164 index = elem.selectedIndex, 9165 one = elem.type === "select-one", 9166 values = one ? null : [], 9167 max = one ? index + 1 : options.length; 9168 9169 if ( index < 0 ) { 9170 i = max; 9171 9172 } else { 9173 i = one ? index : 0; 9174 } 9175 9176 // Loop through all the selected options 9177 for ( ; i < max; i++ ) { 9178 option = options[ i ]; 9179 9180 // Support: IE <=9 only 9181 // IE8-9 doesn't update selected after form reset (trac-2551) 9182 if ( ( option.selected || i === index ) && 9183 9184 // Don't return options that are disabled or in a disabled optgroup 9185 !option.disabled && 9186 ( !option.parentNode.disabled || 9187 !nodeName( option.parentNode, "optgroup" ) ) ) { 9188 9189 // Get the specific value for the option 9190 value = jQuery( option ).val(); 9191 9192 // We don't need an array for one selects 9193 if ( one ) { 9194 return value; 9195 } 9196 9197 // Multi-Selects return an array 9198 values.push( value ); 9199 } 9200 } 9201 9202 return values; 9203 }, 9204 9205 set: function( elem, value ) { 9206 var optionSet, option, 9207 options = elem.options, 9208 values = jQuery.makeArray( value ), 9209 i = options.length; 9210 9211 while ( i-- ) { 9212 option = options[ i ]; 9213 9214 /* eslint-disable no-cond-assign */ 9215 9216 if ( option.selected = 9217 jQuery.inArray( jQuery.valHooks.option.get( option ), values ) > -1 9218 ) { 9219 optionSet = true; 9220 } 9221 9222 /* eslint-enable no-cond-assign */ 9223 } 9224 9225 // Force browsers to behave consistently when non-matching value is set 9226 if ( !optionSet ) { 9227 elem.selectedIndex = -1; 9228 } 9229 return values; 9230 } 9231 } 9232 } 9233} ); 9234 9235// Radios and checkboxes getter/setter 9236jQuery.each( [ "radio", "checkbox" ], function() { 9237 jQuery.valHooks[ this ] = { 9238 set: function( elem, value ) { 9239 if ( Array.isArray( value ) ) { 9240 return ( elem.checked = jQuery.inArray( jQuery( elem ).val(), value ) > -1 ); 9241 } 9242 } 9243 }; 9244 if ( !support.checkOn ) { 9245 jQuery.valHooks[ this ].get = function( elem ) { 9246 return elem.getAttribute( "value" ) === null ? "on" : elem.value; 9247 }; 9248 } 9249} ); 9250 9251 9252 9253 9254// Return jQuery for attributes-only inclusion 9255var location = window.location; 9256 9257var nonce = { guid: Date.now() }; 9258 9259var rquery = ( /\?/ ); 9260 9261 9262 9263// Cross-browser xml parsing 9264jQuery.parseXML = function( data ) { 9265 var xml, parserErrorElem; 9266 if ( !data || typeof data !== "string" ) { 9267 return null; 9268 } 9269 9270 // Support: IE 9 - 11 only 9271 // IE throws on parseFromString with invalid input. 9272 try { 9273 xml = ( new window.DOMParser() ).parseFromString( data, "text/xml" ); 9274 } catch ( e ) {} 9275 9276 parserErrorElem = xml && xml.getElementsByTagName( "parsererror" )[ 0 ]; 9277 if ( !xml || parserErrorElem ) { 9278 jQuery.error( "Invalid XML: " + ( 9279 parserErrorElem ? 9280 jQuery.map( parserErrorElem.childNodes, function( el ) { 9281 return el.textContent; 9282 } ).join( "\n" ) : 9283 data 9284 ) ); 9285 } 9286 return xml; 9287}; 9288 9289 9290var rfocusMorph = /^(?:focusinfocus|focusoutblur)$/, 9291 stopPropagationCallback = function( e ) { 9292 e.stopPropagation(); 9293 }; 9294 9295jQuery.extend( jQuery.event, { 9296 9297 trigger: function( event, data, elem, onlyHandlers ) { 9298 9299 var i, cur, tmp, bubbleType, ontype, handle, special, lastElement, 9300 eventPath = [ elem || document ], 9301 type = hasOwn.call( event, "type" ) ? event.type : event, 9302 namespaces = hasOwn.call( event, "namespace" ) ? event.namespace.split( "." ) : []; 9303 9304 cur = lastElement = tmp = elem = elem || document; 9305 9306 // Don't do events on text and comment nodes 9307 if ( elem.nodeType === 3 || elem.nodeType === 8 ) { 9308 return; 9309 } 9310 9311 // focus/blur morphs to focusin/out; ensure we're not firing them right now 9312 if ( rfocusMorph.test( type + jQuery.event.triggered ) ) { 9313 return; 9314 } 9315 9316 if ( type.indexOf( "." ) > -1 ) { 9317 9318 // Namespaced trigger; create a regexp to match event type in handle() 9319 namespaces = type.split( "." ); 9320 type = namespaces.shift(); 9321 namespaces.sort(); 9322 } 9323 ontype = type.indexOf( ":" ) < 0 && "on" + type; 9324 9325 // Caller can pass in a jQuery.Event object, Object, or just an event type string 9326 event = event[ jQuery.expando ] ? 9327 event : 9328 new jQuery.Event( type, typeof event === "object" && event ); 9329 9330 // Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true) 9331 event.isTrigger = onlyHandlers ? 2 : 3; 9332 event.namespace = namespaces.join( "." ); 9333 event.rnamespace = event.namespace ? 9334 new RegExp( "(^|\\.)" + namespaces.join( "\\.(?:.*\\.|)" ) + "(\\.|$)" ) : 9335 null; 9336 9337 // Clean up the event in case it is being reused 9338 event.result = undefined; 9339 if ( !event.target ) { 9340 event.target = elem; 9341 } 9342 9343 // Clone any incoming data and prepend the event, creating the handler arg list 9344 data = data == null ? 9345 [ event ] : 9346 jQuery.makeArray( data, [ event ] ); 9347 9348 // Allow special events to draw outside the lines 9349 special = jQuery.event.special[ type ] || {}; 9350 if ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) { 9351 return; 9352 } 9353 9354 // Determine event propagation path in advance, per W3C events spec (trac-9951) 9355 // Bubble up to document, then to window; watch for a global ownerDocument var (trac-9724) 9356 if ( !onlyHandlers && !special.noBubble && !isWindow( elem ) ) { 9357 9358 bubbleType = special.delegateType || type; 9359 if ( !rfocusMorph.test( bubbleType + type ) ) { 9360 cur = cur.parentNode; 9361 } 9362 for ( ; cur; cur = cur.parentNode ) { 9363 eventPath.push( cur ); 9364 tmp = cur; 9365 } 9366 9367 // Only add window if we got to document (e.g., not plain obj or detached DOM) 9368 if ( tmp === ( elem.ownerDocument || document ) ) { 9369 eventPath.push( tmp.defaultView || tmp.parentWindow || window ); 9370 } 9371 } 9372 9373 // Fire handlers on the event path 9374 i = 0; 9375 while ( ( cur = eventPath[ i++ ] ) && !event.isPropagationStopped() ) { 9376 lastElement = cur; 9377 event.type = i > 1 ? 9378 bubbleType : 9379 special.bindType || type; 9380 9381 // jQuery handler 9382 handle = ( dataPriv.get( cur, "events" ) || Object.create( null ) )[ event.type ] && 9383 dataPriv.get( cur, "handle" ); 9384 if ( handle ) { 9385 handle.apply( cur, data ); 9386 } 9387 9388 // Native handler 9389 handle = ontype && cur[ ontype ]; 9390 if ( handle && handle.apply && acceptData( cur ) ) { 9391 event.result = handle.apply( cur, data ); 9392 if ( event.result === false ) { 9393 event.preventDefault(); 9394 } 9395 } 9396 } 9397 event.type = type; 9398 9399 // If nobody prevented the default action, do it now 9400 if ( !onlyHandlers && !event.isDefaultPrevented() ) { 9401 9402 if ( ( !special._default || 9403 special._default.apply( eventPath.pop(), data ) === false ) && 9404 acceptData( elem ) ) { 9405 9406 // Call a native DOM method on the target with the same name as the event. 9407 // Don't do default actions on window, that's where global variables be (trac-6170) 9408 if ( ontype && isFunction( elem[ type ] ) && !isWindow( elem ) ) { 9409 9410 // Don't re-trigger an onFOO event when we call its FOO() method 9411 tmp = elem[ ontype ]; 9412 9413 if ( tmp ) { 9414 elem[ ontype ] = null; 9415 } 9416 9417 // Prevent re-triggering of the same event, since we already bubbled it above 9418 jQuery.event.triggered = type; 9419 9420 if ( event.isPropagationStopped() ) { 9421 lastElement.addEventListener( type, stopPropagationCallback ); 9422 } 9423 9424 elem[ type ](); 9425 9426 if ( event.isPropagationStopped() ) { 9427 lastElement.removeEventListener( type, stopPropagationCallback ); 9428 } 9429 9430 jQuery.event.triggered = undefined; 9431 9432 if ( tmp ) { 9433 elem[ ontype ] = tmp; 9434 } 9435 } 9436 } 9437 } 9438 9439 return event.result; 9440 }, 9441 9442 // Piggyback on a donor event to simulate a different one 9443 // Used only for `focus(in | out)` events 9444 simulate: function( type, elem, event ) { 9445 var e = jQuery.extend( 9446 new jQuery.Event(), 9447 event, 9448 { 9449 type: type, 9450 isSimulated: true 9451 } 9452 ); 9453 9454 jQuery.event.trigger( e, null, elem ); 9455 } 9456 9457} ); 9458 9459jQuery.fn.extend( { 9460 9461 trigger: function( type, data ) { 9462 return this.each( function() { 9463 jQuery.event.trigger( type, data, this ); 9464 } ); 9465 }, 9466 triggerHandler: function( type, data ) { 9467 var elem = this[ 0 ]; 9468 if ( elem ) { 9469 return jQuery.event.trigger( type, data, elem, true ); 9470 } 9471 } 9472} ); 9473 9474 9475var 9476 rbracket = /\[\]$/, 9477 rCRLF = /\r?\n/g, 9478 rsubmitterTypes = /^(?:submit|button|image|reset|file)$/i, 9479 rsubmittable = /^(?:input|select|textarea|keygen)/i; 9480 9481function buildParams( prefix, obj, traditional, add ) { 9482 var name; 9483 9484 if ( Array.isArray( obj ) ) { 9485 9486 // Serialize array item. 9487 jQuery.each( obj, function( i, v ) { 9488 if ( traditional || rbracket.test( prefix ) ) { 9489 9490 // Treat each array item as a scalar. 9491 add( prefix, v ); 9492 9493 } else { 9494 9495 // Item is non-scalar (array or object), encode its numeric index. 9496 buildParams( 9497 prefix + "[" + ( typeof v === "object" && v != null ? i : "" ) + "]", 9498 v, 9499 traditional, 9500 add 9501 ); 9502 } 9503 } ); 9504 9505 } else if ( !traditional && toType( obj ) === "object" ) { 9506 9507 // Serialize object item. 9508 for ( name in obj ) { 9509 buildParams( prefix + "[" + name + "]", obj[ name ], traditional, add ); 9510 } 9511 9512 } else { 9513 9514 // Serialize scalar item. 9515 add( prefix, obj ); 9516 } 9517} 9518 9519// Serialize an array of form elements or a set of 9520// key/values into a query string 9521jQuery.param = function( a, traditional ) { 9522 var prefix, 9523 s = [], 9524 add = function( key, valueOrFunction ) { 9525 9526 // If value is a function, invoke it and use its return value 9527 var value = isFunction( valueOrFunction ) ? 9528 valueOrFunction() : 9529 valueOrFunction; 9530 9531 s[ s.length ] = encodeURIComponent( key ) + "=" + 9532 encodeURIComponent( value == null ? "" : value ); 9533 }; 9534 9535 if ( a == null ) { 9536 return ""; 9537 } 9538 9539 // If an array was passed in, assume that it is an array of form elements. 9540 if ( Array.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) { 9541 9542 // Serialize the form elements 9543 jQuery.each( a, function() { 9544 add( this.name, this.value ); 9545 } ); 9546 9547 } else { 9548 9549 // If traditional, encode the "old" way (the way 1.3.2 or older 9550 // did it), otherwise encode params recursively. 9551 for ( prefix in a ) { 9552 buildParams( prefix, a[ prefix ], traditional, add ); 9553 } 9554 } 9555 9556 // Return the resulting serialization 9557 return s.join( "&" ); 9558}; 9559 9560jQuery.fn.extend( { 9561 serialize: function() { 9562 return jQuery.param( this.serializeArray() ); 9563 }, 9564 serializeArray: function() { 9565 return this.map( function() { 9566 9567 // Can add propHook for "elements" to filter or add form elements 9568 var elements = jQuery.prop( this, "elements" ); 9569 return elements ? jQuery.makeArray( elements ) : this; 9570 } ).filter( function() { 9571 var type = this.type; 9572 9573 // Use .is( ":disabled" ) so that fieldset[disabled] works 9574 return this.name && !jQuery( this ).is( ":disabled" ) && 9575 rsubmittable.test( this.nodeName ) && !rsubmitterTypes.test( type ) && 9576 ( this.checked || !rcheckableType.test( type ) ); 9577 } ).map( function( _i, elem ) { 9578 var val = jQuery( this ).val(); 9579 9580 if ( val == null ) { 9581 return null; 9582 } 9583 9584 if ( Array.isArray( val ) ) { 9585 return jQuery.map( val, function( val ) { 9586 return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) }; 9587 } ); 9588 } 9589 9590 return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) }; 9591 } ).get(); 9592 } 9593} ); 9594 9595 9596var 9597 r20 = /%20/g, 9598 rhash = /#.*$/, 9599 rantiCache = /([?&])_=[^&]*/, 9600 rheaders = /^(.*?):[ \t]*([^\r\n]*)$/mg, 9601 9602 // trac-7653, trac-8125, trac-8152: local protocol detection 9603 rlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/, 9604 rnoContent = /^(?:GET|HEAD)$/, 9605 rprotocol = /^\/\//, 9606 9607 /* Prefilters 9608 * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example) 9609 * 2) These are called: 9610 * - BEFORE asking for a transport 9611 * - AFTER param serialization (s.data is a string if s.processData is true) 9612 * 3) key is the dataType 9613 * 4) the catchall symbol "*" can be used 9614 * 5) execution will start with transport dataType and THEN continue down to "*" if needed 9615 */ 9616 prefilters = {}, 9617 9618 /* Transports bindings 9619 * 1) key is the dataType 9620 * 2) the catchall symbol "*" can be used 9621 * 3) selection will start with transport dataType and THEN go to "*" if needed 9622 */ 9623 transports = {}, 9624 9625 // Avoid comment-prolog char sequence (trac-10098); must appease lint and evade compression 9626 allTypes = "*/".concat( "*" ), 9627 9628 // Anchor tag for parsing the document origin 9629 originAnchor = document.createElement( "a" ); 9630 9631originAnchor.href = location.href; 9632 9633// Base "constructor" for jQuery.ajaxPrefilter and jQuery.ajaxTransport 9634function addToPrefiltersOrTransports( structure ) { 9635 9636 // dataTypeExpression is optional and defaults to "*" 9637 return function( dataTypeExpression, func ) { 9638 9639 if ( typeof dataTypeExpression !== "string" ) { 9640 func = dataTypeExpression; 9641 dataTypeExpression = "*"; 9642 } 9643 9644 var dataType, 9645 i = 0, 9646 dataTypes = dataTypeExpression.toLowerCase().match( rnothtmlwhite ) || []; 9647 9648 if ( isFunction( func ) ) { 9649 9650 // For each dataType in the dataTypeExpression 9651 while ( ( dataType = dataTypes[ i++ ] ) ) { 9652 9653 // Prepend if requested 9654 if ( dataType[ 0 ] === "+" ) { 9655 dataType = dataType.slice( 1 ) || "*"; 9656 ( structure[ dataType ] = structure[ dataType ] || [] ).unshift( func ); 9657 9658 // Otherwise append 9659 } else { 9660 ( structure[ dataType ] = structure[ dataType ] || [] ).push( func ); 9661 } 9662 } 9663 } 9664 }; 9665} 9666 9667// Base inspection function for prefilters and transports 9668function inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR ) { 9669 9670 var inspected = {}, 9671 seekingTransport = ( structure === transports ); 9672 9673 function inspect( dataType ) { 9674 var selected; 9675 inspected[ dataType ] = true; 9676 jQuery.each( structure[ dataType ] || [], function( _, prefilterOrFactory ) { 9677 var dataTypeOrTransport = prefilterOrFactory( options, originalOptions, jqXHR ); 9678 if ( typeof dataTypeOrTransport === "string" && 9679 !seekingTransport && !inspected[ dataTypeOrTransport ] ) { 9680 9681 options.dataTypes.unshift( dataTypeOrTransport ); 9682 inspect( dataTypeOrTransport ); 9683 return false; 9684 } else if ( seekingTransport ) { 9685 return !( selected = dataTypeOrTransport ); 9686 } 9687 } ); 9688 return selected; 9689 } 9690 9691 return inspect( options.dataTypes[ 0 ] ) || !inspected[ "*" ] && inspect( "*" ); 9692} 9693 9694// A special extend for ajax options 9695// that takes "flat" options (not to be deep extended) 9696// Fixes trac-9887 9697function ajaxExtend( target, src ) { 9698 var key, deep, 9699 flatOptions = jQuery.ajaxSettings.flatOptions || {}; 9700 9701 for ( key in src ) { 9702 if ( src[ key ] !== undefined ) { 9703 ( flatOptions[ key ] ? target : ( deep || ( deep = {} ) ) )[ key ] = src[ key ]; 9704 } 9705 } 9706 if ( deep ) { 9707 jQuery.extend( true, target, deep ); 9708 } 9709 9710 return target; 9711} 9712 9713/* Handles responses to an ajax request: 9714 * - finds the right dataType (mediates between content-type and expected dataType) 9715 * - returns the corresponding response 9716 */ 9717function ajaxHandleResponses( s, jqXHR, responses ) { 9718 9719 var ct, type, finalDataType, firstDataType, 9720 contents = s.contents, 9721 dataTypes = s.dataTypes; 9722 9723 // Remove auto dataType and get content-type in the process 9724 while ( dataTypes[ 0 ] === "*" ) { 9725 dataTypes.shift(); 9726 if ( ct === undefined ) { 9727 ct = s.mimeType || jqXHR.getResponseHeader( "Content-Type" ); 9728 } 9729 } 9730 9731 // Check if we're dealing with a known content-type 9732 if ( ct ) { 9733 for ( type in contents ) { 9734 if ( contents[ type ] && contents[ type ].test( ct ) ) { 9735 dataTypes.unshift( type ); 9736 break; 9737 } 9738 } 9739 } 9740 9741 // Check to see if we have a response for the expected dataType 9742 if ( dataTypes[ 0 ] in responses ) { 9743 finalDataType = dataTypes[ 0 ]; 9744 } else { 9745 9746 // Try convertible dataTypes 9747 for ( type in responses ) { 9748 if ( !dataTypes[ 0 ] || s.converters[ type + " " + dataTypes[ 0 ] ] ) { 9749 finalDataType = type; 9750 break; 9751 } 9752 if ( !firstDataType ) { 9753 firstDataType = type; 9754 } 9755 } 9756 9757 // Or just use first one 9758 finalDataType = finalDataType || firstDataType; 9759 } 9760 9761 // If we found a dataType 9762 // We add the dataType to the list if needed 9763 // and return the corresponding response 9764 if ( finalDataType ) { 9765 if ( finalDataType !== dataTypes[ 0 ] ) { 9766 dataTypes.unshift( finalDataType ); 9767 } 9768 return responses[ finalDataType ]; 9769 } 9770} 9771 9772/* Chain conversions given the request and the original response 9773 * Also sets the responseXXX fields on the jqXHR instance 9774 */ 9775function ajaxConvert( s, response, jqXHR, isSuccess ) { 9776 var conv2, current, conv, tmp, prev, 9777 converters = {}, 9778 9779 // Work with a copy of dataTypes in case we need to modify it for conversion 9780 dataTypes = s.dataTypes.slice(); 9781 9782 // Create converters map with lowercased keys 9783 if ( dataTypes[ 1 ] ) { 9784 for ( conv in s.converters ) { 9785 converters[ conv.toLowerCase() ] = s.converters[ conv ]; 9786 } 9787 } 9788 9789 current = dataTypes.shift(); 9790 9791 // Convert to each sequential dataType 9792 while ( current ) { 9793 9794 if ( s.responseFields[ current ] ) { 9795 jqXHR[ s.responseFields[ current ] ] = response; 9796 } 9797 9798 // Apply the dataFilter if provided 9799 if ( !prev && isSuccess && s.dataFilter ) { 9800 response = s.dataFilter( response, s.dataType ); 9801 } 9802 9803 prev = current; 9804 current = dataTypes.shift(); 9805 9806 if ( current ) { 9807 9808 // There's only work to do if current dataType is non-auto 9809 if ( current === "*" ) { 9810 9811 current = prev; 9812 9813 // Convert response if prev dataType is non-auto and differs from current 9814 } else if ( prev !== "*" && prev !== current ) { 9815 9816 // Seek a direct converter 9817 conv = converters[ prev + " " + current ] || converters[ "* " + current ]; 9818 9819 // If none found, seek a pair 9820 if ( !conv ) { 9821 for ( conv2 in converters ) { 9822 9823 // If conv2 outputs current 9824 tmp = conv2.split( " " ); 9825 if ( tmp[ 1 ] === current ) { 9826 9827 // If prev can be converted to accepted input 9828 conv = converters[ prev + " " + tmp[ 0 ] ] || 9829 converters[ "* " + tmp[ 0 ] ]; 9830 if ( conv ) { 9831 9832 // Condense equivalence converters 9833 if ( conv === true ) { 9834 conv = converters[ conv2 ]; 9835 9836 // Otherwise, insert the intermediate dataType 9837 } else if ( converters[ conv2 ] !== true ) { 9838 current = tmp[ 0 ]; 9839 dataTypes.unshift( tmp[ 1 ] ); 9840 } 9841 break; 9842 } 9843 } 9844 } 9845 } 9846 9847 // Apply converter (if not an equivalence) 9848 if ( conv !== true ) { 9849 9850 // Unless errors are allowed to bubble, catch and return them 9851 if ( conv && s.throws ) { 9852 response = conv( response ); 9853 } else { 9854 try { 9855 response = conv( response ); 9856 } catch ( e ) { 9857 return { 9858 state: "parsererror", 9859 error: conv ? e : "No conversion from " + prev + " to " + current 9860 }; 9861 } 9862 } 9863 } 9864 } 9865 } 9866 } 9867 9868 return { state: "success", data: response }; 9869} 9870 9871jQuery.extend( { 9872 9873 // Counter for holding the number of active queries 9874 active: 0, 9875 9876 // Last-Modified header cache for next request 9877 lastModified: {}, 9878 etag: {}, 9879 9880 ajaxSettings: { 9881 url: location.href, 9882 type: "GET", 9883 isLocal: rlocalProtocol.test( location.protocol ), 9884 global: true, 9885 processData: true, 9886 async: true, 9887 contentType: "application/x-www-form-urlencoded; charset=UTF-8", 9888 9889 /* 9890 timeout: 0, 9891 data: null, 9892 dataType: null, 9893 username: null, 9894 password: null, 9895 cache: null, 9896 throws: false, 9897 traditional: false, 9898 headers: {}, 9899 */ 9900 9901 accepts: { 9902 "*": allTypes, 9903 text: "text/plain", 9904 html: "text/html", 9905 xml: "application/xml, text/xml", 9906 json: "application/json, text/javascript" 9907 }, 9908 9909 contents: { 9910 xml: /\bxml\b/, 9911 html: /\bhtml/, 9912 json: /\bjson\b/ 9913 }, 9914 9915 responseFields: { 9916 xml: "responseXML", 9917 text: "responseText", 9918 json: "responseJSON" 9919 }, 9920 9921 // Data converters 9922 // Keys separate source (or catchall "*") and destination types with a single space 9923 converters: { 9924 9925 // Convert anything to text 9926 "* text": String, 9927 9928 // Text to html (true = no transformation) 9929 "text html": true, 9930 9931 // Evaluate text as a json expression 9932 "text json": JSON.parse, 9933 9934 // Parse text as xml 9935 "text xml": jQuery.parseXML 9936 }, 9937 9938 // For options that shouldn't be deep extended: 9939 // you can add your own custom options here if 9940 // and when you create one that shouldn't be 9941 // deep extended (see ajaxExtend) 9942 flatOptions: { 9943 url: true, 9944 context: true 9945 } 9946 }, 9947 9948 // Creates a full fledged settings object into target 9949 // with both ajaxSettings and settings fields. 9950 // If target is omitted, writes into ajaxSettings. 9951 ajaxSetup: function( target, settings ) { 9952 return settings ? 9953 9954 // Building a settings object 9955 ajaxExtend( ajaxExtend( target, jQuery.ajaxSettings ), settings ) : 9956 9957 // Extending ajaxSettings 9958 ajaxExtend( jQuery.ajaxSettings, target ); 9959 }, 9960 9961 ajaxPrefilter: addToPrefiltersOrTransports( prefilters ), 9962 ajaxTransport: addToPrefiltersOrTransports( transports ), 9963 9964 // Main method 9965 ajax: function( url, options ) { 9966 9967 // If url is an object, simulate pre-1.5 signature 9968 if ( typeof url === "object" ) { 9969 options = url; 9970 url = undefined; 9971 } 9972 9973 // Force options to be an object 9974 options = options || {}; 9975 9976 var transport, 9977 9978 // URL without anti-cache param 9979 cacheURL, 9980 9981 // Response headers 9982 responseHeadersString, 9983 responseHeaders, 9984 9985 // timeout handle 9986 timeoutTimer, 9987 9988 // Url cleanup var 9989 urlAnchor, 9990 9991 // Request state (becomes false upon send and true upon completion) 9992 completed, 9993 9994 // To know if global events are to be dispatched 9995 fireGlobals, 9996 9997 // Loop variable 9998 i, 9999 10000 // uncached part of the url 10001 uncached, 10002 10003 // Create the final options object 10004 s = jQuery.ajaxSetup( {}, options ), 10005 10006 // Callbacks context 10007 callbackContext = s.context || s, 10008 10009 // Context for global events is callbackContext if it is a DOM node or jQuery collection 10010 globalEventContext = s.context && 10011 ( callbackContext.nodeType || callbackContext.jquery ) ? 10012 jQuery( callbackContext ) : 10013 jQuery.event, 10014 10015 // Deferreds 10016 deferred = jQuery.Deferred(), 10017 completeDeferred = jQuery.Callbacks( "once memory" ), 10018 10019 // Status-dependent callbacks 10020 statusCode = s.statusCode || {}, 10021 10022 // Headers (they are sent all at once) 10023 requestHeaders = {}, 10024 requestHeadersNames = {}, 10025 10026 // Default abort message 10027 strAbort = "canceled", 10028 10029 // Fake xhr 10030 jqXHR = { 10031 readyState: 0, 10032 10033 // Builds headers hashtable if needed 10034 getResponseHeader: function( key ) { 10035 var match; 10036 if ( completed ) { 10037 if ( !responseHeaders ) { 10038 responseHeaders = {}; 10039 while ( ( match = rheaders.exec( responseHeadersString ) ) ) { 10040 responseHeaders[ match[ 1 ].toLowerCase() + " " ] = 10041 ( responseHeaders[ match[ 1 ].toLowerCase() + " " ] || [] ) 10042 .concat( match[ 2 ] ); 10043 } 10044 } 10045 match = responseHeaders[ key.toLowerCase() + " " ]; 10046 } 10047 return match == null ? null : match.join( ", " ); 10048 }, 10049 10050 // Raw string 10051 getAllResponseHeaders: function() { 10052 return completed ? responseHeadersString : null; 10053 }, 10054 10055 // Caches the header 10056 setRequestHeader: function( name, value ) { 10057 if ( completed == null ) { 10058 name = requestHeadersNames[ name.toLowerCase() ] = 10059 requestHeadersNames[ name.toLowerCase() ] || name; 10060 requestHeaders[ name ] = value; 10061 } 10062 return this; 10063 }, 10064 10065 // Overrides response content-type header 10066 overrideMimeType: function( type ) { 10067 if ( completed == null ) { 10068 s.mimeType = type; 10069 } 10070 return this; 10071 }, 10072 10073 // Status-dependent callbacks 10074 statusCode: function( map ) { 10075 var code; 10076 if ( map ) { 10077 if ( completed ) { 10078 10079 // Execute the appropriate callbacks 10080 jqXHR.always( map[ jqXHR.status ] ); 10081 } else { 10082 10083 // Lazy-add the new callbacks in a way that preserves old ones 10084 for ( code in map ) { 10085 statusCode[ code ] = [ statusCode[ code ], map[ code ] ]; 10086 } 10087 } 10088 } 10089 return this; 10090 }, 10091 10092 // Cancel the request 10093 abort: function( statusText ) { 10094 var finalText = statusText || strAbort; 10095 if ( transport ) { 10096 transport.abort( finalText ); 10097 } 10098 done( 0, finalText ); 10099 return this; 10100 } 10101 }; 10102 10103 // Attach deferreds 10104 deferred.promise( jqXHR ); 10105 10106 // Add protocol if not provided (prefilters might expect it) 10107 // Handle falsy url in the settings object (trac-10093: consistency with old signature) 10108 // We also use the url parameter if available 10109 s.url = ( ( url || s.url || location.href ) + "" ) 10110 .replace( rprotocol, location.protocol + "//" ); 10111 10112 // Alias method option to type as per ticket trac-12004 10113 s.type = options.method || options.type || s.method || s.type; 10114 10115 // Extract dataTypes list 10116 s.dataTypes = ( s.dataType || "*" ).toLowerCase().match( rnothtmlwhite ) || [ "" ]; 10117 10118 // A cross-domain request is in order when the origin doesn't match the current origin. 10119 if ( s.crossDomain == null ) { 10120 urlAnchor = document.createElement( "a" ); 10121 10122 // Support: IE <=8 - 11, Edge 12 - 15 10123 // IE throws exception on accessing the href property if url is malformed, 10124 // e.g. http://example.com:80x/ 10125 try { 10126 urlAnchor.href = s.url; 10127 10128 // Support: IE <=8 - 11 only 10129 // Anchor's host property isn't correctly set when s.url is relative 10130 urlAnchor.href = urlAnchor.href; 10131 s.crossDomain = originAnchor.protocol + "//" + originAnchor.host !== 10132 urlAnchor.protocol + "//" + urlAnchor.host; 10133 } catch ( e ) { 10134 10135 // If there is an error parsing the URL, assume it is crossDomain, 10136 // it can be rejected by the transport if it is invalid 10137 s.crossDomain = true; 10138 } 10139 } 10140 10141 // Convert data if not already a string 10142 if ( s.data && s.processData && typeof s.data !== "string" ) { 10143 s.data = jQuery.param( s.data, s.traditional ); 10144 } 10145 10146 // Apply prefilters 10147 inspectPrefiltersOrTransports( prefilters, s, options, jqXHR ); 10148 10149 // If request was aborted inside a prefilter, stop there 10150 if ( completed ) { 10151 return jqXHR; 10152 } 10153 10154 // We can fire global events as of now if asked to 10155 // Don't fire events if jQuery.event is undefined in an AMD-usage scenario (trac-15118) 10156 fireGlobals = jQuery.event && s.global; 10157 10158 // Watch for a new set of requests 10159 if ( fireGlobals && jQuery.active++ === 0 ) { 10160 jQuery.event.trigger( "ajaxStart" ); 10161 } 10162 10163 // Uppercase the type 10164 s.type = s.type.toUpperCase(); 10165 10166 // Determine if request has content 10167 s.hasContent = !rnoContent.test( s.type ); 10168 10169 // Save the URL in case we're toying with the If-Modified-Since 10170 // and/or If-None-Match header later on 10171 // Remove hash to simplify url manipulation 10172 cacheURL = s.url.replace( rhash, "" ); 10173 10174 // More options handling for requests with no content 10175 if ( !s.hasContent ) { 10176 10177 // Remember the hash so we can put it back 10178 uncached = s.url.slice( cacheURL.length ); 10179 10180 // If data is available and should be processed, append data to url 10181 if ( s.data && ( s.processData || typeof s.data === "string" ) ) { 10182 cacheURL += ( rquery.test( cacheURL ) ? "&" : "?" ) + s.data; 10183 10184 // trac-9682: remove data so that it's not used in an eventual retry 10185 delete s.data; 10186 } 10187 10188 // Add or update anti-cache param if needed 10189 if ( s.cache === false ) { 10190 cacheURL = cacheURL.replace( rantiCache, "$1" ); 10191 uncached = ( rquery.test( cacheURL ) ? "&" : "?" ) + "_=" + ( nonce.guid++ ) + 10192 uncached; 10193 } 10194 10195 // Put hash and anti-cache on the URL that will be requested (gh-1732) 10196 s.url = cacheURL + uncached; 10197 10198 // Change '%20' to '+' if this is encoded form body content (gh-2658) 10199 } else if ( s.data && s.processData && 10200 ( s.contentType || "" ).indexOf( "application/x-www-form-urlencoded" ) === 0 ) { 10201 s.data = s.data.replace( r20, "+" ); 10202 } 10203 10204 // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode. 10205 if ( s.ifModified ) { 10206 if ( jQuery.lastModified[ cacheURL ] ) { 10207 jqXHR.setRequestHeader( "If-Modified-Since", jQuery.lastModified[ cacheURL ] ); 10208 } 10209 if ( jQuery.etag[ cacheURL ] ) { 10210 jqXHR.setRequestHeader( "If-None-Match", jQuery.etag[ cacheURL ] ); 10211 } 10212 } 10213 10214 // Set the correct header, if data is being sent 10215 if ( s.data && s.hasContent && s.contentType !== false || options.contentType ) { 10216 jqXHR.setRequestHeader( "Content-Type", s.contentType ); 10217 } 10218 10219 // Set the Accepts header for the server, depending on the dataType 10220 jqXHR.setRequestHeader( 10221 "Accept", 10222 s.dataTypes[ 0 ] && s.accepts[ s.dataTypes[ 0 ] ] ? 10223 s.accepts[ s.dataTypes[ 0 ] ] + 10224 ( s.dataTypes[ 0 ] !== "*" ? ", " + allTypes + "; q=0.01" : "" ) : 10225 s.accepts[ "*" ] 10226 ); 10227 10228 // Check for headers option 10229 for ( i in s.headers ) { 10230 jqXHR.setRequestHeader( i, s.headers[ i ] ); 10231 } 10232 10233 // Allow custom headers/mimetypes and early abort 10234 if ( s.beforeSend && 10235 ( s.beforeSend.call( callbackContext, jqXHR, s ) === false || completed ) ) { 10236 10237 // Abort if not done already and return 10238 return jqXHR.abort(); 10239 } 10240 10241 // Aborting is no longer a cancellation 10242 strAbort = "abort"; 10243 10244 // Install callbacks on deferreds 10245 completeDeferred.add( s.complete ); 10246 jqXHR.done( s.success ); 10247 jqXHR.fail( s.error ); 10248 10249 // Get transport 10250 transport = inspectPrefiltersOrTransports( transports, s, options, jqXHR ); 10251 10252 // If no transport, we auto-abort 10253 if ( !transport ) { 10254 done( -1, "No Transport" ); 10255 } else { 10256 jqXHR.readyState = 1; 10257 10258 // Send global event 10259 if ( fireGlobals ) { 10260 globalEventContext.trigger( "ajaxSend", [ jqXHR, s ] ); 10261 } 10262 10263 // If request was aborted inside ajaxSend, stop there 10264 if ( completed ) { 10265 return jqXHR; 10266 } 10267 10268 // Timeout 10269 if ( s.async && s.timeout > 0 ) { 10270 timeoutTimer = window.setTimeout( function() { 10271 jqXHR.abort( "timeout" ); 10272 }, s.timeout ); 10273 } 10274 10275 try { 10276 completed = false; 10277 transport.send( requestHeaders, done ); 10278 } catch ( e ) { 10279 10280 // Rethrow post-completion exceptions 10281 if ( completed ) { 10282 throw e; 10283 } 10284 10285 // Propagate others as results 10286 done( -1, e ); 10287 } 10288 } 10289 10290 // Callback for when everything is done 10291 function done( status, nativeStatusText, responses, headers ) { 10292 var isSuccess, success, error, response, modified, 10293 statusText = nativeStatusText; 10294 10295 // Ignore repeat invocations 10296 if ( completed ) { 10297 return; 10298 } 10299 10300 completed = true; 10301 10302 // Clear timeout if it exists 10303 if ( timeoutTimer ) { 10304 window.clearTimeout( timeoutTimer ); 10305 } 10306 10307 // Dereference transport for early garbage collection 10308 // (no matter how long the jqXHR object will be used) 10309 transport = undefined; 10310 10311 // Cache response headers 10312 responseHeadersString = headers || ""; 10313 10314 // Set readyState 10315 jqXHR.readyState = status > 0 ? 4 : 0; 10316 10317 // Determine if successful 10318 isSuccess = status >= 200 && status < 300 || status === 304; 10319 10320 // Get response data 10321 if ( responses ) { 10322 response = ajaxHandleResponses( s, jqXHR, responses ); 10323 } 10324 10325 // Use a noop converter for missing script but not if jsonp 10326 if ( !isSuccess && 10327 jQuery.inArray( "script", s.dataTypes ) > -1 && 10328 jQuery.inArray( "json", s.dataTypes ) < 0 ) { 10329 s.converters[ "text script" ] = function() {}; 10330 } 10331 10332 // Convert no matter what (that way responseXXX fields are always set) 10333 response = ajaxConvert( s, response, jqXHR, isSuccess ); 10334 10335 // If successful, handle type chaining 10336 if ( isSuccess ) { 10337 10338 // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode. 10339 if ( s.ifModified ) { 10340 modified = jqXHR.getResponseHeader( "Last-Modified" ); 10341 if ( modified ) { 10342 jQuery.lastModified[ cacheURL ] = modified; 10343 } 10344 modified = jqXHR.getResponseHeader( "etag" ); 10345 if ( modified ) { 10346 jQuery.etag[ cacheURL ] = modified; 10347 } 10348 } 10349 10350 // if no content 10351 if ( status === 204 || s.type === "HEAD" ) { 10352 statusText = "nocontent"; 10353 10354 // if not modified 10355 } else if ( status === 304 ) { 10356 statusText = "notmodified"; 10357 10358 // If we have data, let's convert it 10359 } else { 10360 statusText = response.state; 10361 success = response.data; 10362 error = response.error; 10363 isSuccess = !error; 10364 } 10365 } else { 10366 10367 // Extract error from statusText and normalize for non-aborts 10368 error = statusText; 10369 if ( status || !statusText ) { 10370 statusText = "error"; 10371 if ( status < 0 ) { 10372 status = 0; 10373 } 10374 } 10375 } 10376 10377 // Set data for the fake xhr object 10378 jqXHR.status = status; 10379 jqXHR.statusText = ( nativeStatusText || statusText ) + ""; 10380 10381 // Success/Error 10382 if ( isSuccess ) { 10383 deferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] ); 10384 } else { 10385 deferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] ); 10386 } 10387 10388 // Status-dependent callbacks 10389 jqXHR.statusCode( statusCode ); 10390 statusCode = undefined; 10391 10392 if ( fireGlobals ) { 10393 globalEventContext.trigger( isSuccess ? "ajaxSuccess" : "ajaxError", 10394 [ jqXHR, s, isSuccess ? success : error ] ); 10395 } 10396 10397 // Complete 10398 completeDeferred.fireWith( callbackContext, [ jqXHR, statusText ] ); 10399 10400 if ( fireGlobals ) { 10401 globalEventContext.trigger( "ajaxComplete", [ jqXHR, s ] ); 10402 10403 // Handle the global AJAX counter 10404 if ( !( --jQuery.active ) ) { 10405 jQuery.event.trigger( "ajaxStop" ); 10406 } 10407 } 10408 } 10409 10410 return jqXHR; 10411 }, 10412 10413 getJSON: function( url, data, callback ) { 10414 return jQuery.get( url, data, callback, "json" ); 10415 }, 10416 10417 getScript: function( url, callback ) { 10418 return jQuery.get( url, undefined, callback, "script" ); 10419 } 10420} ); 10421 10422jQuery.each( [ "get", "post" ], function( _i, method ) { 10423 jQuery[ method ] = function( url, data, callback, type ) { 10424 10425 // Shift arguments if data argument was omitted 10426 if ( isFunction( data ) ) { 10427 type = type || callback; 10428 callback = data; 10429 data = undefined; 10430 } 10431 10432 // The url can be an options object (which then must have .url) 10433 return jQuery.ajax( jQuery.extend( { 10434 url: url, 10435 type: method, 10436 dataType: type, 10437 data: data, 10438 success: callback 10439 }, jQuery.isPlainObject( url ) && url ) ); 10440 }; 10441} ); 10442 10443jQuery.ajaxPrefilter( function( s ) { 10444 var i; 10445 for ( i in s.headers ) { 10446 if ( i.toLowerCase() === "content-type" ) { 10447 s.contentType = s.headers[ i ] || ""; 10448 } 10449 } 10450} ); 10451 10452 10453jQuery._evalUrl = function( url, options, doc ) { 10454 return jQuery.ajax( { 10455 url: url, 10456 10457 // Make this explicit, since user can override this through ajaxSetup (trac-11264) 10458 type: "GET", 10459 dataType: "script", 10460 cache: true, 10461 async: false, 10462 global: false, 10463 10464 // Only evaluate the response if it is successful (gh-4126) 10465 // dataFilter is not invoked for failure responses, so using it instead 10466 // of the default converter is kludgy but it works. 10467 converters: { 10468 "text script": function() {} 10469 }, 10470 dataFilter: function( response ) { 10471 jQuery.globalEval( response, options, doc ); 10472 } 10473 } ); 10474}; 10475 10476 10477jQuery.fn.extend( { 10478 wrapAll: function( html ) { 10479 var wrap; 10480 10481 if ( this[ 0 ] ) { 10482 if ( isFunction( html ) ) { 10483 html = html.call( this[ 0 ] ); 10484 } 10485 10486 // The elements to wrap the target around 10487 wrap = jQuery( html, this[ 0 ].ownerDocument ).eq( 0 ).clone( true ); 10488 10489 if ( this[ 0 ].parentNode ) { 10490 wrap.insertBefore( this[ 0 ] ); 10491 } 10492 10493 wrap.map( function() { 10494 var elem = this; 10495 10496 while ( elem.firstElementChild ) { 10497 elem = elem.firstElementChild; 10498 } 10499 10500 return elem; 10501 } ).append( this ); 10502 } 10503 10504 return this; 10505 }, 10506 10507 wrapInner: function( html ) { 10508 if ( isFunction( html ) ) { 10509 return this.each( function( i ) { 10510 jQuery( this ).wrapInner( html.call( this, i ) ); 10511 } ); 10512 } 10513 10514 return this.each( function() { 10515 var self = jQuery( this ), 10516 contents = self.contents(); 10517 10518 if ( contents.length ) { 10519 contents.wrapAll( html ); 10520 10521 } else { 10522 self.append( html ); 10523 } 10524 } ); 10525 }, 10526 10527 wrap: function( html ) { 10528 var htmlIsFunction = isFunction( html ); 10529 10530 return this.each( function( i ) { 10531 jQuery( this ).wrapAll( htmlIsFunction ? html.call( this, i ) : html ); 10532 } ); 10533 }, 10534 10535 unwrap: function( selector ) { 10536 this.parent( selector ).not( "body" ).each( function() { 10537 jQuery( this ).replaceWith( this.childNodes ); 10538 } ); 10539 return this; 10540 } 10541} ); 10542 10543 10544jQuery.expr.pseudos.hidden = function( elem ) { 10545 return !jQuery.expr.pseudos.visible( elem ); 10546}; 10547jQuery.expr.pseudos.visible = function( elem ) { 10548 return !!( elem.offsetWidth || elem.offsetHeight || elem.getClientRects().length ); 10549}; 10550 10551 10552 10553 10554jQuery.ajaxSettings.xhr = function() { 10555 try { 10556 return new window.XMLHttpRequest(); 10557 } catch ( e ) {} 10558}; 10559 10560var xhrSuccessStatus = { 10561 10562 // File protocol always yields status code 0, assume 200 10563 0: 200, 10564 10565 // Support: IE <=9 only 10566 // trac-1450: sometimes IE returns 1223 when it should be 204 10567 1223: 204 10568 }, 10569 xhrSupported = jQuery.ajaxSettings.xhr(); 10570 10571support.cors = !!xhrSupported && ( "withCredentials" in xhrSupported ); 10572support.ajax = xhrSupported = !!xhrSupported; 10573 10574jQuery.ajaxTransport( function( options ) { 10575 var callback, errorCallback; 10576 10577 // Cross domain only allowed if supported through XMLHttpRequest 10578 if ( support.cors || xhrSupported && !options.crossDomain ) { 10579 return { 10580 send: function( headers, complete ) { 10581 var i, 10582 xhr = options.xhr(); 10583 10584 xhr.open( 10585 options.type, 10586 options.url, 10587 options.async, 10588 options.username, 10589 options.password 10590 ); 10591 10592 // Apply custom fields if provided 10593 if ( options.xhrFields ) { 10594 for ( i in options.xhrFields ) { 10595 xhr[ i ] = options.xhrFields[ i ]; 10596 } 10597 } 10598 10599 // Override mime type if needed 10600 if ( options.mimeType && xhr.overrideMimeType ) { 10601 xhr.overrideMimeType( options.mimeType ); 10602 } 10603 10604 // X-Requested-With header 10605 // For cross-domain requests, seeing as conditions for a preflight are 10606 // akin to a jigsaw puzzle, we simply never set it to be sure. 10607 // (it can always be set on a per-request basis or even using ajaxSetup) 10608 // For same-domain requests, won't change header if already provided. 10609 if ( !options.crossDomain && !headers[ "X-Requested-With" ] ) { 10610 headers[ "X-Requested-With" ] = "XMLHttpRequest"; 10611 } 10612 10613 // Set headers 10614 for ( i in headers ) { 10615 xhr.setRequestHeader( i, headers[ i ] ); 10616 } 10617 10618 // Callback 10619 callback = function( type ) { 10620 return function() { 10621 if ( callback ) { 10622 callback = errorCallback = xhr.onload = 10623 xhr.onerror = xhr.onabort = xhr.ontimeout = 10624 xhr.onreadystatechange = null; 10625 10626 if ( type === "abort" ) { 10627 xhr.abort(); 10628 } else if ( type === "error" ) { 10629 10630 // Support: IE <=9 only 10631 // On a manual native abort, IE9 throws 10632 // errors on any property access that is not readyState 10633 if ( typeof xhr.status !== "number" ) { 10634 complete( 0, "error" ); 10635 } else { 10636 complete( 10637 10638 // File: protocol always yields status 0; see trac-8605, trac-14207 10639 xhr.status, 10640 xhr.statusText 10641 ); 10642 } 10643 } else { 10644 complete( 10645 xhrSuccessStatus[ xhr.status ] || xhr.status, 10646 xhr.statusText, 10647 10648 // Support: IE <=9 only 10649 // IE9 has no XHR2 but throws on binary (trac-11426) 10650 // For XHR2 non-text, let the caller handle it (gh-2498) 10651 ( xhr.responseType || "text" ) !== "text" || 10652 typeof xhr.responseText !== "string" ? 10653 { binary: xhr.response } : 10654 { text: xhr.responseText }, 10655 xhr.getAllResponseHeaders() 10656 ); 10657 } 10658 } 10659 }; 10660 }; 10661 10662 // Listen to events 10663 xhr.onload = callback(); 10664 errorCallback = xhr.onerror = xhr.ontimeout = callback( "error" ); 10665 10666 // Support: IE 9 only 10667 // Use onreadystatechange to replace onabort 10668 // to handle uncaught aborts 10669 if ( xhr.onabort !== undefined ) { 10670 xhr.onabort = errorCallback; 10671 } else { 10672 xhr.onreadystatechange = function() { 10673 10674 // Check readyState before timeout as it changes 10675 if ( xhr.readyState === 4 ) { 10676 10677 // Allow onerror to be called first, 10678 // but that will not handle a native abort 10679 // Also, save errorCallback to a variable 10680 // as xhr.onerror cannot be accessed 10681 window.setTimeout( function() { 10682 if ( callback ) { 10683 errorCallback(); 10684 } 10685 } ); 10686 } 10687 }; 10688 } 10689 10690 // Create the abort callback 10691 callback = callback( "abort" ); 10692 10693 try { 10694 10695 // Do send the request (this may raise an exception) 10696 xhr.send( options.hasContent && options.data || null ); 10697 } catch ( e ) { 10698 10699 // trac-14683: Only rethrow if this hasn't been notified as an error yet 10700 if ( callback ) { 10701 throw e; 10702 } 10703 } 10704 }, 10705 10706 abort: function() { 10707 if ( callback ) { 10708 callback(); 10709 } 10710 } 10711 }; 10712 } 10713} ); 10714 10715 10716 10717 10718// Prevent auto-execution of scripts when no explicit dataType was provided (See gh-2432) 10719jQuery.ajaxPrefilter( function( s ) { 10720 if ( s.crossDomain ) { 10721 s.contents.script = false; 10722 } 10723} ); 10724 10725// Install script dataType 10726jQuery.ajaxSetup( { 10727 accepts: { 10728 script: "text/javascript, application/javascript, " + 10729 "application/ecmascript, application/x-ecmascript" 10730 }, 10731 contents: { 10732 script: /\b(?:java|ecma)script\b/ 10733 }, 10734 converters: { 10735 "text script": function( text ) { 10736 jQuery.globalEval( text ); 10737 return text; 10738 } 10739 } 10740} ); 10741 10742// Handle cache's special case and crossDomain 10743jQuery.ajaxPrefilter( "script", function( s ) { 10744 if ( s.cache === undefined ) { 10745 s.cache = false; 10746 } 10747 if ( s.crossDomain ) { 10748 s.type = "GET"; 10749 } 10750} ); 10751 10752// Bind script tag hack transport 10753jQuery.ajaxTransport( "script", function( s ) { 10754 10755 // This transport only deals with cross domain or forced-by-attrs requests 10756 if ( s.crossDomain || s.scriptAttrs ) { 10757 var script, callback; 10758 return { 10759 send: function( _, complete ) { 10760 script = jQuery( "<script>" ) 10761 .attr( s.scriptAttrs || {} ) 10762 .prop( { charset: s.scriptCharset, src: s.url } ) 10763 .on( "load error", callback = function( evt ) { 10764 script.remove(); 10765 callback = null; 10766 if ( evt ) { 10767 complete( evt.type === "error" ? 404 : 200, evt.type ); 10768 } 10769 } ); 10770 10771 // Use native DOM manipulation to avoid our domManip AJAX trickery 10772 document.head.appendChild( script[ 0 ] ); 10773 }, 10774 abort: function() { 10775 if ( callback ) { 10776 callback(); 10777 } 10778 } 10779 }; 10780 } 10781} ); 10782 10783 10784 10785 10786var oldCallbacks = [], 10787 rjsonp = /(=)\?(?=&|$)|\?\?/; 10788 10789// Default jsonp settings 10790jQuery.ajaxSetup( { 10791 jsonp: "callback", 10792 jsonpCallback: function() { 10793 var callback = oldCallbacks.pop() || ( jQuery.expando + "_" + ( nonce.guid++ ) ); 10794 this[ callback ] = true; 10795 return callback; 10796 } 10797} ); 10798 10799// Detect, normalize options and install callbacks for jsonp requests 10800jQuery.ajaxPrefilter( "json jsonp", function( s, originalSettings, jqXHR ) { 10801 10802 var callbackName, overwritten, responseContainer, 10803 jsonProp = s.jsonp !== false && ( rjsonp.test( s.url ) ? 10804 "url" : 10805 typeof s.data === "string" && 10806 ( s.contentType || "" ) 10807 .indexOf( "application/x-www-form-urlencoded" ) === 0 && 10808 rjsonp.test( s.data ) && "data" 10809 ); 10810 10811 // Handle iff the expected data type is "jsonp" or we have a parameter to set 10812 if ( jsonProp || s.dataTypes[ 0 ] === "jsonp" ) { 10813 10814 // Get callback name, remembering preexisting value associated with it 10815 callbackName = s.jsonpCallback = isFunction( s.jsonpCallback ) ? 10816 s.jsonpCallback() : 10817 s.jsonpCallback; 10818 10819 // Insert callback into url or form data 10820 if ( jsonProp ) { 10821 s[ jsonProp ] = s[ jsonProp ].replace( rjsonp, "$1" + callbackName ); 10822 } else if ( s.jsonp !== false ) { 10823 s.url += ( rquery.test( s.url ) ? "&" : "?" ) + s.jsonp + "=" + callbackName; 10824 } 10825 10826 // Use data converter to retrieve json after script execution 10827 s.converters[ "script json" ] = function() { 10828 if ( !responseContainer ) { 10829 jQuery.error( callbackName + " was not called" ); 10830 } 10831 return responseContainer[ 0 ]; 10832 }; 10833 10834 // Force json dataType 10835 s.dataTypes[ 0 ] = "json"; 10836 10837 // Install callback 10838 overwritten = window[ callbackName ]; 10839 window[ callbackName ] = function() { 10840 responseContainer = arguments; 10841 }; 10842 10843 // Clean-up function (fires after converters) 10844 jqXHR.always( function() { 10845 10846 // If previous value didn't exist - remove it 10847 if ( overwritten === undefined ) { 10848 jQuery( window ).removeProp( callbackName ); 10849 10850 // Otherwise restore preexisting value 10851 } else { 10852 window[ callbackName ] = overwritten; 10853 } 10854 10855 // Save back as free 10856 if ( s[ callbackName ] ) { 10857 10858 // Make sure that re-using the options doesn't screw things around 10859 s.jsonpCallback = originalSettings.jsonpCallback; 10860 10861 // Save the callback name for future use 10862 oldCallbacks.push( callbackName ); 10863 } 10864 10865 // Call if it was a function and we have a response 10866 if ( responseContainer && isFunction( overwritten ) ) { 10867 overwritten( responseContainer[ 0 ] ); 10868 } 10869 10870 responseContainer = overwritten = undefined; 10871 } ); 10872 10873 // Delegate to script 10874 return "script"; 10875 } 10876} ); 10877 10878 10879 10880 10881// Support: Safari 8 only 10882// In Safari 8 documents created via document.implementation.createHTMLDocument 10883// collapse sibling forms: the second one becomes a child of the first one. 10884// Because of that, this security measure has to be disabled in Safari 8. 10885// https://bugs.webkit.org/show_bug.cgi?id=137337 10886support.createHTMLDocument = ( function() { 10887 var body = document.implementation.createHTMLDocument( "" ).body; 10888 body.innerHTML = "<form></form><form></form>"; 10889 return body.childNodes.length === 2; 10890} )(); 10891 10892 10893// Argument "data" should be string of html 10894// context (optional): If specified, the fragment will be created in this context, 10895// defaults to document 10896// keepScripts (optional): If true, will include scripts passed in the html string 10897jQuery.parseHTML = function( data, context, keepScripts ) { 10898 if ( typeof data !== "string" ) { 10899 return []; 10900 } 10901 if ( typeof context === "boolean" ) { 10902 keepScripts = context; 10903 context = false; 10904 } 10905 10906 var base, parsed, scripts; 10907 10908 if ( !context ) { 10909 10910 // Stop scripts or inline event handlers from being executed immediately 10911 // by using document.implementation 10912 if ( support.createHTMLDocument ) { 10913 context = document.implementation.createHTMLDocument( "" ); 10914 10915 // Set the base href for the created document 10916 // so any parsed elements with URLs 10917 // are based on the document's URL (gh-2965) 10918 base = context.createElement( "base" ); 10919 base.href = document.location.href; 10920 context.head.appendChild( base ); 10921 } else { 10922 context = document; 10923 } 10924 } 10925 10926 parsed = rsingleTag.exec( data ); 10927 scripts = !keepScripts && []; 10928 10929 // Single tag 10930 if ( parsed ) { 10931 return [ context.createElement( parsed[ 1 ] ) ]; 10932 } 10933 10934 parsed = buildFragment( [ data ], context, scripts ); 10935 10936 if ( scripts && scripts.length ) { 10937 jQuery( scripts ).remove(); 10938 } 10939 10940 return jQuery.merge( [], parsed.childNodes ); 10941}; 10942 10943 10944/** 10945 * Load a url into a page 10946 */ 10947jQuery.fn.load = function( url, params, callback ) { 10948 var selector, type, response, 10949 self = this, 10950 off = url.indexOf( " " ); 10951 10952 if ( off > -1 ) { 10953 selector = stripAndCollapse( url.slice( off ) ); 10954 url = url.slice( 0, off ); 10955 } 10956 10957 // If it's a function 10958 if ( isFunction( params ) ) { 10959 10960 // We assume that it's the callback 10961 callback = params; 10962 params = undefined; 10963 10964 // Otherwise, build a param string 10965 } else if ( params && typeof params === "object" ) { 10966 type = "POST"; 10967 } 10968 10969 // If we have elements to modify, make the request 10970 if ( self.length > 0 ) { 10971 jQuery.ajax( { 10972 url: url, 10973 10974 // If "type" variable is undefined, then "GET" method will be used. 10975 // Make value of this field explicit since 10976 // user can override it through ajaxSetup method 10977 type: type || "GET", 10978 dataType: "html", 10979 data: params 10980 } ).done( function( responseText ) { 10981 10982 // Save response for use in complete callback 10983 response = arguments; 10984 10985 self.html( selector ? 10986 10987 // If a selector was specified, locate the right elements in a dummy div 10988 // Exclude scripts to avoid IE 'Permission Denied' errors 10989 jQuery( "<div>" ).append( jQuery.parseHTML( responseText ) ).find( selector ) : 10990 10991 // Otherwise use the full result 10992 responseText ); 10993 10994 // If the request succeeds, this function gets "data", "status", "jqXHR" 10995 // but they are ignored because response was set above. 10996 // If it fails, this function gets "jqXHR", "status", "error" 10997 } ).always( callback && function( jqXHR, status ) { 10998 self.each( function() { 10999 callback.apply( this, response || [ jqXHR.responseText, status, jqXHR ] ); 11000 } ); 11001 } ); 11002 } 11003 11004 return this; 11005}; 11006 11007 11008 11009 11010jQuery.expr.pseudos.animated = function( elem ) { 11011 return jQuery.grep( jQuery.timers, function( fn ) { 11012 return elem === fn.elem; 11013 } ).length; 11014}; 11015 11016 11017 11018 11019jQuery.offset = { 11020 setOffset: function( elem, options, i ) { 11021 var curPosition, curLeft, curCSSTop, curTop, curOffset, curCSSLeft, calculatePosition, 11022 position = jQuery.css( elem, "position" ), 11023 curElem = jQuery( elem ), 11024 props = {}; 11025 11026 // Set position first, in-case top/left are set even on static elem 11027 if ( position === "static" ) { 11028 elem.style.position = "relative"; 11029 } 11030 11031 curOffset = curElem.offset(); 11032 curCSSTop = jQuery.css( elem, "top" ); 11033 curCSSLeft = jQuery.css( elem, "left" ); 11034 calculatePosition = ( position === "absolute" || position === "fixed" ) && 11035 ( curCSSTop + curCSSLeft ).indexOf( "auto" ) > -1; 11036 11037 // Need to be able to calculate position if either 11038 // top or left is auto and position is either absolute or fixed 11039 if ( calculatePosition ) { 11040 curPosition = curElem.position(); 11041 curTop = curPosition.top; 11042 curLeft = curPosition.left; 11043 11044 } else { 11045 curTop = parseFloat( curCSSTop ) || 0; 11046 curLeft = parseFloat( curCSSLeft ) || 0; 11047 } 11048 11049 if ( isFunction( options ) ) { 11050 11051 // Use jQuery.extend here to allow modification of coordinates argument (gh-1848) 11052 options = options.call( elem, i, jQuery.extend( {}, curOffset ) ); 11053 } 11054 11055 if ( options.top != null ) { 11056 props.top = ( options.top - curOffset.top ) + curTop; 11057 } 11058 if ( options.left != null ) { 11059 props.left = ( options.left - curOffset.left ) + curLeft; 11060 } 11061 11062 if ( "using" in options ) { 11063 options.using.call( elem, props ); 11064 11065 } else { 11066 curElem.css( props ); 11067 } 11068 } 11069}; 11070 11071jQuery.fn.extend( { 11072 11073 // offset() relates an element's border box to the document origin 11074 offset: function( options ) { 11075 11076 // Preserve chaining for setter 11077 if ( arguments.length ) { 11078 return options === undefined ? 11079 this : 11080 this.each( function( i ) { 11081 jQuery.offset.setOffset( this, options, i ); 11082 } ); 11083 } 11084 11085 var rect, win, 11086 elem = this[ 0 ]; 11087 11088 if ( !elem ) { 11089 return; 11090 } 11091 11092 // Return zeros for disconnected and hidden (display: none) elements (gh-2310) 11093 // Support: IE <=11 only 11094 // Running getBoundingClientRect on a 11095 // disconnected node in IE throws an error 11096 if ( !elem.getClientRects().length ) { 11097 return { top: 0, left: 0 }; 11098 } 11099 11100 // Get document-relative position by adding viewport scroll to viewport-relative gBCR 11101 rect = elem.getBoundingClientRect(); 11102 win = elem.ownerDocument.defaultView; 11103 return { 11104 top: rect.top + win.pageYOffset, 11105 left: rect.left + win.pageXOffset 11106 }; 11107 }, 11108 11109 // position() relates an element's margin box to its offset parent's padding box 11110 // This corresponds to the behavior of CSS absolute positioning 11111 position: function() { 11112 if ( !this[ 0 ] ) { 11113 return; 11114 } 11115 11116 var offsetParent, offset, doc, 11117 elem = this[ 0 ], 11118 parentOffset = { top: 0, left: 0 }; 11119 11120 // position:fixed elements are offset from the viewport, which itself always has zero offset 11121 if ( jQuery.css( elem, "position" ) === "fixed" ) { 11122 11123 // Assume position:fixed implies availability of getBoundingClientRect 11124 offset = elem.getBoundingClientRect(); 11125 11126 } else { 11127 offset = this.offset(); 11128 11129 // Account for the *real* offset parent, which can be the document or its root element 11130 // when a statically positioned element is identified 11131 doc = elem.ownerDocument; 11132 offsetParent = elem.offsetParent || doc.documentElement; 11133 while ( offsetParent && 11134 ( offsetParent === doc.body || offsetParent === doc.documentElement ) && 11135 jQuery.css( offsetParent, "position" ) === "static" ) { 11136 11137 offsetParent = offsetParent.parentNode; 11138 } 11139 if ( offsetParent && offsetParent !== elem && offsetParent.nodeType === 1 ) { 11140 11141 // Incorporate borders into its offset, since they are outside its content origin 11142 parentOffset = jQuery( offsetParent ).offset(); 11143 parentOffset.top += jQuery.css( offsetParent, "borderTopWidth", true ); 11144 parentOffset.left += jQuery.css( offsetParent, "borderLeftWidth", true ); 11145 } 11146 } 11147 11148 // Subtract parent offsets and element margins 11149 return { 11150 top: offset.top - parentOffset.top - jQuery.css( elem, "marginTop", true ), 11151 left: offset.left - parentOffset.left - jQuery.css( elem, "marginLeft", true ) 11152 }; 11153 }, 11154 11155 // This method will return documentElement in the following cases: 11156 // 1) For the element inside the iframe without offsetParent, this method will return 11157 // documentElement of the parent window 11158 // 2) For the hidden or detached element 11159 // 3) For body or html element, i.e. in case of the html node - it will return itself 11160 // 11161 // but those exceptions were never presented as a real life use-cases 11162 // and might be considered as more preferable results. 11163 // 11164 // This logic, however, is not guaranteed and can change at any point in the future 11165 offsetParent: function() { 11166 return this.map( function() { 11167 var offsetParent = this.offsetParent; 11168 11169 while ( offsetParent && jQuery.css( offsetParent, "position" ) === "static" ) { 11170 offsetParent = offsetParent.offsetParent; 11171 } 11172 11173 return offsetParent || documentElement; 11174 } ); 11175 } 11176} ); 11177 11178// Create scrollLeft and scrollTop methods 11179jQuery.each( { scrollLeft: "pageXOffset", scrollTop: "pageYOffset" }, function( method, prop ) { 11180 var top = "pageYOffset" === prop; 11181 11182 jQuery.fn[ method ] = function( val ) { 11183 return access( this, function( elem, method, val ) { 11184 11185 // Coalesce documents and windows 11186 var win; 11187 if ( isWindow( elem ) ) { 11188 win = elem; 11189 } else if ( elem.nodeType === 9 ) { 11190 win = elem.defaultView; 11191 } 11192 11193 if ( val === undefined ) { 11194 return win ? win[ prop ] : elem[ method ]; 11195 } 11196 11197 if ( win ) { 11198 win.scrollTo( 11199 !top ? val : win.pageXOffset, 11200 top ? val : win.pageYOffset 11201 ); 11202 11203 } else { 11204 elem[ method ] = val; 11205 } 11206 }, method, val, arguments.length ); 11207 }; 11208} ); 11209 11210// Support: Safari <=7 - 9.1, Chrome <=37 - 49 11211// Add the top/left cssHooks using jQuery.fn.position 11212// Webkit bug: https://bugs.webkit.org/show_bug.cgi?id=29084 11213// Blink bug: https://bugs.chromium.org/p/chromium/issues/detail?id=589347 11214// getComputedStyle returns percent when specified for top/left/bottom/right; 11215// rather than make the css module depend on the offset module, just check for it here 11216jQuery.each( [ "top", "left" ], function( _i, prop ) { 11217 jQuery.cssHooks[ prop ] = addGetHookIf( support.pixelPosition, 11218 function( elem, computed ) { 11219 if ( computed ) { 11220 computed = curCSS( elem, prop ); 11221 11222 // If curCSS returns percentage, fallback to offset 11223 return rnumnonpx.test( computed ) ? 11224 jQuery( elem ).position()[ prop ] + "px" : 11225 computed; 11226 } 11227 } 11228 ); 11229} ); 11230 11231 11232// Create innerHeight, innerWidth, height, width, outerHeight and outerWidth methods 11233jQuery.each( { Height: "height", Width: "width" }, function( name, type ) { 11234 jQuery.each( { 11235 padding: "inner" + name, 11236 content: type, 11237 "": "outer" + name 11238 }, function( defaultExtra, funcName ) { 11239 11240 // Margin is only for outerHeight, outerWidth 11241 jQuery.fn[ funcName ] = function( margin, value ) { 11242 var chainable = arguments.length && ( defaultExtra || typeof margin !== "boolean" ), 11243 extra = defaultExtra || ( margin === true || value === true ? "margin" : "border" ); 11244 11245 return access( this, function( elem, type, value ) { 11246 var doc; 11247 11248 if ( isWindow( elem ) ) { 11249 11250 // $( window ).outerWidth/Height return w/h including scrollbars (gh-1729) 11251 return funcName.indexOf( "outer" ) === 0 ? 11252 elem[ "inner" + name ] : 11253 elem.document.documentElement[ "client" + name ]; 11254 } 11255 11256 // Get document width or height 11257 if ( elem.nodeType === 9 ) { 11258 doc = elem.documentElement; 11259 11260 // Either scroll[Width/Height] or offset[Width/Height] or client[Width/Height], 11261 // whichever is greatest 11262 return Math.max( 11263 elem.body[ "scroll" + name ], doc[ "scroll" + name ], 11264 elem.body[ "offset" + name ], doc[ "offset" + name ], 11265 doc[ "client" + name ] 11266 ); 11267 } 11268 11269 return value === undefined ? 11270 11271 // Get width or height on the element, requesting but not forcing parseFloat 11272 jQuery.css( elem, type, extra ) : 11273 11274 // Set width or height on the element 11275 jQuery.style( elem, type, value, extra ); 11276 }, type, chainable ? margin : undefined, chainable ); 11277 }; 11278 } ); 11279} ); 11280 11281 11282jQuery.each( [ 11283 "ajaxStart", 11284 "ajaxStop", 11285 "ajaxComplete", 11286 "ajaxError", 11287 "ajaxSuccess", 11288 "ajaxSend" 11289], function( _i, type ) { 11290 jQuery.fn[ type ] = function( fn ) { 11291 return this.on( type, fn ); 11292 }; 11293} ); 11294 11295 11296 11297 11298jQuery.fn.extend( { 11299 11300 bind: function( types, data, fn ) { 11301 return this.on( types, null, data, fn ); 11302 }, 11303 unbind: function( types, fn ) { 11304 return this.off( types, null, fn ); 11305 }, 11306 11307 delegate: function( selector, types, data, fn ) { 11308 return this.on( types, selector, data, fn ); 11309 }, 11310 undelegate: function( selector, types, fn ) { 11311 11312 // ( namespace ) or ( selector, types [, fn] ) 11313 return arguments.length === 1 ? 11314 this.off( selector, "**" ) : 11315 this.off( types, selector || "**", fn ); 11316 }, 11317 11318 hover: function( fnOver, fnOut ) { 11319 return this 11320 .on( "mouseenter", fnOver ) 11321 .on( "mouseleave", fnOut || fnOver ); 11322 } 11323} ); 11324 11325jQuery.each( 11326 ( "blur focus focusin focusout resize scroll click dblclick " + 11327 "mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave " + 11328 "change select submit keydown keypress keyup contextmenu" ).split( " " ), 11329 function( _i, name ) { 11330 11331 // Handle event binding 11332 jQuery.fn[ name ] = function( data, fn ) { 11333 return arguments.length > 0 ? 11334 this.on( name, null, data, fn ) : 11335 this.trigger( name ); 11336 }; 11337 } 11338); 11339 11340 11341 11342 11343// Support: Android <=4.0 only 11344// Make sure we trim BOM and NBSP 11345// Require that the "whitespace run" starts from a non-whitespace 11346// to avoid O(N^2) behavior when the engine would try matching "\s+$" at each space position. 11347var rtrim = /^[\s\uFEFF\xA0]+|([^\s\uFEFF\xA0])[\s\uFEFF\xA0]+$/g; 11348 11349// Bind a function to a context, optionally partially applying any 11350// arguments. 11351// jQuery.proxy is deprecated to promote standards (specifically Function#bind) 11352// However, it is not slated for removal any time soon 11353jQuery.proxy = function( fn, context ) { 11354 var tmp, args, proxy; 11355 11356 if ( typeof context === "string" ) { 11357 tmp = fn[ context ]; 11358 context = fn; 11359 fn = tmp; 11360 } 11361 11362 // Quick check to determine if target is callable, in the spec 11363 // this throws a TypeError, but we will just return undefined. 11364 if ( !isFunction( fn ) ) { 11365 return undefined; 11366 } 11367 11368 // Simulated bind 11369 args = slice.call( arguments, 2 ); 11370 proxy = function() { 11371 return fn.apply( context || this, args.concat( slice.call( arguments ) ) ); 11372 }; 11373 11374 // Set the guid of unique handler to the same of original handler, so it can be removed 11375 proxy.guid = fn.guid = fn.guid || jQuery.guid++; 11376 11377 return proxy; 11378}; 11379 11380jQuery.holdReady = function( hold ) { 11381 if ( hold ) { 11382 jQuery.readyWait++; 11383 } else { 11384 jQuery.ready( true ); 11385 } 11386}; 11387jQuery.isArray = Array.isArray; 11388jQuery.parseJSON = JSON.parse; 11389jQuery.nodeName = nodeName; 11390jQuery.isFunction = isFunction; 11391jQuery.isWindow = isWindow; 11392jQuery.camelCase = camelCase; 11393jQuery.type = toType; 11394 11395jQuery.now = Date.now; 11396 11397jQuery.isNumeric = function( obj ) { 11398 11399 // As of jQuery 3.0, isNumeric is limited to 11400 // strings and numbers (primitives or objects) 11401 // that can be coerced to finite numbers (gh-2662) 11402 var type = jQuery.type( obj ); 11403 return ( type === "number" || type === "string" ) && 11404 11405 // parseFloat NaNs numeric-cast false positives ("") 11406 // ...but misinterprets leading-number strings, particularly hex literals ("0x...") 11407 // subtraction forces infinities to NaN 11408 !isNaN( obj - parseFloat( obj ) ); 11409}; 11410 11411jQuery.trim = function( text ) { 11412 return text == null ? 11413 "" : 11414 ( text + "" ).replace( rtrim, "$1" ); 11415}; 11416 11417 11418 11419// Register as a named AMD module, since jQuery can be concatenated with other 11420// files that may use define, but not via a proper concatenation script that 11421// understands anonymous AMD modules. A named AMD is safest and most robust 11422// way to register. Lowercase jquery is used because AMD module names are 11423// derived from file names, and jQuery is normally delivered in a lowercase 11424// file name. Do this after creating the global so that if an AMD module wants 11425// to call noConflict to hide this version of jQuery, it will work. 11426 11427// Note that for maximum portability, libraries that are not jQuery should 11428// declare themselves as anonymous modules, and avoid setting a global if an 11429// AMD loader is present. jQuery is a special case. For more information, see 11430// https://github.com/jrburke/requirejs/wiki/Updating-existing-libraries#wiki-anon 11431 11432if ( true ) { 11433 !(__WEBPACK_AMD_DEFINE_ARRAY__ = [], __WEBPACK_AMD_DEFINE_RESULT__ = (function() { 11434 return jQuery; 11435 }).apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__), 11436 __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)); 11437} 11438 11439 11440 11441 11442var 11443 11444 // Map over jQuery in case of overwrite 11445 _jQuery = window.jQuery, 11446 11447 // Map over the $ in case of overwrite 11448 _$ = window.$; 11449 11450jQuery.noConflict = function( deep ) { 11451 if ( window.$ === jQuery ) { 11452 window.$ = _$; 11453 } 11454 11455 if ( deep && window.jQuery === jQuery ) { 11456 window.jQuery = _jQuery; 11457 } 11458 11459 return jQuery; 11460}; 11461 11462// Expose jQuery and $ identifiers, even in AMD 11463// (trac-7102#comment:10, https://github.com/jquery/jquery/pull/557) 11464// and CommonJS for browser emulators (trac-13566) 11465if ( typeof noGlobal === "undefined" ) { 11466 window.jQuery = window.$ = jQuery; 11467} 11468 11469 11470 11471 11472return jQuery; 11473} ); 11474 11475 11476/***/ }), 11477
11478/***/ "./library/scss/style.scss": 11479/*!*********************************!*\ 11480 !*** ./library/scss/style.scss ***! 11481 \*********************************/ 11482/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { 11483 11484"use strict"; 11485__webpack_require__.r(__webpack_exports__); 11486// extracted by mini-css-extract-plugin 11487 11488 11489/***/ }), 11490
11491/***/ "./library/scss/plugin-a11y.scss": 11492/*!***************************************!*\ 11493 !*** ./library/scss/plugin-a11y.scss ***! 11494 \***************************************/ 11495/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { 11496 11497"use strict"; 11498__webpack_require__.r(__webpack_exports__); 11499// extracted by mini-css-extract-plugin 11500 11501 11502/***/ }), 11503
vendor: 2,227 bytes, lines 11504-11533
11504/***/ "./node_modules/swiper/swiper-bundle.css": 11505/*!***********************************************!*\ 11506 !*** ./node_modules/swiper/swiper-bundle.css ***! 11507 \***********************************************/ 11508/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { 11509 11510"use strict"; 11511__webpack_require__.r(__webpack_exports__); 11512/* harmony export */ __webpack_require__.d(__webpack_exports__, { 11513/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) 11514/* harmony export */ }); 11515/* harmony import */ var _style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! !../style-loader/dist/runtime/injectStylesIntoStyleTag.js */ "./node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js"); 11516/* harmony import */ var _style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0__); 11517/* harmony import */ var _css_loader_dist_cjs_js_ruleSet_1_rules_7_oneOf_1_use_1_postcss_loader_dist_cjs_js_ruleSet_1_rules_7_oneOf_1_use_2_swiper_bundle_css__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! !!../css-loader/dist/cjs.js??ruleSet[1].rules[7].oneOf[1].use[1]!../postcss-loader/dist/cjs.js??ruleSet[1].rules[7].oneOf[1].use[2]!./swiper-bundle.css */ "./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[7].oneOf[1].use[1]!./node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[7].oneOf[1].use[2]!./node_modules/swiper/swiper-bundle.css"); 11518 11519 11520 11521var options = {}; 11522 11523options.insert = "head"; 11524options.singleton = false; 11525 11526var update = _style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0___default()(_css_loader_dist_cjs_js_ruleSet_1_rules_7_oneOf_1_use_1_postcss_loader_dist_cjs_js_ruleSet_1_rules_7_oneOf_1_use_2_swiper_bundle_css__WEBPACK_IMPORTED_MODULE_1__["default"], options); 11527 11528 11529 11530/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_css_loader_dist_cjs_js_ruleSet_1_rules_7_oneOf_1_use_1_postcss_loader_dist_cjs_js_ruleSet_1_rules_7_oneOf_1_use_2_swiper_bundle_css__WEBPACK_IMPORTED_MODULE_1__["default"].locals || {}); 11531 11532/***/ }), 11533
vendor: 7,200 bytes, lines 11534-11812
11534/***/ "./node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js": 11535/*!****************************************************************************!*\ 11536 !*** ./node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js ***! 11537 \****************************************************************************/ 11538/***/ ((module, __unused_webpack_exports, __webpack_require__) => { 11539 11540"use strict"; 11541 11542 11543var isOldIE = function isOldIE() { 11544 var memo; 11545 return function memorize() { 11546 if (typeof memo === 'undefined') { 11547 // Test for IE <= 9 as proposed by Browserhacks 11548 // @see http://browserhacks.com/#hack-e71d8692f65334173fee715c222cb805 11549 // Tests for existence of standard globals is to allow style-loader 11550 // to operate correctly into non-standard environments 11551 // @see https://github.com/webpack-contrib/style-loader/issues/177 11552 memo = Boolean(window && document && document.all && !window.atob); 11553 } 11554 11555 return memo; 11556 }; 11557}(); 11558 11559var getTarget = function getTarget() { 11560 var memo = {}; 11561 return function memorize(target) { 11562 if (typeof memo[target] === 'undefined') { 11563 var styleTarget = document.querySelector(target); // Special case to return head of iframe instead of iframe itself 11564 11565 if (window.HTMLIFrameElement && styleTarget instanceof window.HTMLIFrameElement) { 11566 try { 11567 // This will throw an exception if access to iframe is blocked 11568 // due to cross-origin restrictions 11569 styleTarget = styleTarget.contentDocument.head; 11570 } catch (e) { 11571 // istanbul ignore next 11572 styleTarget = null; 11573 } 11574 } 11575 11576 memo[target] = styleTarget; 11577 } 11578 11579 return memo[target]; 11580 }; 11581}(); 11582 11583var stylesInDom = []; 11584 11585function getIndexByIdentifier(identifier) { 11586 var result = -1; 11587 11588 for (var i = 0; i < stylesInDom.length; i++) { 11589 if (stylesInDom[i].identifier === identifier) { 11590 result = i; 11591 break; 11592 } 11593 } 11594 11595 return result; 11596} 11597 11598function modulesToDom(list, options) { 11599 var idCountMap = {}; 11600 var identifiers = []; 11601 11602 for (var i = 0; i < list.length; i++) { 11603 var item = list[i]; 11604 var id = options.base ? item[0] + options.base : item[0]; 11605 var count = idCountMap[id] || 0; 11606 var identifier = "".concat(id, " ").concat(count); 11607 idCountMap[id] = count + 1; 11608 var index = getIndexByIdentifier(identifier); 11609 var obj = { 11610 css: item[1], 11611 media: item[2], 11612 sourceMap: item[3] 11613 }; 11614 11615 if (index !== -1) { 11616 stylesInDom[index].references++; 11617 stylesInDom[index].updater(obj); 11618 } else { 11619 stylesInDom.push({ 11620 identifier: identifier, 11621 updater: addStyle(obj, options), 11622 references: 1 11623 }); 11624 } 11625 11626 identifiers.push(identifier); 11627 } 11628 11629 return identifiers; 11630} 11631 11632function insertStyleElement(options) { 11633 var style = document.createElement('style'); 11634 var attributes = options.attributes || {}; 11635 11636 if (typeof attributes.nonce === 'undefined') { 11637 var nonce = true ? __webpack_require__.nc : 0; 11638 11639 if (nonce) { 11640 attributes.nonce = nonce; 11641 } 11642 } 11643 11644 Object.keys(attributes).forEach(function (key) { 11645 style.setAttribute(key, attributes[key]); 11646 }); 11647 11648 if (typeof options.insert === 'function') { 11649 options.insert(style); 11650 } else { 11651 var target = getTarget(options.insert || 'head'); 11652 11653 if (!target) { 11654 throw new Error("Couldn't find a style target. This probably means that the value for the 'insert' parameter is invalid."); 11655 } 11656 11657 target.appendChild(style); 11658 } 11659 11660 return style; 11661} 11662 11663function removeStyleElement(style) { 11664 // istanbul ignore if 11665 if (style.parentNode === null) { 11666 return false; 11667 } 11668 11669 style.parentNode.removeChild(style); 11670} 11671/* istanbul ignore next */ 11672 11673 11674var replaceText = function replaceText() { 11675 var textStore = []; 11676 return function replace(index, replacement) { 11677 textStore[index] = replacement; 11678 return textStore.filter(Boolean).join('\n'); 11679 }; 11680}(); 11681 11682function applyToSingletonTag(style, index, remove, obj) { 11683 var css = remove ? '' : obj.media ? "@media ".concat(obj.media, " {").concat(obj.css, "}") : obj.css; // For old IE 11684 11685 /* istanbul ignore if */ 11686 11687 if (style.styleSheet) { 11688 style.styleSheet.cssText = replaceText(index, css); 11689 } else { 11690 var cssNode = document.createTextNode(css); 11691 var childNodes = style.childNodes; 11692 11693 if (childNodes[index]) { 11694 style.removeChild(childNodes[index]); 11695 } 11696 11697 if (childNodes.length) { 11698 style.insertBefore(cssNode, childNodes[index]); 11699 } else { 11700 style.appendChild(cssNode); 11701 } 11702 } 11703} 11704 11705function applyToTag(style, options, obj) { 11706 var css = obj.css; 11707 var media = obj.media; 11708 var sourceMap = obj.sourceMap; 11709 11710 if (media) { 11711 style.setAttribute('media', media); 11712 } else { 11713 style.removeAttribute('media'); 11714 } 11715 11716 if (sourceMap && typeof btoa !== 'undefined') { 11717 css += "\n/*# sourceMappingURL=data:application/json;base64,".concat(btoa(unescape(encodeURIComponent(JSON.stringify(sourceMap)))), " */"); 11718 } // For old IE 11719 11720 /* istanbul ignore if */ 11721 11722 11723 if (style.styleSheet) { 11724 style.styleSheet.cssText = css; 11725 } else { 11726 while (style.firstChild) { 11727 style.removeChild(style.firstChild); 11728 } 11729 11730 style.appendChild(document.createTextNode(css)); 11731 } 11732} 11733 11734var singleton = null; 11735var singletonCounter = 0; 11736 11737function addStyle(obj, options) { 11738 var style; 11739 var update; 11740 var remove; 11741 11742 if (options.singleton) { 11743 var styleIndex = singletonCounter++; 11744 style = singleton || (singleton = insertStyleElement(options)); 11745 update = applyToSingletonTag.bind(null, style, styleIndex, false); 11746 remove = applyToSingletonTag.bind(null, style, styleIndex, true); 11747 } else { 11748 style = insertStyleElement(options); 11749 update = applyToTag.bind(null, style, options); 11750 11751 remove = function remove() { 11752 removeStyleElement(style); 11753 }; 11754 } 11755 11756 update(obj); 11757 return function updateStyle(newObj) { 11758 if (newObj) { 11759 if (newObj.css === obj.css && newObj.media === obj.media && newObj.sourceMap === obj.sourceMap) { 11760 return; 11761 } 11762 11763 update(obj = newObj); 11764 } else { 11765 remove(); 11766 } 11767 }; 11768} 11769 11770module.exports = function (list, options) { 11771 options = options || {}; // Force single-tag solution on IE6-9, which has a hard limit on the # of <style> 11772 // tags it will allow on a page 11773 11774 if (!options.singleton && typeof options.singleton !== 'boolean') { 11775 options.singleton = isOldIE(); 11776 } 11777 11778 list = list || []; 11779 var lastIdentifiers = modulesToDom(list, options); 11780 return function update(newList) { 11781 newList = newList || []; 11782 11783 if (Object.prototype.toString.call(newList) !== '[object Array]') { 11784 return; 11785 } 11786 11787 for (var i = 0; i < lastIdentifiers.length; i++) { 11788 var identifier = lastIdentifiers[i]; 11789 var index = getIndexByIdentifier(identifier); 11790 stylesInDom[index].references--; 11791 } 11792 11793 var newLastIdentifiers = modulesToDom(newList, options); 11794 11795 for (var _i = 0; _i < lastIdentifiers.length; _i++) { 11796 var _identifier = lastIdentifiers[_i]; 11797 11798 var _index = getIndexByIdentifier(_identifier); 11799 11800 if (stylesInDom[_index].references === 0) { 11801 stylesInDom[_index].updater(); 11802 11803 stylesInDom.splice(_index, 1); 11804 } 11805 } 11806 11807 lastIdentifiers = newLastIdentifiers; 11808 }; 11809}; 11810 11811/***/ }), 11812
vendor: 11,829 bytes, lines 11813-12172
11813/***/ "./node_modules/swiper/modules/a11y.mjs": 11814/*!**********************************************!*\ 11815 !*** ./node_modules/swiper/modules/a11y.mjs ***! 11816 \**********************************************/ 11817/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { 11818 11819"use strict"; 11820__webpack_require__.r(__webpack_exports__); 11821/* harmony export */ __webpack_require__.d(__webpack_exports__, { 11822/* harmony export */ "default": () => (/* binding */ A11y) 11823/* harmony export */ }); 11824/* harmony import */ var _shared_classes_to_selector_mjs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../shared/classes-to-selector.mjs */ "./node_modules/swiper/shared/classes-to-selector.mjs"); 11825/* harmony import */ var _shared_utils_mjs__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../shared/utils.mjs */ "./node_modules/swiper/shared/utils.mjs"); 11826 11827 11828 11829function A11y(_ref) { 11830 let { 11831 swiper, 11832 extendParams, 11833 on 11834 } = _ref; 11835 extendParams({ 11836 a11y: { 11837 enabled: true, 11838 notificationClass: 'swiper-notification', 11839 prevSlideMessage: 'Previous slide', 11840 nextSlideMessage: 'Next slide', 11841 firstSlideMessage: 'This is the first slide', 11842 lastSlideMessage: 'This is the last slide', 11843 paginationBulletMessage: 'Go to slide {{index}}', 11844 slideLabelMessage: '{{index}} / {{slidesLength}}', 11845 containerMessage: null, 11846 containerRoleDescriptionMessage: null, 11847 itemRoleDescriptionMessage: null, 11848 slideRole: 'group', 11849 id: null 11850 } 11851 }); 11852 swiper.a11y = { 11853 clicked: false 11854 }; 11855 let liveRegion = null; 11856 function notify(message) { 11857 const notification = liveRegion; 11858 if (notification.length === 0) return; 11859 notification.innerHTML = ''; 11860 notification.innerHTML = message; 11861 } 11862 const makeElementsArray = el => (Array.isArray(el) ? el : [el]).filter(e => !!e); 11863 function getRandomNumber(size) { 11864 if (size === void 0) { 11865 size = 16; 11866 } 11867 const randomChar = () => Math.round(16 * Math.random()).toString(16); 11868 return 'x'.repeat(size).replace(/x/g, randomChar); 11869 } 11870 function makeElFocusable(el) { 11871 el = makeElementsArray(el); 11872 el.forEach(subEl => { 11873 subEl.setAttribute('tabIndex', '0'); 11874 }); 11875 } 11876 function makeElNotFocusable(el) { 11877 el = makeElementsArray(el); 11878 el.forEach(subEl => { 11879 subEl.setAttribute('tabIndex', '-1'); 11880 }); 11881 } 11882 function addElRole(el, role) { 11883 el = makeElementsArray(el); 11884 el.forEach(subEl => { 11885 subEl.setAttribute('role', role); 11886 }); 11887 } 11888 function addElRoleDescription(el, description) { 11889 el = makeElementsArray(el); 11890 el.forEach(subEl => { 11891 subEl.setAttribute('aria-roledescription', description); 11892 }); 11893 } 11894 function addElControls(el, controls) { 11895 el = makeElementsArray(el); 11896 el.forEach(subEl => { 11897 subEl.setAttribute('aria-controls', controls); 11898 }); 11899 } 11900 function addElLabel(el, label) { 11901 el = makeElementsArray(el); 11902 el.forEach(subEl => { 11903 subEl.setAttribute('aria-label', label); 11904 }); 11905 } 11906 function addElId(el, id) { 11907 el = makeElementsArray(el); 11908 el.forEach(subEl => { 11909 subEl.setAttribute('id', id); 11910 }); 11911 } 11912 function addElLive(el, live) { 11913 el = makeElementsArray(el); 11914 el.forEach(subEl => { 11915 subEl.setAttribute('aria-live', live); 11916 }); 11917 } 11918 function disableEl(el) { 11919 el = makeElementsArray(el); 11920 el.forEach(subEl => { 11921 subEl.setAttribute('aria-disabled', true); 11922 }); 11923 } 11924 function enableEl(el) { 11925 el = makeElementsArray(el); 11926 el.forEach(subEl => { 11927 subEl.setAttribute('aria-disabled', false); 11928 }); 11929 } 11930 function onEnterOrSpaceKey(e) { 11931 if (e.keyCode !== 13 && e.keyCode !== 32) return; 11932 const params = swiper.params.a11y; 11933 const targetEl = e.target; 11934 if (swiper.pagination && swiper.pagination.el && (targetEl === swiper.pagination.el || swiper.pagination.el.contains(e.target))) { 11935 if (!e.target.matches((0,_shared_classes_to_selector_mjs__WEBPACK_IMPORTED_MODULE_0__.c)(swiper.params.pagination.bulletClass))) return; 11936 } 11937 if (swiper.navigation && swiper.navigation.nextEl && targetEl === swiper.navigation.nextEl) { 11938 if (!(swiper.isEnd && !swiper.params.loop)) { 11939 swiper.slideNext(); 11940 } 11941 if (swiper.isEnd) { 11942 notify(params.lastSlideMessage); 11943 } else { 11944 notify(params.nextSlideMessage); 11945 } 11946 } 11947 if (swiper.navigation && swiper.navigation.prevEl && targetEl === swiper.navigation.prevEl) { 11948 if (!(swiper.isBeginning && !swiper.params.loop)) { 11949 swiper.slidePrev(); 11950 } 11951 if (swiper.isBeginning) { 11952 notify(params.firstSlideMessage); 11953 } else { 11954 notify(params.prevSlideMessage); 11955 } 11956 } 11957 if (swiper.pagination && targetEl.matches((0,_shared_classes_to_selector_mjs__WEBPACK_IMPORTED_MODULE_0__.c)(swiper.params.pagination.bulletClass))) { 11958 targetEl.click(); 11959 } 11960 } 11961 function updateNavigation() { 11962 if (swiper.params.loop || swiper.params.rewind || !swiper.navigation) return; 11963 const { 11964 nextEl, 11965 prevEl 11966 } = swiper.navigation; 11967 if (prevEl) { 11968 if (swiper.isBeginning) { 11969 disableEl(prevEl); 11970 makeElNotFocusable(prevEl); 11971 } else { 11972 enableEl(prevEl); 11973 makeElFocusable(prevEl); 11974 } 11975 } 11976 if (nextEl) { 11977 if (swiper.isEnd) { 11978 disableEl(nextEl); 11979 makeElNotFocusable(nextEl); 11980 } else { 11981 enableEl(nextEl); 11982 makeElFocusable(nextEl); 11983 } 11984 } 11985 } 11986 function hasPagination() { 11987 return swiper.pagination && swiper.pagination.bullets && swiper.pagination.bullets.length; 11988 } 11989 function hasClickablePagination() { 11990 return hasPagination() && swiper.params.pagination.clickable; 11991 } 11992 function updatePagination() { 11993 const params = swiper.params.a11y; 11994 if (!hasPagination()) return; 11995 swiper.pagination.bullets.forEach(bulletEl => { 11996 if (swiper.params.pagination.clickable) { 11997 makeElFocusable(bulletEl); 11998 if (!swiper.params.pagination.renderBullet) { 11999 addElRole(bulletEl, 'button'); 12000 addElLabel(bulletEl, params.paginationBulletMessage.replace(/\{\{index\}\}/, (0,_shared_utils_mjs__WEBPACK_IMPORTED_MODULE_1__.g)(bulletEl) + 1)); 12001 } 12002 } 12003 if (bulletEl.matches((0,_shared_classes_to_selector_mjs__WEBPACK_IMPORTED_MODULE_0__.c)(swiper.params.pagination.bulletActiveClass))) { 12004 bulletEl.setAttribute('aria-current', 'true'); 12005 } else { 12006 bulletEl.removeAttribute('aria-current'); 12007 } 12008 }); 12009 } 12010 const initNavEl = (el, wrapperId, message) => { 12011 makeElFocusable(el); 12012 if (el.tagName !== 'BUTTON') { 12013 addElRole(el, 'button'); 12014 el.addEventListener('keydown', onEnterOrSpaceKey); 12015 } 12016 addElLabel(el, message); 12017 addElControls(el, wrapperId); 12018 }; 12019 const handlePointerDown = () => { 12020 swiper.a11y.clicked = true; 12021 }; 12022 const handlePointerUp = () => { 12023 requestAnimationFrame(() => { 12024 requestAnimationFrame(() => { 12025 if (!swiper.destroyed) { 12026 swiper.a11y.clicked = false; 12027 } 12028 }); 12029 }); 12030 }; 12031 const handleFocus = e => { 12032 if (swiper.a11y.clicked) return; 12033 const slideEl = e.target.closest(`.${swiper.params.slideClass}, swiper-slide`); 12034 if (!slideEl || !swiper.slides.includes(slideEl)) return; 12035 const isActive = swiper.slides.indexOf(slideEl) === swiper.activeIndex; 12036 const isVisible = swiper.params.watchSlidesProgress && swiper.visibleSlides && swiper.visibleSlides.includes(slideEl); 12037 if (isActive || isVisible) return; 12038 if (e.sourceCapabilities && e.sourceCapabilities.firesTouchEvents) return; 12039 if (swiper.isHorizontal()) { 12040 swiper.el.scrollLeft = 0; 12041 } else { 12042 swiper.el.scrollTop = 0; 12043 } 12044 swiper.slideTo(swiper.slides.indexOf(slideEl), 0); 12045 }; 12046 const initSlides = () => { 12047 const params = swiper.params.a11y; 12048 if (params.itemRoleDescriptionMessage) { 12049 addElRoleDescription(swiper.slides, params.itemRoleDescriptionMessage); 12050 } 12051 if (params.slideRole) { 12052 addElRole(swiper.slides, params.slideRole); 12053 } 12054 const slidesLength = swiper.slides.length; 12055 if (params.slideLabelMessage) { 12056 swiper.slides.forEach((slideEl, index) => { 12057 const slideIndex = swiper.params.loop ? parseInt(slideEl.getAttribute('data-swiper-slide-index'), 10) : index; 12058 const ariaLabelMessage = params.slideLabelMessage.replace(/\{\{index\}\}/, slideIndex + 1).replace(/\{\{slidesLength\}\}/, slidesLength); 12059 addElLabel(slideEl, ariaLabelMessage); 12060 }); 12061 } 12062 }; 12063 const init = () => { 12064 const params = swiper.params.a11y; 12065 swiper.el.append(liveRegion); 12066 12067 // Container 12068 const containerEl = swiper.el; 12069 if (params.containerRoleDescriptionMessage) { 12070 addElRoleDescription(containerEl, params.containerRoleDescriptionMessage); 12071 } 12072 if (params.containerMessage) { 12073 addElLabel(containerEl, params.containerMessage); 12074 } 12075 12076 // Wrapper 12077 const wrapperEl = swiper.wrapperEl; 12078 const wrapperId = params.id || wrapperEl.getAttribute('id') || `swiper-wrapper-${getRandomNumber(16)}`; 12079 const live = swiper.params.autoplay && swiper.params.autoplay.enabled ? 'off' : 'polite'; 12080 addElId(wrapperEl, wrapperId); 12081 addElLive(wrapperEl, live); 12082 12083 // Slide 12084 initSlides(); 12085 12086 // Navigation 12087 let { 12088 nextEl, 12089 prevEl 12090 } = swiper.navigation ? swiper.navigation : {}; 12091 nextEl = makeElementsArray(nextEl); 12092 prevEl = makeElementsArray(prevEl); 12093 if (nextEl) { 12094 nextEl.forEach(el => initNavEl(el, wrapperId, params.nextSlideMessage)); 12095 } 12096 if (prevEl) { 12097 prevEl.forEach(el => initNavEl(el, wrapperId, params.prevSlideMessage)); 12098 } 12099 12100 // Pagination 12101 if (hasClickablePagination()) { 12102 const paginationEl = makeElementsArray(swiper.pagination.el); 12103 paginationEl.forEach(el => { 12104 el.addEventListener('keydown', onEnterOrSpaceKey); 12105 }); 12106 } 12107 12108 // Tab focus 12109 swiper.el.addEventListener('focus', handleFocus, true); 12110 swiper.el.addEventListener('pointerdown', handlePointerDown, true); 12111 swiper.el.addEventListener('pointerup', handlePointerUp, true); 12112 }; 12113 function destroy() { 12114 if (liveRegion) liveRegion.remove(); 12115 let { 12116 nextEl, 12117 prevEl 12118 } = swiper.navigation ? swiper.navigation : {}; 12119 nextEl = makeElementsArray(nextEl); 12120 prevEl = makeElementsArray(prevEl); 12121 if (nextEl) { 12122 nextEl.forEach(el => el.removeEventListener('keydown', onEnterOrSpaceKey)); 12123 } 12124 if (prevEl) { 12125 prevEl.forEach(el => el.removeEventListener('keydown', onEnterOrSpaceKey)); 12126 } 12127 12128 // Pagination 12129 if (hasClickablePagination()) { 12130 const paginationEl = makeElementsArray(swiper.pagination.el); 12131 paginationEl.forEach(el => { 12132 el.removeEventListener('keydown', onEnterOrSpaceKey); 12133 }); 12134 } 12135 12136 // Tab focus 12137 swiper.el.removeEventListener('focus', handleFocus, true); 12138 swiper.el.removeEventListener('pointerdown', handlePointerDown, true); 12139 swiper.el.removeEventListener('pointerup', handlePointerUp, true); 12140 } 12141 on('beforeInit', () => { 12142 liveRegion = (0,_shared_utils_mjs__WEBPACK_IMPORTED_MODULE_1__.c)('span', swiper.params.a11y.notificationClass); 12143 liveRegion.setAttribute('aria-live', 'assertive'); 12144 liveRegion.setAttribute('aria-atomic', 'true'); 12145 }); 12146 on('afterInit', () => { 12147 if (!swiper.params.a11y.enabled) return; 12148 init(); 12149 }); 12150 on('slidesLengthChange snapGridLengthChange slidesGridLengthChange', () => { 12151 if (!swiper.params.a11y.enabled) return; 12152 initSlides(); 12153 }); 12154 on('fromEdge toEdge afterInit lock unlock', () => { 12155 if (!swiper.params.a11y.enabled) return; 12156 updateNavigation(); 12157 }); 12158 on('paginationUpdate', () => { 12159 if (!swiper.params.a11y.enabled) return; 12160 updatePagination(); 12161 }); 12162 on('destroy', () => { 12163 if (!swiper.params.a11y.enabled) return; 12164 destroy(); 12165 }); 12166} 12167 12168 12169 12170 12171/***/ }), 12172
vendor: 9,943 bytes, lines 12173-12490
12173/***/ "./node_modules/swiper/modules/autoplay.mjs": 12174/*!**************************************************!*\ 12175 !*** ./node_modules/swiper/modules/autoplay.mjs ***! 12176 \**************************************************/ 12177/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { 12178 12179"use strict"; 12180__webpack_require__.r(__webpack_exports__); 12181/* harmony export */ __webpack_require__.d(__webpack_exports__, { 12182/* harmony export */ "default": () => (/* binding */ Autoplay) 12183/* harmony export */ }); 12184/* harmony import */ var _shared_ssr_window_esm_mjs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../shared/ssr-window.esm.mjs */ "./node_modules/swiper/shared/ssr-window.esm.mjs"); 12185 12186 12187/* eslint no-underscore-dangle: "off" */ 12188/* eslint no-use-before-define: "off" */ 12189function Autoplay(_ref) { 12190 let { 12191 swiper, 12192 extendParams, 12193 on, 12194 emit, 12195 params 12196 } = _ref; 12197 swiper.autoplay = { 12198 running: false, 12199 paused: false, 12200 timeLeft: 0 12201 }; 12202 extendParams({ 12203 autoplay: { 12204 enabled: false, 12205 delay: 3000, 12206 waitForTransition: true, 12207 disableOnInteraction: false, 12208 stopOnLastSlide: false, 12209 reverseDirection: false, 12210 pauseOnMouseEnter: false 12211 } 12212 }); 12213 let timeout; 12214 let raf; 12215 let autoplayDelayTotal = params && params.autoplay ? params.autoplay.delay : 3000; 12216 let autoplayDelayCurrent = params && params.autoplay ? params.autoplay.delay : 3000; 12217 let autoplayTimeLeft; 12218 let autoplayStartTime = new Date().getTime(); 12219 let wasPaused; 12220 let isTouched; 12221 let pausedByTouch; 12222 let touchStartTimeout; 12223 let slideChanged; 12224 let pausedByInteraction; 12225 let pausedByPointerEnter; 12226 function onTransitionEnd(e) { 12227 if (!swiper || swiper.destroyed || !swiper.wrapperEl) return; 12228 if (e.target !== swiper.wrapperEl) return; 12229 swiper.wrapperEl.removeEventListener('transitionend', onTransitionEnd); 12230 if (pausedByPointerEnter) { 12231 return; 12232 } 12233 resume(); 12234 } 12235 const calcTimeLeft = () => { 12236 if (swiper.destroyed || !swiper.autoplay.running) return; 12237 if (swiper.autoplay.paused) { 12238 wasPaused = true; 12239 } else if (wasPaused) { 12240 autoplayDelayCurrent = autoplayTimeLeft; 12241 wasPaused = false; 12242 } 12243 const timeLeft = swiper.autoplay.paused ? autoplayTimeLeft : autoplayStartTime + autoplayDelayCurrent - new Date().getTime(); 12244 swiper.autoplay.timeLeft = timeLeft; 12245 emit('autoplayTimeLeft', timeLeft, timeLeft / autoplayDelayTotal); 12246 raf = requestAnimationFrame(() => { 12247 calcTimeLeft(); 12248 }); 12249 }; 12250 const getSlideDelay = () => { 12251 let activeSlideEl; 12252 if (swiper.virtual && swiper.params.virtual.enabled) { 12253 activeSlideEl = swiper.slides.filter(slideEl => slideEl.classList.contains('swiper-slide-active'))[0]; 12254 } else { 12255 activeSlideEl = swiper.slides[swiper.activeIndex]; 12256 } 12257 if (!activeSlideEl) return undefined; 12258 const currentSlideDelay = parseInt(activeSlideEl.getAttribute('data-swiper-autoplay'), 10); 12259 return currentSlideDelay; 12260 }; 12261 const run = delayForce => { 12262 if (swiper.destroyed || !swiper.autoplay.running) return; 12263 cancelAnimationFrame(raf); 12264 calcTimeLeft(); 12265 let delay = typeof delayForce === 'undefined' ? swiper.params.autoplay.delay : delayForce; 12266 autoplayDelayTotal = swiper.params.autoplay.delay; 12267 autoplayDelayCurrent = swiper.params.autoplay.delay; 12268 const currentSlideDelay = getSlideDelay(); 12269 if (!Number.isNaN(currentSlideDelay) && currentSlideDelay > 0 && typeof delayForce === 'undefined') { 12270 delay = currentSlideDelay; 12271 autoplayDelayTotal = currentSlideDelay; 12272 autoplayDelayCurrent = currentSlideDelay; 12273 } 12274 autoplayTimeLeft = delay; 12275 const speed = swiper.params.speed; 12276 const proceed = () => { 12277 if (!swiper || swiper.destroyed) return; 12278 if (swiper.params.autoplay.reverseDirection) { 12279 if (!swiper.isBeginning || swiper.params.loop || swiper.params.rewind) { 12280 swiper.slidePrev(speed, true, true); 12281 emit('autoplay'); 12282 } else if (!swiper.params.autoplay.stopOnLastSlide) { 12283 swiper.slideTo(swiper.slides.length - 1, speed, true, true); 12284 emit('autoplay'); 12285 } 12286 } else { 12287 if (!swiper.isEnd || swiper.params.loop || swiper.params.rewind) { 12288 swiper.slideNext(speed, true, true); 12289 emit('autoplay'); 12290 } else if (!swiper.params.autoplay.stopOnLastSlide) { 12291 swiper.slideTo(0, speed, true, true); 12292 emit('autoplay'); 12293 } 12294 } 12295 if (swiper.params.cssMode) { 12296 autoplayStartTime = new Date().getTime(); 12297 requestAnimationFrame(() => { 12298 run(); 12299 }); 12300 } 12301 }; 12302 if (delay > 0) { 12303 clearTimeout(timeout); 12304 timeout = setTimeout(() => { 12305 proceed(); 12306 }, delay); 12307 } else { 12308 requestAnimationFrame(() => { 12309 proceed(); 12310 }); 12311 } 12312 12313 // eslint-disable-next-line 12314 return delay; 12315 }; 12316 const start = () => { 12317 autoplayStartTime = new Date().getTime(); 12318 swiper.autoplay.running = true; 12319 run(); 12320 emit('autoplayStart'); 12321 }; 12322 const stop = () => { 12323 swiper.autoplay.running = false; 12324 clearTimeout(timeout); 12325 cancelAnimationFrame(raf); 12326 emit('autoplayStop'); 12327 }; 12328 const pause = (internal, reset) => { 12329 if (swiper.destroyed || !swiper.autoplay.running) return; 12330 clearTimeout(timeout); 12331 if (!internal) { 12332 pausedByInteraction = true; 12333 } 12334 const proceed = () => { 12335 emit('autoplayPause'); 12336 if (swiper.params.autoplay.waitForTransition) { 12337 swiper.wrapperEl.addEventListener('transitionend', onTransitionEnd); 12338 } else { 12339 resume(); 12340 } 12341 }; 12342 swiper.autoplay.paused = true; 12343 if (reset) { 12344 if (slideChanged) { 12345 autoplayTimeLeft = swiper.params.autoplay.delay; 12346 } 12347 slideChanged = false; 12348 proceed(); 12349 return; 12350 } 12351 const delay = autoplayTimeLeft || swiper.params.autoplay.delay; 12352 autoplayTimeLeft = delay - (new Date().getTime() - autoplayStartTime); 12353 if (swiper.isEnd && autoplayTimeLeft < 0 && !swiper.params.loop) return; 12354 if (autoplayTimeLeft < 0) autoplayTimeLeft = 0; 12355 proceed(); 12356 }; 12357 const resume = () => { 12358 if (swiper.isEnd && autoplayTimeLeft < 0 && !swiper.params.loop || swiper.destroyed || !swiper.autoplay.running) return; 12359 autoplayStartTime = new Date().getTime(); 12360 if (pausedByInteraction) { 12361 pausedByInteraction = false; 12362 run(autoplayTimeLeft); 12363 } else { 12364 run(); 12365 } 12366 swiper.autoplay.paused = false; 12367 emit('autoplayResume'); 12368 }; 12369 const onVisibilityChange = () => { 12370 if (swiper.destroyed || !swiper.autoplay.running) return; 12371 const document = (0,_shared_ssr_window_esm_mjs__WEBPACK_IMPORTED_MODULE_0__.g)(); 12372 if (document.visibilityState === 'hidden') { 12373 pausedByInteraction = true; 12374 pause(true); 12375 } 12376 if (document.visibilityState === 'visible') { 12377 resume(); 12378 } 12379 }; 12380 const onPointerEnter = e => { 12381 if (e.pointerType !== 'mouse') return; 12382 pausedByInteraction = true; 12383 pausedByPointerEnter = true; 12384 if (swiper.animating || swiper.autoplay.paused) return; 12385 pause(true); 12386 }; 12387 const onPointerLeave = e => { 12388 if (e.pointerType !== 'mouse') return; 12389 pausedByPointerEnter = false; 12390 if (swiper.autoplay.paused) { 12391 resume(); 12392 } 12393 }; 12394 const attachMouseEvents = () => { 12395 if (swiper.params.autoplay.pauseOnMouseEnter) { 12396 swiper.el.addEventListener('pointerenter', onPointerEnter); 12397 swiper.el.addEventListener('pointerleave', onPointerLeave); 12398 } 12399 }; 12400 const detachMouseEvents = () => { 12401 swiper.el.removeEventListener('pointerenter', onPointerEnter); 12402 swiper.el.removeEventListener('pointerleave', onPointerLeave); 12403 }; 12404 const attachDocumentEvents = () => { 12405 const document = (0,_shared_ssr_window_esm_mjs__WEBPACK_IMPORTED_MODULE_0__.g)(); 12406 document.addEventListener('visibilitychange', onVisibilityChange); 12407 }; 12408 const detachDocumentEvents = () => { 12409 const document = (0,_shared_ssr_window_esm_mjs__WEBPACK_IMPORTED_MODULE_0__.g)(); 12410 document.removeEventListener('visibilitychange', onVisibilityChange); 12411 }; 12412 on('init', () => { 12413 if (swiper.params.autoplay.enabled) { 12414 attachMouseEvents(); 12415 attachDocumentEvents(); 12416 start(); 12417 } 12418 }); 12419 on('destroy', () => { 12420 detachMouseEvents(); 12421 detachDocumentEvents(); 12422 if (swiper.autoplay.running) { 12423 stop(); 12424 } 12425 }); 12426 on('_freeModeStaticRelease', () => { 12427 if (pausedByTouch || pausedByInteraction) { 12428 resume(); 12429 } 12430 }); 12431 on('_freeModeNoMomentumRelease', () => { 12432 if (!swiper.params.autoplay.disableOnInteraction) { 12433 pause(true, true); 12434 } else { 12435 stop(); 12436 } 12437 }); 12438 on('beforeTransitionStart', (_s, speed, internal) => { 12439 if (swiper.destroyed || !swiper.autoplay.running) return; 12440 if (internal || !swiper.params.autoplay.disableOnInteraction) { 12441 pause(true, true); 12442 } else { 12443 stop(); 12444 } 12445 }); 12446 on('sliderFirstMove', () => { 12447 if (swiper.destroyed || !swiper.autoplay.running) return; 12448 if (swiper.params.autoplay.disableOnInteraction) { 12449 stop(); 12450 return; 12451 } 12452 isTouched = true; 12453 pausedByTouch = false; 12454 pausedByInteraction = false; 12455 touchStartTimeout = setTimeout(() => { 12456 pausedByInteraction = true; 12457 pausedByTouch = true; 12458 pause(true); 12459 }, 200); 12460 }); 12461 on('touchEnd', () => { 12462 if (swiper.destroyed || !swiper.autoplay.running || !isTouched) return; 12463 clearTimeout(touchStartTimeout); 12464 clearTimeout(timeout); 12465 if (swiper.params.autoplay.disableOnInteraction) { 12466 pausedByTouch = false; 12467 isTouched = false; 12468 return; 12469 } 12470 if (pausedByTouch && swiper.params.cssMode) resume(); 12471 pausedByTouch = false; 12472 isTouched = false; 12473 }); 12474 on('slideChange', () => { 12475 if (swiper.destroyed || !swiper.autoplay.running) return; 12476 slideChanged = true; 12477 }); 12478 Object.assign(swiper.autoplay, { 12479 start, 12480 stop, 12481 pause, 12482 resume 12483 }); 12484} 12485 12486 12487 12488 12489/***/ }), 12490
vendor: 7,181 bytes, lines 12491-12693
12491/***/ "./node_modules/swiper/modules/controller.mjs": 12492/*!****************************************************!*\ 12493 !*** ./node_modules/swiper/modules/controller.mjs ***! 12494 \****************************************************/ 12495/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { 12496 12497"use strict"; 12498__webpack_require__.r(__webpack_exports__); 12499/* harmony export */ __webpack_require__.d(__webpack_exports__, { 12500/* harmony export */ "default": () => (/* binding */ Controller) 12501/* harmony export */ }); 12502/* harmony import */ var _shared_utils_mjs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../shared/utils.mjs */ "./node_modules/swiper/shared/utils.mjs"); 12503 12504 12505/* eslint no-bitwise: ["error", { "allow": [">>"] }] */ 12506function Controller(_ref) { 12507 let { 12508 swiper, 12509 extendParams, 12510 on 12511 } = _ref; 12512 extendParams({ 12513 controller: { 12514 control: undefined, 12515 inverse: false, 12516 by: 'slide' // or 'container' 12517 } 12518 }); 12519 12520 swiper.controller = { 12521 control: undefined 12522 }; 12523 function LinearSpline(x, y) { 12524 const binarySearch = function search() { 12525 let maxIndex; 12526 let minIndex; 12527 let guess; 12528 return (array, val) => { 12529 minIndex = -1; 12530 maxIndex = array.length; 12531 while (maxIndex - minIndex > 1) { 12532 guess = maxIndex + minIndex >> 1; 12533 if (array[guess] <= val) { 12534 minIndex = guess; 12535 } else { 12536 maxIndex = guess; 12537 } 12538 } 12539 return maxIndex; 12540 }; 12541 }(); 12542 this.x = x; 12543 this.y = y; 12544 this.lastIndex = x.length - 1; 12545 // Given an x value (x2), return the expected y2 value: 12546 // (x1,y1) is the known point before given value, 12547 // (x3,y3) is the known point after given value. 12548 let i1; 12549 let i3; 12550 this.interpolate = function interpolate(x2) { 12551 if (!x2) return 0; 12552 12553 // Get the indexes of x1 and x3 (the array indexes before and after given x2): 12554 i3 = binarySearch(this.x, x2); 12555 i1 = i3 - 1; 12556 12557 // We have our indexes i1 & i3, so we can calculate already: 12558 // y2 := ((x2−x1) × (y3−y1)) ÷ (x3−x1) + y1 12559 return (x2 - this.x[i1]) * (this.y[i3] - this.y[i1]) / (this.x[i3] - this.x[i1]) + this.y[i1]; 12560 }; 12561 return this; 12562 } 12563 function getInterpolateFunction(c) { 12564 swiper.controller.spline = swiper.params.loop ? new LinearSpline(swiper.slidesGrid, c.slidesGrid) : new LinearSpline(swiper.snapGrid, c.snapGrid); 12565 } 12566 function setTranslate(_t, byController) { 12567 const controlled = swiper.controller.control; 12568 let multiplier; 12569 let controlledTranslate; 12570 const Swiper = swiper.constructor; 12571 function setControlledTranslate(c) { 12572 if (c.destroyed) return; 12573 12574 // this will create an Interpolate function based on the snapGrids 12575 // x is the Grid of the scrolled scroller and y will be the controlled scroller 12576 // it makes sense to create this only once and recall it for the interpolation 12577 // the function does a lot of value caching for performance 12578 const translate = swiper.rtlTranslate ? -swiper.translate : swiper.translate; 12579 if (swiper.params.controller.by === 'slide') { 12580 getInterpolateFunction(c); 12581 // i am not sure why the values have to be multiplicated this way, tried to invert the snapGrid 12582 // but it did not work out 12583 controlledTranslate = -swiper.controller.spline.interpolate(-translate); 12584 } 12585 if (!controlledTranslate || swiper.params.controller.by === 'container') { 12586 multiplier = (c.maxTranslate() - c.minTranslate()) / (swiper.maxTranslate() - swiper.minTranslate()); 12587 if (Number.isNaN(multiplier) || !Number.isFinite(multiplier)) { 12588 multiplier = 1; 12589 } 12590 controlledTranslate = (translate - swiper.minTranslate()) * multiplier + c.minTranslate(); 12591 } 12592 if (swiper.params.controller.inverse) { 12593 controlledTranslate = c.maxTranslate() - controlledTranslate; 12594 } 12595 c.updateProgress(controlledTranslate); 12596 c.setTranslate(controlledTranslate, swiper); 12597 c.updateActiveIndex(); 12598 c.updateSlidesClasses(); 12599 } 12600 if (Array.isArray(controlled)) { 12601 for (let i = 0; i < controlled.length; i += 1) { 12602 if (controlled[i] !== byController && controlled[i] instanceof Swiper) { 12603 setControlledTranslate(controlled[i]); 12604 } 12605 } 12606 } else if (controlled instanceof Swiper && byController !== controlled) { 12607 setControlledTranslate(controlled); 12608 } 12609 } 12610 function setTransition(duration, byController) { 12611 const Swiper = swiper.constructor; 12612 const controlled = swiper.controller.control; 12613 let i; 12614 function setControlledTransition(c) { 12615 if (c.destroyed) return; 12616 c.setTransition(duration, swiper); 12617 if (duration !== 0) { 12618 c.transitionStart(); 12619 if (c.params.autoHeight) { 12620 (0,_shared_utils_mjs__WEBPACK_IMPORTED_MODULE_0__.n)(() => { 12621 c.updateAutoHeight(); 12622 }); 12623 } 12624 (0,_shared_utils_mjs__WEBPACK_IMPORTED_MODULE_0__.j)(c.wrapperEl, () => { 12625 if (!controlled) return; 12626 c.transitionEnd(); 12627 }); 12628 } 12629 } 12630 if (Array.isArray(controlled)) { 12631 for (i = 0; i < controlled.length; i += 1) { 12632 if (controlled[i] !== byController && controlled[i] instanceof Swiper) { 12633 setControlledTransition(controlled[i]); 12634 } 12635 } 12636 } else if (controlled instanceof Swiper && byController !== controlled) { 12637 setControlledTransition(controlled); 12638 } 12639 } 12640 function removeSpline() { 12641 if (!swiper.controller.control) return; 12642 if (swiper.controller.spline) { 12643 swiper.controller.spline = undefined; 12644 delete swiper.controller.spline; 12645 } 12646 } 12647 on('beforeInit', () => { 12648 if (typeof window !== 'undefined' && ( 12649 // eslint-disable-line 12650 typeof swiper.params.controller.control === 'string' || swiper.params.controller.control instanceof HTMLElement)) { 12651 const controlElement = document.querySelector(swiper.params.controller.control); 12652 if (controlElement && controlElement.swiper) { 12653 swiper.controller.control = controlElement.swiper; 12654 } else if (controlElement) { 12655 const onControllerSwiper = e => { 12656 swiper.controller.control = e.detail[0]; 12657 swiper.update(); 12658 controlElement.removeEventListener('init', onControllerSwiper); 12659 }; 12660 controlElement.addEventListener('init', onControllerSwiper); 12661 } 12662 return; 12663 } 12664 swiper.controller.control = swiper.params.controller.control; 12665 }); 12666 on('update', () => { 12667 removeSpline(); 12668 }); 12669 on('resize', () => { 12670 removeSpline(); 12671 }); 12672 on('observerUpdate', () => { 12673 removeSpline(); 12674 }); 12675 on('setTranslate', (_s, translate, byController) => { 12676 if (!swiper.controller.control || swiper.controller.control.destroyed) return; 12677 swiper.controller.setTranslate(translate, byController); 12678 }); 12679 on('setTransition', (_s, duration, byController) => { 12680 if (!swiper.controller.control || swiper.controller.control.destroyed) return; 12681 swiper.controller.setTransition(duration, byController); 12682 }); 12683 Object.assign(swiper.controller, { 12684 setTranslate, 12685 setTransition 12686 }); 12687} 12688 12689 12690 12691 12692/***/ }), 12693
vendor: 5,910 bytes, lines 12694-12838
12694/***/ "./node_modules/swiper/modules/effect-cards.mjs": 12695/*!******************************************************!*\ 12696 !*** ./node_modules/swiper/modules/effect-cards.mjs ***! 12697 \******************************************************/ 12698/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { 12699 12700"use strict"; 12701__webpack_require__.r(__webpack_exports__); 12702/* harmony export */ __webpack_require__.d(__webpack_exports__, { 12703/* harmony export */ "default": () => (/* binding */ EffectCards) 12704/* harmony export */ }); 12705/* harmony import */ var _shared_create_shadow_mjs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../shared/create-shadow.mjs */ "./node_modules/swiper/shared/create-shadow.mjs"); 12706/* harmony import */ var _shared_effect_init_mjs__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../shared/effect-init.mjs */ "./node_modules/swiper/shared/effect-init.mjs"); 12707/* harmony import */ var _shared_effect_target_mjs__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../shared/effect-target.mjs */ "./node_modules/swiper/shared/effect-target.mjs"); 12708/* harmony import */ var _shared_effect_virtual_transition_end_mjs__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../shared/effect-virtual-transition-end.mjs */ "./node_modules/swiper/shared/effect-virtual-transition-end.mjs"); 12709/* harmony import */ var _shared_utils_mjs__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../shared/utils.mjs */ "./node_modules/swiper/shared/utils.mjs"); 12710 12711 12712 12713 12714 12715 12716function EffectCards(_ref) { 12717 let { 12718 swiper, 12719 extendParams, 12720 on 12721 } = _ref; 12722 extendParams({ 12723 cardsEffect: { 12724 slideShadows: true, 12725 rotate: true, 12726 perSlideRotate: 2, 12727 perSlideOffset: 8 12728 } 12729 }); 12730 const setTranslate = () => { 12731 const { 12732 slides, 12733 activeIndex, 12734 rtlTranslate: rtl 12735 } = swiper; 12736 const params = swiper.params.cardsEffect; 12737 const { 12738 startTranslate, 12739 isTouched 12740 } = swiper.touchEventsData; 12741 const currentTranslate = rtl ? -swiper.translate : swiper.translate; 12742 for (let i = 0; i < slides.length; i += 1) { 12743 const slideEl = slides[i]; 12744 const slideProgress = slideEl.progress; 12745 const progress = Math.min(Math.max(slideProgress, -4), 4); 12746 let offset = slideEl.swiperSlideOffset; 12747 if (swiper.params.centeredSlides && !swiper.params.cssMode) { 12748 swiper.wrapperEl.style.transform = `translateX(${swiper.minTranslate()}px)`; 12749 } 12750 if (swiper.params.centeredSlides && swiper.params.cssMode) { 12751 offset -= slides[0].swiperSlideOffset; 12752 } 12753 let tX = swiper.params.cssMode ? -offset - swiper.translate : -offset; 12754 let tY = 0; 12755 const tZ = -100 * Math.abs(progress); 12756 let scale = 1; 12757 let rotate = -params.perSlideRotate * progress; 12758 let tXAdd = params.perSlideOffset - Math.abs(progress) * 0.75; 12759 const slideIndex = swiper.virtual && swiper.params.virtual.enabled ? swiper.virtual.from + i : i; 12760 const isSwipeToNext = (slideIndex === activeIndex || slideIndex === activeIndex - 1) && progress > 0 && progress < 1 && (isTouched || swiper.params.cssMode) && currentTranslate < startTranslate; 12761 const isSwipeToPrev = (slideIndex === activeIndex || slideIndex === activeIndex + 1) && progress < 0 && progress > -1 && (isTouched || swiper.params.cssMode) && currentTranslate > startTranslate; 12762 if (isSwipeToNext || isSwipeToPrev) { 12763 const subProgress = (1 - Math.abs((Math.abs(progress) - 0.5) / 0.5)) ** 0.5; 12764 rotate += -28 * progress * subProgress; 12765 scale += -0.5 * subProgress; 12766 tXAdd += 96 * subProgress; 12767 tY = `${-25 * subProgress * Math.abs(progress)}%`; 12768 } 12769 if (progress < 0) { 12770 // next 12771 tX = `calc(${tX}px ${rtl ? '-' : '+'} (${tXAdd * Math.abs(progress)}%))`; 12772 } else if (progress > 0) { 12773 // prev 12774 tX = `calc(${tX}px ${rtl ? '-' : '+'} (-${tXAdd * Math.abs(progress)}%))`; 12775 } else { 12776 tX = `${tX}px`; 12777 } 12778 if (!swiper.isHorizontal()) { 12779 const prevY = tY; 12780 tY = tX; 12781 tX = prevY; 12782 } 12783 const scaleString = progress < 0 ? `${1 + (1 - scale) * progress}` : `${1 - (1 - scale) * progress}`; 12784 12785 /* eslint-disable */ 12786 const transform = ` 12787 translate3d(${tX}, ${tY}, ${tZ}px) 12788 rotateZ(${params.rotate ? rtl ? -rotate : rotate : 0}deg) 12789 scale(${scaleString}) 12790 `; 12791 /* eslint-enable */ 12792 12793 if (params.slideShadows) { 12794 // Set shadows 12795 let shadowEl = slideEl.querySelector('.swiper-slide-shadow'); 12796 if (!shadowEl) { 12797 shadowEl = (0,_shared_create_shadow_mjs__WEBPACK_IMPORTED_MODULE_0__.c)('cards', slideEl); 12798 } 12799 if (shadowEl) shadowEl.style.opacity = Math.min(Math.max((Math.abs(progress) - 0.5) / 0.5, 0), 1); 12800 } 12801 slideEl.style.zIndex = -Math.abs(Math.round(slideProgress)) + slides.length; 12802 const targetEl = (0,_shared_effect_target_mjs__WEBPACK_IMPORTED_MODULE_2__.e)(params, slideEl); 12803 targetEl.style.transform = transform; 12804 } 12805 }; 12806 const setTransition = duration => { 12807 const transformElements = swiper.slides.map(slideEl => (0,_shared_utils_mjs__WEBPACK_IMPORTED_MODULE_4__.l)(slideEl)); 12808 transformElements.forEach(el => { 12809 el.style.transitionDuration = `${duration}ms`; 12810 el.querySelectorAll('.swiper-slide-shadow').forEach(shadowEl => { 12811 shadowEl.style.transitionDuration = `${duration}ms`; 12812 }); 12813 }); 12814 (0,_shared_effect_virtual_transition_end_mjs__WEBPACK_IMPORTED_MODULE_3__.e)({ 12815 swiper, 12816 duration, 12817 transformElements 12818 }); 12819 }; 12820 (0,_shared_effect_init_mjs__WEBPACK_IMPORTED_MODULE_1__.e)({ 12821 effect: 'cards', 12822 swiper, 12823 on, 12824 setTranslate, 12825 setTransition, 12826 perspective: () => true, 12827 overwriteParams: () => ({ 12828 watchSlidesProgress: true, 12829 virtualTranslate: !swiper.params.cssMode 12830 }) 12831 }); 12832} 12833 12834 12835 12836 12837/***/ }), 12838
vendor: 5,847 bytes, lines 12839-12968
12839/***/ "./node_modules/swiper/modules/effect-coverflow.mjs": 12840/*!**********************************************************!*\ 12841 !*** ./node_modules/swiper/modules/effect-coverflow.mjs ***! 12842 \**********************************************************/ 12843/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { 12844 12845"use strict"; 12846__webpack_require__.r(__webpack_exports__); 12847/* harmony export */ __webpack_require__.d(__webpack_exports__, { 12848/* harmony export */ "default": () => (/* binding */ EffectCoverflow) 12849/* harmony export */ }); 12850/* harmony import */ var _shared_create_shadow_mjs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../shared/create-shadow.mjs */ "./node_modules/swiper/shared/create-shadow.mjs"); 12851/* harmony import */ var _shared_effect_init_mjs__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../shared/effect-init.mjs */ "./node_modules/swiper/shared/effect-init.mjs"); 12852/* harmony import */ var _shared_effect_target_mjs__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../shared/effect-target.mjs */ "./node_modules/swiper/shared/effect-target.mjs"); 12853/* harmony import */ var _shared_utils_mjs__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../shared/utils.mjs */ "./node_modules/swiper/shared/utils.mjs"); 12854 12855 12856 12857 12858 12859function EffectCoverflow(_ref) { 12860 let { 12861 swiper, 12862 extendParams, 12863 on 12864 } = _ref; 12865 extendParams({ 12866 coverflowEffect: { 12867 rotate: 50, 12868 stretch: 0, 12869 depth: 100, 12870 scale: 1, 12871 modifier: 1, 12872 slideShadows: true 12873 } 12874 }); 12875 const setTranslate = () => { 12876 const { 12877 width: swiperWidth, 12878 height: swiperHeight, 12879 slides, 12880 slidesSizesGrid 12881 } = swiper; 12882 const params = swiper.params.coverflowEffect; 12883 const isHorizontal = swiper.isHorizontal(); 12884 const transform = swiper.translate; 12885 const center = isHorizontal ? -transform + swiperWidth / 2 : -transform + swiperHeight / 2; 12886 const rotate = isHorizontal ? params.rotate : -params.rotate; 12887 const translate = params.depth; 12888 // Each slide offset from center 12889 for (let i = 0, length = slides.length; i < length; i += 1) { 12890 const slideEl = slides[i]; 12891 const slideSize = slidesSizesGrid[i]; 12892 const slideOffset = slideEl.swiperSlideOffset; 12893 const centerOffset = (center - slideOffset - slideSize / 2) / slideSize; 12894 const offsetMultiplier = typeof params.modifier === 'function' ? params.modifier(centerOffset) : centerOffset * params.modifier; 12895 let rotateY = isHorizontal ? rotate * offsetMultiplier : 0; 12896 let rotateX = isHorizontal ? 0 : rotate * offsetMultiplier; 12897 // var rotateZ = 0 12898 let translateZ = -translate * Math.abs(offsetMultiplier); 12899 let stretch = params.stretch; 12900 // Allow percentage to make a relative stretch for responsive sliders 12901 if (typeof stretch === 'string' && stretch.indexOf('%') !== -1) { 12902 stretch = parseFloat(params.stretch) / 100 * slideSize; 12903 } 12904 let translateY = isHorizontal ? 0 : stretch * offsetMultiplier; 12905 let translateX = isHorizontal ? stretch * offsetMultiplier : 0; 12906 let scale = 1 - (1 - params.scale) * Math.abs(offsetMultiplier); 12907 12908 // Fix for ultra small values 12909 if (Math.abs(translateX) < 0.001) translateX = 0; 12910 if (Math.abs(translateY) < 0.001) translateY = 0; 12911 if (Math.abs(translateZ) < 0.001) translateZ = 0; 12912 if (Math.abs(rotateY) < 0.001) rotateY = 0; 12913 if (Math.abs(rotateX) < 0.001) rotateX = 0; 12914 if (Math.abs(scale) < 0.001) scale = 0; 12915 if (swiper.browser && swiper.browser.isSafari) { 12916 if (Math.abs(rotateY) / 90 % 2 === 1) { 12917 rotateY += 0.001; 12918 } 12919 if (Math.abs(rotateX) / 90 % 2 === 1) { 12920 rotateX += 0.001; 12921 } 12922 } 12923 const slideTransform = `translate3d(${translateX}px,${translateY}px,${translateZ}px) rotateX(${rotateX}deg) rotateY(${rotateY}deg) scale(${scale})`; 12924 const targetEl = (0,_shared_effect_target_mjs__WEBPACK_IMPORTED_MODULE_2__.e)(params, slideEl); 12925 targetEl.style.transform = slideTransform; 12926 slideEl.style.zIndex = -Math.abs(Math.round(offsetMultiplier)) + 1; 12927 if (params.slideShadows) { 12928 // Set shadows 12929 let shadowBeforeEl = isHorizontal ? slideEl.querySelector('.swiper-slide-shadow-left') : slideEl.querySelector('.swiper-slide-shadow-top'); 12930 let shadowAfterEl = isHorizontal ? slideEl.querySelector('.swiper-slide-shadow-right') : slideEl.querySelector('.swiper-slide-shadow-bottom'); 12931 if (!shadowBeforeEl) { 12932 shadowBeforeEl = (0,_shared_create_shadow_mjs__WEBPACK_IMPORTED_MODULE_0__.c)('coverflow', slideEl, isHorizontal ? 'left' : 'top'); 12933 } 12934 if (!shadowAfterEl) { 12935 shadowAfterEl = (0,_shared_create_shadow_mjs__WEBPACK_IMPORTED_MODULE_0__.c)('coverflow', slideEl, isHorizontal ? 'right' : 'bottom'); 12936 } 12937 if (shadowBeforeEl) shadowBeforeEl.style.opacity = offsetMultiplier > 0 ? offsetMultiplier : 0; 12938 if (shadowAfterEl) shadowAfterEl.style.opacity = -offsetMultiplier > 0 ? -offsetMultiplier : 0; 12939 } 12940 } 12941 }; 12942 const setTransition = duration => { 12943 const transformElements = swiper.slides.map(slideEl => (0,_shared_utils_mjs__WEBPACK_IMPORTED_MODULE_3__.l)(slideEl)); 12944 transformElements.forEach(el => { 12945 el.style.transitionDuration = `${duration}ms`; 12946 el.querySelectorAll('.swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left').forEach(shadowEl => { 12947 shadowEl.style.transitionDuration = `${duration}ms`; 12948 }); 12949 }); 12950 }; 12951 (0,_shared_effect_init_mjs__WEBPACK_IMPORTED_MODULE_1__.e)({ 12952 effect: 'coverflow', 12953 swiper, 12954 on, 12955 setTranslate, 12956 setTransition, 12957 perspective: () => true, 12958 overwriteParams: () => ({ 12959 watchSlidesProgress: true 12960 }) 12961 }); 12962} 12963 12964 12965 12966 12967/***/ }), 12968
vendor: 6,469 bytes, lines 12969-13136
12969/***/ "./node_modules/swiper/modules/effect-creative.mjs": 12970/*!*********************************************************!*\ 12971 !*** ./node_modules/swiper/modules/effect-creative.mjs ***! 12972 \*********************************************************/ 12973/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { 12974 12975"use strict"; 12976__webpack_require__.r(__webpack_exports__); 12977/* harmony export */ __webpack_require__.d(__webpack_exports__, { 12978/* harmony export */ "default": () => (/* binding */ EffectCreative) 12979/* harmony export */ }); 12980/* harmony import */ var _shared_create_shadow_mjs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../shared/create-shadow.mjs */ "./node_modules/swiper/shared/create-shadow.mjs"); 12981/* harmony import */ var _shared_effect_init_mjs__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../shared/effect-init.mjs */ "./node_modules/swiper/shared/effect-init.mjs"); 12982/* harmony import */ var _shared_effect_target_mjs__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../shared/effect-target.mjs */ "./node_modules/swiper/shared/effect-target.mjs"); 12983/* harmony import */ var _shared_effect_virtual_transition_end_mjs__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../shared/effect-virtual-transition-end.mjs */ "./node_modules/swiper/shared/effect-virtual-transition-end.mjs"); 12984/* harmony import */ var _shared_utils_mjs__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../shared/utils.mjs */ "./node_modules/swiper/shared/utils.mjs"); 12985 12986 12987 12988 12989 12990 12991function EffectCreative(_ref) { 12992 let { 12993 swiper, 12994 extendParams, 12995 on 12996 } = _ref; 12997 extendParams({ 12998 creativeEffect: { 12999 limitProgress: 1, 13000 shadowPerProgress: false, 13001 progressMultiplier: 1, 13002 perspective: true, 13003 prev: { 13004 translate: [0, 0, 0], 13005 rotate: [0, 0, 0], 13006 opacity: 1, 13007 scale: 1 13008 }, 13009 next: { 13010 translate: [0, 0, 0], 13011 rotate: [0, 0, 0], 13012 opacity: 1, 13013 scale: 1 13014 } 13015 } 13016 }); 13017 const getTranslateValue = value => { 13018 if (typeof value === 'string') return value; 13019 return `${value}px`; 13020 }; 13021 const setTranslate = () => { 13022 const { 13023 slides, 13024 wrapperEl, 13025 slidesSizesGrid 13026 } = swiper; 13027 const params = swiper.params.creativeEffect; 13028 const { 13029 progressMultiplier: multiplier 13030 } = params; 13031 const isCenteredSlides = swiper.params.centeredSlides; 13032 if (isCenteredSlides) { 13033 const margin = slidesSizesGrid[0] / 2 - swiper.params.slidesOffsetBefore || 0; 13034 wrapperEl.style.transform = `translateX(calc(50% - ${margin}px))`; 13035 } 13036 for (let i = 0; i < slides.length; i += 1) { 13037 const slideEl = slides[i]; 13038 const slideProgress = slideEl.progress; 13039 const progress = Math.min(Math.max(slideEl.progress, -params.limitProgress), params.limitProgress); 13040 let originalProgress = progress; 13041 if (!isCenteredSlides) { 13042 originalProgress = Math.min(Math.max(slideEl.originalProgress, -params.limitProgress), params.limitProgress); 13043 } 13044 const offset = slideEl.swiperSlideOffset; 13045 const t = [swiper.params.cssMode ? -offset - swiper.translate : -offset, 0, 0]; 13046 const r = [0, 0, 0]; 13047 let custom = false; 13048 if (!swiper.isHorizontal()) { 13049 t[1] = t[0]; 13050 t[0] = 0; 13051 } 13052 let data = { 13053 translate: [0, 0, 0], 13054 rotate: [0, 0, 0], 13055 scale: 1, 13056 opacity: 1 13057 }; 13058 if (progress < 0) { 13059 data = params.next; 13060 custom = true; 13061 } else if (progress > 0) { 13062 data = params.prev; 13063 custom = true; 13064 } 13065 // set translate 13066 t.forEach((value, index) => { 13067 t[index] = `calc(${value}px + (${getTranslateValue(data.translate[index])} * ${Math.abs(progress * multiplier)}))`; 13068 }); 13069 // set rotates 13070 r.forEach((value, index) => { 13071 let val = data.rotate[index] * Math.abs(progress * multiplier); 13072 if (swiper.browser && swiper.browser.isSafari && Math.abs(val) / 90 % 2 === 1) { 13073 val += 0.001; 13074 } 13075 r[index] = val; 13076 }); 13077 slideEl.style.zIndex = -Math.abs(Math.round(slideProgress)) + slides.length; 13078 const translateString = t.join(', '); 13079 const rotateString = `rotateX(${r[0]}deg) rotateY(${r[1]}deg) rotateZ(${r[2]}deg)`; 13080 const scaleString = originalProgress < 0 ? `scale(${1 + (1 - data.scale) * originalProgress * multiplier})` : `scale(${1 - (1 - data.scale) * originalProgress * multiplier})`; 13081 const opacityString = originalProgress < 0 ? 1 + (1 - data.opacity) * originalProgress * multiplier : 1 - (1 - data.opacity) * originalProgress * multiplier; 13082 const transform = `translate3d(${translateString}) ${rotateString} ${scaleString}`; 13083 13084 // Set shadows 13085 if (custom && data.shadow || !custom) { 13086 let shadowEl = slideEl.querySelector('.swiper-slide-shadow'); 13087 if (!shadowEl && data.shadow) { 13088 shadowEl = (0,_shared_create_shadow_mjs__WEBPACK_IMPORTED_MODULE_0__.c)('creative', slideEl); 13089 } 13090 if (shadowEl) { 13091 const shadowOpacity = params.shadowPerProgress ? progress * (1 / params.limitProgress) : progress; 13092 shadowEl.style.opacity = Math.min(Math.max(Math.abs(shadowOpacity), 0), 1); 13093 } 13094 } 13095 const targetEl = (0,_shared_effect_target_mjs__WEBPACK_IMPORTED_MODULE_2__.e)(params, slideEl); 13096 targetEl.style.transform = transform; 13097 targetEl.style.opacity = opacityString; 13098 if (data.origin) { 13099 targetEl.style.transformOrigin = data.origin; 13100 } 13101 } 13102 }; 13103 const setTransition = duration => { 13104 const transformElements = swiper.slides.map(slideEl => (0,_shared_utils_mjs__WEBPACK_IMPORTED_MODULE_4__.l)(slideEl)); 13105 transformElements.forEach(el => { 13106 el.style.transitionDuration = `${duration}ms`; 13107 el.querySelectorAll('.swiper-slide-shadow').forEach(shadowEl => { 13108 shadowEl.style.transitionDuration = `${duration}ms`; 13109 }); 13110 }); 13111 (0,_shared_effect_virtual_transition_end_mjs__WEBPACK_IMPORTED_MODULE_3__.e)({ 13112 swiper, 13113 duration, 13114 transformElements, 13115 allSlides: true 13116 }); 13117 }; 13118 (0,_shared_effect_init_mjs__WEBPACK_IMPORTED_MODULE_1__.e)({ 13119 effect: 'creative', 13120 swiper, 13121 on, 13122 setTranslate, 13123 setTransition, 13124 perspective: () => swiper.params.creativeEffect.perspective, 13125 overwriteParams: () => ({ 13126 watchSlidesProgress: true, 13127 virtualTranslate: !swiper.params.cssMode 13128 }) 13129 }); 13130} 13131 13132 13133 13134 13135/***/ }), 13136
vendor: 7,671 bytes, lines 13137-13329
13137/***/ "./node_modules/swiper/modules/effect-cube.mjs": 13138/*!*****************************************************!*\ 13139 !*** ./node_modules/swiper/modules/effect-cube.mjs ***! 13140 \*****************************************************/ 13141/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { 13142 13143"use strict"; 13144__webpack_require__.r(__webpack_exports__); 13145/* harmony export */ __webpack_require__.d(__webpack_exports__, { 13146/* harmony export */ "default": () => (/* binding */ EffectCube) 13147/* harmony export */ }); 13148/* harmony import */ var _shared_effect_init_mjs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../shared/effect-init.mjs */ "./node_modules/swiper/shared/effect-init.mjs"); 13149/* harmony import */ var _shared_utils_mjs__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../shared/utils.mjs */ "./node_modules/swiper/shared/utils.mjs"); 13150 13151 13152 13153function EffectCube(_ref) { 13154 let { 13155 swiper, 13156 extendParams, 13157 on 13158 } = _ref; 13159 extendParams({ 13160 cubeEffect: { 13161 slideShadows: true, 13162 shadow: true, 13163 shadowOffset: 20, 13164 shadowScale: 0.94 13165 } 13166 }); 13167 const createSlideShadows = (slideEl, progress, isHorizontal) => { 13168 let shadowBefore = isHorizontal ? slideEl.querySelector('.swiper-slide-shadow-left') : slideEl.querySelector('.swiper-slide-shadow-top'); 13169 let shadowAfter = isHorizontal ? slideEl.querySelector('.swiper-slide-shadow-right') : slideEl.querySelector('.swiper-slide-shadow-bottom'); 13170 if (!shadowBefore) { 13171 shadowBefore = (0,_shared_utils_mjs__WEBPACK_IMPORTED_MODULE_1__.c)('div', `swiper-slide-shadow-cube swiper-slide-shadow-${isHorizontal ? 'left' : 'top'}`.split(' ')); 13172 slideEl.append(shadowBefore); 13173 } 13174 if (!shadowAfter) { 13175 shadowAfter = (0,_shared_utils_mjs__WEBPACK_IMPORTED_MODULE_1__.c)('div', `swiper-slide-shadow-cube swiper-slide-shadow-${isHorizontal ? 'right' : 'bottom'}`.split(' ')); 13176 slideEl.append(shadowAfter); 13177 } 13178 if (shadowBefore) shadowBefore.style.opacity = Math.max(-progress, 0); 13179 if (shadowAfter) shadowAfter.style.opacity = Math.max(progress, 0); 13180 }; 13181 const recreateShadows = () => { 13182 // create new ones 13183 const isHorizontal = swiper.isHorizontal(); 13184 swiper.slides.forEach(slideEl => { 13185 const progress = Math.max(Math.min(slideEl.progress, 1), -1); 13186 createSlideShadows(slideEl, progress, isHorizontal); 13187 }); 13188 }; 13189 const setTranslate = () => { 13190 const { 13191 el, 13192 wrapperEl, 13193 slides, 13194 width: swiperWidth, 13195 height: swiperHeight, 13196 rtlTranslate: rtl, 13197 size: swiperSize, 13198 browser 13199 } = swiper; 13200 const params = swiper.params.cubeEffect; 13201 const isHorizontal = swiper.isHorizontal(); 13202 const isVirtual = swiper.virtual && swiper.params.virtual.enabled; 13203 let wrapperRotate = 0; 13204 let cubeShadowEl; 13205 if (params.shadow) { 13206 if (isHorizontal) { 13207 cubeShadowEl = swiper.wrapperEl.querySelector('.swiper-cube-shadow'); 13208 if (!cubeShadowEl) { 13209 cubeShadowEl = (0,_shared_utils_mjs__WEBPACK_IMPORTED_MODULE_1__.c)('div', 'swiper-cube-shadow'); 13210 swiper.wrapperEl.append(cubeShadowEl); 13211 } 13212 cubeShadowEl.style.height = `${swiperWidth}px`; 13213 } else { 13214 cubeShadowEl = el.querySelector('.swiper-cube-shadow'); 13215 if (!cubeShadowEl) { 13216 cubeShadowEl = (0,_shared_utils_mjs__WEBPACK_IMPORTED_MODULE_1__.c)('div', 'swiper-cube-shadow'); 13217 el.append(cubeShadowEl); 13218 } 13219 } 13220 } 13221 for (let i = 0; i < slides.length; i += 1) { 13222 const slideEl = slides[i]; 13223 let slideIndex = i; 13224 if (isVirtual) { 13225 slideIndex = parseInt(slideEl.getAttribute('data-swiper-slide-index'), 10); 13226 } 13227 let slideAngle = slideIndex * 90; 13228 let round = Math.floor(slideAngle / 360); 13229 if (rtl) { 13230 slideAngle = -slideAngle; 13231 round = Math.floor(-slideAngle / 360); 13232 } 13233 const progress = Math.max(Math.min(slideEl.progress, 1), -1); 13234 let tx = 0; 13235 let ty = 0; 13236 let tz = 0; 13237 if (slideIndex % 4 === 0) { 13238 tx = -round * 4 * swiperSize; 13239 tz = 0; 13240 } else if ((slideIndex - 1) % 4 === 0) { 13241 tx = 0; 13242 tz = -round * 4 * swiperSize; 13243 } else if ((slideIndex - 2) % 4 === 0) { 13244 tx = swiperSize + round * 4 * swiperSize; 13245 tz = swiperSize; 13246 } else if ((slideIndex - 3) % 4 === 0) { 13247 tx = -swiperSize; 13248 tz = 3 * swiperSize + swiperSize * 4 * round; 13249 } 13250 if (rtl) { 13251 tx = -tx; 13252 } 13253 if (!isHorizontal) { 13254 ty = tx; 13255 tx = 0; 13256 } 13257 const transform = `rotateX(${isHorizontal ? 0 : -slideAngle}deg) rotateY(${isHorizontal ? slideAngle : 0}deg) translate3d(${tx}px, ${ty}px, ${tz}px)`; 13258 if (progress <= 1 && progress > -1) { 13259 wrapperRotate = slideIndex * 90 + progress * 90; 13260 if (rtl) wrapperRotate = -slideIndex * 90 - progress * 90; 13261 if (swiper.browser && swiper.browser.isSafari && Math.abs(wrapperRotate) / 90 % 2 === 1) { 13262 wrapperRotate += 0.001; 13263 } 13264 } 13265 slideEl.style.transform = transform; 13266 if (params.slideShadows) { 13267 createSlideShadows(slideEl, progress, isHorizontal); 13268 } 13269 } 13270 wrapperEl.style.transformOrigin = `50% 50% -${swiperSize / 2}px`; 13271 wrapperEl.style['-webkit-transform-origin'] = `50% 50% -${swiperSize / 2}px`; 13272 if (params.shadow) { 13273 if (isHorizontal) { 13274 cubeShadowEl.style.transform = `translate3d(0px, ${swiperWidth / 2 + params.shadowOffset}px, ${-swiperWidth / 2}px) rotateX(89.99deg) rotateZ(0deg) scale(${params.shadowScale})`; 13275 } else { 13276 const shadowAngle = Math.abs(wrapperRotate) - Math.floor(Math.abs(wrapperRotate) / 90) * 90; 13277 const multiplier = 1.5 - (Math.sin(shadowAngle * 2 * Math.PI / 360) / 2 + Math.cos(shadowAngle * 2 * Math.PI / 360) / 2); 13278 const scale1 = params.shadowScale; 13279 const scale2 = params.shadowScale / multiplier; 13280 const offset = params.shadowOffset; 13281 cubeShadowEl.style.transform = `scale3d(${scale1}, 1, ${scale2}) translate3d(0px, ${swiperHeight / 2 + offset}px, ${-swiperHeight / 2 / scale2}px) rotateX(-89.99deg)`; 13282 } 13283 } 13284 const zFactor = (browser.isSafari || browser.isWebView) && browser.needPerspectiveFix ? -swiperSize / 2 : 0; 13285 wrapperEl.style.transform = `translate3d(0px,0,${zFactor}px) rotateX(${swiper.isHorizontal() ? 0 : wrapperRotate}deg) rotateY(${swiper.isHorizontal() ? -wrapperRotate : 0}deg)`; 13286 wrapperEl.style.setProperty('--swiper-cube-translate-z', `${zFactor}px`); 13287 }; 13288 const setTransition = duration => { 13289 const { 13290 el, 13291 slides 13292 } = swiper; 13293 slides.forEach(slideEl => { 13294 slideEl.style.transitionDuration = `${duration}ms`; 13295 slideEl.querySelectorAll('.swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left').forEach(subEl => { 13296 subEl.style.transitionDuration = `${duration}ms`; 13297 }); 13298 }); 13299 if (swiper.params.cubeEffect.shadow && !swiper.isHorizontal()) { 13300 const shadowEl = el.querySelector('.swiper-cube-shadow'); 13301 if (shadowEl) shadowEl.style.transitionDuration = `${duration}ms`; 13302 } 13303 }; 13304 (0,_shared_effect_init_mjs__WEBPACK_IMPORTED_MODULE_0__.e)({ 13305 effect: 'cube', 13306 swiper, 13307 on, 13308 setTranslate, 13309 setTransition, 13310 recreateShadows, 13311 getEffectParams: () => swiper.params.cubeEffect, 13312 perspective: () => true, 13313 overwriteParams: () => ({ 13314 slidesPerView: 1, 13315 slidesPerGroup: 1, 13316 watchSlidesProgress: true, 13317 resistanceRatio: 0, 13318 spaceBetween: 0, 13319 centeredSlides: false, 13320 virtualTranslate: true 13321 }) 13322 }); 13323} 13324 13325 13326 13327 13328/***/ }), 13329
vendor: 3,083 bytes, lines 13330-13414
13330/***/ "./node_modules/swiper/modules/effect-fade.mjs": 13331/*!*****************************************************!*\ 13332 !*** ./node_modules/swiper/modules/effect-fade.mjs ***! 13333 \*****************************************************/ 13334/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { 13335 13336"use strict"; 13337__webpack_require__.r(__webpack_exports__); 13338/* harmony export */ __webpack_require__.d(__webpack_exports__, { 13339/* harmony export */ "default": () => (/* binding */ EffectFade) 13340/* harmony export */ }); 13341/* harmony import */ var _shared_effect_init_mjs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../shared/effect-init.mjs */ "./node_modules/swiper/shared/effect-init.mjs"); 13342/* harmony import */ var _shared_effect_target_mjs__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../shared/effect-target.mjs */ "./node_modules/swiper/shared/effect-target.mjs"); 13343/* harmony import */ var _shared_effect_virtual_transition_end_mjs__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../shared/effect-virtual-transition-end.mjs */ "./node_modules/swiper/shared/effect-virtual-transition-end.mjs"); 13344/* harmony import */ var _shared_utils_mjs__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../shared/utils.mjs */ "./node_modules/swiper/shared/utils.mjs"); 13345 13346 13347 13348 13349 13350function EffectFade(_ref) { 13351 let { 13352 swiper, 13353 extendParams, 13354 on 13355 } = _ref; 13356 extendParams({ 13357 fadeEffect: { 13358 crossFade: false 13359 } 13360 }); 13361 const setTranslate = () => { 13362 const { 13363 slides 13364 } = swiper; 13365 const params = swiper.params.fadeEffect; 13366 for (let i = 0; i < slides.length; i += 1) { 13367 const slideEl = swiper.slides[i]; 13368 const offset = slideEl.swiperSlideOffset; 13369 let tx = -offset; 13370 if (!swiper.params.virtualTranslate) tx -= swiper.translate; 13371 let ty = 0; 13372 if (!swiper.isHorizontal()) { 13373 ty = tx; 13374 tx = 0; 13375 } 13376 const slideOpacity = swiper.params.fadeEffect.crossFade ? Math.max(1 - Math.abs(slideEl.progress), 0) : 1 + Math.min(Math.max(slideEl.progress, -1), 0); 13377 const targetEl = (0,_shared_effect_target_mjs__WEBPACK_IMPORTED_MODULE_1__.e)(params, slideEl); 13378 targetEl.style.opacity = slideOpacity; 13379 targetEl.style.transform = `translate3d(${tx}px, ${ty}px, 0px)`; 13380 } 13381 }; 13382 const setTransition = duration => { 13383 const transformElements = swiper.slides.map(slideEl => (0,_shared_utils_mjs__WEBPACK_IMPORTED_MODULE_3__.l)(slideEl)); 13384 transformElements.forEach(el => { 13385 el.style.transitionDuration = `${duration}ms`; 13386 }); 13387 (0,_shared_effect_virtual_transition_end_mjs__WEBPACK_IMPORTED_MODULE_2__.e)({ 13388 swiper, 13389 duration, 13390 transformElements, 13391 allSlides: true 13392 }); 13393 }; 13394 (0,_shared_effect_init_mjs__WEBPACK_IMPORTED_MODULE_0__.e)({ 13395 effect: 'fade', 13396 swiper, 13397 on, 13398 setTranslate, 13399 setTransition, 13400 overwriteParams: () => ({ 13401 slidesPerView: 1, 13402 slidesPerGroup: 1, 13403 watchSlidesProgress: true, 13404 spaceBetween: 0, 13405 virtualTranslate: !swiper.params.cssMode 13406 }) 13407 }); 13408} 13409 13410 13411 13412 13413/***/ }), 13414
vendor: 5,445 bytes, lines 13415-13552
13415/***/ "./node_modules/swiper/modules/effect-flip.mjs": 13416/*!*****************************************************!*\ 13417 !*** ./node_modules/swiper/modules/effect-flip.mjs ***! 13418 \*****************************************************/ 13419/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { 13420 13421"use strict"; 13422__webpack_require__.r(__webpack_exports__); 13423/* harmony export */ __webpack_require__.d(__webpack_exports__, { 13424/* harmony export */ "default": () => (/* binding */ EffectFlip) 13425/* harmony export */ }); 13426/* harmony import */ var _shared_create_shadow_mjs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../shared/create-shadow.mjs */ "./node_modules/swiper/shared/create-shadow.mjs"); 13427/* harmony import */ var _shared_effect_init_mjs__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../shared/effect-init.mjs */ "./node_modules/swiper/shared/effect-init.mjs"); 13428/* harmony import */ var _shared_effect_target_mjs__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../shared/effect-target.mjs */ "./node_modules/swiper/shared/effect-target.mjs"); 13429/* harmony import */ var _shared_effect_virtual_transition_end_mjs__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../shared/effect-virtual-transition-end.mjs */ "./node_modules/swiper/shared/effect-virtual-transition-end.mjs"); 13430/* harmony import */ var _shared_utils_mjs__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../shared/utils.mjs */ "./node_modules/swiper/shared/utils.mjs"); 13431 13432 13433 13434 13435 13436 13437function EffectFlip(_ref) { 13438 let { 13439 swiper, 13440 extendParams, 13441 on 13442 } = _ref; 13443 extendParams({ 13444 flipEffect: { 13445 slideShadows: true, 13446 limitRotation: true 13447 } 13448 }); 13449 const createSlideShadows = (slideEl, progress) => { 13450 let shadowBefore = swiper.isHorizontal() ? slideEl.querySelector('.swiper-slide-shadow-left') : slideEl.querySelector('.swiper-slide-shadow-top'); 13451 let shadowAfter = swiper.isHorizontal() ? slideEl.querySelector('.swiper-slide-shadow-right') : slideEl.querySelector('.swiper-slide-shadow-bottom'); 13452 if (!shadowBefore) { 13453 shadowBefore = (0,_shared_create_shadow_mjs__WEBPACK_IMPORTED_MODULE_0__.c)('flip', slideEl, swiper.isHorizontal() ? 'left' : 'top'); 13454 } 13455 if (!shadowAfter) { 13456 shadowAfter = (0,_shared_create_shadow_mjs__WEBPACK_IMPORTED_MODULE_0__.c)('flip', slideEl, swiper.isHorizontal() ? 'right' : 'bottom'); 13457 } 13458 if (shadowBefore) shadowBefore.style.opacity = Math.max(-progress, 0); 13459 if (shadowAfter) shadowAfter.style.opacity = Math.max(progress, 0); 13460 }; 13461 const recreateShadows = () => { 13462 // Set shadows 13463 swiper.params.flipEffect; 13464 swiper.slides.forEach(slideEl => { 13465 let progress = slideEl.progress; 13466 if (swiper.params.flipEffect.limitRotation) { 13467 progress = Math.max(Math.min(slideEl.progress, 1), -1); 13468 } 13469 createSlideShadows(slideEl, progress); 13470 }); 13471 }; 13472 const setTranslate = () => { 13473 const { 13474 slides, 13475 rtlTranslate: rtl 13476 } = swiper; 13477 const params = swiper.params.flipEffect; 13478 for (let i = 0; i < slides.length; i += 1) { 13479 const slideEl = slides[i]; 13480 let progress = slideEl.progress; 13481 if (swiper.params.flipEffect.limitRotation) { 13482 progress = Math.max(Math.min(slideEl.progress, 1), -1); 13483 } 13484 const offset = slideEl.swiperSlideOffset; 13485 const rotate = -180 * progress; 13486 let rotateY = rotate; 13487 let rotateX = 0; 13488 let tx = swiper.params.cssMode ? -offset - swiper.translate : -offset; 13489 let ty = 0; 13490 if (!swiper.isHorizontal()) { 13491 ty = tx; 13492 tx = 0; 13493 rotateX = -rotateY; 13494 rotateY = 0; 13495 } else if (rtl) { 13496 rotateY = -rotateY; 13497 } 13498 if (swiper.browser && swiper.browser.isSafari) { 13499 if (Math.abs(rotateY) / 90 % 2 === 1) { 13500 rotateY += 0.001; 13501 } 13502 if (Math.abs(rotateX) / 90 % 2 === 1) { 13503 rotateX += 0.001; 13504 } 13505 } 13506 slideEl.style.zIndex = -Math.abs(Math.round(progress)) + slides.length; 13507 if (params.slideShadows) { 13508 createSlideShadows(slideEl, progress); 13509 } 13510 const transform = `translate3d(${tx}px, ${ty}px, 0px) rotateX(${rotateX}deg) rotateY(${rotateY}deg)`; 13511 const targetEl = (0,_shared_effect_target_mjs__WEBPACK_IMPORTED_MODULE_2__.e)(params, slideEl); 13512 targetEl.style.transform = transform; 13513 } 13514 }; 13515 const setTransition = duration => { 13516 const transformElements = swiper.slides.map(slideEl => (0,_shared_utils_mjs__WEBPACK_IMPORTED_MODULE_4__.l)(slideEl)); 13517 transformElements.forEach(el => { 13518 el.style.transitionDuration = `${duration}ms`; 13519 el.querySelectorAll('.swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left').forEach(shadowEl => { 13520 shadowEl.style.transitionDuration = `${duration}ms`; 13521 }); 13522 }); 13523 (0,_shared_effect_virtual_transition_end_mjs__WEBPACK_IMPORTED_MODULE_3__.e)({ 13524 swiper, 13525 duration, 13526 transformElements 13527 }); 13528 }; 13529 (0,_shared_effect_init_mjs__WEBPACK_IMPORTED_MODULE_1__.e)({ 13530 effect: 'flip', 13531 swiper, 13532 on, 13533 setTranslate, 13534 setTransition, 13535 recreateShadows, 13536 getEffectParams: () => swiper.params.flipEffect, 13537 perspective: () => true, 13538 overwriteParams: () => ({ 13539 slidesPerView: 1, 13540 slidesPerGroup: 1, 13541 watchSlidesProgress: true, 13542 spaceBetween: 0, 13543 virtualTranslate: !swiper.params.cssMode 13544 }) 13545 }); 13546} 13547 13548 13549 13550 13551/***/ }), 13552
vendor: 9,241 bytes, lines 13553-13805
13553/***/ "./node_modules/swiper/modules/free-mode.mjs": 13554/*!***************************************************!*\ 13555 !*** ./node_modules/swiper/modules/free-mode.mjs ***! 13556 \***************************************************/ 13557/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { 13558 13559"use strict"; 13560__webpack_require__.r(__webpack_exports__); 13561/* harmony export */ __webpack_require__.d(__webpack_exports__, { 13562/* harmony export */ "default": () => (/* binding */ freeMode) 13563/* harmony export */ }); 13564/* harmony import */ var _shared_utils_mjs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../shared/utils.mjs */ "./node_modules/swiper/shared/utils.mjs"); 13565 13566 13567function freeMode(_ref) { 13568 let { 13569 swiper, 13570 extendParams, 13571 emit, 13572 once 13573 } = _ref; 13574 extendParams({ 13575 freeMode: { 13576 enabled: false, 13577 momentum: true, 13578 momentumRatio: 1, 13579 momentumBounce: true, 13580 momentumBounceRatio: 1, 13581 momentumVelocityRatio: 1, 13582 sticky: false, 13583 minimumVelocity: 0.02 13584 } 13585 }); 13586 function onTouchStart() { 13587 if (swiper.params.cssMode) return; 13588 const translate = swiper.getTranslate(); 13589 swiper.setTranslate(translate); 13590 swiper.setTransition(0); 13591 swiper.touchEventsData.velocities.length = 0; 13592 swiper.freeMode.onTouchEnd({ 13593 currentPos: swiper.rtl ? swiper.translate : -swiper.translate 13594 }); 13595 } 13596 function onTouchMove() { 13597 if (swiper.params.cssMode) return; 13598 const { 13599 touchEventsData: data, 13600 touches 13601 } = swiper; 13602 // Velocity 13603 if (data.velocities.length === 0) { 13604 data.velocities.push({ 13605 position: touches[swiper.isHorizontal() ? 'startX' : 'startY'], 13606 time: data.touchStartTime 13607 }); 13608 } 13609 data.velocities.push({ 13610 position: touches[swiper.isHorizontal() ? 'currentX' : 'currentY'], 13611 time: (0,_shared_utils_mjs__WEBPACK_IMPORTED_MODULE_0__.d)() 13612 }); 13613 } 13614 function onTouchEnd(_ref2) { 13615 let { 13616 currentPos 13617 } = _ref2; 13618 if (swiper.params.cssMode) return; 13619 const { 13620 params, 13621 wrapperEl, 13622 rtlTranslate: rtl, 13623 snapGrid, 13624 touchEventsData: data 13625 } = swiper; 13626 // Time diff 13627 const touchEndTime = (0,_shared_utils_mjs__WEBPACK_IMPORTED_MODULE_0__.d)(); 13628 const timeDiff = touchEndTime - data.touchStartTime; 13629 if (currentPos < -swiper.minTranslate()) { 13630 swiper.slideTo(swiper.activeIndex); 13631 return; 13632 } 13633 if (currentPos > -swiper.maxTranslate()) { 13634 if (swiper.slides.length < snapGrid.length) { 13635 swiper.slideTo(snapGrid.length - 1); 13636 } else { 13637 swiper.slideTo(swiper.slides.length - 1); 13638 } 13639 return; 13640 } 13641 if (params.freeMode.momentum) { 13642 if (data.velocities.length > 1) { 13643 const lastMoveEvent = data.velocities.pop(); 13644 const velocityEvent = data.velocities.pop(); 13645 const distance = lastMoveEvent.position - velocityEvent.position; 13646 const time = lastMoveEvent.time - velocityEvent.time; 13647 swiper.velocity = distance / time; 13648 swiper.velocity /= 2; 13649 if (Math.abs(swiper.velocity) < params.freeMode.minimumVelocity) { 13650 swiper.velocity = 0; 13651 } 13652 // this implies that the user stopped moving a finger then released. 13653 // There would be no events with distance zero, so the last event is stale. 13654 if (time > 150 || (0,_shared_utils_mjs__WEBPACK_IMPORTED_MODULE_0__.d)() - lastMoveEvent.time > 300) { 13655 swiper.velocity = 0; 13656 } 13657 } else { 13658 swiper.velocity = 0; 13659 } 13660 swiper.velocity *= params.freeMode.momentumVelocityRatio; 13661 data.velocities.length = 0; 13662 let momentumDuration = 1000 * params.freeMode.momentumRatio; 13663 const momentumDistance = swiper.velocity * momentumDuration; 13664 let newPosition = swiper.translate + momentumDistance; 13665 if (rtl) newPosition = -newPosition; 13666 let doBounce = false; 13667 let afterBouncePosition; 13668 const bounceAmount = Math.abs(swiper.velocity) * 20 * params.freeMode.momentumBounceRatio; 13669 let needsLoopFix; 13670 if (newPosition < swiper.maxTranslate()) { 13671 if (params.freeMode.momentumBounce) { 13672 if (newPosition + swiper.maxTranslate() < -bounceAmount) { 13673 newPosition = swiper.maxTranslate() - bounceAmount; 13674 } 13675 afterBouncePosition = swiper.maxTranslate(); 13676 doBounce = true; 13677 data.allowMomentumBounce = true; 13678 } else { 13679 newPosition = swiper.maxTranslate(); 13680 } 13681 if (params.loop && params.centeredSlides) needsLoopFix = true; 13682 } else if (newPosition > swiper.minTranslate()) { 13683 if (params.freeMode.momentumBounce) { 13684 if (newPosition - swiper.minTranslate() > bounceAmount) { 13685 newPosition = swiper.minTranslate() + bounceAmount; 13686 } 13687 afterBouncePosition = swiper.minTranslate(); 13688 doBounce = true; 13689 data.allowMomentumBounce = true; 13690 } else { 13691 newPosition = swiper.minTranslate(); 13692 } 13693 if (params.loop && params.centeredSlides) needsLoopFix = true; 13694 } else if (params.freeMode.sticky) { 13695 let nextSlide; 13696 for (let j = 0; j < snapGrid.length; j += 1) { 13697 if (snapGrid[j] > -newPosition) { 13698 nextSlide = j; 13699 break; 13700 } 13701 } 13702 if (Math.abs(snapGrid[nextSlide] - newPosition) < Math.abs(snapGrid[nextSlide - 1] - newPosition) || swiper.swipeDirection === 'next') { 13703 newPosition = snapGrid[nextSlide]; 13704 } else { 13705 newPosition = snapGrid[nextSlide - 1]; 13706 } 13707 newPosition = -newPosition; 13708 } 13709 if (needsLoopFix) { 13710 once('transitionEnd', () => { 13711 swiper.loopFix(); 13712 }); 13713 } 13714 // Fix duration 13715 if (swiper.velocity !== 0) { 13716 if (rtl) { 13717 momentumDuration = Math.abs((-newPosition - swiper.translate) / swiper.velocity); 13718 } else { 13719 momentumDuration = Math.abs((newPosition - swiper.translate) / swiper.velocity); 13720 } 13721 if (params.freeMode.sticky) { 13722 // If freeMode.sticky is active and the user ends a swipe with a slow-velocity 13723 // event, then durations can be 20+ seconds to slide one (or zero!) slides. 13724 // It's easy to see this when simulating touch with mouse events. To fix this, 13725 // limit single-slide swipes to the default slide duration. This also has the 13726 // nice side effect of matching slide speed if the user stopped moving before 13727 // lifting finger or mouse vs. moving slowly before lifting the finger/mouse. 13728 // For faster swipes, also apply limits (albeit higher ones). 13729 const moveDistance = Math.abs((rtl ? -newPosition : newPosition) - swiper.translate); 13730 const currentSlideSize = swiper.slidesSizesGrid[swiper.activeIndex]; 13731 if (moveDistance < currentSlideSize) { 13732 momentumDuration = params.speed; 13733 } else if (moveDistance < 2 * currentSlideSize) { 13734 momentumDuration = params.speed * 1.5; 13735 } else { 13736 momentumDuration = params.speed * 2.5; 13737 } 13738 } 13739 } else if (params.freeMode.sticky) { 13740 swiper.slideToClosest(); 13741 return; 13742 } 13743 if (params.freeMode.momentumBounce && doBounce) { 13744 swiper.updateProgress(afterBouncePosition); 13745 swiper.setTransition(momentumDuration); 13746 swiper.setTranslate(newPosition); 13747 swiper.transitionStart(true, swiper.swipeDirection); 13748 swiper.animating = true; 13749 (0,_shared_utils_mjs__WEBPACK_IMPORTED_MODULE_0__.j)(wrapperEl, () => { 13750 if (!swiper || swiper.destroyed || !data.allowMomentumBounce) return; 13751 emit('momentumBounce'); 13752 swiper.setTransition(params.speed); 13753 setTimeout(() => { 13754 swiper.setTranslate(afterBouncePosition); 13755 (0,_shared_utils_mjs__WEBPACK_IMPORTED_MODULE_0__.j)(wrapperEl, () => { 13756 if (!swiper || swiper.destroyed) return; 13757 swiper.transitionEnd(); 13758 }); 13759 }, 0); 13760 }); 13761 } else if (swiper.velocity) { 13762 emit('_freeModeNoMomentumRelease'); 13763 swiper.updateProgress(newPosition); 13764 swiper.setTransition(momentumDuration); 13765 swiper.setTranslate(newPosition); 13766 swiper.transitionStart(true, swiper.swipeDirection); 13767 if (!swiper.animating) { 13768 swiper.animating = true; 13769 (0,_shared_utils_mjs__WEBPACK_IMPORTED_MODULE_0__.j)(wrapperEl, () => { 13770 if (!swiper || swiper.destroyed) return; 13771 swiper.transitionEnd(); 13772 }); 13773 } 13774 } else { 13775 swiper.updateProgress(newPosition); 13776 } 13777 swiper.updateActiveIndex(); 13778 swiper.updateSlidesClasses(); 13779 } else if (params.freeMode.sticky) { 13780 swiper.slideToClosest(); 13781 return; 13782 } else if (params.freeMode) { 13783 emit('_freeModeNoMomentumRelease'); 13784 } 13785 if (!params.freeMode.momentum || timeDiff >= params.longSwipesMs) { 13786 emit('_freeModeStaticRelease'); 13787 swiper.updateProgress(); 13788 swiper.updateActiveIndex(); 13789 swiper.updateSlidesClasses(); 13790 } 13791 } 13792 Object.assign(swiper, { 13793 freeMode: { 13794 onTouchStart, 13795 onTouchMove, 13796 onTouchEnd 13797 } 13798 }); 13799} 13800 13801 13802 13803 13804/***/ }), 13805
vendor: 5,711 bytes, lines 13806-13975
13806/***/ "./node_modules/swiper/modules/grid.mjs": 13807/*!**********************************************!*\ 13808 !*** ./node_modules/swiper/modules/grid.mjs ***! 13809 \**********************************************/ 13810/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { 13811 13812"use strict"; 13813__webpack_require__.r(__webpack_exports__); 13814/* harmony export */ __webpack_require__.d(__webpack_exports__, { 13815/* harmony export */ "default": () => (/* binding */ Grid) 13816/* harmony export */ }); 13817function Grid(_ref) { 13818 let { 13819 swiper, 13820 extendParams, 13821 on 13822 } = _ref; 13823 extendParams({ 13824 grid: { 13825 rows: 1, 13826 fill: 'column' 13827 } 13828 }); 13829 let slidesNumberEvenToRows; 13830 let slidesPerRow; 13831 let numFullColumns; 13832 let wasMultiRow; 13833 const getSpaceBetween = () => { 13834 let spaceBetween = swiper.params.spaceBetween; 13835 if (typeof spaceBetween === 'string' && spaceBetween.indexOf('%') >= 0) { 13836 spaceBetween = parseFloat(spaceBetween.replace('%', '')) / 100 * swiper.size; 13837 } else if (typeof spaceBetween === 'string') { 13838 spaceBetween = parseFloat(spaceBetween); 13839 } 13840 return spaceBetween; 13841 }; 13842 const initSlides = slides => { 13843 const { 13844 slidesPerView 13845 } = swiper.params; 13846 const { 13847 rows, 13848 fill 13849 } = swiper.params.grid; 13850 const slidesLength = swiper.virtual && swiper.params.virtual.enabled ? swiper.virtual.slides.length : slides.length; 13851 numFullColumns = Math.floor(slidesLength / rows); 13852 if (Math.floor(slidesLength / rows) === slidesLength / rows) { 13853 slidesNumberEvenToRows = slidesLength; 13854 } else { 13855 slidesNumberEvenToRows = Math.ceil(slidesLength / rows) * rows; 13856 } 13857 if (slidesPerView !== 'auto' && fill === 'row') { 13858 slidesNumberEvenToRows = Math.max(slidesNumberEvenToRows, slidesPerView * rows); 13859 } 13860 slidesPerRow = slidesNumberEvenToRows / rows; 13861 }; 13862 const unsetSlides = () => { 13863 if (swiper.slides) { 13864 swiper.slides.forEach(slide => { 13865 if (slide.swiperSlideGridSet) { 13866 slide.style.height = ''; 13867 slide.style[swiper.getDirectionLabel('margin-top')] = ''; 13868 } 13869 }); 13870 } 13871 }; 13872 const updateSlide = (i, slide, slides) => { 13873 const { 13874 slidesPerGroup 13875 } = swiper.params; 13876 const spaceBetween = getSpaceBetween(); 13877 const { 13878 rows, 13879 fill 13880 } = swiper.params.grid; 13881 const slidesLength = swiper.virtual && swiper.params.virtual.enabled ? swiper.virtual.slides.length : slides.length; 13882 // Set slides order 13883 let newSlideOrderIndex; 13884 let column; 13885 let row; 13886 if (fill === 'row' && slidesPerGroup > 1) { 13887 const groupIndex = Math.floor(i / (slidesPerGroup * rows)); 13888 const slideIndexInGroup = i - rows * slidesPerGroup * groupIndex; 13889 const columnsInGroup = groupIndex === 0 ? slidesPerGroup : Math.min(Math.ceil((slidesLength - groupIndex * rows * slidesPerGroup) / rows), slidesPerGroup); 13890 row = Math.floor(slideIndexInGroup / columnsInGroup); 13891 column = slideIndexInGroup - row * columnsInGroup + groupIndex * slidesPerGroup; 13892 newSlideOrderIndex = column + row * slidesNumberEvenToRows / rows; 13893 slide.style.order = newSlideOrderIndex; 13894 } else if (fill === 'column') { 13895 column = Math.floor(i / rows); 13896 row = i - column * rows; 13897 if (column > numFullColumns || column === numFullColumns && row === rows - 1) { 13898 row += 1; 13899 if (row >= rows) { 13900 row = 0; 13901 column += 1; 13902 } 13903 } 13904 } else { 13905 row = Math.floor(i / slidesPerRow); 13906 column = i - row * slidesPerRow; 13907 } 13908 slide.row = row; 13909 slide.column = column; 13910 slide.style.height = `calc((100% - ${(rows - 1) * spaceBetween}px) / ${rows})`; 13911 slide.style[swiper.getDirectionLabel('margin-top')] = row !== 0 ? spaceBetween && `${spaceBetween}px` : ''; 13912 slide.swiperSlideGridSet = true; 13913 }; 13914 const updateWrapperSize = (slideSize, snapGrid) => { 13915 const { 13916 centeredSlides, 13917 roundLengths 13918 } = swiper.params; 13919 const spaceBetween = getSpaceBetween(); 13920 const { 13921 rows 13922 } = swiper.params.grid; 13923 swiper.virtualSize = (slideSize + spaceBetween) * slidesNumberEvenToRows; 13924 swiper.virtualSize = Math.ceil(swiper.virtualSize / rows) - spaceBetween; 13925 if (!swiper.params.cssMode) { 13926 swiper.wrapperEl.style[swiper.getDirectionLabel('width')] = `${swiper.virtualSize + spaceBetween}px`; 13927 } 13928 if (centeredSlides) { 13929 const newSlidesGrid = []; 13930 for (let i = 0; i < snapGrid.length; i += 1) { 13931 let slidesGridItem = snapGrid[i]; 13932 if (roundLengths) slidesGridItem = Math.floor(slidesGridItem); 13933 if (snapGrid[i] < swiper.virtualSize + snapGrid[0]) newSlidesGrid.push(slidesGridItem); 13934 } 13935 snapGrid.splice(0, snapGrid.length); 13936 snapGrid.push(...newSlidesGrid); 13937 } 13938 }; 13939 const onInit = () => { 13940 wasMultiRow = swiper.params.grid && swiper.params.grid.rows > 1; 13941 }; 13942 const onUpdate = () => { 13943 const { 13944 params, 13945 el 13946 } = swiper; 13947 const isMultiRow = params.grid && params.grid.rows > 1; 13948 if (wasMultiRow && !isMultiRow) { 13949 el.classList.remove(`${params.containerModifierClass}grid`, `${params.containerModifierClass}grid-column`); 13950 numFullColumns = 1; 13951 swiper.emitContainerClasses(); 13952 } else if (!wasMultiRow && isMultiRow) { 13953 el.classList.add(`${params.containerModifierClass}grid`); 13954 if (params.grid.fill === 'column') { 13955 el.classList.add(`${params.containerModifierClass}grid-column`); 13956 } 13957 swiper.emitContainerClasses(); 13958 } 13959 wasMultiRow = isMultiRow; 13960 }; 13961 on('init', onInit); 13962 on('update', onUpdate); 13963 swiper.grid = { 13964 initSlides, 13965 unsetSlides, 13966 updateSlide, 13967 updateWrapperSize 13968 }; 13969} 13970 13971 13972 13973 13974/***/ }), 13975
vendor: 4,412 bytes, lines 13976-14085
13976/***/ "./node_modules/swiper/modules/hash-navigation.mjs": 13977/*!*********************************************************!*\ 13978 !*** ./node_modules/swiper/modules/hash-navigation.mjs ***! 13979 \*********************************************************/ 13980/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { 13981 13982"use strict"; 13983__webpack_require__.r(__webpack_exports__); 13984/* harmony export */ __webpack_require__.d(__webpack_exports__, { 13985/* harmony export */ "default": () => (/* binding */ HashNavigation) 13986/* harmony export */ }); 13987/* harmony import */ var _shared_ssr_window_esm_mjs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../shared/ssr-window.esm.mjs */ "./node_modules/swiper/shared/ssr-window.esm.mjs"); 13988/* harmony import */ var _shared_utils_mjs__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../shared/utils.mjs */ "./node_modules/swiper/shared/utils.mjs"); 13989 13990 13991 13992function HashNavigation(_ref) { 13993 let { 13994 swiper, 13995 extendParams, 13996 emit, 13997 on 13998 } = _ref; 13999 let initialized = false; 14000 const document = (0,_shared_ssr_window_esm_mjs__WEBPACK_IMPORTED_MODULE_0__.g)(); 14001 const window = (0,_shared_ssr_window_esm_mjs__WEBPACK_IMPORTED_MODULE_0__.a)(); 14002 extendParams({ 14003 hashNavigation: { 14004 enabled: false, 14005 replaceState: false, 14006 watchState: false, 14007 getSlideIndex(_s, hash) { 14008 if (swiper.virtual && swiper.params.virtual.enabled) { 14009 const slideWithHash = swiper.slides.filter(slideEl => slideEl.getAttribute('data-hash') === hash)[0]; 14010 if (!slideWithHash) return 0; 14011 const index = parseInt(slideWithHash.getAttribute('data-swiper-slide-index'), 10); 14012 return index; 14013 } 14014 return swiper.getSlideIndex((0,_shared_utils_mjs__WEBPACK_IMPORTED_MODULE_1__.e)(swiper.slidesEl, `.${swiper.params.slideClass}[data-hash="${hash}"], swiper-slide[data-hash="${hash}"]`)[0]); 14015 } 14016 } 14017 }); 14018 const onHashChange = () => { 14019 emit('hashChange'); 14020 const newHash = document.location.hash.replace('#', ''); 14021 const activeSlideEl = swiper.virtual && swiper.params.virtual.enabled ? swiper.slidesEl.querySelector(`[data-swiper-slide-index="${swiper.activeIndex}"]`) : swiper.slides[swiper.activeIndex]; 14022 const activeSlideHash = activeSlideEl ? activeSlideEl.getAttribute('data-hash') : ''; 14023 if (newHash !== activeSlideHash) { 14024 const newIndex = swiper.params.hashNavigation.getSlideIndex(swiper, newHash); 14025 if (typeof newIndex === 'undefined' || Number.isNaN(newIndex)) return; 14026 swiper.slideTo(newIndex); 14027 } 14028 }; 14029 const setHash = () => { 14030 if (!initialized || !swiper.params.hashNavigation.enabled) return; 14031 const activeSlideEl = swiper.virtual && swiper.params.virtual.enabled ? swiper.slidesEl.querySelector(`[data-swiper-slide-index="${swiper.activeIndex}"]`) : swiper.slides[swiper.activeIndex]; 14032 const activeSlideHash = activeSlideEl ? activeSlideEl.getAttribute('data-hash') || activeSlideEl.getAttribute('data-history') : ''; 14033 if (swiper.params.hashNavigation.replaceState && window.history && window.history.replaceState) { 14034 window.history.replaceState(null, null, `#${activeSlideHash}` || ''); 14035 emit('hashSet'); 14036 } else { 14037 document.location.hash = activeSlideHash || ''; 14038 emit('hashSet'); 14039 } 14040 }; 14041 const init = () => { 14042 if (!swiper.params.hashNavigation.enabled || swiper.params.history && swiper.params.history.enabled) return; 14043 initialized = true; 14044 const hash = document.location.hash.replace('#', ''); 14045 if (hash) { 14046 const speed = 0; 14047 const index = swiper.params.hashNavigation.getSlideIndex(swiper, hash); 14048 swiper.slideTo(index || 0, speed, swiper.params.runCallbacksOnInit, true); 14049 } 14050 if (swiper.params.hashNavigation.watchState) { 14051 window.addEventListener('hashchange', onHashChange); 14052 } 14053 }; 14054 const destroy = () => { 14055 if (swiper.params.hashNavigation.watchState) { 14056 window.removeEventListener('hashchange', onHashChange); 14057 } 14058 }; 14059 on('init', () => { 14060 if (swiper.params.hashNavigation.enabled) { 14061 init(); 14062 } 14063 }); 14064 on('destroy', () => { 14065 if (swiper.params.hashNavigation.enabled) { 14066 destroy(); 14067 } 14068 }); 14069 on('transitionEnd _freeModeNoMomentumRelease', () => { 14070 if (initialized) { 14071 setHash(); 14072 } 14073 }); 14074 on('slideChange', () => { 14075 if (initialized && swiper.params.cssMode) { 14076 setHash(); 14077 } 14078 }); 14079} 14080 14081 14082 14083 14084/***/ }), 14085
vendor: 5,002 bytes, lines 14086-14243
14086/***/ "./node_modules/swiper/modules/history.mjs": 14087/*!*************************************************!*\ 14088 !*** ./node_modules/swiper/modules/history.mjs ***! 14089 \*************************************************/ 14090/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { 14091 14092"use strict"; 14093__webpack_require__.r(__webpack_exports__); 14094/* harmony export */ __webpack_require__.d(__webpack_exports__, { 14095/* harmony export */ "default": () => (/* binding */ History) 14096/* harmony export */ }); 14097/* harmony import */ var _shared_ssr_window_esm_mjs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../shared/ssr-window.esm.mjs */ "./node_modules/swiper/shared/ssr-window.esm.mjs"); 14098 14099 14100function History(_ref) { 14101 let { 14102 swiper, 14103 extendParams, 14104 on 14105 } = _ref; 14106 extendParams({ 14107 history: { 14108 enabled: false, 14109 root: '', 14110 replaceState: false, 14111 key: 'slides', 14112 keepQuery: false 14113 } 14114 }); 14115 let initialized = false; 14116 let paths = {}; 14117 const slugify = text => { 14118 return text.toString().replace(/\s+/g, '-').replace(/[^\w-]+/g, '').replace(/--+/g, '-').replace(/^-+/, '').replace(/-+$/, ''); 14119 }; 14120 const getPathValues = urlOverride => { 14121 const window = (0,_shared_ssr_window_esm_mjs__WEBPACK_IMPORTED_MODULE_0__.a)(); 14122 let location; 14123 if (urlOverride) { 14124 location = new URL(urlOverride); 14125 } else { 14126 location = window.location; 14127 } 14128 const pathArray = location.pathname.slice(1).split('/').filter(part => part !== ''); 14129 const total = pathArray.length; 14130 const key = pathArray[total - 2]; 14131 const value = pathArray[total - 1]; 14132 return { 14133 key, 14134 value 14135 }; 14136 }; 14137 const setHistory = (key, index) => { 14138 const window = (0,_shared_ssr_window_esm_mjs__WEBPACK_IMPORTED_MODULE_0__.a)(); 14139 if (!initialized || !swiper.params.history.enabled) return; 14140 let location; 14141 if (swiper.params.url) { 14142 location = new URL(swiper.params.url); 14143 } else { 14144 location = window.location; 14145 } 14146 const slide = swiper.slides[index]; 14147 let value = slugify(slide.getAttribute('data-history')); 14148 if (swiper.params.history.root.length > 0) { 14149 let root = swiper.params.history.root; 14150 if (root[root.length - 1] === '/') root = root.slice(0, root.length - 1); 14151 value = `${root}/${key ? `${key}/` : ''}${value}`; 14152 } else if (!location.pathname.includes(key)) { 14153 value = `${key ? `${key}/` : ''}${value}`; 14154 } 14155 if (swiper.params.history.keepQuery) { 14156 value += location.search; 14157 } 14158 const currentState = window.history.state; 14159 if (currentState && currentState.value === value) { 14160 return; 14161 } 14162 if (swiper.params.history.replaceState) { 14163 window.history.replaceState({ 14164 value 14165 }, null, value); 14166 } else { 14167 window.history.pushState({ 14168 value 14169 }, null, value); 14170 } 14171 }; 14172 const scrollToSlide = (speed, value, runCallbacks) => { 14173 if (value) { 14174 for (let i = 0, length = swiper.slides.length; i < length; i += 1) { 14175 const slide = swiper.slides[i]; 14176 const slideHistory = slugify(slide.getAttribute('data-history')); 14177 if (slideHistory === value) { 14178 const index = swiper.getSlideIndex(slide); 14179 swiper.slideTo(index, speed, runCallbacks); 14180 } 14181 } 14182 } else { 14183 swiper.slideTo(0, speed, runCallbacks); 14184 } 14185 }; 14186 const setHistoryPopState = () => { 14187 paths = getPathValues(swiper.params.url); 14188 scrollToSlide(swiper.params.speed, paths.value, false); 14189 }; 14190 const init = () => { 14191 const window = (0,_shared_ssr_window_esm_mjs__WEBPACK_IMPORTED_MODULE_0__.a)(); 14192 if (!swiper.params.history) return; 14193 if (!window.history || !window.history.pushState) { 14194 swiper.params.history.enabled = false; 14195 swiper.params.hashNavigation.enabled = true; 14196 return; 14197 } 14198 initialized = true; 14199 paths = getPathValues(swiper.params.url); 14200 if (!paths.key && !paths.value) { 14201 if (!swiper.params.history.replaceState) { 14202 window.addEventListener('popstate', setHistoryPopState); 14203 } 14204 return; 14205 } 14206 scrollToSlide(0, paths.value, swiper.params.runCallbacksOnInit); 14207 if (!swiper.params.history.replaceState) { 14208 window.addEventListener('popstate', setHistoryPopState); 14209 } 14210 }; 14211 const destroy = () => { 14212 const window = (0,_shared_ssr_window_esm_mjs__WEBPACK_IMPORTED_MODULE_0__.a)(); 14213 if (!swiper.params.history.replaceState) { 14214 window.removeEventListener('popstate', setHistoryPopState); 14215 } 14216 }; 14217 on('init', () => { 14218 if (swiper.params.history.enabled) { 14219 init(); 14220 } 14221 }); 14222 on('destroy', () => { 14223 if (swiper.params.history.enabled) { 14224 destroy(); 14225 } 14226 }); 14227 on('transitionEnd _freeModeNoMomentumRelease', () => { 14228 if (initialized) { 14229 setHistory(swiper.params.history.key, swiper.activeIndex); 14230 } 14231 }); 14232 on('slideChange', () => { 14233 if (initialized && swiper.params.cssMode) { 14234 setHistory(swiper.params.history.key, swiper.activeIndex); 14235 } 14236 }); 14237} 14238 14239 14240 14241 14242/***/ }), 14243
vendor: 5,273 bytes, lines 14244-14377
14244/***/ "./node_modules/swiper/modules/keyboard.mjs": 14245/*!**************************************************!*\ 14246 !*** ./node_modules/swiper/modules/keyboard.mjs ***! 14247 \**************************************************/ 14248/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { 14249 14250"use strict"; 14251__webpack_require__.r(__webpack_exports__); 14252/* harmony export */ __webpack_require__.d(__webpack_exports__, { 14253/* harmony export */ "default": () => (/* binding */ Keyboard) 14254/* harmony export */ }); 14255/* harmony import */ var _shared_ssr_window_esm_mjs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../shared/ssr-window.esm.mjs */ "./node_modules/swiper/shared/ssr-window.esm.mjs"); 14256/* harmony import */ var _shared_utils_mjs__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../shared/utils.mjs */ "./node_modules/swiper/shared/utils.mjs"); 14257 14258 14259 14260/* eslint-disable consistent-return */ 14261function Keyboard(_ref) { 14262 let { 14263 swiper, 14264 extendParams, 14265 on, 14266 emit 14267 } = _ref; 14268 const document = (0,_shared_ssr_window_esm_mjs__WEBPACK_IMPORTED_MODULE_0__.g)(); 14269 const window = (0,_shared_ssr_window_esm_mjs__WEBPACK_IMPORTED_MODULE_0__.a)(); 14270 swiper.keyboard = { 14271 enabled: false 14272 }; 14273 extendParams({ 14274 keyboard: { 14275 enabled: false, 14276 onlyInViewport: true, 14277 pageUpDown: true 14278 } 14279 }); 14280 function handle(event) { 14281 if (!swiper.enabled) return; 14282 const { 14283 rtlTranslate: rtl 14284 } = swiper; 14285 let e = event; 14286 if (e.originalEvent) e = e.originalEvent; // jquery fix 14287 const kc = e.keyCode || e.charCode; 14288 const pageUpDown = swiper.params.keyboard.pageUpDown; 14289 const isPageUp = pageUpDown && kc === 33; 14290 const isPageDown = pageUpDown && kc === 34; 14291 const isArrowLeft = kc === 37; 14292 const isArrowRight = kc === 39; 14293 const isArrowUp = kc === 38; 14294 const isArrowDown = kc === 40; 14295 // Directions locks 14296 if (!swiper.allowSlideNext && (swiper.isHorizontal() && isArrowRight || swiper.isVertical() && isArrowDown || isPageDown)) { 14297 return false; 14298 } 14299 if (!swiper.allowSlidePrev && (swiper.isHorizontal() && isArrowLeft || swiper.isVertical() && isArrowUp || isPageUp)) { 14300 return false; 14301 } 14302 if (e.shiftKey || e.altKey || e.ctrlKey || e.metaKey) { 14303 return undefined; 14304 } 14305 if (document.activeElement && document.activeElement.nodeName && (document.activeElement.nodeName.toLowerCase() === 'input' || document.activeElement.nodeName.toLowerCase() === 'textarea')) { 14306 return undefined; 14307 } 14308 if (swiper.params.keyboard.onlyInViewport && (isPageUp || isPageDown || isArrowLeft || isArrowRight || isArrowUp || isArrowDown)) { 14309 let inView = false; 14310 // Check that swiper should be inside of visible area of window 14311 if ((0,_shared_utils_mjs__WEBPACK_IMPORTED_MODULE_1__.a)(swiper.el, `.${swiper.params.slideClass}, swiper-slide`).length > 0 && (0,_shared_utils_mjs__WEBPACK_IMPORTED_MODULE_1__.a)(swiper.el, `.${swiper.params.slideActiveClass}`).length === 0) { 14312 return undefined; 14313 } 14314 const el = swiper.el; 14315 const swiperWidth = el.clientWidth; 14316 const swiperHeight = el.clientHeight; 14317 const windowWidth = window.innerWidth; 14318 const windowHeight = window.innerHeight; 14319 const swiperOffset = (0,_shared_utils_mjs__WEBPACK_IMPORTED_MODULE_1__.b)(el); 14320 if (rtl) swiperOffset.left -= el.scrollLeft; 14321 const swiperCoord = [[swiperOffset.left, swiperOffset.top], [swiperOffset.left + swiperWidth, swiperOffset.top], [swiperOffset.left, swiperOffset.top + swiperHeight], [swiperOffset.left + swiperWidth, swiperOffset.top + swiperHeight]]; 14322 for (let i = 0; i < swiperCoord.length; i += 1) { 14323 const point = swiperCoord[i]; 14324 if (point[0] >= 0 && point[0] <= windowWidth && point[1] >= 0 && point[1] <= windowHeight) { 14325 if (point[0] === 0 && point[1] === 0) continue; // eslint-disable-line 14326 inView = true; 14327 } 14328 } 14329 if (!inView) return undefined; 14330 } 14331 if (swiper.isHorizontal()) { 14332 if (isPageUp || isPageDown || isArrowLeft || isArrowRight) { 14333 if (e.preventDefault) e.preventDefault();else e.returnValue = false; 14334 } 14335 if ((isPageDown || isArrowRight) && !rtl || (isPageUp || isArrowLeft) && rtl) swiper.slideNext(); 14336 if ((isPageUp || isArrowLeft) && !rtl || (isPageDown || isArrowRight) && rtl) swiper.slidePrev(); 14337 } else { 14338 if (isPageUp || isPageDown || isArrowUp || isArrowDown) { 14339 if (e.preventDefault) e.preventDefault();else e.returnValue = false; 14340 } 14341 if (isPageDown || isArrowDown) swiper.slideNext(); 14342 if (isPageUp || isArrowUp) swiper.slidePrev(); 14343 } 14344 emit('keyPress', kc); 14345 return undefined; 14346 } 14347 function enable() { 14348 if (swiper.keyboard.enabled) return; 14349 document.addEventListener('keydown', handle); 14350 swiper.keyboard.enabled = true; 14351 } 14352 function disable() { 14353 if (!swiper.keyboard.enabled) return; 14354 document.removeEventListener('keydown', handle); 14355 swiper.keyboard.enabled = false; 14356 } 14357 on('init', () => { 14358 if (swiper.params.keyboard.enabled) { 14359 enable(); 14360 } 14361 }); 14362 on('destroy', () => { 14363 if (swiper.keyboard.enabled) { 14364 disable(); 14365 } 14366 }); 14367 Object.assign(swiper.keyboard, { 14368 enable, 14369 disable 14370 }); 14371} 14372 14373 14374 14375 14376/***/ }), 14377
vendor: 5,517 bytes, lines 14378-14583
14378/***/ "./node_modules/swiper/modules/manipulation.mjs": 14379/*!******************************************************!*\ 14380 !*** ./node_modules/swiper/modules/manipulation.mjs ***! 14381 \******************************************************/ 14382/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { 14383 14384"use strict"; 14385__webpack_require__.r(__webpack_exports__); 14386/* harmony export */ __webpack_require__.d(__webpack_exports__, { 14387/* harmony export */ "default": () => (/* binding */ Manipulation) 14388/* harmony export */ }); 14389function appendSlide(slides) { 14390 const swiper = this; 14391 const { 14392 params, 14393 slidesEl 14394 } = swiper; 14395 if (params.loop) { 14396 swiper.loopDestroy(); 14397 } 14398 const appendElement = slideEl => { 14399 if (typeof slideEl === 'string') { 14400 const tempDOM = document.createElement('div'); 14401 tempDOM.innerHTML = slideEl; 14402 slidesEl.append(tempDOM.children[0]); 14403 tempDOM.innerHTML = ''; 14404 } else { 14405 slidesEl.append(slideEl); 14406 } 14407 }; 14408 if (typeof slides === 'object' && 'length' in slides) { 14409 for (let i = 0; i < slides.length; i += 1) { 14410 if (slides[i]) appendElement(slides[i]); 14411 } 14412 } else { 14413 appendElement(slides); 14414 } 14415 swiper.recalcSlides(); 14416 if (params.loop) { 14417 swiper.loopCreate(); 14418 } 14419 if (!params.observer || swiper.isElement) { 14420 swiper.update(); 14421 } 14422} 14423 14424function prependSlide(slides) { 14425 const swiper = this; 14426 const { 14427 params, 14428 activeIndex, 14429 slidesEl 14430 } = swiper; 14431 if (params.loop) { 14432 swiper.loopDestroy(); 14433 } 14434 let newActiveIndex = activeIndex + 1; 14435 const prependElement = slideEl => { 14436 if (typeof slideEl === 'string') { 14437 const tempDOM = document.createElement('div'); 14438 tempDOM.innerHTML = slideEl; 14439 slidesEl.prepend(tempDOM.children[0]); 14440 tempDOM.innerHTML = ''; 14441 } else { 14442 slidesEl.prepend(slideEl); 14443 } 14444 }; 14445 if (typeof slides === 'object' && 'length' in slides) { 14446 for (let i = 0; i < slides.length; i += 1) { 14447 if (slides[i]) prependElement(slides[i]); 14448 } 14449 newActiveIndex = activeIndex + slides.length; 14450 } else { 14451 prependElement(slides); 14452 } 14453 swiper.recalcSlides(); 14454 if (params.loop) { 14455 swiper.loopCreate(); 14456 } 14457 if (!params.observer || swiper.isElement) { 14458 swiper.update(); 14459 } 14460 swiper.slideTo(newActiveIndex, 0, false); 14461} 14462 14463function addSlide(index, slides) { 14464 const swiper = this; 14465 const { 14466 params, 14467 activeIndex, 14468 slidesEl 14469 } = swiper; 14470 let activeIndexBuffer = activeIndex; 14471 if (params.loop) { 14472 activeIndexBuffer -= swiper.loopedSlides; 14473 swiper.loopDestroy(); 14474 swiper.recalcSlides(); 14475 } 14476 const baseLength = swiper.slides.length; 14477 if (index <= 0) { 14478 swiper.prependSlide(slides); 14479 return; 14480 } 14481 if (index >= baseLength) { 14482 swiper.appendSlide(slides); 14483 return; 14484 } 14485 let newActiveIndex = activeIndexBuffer > index ? activeIndexBuffer + 1 : activeIndexBuffer; 14486 const slidesBuffer = []; 14487 for (let i = baseLength - 1; i >= index; i -= 1) { 14488 const currentSlide = swiper.slides[i]; 14489 currentSlide.remove(); 14490 slidesBuffer.unshift(currentSlide); 14491 } 14492 if (typeof slides === 'object' && 'length' in slides) { 14493 for (let i = 0; i < slides.length; i += 1) { 14494 if (slides[i]) slidesEl.append(slides[i]); 14495 } 14496 newActiveIndex = activeIndexBuffer > index ? activeIndexBuffer + slides.length : activeIndexBuffer; 14497 } else { 14498 slidesEl.append(slides); 14499 } 14500 for (let i = 0; i < slidesBuffer.length; i += 1) { 14501 slidesEl.append(slidesBuffer[i]); 14502 } 14503 swiper.recalcSlides(); 14504 if (params.loop) { 14505 swiper.loopCreate(); 14506 } 14507 if (!params.observer || swiper.isElement) { 14508 swiper.update(); 14509 } 14510 if (params.loop) { 14511 swiper.slideTo(newActiveIndex + swiper.loopedSlides, 0, false); 14512 } else { 14513 swiper.slideTo(newActiveIndex, 0, false); 14514 } 14515} 14516 14517function removeSlide(slidesIndexes) { 14518 const swiper = this; 14519 const { 14520 params, 14521 activeIndex 14522 } = swiper; 14523 let activeIndexBuffer = activeIndex; 14524 if (params.loop) { 14525 activeIndexBuffer -= swiper.loopedSlides; 14526 swiper.loopDestroy(); 14527 } 14528 let newActiveIndex = activeIndexBuffer; 14529 let indexToRemove; 14530 if (typeof slidesIndexes === 'object' && 'length' in slidesIndexes) { 14531 for (let i = 0; i < slidesIndexes.length; i += 1) { 14532 indexToRemove = slidesIndexes[i]; 14533 if (swiper.slides[indexToRemove]) swiper.slides[indexToRemove].remove(); 14534 if (indexToRemove < newActiveIndex) newActiveIndex -= 1; 14535 } 14536 newActiveIndex = Math.max(newActiveIndex, 0); 14537 } else { 14538 indexToRemove = slidesIndexes; 14539 if (swiper.slides[indexToRemove]) swiper.slides[indexToRemove].remove(); 14540 if (indexToRemove < newActiveIndex) newActiveIndex -= 1; 14541 newActiveIndex = Math.max(newActiveIndex, 0); 14542 } 14543 swiper.recalcSlides(); 14544 if (params.loop) { 14545 swiper.loopCreate(); 14546 } 14547 if (!params.observer || swiper.isElement) { 14548 swiper.update(); 14549 } 14550 if (params.loop) { 14551 swiper.slideTo(newActiveIndex + swiper.loopedSlides, 0, false); 14552 } else { 14553 swiper.slideTo(newActiveIndex, 0, false); 14554 } 14555} 14556 14557function removeAllSlides() { 14558 const swiper = this; 14559 const slidesIndexes = []; 14560 for (let i = 0; i < swiper.slides.length; i += 1) { 14561 slidesIndexes.push(i); 14562 } 14563 swiper.removeSlide(slidesIndexes); 14564} 14565 14566function Manipulation(_ref) { 14567 let { 14568 swiper 14569 } = _ref; 14570 Object.assign(swiper, { 14571 appendSlide: appendSlide.bind(swiper), 14572 prependSlide: prependSlide.bind(swiper), 14573 addSlide: addSlide.bind(swiper), 14574 removeSlide: removeSlide.bind(swiper), 14575 removeAllSlides: removeAllSlides.bind(swiper) 14576 }); 14577} 14578 14579 14580 14581 14582/***/ }), 14583
vendor: 15,884 bytes, lines 14584-14993
14584/***/ "./node_modules/swiper/modules/mousewheel.mjs": 14585/*!****************************************************!*\ 14586 !*** ./node_modules/swiper/modules/mousewheel.mjs ***! 14587 \****************************************************/ 14588/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { 14589 14590"use strict"; 14591__webpack_require__.r(__webpack_exports__); 14592/* harmony export */ __webpack_require__.d(__webpack_exports__, { 14593/* harmony export */ "default": () => (/* binding */ Mousewheel) 14594/* harmony export */ }); 14595/* harmony import */ var _shared_ssr_window_esm_mjs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../shared/ssr-window.esm.mjs */ "./node_modules/swiper/shared/ssr-window.esm.mjs"); 14596/* harmony import */ var _shared_utils_mjs__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../shared/utils.mjs */ "./node_modules/swiper/shared/utils.mjs"); 14597 14598 14599 14600/* eslint-disable consistent-return */ 14601function Mousewheel(_ref) { 14602 let { 14603 swiper, 14604 extendParams, 14605 on, 14606 emit 14607 } = _ref; 14608 const window = (0,_shared_ssr_window_esm_mjs__WEBPACK_IMPORTED_MODULE_0__.a)(); 14609 extendParams({ 14610 mousewheel: { 14611 enabled: false, 14612 releaseOnEdges: false, 14613 invert: false, 14614 forceToAxis: false, 14615 sensitivity: 1, 14616 eventsTarget: 'container', 14617 thresholdDelta: null, 14618 thresholdTime: null, 14619 noMousewheelClass: 'swiper-no-mousewheel' 14620 } 14621 }); 14622 swiper.mousewheel = { 14623 enabled: false 14624 }; 14625 let timeout; 14626 let lastScrollTime = (0,_shared_utils_mjs__WEBPACK_IMPORTED_MODULE_1__.d)(); 14627 let lastEventBeforeSnap; 14628 const recentWheelEvents = []; 14629 function normalize(e) { 14630 // Reasonable defaults 14631 const PIXEL_STEP = 10; 14632 const LINE_HEIGHT = 40; 14633 const PAGE_HEIGHT = 800; 14634 let sX = 0; 14635 let sY = 0; // spinX, spinY 14636 let pX = 0; 14637 let pY = 0; // pixelX, pixelY 14638 14639 // Legacy 14640 if ('detail' in e) { 14641 sY = e.detail; 14642 } 14643 if ('wheelDelta' in e) { 14644 sY = -e.wheelDelta / 120; 14645 } 14646 if ('wheelDeltaY' in e) { 14647 sY = -e.wheelDeltaY / 120; 14648 } 14649 if ('wheelDeltaX' in e) { 14650 sX = -e.wheelDeltaX / 120; 14651 } 14652 14653 // side scrolling on FF with DOMMouseScroll 14654 if ('axis' in e && e.axis === e.HORIZONTAL_AXIS) { 14655 sX = sY; 14656 sY = 0; 14657 } 14658 pX = sX * PIXEL_STEP; 14659 pY = sY * PIXEL_STEP; 14660 if ('deltaY' in e) { 14661 pY = e.deltaY; 14662 } 14663 if ('deltaX' in e) { 14664 pX = e.deltaX; 14665 } 14666 if (e.shiftKey && !pX) { 14667 // if user scrolls with shift he wants horizontal scroll 14668 pX = pY; 14669 pY = 0; 14670 } 14671 if ((pX || pY) && e.deltaMode) { 14672 if (e.deltaMode === 1) { 14673 // delta in LINE units 14674 pX *= LINE_HEIGHT; 14675 pY *= LINE_HEIGHT; 14676 } else { 14677 // delta in PAGE units 14678 pX *= PAGE_HEIGHT; 14679 pY *= PAGE_HEIGHT; 14680 } 14681 } 14682 14683 // Fall-back if spin cannot be determined 14684 if (pX && !sX) { 14685 sX = pX < 1 ? -1 : 1; 14686 } 14687 if (pY && !sY) { 14688 sY = pY < 1 ? -1 : 1; 14689 } 14690 return { 14691 spinX: sX, 14692 spinY: sY, 14693 pixelX: pX, 14694 pixelY: pY 14695 }; 14696 } 14697 function handleMouseEnter() { 14698 if (!swiper.enabled) return; 14699 swiper.mouseEntered = true; 14700 } 14701 function handleMouseLeave() { 14702 if (!swiper.enabled) return; 14703 swiper.mouseEntered = false; 14704 } 14705 function animateSlider(newEvent) { 14706 if (swiper.params.mousewheel.thresholdDelta && newEvent.delta < swiper.params.mousewheel.thresholdDelta) { 14707 // Prevent if delta of wheel scroll delta is below configured threshold 14708 return false; 14709 } 14710 if (swiper.params.mousewheel.thresholdTime && (0,_shared_utils_mjs__WEBPACK_IMPORTED_MODULE_1__.d)() - lastScrollTime < swiper.params.mousewheel.thresholdTime) { 14711 // Prevent if time between scrolls is below configured threshold 14712 return false; 14713 } 14714 14715 // If the movement is NOT big enough and 14716 // if the last time the user scrolled was too close to the current one (avoid continuously triggering the slider): 14717 // Don't go any further (avoid insignificant scroll movement). 14718 if (newEvent.delta >= 6 && (0,_shared_utils_mjs__WEBPACK_IMPORTED_MODULE_1__.d)() - lastScrollTime < 60) { 14719 // Return false as a default 14720 return true; 14721 } 14722 // If user is scrolling towards the end: 14723 // If the slider hasn't hit the latest slide or 14724 // if the slider is a loop and 14725 // if the slider isn't moving right now: 14726 // Go to next slide and 14727 // emit a scroll event. 14728 // Else (the user is scrolling towards the beginning) and 14729 // if the slider hasn't hit the first slide or 14730 // if the slider is a loop and 14731 // if the slider isn't moving right now: 14732 // Go to prev slide and 14733 // emit a scroll event. 14734 if (newEvent.direction < 0) { 14735 if ((!swiper.isEnd || swiper.params.loop) && !swiper.animating) { 14736 swiper.slideNext(); 14737 emit('scroll', newEvent.raw); 14738 } 14739 } else if ((!swiper.isBeginning || swiper.params.loop) && !swiper.animating) { 14740 swiper.slidePrev(); 14741 emit('scroll', newEvent.raw); 14742 } 14743 // If you got here is because an animation has been triggered so store the current time 14744 lastScrollTime = new window.Date().getTime(); 14745 // Return false as a default 14746 return false; 14747 } 14748 function releaseScroll(newEvent) { 14749 const params = swiper.params.mousewheel; 14750 if (newEvent.direction < 0) { 14751 if (swiper.isEnd && !swiper.params.loop && params.releaseOnEdges) { 14752 // Return true to animate scroll on edges 14753 return true; 14754 } 14755 } else if (swiper.isBeginning && !swiper.params.loop && params.releaseOnEdges) { 14756 // Return true to animate scroll on edges 14757 return true; 14758 } 14759 return false; 14760 } 14761 function handle(event) { 14762 let e = event; 14763 let disableParentSwiper = true; 14764 if (!swiper.enabled) return; 14765 14766 // Ignore event if the target or its parents have the swiper-no-mousewheel class 14767 if (event.target.closest(`.${swiper.params.mousewheel.noMousewheelClass}`)) return; 14768 const params = swiper.params.mousewheel; 14769 if (swiper.params.cssMode) { 14770 e.preventDefault(); 14771 } 14772 let targetEl = swiper.el; 14773 if (swiper.params.mousewheel.eventsTarget !== 'container') { 14774 targetEl = document.querySelector(swiper.params.mousewheel.eventsTarget); 14775 } 14776 const targetElContainsTarget = targetEl && targetEl.contains(e.target); 14777 if (!swiper.mouseEntered && !targetElContainsTarget && !params.releaseOnEdges) return true; 14778 if (e.originalEvent) e = e.originalEvent; // jquery fix 14779 let delta = 0; 14780 const rtlFactor = swiper.rtlTranslate ? -1 : 1; 14781 const data = normalize(e); 14782 if (params.forceToAxis) { 14783 if (swiper.isHorizontal()) { 14784 if (Math.abs(data.pixelX) > Math.abs(data.pixelY)) delta = -data.pixelX * rtlFactor;else return true; 14785 } else if (Math.abs(data.pixelY) > Math.abs(data.pixelX)) delta = -data.pixelY;else return true; 14786 } else { 14787 delta = Math.abs(data.pixelX) > Math.abs(data.pixelY) ? -data.pixelX * rtlFactor : -data.pixelY; 14788 } 14789 if (delta === 0) return true; 14790 if (params.invert) delta = -delta; 14791 14792 // Get the scroll positions 14793 let positions = swiper.getTranslate() + delta * params.sensitivity; 14794 if (positions >= swiper.minTranslate()) positions = swiper.minTranslate(); 14795 if (positions <= swiper.maxTranslate()) positions = swiper.maxTranslate(); 14796 14797 // When loop is true: 14798 // the disableParentSwiper will be true. 14799 // When loop is false: 14800 // if the scroll positions is not on edge, 14801 // then the disableParentSwiper will be true. 14802 // if the scroll on edge positions, 14803 // then the disableParentSwiper will be false. 14804 disableParentSwiper = swiper.params.loop ? true : !(positions === swiper.minTranslate() || positions === swiper.maxTranslate()); 14805 if (disableParentSwiper && swiper.params.nested) e.stopPropagation(); 14806 if (!swiper.params.freeMode || !swiper.params.freeMode.enabled) { 14807 // Register the new event in a variable which stores the relevant data 14808 const newEvent = { 14809 time: (0,_shared_utils_mjs__WEBPACK_IMPORTED_MODULE_1__.d)(), 14810 delta: Math.abs(delta), 14811 direction: Math.sign(delta), 14812 raw: event 14813 }; 14814 14815 // Keep the most recent events 14816 if (recentWheelEvents.length >= 2) { 14817 recentWheelEvents.shift(); // only store the last N events 14818 } 14819 14820 const prevEvent = recentWheelEvents.length ? recentWheelEvents[recentWheelEvents.length - 1] : undefined; 14821 recentWheelEvents.push(newEvent); 14822 14823 // If there is at least one previous recorded event: 14824 // If direction has changed or 14825 // if the scroll is quicker than the previous one: 14826 // Animate the slider. 14827 // Else (this is the first time the wheel is moved): 14828 // Animate the slider. 14829 if (prevEvent) { 14830 if (newEvent.direction !== prevEvent.direction || newEvent.delta > prevEvent.delta || newEvent.time > prevEvent.time + 150) { 14831 animateSlider(newEvent); 14832 } 14833 } else { 14834 animateSlider(newEvent); 14835 } 14836 14837 // If it's time to release the scroll: 14838 // Return now so you don't hit the preventDefault. 14839 if (releaseScroll(newEvent)) { 14840 return true; 14841 } 14842 } else { 14843 // Freemode or scrollContainer: 14844 14845 // If we recently snapped after a momentum scroll, then ignore wheel events 14846 // to give time for the deceleration to finish. Stop ignoring after 500 msecs 14847 // or if it's a new scroll (larger delta or inverse sign as last event before 14848 // an end-of-momentum snap). 14849 const newEvent = { 14850 time: (0,_shared_utils_mjs__WEBPACK_IMPORTED_MODULE_1__.d)(), 14851 delta: Math.abs(delta), 14852 direction: Math.sign(delta) 14853 }; 14854 const ignoreWheelEvents = lastEventBeforeSnap && newEvent.time < lastEventBeforeSnap.time + 500 && newEvent.delta <= lastEventBeforeSnap.delta && newEvent.direction === lastEventBeforeSnap.direction; 14855 if (!ignoreWheelEvents) { 14856 lastEventBeforeSnap = undefined; 14857 let position = swiper.getTranslate() + delta * params.sensitivity; 14858 const wasBeginning = swiper.isBeginning; 14859 const wasEnd = swiper.isEnd; 14860 if (position >= swiper.minTranslate()) position = swiper.minTranslate(); 14861 if (position <= swiper.maxTranslate()) position = swiper.maxTranslate(); 14862 swiper.setTransition(0); 14863 swiper.setTranslate(position); 14864 swiper.updateProgress(); 14865 swiper.updateActiveIndex(); 14866 swiper.updateSlidesClasses(); 14867 if (!wasBeginning && swiper.isBeginning || !wasEnd && swiper.isEnd) { 14868 swiper.updateSlidesClasses(); 14869 } 14870 if (swiper.params.loop) { 14871 swiper.loopFix({ 14872 direction: newEvent.direction < 0 ? 'next' : 'prev', 14873 byMousewheel: true 14874 }); 14875 } 14876 if (swiper.params.freeMode.sticky) { 14877 // When wheel scrolling starts with sticky (aka snap) enabled, then detect 14878 // the end of a momentum scroll by storing recent (N=15?) wheel events. 14879 // 1. do all N events have decreasing or same (absolute value) delta? 14880 // 2. did all N events arrive in the last M (M=500?) msecs? 14881 // 3. does the earliest event have an (absolute value) delta that's 14882 // at least P (P=1?) larger than the most recent event's delta? 14883 // 4. does the latest event have a delta that's smaller than Q (Q=6?) pixels? 14884 // If 1-4 are "yes" then we're near the end of a momentum scroll deceleration. 14885 // Snap immediately and ignore remaining wheel events in this scroll. 14886 // See comment above for "remaining wheel events in this scroll" determination. 14887 // If 1-4 aren't satisfied, then wait to snap until 500ms after the last event. 14888 clearTimeout(timeout); 14889 timeout = undefined; 14890 if (recentWheelEvents.length >= 15) { 14891 recentWheelEvents.shift(); // only store the last N events 14892 } 14893 14894 const prevEvent = recentWheelEvents.length ? recentWheelEvents[recentWheelEvents.length - 1] : undefined; 14895 const firstEvent = recentWheelEvents[0]; 14896 recentWheelEvents.push(newEvent); 14897 if (prevEvent && (newEvent.delta > prevEvent.delta || newEvent.direction !== prevEvent.direction)) { 14898 // Increasing or reverse-sign delta means the user started scrolling again. Clear the wheel event log. 14899 recentWheelEvents.splice(0); 14900 } else if (recentWheelEvents.length >= 15 && newEvent.time - firstEvent.time < 500 && firstEvent.delta - newEvent.delta >= 1 && newEvent.delta <= 6) { 14901 // We're at the end of the deceleration of a momentum scroll, so there's no need 14902 // to wait for more events. Snap ASAP on the next tick. 14903 // Also, because there's some remaining momentum we'll bias the snap in the 14904 // direction of the ongoing scroll because it's better UX for the scroll to snap 14905 // in the same direction as the scroll instead of reversing to snap. Therefore, 14906 // if it's already scrolled more than 20% in the current direction, keep going. 14907 const snapToThreshold = delta > 0 ? 0.8 : 0.2; 14908 lastEventBeforeSnap = newEvent; 14909 recentWheelEvents.splice(0); 14910 timeout = (0,_shared_utils_mjs__WEBPACK_IMPORTED_MODULE_1__.n)(() => { 14911 swiper.slideToClosest(swiper.params.speed, true, undefined, snapToThreshold); 14912 }, 0); // no delay; move on next tick 14913 } 14914 14915 if (!timeout) { 14916 // if we get here, then we haven't detected the end of a momentum scroll, so 14917 // we'll consider a scroll "complete" when there haven't been any wheel events 14918 // for 500ms. 14919 timeout = (0,_shared_utils_mjs__WEBPACK_IMPORTED_MODULE_1__.n)(() => { 14920 const snapToThreshold = 0.5; 14921 lastEventBeforeSnap = newEvent; 14922 recentWheelEvents.splice(0); 14923 swiper.slideToClosest(swiper.params.speed, true, undefined, snapToThreshold); 14924 }, 500); 14925 } 14926 } 14927 14928 // Emit event 14929 if (!ignoreWheelEvents) emit('scroll', e); 14930 14931 // Stop autoplay 14932 if (swiper.params.autoplay && swiper.params.autoplayDisableOnInteraction) swiper.autoplay.stop(); 14933 // Return page scroll on edge positions 14934 if (params.releaseOnEdges && (position === swiper.minTranslate() || position === swiper.maxTranslate())) { 14935 return true; 14936 } 14937 } 14938 } 14939 if (e.preventDefault) e.preventDefault();else e.returnValue = false; 14940 return false; 14941 } 14942 function events(method) { 14943 let targetEl = swiper.el; 14944 if (swiper.params.mousewheel.eventsTarget !== 'container') { 14945 targetEl = document.querySelector(swiper.params.mousewheel.eventsTarget); 14946 } 14947 targetEl[method]('mouseenter', handleMouseEnter); 14948 targetEl[method]('mouseleave', handleMouseLeave); 14949 targetEl[method]('wheel', handle); 14950 } 14951 function enable() { 14952 if (swiper.params.cssMode) { 14953 swiper.wrapperEl.removeEventListener('wheel', handle); 14954 return true; 14955 } 14956 if (swiper.mousewheel.enabled) return false; 14957 events('addEventListener'); 14958 swiper.mousewheel.enabled = true; 14959 return true; 14960 } 14961 function disable() { 14962 if (swiper.params.cssMode) { 14963 swiper.wrapperEl.addEventListener(event, handle); 14964 return true; 14965 } 14966 if (!swiper.mousewheel.enabled) return false; 14967 events('removeEventListener'); 14968 swiper.mousewheel.enabled = false; 14969 return true; 14970 } 14971 on('init', () => { 14972 if (!swiper.params.mousewheel.enabled && swiper.params.cssMode) { 14973 disable(); 14974 } 14975 if (swiper.params.mousewheel.enabled) enable(); 14976 }); 14977 on('destroy', () => { 14978 if (swiper.params.cssMode) { 14979 enable(); 14980 } 14981 if (swiper.mousewheel.enabled) disable(); 14982 }); 14983 Object.assign(swiper.mousewheel, { 14984 enable, 14985 disable 14986 }); 14987} 14988 14989 14990 14991 14992/***/ }), 14993
vendor: 6,636 bytes, lines 14994-15200
14994/***/ "./node_modules/swiper/modules/navigation.mjs": 14995/*!****************************************************!*\ 14996 !*** ./node_modules/swiper/modules/navigation.mjs ***! 14997 \****************************************************/ 14998/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { 14999 15000"use strict"; 15001__webpack_require__.r(__webpack_exports__); 15002/* harmony export */ __webpack_require__.d(__webpack_exports__, { 15003/* harmony export */ "default": () => (/* binding */ Navigation) 15004/* harmony export */ }); 15005/* harmony import */ var _shared_create_element_if_not_defined_mjs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../shared/create-element-if-not-defined.mjs */ "./node_modules/swiper/shared/create-element-if-not-defined.mjs"); 15006 15007 15008function Navigation(_ref) { 15009 let { 15010 swiper, 15011 extendParams, 15012 on, 15013 emit 15014 } = _ref; 15015 extendParams({ 15016 navigation: { 15017 nextEl: null, 15018 prevEl: null, 15019 hideOnClick: false, 15020 disabledClass: 'swiper-button-disabled', 15021 hiddenClass: 'swiper-button-hidden', 15022 lockClass: 'swiper-button-lock', 15023 navigationDisabledClass: 'swiper-navigation-disabled' 15024 } 15025 }); 15026 swiper.navigation = { 15027 nextEl: null, 15028 prevEl: null 15029 }; 15030 const makeElementsArray = el => (Array.isArray(el) ? el : [el]).filter(e => !!e); 15031 function getEl(el) { 15032 let res; 15033 if (el && typeof el === 'string' && swiper.isElement) { 15034 res = swiper.el.querySelector(el); 15035 if (res) return res; 15036 } 15037 if (el) { 15038 if (typeof el === 'string') res = [...document.querySelectorAll(el)]; 15039 if (swiper.params.uniqueNavElements && typeof el === 'string' && res.length > 1 && swiper.el.querySelectorAll(el).length === 1) { 15040 res = swiper.el.querySelector(el); 15041 } 15042 } 15043 if (el && !res) return el; 15044 // if (Array.isArray(res) && res.length === 1) res = res[0]; 15045 return res; 15046 } 15047 function toggleEl(el, disabled) { 15048 const params = swiper.params.navigation; 15049 el = makeElementsArray(el); 15050 el.forEach(subEl => { 15051 if (subEl) { 15052 subEl.classList[disabled ? 'add' : 'remove'](...params.disabledClass.split(' ')); 15053 if (subEl.tagName === 'BUTTON') subEl.disabled = disabled; 15054 if (swiper.params.watchOverflow && swiper.enabled) { 15055 subEl.classList[swiper.isLocked ? 'add' : 'remove'](params.lockClass); 15056 } 15057 } 15058 }); 15059 } 15060 function update() { 15061 // Update Navigation Buttons 15062 const { 15063 nextEl, 15064 prevEl 15065 } = swiper.navigation; 15066 if (swiper.params.loop) { 15067 toggleEl(prevEl, false); 15068 toggleEl(nextEl, false); 15069 return; 15070 } 15071 toggleEl(prevEl, swiper.isBeginning && !swiper.params.rewind); 15072 toggleEl(nextEl, swiper.isEnd && !swiper.params.rewind); 15073 } 15074 function onPrevClick(e) { 15075 e.preventDefault(); 15076 if (swiper.isBeginning && !swiper.params.loop && !swiper.params.rewind) return; 15077 swiper.slidePrev(); 15078 emit('navigationPrev'); 15079 } 15080 function onNextClick(e) { 15081 e.preventDefault(); 15082 if (swiper.isEnd && !swiper.params.loop && !swiper.params.rewind) return; 15083 swiper.slideNext(); 15084 emit('navigationNext'); 15085 } 15086 function init() { 15087 const params = swiper.params.navigation; 15088 swiper.params.navigation = (0,_shared_create_element_if_not_defined_mjs__WEBPACK_IMPORTED_MODULE_0__.c)(swiper, swiper.originalParams.navigation, swiper.params.navigation, { 15089 nextEl: 'swiper-button-next', 15090 prevEl: 'swiper-button-prev' 15091 }); 15092 if (!(params.nextEl || params.prevEl)) return; 15093 let nextEl = getEl(params.nextEl); 15094 let prevEl = getEl(params.prevEl); 15095 Object.assign(swiper.navigation, { 15096 nextEl, 15097 prevEl 15098 }); 15099 nextEl = makeElementsArray(nextEl); 15100 prevEl = makeElementsArray(prevEl); 15101 const initButton = (el, dir) => { 15102 if (el) { 15103 el.addEventListener('click', dir === 'next' ? onNextClick : onPrevClick); 15104 } 15105 if (!swiper.enabled && el) { 15106 el.classList.add(...params.lockClass.split(' ')); 15107 } 15108 }; 15109 nextEl.forEach(el => initButton(el, 'next')); 15110 prevEl.forEach(el => initButton(el, 'prev')); 15111 } 15112 function destroy() { 15113 let { 15114 nextEl, 15115 prevEl 15116 } = swiper.navigation; 15117 nextEl = makeElementsArray(nextEl); 15118 prevEl = makeElementsArray(prevEl); 15119 const destroyButton = (el, dir) => { 15120 el.removeEventListener('click', dir === 'next' ? onNextClick : onPrevClick); 15121 el.classList.remove(...swiper.params.navigation.disabledClass.split(' ')); 15122 }; 15123 nextEl.forEach(el => destroyButton(el, 'next')); 15124 prevEl.forEach(el => destroyButton(el, 'prev')); 15125 } 15126 on('init', () => { 15127 if (swiper.params.navigation.enabled === false) { 15128 // eslint-disable-next-line 15129 disable(); 15130 } else { 15131 init(); 15132 update(); 15133 } 15134 }); 15135 on('toEdge fromEdge lock unlock', () => { 15136 update(); 15137 }); 15138 on('destroy', () => { 15139 destroy(); 15140 }); 15141 on('enable disable', () => { 15142 let { 15143 nextEl, 15144 prevEl 15145 } = swiper.navigation; 15146 nextEl = makeElementsArray(nextEl); 15147 prevEl = makeElementsArray(prevEl); 15148 if (swiper.enabled) { 15149 update(); 15150 return; 15151 } 15152 [...nextEl, ...prevEl].filter(el => !!el).forEach(el => el.classList.add(swiper.params.navigation.lockClass)); 15153 }); 15154 on('click', (_s, e) => { 15155 let { 15156 nextEl, 15157 prevEl 15158 } = swiper.navigation; 15159 nextEl = makeElementsArray(nextEl); 15160 prevEl = makeElementsArray(prevEl); 15161 const targetEl = e.target; 15162 if (swiper.params.navigation.hideOnClick && !prevEl.includes(targetEl) && !nextEl.includes(targetEl)) { 15163 if (swiper.pagination && swiper.params.pagination && swiper.params.pagination.clickable && (swiper.pagination.el === targetEl || swiper.pagination.el.contains(targetEl))) return; 15164 let isHidden; 15165 if (nextEl.length) { 15166 isHidden = nextEl[0].classList.contains(swiper.params.navigation.hiddenClass); 15167 } else if (prevEl.length) { 15168 isHidden = prevEl[0].classList.contains(swiper.params.navigation.hiddenClass); 15169 } 15170 if (isHidden === true) { 15171 emit('navigationShow'); 15172 } else { 15173 emit('navigationHide'); 15174 } 15175 [...nextEl, ...prevEl].filter(el => !!el).forEach(el => el.classList.toggle(swiper.params.navigation.hiddenClass)); 15176 } 15177 }); 15178 const enable = () => { 15179 swiper.el.classList.remove(...swiper.params.navigation.navigationDisabledClass.split(' ')); 15180 init(); 15181 update(); 15182 }; 15183 const disable = () => { 15184 swiper.el.classList.add(...swiper.params.navigation.navigationDisabledClass.split(' ')); 15185 destroy(); 15186 }; 15187 Object.assign(swiper.navigation, { 15188 enable, 15189 disable, 15190 update, 15191 init, 15192 destroy 15193 }); 15194} 15195 15196 15197 15198 15199/***/ }), 15200
vendor: 18,277 bytes, lines 15201-15662
15201/***/ "./node_modules/swiper/modules/pagination.mjs": 15202/*!****************************************************!*\ 15203 !*** ./node_modules/swiper/modules/pagination.mjs ***! 15204 \****************************************************/ 15205/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { 15206 15207"use strict"; 15208__webpack_require__.r(__webpack_exports__); 15209/* harmony export */ __webpack_require__.d(__webpack_exports__, { 15210/* harmony export */ "default": () => (/* binding */ Pagination) 15211/* harmony export */ }); 15212/* harmony import */ var _shared_classes_to_selector_mjs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../shared/classes-to-selector.mjs */ "./node_modules/swiper/shared/classes-to-selector.mjs"); 15213/* harmony import */ var _shared_create_element_if_not_defined_mjs__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../shared/create-element-if-not-defined.mjs */ "./node_modules/swiper/shared/create-element-if-not-defined.mjs"); 15214/* harmony import */ var _shared_utils_mjs__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../shared/utils.mjs */ "./node_modules/swiper/shared/utils.mjs"); 15215 15216 15217 15218 15219function Pagination(_ref) { 15220 let { 15221 swiper, 15222 extendParams, 15223 on, 15224 emit 15225 } = _ref; 15226 const pfx = 'swiper-pagination'; 15227 extendParams({ 15228 pagination: { 15229 el: null, 15230 bulletElement: 'span', 15231 clickable: false, 15232 hideOnClick: false, 15233 renderBullet: null, 15234 renderProgressbar: null, 15235 renderFraction: null, 15236 renderCustom: null, 15237 progressbarOpposite: false, 15238 type: 'bullets', 15239 // 'bullets' or 'progressbar' or 'fraction' or 'custom' 15240 dynamicBullets: false, 15241 dynamicMainBullets: 1, 15242 formatFractionCurrent: number => number, 15243 formatFractionTotal: number => number, 15244 bulletClass: `${pfx}-bullet`, 15245 bulletActiveClass: `${pfx}-bullet-active`, 15246 modifierClass: `${pfx}-`, 15247 currentClass: `${pfx}-current`, 15248 totalClass: `${pfx}-total`, 15249 hiddenClass: `${pfx}-hidden`, 15250 progressbarFillClass: `${pfx}-progressbar-fill`, 15251 progressbarOppositeClass: `${pfx}-progressbar-opposite`, 15252 clickableClass: `${pfx}-clickable`, 15253 lockClass: `${pfx}-lock`, 15254 horizontalClass: `${pfx}-horizontal`, 15255 verticalClass: `${pfx}-vertical`, 15256 paginationDisabledClass: `${pfx}-disabled` 15257 } 15258 }); 15259 swiper.pagination = { 15260 el: null, 15261 bullets: [] 15262 }; 15263 let bulletSize; 15264 let dynamicBulletIndex = 0; 15265 const makeElementsArray = el => (Array.isArray(el) ? el : [el]).filter(e => !!e); 15266 function isPaginationDisabled() { 15267 return !swiper.params.pagination.el || !swiper.pagination.el || Array.isArray(swiper.pagination.el) && swiper.pagination.el.length === 0; 15268 } 15269 function setSideBullets(bulletEl, position) { 15270 const { 15271 bulletActiveClass 15272 } = swiper.params.pagination; 15273 if (!bulletEl) return; 15274 bulletEl = bulletEl[`${position === 'prev' ? 'previous' : 'next'}ElementSibling`]; 15275 if (bulletEl) { 15276 bulletEl.classList.add(`${bulletActiveClass}-${position}`); 15277 bulletEl = bulletEl[`${position === 'prev' ? 'previous' : 'next'}ElementSibling`]; 15278 if (bulletEl) { 15279 bulletEl.classList.add(`${bulletActiveClass}-${position}-${position}`); 15280 } 15281 } 15282 } 15283 function onBulletClick(e) { 15284 const bulletEl = e.target.closest((0,_shared_classes_to_selector_mjs__WEBPACK_IMPORTED_MODULE_0__.c)(swiper.params.pagination.bulletClass)); 15285 if (!bulletEl) { 15286 return; 15287 } 15288 e.preventDefault(); 15289 const index = (0,_shared_utils_mjs__WEBPACK_IMPORTED_MODULE_2__.g)(bulletEl) * swiper.params.slidesPerGroup; 15290 if (swiper.params.loop) { 15291 if (swiper.realIndex === index) return; 15292 swiper.slideToLoop(index); 15293 } else { 15294 swiper.slideTo(index); 15295 } 15296 } 15297 function update() { 15298 // Render || Update Pagination bullets/items 15299 const rtl = swiper.rtl; 15300 const params = swiper.params.pagination; 15301 if (isPaginationDisabled()) return; 15302 let el = swiper.pagination.el; 15303 el = makeElementsArray(el); 15304 // Current/Total 15305 let current; 15306 let previousIndex; 15307 const slidesLength = swiper.virtual && swiper.params.virtual.enabled ? swiper.virtual.slides.length : swiper.slides.length; 15308 const total = swiper.params.loop ? Math.ceil(slidesLength / swiper.params.slidesPerGroup) : swiper.snapGrid.length; 15309 if (swiper.params.loop) { 15310 previousIndex = swiper.previousRealIndex || 0; 15311 current = swiper.params.slidesPerGroup > 1 ? Math.floor(swiper.realIndex / swiper.params.slidesPerGroup) : swiper.realIndex; 15312 } else if (typeof swiper.snapIndex !== 'undefined') { 15313 current = swiper.snapIndex; 15314 previousIndex = swiper.previousSnapIndex; 15315 } else { 15316 previousIndex = swiper.previousIndex || 0; 15317 current = swiper.activeIndex || 0; 15318 } 15319 // Types 15320 if (params.type === 'bullets' && swiper.pagination.bullets && swiper.pagination.bullets.length > 0) { 15321 const bullets = swiper.pagination.bullets; 15322 let firstIndex; 15323 let lastIndex; 15324 let midIndex; 15325 if (params.dynamicBullets) { 15326 bulletSize = (0,_shared_utils_mjs__WEBPACK_IMPORTED_MODULE_2__.f)(bullets[0], swiper.isHorizontal() ? 'width' : 'height', true); 15327 el.forEach(subEl => { 15328 subEl.style[swiper.isHorizontal() ? 'width' : 'height'] = `${bulletSize * (params.dynamicMainBullets + 4)}px`; 15329 }); 15330 if (params.dynamicMainBullets > 1 && previousIndex !== undefined) { 15331 dynamicBulletIndex += current - (previousIndex || 0); 15332 if (dynamicBulletIndex > params.dynamicMainBullets - 1) { 15333 dynamicBulletIndex = params.dynamicMainBullets - 1; 15334 } else if (dynamicBulletIndex < 0) { 15335 dynamicBulletIndex = 0; 15336 } 15337 } 15338 firstIndex = Math.max(current - dynamicBulletIndex, 0); 15339 lastIndex = firstIndex + (Math.min(bullets.length, params.dynamicMainBullets) - 1); 15340 midIndex = (lastIndex + firstIndex) / 2; 15341 } 15342 bullets.forEach(bulletEl => { 15343 const classesToRemove = [...['', '-next', '-next-next', '-prev', '-prev-prev', '-main'].map(suffix => `${params.bulletActiveClass}${suffix}`)].map(s => typeof s === 'string' && s.includes(' ') ? s.split(' ') : s).flat(); 15344 bulletEl.classList.remove(...classesToRemove); 15345 }); 15346 if (el.length > 1) { 15347 bullets.forEach(bullet => { 15348 const bulletIndex = (0,_shared_utils_mjs__WEBPACK_IMPORTED_MODULE_2__.g)(bullet); 15349 if (bulletIndex === current) { 15350 bullet.classList.add(...params.bulletActiveClass.split(' ')); 15351 } else if (swiper.isElement) { 15352 bullet.setAttribute('part', 'bullet'); 15353 } 15354 if (params.dynamicBullets) { 15355 if (bulletIndex >= firstIndex && bulletIndex <= lastIndex) { 15356 bullet.classList.add(...`${params.bulletActiveClass}-main`.split(' ')); 15357 } 15358 if (bulletIndex === firstIndex) { 15359 setSideBullets(bullet, 'prev'); 15360 } 15361 if (bulletIndex === lastIndex) { 15362 setSideBullets(bullet, 'next'); 15363 } 15364 } 15365 }); 15366 } else { 15367 const bullet = bullets[current]; 15368 if (bullet) { 15369 bullet.classList.add(...params.bulletActiveClass.split(' ')); 15370 } 15371 if (swiper.isElement) { 15372 bullets.forEach((bulletEl, bulletIndex) => { 15373 bulletEl.setAttribute('part', bulletIndex === current ? 'bullet-active' : 'bullet'); 15374 }); 15375 } 15376 if (params.dynamicBullets) { 15377 const firstDisplayedBullet = bullets[firstIndex]; 15378 const lastDisplayedBullet = bullets[lastIndex]; 15379 for (let i = firstIndex; i <= lastIndex; i += 1) { 15380 if (bullets[i]) { 15381 bullets[i].classList.add(...`${params.bulletActiveClass}-main`.split(' ')); 15382 } 15383 } 15384 setSideBullets(firstDisplayedBullet, 'prev'); 15385 setSideBullets(lastDisplayedBullet, 'next'); 15386 } 15387 } 15388 if (params.dynamicBullets) { 15389 const dynamicBulletsLength = Math.min(bullets.length, params.dynamicMainBullets + 4); 15390 const bulletsOffset = (bulletSize * dynamicBulletsLength - bulletSize) / 2 - midIndex * bulletSize; 15391 const offsetProp = rtl ? 'right' : 'left'; 15392 bullets.forEach(bullet => { 15393 bullet.style[swiper.isHorizontal() ? offsetProp : 'top'] = `${bulletsOffset}px`; 15394 }); 15395 } 15396 } 15397 el.forEach((subEl, subElIndex) => { 15398 if (params.type === 'fraction') { 15399 subEl.querySelectorAll((0,_shared_classes_to_selector_mjs__WEBPACK_IMPORTED_MODULE_0__.c)(params.currentClass)).forEach(fractionEl => { 15400 fractionEl.textContent = params.formatFractionCurrent(current + 1); 15401 }); 15402 subEl.querySelectorAll((0,_shared_classes_to_selector_mjs__WEBPACK_IMPORTED_MODULE_0__.c)(params.totalClass)).forEach(totalEl => { 15403 totalEl.textContent = params.formatFractionTotal(total); 15404 }); 15405 } 15406 if (params.type === 'progressbar') { 15407 let progressbarDirection; 15408 if (params.progressbarOpposite) { 15409 progressbarDirection = swiper.isHorizontal() ? 'vertical' : 'horizontal'; 15410 } else { 15411 progressbarDirection = swiper.isHorizontal() ? 'horizontal' : 'vertical'; 15412 } 15413 const scale = (current + 1) / total; 15414 let scaleX = 1; 15415 let scaleY = 1; 15416 if (progressbarDirection === 'horizontal') { 15417 scaleX = scale; 15418 } else { 15419 scaleY = scale; 15420 } 15421 subEl.querySelectorAll((0,_shared_classes_to_selector_mjs__WEBPACK_IMPORTED_MODULE_0__.c)(params.progressbarFillClass)).forEach(progressEl => { 15422 progressEl.style.transform = `translate3d(0,0,0) scaleX(${scaleX}) scaleY(${scaleY})`; 15423 progressEl.style.transitionDuration = `${swiper.params.speed}ms`; 15424 }); 15425 } 15426 if (params.type === 'custom' && params.renderCustom) { 15427 subEl.innerHTML = params.renderCustom(swiper, current + 1, total); 15428 if (subElIndex === 0) emit('paginationRender', subEl); 15429 } else { 15430 if (subElIndex === 0) emit('paginationRender', subEl); 15431 emit('paginationUpdate', subEl); 15432 } 15433 if (swiper.params.watchOverflow && swiper.enabled) { 15434 subEl.classList[swiper.isLocked ? 'add' : 'remove'](params.lockClass); 15435 } 15436 }); 15437 } 15438 function render() { 15439 // Render Container 15440 const params = swiper.params.pagination; 15441 if (isPaginationDisabled()) return; 15442 const slidesLength = swiper.virtual && swiper.params.virtual.enabled ? swiper.virtual.slides.length : swiper.grid && swiper.params.grid.rows > 1 ? swiper.slides.length / Math.ceil(swiper.params.grid.rows) : swiper.slides.length; 15443 let el = swiper.pagination.el; 15444 el = makeElementsArray(el); 15445 let paginationHTML = ''; 15446 if (params.type === 'bullets') { 15447 let numberOfBullets = swiper.params.loop ? Math.ceil(slidesLength / swiper.params.slidesPerGroup) : swiper.snapGrid.length; 15448 if (swiper.params.freeMode && swiper.params.freeMode.enabled && numberOfBullets > slidesLength) { 15449 numberOfBullets = slidesLength; 15450 } 15451 for (let i = 0; i < numberOfBullets; i += 1) { 15452 if (params.renderBullet) { 15453 paginationHTML += params.renderBullet.call(swiper, i, params.bulletClass); 15454 } else { 15455 // prettier-ignore 15456 paginationHTML += `<${params.bulletElement} ${swiper.isElement ? 'part="bullet"' : ''} class="${params.bulletClass}"></${params.bulletElement}>`; 15457 } 15458 } 15459 } 15460 if (params.type === 'fraction') { 15461 if (params.renderFraction) { 15462 paginationHTML = params.renderFraction.call(swiper, params.currentClass, params.totalClass); 15463 } else { 15464 paginationHTML = `<span class="${params.currentClass}"></span>` + ' / ' + `<span class="${params.totalClass}"></span>`; 15465 } 15466 } 15467 if (params.type === 'progressbar') { 15468 if (params.renderProgressbar) { 15469 paginationHTML = params.renderProgressbar.call(swiper, params.progressbarFillClass); 15470 } else { 15471 paginationHTML = `<span class="${params.progressbarFillClass}"></span>`; 15472 } 15473 } 15474 swiper.pagination.bullets = []; 15475 el.forEach(subEl => { 15476 if (params.type !== 'custom') { 15477 subEl.innerHTML = paginationHTML || ''; 15478 } 15479 if (params.type === 'bullets') { 15480 swiper.pagination.bullets.push(...subEl.querySelectorAll((0,_shared_classes_to_selector_mjs__WEBPACK_IMPORTED_MODULE_0__.c)(params.bulletClass))); 15481 } 15482 }); 15483 if (params.type !== 'custom') { 15484 emit('paginationRender', el[0]); 15485 } 15486 } 15487 function init() { 15488 swiper.params.pagination = (0,_shared_create_element_if_not_defined_mjs__WEBPACK_IMPORTED_MODULE_1__.c)(swiper, swiper.originalParams.pagination, swiper.params.pagination, { 15489 el: 'swiper-pagination' 15490 }); 15491 const params = swiper.params.pagination; 15492 if (!params.el) return; 15493 let el; 15494 if (typeof params.el === 'string' && swiper.isElement) { 15495 el = swiper.el.querySelector(params.el); 15496 } 15497 if (!el && typeof params.el === 'string') { 15498 el = [...document.querySelectorAll(params.el)]; 15499 } 15500 if (!el) { 15501 el = params.el; 15502 } 15503 if (!el || el.length === 0) return; 15504 if (swiper.params.uniqueNavElements && typeof params.el === 'string' && Array.isArray(el) && el.length > 1) { 15505 el = [...swiper.el.querySelectorAll(params.el)]; 15506 // check if it belongs to another nested Swiper 15507 if (el.length > 1) { 15508 el = el.filter(subEl => { 15509 if ((0,_shared_utils_mjs__WEBPACK_IMPORTED_MODULE_2__.a)(subEl, '.swiper')[0] !== swiper.el) return false; 15510 return true; 15511 })[0]; 15512 } 15513 } 15514 if (Array.isArray(el) && el.length === 1) el = el[0]; 15515 Object.assign(swiper.pagination, { 15516 el 15517 }); 15518 el = makeElementsArray(el); 15519 el.forEach(subEl => { 15520 if (params.type === 'bullets' && params.clickable) { 15521 subEl.classList.add(...(params.clickableClass || '').split(' ')); 15522 } 15523 subEl.classList.add(params.modifierClass + params.type); 15524 subEl.classList.add(swiper.isHorizontal() ? params.horizontalClass : params.verticalClass); 15525 if (params.type === 'bullets' && params.dynamicBullets) { 15526 subEl.classList.add(`${params.modifierClass}${params.type}-dynamic`); 15527 dynamicBulletIndex = 0; 15528 if (params.dynamicMainBullets < 1) { 15529 params.dynamicMainBullets = 1; 15530 } 15531 } 15532 if (params.type === 'progressbar' && params.progressbarOpposite) { 15533 subEl.classList.add(params.progressbarOppositeClass); 15534 } 15535 if (params.clickable) { 15536 subEl.addEventListener('click', onBulletClick); 15537 } 15538 if (!swiper.enabled) { 15539 subEl.classList.add(params.lockClass); 15540 } 15541 }); 15542 } 15543 function destroy() { 15544 const params = swiper.params.pagination; 15545 if (isPaginationDisabled()) return; 15546 let el = swiper.pagination.el; 15547 if (el) { 15548 el = makeElementsArray(el); 15549 el.forEach(subEl => { 15550 subEl.classList.remove(params.hiddenClass); 15551 subEl.classList.remove(params.modifierClass + params.type); 15552 subEl.classList.remove(swiper.isHorizontal() ? params.horizontalClass : params.verticalClass); 15553 if (params.clickable) { 15554 subEl.classList.remove(...(params.clickableClass || '').split(' ')); 15555 subEl.removeEventListener('click', onBulletClick); 15556 } 15557 }); 15558 } 15559 if (swiper.pagination.bullets) swiper.pagination.bullets.forEach(subEl => subEl.classList.remove(...params.bulletActiveClass.split(' '))); 15560 } 15561 on('changeDirection', () => { 15562 if (!swiper.pagination || !swiper.pagination.el) return; 15563 const params = swiper.params.pagination; 15564 let { 15565 el 15566 } = swiper.pagination; 15567 el = makeElementsArray(el); 15568 el.forEach(subEl => { 15569 subEl.classList.remove(params.horizontalClass, params.verticalClass); 15570 subEl.classList.add(swiper.isHorizontal() ? params.horizontalClass : params.verticalClass); 15571 }); 15572 }); 15573 on('init', () => { 15574 if (swiper.params.pagination.enabled === false) { 15575 // eslint-disable-next-line 15576 disable(); 15577 } else { 15578 init(); 15579 render(); 15580 update(); 15581 } 15582 }); 15583 on('activeIndexChange', () => { 15584 if (typeof swiper.snapIndex === 'undefined') { 15585 update(); 15586 } 15587 }); 15588 on('snapIndexChange', () => { 15589 update(); 15590 }); 15591 on('snapGridLengthChange', () => { 15592 render(); 15593 update(); 15594 }); 15595 on('destroy', () => { 15596 destroy(); 15597 }); 15598 on('enable disable', () => { 15599 let { 15600 el 15601 } = swiper.pagination; 15602 if (el) { 15603 el = makeElementsArray(el); 15604 el.forEach(subEl => subEl.classList[swiper.enabled ? 'remove' : 'add'](swiper.params.pagination.lockClass)); 15605 } 15606 }); 15607 on('lock unlock', () => { 15608 update(); 15609 }); 15610 on('click', (_s, e) => { 15611 const targetEl = e.target; 15612 const el = makeElementsArray(swiper.pagination.el); 15613 if (swiper.params.pagination.el && swiper.params.pagination.hideOnClick && el && el.length > 0 && !targetEl.classList.contains(swiper.params.pagination.bulletClass)) { 15614 if (swiper.navigation && (swiper.navigation.nextEl && targetEl === swiper.navigation.nextEl || swiper.navigation.prevEl && targetEl === swiper.navigation.prevEl)) return; 15615 const isHidden = el[0].classList.contains(swiper.params.pagination.hiddenClass); 15616 if (isHidden === true) { 15617 emit('paginationShow'); 15618 } else { 15619 emit('paginationHide'); 15620 } 15621 el.forEach(subEl => subEl.classList.toggle(swiper.params.pagination.hiddenClass)); 15622 } 15623 }); 15624 const enable = () => { 15625 swiper.el.classList.remove(swiper.params.pagination.paginationDisabledClass); 15626 let { 15627 el 15628 } = swiper.pagination; 15629 if (el) { 15630 el = makeElementsArray(el); 15631 el.forEach(subEl => subEl.classList.remove(swiper.params.pagination.paginationDisabledClass)); 15632 } 15633 init(); 15634 render(); 15635 update(); 15636 }; 15637 const disable = () => { 15638 swiper.el.classList.add(swiper.params.pagination.paginationDisabledClass); 15639 let { 15640 el 15641 } = swiper.pagination; 15642 if (el) { 15643 el = makeElementsArray(el); 15644 el.forEach(subEl => subEl.classList.add(swiper.params.pagination.paginationDisabledClass)); 15645 } 15646 destroy(); 15647 }; 15648 Object.assign(swiper.pagination, { 15649 enable, 15650 disable, 15651 render, 15652 update, 15653 init, 15654 destroy 15655 }); 15656} 15657 15658 15659 15660 15661/***/ }), 15662
vendor: 4,698 bytes, lines 15663-15802
15663/***/ "./node_modules/swiper/modules/parallax.mjs": 15664/*!**************************************************!*\ 15665 !*** ./node_modules/swiper/modules/parallax.mjs ***! 15666 \**************************************************/ 15667/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { 15668 15669"use strict"; 15670__webpack_require__.r(__webpack_exports__); 15671/* harmony export */ __webpack_require__.d(__webpack_exports__, { 15672/* harmony export */ "default": () => (/* binding */ Parallax) 15673/* harmony export */ }); 15674/* harmony import */ var _shared_utils_mjs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../shared/utils.mjs */ "./node_modules/swiper/shared/utils.mjs"); 15675 15676 15677function Parallax(_ref) { 15678 let { 15679 swiper, 15680 extendParams, 15681 on 15682 } = _ref; 15683 extendParams({ 15684 parallax: { 15685 enabled: false 15686 } 15687 }); 15688 const elementsSelector = '[data-swiper-parallax], [data-swiper-parallax-x], [data-swiper-parallax-y], [data-swiper-parallax-opacity], [data-swiper-parallax-scale]'; 15689 const setTransform = (el, progress) => { 15690 const { 15691 rtl 15692 } = swiper; 15693 const rtlFactor = rtl ? -1 : 1; 15694 const p = el.getAttribute('data-swiper-parallax') || '0'; 15695 let x = el.getAttribute('data-swiper-parallax-x'); 15696 let y = el.getAttribute('data-swiper-parallax-y'); 15697 const scale = el.getAttribute('data-swiper-parallax-scale'); 15698 const opacity = el.getAttribute('data-swiper-parallax-opacity'); 15699 const rotate = el.getAttribute('data-swiper-parallax-rotate'); 15700 if (x || y) { 15701 x = x || '0'; 15702 y = y || '0'; 15703 } else if (swiper.isHorizontal()) { 15704 x = p; 15705 y = '0'; 15706 } else { 15707 y = p; 15708 x = '0'; 15709 } 15710 if (x.indexOf('%') >= 0) { 15711 x = `${parseInt(x, 10) * progress * rtlFactor}%`; 15712 } else { 15713 x = `${x * progress * rtlFactor}px`; 15714 } 15715 if (y.indexOf('%') >= 0) { 15716 y = `${parseInt(y, 10) * progress}%`; 15717 } else { 15718 y = `${y * progress}px`; 15719 } 15720 if (typeof opacity !== 'undefined' && opacity !== null) { 15721 const currentOpacity = opacity - (opacity - 1) * (1 - Math.abs(progress)); 15722 el.style.opacity = currentOpacity; 15723 } 15724 let transform = `translate3d(${x}, ${y}, 0px)`; 15725 if (typeof scale !== 'undefined' && scale !== null) { 15726 const currentScale = scale - (scale - 1) * (1 - Math.abs(progress)); 15727 transform += ` scale(${currentScale})`; 15728 } 15729 if (rotate && typeof rotate !== 'undefined' && rotate !== null) { 15730 const currentRotate = rotate * progress * -1; 15731 transform += ` rotate(${currentRotate}deg)`; 15732 } 15733 el.style.transform = transform; 15734 }; 15735 const setTranslate = () => { 15736 const { 15737 el, 15738 slides, 15739 progress, 15740 snapGrid, 15741 isElement 15742 } = swiper; 15743 const elements = (0,_shared_utils_mjs__WEBPACK_IMPORTED_MODULE_0__.e)(el, elementsSelector); 15744 if (swiper.isElement) { 15745 elements.push(...(0,_shared_utils_mjs__WEBPACK_IMPORTED_MODULE_0__.e)(swiper.hostEl, elementsSelector)); 15746 } 15747 elements.forEach(subEl => { 15748 setTransform(subEl, progress); 15749 }); 15750 slides.forEach((slideEl, slideIndex) => { 15751 let slideProgress = slideEl.progress; 15752 if (swiper.params.slidesPerGroup > 1 && swiper.params.slidesPerView !== 'auto') { 15753 slideProgress += Math.ceil(slideIndex / 2) - progress * (snapGrid.length - 1); 15754 } 15755 slideProgress = Math.min(Math.max(slideProgress, -1), 1); 15756 slideEl.querySelectorAll(`${elementsSelector}, [data-swiper-parallax-rotate]`).forEach(subEl => { 15757 setTransform(subEl, slideProgress); 15758 }); 15759 }); 15760 }; 15761 const setTransition = function (duration) { 15762 if (duration === void 0) { 15763 duration = swiper.params.speed; 15764 } 15765 const { 15766 el, 15767 hostEl 15768 } = swiper; 15769 const elements = [...el.querySelectorAll(elementsSelector)]; 15770 if (swiper.isElement) { 15771 elements.push(...hostEl.querySelectorAll(elementsSelector)); 15772 } 15773 elements.forEach(parallaxEl => { 15774 let parallaxDuration = parseInt(parallaxEl.getAttribute('data-swiper-parallax-duration'), 10) || duration; 15775 if (duration === 0) parallaxDuration = 0; 15776 parallaxEl.style.transitionDuration = `${parallaxDuration}ms`; 15777 }); 15778 }; 15779 on('beforeInit', () => { 15780 if (!swiper.params.parallax.enabled) return; 15781 swiper.params.watchSlidesProgress = true; 15782 swiper.originalParams.watchSlidesProgress = true; 15783 }); 15784 on('init', () => { 15785 if (!swiper.params.parallax.enabled) return; 15786 setTranslate(); 15787 }); 15788 on('setTranslate', () => { 15789 if (!swiper.params.parallax.enabled) return; 15790 setTranslate(); 15791 }); 15792 on('setTransition', (_swiper, duration) => { 15793 if (!swiper.params.parallax.enabled) return; 15794 setTransition(duration); 15795 }); 15796} 15797 15798 15799 15800 15801/***/ }), 15802
vendor: 12,038 bytes, lines 15803-16175
15803/***/ "./node_modules/swiper/modules/scrollbar.mjs": 15804/*!***************************************************!*\ 15805 !*** ./node_modules/swiper/modules/scrollbar.mjs ***! 15806 \***************************************************/ 15807/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { 15808 15809"use strict"; 15810__webpack_require__.r(__webpack_exports__); 15811/* harmony export */ __webpack_require__.d(__webpack_exports__, { 15812/* harmony export */ "default": () => (/* binding */ Scrollbar) 15813/* harmony export */ }); 15814/* harmony import */ var _shared_ssr_window_esm_mjs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../shared/ssr-window.esm.mjs */ "./node_modules/swiper/shared/ssr-window.esm.mjs"); 15815/* harmony import */ var _shared_utils_mjs__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../shared/utils.mjs */ "./node_modules/swiper/shared/utils.mjs"); 15816/* harmony import */ var _shared_create_element_if_not_defined_mjs__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../shared/create-element-if-not-defined.mjs */ "./node_modules/swiper/shared/create-element-if-not-defined.mjs"); 15817/* harmony import */ var _shared_classes_to_selector_mjs__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../shared/classes-to-selector.mjs */ "./node_modules/swiper/shared/classes-to-selector.mjs"); 15818 15819 15820 15821 15822 15823function Scrollbar(_ref) { 15824 let { 15825 swiper, 15826 extendParams, 15827 on, 15828 emit 15829 } = _ref; 15830 const document = (0,_shared_ssr_window_esm_mjs__WEBPACK_IMPORTED_MODULE_0__.g)(); 15831 let isTouched = false; 15832 let timeout = null; 15833 let dragTimeout = null; 15834 let dragStartPos; 15835 let dragSize; 15836 let trackSize; 15837 let divider; 15838 extendParams({ 15839 scrollbar: { 15840 el: null, 15841 dragSize: 'auto', 15842 hide: false, 15843 draggable: false, 15844 snapOnRelease: true, 15845 lockClass: 'swiper-scrollbar-lock', 15846 dragClass: 'swiper-scrollbar-drag', 15847 scrollbarDisabledClass: 'swiper-scrollbar-disabled', 15848 horizontalClass: `swiper-scrollbar-horizontal`, 15849 verticalClass: `swiper-scrollbar-vertical` 15850 } 15851 }); 15852 swiper.scrollbar = { 15853 el: null, 15854 dragEl: null 15855 }; 15856 function setTranslate() { 15857 if (!swiper.params.scrollbar.el || !swiper.scrollbar.el) return; 15858 const { 15859 scrollbar, 15860 rtlTranslate: rtl 15861 } = swiper; 15862 const { 15863 dragEl, 15864 el 15865 } = scrollbar; 15866 const params = swiper.params.scrollbar; 15867 const progress = swiper.params.loop ? swiper.progressLoop : swiper.progress; 15868 let newSize = dragSize; 15869 let newPos = (trackSize - dragSize) * progress; 15870 if (rtl) { 15871 newPos = -newPos; 15872 if (newPos > 0) { 15873 newSize = dragSize - newPos; 15874 newPos = 0; 15875 } else if (-newPos + dragSize > trackSize) { 15876 newSize = trackSize + newPos; 15877 } 15878 } else if (newPos < 0) { 15879 newSize = dragSize + newPos; 15880 newPos = 0; 15881 } else if (newPos + dragSize > trackSize) { 15882 newSize = trackSize - newPos; 15883 } 15884 if (swiper.isHorizontal()) { 15885 dragEl.style.transform = `translate3d(${newPos}px, 0, 0)`; 15886 dragEl.style.width = `${newSize}px`; 15887 } else { 15888 dragEl.style.transform = `translate3d(0px, ${newPos}px, 0)`; 15889 dragEl.style.height = `${newSize}px`; 15890 } 15891 if (params.hide) { 15892 clearTimeout(timeout); 15893 el.style.opacity = 1; 15894 timeout = setTimeout(() => { 15895 el.style.opacity = 0; 15896 el.style.transitionDuration = '400ms'; 15897 }, 1000); 15898 } 15899 } 15900 function setTransition(duration) { 15901 if (!swiper.params.scrollbar.el || !swiper.scrollbar.el) return; 15902 swiper.scrollbar.dragEl.style.transitionDuration = `${duration}ms`; 15903 } 15904 function updateSize() { 15905 if (!swiper.params.scrollbar.el || !swiper.scrollbar.el) return; 15906 const { 15907 scrollbar 15908 } = swiper; 15909 const { 15910 dragEl, 15911 el 15912 } = scrollbar; 15913 dragEl.style.width = ''; 15914 dragEl.style.height = ''; 15915 trackSize = swiper.isHorizontal() ? el.offsetWidth : el.offsetHeight; 15916 divider = swiper.size / (swiper.virtualSize + swiper.params.slidesOffsetBefore - (swiper.params.centeredSlides ? swiper.snapGrid[0] : 0)); 15917 if (swiper.params.scrollbar.dragSize === 'auto') { 15918 dragSize = trackSize * divider; 15919 } else { 15920 dragSize = parseInt(swiper.params.scrollbar.dragSize, 10); 15921 } 15922 if (swiper.isHorizontal()) { 15923 dragEl.style.width = `${dragSize}px`; 15924 } else { 15925 dragEl.style.height = `${dragSize}px`; 15926 } 15927 if (divider >= 1) { 15928 el.style.display = 'none'; 15929 } else { 15930 el.style.display = ''; 15931 } 15932 if (swiper.params.scrollbar.hide) { 15933 el.style.opacity = 0; 15934 } 15935 if (swiper.params.watchOverflow && swiper.enabled) { 15936 scrollbar.el.classList[swiper.isLocked ? 'add' : 'remove'](swiper.params.scrollbar.lockClass); 15937 } 15938 } 15939 function getPointerPosition(e) { 15940 return swiper.isHorizontal() ? e.clientX : e.clientY; 15941 } 15942 function setDragPosition(e) { 15943 const { 15944 scrollbar, 15945 rtlTranslate: rtl 15946 } = swiper; 15947 const { 15948 el 15949 } = scrollbar; 15950 let positionRatio; 15951 positionRatio = (getPointerPosition(e) - (0,_shared_utils_mjs__WEBPACK_IMPORTED_MODULE_1__.b)(el)[swiper.isHorizontal() ? 'left' : 'top'] - (dragStartPos !== null ? dragStartPos : dragSize / 2)) / (trackSize - dragSize); 15952 positionRatio = Math.max(Math.min(positionRatio, 1), 0); 15953 if (rtl) { 15954 positionRatio = 1 - positionRatio; 15955 } 15956 const position = swiper.minTranslate() + (swiper.maxTranslate() - swiper.minTranslate()) * positionRatio; 15957 swiper.updateProgress(position); 15958 swiper.setTranslate(position); 15959 swiper.updateActiveIndex(); 15960 swiper.updateSlidesClasses(); 15961 } 15962 function onDragStart(e) { 15963 const params = swiper.params.scrollbar; 15964 const { 15965 scrollbar, 15966 wrapperEl 15967 } = swiper; 15968 const { 15969 el, 15970 dragEl 15971 } = scrollbar; 15972 isTouched = true; 15973 dragStartPos = e.target === dragEl ? getPointerPosition(e) - e.target.getBoundingClientRect()[swiper.isHorizontal() ? 'left' : 'top'] : null; 15974 e.preventDefault(); 15975 e.stopPropagation(); 15976 wrapperEl.style.transitionDuration = '100ms'; 15977 dragEl.style.transitionDuration = '100ms'; 15978 setDragPosition(e); 15979 clearTimeout(dragTimeout); 15980 el.style.transitionDuration = '0ms'; 15981 if (params.hide) { 15982 el.style.opacity = 1; 15983 } 15984 if (swiper.params.cssMode) { 15985 swiper.wrapperEl.style['scroll-snap-type'] = 'none'; 15986 } 15987 emit('scrollbarDragStart', e); 15988 } 15989 function onDragMove(e) { 15990 const { 15991 scrollbar, 15992 wrapperEl 15993 } = swiper; 15994 const { 15995 el, 15996 dragEl 15997 } = scrollbar; 15998 if (!isTouched) return; 15999 if (e.preventDefault) e.preventDefault();else e.returnValue = false; 16000 setDragPosition(e); 16001 wrapperEl.style.transitionDuration = '0ms'; 16002 el.style.transitionDuration = '0ms'; 16003 dragEl.style.transitionDuration = '0ms'; 16004 emit('scrollbarDragMove', e); 16005 } 16006 function onDragEnd(e) { 16007 const params = swiper.params.scrollbar; 16008 const { 16009 scrollbar, 16010 wrapperEl 16011 } = swiper; 16012 const { 16013 el 16014 } = scrollbar; 16015 if (!isTouched) return; 16016 isTouched = false; 16017 if (swiper.params.cssMode) { 16018 swiper.wrapperEl.style['scroll-snap-type'] = ''; 16019 wrapperEl.style.transitionDuration = ''; 16020 } 16021 if (params.hide) { 16022 clearTimeout(dragTimeout); 16023 dragTimeout = (0,_shared_utils_mjs__WEBPACK_IMPORTED_MODULE_1__.n)(() => { 16024 el.style.opacity = 0; 16025 el.style.transitionDuration = '400ms'; 16026 }, 1000); 16027 } 16028 emit('scrollbarDragEnd', e); 16029 if (params.snapOnRelease) { 16030 swiper.slideToClosest(); 16031 } 16032 } 16033 function events(method) { 16034 const { 16035 scrollbar, 16036 params 16037 } = swiper; 16038 const el = scrollbar.el; 16039 if (!el) return; 16040 const target = el; 16041 const activeListener = params.passiveListeners ? { 16042 passive: false, 16043 capture: false 16044 } : false; 16045 const passiveListener = params.passiveListeners ? { 16046 passive: true, 16047 capture: false 16048 } : false; 16049 if (!target) return; 16050 const eventMethod = method === 'on' ? 'addEventListener' : 'removeEventListener'; 16051 target[eventMethod]('pointerdown', onDragStart, activeListener); 16052 document[eventMethod]('pointermove', onDragMove, activeListener); 16053 document[eventMethod]('pointerup', onDragEnd, passiveListener); 16054 } 16055 function enableDraggable() { 16056 if (!swiper.params.scrollbar.el || !swiper.scrollbar.el) return; 16057 events('on'); 16058 } 16059 function disableDraggable() { 16060 if (!swiper.params.scrollbar.el || !swiper.scrollbar.el) return; 16061 events('off'); 16062 } 16063 function init() { 16064 const { 16065 scrollbar, 16066 el: swiperEl 16067 } = swiper; 16068 swiper.params.scrollbar = (0,_shared_create_element_if_not_defined_mjs__WEBPACK_IMPORTED_MODULE_2__.c)(swiper, swiper.originalParams.scrollbar, swiper.params.scrollbar, { 16069 el: 'swiper-scrollbar' 16070 }); 16071 const params = swiper.params.scrollbar; 16072 if (!params.el) return; 16073 let el; 16074 if (typeof params.el === 'string' && swiper.isElement) { 16075 el = swiper.el.querySelector(params.el); 16076 } 16077 if (!el && typeof params.el === 'string') { 16078 el = document.querySelectorAll(params.el); 16079 if (!el.length) return; 16080 } else if (!el) { 16081 el = params.el; 16082 } 16083 if (swiper.params.uniqueNavElements && typeof params.el === 'string' && el.length > 1 && swiperEl.querySelectorAll(params.el).length === 1) { 16084 el = swiperEl.querySelector(params.el); 16085 } 16086 if (el.length > 0) el = el[0]; 16087 el.classList.add(swiper.isHorizontal() ? params.horizontalClass : params.verticalClass); 16088 let dragEl; 16089 if (el) { 16090 dragEl = el.querySelector((0,_shared_classes_to_selector_mjs__WEBPACK_IMPORTED_MODULE_3__.c)(swiper.params.scrollbar.dragClass)); 16091 if (!dragEl) { 16092 dragEl = (0,_shared_utils_mjs__WEBPACK_IMPORTED_MODULE_1__.c)('div', swiper.params.scrollbar.dragClass); 16093 el.append(dragEl); 16094 } 16095 } 16096 Object.assign(scrollbar, { 16097 el, 16098 dragEl 16099 }); 16100 if (params.draggable) { 16101 enableDraggable(); 16102 } 16103 if (el) { 16104 el.classList[swiper.enabled ? 'remove' : 'add'](...(0,_shared_utils_mjs__WEBPACK_IMPORTED_MODULE_1__.h)(swiper.params.scrollbar.lockClass)); 16105 } 16106 } 16107 function destroy() { 16108 const params = swiper.params.scrollbar; 16109 const el = swiper.scrollbar.el; 16110 if (el) { 16111 el.classList.remove(...(0,_shared_utils_mjs__WEBPACK_IMPORTED_MODULE_1__.h)(swiper.isHorizontal() ? params.horizontalClass : params.verticalClass)); 16112 } 16113 disableDraggable(); 16114 } 16115 on('init', () => { 16116 if (swiper.params.scrollbar.enabled === false) { 16117 // eslint-disable-next-line 16118 disable(); 16119 } else { 16120 init(); 16121 updateSize(); 16122 setTranslate(); 16123 } 16124 }); 16125 on('update resize observerUpdate lock unlock', () => { 16126 updateSize(); 16127 }); 16128 on('setTranslate', () => { 16129 setTranslate(); 16130 }); 16131 on('setTransition', (_s, duration) => { 16132 setTransition(duration); 16133 }); 16134 on('enable disable', () => { 16135 const { 16136 el 16137 } = swiper.scrollbar; 16138 if (el) { 16139 el.classList[swiper.enabled ? 'remove' : 'add'](...(0,_shared_utils_mjs__WEBPACK_IMPORTED_MODULE_1__.h)(swiper.params.scrollbar.lockClass)); 16140 } 16141 }); 16142 on('destroy', () => { 16143 destroy(); 16144 }); 16145 const enable = () => { 16146 swiper.el.classList.remove(...(0,_shared_utils_mjs__WEBPACK_IMPORTED_MODULE_1__.h)(swiper.params.scrollbar.scrollbarDisabledClass)); 16147 if (swiper.scrollbar.el) { 16148 swiper.scrollbar.el.classList.remove(...(0,_shared_utils_mjs__WEBPACK_IMPORTED_MODULE_1__.h)(swiper.params.scrollbar.scrollbarDisabledClass)); 16149 } 16150 init(); 16151 updateSize(); 16152 setTranslate(); 16153 }; 16154 const disable = () => { 16155 swiper.el.classList.add(...(0,_shared_utils_mjs__WEBPACK_IMPORTED_MODULE_1__.h)(swiper.params.scrollbar.scrollbarDisabledClass)); 16156 if (swiper.scrollbar.el) { 16157 swiper.scrollbar.el.classList.add(...(0,_shared_utils_mjs__WEBPACK_IMPORTED_MODULE_1__.h)(swiper.params.scrollbar.scrollbarDisabledClass)); 16158 } 16159 destroy(); 16160 }; 16161 Object.assign(swiper.scrollbar, { 16162 enable, 16163 disable, 16164 updateSize, 16165 setTranslate, 16166 init, 16167 destroy 16168 }); 16169} 16170 16171 16172 16173 16174/***/ }), 16175
vendor: 8,025 bytes, lines 16176-16384
16176/***/ "./node_modules/swiper/modules/thumbs.mjs": 16177/*!************************************************!*\ 16178 !*** ./node_modules/swiper/modules/thumbs.mjs ***! 16179 \************************************************/ 16180/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { 16181 16182"use strict"; 16183__webpack_require__.r(__webpack_exports__); 16184/* harmony export */ __webpack_require__.d(__webpack_exports__, { 16185/* harmony export */ "default": () => (/* binding */ Thumb) 16186/* harmony export */ }); 16187/* harmony import */ var _shared_ssr_window_esm_mjs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../shared/ssr-window.esm.mjs */ "./node_modules/swiper/shared/ssr-window.esm.mjs"); 16188/* harmony import */ var _shared_utils_mjs__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../shared/utils.mjs */ "./node_modules/swiper/shared/utils.mjs"); 16189 16190 16191 16192function Thumb(_ref) { 16193 let { 16194 swiper, 16195 extendParams, 16196 on 16197 } = _ref; 16198 extendParams({ 16199 thumbs: { 16200 swiper: null, 16201 multipleActiveThumbs: true, 16202 autoScrollOffset: 0, 16203 slideThumbActiveClass: 'swiper-slide-thumb-active', 16204 thumbsContainerClass: 'swiper-thumbs' 16205 } 16206 }); 16207 let initialized = false; 16208 let swiperCreated = false; 16209 swiper.thumbs = { 16210 swiper: null 16211 }; 16212 function onThumbClick() { 16213 const thumbsSwiper = swiper.thumbs.swiper; 16214 if (!thumbsSwiper || thumbsSwiper.destroyed) return; 16215 const clickedIndex = thumbsSwiper.clickedIndex; 16216 const clickedSlide = thumbsSwiper.clickedSlide; 16217 if (clickedSlide && clickedSlide.classList.contains(swiper.params.thumbs.slideThumbActiveClass)) return; 16218 if (typeof clickedIndex === 'undefined' || clickedIndex === null) return; 16219 let slideToIndex; 16220 if (thumbsSwiper.params.loop) { 16221 slideToIndex = parseInt(thumbsSwiper.clickedSlide.getAttribute('data-swiper-slide-index'), 10); 16222 } else { 16223 slideToIndex = clickedIndex; 16224 } 16225 if (swiper.params.loop) { 16226 swiper.slideToLoop(slideToIndex); 16227 } else { 16228 swiper.slideTo(slideToIndex); 16229 } 16230 } 16231 function init() { 16232 const { 16233 thumbs: thumbsParams 16234 } = swiper.params; 16235 if (initialized) return false; 16236 initialized = true; 16237 const SwiperClass = swiper.constructor; 16238 if (thumbsParams.swiper instanceof SwiperClass) { 16239 swiper.thumbs.swiper = thumbsParams.swiper; 16240 Object.assign(swiper.thumbs.swiper.originalParams, { 16241 watchSlidesProgress: true, 16242 slideToClickedSlide: false 16243 }); 16244 Object.assign(swiper.thumbs.swiper.params, { 16245 watchSlidesProgress: true, 16246 slideToClickedSlide: false 16247 }); 16248 swiper.thumbs.swiper.update(); 16249 } else if ((0,_shared_utils_mjs__WEBPACK_IMPORTED_MODULE_1__.k)(thumbsParams.swiper)) { 16250 const thumbsSwiperParams = Object.assign({}, thumbsParams.swiper); 16251 Object.assign(thumbsSwiperParams, { 16252 watchSlidesProgress: true, 16253 slideToClickedSlide: false 16254 }); 16255 swiper.thumbs.swiper = new SwiperClass(thumbsSwiperParams); 16256 swiperCreated = true; 16257 } 16258 swiper.thumbs.swiper.el.classList.add(swiper.params.thumbs.thumbsContainerClass); 16259 swiper.thumbs.swiper.on('tap', onThumbClick); 16260 return true; 16261 } 16262 function update(initial) { 16263 const thumbsSwiper = swiper.thumbs.swiper; 16264 if (!thumbsSwiper || thumbsSwiper.destroyed) return; 16265 const slidesPerView = thumbsSwiper.params.slidesPerView === 'auto' ? thumbsSwiper.slidesPerViewDynamic() : thumbsSwiper.params.slidesPerView; 16266 16267 // Activate thumbs 16268 let thumbsToActivate = 1; 16269 const thumbActiveClass = swiper.params.thumbs.slideThumbActiveClass; 16270 if (swiper.params.slidesPerView > 1 && !swiper.params.centeredSlides) { 16271 thumbsToActivate = swiper.params.slidesPerView; 16272 } 16273 if (!swiper.params.thumbs.multipleActiveThumbs) { 16274 thumbsToActivate = 1; 16275 } 16276 thumbsToActivate = Math.floor(thumbsToActivate); 16277 thumbsSwiper.slides.forEach(slideEl => slideEl.classList.remove(thumbActiveClass)); 16278 if (thumbsSwiper.params.loop || thumbsSwiper.params.virtual && thumbsSwiper.params.virtual.enabled) { 16279 for (let i = 0; i < thumbsToActivate; i += 1) { 16280 (0,_shared_utils_mjs__WEBPACK_IMPORTED_MODULE_1__.e)(thumbsSwiper.slidesEl, `[data-swiper-slide-index="${swiper.realIndex + i}"]`).forEach(slideEl => { 16281 slideEl.classList.add(thumbActiveClass); 16282 }); 16283 } 16284 } else { 16285 for (let i = 0; i < thumbsToActivate; i += 1) { 16286 if (thumbsSwiper.slides[swiper.realIndex + i]) { 16287 thumbsSwiper.slides[swiper.realIndex + i].classList.add(thumbActiveClass); 16288 } 16289 } 16290 } 16291 const autoScrollOffset = swiper.params.thumbs.autoScrollOffset; 16292 const useOffset = autoScrollOffset && !thumbsSwiper.params.loop; 16293 if (swiper.realIndex !== thumbsSwiper.realIndex || useOffset) { 16294 const currentThumbsIndex = thumbsSwiper.activeIndex; 16295 let newThumbsIndex; 16296 let direction; 16297 if (thumbsSwiper.params.loop) { 16298 const newThumbsSlide = thumbsSwiper.slides.filter(slideEl => slideEl.getAttribute('data-swiper-slide-index') === `${swiper.realIndex}`)[0]; 16299 newThumbsIndex = thumbsSwiper.slides.indexOf(newThumbsSlide); 16300 direction = swiper.activeIndex > swiper.previousIndex ? 'next' : 'prev'; 16301 } else { 16302 newThumbsIndex = swiper.realIndex; 16303 direction = newThumbsIndex > swiper.previousIndex ? 'next' : 'prev'; 16304 } 16305 if (useOffset) { 16306 newThumbsIndex += direction === 'next' ? autoScrollOffset : -1 * autoScrollOffset; 16307 } 16308 if (thumbsSwiper.visibleSlidesIndexes && thumbsSwiper.visibleSlidesIndexes.indexOf(newThumbsIndex) < 0) { 16309 if (thumbsSwiper.params.centeredSlides) { 16310 if (newThumbsIndex > currentThumbsIndex) { 16311 newThumbsIndex = newThumbsIndex - Math.floor(slidesPerView / 2) + 1; 16312 } else { 16313 newThumbsIndex = newThumbsIndex + Math.floor(slidesPerView / 2) - 1; 16314 } 16315 } else if (newThumbsIndex > currentThumbsIndex && thumbsSwiper.params.slidesPerGroup === 1) ; 16316 thumbsSwiper.slideTo(newThumbsIndex, initial ? 0 : undefined); 16317 } 16318 } 16319 } 16320 on('beforeInit', () => { 16321 const { 16322 thumbs 16323 } = swiper.params; 16324 if (!thumbs || !thumbs.swiper) return; 16325 if (typeof thumbs.swiper === 'string' || thumbs.swiper instanceof HTMLElement) { 16326 const document = (0,_shared_ssr_window_esm_mjs__WEBPACK_IMPORTED_MODULE_0__.g)(); 16327 const getThumbsElementAndInit = () => { 16328 const thumbsElement = typeof thumbs.swiper === 'string' ? document.querySelector(thumbs.swiper) : thumbs.swiper; 16329 if (thumbsElement && thumbsElement.swiper) { 16330 thumbs.swiper = thumbsElement.swiper; 16331 init(); 16332 update(true); 16333 } else if (thumbsElement) { 16334 const onThumbsSwiper = e => { 16335 thumbs.swiper = e.detail[0]; 16336 thumbsElement.removeEventListener('init', onThumbsSwiper); 16337 init(); 16338 update(true); 16339 thumbs.swiper.update(); 16340 swiper.update(); 16341 }; 16342 thumbsElement.addEventListener('init', onThumbsSwiper); 16343 } 16344 return thumbsElement; 16345 }; 16346 const watchForThumbsToAppear = () => { 16347 if (swiper.destroyed) return; 16348 const thumbsElement = getThumbsElementAndInit(); 16349 if (!thumbsElement) { 16350 requestAnimationFrame(watchForThumbsToAppear); 16351 } 16352 }; 16353 requestAnimationFrame(watchForThumbsToAppear); 16354 } else { 16355 init(); 16356 update(true); 16357 } 16358 }); 16359 on('slideChange update resize observerUpdate', () => { 16360 update(); 16361 }); 16362 on('setTransition', (_s, duration) => { 16363 const thumbsSwiper = swiper.thumbs.swiper; 16364 if (!thumbsSwiper || thumbsSwiper.destroyed) return; 16365 thumbsSwiper.setTransition(duration); 16366 }); 16367 on('beforeDestroy', () => { 16368 const thumbsSwiper = swiper.thumbs.swiper; 16369 if (!thumbsSwiper || thumbsSwiper.destroyed) return; 16370 if (swiperCreated) { 16371 thumbsSwiper.destroy(); 16372 } 16373 }); 16374 Object.assign(swiper.thumbs, { 16375 init, 16376 update 16377 }); 16378} 16379 16380 16381 16382 16383/***/ }), 16384
vendor: 12,287 bytes, lines 16385-16746
16385/***/ "./node_modules/swiper/modules/virtual.mjs": 16386/*!*************************************************!*\ 16387 !*** ./node_modules/swiper/modules/virtual.mjs ***! 16388 \*************************************************/ 16389/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { 16390 16391"use strict"; 16392__webpack_require__.r(__webpack_exports__); 16393/* harmony export */ __webpack_require__.d(__webpack_exports__, { 16394/* harmony export */ "default": () => (/* binding */ Virtual) 16395/* harmony export */ }); 16396/* harmony import */ var _shared_ssr_window_esm_mjs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../shared/ssr-window.esm.mjs */ "./node_modules/swiper/shared/ssr-window.esm.mjs"); 16397/* harmony import */ var _shared_utils_mjs__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../shared/utils.mjs */ "./node_modules/swiper/shared/utils.mjs"); 16398 16399 16400 16401function Virtual(_ref) { 16402 let { 16403 swiper, 16404 extendParams, 16405 on, 16406 emit 16407 } = _ref; 16408 extendParams({ 16409 virtual: { 16410 enabled: false, 16411 slides: [], 16412 cache: true, 16413 renderSlide: null, 16414 renderExternal: null, 16415 renderExternalUpdate: true, 16416 addSlidesBefore: 0, 16417 addSlidesAfter: 0 16418 } 16419 }); 16420 let cssModeTimeout; 16421 const document = (0,_shared_ssr_window_esm_mjs__WEBPACK_IMPORTED_MODULE_0__.g)(); 16422 swiper.virtual = { 16423 cache: {}, 16424 from: undefined, 16425 to: undefined, 16426 slides: [], 16427 offset: 0, 16428 slidesGrid: [] 16429 }; 16430 const tempDOM = document.createElement('div'); 16431 function renderSlide(slide, index) { 16432 const params = swiper.params.virtual; 16433 if (params.cache && swiper.virtual.cache[index]) { 16434 return swiper.virtual.cache[index]; 16435 } 16436 // eslint-disable-next-line 16437 let slideEl; 16438 if (params.renderSlide) { 16439 slideEl = params.renderSlide.call(swiper, slide, index); 16440 if (typeof slideEl === 'string') { 16441 tempDOM.innerHTML = slideEl; 16442 slideEl = tempDOM.children[0]; 16443 } 16444 } else if (swiper.isElement) { 16445 slideEl = (0,_shared_utils_mjs__WEBPACK_IMPORTED_MODULE_1__.c)('swiper-slide'); 16446 } else { 16447 slideEl = (0,_shared_utils_mjs__WEBPACK_IMPORTED_MODULE_1__.c)('div', swiper.params.slideClass); 16448 } 16449 slideEl.setAttribute('data-swiper-slide-index', index); 16450 if (!params.renderSlide) { 16451 slideEl.innerHTML = slide; 16452 } 16453 if (params.cache) { 16454 swiper.virtual.cache[index] = slideEl; 16455 } 16456 return slideEl; 16457 } 16458 function update(force) { 16459 const { 16460 slidesPerView, 16461 slidesPerGroup, 16462 centeredSlides, 16463 loop: isLoop 16464 } = swiper.params; 16465 const { 16466 addSlidesBefore, 16467 addSlidesAfter 16468 } = swiper.params.virtual; 16469 const { 16470 from: previousFrom, 16471 to: previousTo, 16472 slides, 16473 slidesGrid: previousSlidesGrid, 16474 offset: previousOffset 16475 } = swiper.virtual; 16476 if (!swiper.params.cssMode) { 16477 swiper.updateActiveIndex(); 16478 } 16479 const activeIndex = swiper.activeIndex || 0; 16480 let offsetProp; 16481 if (swiper.rtlTranslate) offsetProp = 'right';else offsetProp = swiper.isHorizontal() ? 'left' : 'top'; 16482 let slidesAfter; 16483 let slidesBefore; 16484 if (centeredSlides) { 16485 slidesAfter = Math.floor(slidesPerView / 2) + slidesPerGroup + addSlidesAfter; 16486 slidesBefore = Math.floor(slidesPerView / 2) + slidesPerGroup + addSlidesBefore; 16487 } else { 16488 slidesAfter = slidesPerView + (slidesPerGroup - 1) + addSlidesAfter; 16489 slidesBefore = (isLoop ? slidesPerView : slidesPerGroup) + addSlidesBefore; 16490 } 16491 let from = activeIndex - slidesBefore; 16492 let to = activeIndex + slidesAfter; 16493 if (!isLoop) { 16494 from = Math.max(from, 0); 16495 to = Math.min(to, slides.length - 1); 16496 } 16497 let offset = (swiper.slidesGrid[from] || 0) - (swiper.slidesGrid[0] || 0); 16498 if (isLoop && activeIndex >= slidesBefore) { 16499 from -= slidesBefore; 16500 if (!centeredSlides) offset += swiper.slidesGrid[0]; 16501 } else if (isLoop && activeIndex < slidesBefore) { 16502 from = -slidesBefore; 16503 if (centeredSlides) offset += swiper.slidesGrid[0]; 16504 } 16505 Object.assign(swiper.virtual, { 16506 from, 16507 to, 16508 offset, 16509 slidesGrid: swiper.slidesGrid, 16510 slidesBefore, 16511 slidesAfter 16512 }); 16513 function onRendered() { 16514 swiper.updateSlides(); 16515 swiper.updateProgress(); 16516 swiper.updateSlidesClasses(); 16517 emit('virtualUpdate'); 16518 } 16519 if (previousFrom === from && previousTo === to && !force) { 16520 if (swiper.slidesGrid !== previousSlidesGrid && offset !== previousOffset) { 16521 swiper.slides.forEach(slideEl => { 16522 slideEl.style[offsetProp] = `${offset - Math.abs(swiper.cssOverflowAdjustment())}px`; 16523 }); 16524 } 16525 swiper.updateProgress(); 16526 emit('virtualUpdate'); 16527 return; 16528 } 16529 if (swiper.params.virtual.renderExternal) { 16530 swiper.params.virtual.renderExternal.call(swiper, { 16531 offset, 16532 from, 16533 to, 16534 slides: function getSlides() { 16535 const slidesToRender = []; 16536 for (let i = from; i <= to; i += 1) { 16537 slidesToRender.push(slides[i]); 16538 } 16539 return slidesToRender; 16540 }() 16541 }); 16542 if (swiper.params.virtual.renderExternalUpdate) { 16543 onRendered(); 16544 } else { 16545 emit('virtualUpdate'); 16546 } 16547 return; 16548 } 16549 const prependIndexes = []; 16550 const appendIndexes = []; 16551 const getSlideIndex = index => { 16552 let slideIndex = index; 16553 if (index < 0) { 16554 slideIndex = slides.length + index; 16555 } else if (slideIndex >= slides.length) { 16556 // eslint-disable-next-line 16557 slideIndex = slideIndex - slides.length; 16558 } 16559 return slideIndex; 16560 }; 16561 if (force) { 16562 swiper.slides.filter(el => el.matches(`.${swiper.params.slideClass}, swiper-slide`)).forEach(slideEl => { 16563 slideEl.remove(); 16564 }); 16565 } else { 16566 for (let i = previousFrom; i <= previousTo; i += 1) { 16567 if (i < from || i > to) { 16568 const slideIndex = getSlideIndex(i); 16569 swiper.slides.filter(el => el.matches(`.${swiper.params.slideClass}[data-swiper-slide-index="${slideIndex}"], swiper-slide[data-swiper-slide-index="${slideIndex}"]`)).forEach(slideEl => { 16570 slideEl.remove(); 16571 }); 16572 } 16573 } 16574 } 16575 const loopFrom = isLoop ? -slides.length : 0; 16576 const loopTo = isLoop ? slides.length * 2 : slides.length; 16577 for (let i = loopFrom; i < loopTo; i += 1) { 16578 if (i >= from && i <= to) { 16579 const slideIndex = getSlideIndex(i); 16580 if (typeof previousTo === 'undefined' || force) { 16581 appendIndexes.push(slideIndex); 16582 } else { 16583 if (i > previousTo) appendIndexes.push(slideIndex); 16584 if (i < previousFrom) prependIndexes.push(slideIndex); 16585 } 16586 } 16587 } 16588 appendIndexes.forEach(index => { 16589 swiper.slidesEl.append(renderSlide(slides[index], index)); 16590 }); 16591 if (isLoop) { 16592 for (let i = prependIndexes.length - 1; i >= 0; i -= 1) { 16593 const index = prependIndexes[i]; 16594 swiper.slidesEl.prepend(renderSlide(slides[index], index)); 16595 } 16596 } else { 16597 prependIndexes.sort((a, b) => b - a); 16598 prependIndexes.forEach(index => { 16599 swiper.slidesEl.prepend(renderSlide(slides[index], index)); 16600 }); 16601 } 16602 (0,_shared_utils_mjs__WEBPACK_IMPORTED_MODULE_1__.e)(swiper.slidesEl, '.swiper-slide, swiper-slide').forEach(slideEl => { 16603 slideEl.style[offsetProp] = `${offset - Math.abs(swiper.cssOverflowAdjustment())}px`; 16604 }); 16605 onRendered(); 16606 } 16607 function appendSlide(slides) { 16608 if (typeof slides === 'object' && 'length' in slides) { 16609 for (let i = 0; i < slides.length; i += 1) { 16610 if (slides[i]) swiper.virtual.slides.push(slides[i]); 16611 } 16612 } else { 16613 swiper.virtual.slides.push(slides); 16614 } 16615 update(true); 16616 } 16617 function prependSlide(slides) { 16618 const activeIndex = swiper.activeIndex; 16619 let newActiveIndex = activeIndex + 1; 16620 let numberOfNewSlides = 1; 16621 if (Array.isArray(slides)) { 16622 for (let i = 0; i < slides.length; i += 1) { 16623 if (slides[i]) swiper.virtual.slides.unshift(slides[i]); 16624 } 16625 newActiveIndex = activeIndex + slides.length; 16626 numberOfNewSlides = slides.length; 16627 } else { 16628 swiper.virtual.slides.unshift(slides); 16629 } 16630 if (swiper.params.virtual.cache) { 16631 const cache = swiper.virtual.cache; 16632 const newCache = {}; 16633 Object.keys(cache).forEach(cachedIndex => { 16634 const cachedEl = cache[cachedIndex]; 16635 const cachedElIndex = cachedEl.getAttribute('data-swiper-slide-index'); 16636 if (cachedElIndex) { 16637 cachedEl.setAttribute('data-swiper-slide-index', parseInt(cachedElIndex, 10) + numberOfNewSlides); 16638 } 16639 newCache[parseInt(cachedIndex, 10) + numberOfNewSlides] = cachedEl; 16640 }); 16641 swiper.virtual.cache = newCache; 16642 } 16643 update(true); 16644 swiper.slideTo(newActiveIndex, 0); 16645 } 16646 function removeSlide(slidesIndexes) { 16647 if (typeof slidesIndexes === 'undefined' || slidesIndexes === null) return; 16648 let activeIndex = swiper.activeIndex; 16649 if (Array.isArray(slidesIndexes)) { 16650 for (let i = slidesIndexes.length - 1; i >= 0; i -= 1) { 16651 if (swiper.params.virtual.cache) { 16652 delete swiper.virtual.cache[slidesIndexes[i]]; 16653 // shift cache indexes 16654 Object.keys(swiper.virtual.cache).forEach(key => { 16655 if (key > slidesIndexes) { 16656 swiper.virtual.cache[key - 1] = swiper.virtual.cache[key]; 16657 swiper.virtual.cache[key - 1].setAttribute('data-swiper-slide-index', key - 1); 16658 delete swiper.virtual.cache[key]; 16659 } 16660 }); 16661 } 16662 swiper.virtual.slides.splice(slidesIndexes[i], 1); 16663 if (slidesIndexes[i] < activeIndex) activeIndex -= 1; 16664 activeIndex = Math.max(activeIndex, 0); 16665 } 16666 } else { 16667 if (swiper.params.virtual.cache) { 16668 delete swiper.virtual.cache[slidesIndexes]; 16669 // shift cache indexes 16670 Object.keys(swiper.virtual.cache).forEach(key => { 16671 if (key > slidesIndexes) { 16672 swiper.virtual.cache[key - 1] = swiper.virtual.cache[key]; 16673 swiper.virtual.cache[key - 1].setAttribute('data-swiper-slide-index', key - 1); 16674 delete swiper.virtual.cache[key]; 16675 } 16676 }); 16677 } 16678 swiper.virtual.slides.splice(slidesIndexes, 1); 16679 if (slidesIndexes < activeIndex) activeIndex -= 1; 16680 activeIndex = Math.max(activeIndex, 0); 16681 } 16682 update(true); 16683 swiper.slideTo(activeIndex, 0); 16684 } 16685 function removeAllSlides() { 16686 swiper.virtual.slides = []; 16687 if (swiper.params.virtual.cache) { 16688 swiper.virtual.cache = {}; 16689 } 16690 update(true); 16691 swiper.slideTo(0, 0); 16692 } 16693 on('beforeInit', () => { 16694 if (!swiper.params.virtual.enabled) return; 16695 let domSlidesAssigned; 16696 if (typeof swiper.passedParams.virtual.slides === 'undefined') { 16697 const slides = [...swiper.slidesEl.children].filter(el => el.matches(`.${swiper.params.slideClass}, swiper-slide`)); 16698 if (slides && slides.length) { 16699 swiper.virtual.slides = [...slides]; 16700 domSlidesAssigned = true; 16701 slides.forEach((slideEl, slideIndex) => { 16702 slideEl.setAttribute('data-swiper-slide-index', slideIndex); 16703 swiper.virtual.cache[slideIndex] = slideEl; 16704 slideEl.remove(); 16705 }); 16706 } 16707 } 16708 if (!domSlidesAssigned) { 16709 swiper.virtual.slides = swiper.params.virtual.slides; 16710 } 16711 swiper.classNames.push(`${swiper.params.containerModifierClass}virtual`); 16712 swiper.params.watchSlidesProgress = true; 16713 swiper.originalParams.watchSlidesProgress = true; 16714 update(); 16715 }); 16716 on('setTranslate', () => { 16717 if (!swiper.params.virtual.enabled) return; 16718 if (swiper.params.cssMode && !swiper._immediateVirtual) { 16719 clearTimeout(cssModeTimeout); 16720 cssModeTimeout = setTimeout(() => { 16721 update(); 16722 }, 100); 16723 } else { 16724 update(); 16725 } 16726 }); 16727 on('init update resize', () => { 16728 if (!swiper.params.virtual.enabled) return; 16729 if (swiper.params.cssMode) { 16730 (0,_shared_utils_mjs__WEBPACK_IMPORTED_MODULE_1__.s)(swiper.wrapperEl, '--swiper-virtual-size', `${swiper.virtualSize}px`); 16731 } 16732 }); 16733 Object.assign(swiper.virtual, { 16734 appendSlide, 16735 prependSlide, 16736 removeSlide, 16737 removeAllSlides, 16738 update 16739 }); 16740} 16741 16742 16743 16744 16745/***/ }), 16746
vendor: 22,561 bytes, lines 16747-17354
16747/***/ "./node_modules/swiper/modules/zoom.mjs": 16748/*!**********************************************!*\ 16749 !*** ./node_modules/swiper/modules/zoom.mjs ***! 16750 \**********************************************/ 16751/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { 16752 16753"use strict"; 16754__webpack_require__.r(__webpack_exports__); 16755/* harmony export */ __webpack_require__.d(__webpack_exports__, { 16756/* harmony export */ "default": () => (/* binding */ Zoom) 16757/* harmony export */ }); 16758/* harmony import */ var _shared_ssr_window_esm_mjs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../shared/ssr-window.esm.mjs */ "./node_modules/swiper/shared/ssr-window.esm.mjs"); 16759/* harmony import */ var _shared_utils_mjs__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../shared/utils.mjs */ "./node_modules/swiper/shared/utils.mjs"); 16760 16761 16762 16763function Zoom(_ref) { 16764 let { 16765 swiper, 16766 extendParams, 16767 on, 16768 emit 16769 } = _ref; 16770 const window = (0,_shared_ssr_window_esm_mjs__WEBPACK_IMPORTED_MODULE_0__.a)(); 16771 extendParams({ 16772 zoom: { 16773 enabled: false, 16774 maxRatio: 3, 16775 minRatio: 1, 16776 toggle: true, 16777 containerClass: 'swiper-zoom-container', 16778 zoomedSlideClass: 'swiper-slide-zoomed' 16779 } 16780 }); 16781 swiper.zoom = { 16782 enabled: false 16783 }; 16784 let currentScale = 1; 16785 let isScaling = false; 16786 let fakeGestureTouched; 16787 let fakeGestureMoved; 16788 const evCache = []; 16789 const gesture = { 16790 originX: 0, 16791 originY: 0, 16792 slideEl: undefined, 16793 slideWidth: undefined, 16794 slideHeight: undefined, 16795 imageEl: undefined, 16796 imageWrapEl: undefined, 16797 maxRatio: 3 16798 }; 16799 const image = { 16800 isTouched: undefined, 16801 isMoved: undefined, 16802 currentX: undefined, 16803 currentY: undefined, 16804 minX: undefined, 16805 minY: undefined, 16806 maxX: undefined, 16807 maxY: undefined, 16808 width: undefined, 16809 height: undefined, 16810 startX: undefined, 16811 startY: undefined, 16812 touchesStart: {}, 16813 touchesCurrent: {} 16814 }; 16815 const velocity = { 16816 x: undefined, 16817 y: undefined, 16818 prevPositionX: undefined, 16819 prevPositionY: undefined, 16820 prevTime: undefined 16821 }; 16822 let scale = 1; 16823 Object.defineProperty(swiper.zoom, 'scale', { 16824 get() { 16825 return scale; 16826 }, 16827 set(value) { 16828 if (scale !== value) { 16829 const imageEl = gesture.imageEl; 16830 const slideEl = gesture.slideEl; 16831 emit('zoomChange', value, imageEl, slideEl); 16832 } 16833 scale = value; 16834 } 16835 }); 16836 function getDistanceBetweenTouches() { 16837 if (evCache.length < 2) return 1; 16838 const x1 = evCache[0].pageX; 16839 const y1 = evCache[0].pageY; 16840 const x2 = evCache[1].pageX; 16841 const y2 = evCache[1].pageY; 16842 const distance = Math.sqrt((x2 - x1) ** 2 + (y2 - y1) ** 2); 16843 return distance; 16844 } 16845 function getScaleOrigin() { 16846 if (evCache.length < 2) return { 16847 x: null, 16848 y: null 16849 }; 16850 const box = gesture.imageEl.getBoundingClientRect(); 16851 return [(evCache[0].pageX + (evCache[1].pageX - evCache[0].pageX) / 2 - box.x - window.scrollX) / currentScale, (evCache[0].pageY + (evCache[1].pageY - evCache[0].pageY) / 2 - box.y - window.scrollY) / currentScale]; 16852 } 16853 function getSlideSelector() { 16854 return swiper.isElement ? `swiper-slide` : `.${swiper.params.slideClass}`; 16855 } 16856 function eventWithinSlide(e) { 16857 const slideSelector = getSlideSelector(); 16858 if (e.target.matches(slideSelector)) return true; 16859 if (swiper.slides.filter(slideEl => slideEl.contains(e.target)).length > 0) return true; 16860 return false; 16861 } 16862 function eventWithinZoomContainer(e) { 16863 const selector = `.${swiper.params.zoom.containerClass}`; 16864 if (e.target.matches(selector)) return true; 16865 if ([...swiper.hostEl.querySelectorAll(selector)].filter(containerEl => containerEl.contains(e.target)).length > 0) return true; 16866 return false; 16867 } 16868 16869 // Events 16870 function onGestureStart(e) { 16871 if (e.pointerType === 'mouse') { 16872 evCache.splice(0, evCache.length); 16873 } 16874 if (!eventWithinSlide(e)) return; 16875 const params = swiper.params.zoom; 16876 fakeGestureTouched = false; 16877 fakeGestureMoved = false; 16878 evCache.push(e); 16879 if (evCache.length < 2) { 16880 return; 16881 } 16882 fakeGestureTouched = true; 16883 gesture.scaleStart = getDistanceBetweenTouches(); 16884 if (!gesture.slideEl) { 16885 gesture.slideEl = e.target.closest(`.${swiper.params.slideClass}, swiper-slide`); 16886 if (!gesture.slideEl) gesture.slideEl = swiper.slides[swiper.activeIndex]; 16887 let imageEl = gesture.slideEl.querySelector(`.${params.containerClass}`); 16888 if (imageEl) { 16889 imageEl = imageEl.querySelectorAll('picture, img, svg, canvas, .swiper-zoom-target')[0]; 16890 } 16891 gesture.imageEl = imageEl; 16892 if (imageEl) { 16893 gesture.imageWrapEl = (0,_shared_utils_mjs__WEBPACK_IMPORTED_MODULE_1__.a)(gesture.imageEl, `.${params.containerClass}`)[0]; 16894 } else { 16895 gesture.imageWrapEl = undefined; 16896 } 16897 if (!gesture.imageWrapEl) { 16898 gesture.imageEl = undefined; 16899 return; 16900 } 16901 gesture.maxRatio = gesture.imageWrapEl.getAttribute('data-swiper-zoom') || params.maxRatio; 16902 } 16903 if (gesture.imageEl) { 16904 const [originX, originY] = getScaleOrigin(); 16905 gesture.originX = originX; 16906 gesture.originY = originY; 16907 gesture.imageEl.style.transitionDuration = '0ms'; 16908 } 16909 isScaling = true; 16910 } 16911 function onGestureChange(e) { 16912 if (!eventWithinSlide(e)) return; 16913 const params = swiper.params.zoom; 16914 const zoom = swiper.zoom; 16915 const pointerIndex = evCache.findIndex(cachedEv => cachedEv.pointerId === e.pointerId); 16916 if (pointerIndex >= 0) evCache[pointerIndex] = e; 16917 if (evCache.length < 2) { 16918 return; 16919 } 16920 fakeGestureMoved = true; 16921 gesture.scaleMove = getDistanceBetweenTouches(); 16922 if (!gesture.imageEl) { 16923 return; 16924 } 16925 zoom.scale = gesture.scaleMove / gesture.scaleStart * currentScale; 16926 if (zoom.scale > gesture.maxRatio) { 16927 zoom.scale = gesture.maxRatio - 1 + (zoom.scale - gesture.maxRatio + 1) ** 0.5; 16928 } 16929 if (zoom.scale < params.minRatio) { 16930 zoom.scale = params.minRatio + 1 - (params.minRatio - zoom.scale + 1) ** 0.5; 16931 } 16932 gesture.imageEl.style.transform = `translate3d(0,0,0) scale(${zoom.scale})`; 16933 } 16934 function onGestureEnd(e) { 16935 if (!eventWithinSlide(e)) return; 16936 if (e.pointerType === 'mouse' && e.type === 'pointerout') return; 16937 const params = swiper.params.zoom; 16938 const zoom = swiper.zoom; 16939 const pointerIndex = evCache.findIndex(cachedEv => cachedEv.pointerId === e.pointerId); 16940 if (pointerIndex >= 0) evCache.splice(pointerIndex, 1); 16941 if (!fakeGestureTouched || !fakeGestureMoved) { 16942 return; 16943 } 16944 fakeGestureTouched = false; 16945 fakeGestureMoved = false; 16946 if (!gesture.imageEl) return; 16947 zoom.scale = Math.max(Math.min(zoom.scale, gesture.maxRatio), params.minRatio); 16948 gesture.imageEl.style.transitionDuration = `${swiper.params.speed}ms`; 16949 gesture.imageEl.style.transform = `translate3d(0,0,0) scale(${zoom.scale})`; 16950 currentScale = zoom.scale; 16951 isScaling = false; 16952 if (zoom.scale > 1 && gesture.slideEl) { 16953 gesture.slideEl.classList.add(`${params.zoomedSlideClass}`); 16954 } else if (zoom.scale <= 1 && gesture.slideEl) { 16955 gesture.slideEl.classList.remove(`${params.zoomedSlideClass}`); 16956 } 16957 if (zoom.scale === 1) { 16958 gesture.originX = 0; 16959 gesture.originY = 0; 16960 gesture.slideEl = undefined; 16961 } 16962 } 16963 function onTouchStart(e) { 16964 const device = swiper.device; 16965 if (!gesture.imageEl) return; 16966 if (image.isTouched) return; 16967 if (device.android && e.cancelable) e.preventDefault(); 16968 image.isTouched = true; 16969 const event = evCache.length > 0 ? evCache[0] : e; 16970 image.touchesStart.x = event.pageX; 16971 image.touchesStart.y = event.pageY; 16972 } 16973 function onTouchMove(e) { 16974 if (!eventWithinSlide(e) || !eventWithinZoomContainer(e)) return; 16975 const zoom = swiper.zoom; 16976 if (!gesture.imageEl) return; 16977 if (!image.isTouched || !gesture.slideEl) return; 16978 if (!image.isMoved) { 16979 image.width = gesture.imageEl.offsetWidth; 16980 image.height = gesture.imageEl.offsetHeight; 16981 image.startX = (0,_shared_utils_mjs__WEBPACK_IMPORTED_MODULE_1__.i)(gesture.imageWrapEl, 'x') || 0; 16982 image.startY = (0,_shared_utils_mjs__WEBPACK_IMPORTED_MODULE_1__.i)(gesture.imageWrapEl, 'y') || 0; 16983 gesture.slideWidth = gesture.slideEl.offsetWidth; 16984 gesture.slideHeight = gesture.slideEl.offsetHeight; 16985 gesture.imageWrapEl.style.transitionDuration = '0ms'; 16986 } 16987 // Define if we need image drag 16988 const scaledWidth = image.width * zoom.scale; 16989 const scaledHeight = image.height * zoom.scale; 16990 if (scaledWidth < gesture.slideWidth && scaledHeight < gesture.slideHeight) return; 16991 image.minX = Math.min(gesture.slideWidth / 2 - scaledWidth / 2, 0); 16992 image.maxX = -image.minX; 16993 image.minY = Math.min(gesture.slideHeight / 2 - scaledHeight / 2, 0); 16994 image.maxY = -image.minY; 16995 image.touchesCurrent.x = evCache.length > 0 ? evCache[0].pageX : e.pageX; 16996 image.touchesCurrent.y = evCache.length > 0 ? evCache[0].pageY : e.pageY; 16997 const touchesDiff = Math.max(Math.abs(image.touchesCurrent.x - image.touchesStart.x), Math.abs(image.touchesCurrent.y - image.touchesStart.y)); 16998 if (touchesDiff > 5) { 16999 swiper.allowClick = false; 17000 } 17001 if (!image.isMoved && !isScaling) { 17002 if (swiper.isHorizontal() && (Math.floor(image.minX) === Math.floor(image.startX) && image.touchesCurrent.x < image.touchesStart.x || Math.floor(image.maxX) === Math.floor(image.startX) && image.touchesCurrent.x > image.touchesStart.x)) { 17003 image.isTouched = false; 17004 return; 17005 } 17006 if (!swiper.isHorizontal() && (Math.floor(image.minY) === Math.floor(image.startY) && image.touchesCurrent.y < image.touchesStart.y || Math.floor(image.maxY) === Math.floor(image.startY) && image.touchesCurrent.y > image.touchesStart.y)) { 17007 image.isTouched = false; 17008 return; 17009 } 17010 } 17011 if (e.cancelable) { 17012 e.preventDefault(); 17013 } 17014 e.stopPropagation(); 17015 image.isMoved = true; 17016 const scaleRatio = (zoom.scale - currentScale) / (gesture.maxRatio - swiper.params.zoom.minRatio); 17017 const { 17018 originX, 17019 originY 17020 } = gesture; 17021 image.currentX = image.touchesCurrent.x - image.touchesStart.x + image.startX + scaleRatio * (image.width - originX * 2); 17022 image.currentY = image.touchesCurrent.y - image.touchesStart.y + image.startY + scaleRatio * (image.height - originY * 2); 17023 if (image.currentX < image.minX) { 17024 image.currentX = image.minX + 1 - (image.minX - image.currentX + 1) ** 0.8; 17025 } 17026 if (image.currentX > image.maxX) { 17027 image.currentX = image.maxX - 1 + (image.currentX - image.maxX + 1) ** 0.8; 17028 } 17029 if (image.currentY < image.minY) { 17030 image.currentY = image.minY + 1 - (image.minY - image.currentY + 1) ** 0.8; 17031 } 17032 if (image.currentY > image.maxY) { 17033 image.currentY = image.maxY - 1 + (image.currentY - image.maxY + 1) ** 0.8; 17034 } 17035 17036 // Velocity 17037 if (!velocity.prevPositionX) velocity.prevPositionX = image.touchesCurrent.x; 17038 if (!velocity.prevPositionY) velocity.prevPositionY = image.touchesCurrent.y; 17039 if (!velocity.prevTime) velocity.prevTime = Date.now(); 17040 velocity.x = (image.touchesCurrent.x - velocity.prevPositionX) / (Date.now() - velocity.prevTime) / 2; 17041 velocity.y = (image.touchesCurrent.y - velocity.prevPositionY) / (Date.now() - velocity.prevTime) / 2; 17042 if (Math.abs(image.touchesCurrent.x - velocity.prevPositionX) < 2) velocity.x = 0; 17043 if (Math.abs(image.touchesCurrent.y - velocity.prevPositionY) < 2) velocity.y = 0; 17044 velocity.prevPositionX = image.touchesCurrent.x; 17045 velocity.prevPositionY = image.touchesCurrent.y; 17046 velocity.prevTime = Date.now(); 17047 gesture.imageWrapEl.style.transform = `translate3d(${image.currentX}px, ${image.currentY}px,0)`; 17048 } 17049 function onTouchEnd() { 17050 const zoom = swiper.zoom; 17051 if (!gesture.imageEl) return; 17052 if (!image.isTouched || !image.isMoved) { 17053 image.isTouched = false; 17054 image.isMoved = false; 17055 return; 17056 } 17057 image.isTouched = false; 17058 image.isMoved = false; 17059 let momentumDurationX = 300; 17060 let momentumDurationY = 300; 17061 const momentumDistanceX = velocity.x * momentumDurationX; 17062 const newPositionX = image.currentX + momentumDistanceX; 17063 const momentumDistanceY = velocity.y * momentumDurationY; 17064 const newPositionY = image.currentY + momentumDistanceY; 17065 17066 // Fix duration 17067 if (velocity.x !== 0) momentumDurationX = Math.abs((newPositionX - image.currentX) / velocity.x); 17068 if (velocity.y !== 0) momentumDurationY = Math.abs((newPositionY - image.currentY) / velocity.y); 17069 const momentumDuration = Math.max(momentumDurationX, momentumDurationY); 17070 image.currentX = newPositionX; 17071 image.currentY = newPositionY; 17072 // Define if we need image drag 17073 const scaledWidth = image.width * zoom.scale; 17074 const scaledHeight = image.height * zoom.scale; 17075 image.minX = Math.min(gesture.slideWidth / 2 - scaledWidth / 2, 0); 17076 image.maxX = -image.minX; 17077 image.minY = Math.min(gesture.slideHeight / 2 - scaledHeight / 2, 0); 17078 image.maxY = -image.minY; 17079 image.currentX = Math.max(Math.min(image.currentX, image.maxX), image.minX); 17080 image.currentY = Math.max(Math.min(image.currentY, image.maxY), image.minY); 17081 gesture.imageWrapEl.style.transitionDuration = `${momentumDuration}ms`; 17082 gesture.imageWrapEl.style.transform = `translate3d(${image.currentX}px, ${image.currentY}px,0)`; 17083 } 17084 function onTransitionEnd() { 17085 const zoom = swiper.zoom; 17086 if (gesture.slideEl && swiper.activeIndex !== swiper.slides.indexOf(gesture.slideEl)) { 17087 if (gesture.imageEl) { 17088 gesture.imageEl.style.transform = 'translate3d(0,0,0) scale(1)'; 17089 } 17090 if (gesture.imageWrapEl) { 17091 gesture.imageWrapEl.style.transform = 'translate3d(0,0,0)'; 17092 } 17093 gesture.slideEl.classList.remove(`${swiper.params.zoom.zoomedSlideClass}`); 17094 zoom.scale = 1; 17095 currentScale = 1; 17096 gesture.slideEl = undefined; 17097 gesture.imageEl = undefined; 17098 gesture.imageWrapEl = undefined; 17099 gesture.originX = 0; 17100 gesture.originY = 0; 17101 } 17102 } 17103 function zoomIn(e) { 17104 const zoom = swiper.zoom; 17105 const params = swiper.params.zoom; 17106 if (!gesture.slideEl) { 17107 if (e && e.target) { 17108 gesture.slideEl = e.target.closest(`.${swiper.params.slideClass}, swiper-slide`); 17109 } 17110 if (!gesture.slideEl) { 17111 if (swiper.params.virtual && swiper.params.virtual.enabled && swiper.virtual) { 17112 gesture.slideEl = (0,_shared_utils_mjs__WEBPACK_IMPORTED_MODULE_1__.e)(swiper.slidesEl, `.${swiper.params.slideActiveClass}`)[0]; 17113 } else { 17114 gesture.slideEl = swiper.slides[swiper.activeIndex]; 17115 } 17116 } 17117 let imageEl = gesture.slideEl.querySelector(`.${params.containerClass}`); 17118 if (imageEl) { 17119 imageEl = imageEl.querySelectorAll('picture, img, svg, canvas, .swiper-zoom-target')[0]; 17120 } 17121 gesture.imageEl = imageEl; 17122 if (imageEl) { 17123 gesture.imageWrapEl = (0,_shared_utils_mjs__WEBPACK_IMPORTED_MODULE_1__.a)(gesture.imageEl, `.${params.containerClass}`)[0]; 17124 } else { 17125 gesture.imageWrapEl = undefined; 17126 } 17127 } 17128 if (!gesture.imageEl || !gesture.imageWrapEl) return; 17129 if (swiper.params.cssMode) { 17130 swiper.wrapperEl.style.overflow = 'hidden'; 17131 swiper.wrapperEl.style.touchAction = 'none'; 17132 } 17133 gesture.slideEl.classList.add(`${params.zoomedSlideClass}`); 17134 let touchX; 17135 let touchY; 17136 let offsetX; 17137 let offsetY; 17138 let diffX; 17139 let diffY; 17140 let translateX; 17141 let translateY; 17142 let imageWidth; 17143 let imageHeight; 17144 let scaledWidth; 17145 let scaledHeight; 17146 let translateMinX; 17147 let translateMinY; 17148 let translateMaxX; 17149 let translateMaxY; 17150 let slideWidth; 17151 let slideHeight; 17152 if (typeof image.touchesStart.x === 'undefined' && e) { 17153 touchX = e.pageX; 17154 touchY = e.pageY; 17155 } else { 17156 touchX = image.touchesStart.x; 17157 touchY = image.touchesStart.y; 17158 } 17159 const forceZoomRatio = typeof e === 'number' ? e : null; 17160 if (currentScale === 1 && forceZoomRatio) { 17161 touchX = undefined; 17162 touchY = undefined; 17163 } 17164 zoom.scale = forceZoomRatio || gesture.imageWrapEl.getAttribute('data-swiper-zoom') || params.maxRatio; 17165 currentScale = forceZoomRatio || gesture.imageWrapEl.getAttribute('data-swiper-zoom') || params.maxRatio; 17166 if (e && !(currentScale === 1 && forceZoomRatio)) { 17167 slideWidth = gesture.slideEl.offsetWidth; 17168 slideHeight = gesture.slideEl.offsetHeight; 17169 offsetX = (0,_shared_utils_mjs__WEBPACK_IMPORTED_MODULE_1__.b)(gesture.slideEl).left + window.scrollX; 17170 offsetY = (0,_shared_utils_mjs__WEBPACK_IMPORTED_MODULE_1__.b)(gesture.slideEl).top + window.scrollY; 17171 diffX = offsetX + slideWidth / 2 - touchX; 17172 diffY = offsetY + slideHeight / 2 - touchY; 17173 imageWidth = gesture.imageEl.offsetWidth; 17174 imageHeight = gesture.imageEl.offsetHeight; 17175 scaledWidth = imageWidth * zoom.scale; 17176 scaledHeight = imageHeight * zoom.scale; 17177 translateMinX = Math.min(slideWidth / 2 - scaledWidth / 2, 0); 17178 translateMinY = Math.min(slideHeight / 2 - scaledHeight / 2, 0); 17179 translateMaxX = -translateMinX; 17180 translateMaxY = -translateMinY; 17181 translateX = diffX * zoom.scale; 17182 translateY = diffY * zoom.scale; 17183 if (translateX < translateMinX) { 17184 translateX = translateMinX; 17185 } 17186 if (translateX > translateMaxX) { 17187 translateX = translateMaxX; 17188 } 17189 if (translateY < translateMinY) { 17190 translateY = translateMinY; 17191 } 17192 if (translateY > translateMaxY) { 17193 translateY = translateMaxY; 17194 } 17195 } else { 17196 translateX = 0; 17197 translateY = 0; 17198 } 17199 if (forceZoomRatio && zoom.scale === 1) { 17200 gesture.originX = 0; 17201 gesture.originY = 0; 17202 } 17203 gesture.imageWrapEl.style.transitionDuration = '300ms'; 17204 gesture.imageWrapEl.style.transform = `translate3d(${translateX}px, ${translateY}px,0)`; 17205 gesture.imageEl.style.transitionDuration = '300ms'; 17206 gesture.imageEl.style.transform = `translate3d(0,0,0) scale(${zoom.scale})`; 17207 } 17208 function zoomOut() { 17209 const zoom = swiper.zoom; 17210 const params = swiper.params.zoom; 17211 if (!gesture.slideEl) { 17212 if (swiper.params.virtual && swiper.params.virtual.enabled && swiper.virtual) { 17213 gesture.slideEl = (0,_shared_utils_mjs__WEBPACK_IMPORTED_MODULE_1__.e)(swiper.slidesEl, `.${swiper.params.slideActiveClass}`)[0]; 17214 } else { 17215 gesture.slideEl = swiper.slides[swiper.activeIndex]; 17216 } 17217 let imageEl = gesture.slideEl.querySelector(`.${params.containerClass}`); 17218 if (imageEl) { 17219 imageEl = imageEl.querySelectorAll('picture, img, svg, canvas, .swiper-zoom-target')[0]; 17220 } 17221 gesture.imageEl = imageEl; 17222 if (imageEl) { 17223 gesture.imageWrapEl = (0,_shared_utils_mjs__WEBPACK_IMPORTED_MODULE_1__.a)(gesture.imageEl, `.${params.containerClass}`)[0]; 17224 } else { 17225 gesture.imageWrapEl = undefined; 17226 } 17227 } 17228 if (!gesture.imageEl || !gesture.imageWrapEl) return; 17229 if (swiper.params.cssMode) { 17230 swiper.wrapperEl.style.overflow = ''; 17231 swiper.wrapperEl.style.touchAction = ''; 17232 } 17233 zoom.scale = 1; 17234 currentScale = 1; 17235 gesture.imageWrapEl.style.transitionDuration = '300ms'; 17236 gesture.imageWrapEl.style.transform = 'translate3d(0,0,0)'; 17237 gesture.imageEl.style.transitionDuration = '300ms'; 17238 gesture.imageEl.style.transform = 'translate3d(0,0,0) scale(1)'; 17239 gesture.slideEl.classList.remove(`${params.zoomedSlideClass}`); 17240 gesture.slideEl = undefined; 17241 gesture.originX = 0; 17242 gesture.originY = 0; 17243 } 17244 17245 // Toggle Zoom 17246 function zoomToggle(e) { 17247 const zoom = swiper.zoom; 17248 if (zoom.scale && zoom.scale !== 1) { 17249 // Zoom Out 17250 zoomOut(); 17251 } else { 17252 // Zoom In 17253 zoomIn(e); 17254 } 17255 } 17256 function getListeners() { 17257 const passiveListener = swiper.params.passiveListeners ? { 17258 passive: true, 17259 capture: false 17260 } : false; 17261 const activeListenerWithCapture = swiper.params.passiveListeners ? { 17262 passive: false, 17263 capture: true 17264 } : true; 17265 return { 17266 passiveListener, 17267 activeListenerWithCapture 17268 }; 17269 } 17270 17271 // Attach/Detach Events 17272 function enable() { 17273 const zoom = swiper.zoom; 17274 if (zoom.enabled) return; 17275 zoom.enabled = true; 17276 const { 17277 passiveListener, 17278 activeListenerWithCapture 17279 } = getListeners(); 17280 17281 // Scale image 17282 swiper.wrapperEl.addEventListener('pointerdown', onGestureStart, passiveListener); 17283 swiper.wrapperEl.addEventListener('pointermove', onGestureChange, activeListenerWithCapture); 17284 ['pointerup', 'pointercancel', 'pointerout'].forEach(eventName => { 17285 swiper.wrapperEl.addEventListener(eventName, onGestureEnd, passiveListener); 17286 }); 17287 17288 // Move image 17289 swiper.wrapperEl.addEventListener('pointermove', onTouchMove, activeListenerWithCapture); 17290 } 17291 function disable() { 17292 const zoom = swiper.zoom; 17293 if (!zoom.enabled) return; 17294 zoom.enabled = false; 17295 const { 17296 passiveListener, 17297 activeListenerWithCapture 17298 } = getListeners(); 17299 17300 // Scale image 17301 swiper.wrapperEl.removeEventListener('pointerdown', onGestureStart, passiveListener); 17302 swiper.wrapperEl.removeEventListener('pointermove', onGestureChange, activeListenerWithCapture); 17303 ['pointerup', 'pointercancel', 'pointerout'].forEach(eventName => { 17304 swiper.wrapperEl.removeEventListener(eventName, onGestureEnd, passiveListener); 17305 }); 17306 17307 // Move image 17308 swiper.wrapperEl.removeEventListener('pointermove', onTouchMove, activeListenerWithCapture); 17309 } 17310 on('init', () => { 17311 if (swiper.params.zoom.enabled) { 17312 enable(); 17313 } 17314 }); 17315 on('destroy', () => { 17316 disable(); 17317 }); 17318 on('touchStart', (_s, e) => { 17319 if (!swiper.zoom.enabled) return; 17320 onTouchStart(e); 17321 }); 17322 on('touchEnd', (_s, e) => { 17323 if (!swiper.zoom.enabled) return; 17324 onTouchEnd(); 17325 }); 17326 on('doubleTap', (_s, e) => { 17327 if (!swiper.animating && swiper.params.zoom.enabled && swiper.zoom.enabled && swiper.params.zoom.toggle) { 17328 zoomToggle(e); 17329 } 17330 }); 17331 on('transitionEnd', () => { 17332 if (swiper.zoom.enabled && swiper.params.zoom.enabled) { 17333 onTransitionEnd(); 17334 } 17335 }); 17336 on('slideChange', () => { 17337 if (swiper.zoom.enabled && swiper.params.zoom.enabled && swiper.params.cssMode) { 17338 onTransitionEnd(); 17339 } 17340 }); 17341 Object.assign(swiper.zoom, { 17342 enable, 17343 disable, 17344 in: zoomIn, 17345 out: zoomOut, 17346 toggle: zoomToggle 17347 }); 17348} 17349 17350 17351 17352 17353/***/ }), 17354
vendor: 780 bytes, lines 17355-17378
17355/***/ "./node_modules/swiper/shared/classes-to-selector.mjs": 17356/*!************************************************************!*\ 17357 !*** ./node_modules/swiper/shared/classes-to-selector.mjs ***! 17358 \************************************************************/ 17359/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { 17360 17361"use strict"; 17362__webpack_require__.r(__webpack_exports__); 17363/* harmony export */ __webpack_require__.d(__webpack_exports__, { 17364/* harmony export */ c: () => (/* binding */ classesToSelector) 17365/* harmony export */ }); 17366function classesToSelector(classes) { 17367 if (classes === void 0) { 17368 classes = ''; 17369 } 17370 return `.${classes.trim().replace(/([\.:!+\/])/g, '\\$1') // eslint-disable-line 17371 .replace(/ /g, '.')}`; 17372} 17373 17374 17375 17376 17377/***/ }), 17378
vendor: 1,419 bytes, lines 17379-17415
17379/***/ "./node_modules/swiper/shared/create-element-if-not-defined.mjs": 17380/*!**********************************************************************!*\ 17381 !*** ./node_modules/swiper/shared/create-element-if-not-defined.mjs ***! 17382 \**********************************************************************/ 17383/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { 17384 17385"use strict"; 17386__webpack_require__.r(__webpack_exports__); 17387/* harmony export */ __webpack_require__.d(__webpack_exports__, { 17388/* harmony export */ c: () => (/* binding */ createElementIfNotDefined) 17389/* harmony export */ }); 17390/* harmony import */ var _utils_mjs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./utils.mjs */ "./node_modules/swiper/shared/utils.mjs"); 17391 17392 17393function createElementIfNotDefined(swiper, originalParams, params, checkProps) { 17394 if (swiper.params.createElements) { 17395 Object.keys(checkProps).forEach(key => { 17396 if (!params[key] && params.auto === true) { 17397 let element = (0,_utils_mjs__WEBPACK_IMPORTED_MODULE_0__.e)(swiper.el, `.${checkProps[key]}`)[0]; 17398 if (!element) { 17399 element = (0,_utils_mjs__WEBPACK_IMPORTED_MODULE_0__.c)('div', checkProps[key]); 17400 element.className = checkProps[key]; 17401 swiper.el.append(element); 17402 } 17403 params[key] = element; 17404 originalParams[key] = element; 17405 } 17406 }); 17407 } 17408 return params; 17409} 17410 17411 17412 17413 17414/***/ }), 17415
vendor: 1,215 bytes, lines 17416-17445
17416/***/ "./node_modules/swiper/shared/create-shadow.mjs": 17417/*!******************************************************!*\ 17418 !*** ./node_modules/swiper/shared/create-shadow.mjs ***! 17419 \******************************************************/ 17420/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { 17421 17422"use strict"; 17423__webpack_require__.r(__webpack_exports__); 17424/* harmony export */ __webpack_require__.d(__webpack_exports__, { 17425/* harmony export */ c: () => (/* binding */ createShadow) 17426/* harmony export */ }); 17427/* harmony import */ var _utils_mjs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./utils.mjs */ "./node_modules/swiper/shared/utils.mjs"); 17428 17429 17430function createShadow(suffix, slideEl, side) { 17431 const shadowClass = `swiper-slide-shadow${side ? `-${side}` : ''}${suffix ? ` swiper-slide-shadow-${suffix}` : ''}`; 17432 const shadowContainer = (0,_utils_mjs__WEBPACK_IMPORTED_MODULE_0__.l)(slideEl); 17433 let shadowEl = shadowContainer.querySelector(`.${shadowClass.split(' ').join('.')}`); 17434 if (!shadowEl) { 17435 shadowEl = (0,_utils_mjs__WEBPACK_IMPORTED_MODULE_0__.c)('div', shadowClass.split(' ')); 17436 shadowContainer.append(shadowEl); 17437 } 17438 return shadowEl; 17439} 17440 17441 17442 17443 17444/***/ }), 17445
vendor: 2,338 bytes, lines 17446-17518
17446/***/ "./node_modules/swiper/shared/effect-init.mjs": 17447/*!****************************************************!*\ 17448 !*** ./node_modules/swiper/shared/effect-init.mjs ***! 17449 \****************************************************/ 17450/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { 17451 17452"use strict"; 17453__webpack_require__.r(__webpack_exports__); 17454/* harmony export */ __webpack_require__.d(__webpack_exports__, { 17455/* harmony export */ e: () => (/* binding */ effectInit) 17456/* harmony export */ }); 17457function effectInit(params) { 17458 const { 17459 effect, 17460 swiper, 17461 on, 17462 setTranslate, 17463 setTransition, 17464 overwriteParams, 17465 perspective, 17466 recreateShadows, 17467 getEffectParams 17468 } = params; 17469 on('beforeInit', () => { 17470 if (swiper.params.effect !== effect) return; 17471 swiper.classNames.push(`${swiper.params.containerModifierClass}${effect}`); 17472 if (perspective && perspective()) { 17473 swiper.classNames.push(`${swiper.params.containerModifierClass}3d`); 17474 } 17475 const overwriteParamsResult = overwriteParams ? overwriteParams() : {}; 17476 Object.assign(swiper.params, overwriteParamsResult); 17477 Object.assign(swiper.originalParams, overwriteParamsResult); 17478 }); 17479 on('setTranslate', () => { 17480 if (swiper.params.effect !== effect) return; 17481 setTranslate(); 17482 }); 17483 on('setTransition', (_s, duration) => { 17484 if (swiper.params.effect !== effect) return; 17485 setTransition(duration); 17486 }); 17487 on('transitionEnd', () => { 17488 if (swiper.params.effect !== effect) return; 17489 if (recreateShadows) { 17490 if (!getEffectParams || !getEffectParams().slideShadows) return; 17491 // remove shadows 17492 swiper.slides.forEach(slideEl => { 17493 slideEl.querySelectorAll('.swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left').forEach(shadowEl => shadowEl.remove()); 17494 }); 17495 // create new one 17496 recreateShadows(); 17497 } 17498 }); 17499 let requireUpdateOnVirtual; 17500 on('virtualUpdate', () => { 17501 if (swiper.params.effect !== effect) return; 17502 if (!swiper.slides.length) { 17503 requireUpdateOnVirtual = true; 17504 } 17505 requestAnimationFrame(() => { 17506 if (requireUpdateOnVirtual && swiper.slides && swiper.slides.length) { 17507 setTranslate(); 17508 requireUpdateOnVirtual = false; 17509 } 17510 }); 17511 }); 17512} 17513 17514 17515 17516 17517/***/ }), 17518
vendor: 1,008 bytes, lines 17519-17546
17519/***/ "./node_modules/swiper/shared/effect-target.mjs": 17520/*!******************************************************!*\ 17521 !*** ./node_modules/swiper/shared/effect-target.mjs ***! 17522 \******************************************************/ 17523/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { 17524 17525"use strict"; 17526__webpack_require__.r(__webpack_exports__); 17527/* harmony export */ __webpack_require__.d(__webpack_exports__, { 17528/* harmony export */ e: () => (/* binding */ effectTarget) 17529/* harmony export */ }); 17530/* harmony import */ var _utils_mjs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./utils.mjs */ "./node_modules/swiper/shared/utils.mjs"); 17531 17532 17533function effectTarget(effectParams, slideEl) { 17534 const transformEl = (0,_utils_mjs__WEBPACK_IMPORTED_MODULE_0__.l)(slideEl); 17535 if (transformEl !== slideEl) { 17536 transformEl.style.backfaceVisibility = 'hidden'; 17537 transformEl.style['-webkit-backface-visibility'] = 'hidden'; 17538 } 17539 return transformEl; 17540} 17541 17542 17543 17544 17545/***/ }), 17546
vendor: 2,116 bytes, lines 17547-17610
17547/***/ "./node_modules/swiper/shared/effect-virtual-transition-end.mjs": 17548/*!**********************************************************************!*\ 17549 !*** ./node_modules/swiper/shared/effect-virtual-transition-end.mjs ***! 17550 \**********************************************************************/ 17551/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { 17552 17553"use strict"; 17554__webpack_require__.r(__webpack_exports__); 17555/* harmony export */ __webpack_require__.d(__webpack_exports__, { 17556/* harmony export */ e: () => (/* binding */ effectVirtualTransitionEnd) 17557/* harmony export */ }); 17558/* harmony import */ var _utils_mjs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./utils.mjs */ "./node_modules/swiper/shared/utils.mjs"); 17559 17560 17561function effectVirtualTransitionEnd(_ref) { 17562 let { 17563 swiper, 17564 duration, 17565 transformElements, 17566 allSlides 17567 } = _ref; 17568 const { 17569 activeIndex 17570 } = swiper; 17571 const getSlide = el => { 17572 if (!el.parentElement) { 17573 // assume shadow root 17574 const slide = swiper.slides.filter(slideEl => slideEl.shadowRoot && slideEl.shadowRoot === el.parentNode)[0]; 17575 return slide; 17576 } 17577 return el.parentElement; 17578 }; 17579 if (swiper.params.virtualTranslate && duration !== 0) { 17580 let eventTriggered = false; 17581 let transitionEndTarget; 17582 if (allSlides) { 17583 transitionEndTarget = transformElements; 17584 } else { 17585 transitionEndTarget = transformElements.filter(transformEl => { 17586 const el = transformEl.classList.contains('swiper-slide-transform') ? getSlide(transformEl) : transformEl; 17587 return swiper.getSlideIndex(el) === activeIndex; 17588 }); 17589 } 17590 transitionEndTarget.forEach(el => { 17591 (0,_utils_mjs__WEBPACK_IMPORTED_MODULE_0__.j)(el, () => { 17592 if (eventTriggered) return; 17593 if (!swiper || swiper.destroyed) return; 17594 eventTriggered = true; 17595 swiper.animating = false; 17596 const evt = new window.CustomEvent('transitionend', { 17597 bubbles: true, 17598 cancelable: true 17599 }); 17600 swiper.wrapperEl.dispatchEvent(evt); 17601 }); 17602 }); 17603 } 17604} 17605 17606 17607 17608 17609/***/ }), 17610
vendor: 3,334 bytes, lines 17611-17771
17611/***/ "./node_modules/swiper/shared/ssr-window.esm.mjs": 17612/*!*******************************************************!*\ 17613 !*** ./node_modules/swiper/shared/ssr-window.esm.mjs ***! 17614 \*******************************************************/ 17615/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { 17616 17617"use strict"; 17618__webpack_require__.r(__webpack_exports__); 17619/* harmony export */ __webpack_require__.d(__webpack_exports__, { 17620/* harmony export */ a: () => (/* binding */ getWindow), 17621/* harmony export */ g: () => (/* binding */ getDocument) 17622/* harmony export */ }); 17623/** 17624 * SSR Window 4.0.2 17625 * Better handling for window object in SSR environment 17626 * https://github.com/nolimits4web/ssr-window 17627 * 17628 * Copyright 2021, Vladimir Kharlampidi 17629 * 17630 * Licensed under MIT 17631 * 17632 * Released on: December 13, 2021 17633 */ 17634/* eslint-disable no-param-reassign */ 17635function isObject(obj) { 17636 return obj !== null && typeof obj === 'object' && 'constructor' in obj && obj.constructor === Object; 17637} 17638function extend(target, src) { 17639 if (target === void 0) { 17640 target = {}; 17641 } 17642 if (src === void 0) { 17643 src = {}; 17644 } 17645 Object.keys(src).forEach(key => { 17646 if (typeof target[key] === 'undefined') target[key] = src[key];else if (isObject(src[key]) && isObject(target[key]) && Object.keys(src[key]).length > 0) { 17647 extend(target[key], src[key]); 17648 } 17649 }); 17650} 17651const ssrDocument = { 17652 body: {}, 17653 addEventListener() {}, 17654 removeEventListener() {}, 17655 activeElement: { 17656 blur() {}, 17657 nodeName: '' 17658 }, 17659 querySelector() { 17660 return null; 17661 }, 17662 querySelectorAll() { 17663 return []; 17664 }, 17665 getElementById() { 17666 return null; 17667 }, 17668 createEvent() { 17669 return { 17670 initEvent() {} 17671 }; 17672 }, 17673 createElement() { 17674 return { 17675 children: [], 17676 childNodes: [], 17677 style: {}, 17678 setAttribute() {}, 17679 getElementsByTagName() { 17680 return []; 17681 } 17682 }; 17683 }, 17684 createElementNS() { 17685 return {}; 17686 }, 17687 importNode() { 17688 return null; 17689 }, 17690 location: { 17691 hash: '', 17692 host: '', 17693 hostname: '', 17694 href: '', 17695 origin: '', 17696 pathname: '', 17697 protocol: '', 17698 search: '' 17699 } 17700}; 17701function getDocument() { 17702 const doc = typeof document !== 'undefined' ? document : {}; 17703 extend(doc, ssrDocument); 17704 return doc; 17705} 17706const ssrWindow = { 17707 document: ssrDocument, 17708 navigator: { 17709 userAgent: '' 17710 }, 17711 location: { 17712 hash: '', 17713 host: '', 17714 hostname: '', 17715 href: '', 17716 origin: '', 17717 pathname: '', 17718 protocol: '', 17719 search: '' 17720 }, 17721 history: { 17722 replaceState() {}, 17723 pushState() {}, 17724 go() {}, 17725 back() {} 17726 }, 17727 CustomEvent: function CustomEvent() { 17728 return this; 17729 }, 17730 addEventListener() {}, 17731 removeEventListener() {}, 17732 getComputedStyle() { 17733 return { 17734 getPropertyValue() { 17735 return ''; 17736 } 17737 }; 17738 }, 17739 Image() {}, 17740 Date() {}, 17741 screen: {}, 17742 setTimeout() {}, 17743 clearTimeout() {}, 17744 matchMedia() { 17745 return {}; 17746 }, 17747 requestAnimationFrame(callback) { 17748 if (typeof setTimeout === 'undefined') { 17749 callback(); 17750 return null; 17751 } 17752 return setTimeout(callback, 0); 17753 }, 17754 cancelAnimationFrame(id) { 17755 if (typeof setTimeout === 'undefined') { 17756 return; 17757 } 17758 clearTimeout(id); 17759 } 17760}; 17761function getWindow() { 17762 const win = typeof window !== 'undefined' ? window : {}; 17763 extend(win, ssrWindow); 17764 return win; 17765} 17766 17767 17768 17769 17770/***/ }), 17771
vendor: 130,311 bytes, lines 17772-21669
17772/***/ "./node_modules/swiper/shared/swiper-core.mjs": 17773/*!****************************************************!*\ 17774 !*** ./node_modules/swiper/shared/swiper-core.mjs ***! 17775 \****************************************************/ 17776/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { 17777 17778"use strict"; 17779__webpack_require__.r(__webpack_exports__); 17780/* harmony export */ __webpack_require__.d(__webpack_exports__, { 17781/* harmony export */ S: () => (/* binding */ Swiper), 17782/* harmony export */ d: () => (/* binding */ defaults) 17783/* harmony export */ }); 17784/* harmony import */ var _ssr_window_esm_mjs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./ssr-window.esm.mjs */ "./node_modules/swiper/shared/ssr-window.esm.mjs"); 17785/* harmony import */ var _utils_mjs__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./utils.mjs */ "./node_modules/swiper/shared/utils.mjs"); 17786 17787 17788 17789let support; 17790function calcSupport() { 17791 const window = (0,_ssr_window_esm_mjs__WEBPACK_IMPORTED_MODULE_0__.a)(); 17792 const document = (0,_ssr_window_esm_mjs__WEBPACK_IMPORTED_MODULE_0__.g)(); 17793 return { 17794 smoothScroll: document.documentElement && document.documentElement.style && 'scrollBehavior' in document.documentElement.style, 17795 touch: !!('ontouchstart' in window || window.DocumentTouch && document instanceof window.DocumentTouch) 17796 }; 17797} 17798function getSupport() { 17799 if (!support) { 17800 support = calcSupport(); 17801 } 17802 return support; 17803} 17804 17805let deviceCached; 17806function calcDevice(_temp) { 17807 let { 17808 userAgent 17809 } = _temp === void 0 ? {} : _temp; 17810 const support = getSupport(); 17811 const window = (0,_ssr_window_esm_mjs__WEBPACK_IMPORTED_MODULE_0__.a)(); 17812 const platform = window.navigator.platform; 17813 const ua = userAgent || window.navigator.userAgent; 17814 const device = { 17815 ios: false, 17816 android: false 17817 }; 17818 const screenWidth = window.screen.width; 17819 const screenHeight = window.screen.height; 17820 const android = ua.match(/(Android);?[\s\/]+([\d.]+)?/); // eslint-disable-line 17821 let ipad = ua.match(/(iPad).*OS\s([\d_]+)/); 17822 const ipod = ua.match(/(iPod)(.*OS\s([\d_]+))?/); 17823 const iphone = !ipad && ua.match(/(iPhone\sOS|iOS)\s([\d_]+)/); 17824 const windows = platform === 'Win32'; 17825 let macos = platform === 'MacIntel'; 17826 17827 // iPadOs 13 fix 17828 const iPadScreens = ['1024x1366', '1366x1024', '834x1194', '1194x834', '834x1112', '1112x834', '768x1024', '1024x768', '820x1180', '1180x820', '810x1080', '1080x810']; 17829 if (!ipad && macos && support.touch && iPadScreens.indexOf(`${screenWidth}x${screenHeight}`) >= 0) { 17830 ipad = ua.match(/(Version)\/([\d.]+)/); 17831 if (!ipad) ipad = [0, 1, '13_0_0']; 17832 macos = false; 17833 } 17834 17835 // Android 17836 if (android && !windows) { 17837 device.os = 'android'; 17838 device.android = true; 17839 } 17840 if (ipad || iphone || ipod) { 17841 device.os = 'ios'; 17842 device.ios = true; 17843 } 17844 17845 // Export object 17846 return device; 17847} 17848function getDevice(overrides) { 17849 if (overrides === void 0) { 17850 overrides = {}; 17851 } 17852 if (!deviceCached) { 17853 deviceCached = calcDevice(overrides); 17854 } 17855 return deviceCached; 17856} 17857 17858let browser; 17859function calcBrowser() { 17860 const window = (0,_ssr_window_esm_mjs__WEBPACK_IMPORTED_MODULE_0__.a)(); 17861 let needPerspectiveFix = false; 17862 function isSafari() { 17863 const ua = window.navigator.userAgent.toLowerCase(); 17864 return ua.indexOf('safari') >= 0 && ua.indexOf('chrome') < 0 && ua.indexOf('android') < 0; 17865 } 17866 if (isSafari()) { 17867 const ua = String(window.navigator.userAgent); 17868 if (ua.includes('Version/')) { 17869 const [major, minor] = ua.split('Version/')[1].split(' ')[0].split('.').map(num => Number(num)); 17870 needPerspectiveFix = major < 16 || major === 16 && minor < 2; 17871 } 17872 } 17873 return { 17874 isSafari: needPerspectiveFix || isSafari(), 17875 needPerspectiveFix, 17876 isWebView: /(iPhone|iPod|iPad).*AppleWebKit(?!.*Safari)/i.test(window.navigator.userAgent) 17877 }; 17878} 17879function getBrowser() { 17880 if (!browser) { 17881 browser = calcBrowser(); 17882 } 17883 return browser; 17884} 17885 17886function Resize(_ref) { 17887 let { 17888 swiper, 17889 on, 17890 emit 17891 } = _ref; 17892 const window = (0,_ssr_window_esm_mjs__WEBPACK_IMPORTED_MODULE_0__.a)(); 17893 let observer = null; 17894 let animationFrame = null; 17895 const resizeHandler = () => { 17896 if (!swiper || swiper.destroyed || !swiper.initialized) return; 17897 emit('beforeResize'); 17898 emit('resize'); 17899 }; 17900 const createObserver = () => { 17901 if (!swiper || swiper.destroyed || !swiper.initialized) return; 17902 observer = new ResizeObserver(entries => { 17903 animationFrame = window.requestAnimationFrame(() => { 17904 const { 17905 width, 17906 height 17907 } = swiper; 17908 let newWidth = width; 17909 let newHeight = height; 17910 entries.forEach(_ref2 => { 17911 let { 17912 contentBoxSize, 17913 contentRect, 17914 target 17915 } = _ref2; 17916 if (target && target !== swiper.el) return; 17917 newWidth = contentRect ? contentRect.width : (contentBoxSize[0] || contentBoxSize).inlineSize; 17918 newHeight = contentRect ? contentRect.height : (contentBoxSize[0] || contentBoxSize).blockSize; 17919 }); 17920 if (newWidth !== width || newHeight !== height) { 17921 resizeHandler(); 17922 } 17923 }); 17924 }); 17925 observer.observe(swiper.el); 17926 }; 17927 const removeObserver = () => { 17928 if (animationFrame) { 17929 window.cancelAnimationFrame(animationFrame); 17930 } 17931 if (observer && observer.unobserve && swiper.el) { 17932 observer.unobserve(swiper.el); 17933 observer = null; 17934 } 17935 }; 17936 const orientationChangeHandler = () => { 17937 if (!swiper || swiper.destroyed || !swiper.initialized) return; 17938 emit('orientationchange'); 17939 }; 17940 on('init', () => { 17941 if (swiper.params.resizeObserver && typeof window.ResizeObserver !== 'undefined') { 17942 createObserver(); 17943 return; 17944 } 17945 window.addEventListener('resize', resizeHandler); 17946 window.addEventListener('orientationchange', orientationChangeHandler); 17947 }); 17948 on('destroy', () => { 17949 removeObserver(); 17950 window.removeEventListener('resize', resizeHandler); 17951 window.removeEventListener('orientationchange', orientationChangeHandler); 17952 }); 17953} 17954 17955function Observer(_ref) { 17956 let { 17957 swiper, 17958 extendParams, 17959 on, 17960 emit 17961 } = _ref; 17962 const observers = []; 17963 const window = (0,_ssr_window_esm_mjs__WEBPACK_IMPORTED_MODULE_0__.a)(); 17964 const attach = function (target, options) { 17965 if (options === void 0) { 17966 options = {}; 17967 } 17968 const ObserverFunc = window.MutationObserver || window.WebkitMutationObserver; 17969 const observer = new ObserverFunc(mutations => { 17970 // The observerUpdate event should only be triggered 17971 // once despite the number of mutations. Additional 17972 // triggers are redundant and are very costly 17973 if (swiper.__preventObserver__) return; 17974 if (mutations.length === 1) { 17975 emit('observerUpdate', mutations[0]); 17976 return; 17977 } 17978 const observerUpdate = function observerUpdate() { 17979 emit('observerUpdate', mutations[0]); 17980 }; 17981 if (window.requestAnimationFrame) { 17982 window.requestAnimationFrame(observerUpdate); 17983 } else { 17984 window.setTimeout(observerUpdate, 0); 17985 } 17986 }); 17987 observer.observe(target, { 17988 attributes: typeof options.attributes === 'undefined' ? true : options.attributes, 17989 childList: typeof options.childList === 'undefined' ? true : options.childList, 17990 characterData: typeof options.characterData === 'undefined' ? true : options.characterData 17991 }); 17992 observers.push(observer); 17993 }; 17994 const init = () => { 17995 if (!swiper.params.observer) return; 17996 if (swiper.params.observeParents) { 17997 const containerParents = (0,_utils_mjs__WEBPACK_IMPORTED_MODULE_1__.a)(swiper.hostEl); 17998 for (let i = 0; i < containerParents.length; i += 1) { 17999 attach(containerParents[i]); 18000 } 18001 } 18002 // Observe container 18003 attach(swiper.hostEl, { 18004 childList: swiper.params.observeSlideChildren 18005 }); 18006 18007 // Observe wrapper 18008 attach(swiper.wrapperEl, { 18009 attributes: false 18010 }); 18011 }; 18012 const destroy = () => { 18013 observers.forEach(observer => { 18014 observer.disconnect(); 18015 }); 18016 observers.splice(0, observers.length); 18017 }; 18018 extendParams({ 18019 observer: false, 18020 observeParents: false, 18021 observeSlideChildren: false 18022 }); 18023 on('init', init); 18024 on('destroy', destroy); 18025} 18026 18027/* eslint-disable no-underscore-dangle */ 18028 18029var eventsEmitter = { 18030 on(events, handler, priority) { 18031 const self = this; 18032 if (!self.eventsListeners || self.destroyed) return self; 18033 if (typeof handler !== 'function') return self; 18034 const method = priority ? 'unshift' : 'push'; 18035 events.split(' ').forEach(event => { 18036 if (!self.eventsListeners[event]) self.eventsListeners[event] = []; 18037 self.eventsListeners[event][method](handler); 18038 }); 18039 return self; 18040 }, 18041 once(events, handler, priority) { 18042 const self = this; 18043 if (!self.eventsListeners || self.destroyed) return self; 18044 if (typeof handler !== 'function') return self; 18045 function onceHandler() { 18046 self.off(events, onceHandler); 18047 if (onceHandler.__emitterProxy) { 18048 delete onceHandler.__emitterProxy; 18049 } 18050 for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) { 18051 args[_key] = arguments[_key]; 18052 } 18053 handler.apply(self, args); 18054 } 18055 onceHandler.__emitterProxy = handler; 18056 return self.on(events, onceHandler, priority); 18057 }, 18058 onAny(handler, priority) { 18059 const self = this; 18060 if (!self.eventsListeners || self.destroyed) return self; 18061 if (typeof handler !== 'function') return self; 18062 const method = priority ? 'unshift' : 'push'; 18063 if (self.eventsAnyListeners.indexOf(handler) < 0) { 18064 self.eventsAnyListeners[method](handler); 18065 } 18066 return self; 18067 }, 18068 offAny(handler) { 18069 const self = this; 18070 if (!self.eventsListeners || self.destroyed) return self; 18071 if (!self.eventsAnyListeners) return self; 18072 const index = self.eventsAnyListeners.indexOf(handler); 18073 if (index >= 0) { 18074 self.eventsAnyListeners.splice(index, 1); 18075 } 18076 return self; 18077 }, 18078 off(events, handler) { 18079 const self = this; 18080 if (!self.eventsListeners || self.destroyed) return self; 18081 if (!self.eventsListeners) return self; 18082 events.split(' ').forEach(event => { 18083 if (typeof handler === 'undefined') { 18084 self.eventsListeners[event] = []; 18085 } else if (self.eventsListeners[event]) { 18086 self.eventsListeners[event].forEach((eventHandler, index) => { 18087 if (eventHandler === handler || eventHandler.__emitterProxy && eventHandler.__emitterProxy === handler) { 18088 self.eventsListeners[event].splice(index, 1); 18089 } 18090 }); 18091 } 18092 }); 18093 return self; 18094 }, 18095 emit() { 18096 const self = this; 18097 if (!self.eventsListeners || self.destroyed) return self; 18098 if (!self.eventsListeners) return self; 18099 let events; 18100 let data; 18101 let context; 18102 for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) { 18103 args[_key2] = arguments[_key2]; 18104 } 18105 if (typeof args[0] === 'string' || Array.isArray(args[0])) { 18106 events = args[0]; 18107 data = args.slice(1, args.length); 18108 context = self; 18109 } else { 18110 events = args[0].events; 18111 data = args[0].data; 18112 context = args[0].context || self; 18113 } 18114 data.unshift(context); 18115 const eventsArray = Array.isArray(events) ? events : events.split(' '); 18116 eventsArray.forEach(event => { 18117 if (self.eventsAnyListeners && self.eventsAnyListeners.length) { 18118 self.eventsAnyListeners.forEach(eventHandler => { 18119 eventHandler.apply(context, [event, ...data]); 18120 }); 18121 } 18122 if (self.eventsListeners && self.eventsListeners[event]) { 18123 self.eventsListeners[event].forEach(eventHandler => { 18124 eventHandler.apply(context, data); 18125 }); 18126 } 18127 }); 18128 return self; 18129 } 18130}; 18131 18132function updateSize() { 18133 const swiper = this; 18134 let width; 18135 let height; 18136 const el = swiper.el; 18137 if (typeof swiper.params.width !== 'undefined' && swiper.params.width !== null) { 18138 width = swiper.params.width; 18139 } else { 18140 width = el.clientWidth; 18141 } 18142 if (typeof swiper.params.height !== 'undefined' && swiper.params.height !== null) { 18143 height = swiper.params.height; 18144 } else { 18145 height = el.clientHeight; 18146 } 18147 if (width === 0 && swiper.isHorizontal() || height === 0 && swiper.isVertical()) { 18148 return; 18149 } 18150 18151 // Subtract paddings 18152 width = width - parseInt((0,_utils_mjs__WEBPACK_IMPORTED_MODULE_1__.m)(el, 'padding-left') || 0, 10) - parseInt((0,_utils_mjs__WEBPACK_IMPORTED_MODULE_1__.m)(el, 'padding-right') || 0, 10); 18153 height = height - parseInt((0,_utils_mjs__WEBPACK_IMPORTED_MODULE_1__.m)(el, 'padding-top') || 0, 10) - parseInt((0,_utils_mjs__WEBPACK_IMPORTED_MODULE_1__.m)(el, 'padding-bottom') || 0, 10); 18154 if (Number.isNaN(width)) width = 0; 18155 if (Number.isNaN(height)) height = 0; 18156 Object.assign(swiper, { 18157 width, 18158 height, 18159 size: swiper.isHorizontal() ? width : height 18160 }); 18161} 18162 18163function updateSlides() { 18164 const swiper = this; 18165 function getDirectionPropertyValue(node, label) { 18166 return parseFloat(node.getPropertyValue(swiper.getDirectionLabel(label)) || 0); 18167 } 18168 const params = swiper.params; 18169 const { 18170 wrapperEl, 18171 slidesEl, 18172 size: swiperSize, 18173 rtlTranslate: rtl, 18174 wrongRTL 18175 } = swiper; 18176 const isVirtual = swiper.virtual && params.virtual.enabled; 18177 const previousSlidesLength = isVirtual ? swiper.virtual.slides.length : swiper.slides.length; 18178 const slides = (0,_utils_mjs__WEBPACK_IMPORTED_MODULE_1__.e)(slidesEl, `.${swiper.params.slideClass}, swiper-slide`); 18179 const slidesLength = isVirtual ? swiper.virtual.slides.length : slides.length; 18180 let snapGrid = []; 18181 const slidesGrid = []; 18182 const slidesSizesGrid = []; 18183 let offsetBefore = params.slidesOffsetBefore; 18184 if (typeof offsetBefore === 'function') { 18185 offsetBefore = params.slidesOffsetBefore.call(swiper); 18186 } 18187 let offsetAfter = params.slidesOffsetAfter; 18188 if (typeof offsetAfter === 'function') { 18189 offsetAfter = params.slidesOffsetAfter.call(swiper); 18190 } 18191 const previousSnapGridLength = swiper.snapGrid.length; 18192 const previousSlidesGridLength = swiper.slidesGrid.length; 18193 let spaceBetween = params.spaceBetween; 18194 let slidePosition = -offsetBefore; 18195 let prevSlideSize = 0; 18196 let index = 0; 18197 if (typeof swiperSize === 'undefined') { 18198 return; 18199 } 18200 if (typeof spaceBetween === 'string' && spaceBetween.indexOf('%') >= 0) { 18201 spaceBetween = parseFloat(spaceBetween.replace('%', '')) / 100 * swiperSize; 18202 } else if (typeof spaceBetween === 'string') { 18203 spaceBetween = parseFloat(spaceBetween); 18204 } 18205 swiper.virtualSize = -spaceBetween; 18206 18207 // reset margins 18208 slides.forEach(slideEl => { 18209 if (rtl) { 18210 slideEl.style.marginLeft = ''; 18211 } else { 18212 slideEl.style.marginRight = ''; 18213 } 18214 slideEl.style.marginBottom = ''; 18215 slideEl.style.marginTop = ''; 18216 }); 18217 18218 // reset cssMode offsets 18219 if (params.centeredSlides && params.cssMode) { 18220 (0,_utils_mjs__WEBPACK_IMPORTED_MODULE_1__.s)(wrapperEl, '--swiper-centered-offset-before', ''); 18221 (0,_utils_mjs__WEBPACK_IMPORTED_MODULE_1__.s)(wrapperEl, '--swiper-centered-offset-after', ''); 18222 } 18223 const gridEnabled = params.grid && params.grid.rows > 1 && swiper.grid; 18224 if (gridEnabled) { 18225 swiper.grid.initSlides(slides); 18226 } else if (swiper.grid) { 18227 swiper.grid.unsetSlides(); 18228 } 18229 18230 // Calc slides 18231 let slideSize; 18232 const shouldResetSlideSize = params.slidesPerView === 'auto' && params.breakpoints && Object.keys(params.breakpoints).filter(key => { 18233 return typeof params.breakpoints[key].slidesPerView !== 'undefined'; 18234 }).length > 0; 18235 for (let i = 0; i < slidesLength; i += 1) { 18236 slideSize = 0; 18237 let slide; 18238 if (slides[i]) slide = slides[i]; 18239 if (gridEnabled) { 18240 swiper.grid.updateSlide(i, slide, slides); 18241 } 18242 if (slides[i] && (0,_utils_mjs__WEBPACK_IMPORTED_MODULE_1__.m)(slide, 'display') === 'none') continue; // eslint-disable-line 18243 18244 if (params.slidesPerView === 'auto') { 18245 if (shouldResetSlideSize) { 18246 slides[i].style[swiper.getDirectionLabel('width')] = ``; 18247 } 18248 const slideStyles = getComputedStyle(slide); 18249 const currentTransform = slide.style.transform; 18250 const currentWebKitTransform = slide.style.webkitTransform; 18251 if (currentTransform) { 18252 slide.style.transform = 'none'; 18253 } 18254 if (currentWebKitTransform) { 18255 slide.style.webkitTransform = 'none'; 18256 } 18257 if (params.roundLengths) { 18258 slideSize = swiper.isHorizontal() ? (0,_utils_mjs__WEBPACK_IMPORTED_MODULE_1__.f)(slide, 'width', true) : (0,_utils_mjs__WEBPACK_IMPORTED_MODULE_1__.f)(slide, 'height', true); 18259 } else { 18260 // eslint-disable-next-line 18261 const width = getDirectionPropertyValue(slideStyles, 'width'); 18262 const paddingLeft = getDirectionPropertyValue(slideStyles, 'padding-left'); 18263 const paddingRight = getDirectionPropertyValue(slideStyles, 'padding-right'); 18264 const marginLeft = getDirectionPropertyValue(slideStyles, 'margin-left'); 18265 const marginRight = getDirectionPropertyValue(slideStyles, 'margin-right'); 18266 const boxSizing = slideStyles.getPropertyValue('box-sizing'); 18267 if (boxSizing && boxSizing === 'border-box') { 18268 slideSize = width + marginLeft + marginRight; 18269 } else { 18270 const { 18271 clientWidth, 18272 offsetWidth 18273 } = slide; 18274 slideSize = width + paddingLeft + paddingRight + marginLeft + marginRight + (offsetWidth - clientWidth); 18275 } 18276 } 18277 if (currentTransform) { 18278 slide.style.transform = currentTransform; 18279 } 18280 if (currentWebKitTransform) { 18281 slide.style.webkitTransform = currentWebKitTransform; 18282 } 18283 if (params.roundLengths) slideSize = Math.floor(slideSize); 18284 } else { 18285 slideSize = (swiperSize - (params.slidesPerView - 1) * spaceBetween) / params.slidesPerView; 18286 if (params.roundLengths) slideSize = Math.floor(slideSize); 18287 if (slides[i]) { 18288 slides[i].style[swiper.getDirectionLabel('width')] = `${slideSize}px`; 18289 } 18290 } 18291 if (slides[i]) { 18292 slides[i].swiperSlideSize = slideSize; 18293 } 18294 slidesSizesGrid.push(slideSize); 18295 if (params.centeredSlides) { 18296 slidePosition = slidePosition + slideSize / 2 + prevSlideSize / 2 + spaceBetween; 18297 if (prevSlideSize === 0 && i !== 0) slidePosition = slidePosition - swiperSize / 2 - spaceBetween; 18298 if (i === 0) slidePosition = slidePosition - swiperSize / 2 - spaceBetween; 18299 if (Math.abs(slidePosition) < 1 / 1000) slidePosition = 0; 18300 if (params.roundLengths) slidePosition = Math.floor(slidePosition); 18301 if (index % params.slidesPerGroup === 0) snapGrid.push(slidePosition); 18302 slidesGrid.push(slidePosition); 18303 } else { 18304 if (params.roundLengths) slidePosition = Math.floor(slidePosition); 18305 if ((index - Math.min(swiper.params.slidesPerGroupSkip, index)) % swiper.params.slidesPerGroup === 0) snapGrid.push(slidePosition); 18306 slidesGrid.push(slidePosition); 18307 slidePosition = slidePosition + slideSize + spaceBetween; 18308 } 18309 swiper.virtualSize += slideSize + spaceBetween; 18310 prevSlideSize = slideSize; 18311 index += 1; 18312 } 18313 swiper.virtualSize = Math.max(swiper.virtualSize, swiperSize) + offsetAfter; 18314 if (rtl && wrongRTL && (params.effect === 'slide' || params.effect === 'coverflow')) { 18315 wrapperEl.style.width = `${swiper.virtualSize + spaceBetween}px`; 18316 } 18317 if (params.setWrapperSize) { 18318 wrapperEl.style[swiper.getDirectionLabel('width')] = `${swiper.virtualSize + spaceBetween}px`; 18319 } 18320 if (gridEnabled) { 18321 swiper.grid.updateWrapperSize(slideSize, snapGrid); 18322 } 18323 18324 // Remove last grid elements depending on width 18325 if (!params.centeredSlides) { 18326 const newSlidesGrid = []; 18327 for (let i = 0; i < snapGrid.length; i += 1) { 18328 let slidesGridItem = snapGrid[i]; 18329 if (params.roundLengths) slidesGridItem = Math.floor(slidesGridItem); 18330 if (snapGrid[i] <= swiper.virtualSize - swiperSize) { 18331 newSlidesGrid.push(slidesGridItem); 18332 } 18333 } 18334 snapGrid = newSlidesGrid; 18335 if (Math.floor(swiper.virtualSize - swiperSize) - Math.floor(snapGrid[snapGrid.length - 1]) > 1) { 18336 snapGrid.push(swiper.virtualSize - swiperSize); 18337 } 18338 } 18339 if (isVirtual && params.loop) { 18340 const size = slidesSizesGrid[0] + spaceBetween; 18341 if (params.slidesPerGroup > 1) { 18342 const groups = Math.ceil((swiper.virtual.slidesBefore + swiper.virtual.slidesAfter) / params.slidesPerGroup); 18343 const groupSize = size * params.slidesPerGroup; 18344 for (let i = 0; i < groups; i += 1) { 18345 snapGrid.push(snapGrid[snapGrid.length - 1] + groupSize); 18346 } 18347 } 18348 for (let i = 0; i < swiper.virtual.slidesBefore + swiper.virtual.slidesAfter; i += 1) { 18349 if (params.slidesPerGroup === 1) { 18350 snapGrid.push(snapGrid[snapGrid.length - 1] + size); 18351 } 18352 slidesGrid.push(slidesGrid[slidesGrid.length - 1] + size); 18353 swiper.virtualSize += size; 18354 } 18355 } 18356 if (snapGrid.length === 0) snapGrid = [0]; 18357 if (spaceBetween !== 0) { 18358 const key = swiper.isHorizontal() && rtl ? 'marginLeft' : swiper.getDirectionLabel('marginRight'); 18359 slides.filter((_, slideIndex) => { 18360 if (!params.cssMode || params.loop) return true; 18361 if (slideIndex === slides.length - 1) { 18362 return false; 18363 } 18364 return true; 18365 }).forEach(slideEl => { 18366 slideEl.style[key] = `${spaceBetween}px`; 18367 }); 18368 } 18369 if (params.centeredSlides && params.centeredSlidesBounds) { 18370 let allSlidesSize = 0; 18371 slidesSizesGrid.forEach(slideSizeValue => { 18372 allSlidesSize += slideSizeValue + (spaceBetween || 0); 18373 }); 18374 allSlidesSize -= spaceBetween; 18375 const maxSnap = allSlidesSize - swiperSize; 18376 snapGrid = snapGrid.map(snap => { 18377 if (snap <= 0) return -offsetBefore; 18378 if (snap > maxSnap) return maxSnap + offsetAfter; 18379 return snap; 18380 }); 18381 } 18382 if (params.centerInsufficientSlides) { 18383 let allSlidesSize = 0; 18384 slidesSizesGrid.forEach(slideSizeValue => { 18385 allSlidesSize += slideSizeValue + (spaceBetween || 0); 18386 }); 18387 allSlidesSize -= spaceBetween; 18388 if (allSlidesSize < swiperSize) { 18389 const allSlidesOffset = (swiperSize - allSlidesSize) / 2; 18390 snapGrid.forEach((snap, snapIndex) => { 18391 snapGrid[snapIndex] = snap - allSlidesOffset; 18392 }); 18393 slidesGrid.forEach((snap, snapIndex) => { 18394 slidesGrid[snapIndex] = snap + allSlidesOffset; 18395 }); 18396 } 18397 } 18398 Object.assign(swiper, { 18399 slides, 18400 snapGrid, 18401 slidesGrid, 18402 slidesSizesGrid 18403 }); 18404 if (params.centeredSlides && params.cssMode && !params.centeredSlidesBounds) { 18405 (0,_utils_mjs__WEBPACK_IMPORTED_MODULE_1__.s)(wrapperEl, '--swiper-centered-offset-before', `${-snapGrid[0]}px`); 18406 (0,_utils_mjs__WEBPACK_IMPORTED_MODULE_1__.s)(wrapperEl, '--swiper-centered-offset-after', `${swiper.size / 2 - slidesSizesGrid[slidesSizesGrid.length - 1] / 2}px`); 18407 const addToSnapGrid = -swiper.snapGrid[0]; 18408 const addToSlidesGrid = -swiper.slidesGrid[0]; 18409 swiper.snapGrid = swiper.snapGrid.map(v => v + addToSnapGrid); 18410 swiper.slidesGrid = swiper.slidesGrid.map(v => v + addToSlidesGrid); 18411 } 18412 if (slidesLength !== previousSlidesLength) { 18413 swiper.emit('slidesLengthChange'); 18414 } 18415 if (snapGrid.length !== previousSnapGridLength) { 18416 if (swiper.params.watchOverflow) swiper.checkOverflow(); 18417 swiper.emit('snapGridLengthChange'); 18418 } 18419 if (slidesGrid.length !== previousSlidesGridLength) { 18420 swiper.emit('slidesGridLengthChange'); 18421 } 18422 if (params.watchSlidesProgress) { 18423 swiper.updateSlidesOffset(); 18424 } 18425 swiper.emit('slidesUpdated'); 18426 if (!isVirtual && !params.cssMode && (params.effect === 'slide' || params.effect === 'fade')) { 18427 const backFaceHiddenClass = `${params.containerModifierClass}backface-hidden`; 18428 const hasClassBackfaceClassAdded = swiper.el.classList.contains(backFaceHiddenClass); 18429 if (slidesLength <= params.maxBackfaceHiddenSlides) { 18430 if (!hasClassBackfaceClassAdded) swiper.el.classList.add(backFaceHiddenClass); 18431 } else if (hasClassBackfaceClassAdded) { 18432 swiper.el.classList.remove(backFaceHiddenClass); 18433 } 18434 } 18435} 18436 18437function updateAutoHeight(speed) { 18438 const swiper = this; 18439 const activeSlides = []; 18440 const isVirtual = swiper.virtual && swiper.params.virtual.enabled; 18441 let newHeight = 0; 18442 let i; 18443 if (typeof speed === 'number') { 18444 swiper.setTransition(speed); 18445 } else if (speed === true) { 18446 swiper.setTransition(swiper.params.speed); 18447 } 18448 const getSlideByIndex = index => { 18449 if (isVirtual) { 18450 return swiper.slides[swiper.getSlideIndexByData(index)]; 18451 } 18452 return swiper.slides[index]; 18453 }; 18454 // Find slides currently in view 18455 if (swiper.params.slidesPerView !== 'auto' && swiper.params.slidesPerView > 1) { 18456 if (swiper.params.centeredSlides) { 18457 (swiper.visibleSlides || []).forEach(slide => { 18458 activeSlides.push(slide); 18459 }); 18460 } else { 18461 for (i = 0; i < Math.ceil(swiper.params.slidesPerView); i += 1) { 18462 const index = swiper.activeIndex + i; 18463 if (index > swiper.slides.length && !isVirtual) break; 18464 activeSlides.push(getSlideByIndex(index)); 18465 } 18466 } 18467 } else { 18468 activeSlides.push(getSlideByIndex(swiper.activeIndex)); 18469 } 18470 18471 // Find new height from highest slide in view 18472 for (i = 0; i < activeSlides.length; i += 1) { 18473 if (typeof activeSlides[i] !== 'undefined') { 18474 const height = activeSlides[i].offsetHeight; 18475 newHeight = height > newHeight ? height : newHeight; 18476 } 18477 } 18478 18479 // Update Height 18480 if (newHeight || newHeight === 0) swiper.wrapperEl.style.height = `${newHeight}px`; 18481} 18482 18483function updateSlidesOffset() { 18484 const swiper = this; 18485 const slides = swiper.slides; 18486 // eslint-disable-next-line 18487 const minusOffset = swiper.isElement ? swiper.isHorizontal() ? swiper.wrapperEl.offsetLeft : swiper.wrapperEl.offsetTop : 0; 18488 for (let i = 0; i < slides.length; i += 1) { 18489 slides[i].swiperSlideOffset = (swiper.isHorizontal() ? slides[i].offsetLeft : slides[i].offsetTop) - minusOffset - swiper.cssOverflowAdjustment(); 18490 } 18491} 18492 18493function updateSlidesProgress(translate) { 18494 if (translate === void 0) { 18495 translate = this && this.translate || 0; 18496 } 18497 const swiper = this; 18498 const params = swiper.params; 18499 const { 18500 slides, 18501 rtlTranslate: rtl, 18502 snapGrid 18503 } = swiper; 18504 if (slides.length === 0) return; 18505 if (typeof slides[0].swiperSlideOffset === 'undefined') swiper.updateSlidesOffset(); 18506 let offsetCenter = -translate; 18507 if (rtl) offsetCenter = translate; 18508 18509 // Visible Slides 18510 slides.forEach(slideEl => { 18511 slideEl.classList.remove(params.slideVisibleClass, params.slideFullyVisibleClass); 18512 }); 18513 swiper.visibleSlidesIndexes = []; 18514 swiper.visibleSlides = []; 18515 let spaceBetween = params.spaceBetween; 18516 if (typeof spaceBetween === 'string' && spaceBetween.indexOf('%') >= 0) { 18517 spaceBetween = parseFloat(spaceBetween.replace('%', '')) / 100 * swiper.size; 18518 } else if (typeof spaceBetween === 'string') { 18519 spaceBetween = parseFloat(spaceBetween); 18520 } 18521 for (let i = 0; i < slides.length; i += 1) { 18522 const slide = slides[i]; 18523 let slideOffset = slide.swiperSlideOffset; 18524 if (params.cssMode && params.centeredSlides) { 18525 slideOffset -= slides[0].swiperSlideOffset; 18526 } 18527 const slideProgress = (offsetCenter + (params.centeredSlides ? swiper.minTranslate() : 0) - slideOffset) / (slide.swiperSlideSize + spaceBetween); 18528 const originalSlideProgress = (offsetCenter - snapGrid[0] + (params.centeredSlides ? swiper.minTranslate() : 0) - slideOffset) / (slide.swiperSlideSize + spaceBetween); 18529 const slideBefore = -(offsetCenter - slideOffset); 18530 const slideAfter = slideBefore + swiper.slidesSizesGrid[i]; 18531 const isFullyVisible = slideBefore >= 0 && slideBefore <= swiper.size - swiper.slidesSizesGrid[i]; 18532 const isVisible = slideBefore >= 0 && slideBefore < swiper.size - 1 || slideAfter > 1 && slideAfter <= swiper.size || slideBefore <= 0 && slideAfter >= swiper.size; 18533 if (isVisible) { 18534 swiper.visibleSlides.push(slide); 18535 swiper.visibleSlidesIndexes.push(i); 18536 slides[i].classList.add(params.slideVisibleClass); 18537 } 18538 if (isFullyVisible) { 18539 slides[i].classList.add(params.slideFullyVisibleClass); 18540 } 18541 slide.progress = rtl ? -slideProgress : slideProgress; 18542 slide.originalProgress = rtl ? -originalSlideProgress : originalSlideProgress; 18543 } 18544} 18545 18546function updateProgress(translate) { 18547 const swiper = this; 18548 if (typeof translate === 'undefined') { 18549 const multiplier = swiper.rtlTranslate ? -1 : 1; 18550 // eslint-disable-next-line 18551 translate = swiper && swiper.translate && swiper.translate * multiplier || 0; 18552 } 18553 const params = swiper.params; 18554 const translatesDiff = swiper.maxTranslate() - swiper.minTranslate(); 18555 let { 18556 progress, 18557 isBeginning, 18558 isEnd, 18559 progressLoop 18560 } = swiper; 18561 const wasBeginning = isBeginning; 18562 const wasEnd = isEnd; 18563 if (translatesDiff === 0) { 18564 progress = 0; 18565 isBeginning = true; 18566 isEnd = true; 18567 } else { 18568 progress = (translate - swiper.minTranslate()) / translatesDiff; 18569 const isBeginningRounded = Math.abs(translate - swiper.minTranslate()) < 1; 18570 const isEndRounded = Math.abs(translate - swiper.maxTranslate()) < 1; 18571 isBeginning = isBeginningRounded || progress <= 0; 18572 isEnd = isEndRounded || progress >= 1; 18573 if (isBeginningRounded) progress = 0; 18574 if (isEndRounded) progress = 1; 18575 } 18576 if (params.loop) { 18577 const firstSlideIndex = swiper.getSlideIndexByData(0); 18578 const lastSlideIndex = swiper.getSlideIndexByData(swiper.slides.length - 1); 18579 const firstSlideTranslate = swiper.slidesGrid[firstSlideIndex]; 18580 const lastSlideTranslate = swiper.slidesGrid[lastSlideIndex]; 18581 const translateMax = swiper.slidesGrid[swiper.slidesGrid.length - 1]; 18582 const translateAbs = Math.abs(translate); 18583 if (translateAbs >= firstSlideTranslate) { 18584 progressLoop = (translateAbs - firstSlideTranslate) / translateMax; 18585 } else { 18586 progressLoop = (translateAbs + translateMax - lastSlideTranslate) / translateMax; 18587 } 18588 if (progressLoop > 1) progressLoop -= 1; 18589 } 18590 Object.assign(swiper, { 18591 progress, 18592 progressLoop, 18593 isBeginning, 18594 isEnd 18595 }); 18596 if (params.watchSlidesProgress || params.centeredSlides && params.autoHeight) swiper.updateSlidesProgress(translate); 18597 if (isBeginning && !wasBeginning) { 18598 swiper.emit('reachBeginning toEdge'); 18599 } 18600 if (isEnd && !wasEnd) { 18601 swiper.emit('reachEnd toEdge'); 18602 } 18603 if (wasBeginning && !isBeginning || wasEnd && !isEnd) { 18604 swiper.emit('fromEdge'); 18605 } 18606 swiper.emit('progress', progress); 18607} 18608 18609function updateSlidesClasses() { 18610 const swiper = this; 18611 const { 18612 slides, 18613 params, 18614 slidesEl, 18615 activeIndex 18616 } = swiper; 18617 const isVirtual = swiper.virtual && params.virtual.enabled; 18618 const gridEnabled = swiper.grid && params.grid && params.grid.rows > 1; 18619 const getFilteredSlide = selector => { 18620 return (0,_utils_mjs__WEBPACK_IMPORTED_MODULE_1__.e)(slidesEl, `.${params.slideClass}${selector}, swiper-slide${selector}`)[0]; 18621 }; 18622 slides.forEach(slideEl => { 18623 slideEl.classList.remove(params.slideActiveClass, params.slideNextClass, params.slidePrevClass); 18624 }); 18625 let activeSlide; 18626 let prevSlide; 18627 let nextSlide; 18628 if (isVirtual) { 18629 if (params.loop) { 18630 let slideIndex = activeIndex - swiper.virtual.slidesBefore; 18631 if (slideIndex < 0) slideIndex = swiper.virtual.slides.length + slideIndex; 18632 if (slideIndex >= swiper.virtual.slides.length) slideIndex -= swiper.virtual.slides.length; 18633 activeSlide = getFilteredSlide(`[data-swiper-slide-index="${slideIndex}"]`); 18634 } else { 18635 activeSlide = getFilteredSlide(`[data-swiper-slide-index="${activeIndex}"]`); 18636 } 18637 } else { 18638 if (gridEnabled) { 18639 activeSlide = slides.filter(slideEl => slideEl.column === activeIndex)[0]; 18640 nextSlide = slides.filter(slideEl => slideEl.column === activeIndex + 1)[0]; 18641 prevSlide = slides.filter(slideEl => slideEl.column === activeIndex - 1)[0]; 18642 } else { 18643 activeSlide = slides[activeIndex]; 18644 } 18645 } 18646 if (activeSlide) { 18647 // Active classes 18648 activeSlide.classList.add(params.slideActiveClass); 18649 if (gridEnabled) { 18650 if (nextSlide) { 18651 nextSlide.classList.add(params.slideNextClass); 18652 } 18653 if (prevSlide) { 18654 prevSlide.classList.add(params.slidePrevClass); 18655 } 18656 } else { 18657 // Next Slide 18658 nextSlide = (0,_utils_mjs__WEBPACK_IMPORTED_MODULE_1__.o)(activeSlide, `.${params.slideClass}, swiper-slide`)[0]; 18659 if (params.loop && !nextSlide) { 18660 nextSlide = slides[0]; 18661 } 18662 if (nextSlide) { 18663 nextSlide.classList.add(params.slideNextClass); 18664 } 18665 18666 // Prev Slide 18667 prevSlide = (0,_utils_mjs__WEBPACK_IMPORTED_MODULE_1__.p)(activeSlide, `.${params.slideClass}, swiper-slide`)[0]; 18668 if (params.loop && !prevSlide === 0) { 18669 prevSlide = slides[slides.length - 1]; 18670 } 18671 if (prevSlide) { 18672 prevSlide.classList.add(params.slidePrevClass); 18673 } 18674 } 18675 } 18676 swiper.emitSlidesClasses(); 18677} 18678 18679const processLazyPreloader = (swiper, imageEl) => { 18680 if (!swiper || swiper.destroyed || !swiper.params) return; 18681 const slideSelector = () => swiper.isElement ? `swiper-slide` : `.${swiper.params.slideClass}`; 18682 const slideEl = imageEl.closest(slideSelector()); 18683 if (slideEl) { 18684 let lazyEl = slideEl.querySelector(`.${swiper.params.lazyPreloaderClass}`); 18685 if (!lazyEl && swiper.isElement) { 18686 if (slideEl.shadowRoot) { 18687 lazyEl = slideEl.shadowRoot.querySelector(`.${swiper.params.lazyPreloaderClass}`); 18688 } else { 18689 // init later 18690 requestAnimationFrame(() => { 18691 if (slideEl.shadowRoot) { 18692 lazyEl = slideEl.shadowRoot.querySelector(`.${swiper.params.lazyPreloaderClass}`); 18693 if (lazyEl) lazyEl.remove(); 18694 } 18695 }); 18696 } 18697 } 18698 if (lazyEl) lazyEl.remove(); 18699 } 18700}; 18701const unlazy = (swiper, index) => { 18702 if (!swiper.slides[index]) return; 18703 const imageEl = swiper.slides[index].querySelector('[loading="lazy"]'); 18704 if (imageEl) imageEl.removeAttribute('loading'); 18705}; 18706const preload = swiper => { 18707 if (!swiper || swiper.destroyed || !swiper.params) return; 18708 let amount = swiper.params.lazyPreloadPrevNext; 18709 const len = swiper.slides.length; 18710 if (!len || !amount || amount < 0) return; 18711 amount = Math.min(amount, len); 18712 const slidesPerView = swiper.params.slidesPerView === 'auto' ? swiper.slidesPerViewDynamic() : Math.ceil(swiper.params.slidesPerView); 18713 const activeIndex = swiper.activeIndex; 18714 if (swiper.params.grid && swiper.params.grid.rows > 1) { 18715 const activeColumn = activeIndex; 18716 const preloadColumns = [activeColumn - amount]; 18717 preloadColumns.push(...Array.from({ 18718 length: amount 18719 }).map((_, i) => { 18720 return activeColumn + slidesPerView + i; 18721 })); 18722 swiper.slides.forEach((slideEl, i) => { 18723 if (preloadColumns.includes(slideEl.column)) unlazy(swiper, i); 18724 }); 18725 return; 18726 } 18727 const slideIndexLastInView = activeIndex + slidesPerView - 1; 18728 if (swiper.params.rewind || swiper.params.loop) { 18729 for (let i = activeIndex - amount; i <= slideIndexLastInView + amount; i += 1) { 18730 const realIndex = (i % len + len) % len; 18731 if (realIndex < activeIndex || realIndex > slideIndexLastInView) unlazy(swiper, realIndex); 18732 } 18733 } else { 18734 for (let i = Math.max(activeIndex - amount, 0); i <= Math.min(slideIndexLastInView + amount, len - 1); i += 1) { 18735 if (i !== activeIndex && (i > slideIndexLastInView || i < activeIndex)) { 18736 unlazy(swiper, i); 18737 } 18738 } 18739 } 18740}; 18741 18742function getActiveIndexByTranslate(swiper) { 18743 const { 18744 slidesGrid, 18745 params 18746 } = swiper; 18747 const translate = swiper.rtlTranslate ? swiper.translate : -swiper.translate; 18748 let activeIndex; 18749 for (let i = 0; i < slidesGrid.length; i += 1) { 18750 if (typeof slidesGrid[i + 1] !== 'undefined') { 18751 if (translate >= slidesGrid[i] && translate < slidesGrid[i + 1] - (slidesGrid[i + 1] - slidesGrid[i]) / 2) { 18752 activeIndex = i; 18753 } else if (translate >= slidesGrid[i] && translate < slidesGrid[i + 1]) { 18754 activeIndex = i + 1; 18755 } 18756 } else if (translate >= slidesGrid[i]) { 18757 activeIndex = i; 18758 } 18759 } 18760 // Normalize slideIndex 18761 if (params.normalizeSlideIndex) { 18762 if (activeIndex < 0 || typeof activeIndex === 'undefined') activeIndex = 0; 18763 } 18764 return activeIndex; 18765} 18766function updateActiveIndex(newActiveIndex) { 18767 const swiper = this; 18768 const translate = swiper.rtlTranslate ? swiper.translate : -swiper.translate; 18769 const { 18770 snapGrid, 18771 params, 18772 activeIndex: previousIndex, 18773 realIndex: previousRealIndex, 18774 snapIndex: previousSnapIndex 18775 } = swiper; 18776 let activeIndex = newActiveIndex; 18777 let snapIndex; 18778 const getVirtualRealIndex = aIndex => { 18779 let realIndex = aIndex - swiper.virtual.slidesBefore; 18780 if (realIndex < 0) { 18781 realIndex = swiper.virtual.slides.length + realIndex; 18782 } 18783 if (realIndex >= swiper.virtual.slides.length) { 18784 realIndex -= swiper.virtual.slides.length; 18785 } 18786 return realIndex; 18787 }; 18788 if (typeof activeIndex === 'undefined') { 18789 activeIndex = getActiveIndexByTranslate(swiper); 18790 } 18791 if (snapGrid.indexOf(translate) >= 0) { 18792 snapIndex = snapGrid.indexOf(translate); 18793 } else { 18794 const skip = Math.min(params.slidesPerGroupSkip, activeIndex); 18795 snapIndex = skip + Math.floor((activeIndex - skip) / params.slidesPerGroup); 18796 } 18797 if (snapIndex >= snapGrid.length) snapIndex = snapGrid.length - 1; 18798 if (activeIndex === previousIndex && !swiper.params.loop) { 18799 if (snapIndex !== previousSnapIndex) { 18800 swiper.snapIndex = snapIndex; 18801 swiper.emit('snapIndexChange'); 18802 } 18803 return; 18804 } 18805 if (activeIndex === previousIndex && swiper.params.loop && swiper.virtual && swiper.params.virtual.enabled) { 18806 swiper.realIndex = getVirtualRealIndex(activeIndex); 18807 return; 18808 } 18809 const gridEnabled = swiper.grid && params.grid && params.grid.rows > 1; 18810 18811 // Get real index 18812 let realIndex; 18813 if (swiper.virtual && params.virtual.enabled && params.loop) { 18814 realIndex = getVirtualRealIndex(activeIndex); 18815 } else if (gridEnabled) { 18816 const firstSlideInColumn = swiper.slides.filter(slideEl => slideEl.column === activeIndex)[0]; 18817 let activeSlideIndex = parseInt(firstSlideInColumn.getAttribute('data-swiper-slide-index'), 10); 18818 if (Number.isNaN(activeSlideIndex)) { 18819 activeSlideIndex = Math.max(swiper.slides.indexOf(firstSlideInColumn), 0); 18820 } 18821 realIndex = Math.floor(activeSlideIndex / params.grid.rows); 18822 } else if (swiper.slides[activeIndex]) { 18823 const slideIndex = swiper.slides[activeIndex].getAttribute('data-swiper-slide-index'); 18824 if (slideIndex) { 18825 realIndex = parseInt(slideIndex, 10); 18826 } else { 18827 realIndex = activeIndex; 18828 } 18829 } else { 18830 realIndex = activeIndex; 18831 } 18832 Object.assign(swiper, { 18833 previousSnapIndex, 18834 snapIndex, 18835 previousRealIndex, 18836 realIndex, 18837 previousIndex, 18838 activeIndex 18839 }); 18840 if (swiper.initialized) { 18841 preload(swiper); 18842 } 18843 swiper.emit('activeIndexChange'); 18844 swiper.emit('snapIndexChange'); 18845 if (swiper.initialized || swiper.params.runCallbacksOnInit) { 18846 if (previousRealIndex !== realIndex) { 18847 swiper.emit('realIndexChange'); 18848 } 18849 swiper.emit('slideChange'); 18850 } 18851} 18852 18853function updateClickedSlide(el, path) { 18854 const swiper = this; 18855 const params = swiper.params; 18856 let slide = el.closest(`.${params.slideClass}, swiper-slide`); 18857 if (!slide && swiper.isElement && path && path.length > 1 && path.includes(el)) { 18858 [...path.slice(path.indexOf(el) + 1, path.length)].forEach(pathEl => { 18859 if (!slide && pathEl.matches && pathEl.matches(`.${params.slideClass}, swiper-slide`)) { 18860 slide = pathEl; 18861 } 18862 }); 18863 } 18864 let slideFound = false; 18865 let slideIndex; 18866 if (slide) { 18867 for (let i = 0; i < swiper.slides.length; i += 1) { 18868 if (swiper.slides[i] === slide) { 18869 slideFound = true; 18870 slideIndex = i; 18871 break; 18872 } 18873 } 18874 } 18875 if (slide && slideFound) { 18876 swiper.clickedSlide = slide; 18877 if (swiper.virtual && swiper.params.virtual.enabled) { 18878 swiper.clickedIndex = parseInt(slide.getAttribute('data-swiper-slide-index'), 10); 18879 } else { 18880 swiper.clickedIndex = slideIndex; 18881 } 18882 } else { 18883 swiper.clickedSlide = undefined; 18884 swiper.clickedIndex = undefined; 18885 return; 18886 } 18887 if (params.slideToClickedSlide && swiper.clickedIndex !== undefined && swiper.clickedIndex !== swiper.activeIndex) { 18888 swiper.slideToClickedSlide(); 18889 } 18890} 18891 18892var update = { 18893 updateSize, 18894 updateSlides, 18895 updateAutoHeight, 18896 updateSlidesOffset, 18897 updateSlidesProgress, 18898 updateProgress, 18899 updateSlidesClasses, 18900 updateActiveIndex, 18901 updateClickedSlide 18902}; 18903 18904function getSwiperTranslate(axis) { 18905 if (axis === void 0) { 18906 axis = this.isHorizontal() ? 'x' : 'y'; 18907 } 18908 const swiper = this; 18909 const { 18910 params, 18911 rtlTranslate: rtl, 18912 translate, 18913 wrapperEl 18914 } = swiper; 18915 if (params.virtualTranslate) { 18916 return rtl ? -translate : translate; 18917 } 18918 if (params.cssMode) { 18919 return translate; 18920 } 18921 let currentTranslate = (0,_utils_mjs__WEBPACK_IMPORTED_MODULE_1__.i)(wrapperEl, axis); 18922 currentTranslate += swiper.cssOverflowAdjustment(); 18923 if (rtl) currentTranslate = -currentTranslate; 18924 return currentTranslate || 0; 18925} 18926 18927function setTranslate(translate, byController) { 18928 const swiper = this; 18929 const { 18930 rtlTranslate: rtl, 18931 params, 18932 wrapperEl, 18933 progress 18934 } = swiper; 18935 let x = 0; 18936 let y = 0; 18937 const z = 0; 18938 if (swiper.isHorizontal()) { 18939 x = rtl ? -translate : translate; 18940 } else { 18941 y = translate; 18942 } 18943 if (params.roundLengths) { 18944 x = Math.floor(x); 18945 y = Math.floor(y); 18946 } 18947 swiper.previousTranslate = swiper.translate; 18948 swiper.translate = swiper.isHorizontal() ? x : y; 18949 if (params.cssMode) { 18950 wrapperEl[swiper.isHorizontal() ? 'scrollLeft' : 'scrollTop'] = swiper.isHorizontal() ? -x : -y; 18951 } else if (!params.virtualTranslate) { 18952 if (swiper.isHorizontal()) { 18953 x -= swiper.cssOverflowAdjustment(); 18954 } else { 18955 y -= swiper.cssOverflowAdjustment(); 18956 } 18957 wrapperEl.style.transform = `translate3d(${x}px, ${y}px, ${z}px)`; 18958 } 18959 18960 // Check if we need to update progress 18961 let newProgress; 18962 const translatesDiff = swiper.maxTranslate() - swiper.minTranslate(); 18963 if (translatesDiff === 0) { 18964 newProgress = 0; 18965 } else { 18966 newProgress = (translate - swiper.minTranslate()) / translatesDiff; 18967 } 18968 if (newProgress !== progress) { 18969 swiper.updateProgress(translate); 18970 } 18971 swiper.emit('setTranslate', swiper.translate, byController); 18972} 18973 18974function minTranslate() { 18975 return -this.snapGrid[0]; 18976} 18977 18978function maxTranslate() { 18979 return -this.snapGrid[this.snapGrid.length - 1]; 18980} 18981 18982function translateTo(translate, speed, runCallbacks, translateBounds, internal) { 18983 if (translate === void 0) { 18984 translate = 0; 18985 } 18986 if (speed === void 0) { 18987 speed = this.params.speed; 18988 } 18989 if (runCallbacks === void 0) { 18990 runCallbacks = true; 18991 } 18992 if (translateBounds === void 0) { 18993 translateBounds = true; 18994 } 18995 const swiper = this; 18996 const { 18997 params, 18998 wrapperEl 18999 } = swiper; 19000 if (swiper.animating && params.preventInteractionOnTransition) { 19001 return false; 19002 } 19003 const minTranslate = swiper.minTranslate(); 19004 const maxTranslate = swiper.maxTranslate(); 19005 let newTranslate; 19006 if (translateBounds && translate > minTranslate) newTranslate = minTranslate;else if (translateBounds && translate < maxTranslate) newTranslate = maxTranslate;else newTranslate = translate; 19007 19008 // Update progress 19009 swiper.updateProgress(newTranslate); 19010 if (params.cssMode) { 19011 const isH = swiper.isHorizontal(); 19012 if (speed === 0) { 19013 wrapperEl[isH ? 'scrollLeft' : 'scrollTop'] = -newTranslate; 19014 } else { 19015 if (!swiper.support.smoothScroll) { 19016 (0,_utils_mjs__WEBPACK_IMPORTED_MODULE_1__.q)({ 19017 swiper, 19018 targetPosition: -newTranslate, 19019 side: isH ? 'left' : 'top' 19020 }); 19021 return true; 19022 } 19023 wrapperEl.scrollTo({ 19024 [isH ? 'left' : 'top']: -newTranslate, 19025 behavior: 'smooth' 19026 }); 19027 } 19028 return true; 19029 } 19030 if (speed === 0) { 19031 swiper.setTransition(0); 19032 swiper.setTranslate(newTranslate); 19033 if (runCallbacks) { 19034 swiper.emit('beforeTransitionStart', speed, internal); 19035 swiper.emit('transitionEnd'); 19036 } 19037 } else { 19038 swiper.setTransition(speed); 19039 swiper.setTranslate(newTranslate); 19040 if (runCallbacks) { 19041 swiper.emit('beforeTransitionStart', speed, internal); 19042 swiper.emit('transitionStart'); 19043 } 19044 if (!swiper.animating) { 19045 swiper.animating = true; 19046 if (!swiper.onTranslateToWrapperTransitionEnd) { 19047 swiper.onTranslateToWrapperTransitionEnd = function transitionEnd(e) { 19048 if (!swiper || swiper.destroyed) return; 19049 if (e.target !== this) return; 19050 swiper.wrapperEl.removeEventListener('transitionend', swiper.onTranslateToWrapperTransitionEnd); 19051 swiper.onTranslateToWrapperTransitionEnd = null; 19052 delete swiper.onTranslateToWrapperTransitionEnd; 19053 if (runCallbacks) { 19054 swiper.emit('transitionEnd'); 19055 } 19056 }; 19057 } 19058 swiper.wrapperEl.addEventListener('transitionend', swiper.onTranslateToWrapperTransitionEnd); 19059 } 19060 } 19061 return true; 19062} 19063 19064var translate = { 19065 getTranslate: getSwiperTranslate, 19066 setTranslate, 19067 minTranslate, 19068 maxTranslate, 19069 translateTo 19070}; 19071 19072function setTransition(duration, byController) { 19073 const swiper = this; 19074 if (!swiper.params.cssMode) { 19075 swiper.wrapperEl.style.transitionDuration = `${duration}ms`; 19076 swiper.wrapperEl.style.transitionDelay = duration === 0 ? `0ms` : ''; 19077 } 19078 swiper.emit('setTransition', duration, byController); 19079} 19080 19081function transitionEmit(_ref) { 19082 let { 19083 swiper, 19084 runCallbacks, 19085 direction, 19086 step 19087 } = _ref; 19088 const { 19089 activeIndex, 19090 previousIndex 19091 } = swiper; 19092 let dir = direction; 19093 if (!dir) { 19094 if (activeIndex > previousIndex) dir = 'next';else if (activeIndex < previousIndex) dir = 'prev';else dir = 'reset'; 19095 } 19096 swiper.emit(`transition${step}`); 19097 if (runCallbacks && activeIndex !== previousIndex) { 19098 if (dir === 'reset') { 19099 swiper.emit(`slideResetTransition${step}`); 19100 return; 19101 } 19102 swiper.emit(`slideChangeTransition${step}`); 19103 if (dir === 'next') { 19104 swiper.emit(`slideNextTransition${step}`); 19105 } else { 19106 swiper.emit(`slidePrevTransition${step}`); 19107 } 19108 } 19109} 19110 19111function transitionStart(runCallbacks, direction) { 19112 if (runCallbacks === void 0) { 19113 runCallbacks = true; 19114 } 19115 const swiper = this; 19116 const { 19117 params 19118 } = swiper; 19119 if (params.cssMode) return; 19120 if (params.autoHeight) { 19121 swiper.updateAutoHeight(); 19122 } 19123 transitionEmit({ 19124 swiper, 19125 runCallbacks, 19126 direction, 19127 step: 'Start' 19128 }); 19129} 19130 19131function transitionEnd(runCallbacks, direction) { 19132 if (runCallbacks === void 0) { 19133 runCallbacks = true; 19134 } 19135 const swiper = this; 19136 const { 19137 params 19138 } = swiper; 19139 swiper.animating = false; 19140 if (params.cssMode) return; 19141 swiper.setTransition(0); 19142 transitionEmit({ 19143 swiper, 19144 runCallbacks, 19145 direction, 19146 step: 'End' 19147 }); 19148} 19149 19150var transition = { 19151 setTransition, 19152 transitionStart, 19153 transitionEnd 19154}; 19155 19156function slideTo(index, speed, runCallbacks, internal, initial) { 19157 if (index === void 0) { 19158 index = 0; 19159 } 19160 if (speed === void 0) { 19161 speed = this.params.speed; 19162 } 19163 if (runCallbacks === void 0) { 19164 runCallbacks = true; 19165 } 19166 if (typeof index === 'string') { 19167 index = parseInt(index, 10); 19168 } 19169 const swiper = this; 19170 let slideIndex = index; 19171 if (slideIndex < 0) slideIndex = 0; 19172 const { 19173 params, 19174 snapGrid, 19175 slidesGrid, 19176 previousIndex, 19177 activeIndex, 19178 rtlTranslate: rtl, 19179 wrapperEl, 19180 enabled 19181 } = swiper; 19182 if (swiper.animating && params.preventInteractionOnTransition || !enabled && !internal && !initial) { 19183 return false; 19184 } 19185 const skip = Math.min(swiper.params.slidesPerGroupSkip, slideIndex); 19186 let snapIndex = skip + Math.floor((slideIndex - skip) / swiper.params.slidesPerGroup); 19187 if (snapIndex >= snapGrid.length) snapIndex = snapGrid.length - 1; 19188 const translate = -snapGrid[snapIndex]; 19189 // Normalize slideIndex 19190 if (params.normalizeSlideIndex) { 19191 for (let i = 0; i < slidesGrid.length; i += 1) { 19192 const normalizedTranslate = -Math.floor(translate * 100); 19193 const normalizedGrid = Math.floor(slidesGrid[i] * 100); 19194 const normalizedGridNext = Math.floor(slidesGrid[i + 1] * 100); 19195 if (typeof slidesGrid[i + 1] !== 'undefined') { 19196 if (normalizedTranslate >= normalizedGrid && normalizedTranslate < normalizedGridNext - (normalizedGridNext - normalizedGrid) / 2) { 19197 slideIndex = i; 19198 } else if (normalizedTranslate >= normalizedGrid && normalizedTranslate < normalizedGridNext) { 19199 slideIndex = i + 1; 19200 } 19201 } else if (normalizedTranslate >= normalizedGrid) { 19202 slideIndex = i; 19203 } 19204 } 19205 } 19206 // Directions locks 19207 if (swiper.initialized && slideIndex !== activeIndex) { 19208 if (!swiper.allowSlideNext && (rtl ? translate > swiper.translate && translate > swiper.minTranslate() : translate < swiper.translate && translate < swiper.minTranslate())) { 19209 return false; 19210 } 19211 if (!swiper.allowSlidePrev && translate > swiper.translate && translate > swiper.maxTranslate()) { 19212 if ((activeIndex || 0) !== slideIndex) { 19213 return false; 19214 } 19215 } 19216 } 19217 if (slideIndex !== (previousIndex || 0) && runCallbacks) { 19218 swiper.emit('beforeSlideChangeStart'); 19219 } 19220 19221 // Update progress 19222 swiper.updateProgress(translate); 19223 let direction; 19224 if (slideIndex > activeIndex) direction = 'next';else if (slideIndex < activeIndex) direction = 'prev';else direction = 'reset'; 19225 19226 // Update Index 19227 if (rtl && -translate === swiper.translate || !rtl && translate === swiper.translate) { 19228 swiper.updateActiveIndex(slideIndex); 19229 // Update Height 19230 if (params.autoHeight) { 19231 swiper.updateAutoHeight(); 19232 } 19233 swiper.updateSlidesClasses(); 19234 if (params.effect !== 'slide') { 19235 swiper.setTranslate(translate); 19236 } 19237 if (direction !== 'reset') { 19238 swiper.transitionStart(runCallbacks, direction); 19239 swiper.transitionEnd(runCallbacks, direction); 19240 } 19241 return false; 19242 } 19243 if (params.cssMode) { 19244 const isH = swiper.isHorizontal(); 19245 const t = rtl ? translate : -translate; 19246 if (speed === 0) { 19247 const isVirtual = swiper.virtual && swiper.params.virtual.enabled; 19248 if (isVirtual) { 19249 swiper.wrapperEl.style.scrollSnapType = 'none'; 19250 swiper._immediateVirtual = true; 19251 } 19252 if (isVirtual && !swiper._cssModeVirtualInitialSet && swiper.params.initialSlide > 0) { 19253 swiper._cssModeVirtualInitialSet = true; 19254 requestAnimationFrame(() => { 19255 wrapperEl[isH ? 'scrollLeft' : 'scrollTop'] = t; 19256 }); 19257 } else { 19258 wrapperEl[isH ? 'scrollLeft' : 'scrollTop'] = t; 19259 } 19260 if (isVirtual) { 19261 requestAnimationFrame(() => { 19262 swiper.wrapperEl.style.scrollSnapType = ''; 19263 swiper._immediateVirtual = false; 19264 }); 19265 } 19266 } else { 19267 if (!swiper.support.smoothScroll) { 19268 (0,_utils_mjs__WEBPACK_IMPORTED_MODULE_1__.q)({ 19269 swiper, 19270 targetPosition: t, 19271 side: isH ? 'left' : 'top' 19272 }); 19273 return true; 19274 } 19275 wrapperEl.scrollTo({ 19276 [isH ? 'left' : 'top']: t, 19277 behavior: 'smooth' 19278 }); 19279 } 19280 return true; 19281 } 19282 swiper.setTransition(speed); 19283 swiper.setTranslate(translate); 19284 swiper.updateActiveIndex(slideIndex); 19285 swiper.updateSlidesClasses(); 19286 swiper.emit('beforeTransitionStart', speed, internal); 19287 swiper.transitionStart(runCallbacks, direction); 19288 if (speed === 0) { 19289 swiper.transitionEnd(runCallbacks, direction); 19290 } else if (!swiper.animating) { 19291 swiper.animating = true; 19292 if (!swiper.onSlideToWrapperTransitionEnd) { 19293 swiper.onSlideToWrapperTransitionEnd = function transitionEnd(e) { 19294 if (!swiper || swiper.destroyed) return; 19295 if (e.target !== this) return; 19296 swiper.wrapperEl.removeEventListener('transitionend', swiper.onSlideToWrapperTransitionEnd); 19297 swiper.onSlideToWrapperTransitionEnd = null; 19298 delete swiper.onSlideToWrapperTransitionEnd; 19299 swiper.transitionEnd(runCallbacks, direction); 19300 }; 19301 } 19302 swiper.wrapperEl.addEventListener('transitionend', swiper.onSlideToWrapperTransitionEnd); 19303 } 19304 return true; 19305} 19306 19307function slideToLoop(index, speed, runCallbacks, internal) { 19308 if (index === void 0) { 19309 index = 0; 19310 } 19311 if (speed === void 0) { 19312 speed = this.params.speed; 19313 } 19314 if (runCallbacks === void 0) { 19315 runCallbacks = true; 19316 } 19317 if (typeof index === 'string') { 19318 const indexAsNumber = parseInt(index, 10); 19319 index = indexAsNumber; 19320 } 19321 const swiper = this; 19322 const gridEnabled = swiper.grid && swiper.params.grid && swiper.params.grid.rows > 1; 19323 let newIndex = index; 19324 if (swiper.params.loop) { 19325 if (swiper.virtual && swiper.params.virtual.enabled) { 19326 // eslint-disable-next-line 19327 newIndex = newIndex + swiper.virtual.slidesBefore; 19328 } else { 19329 let targetSlideIndex; 19330 if (gridEnabled) { 19331 const slideIndex = newIndex * swiper.params.grid.rows; 19332 targetSlideIndex = swiper.slides.filter(slideEl => slideEl.getAttribute('data-swiper-slide-index') * 1 === slideIndex)[0].column; 19333 } else { 19334 targetSlideIndex = swiper.getSlideIndexByData(newIndex); 19335 } 19336 const cols = gridEnabled ? Math.ceil(swiper.slides.length / swiper.params.grid.rows) : swiper.slides.length; 19337 const { 19338 centeredSlides 19339 } = swiper.params; 19340 let slidesPerView = swiper.params.slidesPerView; 19341 if (slidesPerView === 'auto') { 19342 slidesPerView = swiper.slidesPerViewDynamic(); 19343 } else { 19344 slidesPerView = Math.ceil(parseFloat(swiper.params.slidesPerView, 10)); 19345 if (centeredSlides && slidesPerView % 2 === 0) { 19346 slidesPerView = slidesPerView + 1; 19347 } 19348 } 19349 let needLoopFix = cols - targetSlideIndex < slidesPerView; 19350 if (centeredSlides) { 19351 needLoopFix = needLoopFix || targetSlideIndex < Math.ceil(slidesPerView / 2); 19352 } 19353 if (needLoopFix) { 19354 const direction = centeredSlides ? targetSlideIndex < swiper.activeIndex ? 'prev' : 'next' : targetSlideIndex - swiper.activeIndex - 1 < swiper.params.slidesPerView ? 'next' : 'prev'; 19355 swiper.loopFix({ 19356 direction, 19357 slideTo: true, 19358 activeSlideIndex: direction === 'next' ? targetSlideIndex + 1 : targetSlideIndex - cols + 1, 19359 slideRealIndex: direction === 'next' ? swiper.realIndex : undefined 19360 }); 19361 } 19362 if (gridEnabled) { 19363 const slideIndex = newIndex * swiper.params.grid.rows; 19364 newIndex = swiper.slides.filter(slideEl => slideEl.getAttribute('data-swiper-slide-index') * 1 === slideIndex)[0].column; 19365 } else { 19366 newIndex = swiper.getSlideIndexByData(newIndex); 19367 } 19368 } 19369 } 19370 requestAnimationFrame(() => { 19371 swiper.slideTo(newIndex, speed, runCallbacks, internal); 19372 }); 19373 return swiper; 19374} 19375 19376/* eslint no-unused-vars: "off" */ 19377function slideNext(speed, runCallbacks, internal) { 19378 if (speed === void 0) { 19379 speed = this.params.speed; 19380 } 19381 if (runCallbacks === void 0) { 19382 runCallbacks = true; 19383 } 19384 const swiper = this; 19385 const { 19386 enabled, 19387 params, 19388 animating 19389 } = swiper; 19390 if (!enabled) return swiper; 19391 let perGroup = params.slidesPerGroup; 19392 if (params.slidesPerView === 'auto' && params.slidesPerGroup === 1 && params.slidesPerGroupAuto) { 19393 perGroup = Math.max(swiper.slidesPerViewDynamic('current', true), 1); 19394 } 19395 const increment = swiper.activeIndex < params.slidesPerGroupSkip ? 1 : perGroup; 19396 const isVirtual = swiper.virtual && params.virtual.enabled; 19397 if (params.loop) { 19398 if (animating && !isVirtual && params.loopPreventsSliding) return false; 19399 swiper.loopFix({ 19400 direction: 'next' 19401 }); 19402 // eslint-disable-next-line 19403 swiper._clientLeft = swiper.wrapperEl.clientLeft; 19404 if (swiper.activeIndex === swiper.slides.length - 1 && params.cssMode) { 19405 requestAnimationFrame(() => { 19406 swiper.slideTo(swiper.activeIndex + increment, speed, runCallbacks, internal); 19407 }); 19408 return true; 19409 } 19410 } 19411 if (params.rewind && swiper.isEnd) { 19412 return swiper.slideTo(0, speed, runCallbacks, internal); 19413 } 19414 return swiper.slideTo(swiper.activeIndex + increment, speed, runCallbacks, internal); 19415} 19416 19417/* eslint no-unused-vars: "off" */ 19418function slidePrev(speed, runCallbacks, internal) { 19419 if (speed === void 0) { 19420 speed = this.params.speed; 19421 } 19422 if (runCallbacks === void 0) { 19423 runCallbacks = true; 19424 } 19425 const swiper = this; 19426 const { 19427 params, 19428 snapGrid, 19429 slidesGrid, 19430 rtlTranslate, 19431 enabled, 19432 animating 19433 } = swiper; 19434 if (!enabled) return swiper; 19435 const isVirtual = swiper.virtual && params.virtual.enabled; 19436 if (params.loop) { 19437 if (animating && !isVirtual && params.loopPreventsSliding) return false; 19438 swiper.loopFix({ 19439 direction: 'prev' 19440 }); 19441 // eslint-disable-next-line 19442 swiper._clientLeft = swiper.wrapperEl.clientLeft; 19443 } 19444 const translate = rtlTranslate ? swiper.translate : -swiper.translate; 19445 function normalize(val) { 19446 if (val < 0) return -Math.floor(Math.abs(val)); 19447 return Math.floor(val); 19448 } 19449 const normalizedTranslate = normalize(translate); 19450 const normalizedSnapGrid = snapGrid.map(val => normalize(val)); 19451 let prevSnap = snapGrid[normalizedSnapGrid.indexOf(normalizedTranslate) - 1]; 19452 if (typeof prevSnap === 'undefined' && params.cssMode) { 19453 let prevSnapIndex; 19454 snapGrid.forEach((snap, snapIndex) => { 19455 if (normalizedTranslate >= snap) { 19456 // prevSnap = snap; 19457 prevSnapIndex = snapIndex; 19458 } 19459 }); 19460 if (typeof prevSnapIndex !== 'undefined') { 19461 prevSnap = snapGrid[prevSnapIndex > 0 ? prevSnapIndex - 1 : prevSnapIndex]; 19462 } 19463 } 19464 let prevIndex = 0; 19465 if (typeof prevSnap !== 'undefined') { 19466 prevIndex = slidesGrid.indexOf(prevSnap); 19467 if (prevIndex < 0) prevIndex = swiper.activeIndex - 1; 19468 if (params.slidesPerView === 'auto' && params.slidesPerGroup === 1 && params.slidesPerGroupAuto) { 19469 prevIndex = prevIndex - swiper.slidesPerViewDynamic('previous', true) + 1; 19470 prevIndex = Math.max(prevIndex, 0); 19471 } 19472 } 19473 if (params.rewind && swiper.isBeginning) { 19474 const lastIndex = swiper.params.virtual && swiper.params.virtual.enabled && swiper.virtual ? swiper.virtual.slides.length - 1 : swiper.slides.length - 1; 19475 return swiper.slideTo(lastIndex, speed, runCallbacks, internal); 19476 } else if (params.loop && swiper.activeIndex === 0 && params.cssMode) { 19477 requestAnimationFrame(() => { 19478 swiper.slideTo(prevIndex, speed, runCallbacks, internal); 19479 }); 19480 return true; 19481 } 19482 return swiper.slideTo(prevIndex, speed, runCallbacks, internal); 19483} 19484 19485/* eslint no-unused-vars: "off" */ 19486function slideReset(speed, runCallbacks, internal) { 19487 if (speed === void 0) { 19488 speed = this.params.speed; 19489 } 19490 if (runCallbacks === void 0) { 19491 runCallbacks = true; 19492 } 19493 const swiper = this; 19494 return swiper.slideTo(swiper.activeIndex, speed, runCallbacks, internal); 19495} 19496 19497/* eslint no-unused-vars: "off" */ 19498function slideToClosest(speed, runCallbacks, internal, threshold) { 19499 if (speed === void 0) { 19500 speed = this.params.speed; 19501 } 19502 if (runCallbacks === void 0) { 19503 runCallbacks = true; 19504 } 19505 if (threshold === void 0) { 19506 threshold = 0.5; 19507 } 19508 const swiper = this; 19509 let index = swiper.activeIndex; 19510 const skip = Math.min(swiper.params.slidesPerGroupSkip, index); 19511 const snapIndex = skip + Math.floor((index - skip) / swiper.params.slidesPerGroup); 19512 const translate = swiper.rtlTranslate ? swiper.translate : -swiper.translate; 19513 if (translate >= swiper.snapGrid[snapIndex]) { 19514 // The current translate is on or after the current snap index, so the choice 19515 // is between the current index and the one after it. 19516 const currentSnap = swiper.snapGrid[snapIndex]; 19517 const nextSnap = swiper.snapGrid[snapIndex + 1]; 19518 if (translate - currentSnap > (nextSnap - currentSnap) * threshold) { 19519 index += swiper.params.slidesPerGroup; 19520 } 19521 } else { 19522 // The current translate is before the current snap index, so the choice 19523 // is between the current index and the one before it. 19524 const prevSnap = swiper.snapGrid[snapIndex - 1]; 19525 const currentSnap = swiper.snapGrid[snapIndex]; 19526 if (translate - prevSnap <= (currentSnap - prevSnap) * threshold) { 19527 index -= swiper.params.slidesPerGroup; 19528 } 19529 } 19530 index = Math.max(index, 0); 19531 index = Math.min(index, swiper.slidesGrid.length - 1); 19532 return swiper.slideTo(index, speed, runCallbacks, internal); 19533} 19534 19535function slideToClickedSlide() { 19536 const swiper = this; 19537 const { 19538 params, 19539 slidesEl 19540 } = swiper; 19541 const slidesPerView = params.slidesPerView === 'auto' ? swiper.slidesPerViewDynamic() : params.slidesPerView; 19542 let slideToIndex = swiper.clickedIndex; 19543 let realIndex; 19544 const slideSelector = swiper.isElement ? `swiper-slide` : `.${params.slideClass}`; 19545 if (params.loop) { 19546 if (swiper.animating) return; 19547 realIndex = parseInt(swiper.clickedSlide.getAttribute('data-swiper-slide-index'), 10); 19548 if (params.centeredSlides) { 19549 if (slideToIndex < swiper.loopedSlides - slidesPerView / 2 || slideToIndex > swiper.slides.length - swiper.loopedSlides + slidesPerView / 2) { 19550 swiper.loopFix(); 19551 slideToIndex = swiper.getSlideIndex((0,_utils_mjs__WEBPACK_IMPORTED_MODULE_1__.e)(slidesEl, `${slideSelector}[data-swiper-slide-index="${realIndex}"]`)[0]); 19552 (0,_utils_mjs__WEBPACK_IMPORTED_MODULE_1__.n)(() => { 19553 swiper.slideTo(slideToIndex); 19554 }); 19555 } else { 19556 swiper.slideTo(slideToIndex); 19557 } 19558 } else if (slideToIndex > swiper.slides.length - slidesPerView) { 19559 swiper.loopFix(); 19560 slideToIndex = swiper.getSlideIndex((0,_utils_mjs__WEBPACK_IMPORTED_MODULE_1__.e)(slidesEl, `${slideSelector}[data-swiper-slide-index="${realIndex}"]`)[0]); 19561 (0,_utils_mjs__WEBPACK_IMPORTED_MODULE_1__.n)(() => { 19562 swiper.slideTo(slideToIndex); 19563 }); 19564 } else { 19565 swiper.slideTo(slideToIndex); 19566 } 19567 } else { 19568 swiper.slideTo(slideToIndex); 19569 } 19570} 19571 19572var slide = { 19573 slideTo, 19574 slideToLoop, 19575 slideNext, 19576 slidePrev, 19577 slideReset, 19578 slideToClosest, 19579 slideToClickedSlide 19580}; 19581 19582function loopCreate(slideRealIndex) { 19583 const swiper = this; 19584 const { 19585 params, 19586 slidesEl 19587 } = swiper; 19588 if (!params.loop || swiper.virtual && swiper.params.virtual.enabled) return; 19589 const initSlides = () => { 19590 const slides = (0,_utils_mjs__WEBPACK_IMPORTED_MODULE_1__.e)(slidesEl, `.${params.slideClass}, swiper-slide`); 19591 slides.forEach((el, index) => { 19592 el.setAttribute('data-swiper-slide-index', index); 19593 }); 19594 }; 19595 const gridEnabled = swiper.grid && params.grid && params.grid.rows > 1; 19596 const slidesPerGroup = params.slidesPerGroup * (gridEnabled ? params.grid.rows : 1); 19597 const shouldFillGroup = swiper.slides.length % slidesPerGroup !== 0; 19598 const shouldFillGrid = gridEnabled && swiper.slides.length % params.grid.rows !== 0; 19599 const addBlankSlides = amountOfSlides => { 19600 for (let i = 0; i < amountOfSlides; i += 1) { 19601 const slideEl = swiper.isElement ? (0,_utils_mjs__WEBPACK_IMPORTED_MODULE_1__.c)('swiper-slide', [params.slideBlankClass]) : (0,_utils_mjs__WEBPACK_IMPORTED_MODULE_1__.c)('div', [params.slideClass, params.slideBlankClass]); 19602 swiper.slidesEl.append(slideEl); 19603 } 19604 }; 19605 if (shouldFillGroup) { 19606 if (params.loopAddBlankSlides) { 19607 const slidesToAdd = slidesPerGroup - swiper.slides.length % slidesPerGroup; 19608 addBlankSlides(slidesToAdd); 19609 swiper.recalcSlides(); 19610 swiper.updateSlides(); 19611 } else { 19612 (0,_utils_mjs__WEBPACK_IMPORTED_MODULE_1__.r)('Swiper Loop Warning: The number of slides is not even to slidesPerGroup, loop mode may not function properly. You need to add more slides (or make duplicates, or empty slides)'); 19613 } 19614 initSlides(); 19615 } else if (shouldFillGrid) { 19616 if (params.loopAddBlankSlides) { 19617 const slidesToAdd = params.grid.rows - swiper.slides.length % params.grid.rows; 19618 addBlankSlides(slidesToAdd); 19619 swiper.recalcSlides(); 19620 swiper.updateSlides(); 19621 } else { 19622 (0,_utils_mjs__WEBPACK_IMPORTED_MODULE_1__.r)('Swiper Loop Warning: The number of slides is not even to grid.rows, loop mode may not function properly. You need to add more slides (or make duplicates, or empty slides)'); 19623 } 19624 initSlides(); 19625 } else { 19626 initSlides(); 19627 } 19628 swiper.loopFix({ 19629 slideRealIndex, 19630 direction: params.centeredSlides ? undefined : 'next' 19631 }); 19632} 19633 19634function loopFix(_temp) { 19635 let { 19636 slideRealIndex, 19637 slideTo = true, 19638 direction, 19639 setTranslate, 19640 activeSlideIndex, 19641 byController, 19642 byMousewheel 19643 } = _temp === void 0 ? {} : _temp; 19644 const swiper = this; 19645 if (!swiper.params.loop) return; 19646 swiper.emit('beforeLoopFix'); 19647 const { 19648 slides, 19649 allowSlidePrev, 19650 allowSlideNext, 19651 slidesEl, 19652 params 19653 } = swiper; 19654 const { 19655 centeredSlides 19656 } = params; 19657 swiper.allowSlidePrev = true; 19658 swiper.allowSlideNext = true; 19659 if (swiper.virtual && params.virtual.enabled) { 19660 if (slideTo) { 19661 if (!params.centeredSlides && swiper.snapIndex === 0) { 19662 swiper.slideTo(swiper.virtual.slides.length, 0, false, true); 19663 } else if (params.centeredSlides && swiper.snapIndex < params.slidesPerView) { 19664 swiper.slideTo(swiper.virtual.slides.length + swiper.snapIndex, 0, false, true); 19665 } else if (swiper.snapIndex === swiper.snapGrid.length - 1) { 19666 swiper.slideTo(swiper.virtual.slidesBefore, 0, false, true); 19667 } 19668 } 19669 swiper.allowSlidePrev = allowSlidePrev; 19670 swiper.allowSlideNext = allowSlideNext; 19671 swiper.emit('loopFix'); 19672 return; 19673 } 19674 let slidesPerView = params.slidesPerView; 19675 if (slidesPerView === 'auto') { 19676 slidesPerView = swiper.slidesPerViewDynamic(); 19677 } else { 19678 slidesPerView = Math.ceil(parseFloat(params.slidesPerView, 10)); 19679 if (centeredSlides && slidesPerView % 2 === 0) { 19680 slidesPerView = slidesPerView + 1; 19681 } 19682 } 19683 const slidesPerGroup = params.slidesPerGroupAuto ? slidesPerView : params.slidesPerGroup; 19684 let loopedSlides = slidesPerGroup; 19685 if (loopedSlides % slidesPerGroup !== 0) { 19686 loopedSlides += slidesPerGroup - loopedSlides % slidesPerGroup; 19687 } 19688 loopedSlides += params.loopAdditionalSlides; 19689 swiper.loopedSlides = loopedSlides; 19690 const gridEnabled = swiper.grid && params.grid && params.grid.rows > 1; 19691 if (slides.length < slidesPerView + loopedSlides) { 19692 (0,_utils_mjs__WEBPACK_IMPORTED_MODULE_1__.r)('Swiper Loop Warning: The number of slides is not enough for loop mode, it will be disabled and not function properly. You need to add more slides (or make duplicates) or lower the values of slidesPerView and slidesPerGroup parameters'); 19693 } else if (gridEnabled && params.grid.fill === 'row') { 19694 (0,_utils_mjs__WEBPACK_IMPORTED_MODULE_1__.r)('Swiper Loop Warning: Loop mode is not compatible with grid.fill = `row`'); 19695 } 19696 const prependSlidesIndexes = []; 19697 const appendSlidesIndexes = []; 19698 let activeIndex = swiper.activeIndex; 19699 if (typeof activeSlideIndex === 'undefined') { 19700 activeSlideIndex = swiper.getSlideIndex(slides.filter(el => el.classList.contains(params.slideActiveClass))[0]); 19701 } else { 19702 activeIndex = activeSlideIndex; 19703 } 19704 const isNext = direction === 'next' || !direction; 19705 const isPrev = direction === 'prev' || !direction; 19706 let slidesPrepended = 0; 19707 let slidesAppended = 0; 19708 const cols = gridEnabled ? Math.ceil(slides.length / params.grid.rows) : slides.length; 19709 const activeColIndex = gridEnabled ? slides[activeSlideIndex].column : activeSlideIndex; 19710 const activeColIndexWithShift = activeColIndex + (centeredSlides && typeof setTranslate === 'undefined' ? -slidesPerView / 2 + 0.5 : 0); 19711 // prepend last slides before start 19712 if (activeColIndexWithShift < loopedSlides) { 19713 slidesPrepended = Math.max(loopedSlides - activeColIndexWithShift, slidesPerGroup); 19714 for (let i = 0; i < loopedSlides - activeColIndexWithShift; i += 1) { 19715 const index = i - Math.floor(i / cols) * cols; 19716 if (gridEnabled) { 19717 const colIndexToPrepend = cols - index - 1; 19718 for (let i = slides.length - 1; i >= 0; i -= 1) { 19719 if (slides[i].column === colIndexToPrepend) prependSlidesIndexes.push(i); 19720 } 19721 // slides.forEach((slide, slideIndex) => { 19722 // if (slide.column === colIndexToPrepend) prependSlidesIndexes.push(slideIndex); 19723 // }); 19724 } else { 19725 prependSlidesIndexes.push(cols - index - 1); 19726 } 19727 } 19728 } else if (activeColIndexWithShift + slidesPerView > cols - loopedSlides) { 19729 slidesAppended = Math.max(activeColIndexWithShift - (cols - loopedSlides * 2), slidesPerGroup); 19730 for (let i = 0; i < slidesAppended; i += 1) { 19731 const index = i - Math.floor(i / cols) * cols; 19732 if (gridEnabled) { 19733 slides.forEach((slide, slideIndex) => { 19734 if (slide.column === index) appendSlidesIndexes.push(slideIndex); 19735 }); 19736 } else { 19737 appendSlidesIndexes.push(index); 19738 } 19739 } 19740 } 19741 swiper.__preventObserver__ = true; 19742 requestAnimationFrame(() => { 19743 swiper.__preventObserver__ = false; 19744 }); 19745 if (isPrev) { 19746 prependSlidesIndexes.forEach(index => { 19747 slides[index].swiperLoopMoveDOM = true; 19748 slidesEl.prepend(slides[index]); 19749 slides[index].swiperLoopMoveDOM = false; 19750 }); 19751 } 19752 if (isNext) { 19753 appendSlidesIndexes.forEach(index => { 19754 slides[index].swiperLoopMoveDOM = true; 19755 slidesEl.append(slides[index]); 19756 slides[index].swiperLoopMoveDOM = false; 19757 }); 19758 } 19759 swiper.recalcSlides(); 19760 if (params.slidesPerView === 'auto') { 19761 swiper.updateSlides(); 19762 } else if (gridEnabled && (prependSlidesIndexes.length > 0 && isPrev || appendSlidesIndexes.length > 0 && isNext)) { 19763 swiper.slides.forEach((slide, slideIndex) => { 19764 swiper.grid.updateSlide(slideIndex, slide, swiper.slides); 19765 }); 19766 } 19767 if (params.watchSlidesProgress) { 19768 swiper.updateSlidesOffset(); 19769 } 19770 if (slideTo) { 19771 if (prependSlidesIndexes.length > 0 && isPrev) { 19772 if (typeof slideRealIndex === 'undefined') { 19773 const currentSlideTranslate = swiper.slidesGrid[activeIndex]; 19774 const newSlideTranslate = swiper.slidesGrid[activeIndex + slidesPrepended]; 19775 const diff = newSlideTranslate - currentSlideTranslate; 19776 if (byMousewheel) { 19777 swiper.setTranslate(swiper.translate - diff); 19778 } else { 19779 swiper.slideTo(activeIndex + slidesPrepended, 0, false, true); 19780 if (setTranslate) { 19781 swiper.touchEventsData.startTranslate = swiper.touchEventsData.startTranslate - diff; 19782 swiper.touchEventsData.currentTranslate = swiper.touchEventsData.currentTranslate - diff; 19783 } 19784 } 19785 } else { 19786 if (setTranslate) { 19787 const shift = gridEnabled ? prependSlidesIndexes.length / params.grid.rows : prependSlidesIndexes.length; 19788 swiper.slideTo(swiper.activeIndex + shift, 0, false, true); 19789 swiper.touchEventsData.currentTranslate = swiper.translate; 19790 } 19791 } 19792 } else if (appendSlidesIndexes.length > 0 && isNext) { 19793 if (typeof slideRealIndex === 'undefined') { 19794 const currentSlideTranslate = swiper.slidesGrid[activeIndex]; 19795 const newSlideTranslate = swiper.slidesGrid[activeIndex - slidesAppended]; 19796 const diff = newSlideTranslate - currentSlideTranslate; 19797 if (byMousewheel) { 19798 swiper.setTranslate(swiper.translate - diff); 19799 } else { 19800 swiper.slideTo(activeIndex - slidesAppended, 0, false, true); 19801 if (setTranslate) { 19802 swiper.touchEventsData.startTranslate = swiper.touchEventsData.startTranslate - diff; 19803 swiper.touchEventsData.currentTranslate = swiper.touchEventsData.currentTranslate - diff; 19804 } 19805 } 19806 } else { 19807 const shift = gridEnabled ? appendSlidesIndexes.length / params.grid.rows : appendSlidesIndexes.length; 19808 swiper.slideTo(swiper.activeIndex - shift, 0, false, true); 19809 } 19810 } 19811 } 19812 swiper.allowSlidePrev = allowSlidePrev; 19813 swiper.allowSlideNext = allowSlideNext; 19814 if (swiper.controller && swiper.controller.control && !byController) { 19815 const loopParams = { 19816 slideRealIndex, 19817 direction, 19818 setTranslate, 19819 activeSlideIndex, 19820 byController: true 19821 }; 19822 if (Array.isArray(swiper.controller.control)) { 19823 swiper.controller.control.forEach(c => { 19824 if (!c.destroyed && c.params.loop) c.loopFix({ 19825 ...loopParams, 19826 slideTo: c.params.slidesPerView === params.slidesPerView ? slideTo : false 19827 }); 19828 }); 19829 } else if (swiper.controller.control instanceof swiper.constructor && swiper.controller.control.params.loop) { 19830 swiper.controller.control.loopFix({ 19831 ...loopParams, 19832 slideTo: swiper.controller.control.params.slidesPerView === params.slidesPerView ? slideTo : false 19833 }); 19834 } 19835 } 19836 swiper.emit('loopFix'); 19837} 19838 19839function loopDestroy() { 19840 const swiper = this; 19841 const { 19842 params, 19843 slidesEl 19844 } = swiper; 19845 if (!params.loop || swiper.virtual && swiper.params.virtual.enabled) return; 19846 swiper.recalcSlides(); 19847 const newSlidesOrder = []; 19848 swiper.slides.forEach(slideEl => { 19849 const index = typeof slideEl.swiperSlideIndex === 'undefined' ? slideEl.getAttribute('data-swiper-slide-index') * 1 : slideEl.swiperSlideIndex; 19850 newSlidesOrder[index] = slideEl; 19851 }); 19852 swiper.slides.forEach(slideEl => { 19853 slideEl.removeAttribute('data-swiper-slide-index'); 19854 }); 19855 newSlidesOrder.forEach(slideEl => { 19856 slidesEl.append(slideEl); 19857 }); 19858 swiper.recalcSlides(); 19859 swiper.slideTo(swiper.realIndex, 0); 19860} 19861 19862var loop = { 19863 loopCreate, 19864 loopFix, 19865 loopDestroy 19866}; 19867 19868function setGrabCursor(moving) { 19869 const swiper = this; 19870 if (!swiper.params.simulateTouch || swiper.params.watchOverflow && swiper.isLocked || swiper.params.cssMode) return; 19871 const el = swiper.params.touchEventsTarget === 'container' ? swiper.el : swiper.wrapperEl; 19872 if (swiper.isElement) { 19873 swiper.__preventObserver__ = true; 19874 } 19875 el.style.cursor = 'move'; 19876 el.style.cursor = moving ? 'grabbing' : 'grab'; 19877 if (swiper.isElement) { 19878 requestAnimationFrame(() => { 19879 swiper.__preventObserver__ = false; 19880 }); 19881 } 19882} 19883 19884function unsetGrabCursor() { 19885 const swiper = this; 19886 if (swiper.params.watchOverflow && swiper.isLocked || swiper.params.cssMode) { 19887 return; 19888 } 19889 if (swiper.isElement) { 19890 swiper.__preventObserver__ = true; 19891 } 19892 swiper[swiper.params.touchEventsTarget === 'container' ? 'el' : 'wrapperEl'].style.cursor = ''; 19893 if (swiper.isElement) { 19894 requestAnimationFrame(() => { 19895 swiper.__preventObserver__ = false; 19896 }); 19897 } 19898} 19899 19900var grabCursor = { 19901 setGrabCursor, 19902 unsetGrabCursor 19903}; 19904 19905// Modified from https://stackoverflow.com/questions/54520554/custom-element-getrootnode-closest-function-crossing-multiple-parent-shadowd 19906function closestElement(selector, base) { 19907 if (base === void 0) { 19908 base = this; 19909 } 19910 function __closestFrom(el) { 19911 if (!el || el === (0,_ssr_window_esm_mjs__WEBPACK_IMPORTED_MODULE_0__.g)() || el === (0,_ssr_window_esm_mjs__WEBPACK_IMPORTED_MODULE_0__.a)()) return null; 19912 if (el.assignedSlot) el = el.assignedSlot; 19913 const found = el.closest(selector); 19914 if (!found && !el.getRootNode) { 19915 return null; 19916 } 19917 return found || __closestFrom(el.getRootNode().host); 19918 } 19919 return __closestFrom(base); 19920} 19921function preventEdgeSwipe(swiper, event, startX) { 19922 const window = (0,_ssr_window_esm_mjs__WEBPACK_IMPORTED_MODULE_0__.a)(); 19923 const { 19924 params 19925 } = swiper; 19926 const edgeSwipeDetection = params.edgeSwipeDetection; 19927 const edgeSwipeThreshold = params.edgeSwipeThreshold; 19928 if (edgeSwipeDetection && (startX <= edgeSwipeThreshold || startX >= window.innerWidth - edgeSwipeThreshold)) { 19929 if (edgeSwipeDetection === 'prevent') { 19930 event.preventDefault(); 19931 return true; 19932 } 19933 return false; 19934 } 19935 return true; 19936} 19937function onTouchStart(event) { 19938 const swiper = this; 19939 const document = (0,_ssr_window_esm_mjs__WEBPACK_IMPORTED_MODULE_0__.g)(); 19940 let e = event; 19941 if (e.originalEvent) e = e.originalEvent; 19942 const data = swiper.touchEventsData; 19943 if (e.type === 'pointerdown') { 19944 if (data.pointerId !== null && data.pointerId !== e.pointerId) { 19945 return; 19946 } 19947 data.pointerId = e.pointerId; 19948 } else if (e.type === 'touchstart' && e.targetTouches.length === 1) { 19949 data.touchId = e.targetTouches[0].identifier; 19950 } 19951 if (e.type === 'touchstart') { 19952 // don't proceed touch event 19953 preventEdgeSwipe(swiper, e, e.targetTouches[0].pageX); 19954 return; 19955 } 19956 const { 19957 params, 19958 touches, 19959 enabled 19960 } = swiper; 19961 if (!enabled) return; 19962 if (!params.simulateTouch && e.pointerType === 'mouse') return; 19963 if (swiper.animating && params.preventInteractionOnTransition) { 19964 return; 19965 } 19966 if (!swiper.animating && params.cssMode && params.loop) { 19967 swiper.loopFix(); 19968 } 19969 let targetEl = e.target; 19970 if (params.touchEventsTarget === 'wrapper') { 19971 if (!swiper.wrapperEl.contains(targetEl)) return; 19972 } 19973 if ('which' in e && e.which === 3) return; 19974 if ('button' in e && e.button > 0) return; 19975 if (data.isTouched && data.isMoved) return; 19976 19977 // change target el for shadow root component 19978 const swipingClassHasValue = !!params.noSwipingClass && params.noSwipingClass !== ''; 19979 // eslint-disable-next-line 19980 const eventPath = e.composedPath ? e.composedPath() : e.path; 19981 if (swipingClassHasValue && e.target && e.target.shadowRoot && eventPath) { 19982 targetEl = eventPath[0]; 19983 } 19984 const noSwipingSelector = params.noSwipingSelector ? params.noSwipingSelector : `.${params.noSwipingClass}`; 19985 const isTargetShadow = !!(e.target && e.target.shadowRoot); 19986 19987 // use closestElement for shadow root element to get the actual closest for nested shadow root element 19988 if (params.noSwiping && (isTargetShadow ? closestElement(noSwipingSelector, targetEl) : targetEl.closest(noSwipingSelector))) { 19989 swiper.allowClick = true; 19990 return; 19991 } 19992 if (params.swipeHandler) { 19993 if (!targetEl.closest(params.swipeHandler)) return; 19994 } 19995 touches.currentX = e.pageX; 19996 touches.currentY = e.pageY; 19997 const startX = touches.currentX; 19998 const startY = touches.currentY; 19999 20000 // Do NOT start if iOS edge swipe is detected. Otherwise iOS app cannot swipe-to-go-back anymore 20001 20002 if (!preventEdgeSwipe(swiper, e, startX)) { 20003 return; 20004 } 20005 Object.assign(data, { 20006 isTouched: true, 20007 isMoved: false, 20008 allowTouchCallbacks: true, 20009 isScrolling: undefined, 20010 startMoving: undefined 20011 }); 20012 touches.startX = startX; 20013 touches.startY = startY; 20014 data.touchStartTime = (0,_utils_mjs__WEBPACK_IMPORTED_MODULE_1__.d)(); 20015 swiper.allowClick = true; 20016 swiper.updateSize(); 20017 swiper.swipeDirection = undefined; 20018 if (params.threshold > 0) data.allowThresholdMove = false; 20019 let preventDefault = true; 20020 if (targetEl.matches(data.focusableElements)) { 20021 preventDefault = false; 20022 if (targetEl.nodeName === 'SELECT') { 20023 data.isTouched = false; 20024 } 20025 } 20026 if (document.activeElement && document.activeElement.matches(data.focusableElements) && document.activeElement !== targetEl) { 20027 document.activeElement.blur(); 20028 } 20029 const shouldPreventDefault = preventDefault && swiper.allowTouchMove && params.touchStartPreventDefault; 20030 if ((params.touchStartForcePreventDefault || shouldPreventDefault) && !targetEl.isContentEditable) { 20031 e.preventDefault(); 20032 } 20033 if (params.freeMode && params.freeMode.enabled && swiper.freeMode && swiper.animating && !params.cssMode) { 20034 swiper.freeMode.onTouchStart(); 20035 } 20036 swiper.emit('touchStart', e); 20037} 20038 20039function onTouchMove(event) { 20040 const document = (0,_ssr_window_esm_mjs__WEBPACK_IMPORTED_MODULE_0__.g)(); 20041 const swiper = this; 20042 const data = swiper.touchEventsData; 20043 const { 20044 params, 20045 touches, 20046 rtlTranslate: rtl, 20047 enabled 20048 } = swiper; 20049 if (!enabled) return; 20050 if (!params.simulateTouch && event.pointerType === 'mouse') return; 20051 let e = event; 20052 if (e.originalEvent) e = e.originalEvent; 20053 if (e.type === 'pointermove') { 20054 if (data.touchId !== null) return; // return from pointer if we use touch 20055 const id = e.pointerId; 20056 if (id !== data.pointerId) return; 20057 } 20058 let targetTouch; 20059 if (e.type === 'touchmove') { 20060 targetTouch = [...e.changedTouches].filter(t => t.identifier === data.touchId)[0]; 20061 if (!targetTouch || targetTouch.identifier !== data.touchId) return; 20062 } else { 20063 targetTouch = e; 20064 } 20065 if (!data.isTouched) { 20066 if (data.startMoving && data.isScrolling) { 20067 swiper.emit('touchMoveOpposite', e); 20068 } 20069 return; 20070 } 20071 const pageX = targetTouch.pageX; 20072 const pageY = targetTouch.pageY; 20073 if (e.preventedByNestedSwiper) { 20074 touches.startX = pageX; 20075 touches.startY = pageY; 20076 return; 20077 } 20078 if (!swiper.allowTouchMove) { 20079 if (!e.target.matches(data.focusableElements)) { 20080 swiper.allowClick = false; 20081 } 20082 if (data.isTouched) { 20083 Object.assign(touches, { 20084 startX: pageX, 20085 startY: pageY, 20086 currentX: pageX, 20087 currentY: pageY 20088 }); 20089 data.touchStartTime = (0,_utils_mjs__WEBPACK_IMPORTED_MODULE_1__.d)(); 20090 } 20091 return; 20092 } 20093 if (params.touchReleaseOnEdges && !params.loop) { 20094 if (swiper.isVertical()) { 20095 // Vertical 20096 if (pageY < touches.startY && swiper.translate <= swiper.maxTranslate() || pageY > touches.startY && swiper.translate >= swiper.minTranslate()) { 20097 data.isTouched = false; 20098 data.isMoved = false; 20099 return; 20100 } 20101 } else if (pageX < touches.startX && swiper.translate <= swiper.maxTranslate() || pageX > touches.startX && swiper.translate >= swiper.minTranslate()) { 20102 return; 20103 } 20104 } 20105 if (document.activeElement) { 20106 if (e.target === document.activeElement && e.target.matches(data.focusableElements)) { 20107 data.isMoved = true; 20108 swiper.allowClick = false; 20109 return; 20110 } 20111 } 20112 if (data.allowTouchCallbacks) { 20113 swiper.emit('touchMove', e); 20114 } 20115 touches.previousX = touches.currentX; 20116 touches.previousY = touches.currentY; 20117 touches.currentX = pageX; 20118 touches.currentY = pageY; 20119 const diffX = touches.currentX - touches.startX; 20120 const diffY = touches.currentY - touches.startY; 20121 if (swiper.params.threshold && Math.sqrt(diffX ** 2 + diffY ** 2) < swiper.params.threshold) return; 20122 if (typeof data.isScrolling === 'undefined') { 20123 let touchAngle; 20124 if (swiper.isHorizontal() && touches.currentY === touches.startY || swiper.isVertical() && touches.currentX === touches.startX) { 20125 data.isScrolling = false; 20126 } else { 20127 // eslint-disable-next-line 20128 if (diffX * diffX + diffY * diffY >= 25) { 20129 touchAngle = Math.atan2(Math.abs(diffY), Math.abs(diffX)) * 180 / Math.PI; 20130 data.isScrolling = swiper.isHorizontal() ? touchAngle > params.touchAngle : 90 - touchAngle > params.touchAngle; 20131 } 20132 } 20133 } 20134 if (data.isScrolling) { 20135 swiper.emit('touchMoveOpposite', e); 20136 } 20137 if (typeof data.startMoving === 'undefined') { 20138 if (touches.currentX !== touches.startX || touches.currentY !== touches.startY) { 20139 data.startMoving = true; 20140 } 20141 } 20142 if (data.isScrolling) { 20143 data.isTouched = false; 20144 return; 20145 } 20146 if (!data.startMoving) { 20147 return; 20148 } 20149 swiper.allowClick = false; 20150 if (!params.cssMode && e.cancelable) { 20151 e.preventDefault(); 20152 } 20153 if (params.touchMoveStopPropagation && !params.nested) { 20154 e.stopPropagation(); 20155 } 20156 let diff = swiper.isHorizontal() ? diffX : diffY; 20157 let touchesDiff = swiper.isHorizontal() ? touches.currentX - touches.previousX : touches.currentY - touches.previousY; 20158 if (params.oneWayMovement) { 20159 diff = Math.abs(diff) * (rtl ? 1 : -1); 20160 touchesDiff = Math.abs(touchesDiff) * (rtl ? 1 : -1); 20161 } 20162 touches.diff = diff; 20163 diff *= params.touchRatio; 20164 if (rtl) { 20165 diff = -diff; 20166 touchesDiff = -touchesDiff; 20167 } 20168 const prevTouchesDirection = swiper.touchesDirection; 20169 swiper.swipeDirection = diff > 0 ? 'prev' : 'next'; 20170 swiper.touchesDirection = touchesDiff > 0 ? 'prev' : 'next'; 20171 const isLoop = swiper.params.loop && !params.cssMode; 20172 const allowLoopFix = swiper.touchesDirection === 'next' && swiper.allowSlideNext || swiper.touchesDirection === 'prev' && swiper.allowSlidePrev; 20173 if (!data.isMoved) { 20174 if (isLoop && allowLoopFix) { 20175 swiper.loopFix({ 20176 direction: swiper.swipeDirection 20177 }); 20178 } 20179 data.startTranslate = swiper.getTranslate(); 20180 swiper.setTransition(0); 20181 if (swiper.animating) { 20182 const evt = new window.CustomEvent('transitionend', { 20183 bubbles: true, 20184 cancelable: true 20185 }); 20186 swiper.wrapperEl.dispatchEvent(evt); 20187 } 20188 data.allowMomentumBounce = false; 20189 // Grab Cursor 20190 if (params.grabCursor && (swiper.allowSlideNext === true || swiper.allowSlidePrev === true)) { 20191 swiper.setGrabCursor(true); 20192 } 20193 swiper.emit('sliderFirstMove', e); 20194 } 20195 let loopFixed; 20196 new Date().getTime(); 20197 if (data.isMoved && data.allowThresholdMove && prevTouchesDirection !== swiper.touchesDirection && isLoop && allowLoopFix && Math.abs(diff) >= 1) { 20198 Object.assign(touches, { 20199 startX: pageX, 20200 startY: pageY, 20201 currentX: pageX, 20202 currentY: pageY, 20203 startTranslate: data.currentTranslate 20204 }); 20205 data.loopSwapReset = true; 20206 data.startTranslate = data.currentTranslate; 20207 return; 20208 } 20209 swiper.emit('sliderMove', e); 20210 data.isMoved = true; 20211 data.currentTranslate = diff + data.startTranslate; 20212 let disableParentSwiper = true; 20213 let resistanceRatio = params.resistanceRatio; 20214 if (params.touchReleaseOnEdges) { 20215 resistanceRatio = 0; 20216 } 20217 if (diff > 0) { 20218 if (isLoop && allowLoopFix && !loopFixed && data.allowThresholdMove && data.currentTranslate > (params.centeredSlides ? swiper.minTranslate() - swiper.slidesSizesGrid[swiper.activeIndex + 1] : swiper.minTranslate())) { 20219 swiper.loopFix({ 20220 direction: 'prev', 20221 setTranslate: true, 20222 activeSlideIndex: 0 20223 }); 20224 } 20225 if (data.currentTranslate > swiper.minTranslate()) { 20226 disableParentSwiper = false; 20227 if (params.resistance) { 20228 data.currentTranslate = swiper.minTranslate() - 1 + (-swiper.minTranslate() + data.startTranslate + diff) ** resistanceRatio; 20229 } 20230 } 20231 } else if (diff < 0) { 20232 if (isLoop && allowLoopFix && !loopFixed && data.allowThresholdMove && data.currentTranslate < (params.centeredSlides ? swiper.maxTranslate() + swiper.slidesSizesGrid[swiper.slidesSizesGrid.length - 1] : swiper.maxTranslate())) { 20233 swiper.loopFix({ 20234 direction: 'next', 20235 setTranslate: true, 20236 activeSlideIndex: swiper.slides.length - (params.slidesPerView === 'auto' ? swiper.slidesPerViewDynamic() : Math.ceil(parseFloat(params.slidesPerView, 10))) 20237 }); 20238 } 20239 if (data.currentTranslate < swiper.maxTranslate()) { 20240 disableParentSwiper = false; 20241 if (params.resistance) { 20242 data.currentTranslate = swiper.maxTranslate() + 1 - (swiper.maxTranslate() - data.startTranslate - diff) ** resistanceRatio; 20243 } 20244 } 20245 } 20246 if (disableParentSwiper) { 20247 e.preventedByNestedSwiper = true; 20248 } 20249 20250 // Directions locks 20251 if (!swiper.allowSlideNext && swiper.swipeDirection === 'next' && data.currentTranslate < data.startTranslate) { 20252 data.currentTranslate = data.startTranslate; 20253 } 20254 if (!swiper.allowSlidePrev && swiper.swipeDirection === 'prev' && data.currentTranslate > data.startTranslate) { 20255 data.currentTranslate = data.startTranslate; 20256 } 20257 if (!swiper.allowSlidePrev && !swiper.allowSlideNext) { 20258 data.currentTranslate = data.startTranslate; 20259 } 20260 20261 // Threshold 20262 if (params.threshold > 0) { 20263 if (Math.abs(diff) > params.threshold || data.allowThresholdMove) { 20264 if (!data.allowThresholdMove) { 20265 data.allowThresholdMove = true; 20266 touches.startX = touches.currentX; 20267 touches.startY = touches.currentY; 20268 data.currentTranslate = data.startTranslate; 20269 touches.diff = swiper.isHorizontal() ? touches.currentX - touches.startX : touches.currentY - touches.startY; 20270 return; 20271 } 20272 } else { 20273 data.currentTranslate = data.startTranslate; 20274 return; 20275 } 20276 } 20277 if (!params.followFinger || params.cssMode) return; 20278 20279 // Update active index in free mode 20280 if (params.freeMode && params.freeMode.enabled && swiper.freeMode || params.watchSlidesProgress) { 20281 swiper.updateActiveIndex(); 20282 swiper.updateSlidesClasses(); 20283 } 20284 if (params.freeMode && params.freeMode.enabled && swiper.freeMode) { 20285 swiper.freeMode.onTouchMove(); 20286 } 20287 // Update progress 20288 swiper.updateProgress(data.currentTranslate); 20289 // Update translate 20290 swiper.setTranslate(data.currentTranslate); 20291} 20292 20293function onTouchEnd(event) { 20294 const swiper = this; 20295 const data = swiper.touchEventsData; 20296 let e = event; 20297 if (e.originalEvent) e = e.originalEvent; 20298 let targetTouch; 20299 const isTouchEvent = e.type === 'touchend' || e.type === 'touchcancel'; 20300 if (!isTouchEvent) { 20301 if (data.touchId !== null) return; // return from pointer if we use touch 20302 if (e.pointerId !== data.pointerId) return; 20303 targetTouch = e; 20304 } else { 20305 targetTouch = [...e.changedTouches].filter(t => t.identifier === data.touchId)[0]; 20306 if (!targetTouch || targetTouch.identifier !== data.touchId) return; 20307 } 20308 if (['pointercancel', 'pointerout', 'pointerleave', 'contextmenu'].includes(e.type)) { 20309 const proceed = ['pointercancel', 'contextmenu'].includes(e.type) && (swiper.browser.isSafari || swiper.browser.isWebView); 20310 if (!proceed) { 20311 return; 20312 } 20313 } 20314 data.pointerId = null; 20315 data.touchId = null; 20316 const { 20317 params, 20318 touches, 20319 rtlTranslate: rtl, 20320 slidesGrid, 20321 enabled 20322 } = swiper; 20323 if (!enabled) return; 20324 if (!params.simulateTouch && e.pointerType === 'mouse') return; 20325 if (data.allowTouchCallbacks) { 20326 swiper.emit('touchEnd', e); 20327 } 20328 data.allowTouchCallbacks = false; 20329 if (!data.isTouched) { 20330 if (data.isMoved && params.grabCursor) { 20331 swiper.setGrabCursor(false); 20332 } 20333 data.isMoved = false; 20334 data.startMoving = false; 20335 return; 20336 } 20337 20338 // Return Grab Cursor 20339 if (params.grabCursor && data.isMoved && data.isTouched && (swiper.allowSlideNext === true || swiper.allowSlidePrev === true)) { 20340 swiper.setGrabCursor(false); 20341 } 20342 20343 // Time diff 20344 const touchEndTime = (0,_utils_mjs__WEBPACK_IMPORTED_MODULE_1__.d)(); 20345 const timeDiff = touchEndTime - data.touchStartTime; 20346 20347 // Tap, doubleTap, Click 20348 if (swiper.allowClick) { 20349 const pathTree = e.path || e.composedPath && e.composedPath(); 20350 swiper.updateClickedSlide(pathTree && pathTree[0] || e.target, pathTree); 20351 swiper.emit('tap click', e); 20352 if (timeDiff < 300 && touchEndTime - data.lastClickTime < 300) { 20353 swiper.emit('doubleTap doubleClick', e); 20354 } 20355 } 20356 data.lastClickTime = (0,_utils_mjs__WEBPACK_IMPORTED_MODULE_1__.d)(); 20357 (0,_utils_mjs__WEBPACK_IMPORTED_MODULE_1__.n)(() => { 20358 if (!swiper.destroyed) swiper.allowClick = true; 20359 }); 20360 if (!data.isTouched || !data.isMoved || !swiper.swipeDirection || touches.diff === 0 && !data.loopSwapReset || data.currentTranslate === data.startTranslate && !data.loopSwapReset) { 20361 data.isTouched = false; 20362 data.isMoved = false; 20363 data.startMoving = false; 20364 return; 20365 } 20366 data.isTouched = false; 20367 data.isMoved = false; 20368 data.startMoving = false; 20369 let currentPos; 20370 if (params.followFinger) { 20371 currentPos = rtl ? swiper.translate : -swiper.translate; 20372 } else { 20373 currentPos = -data.currentTranslate; 20374 } 20375 if (params.cssMode) { 20376 return; 20377 } 20378 if (params.freeMode && params.freeMode.enabled) { 20379 swiper.freeMode.onTouchEnd({ 20380 currentPos 20381 }); 20382 return; 20383 } 20384 20385 // Find current slide 20386 const swipeToLast = currentPos >= -swiper.maxTranslate() && !swiper.params.loop; 20387 let stopIndex = 0; 20388 let groupSize = swiper.slidesSizesGrid[0]; 20389 for (let i = 0; i < slidesGrid.length; i += i < params.slidesPerGroupSkip ? 1 : params.slidesPerGroup) { 20390 const increment = i < params.slidesPerGroupSkip - 1 ? 1 : params.slidesPerGroup; 20391 if (typeof slidesGrid[i + increment] !== 'undefined') { 20392 if (swipeToLast || currentPos >= slidesGrid[i] && currentPos < slidesGrid[i + increment]) { 20393 stopIndex = i; 20394 groupSize = slidesGrid[i + increment] - slidesGrid[i]; 20395 } 20396 } else if (swipeToLast || currentPos >= slidesGrid[i]) { 20397 stopIndex = i; 20398 groupSize = slidesGrid[slidesGrid.length - 1] - slidesGrid[slidesGrid.length - 2]; 20399 } 20400 } 20401 let rewindFirstIndex = null; 20402 let rewindLastIndex = null; 20403 if (params.rewind) { 20404 if (swiper.isBeginning) { 20405 rewindLastIndex = params.virtual && params.virtual.enabled && swiper.virtual ? swiper.virtual.slides.length - 1 : swiper.slides.length - 1; 20406 } else if (swiper.isEnd) { 20407 rewindFirstIndex = 0; 20408 } 20409 } 20410 // Find current slide size 20411 const ratio = (currentPos - slidesGrid[stopIndex]) / groupSize; 20412 const increment = stopIndex < params.slidesPerGroupSkip - 1 ? 1 : params.slidesPerGroup; 20413 if (timeDiff > params.longSwipesMs) { 20414 // Long touches 20415 if (!params.longSwipes) { 20416 swiper.slideTo(swiper.activeIndex); 20417 return; 20418 } 20419 if (swiper.swipeDirection === 'next') { 20420 if (ratio >= params.longSwipesRatio) swiper.slideTo(params.rewind && swiper.isEnd ? rewindFirstIndex : stopIndex + increment);else swiper.slideTo(stopIndex); 20421 } 20422 if (swiper.swipeDirection === 'prev') { 20423 if (ratio > 1 - params.longSwipesRatio) { 20424 swiper.slideTo(stopIndex + increment); 20425 } else if (rewindLastIndex !== null && ratio < 0 && Math.abs(ratio) > params.longSwipesRatio) { 20426 swiper.slideTo(rewindLastIndex); 20427 } else { 20428 swiper.slideTo(stopIndex); 20429 } 20430 } 20431 } else { 20432 // Short swipes 20433 if (!params.shortSwipes) { 20434 swiper.slideTo(swiper.activeIndex); 20435 return; 20436 } 20437 const isNavButtonTarget = swiper.navigation && (e.target === swiper.navigation.nextEl || e.target === swiper.navigation.prevEl); 20438 if (!isNavButtonTarget) { 20439 if (swiper.swipeDirection === 'next') { 20440 swiper.slideTo(rewindFirstIndex !== null ? rewindFirstIndex : stopIndex + increment); 20441 } 20442 if (swiper.swipeDirection === 'prev') { 20443 swiper.slideTo(rewindLastIndex !== null ? rewindLastIndex : stopIndex); 20444 } 20445 } else if (e.target === swiper.navigation.nextEl) { 20446 swiper.slideTo(stopIndex + increment); 20447 } else { 20448 swiper.slideTo(stopIndex); 20449 } 20450 } 20451} 20452 20453function onResize() { 20454 const swiper = this; 20455 const { 20456 params, 20457 el 20458 } = swiper; 20459 if (el && el.offsetWidth === 0) return; 20460 20461 // Breakpoints 20462 if (params.breakpoints) { 20463 swiper.setBreakpoint(); 20464 } 20465 20466 // Save locks 20467 const { 20468 allowSlideNext, 20469 allowSlidePrev, 20470 snapGrid 20471 } = swiper; 20472 const isVirtual = swiper.virtual && swiper.params.virtual.enabled; 20473 20474 // Disable locks on resize 20475 swiper.allowSlideNext = true; 20476 swiper.allowSlidePrev = true; 20477 swiper.updateSize(); 20478 swiper.updateSlides(); 20479 swiper.updateSlidesClasses(); 20480 const isVirtualLoop = isVirtual && params.loop; 20481 if ((params.slidesPerView === 'auto' || params.slidesPerView > 1) && swiper.isEnd && !swiper.isBeginning && !swiper.params.centeredSlides && !isVirtualLoop) { 20482 swiper.slideTo(swiper.slides.length - 1, 0, false, true); 20483 } else { 20484 if (swiper.params.loop && !isVirtual) { 20485 swiper.slideToLoop(swiper.realIndex, 0, false, true); 20486 } else { 20487 swiper.slideTo(swiper.activeIndex, 0, false, true); 20488 } 20489 } 20490 if (swiper.autoplay && swiper.autoplay.running && swiper.autoplay.paused) { 20491 clearTimeout(swiper.autoplay.resizeTimeout); 20492 swiper.autoplay.resizeTimeout = setTimeout(() => { 20493 if (swiper.autoplay && swiper.autoplay.running && swiper.autoplay.paused) { 20494 swiper.autoplay.resume(); 20495 } 20496 }, 500); 20497 } 20498 // Return locks after resize 20499 swiper.allowSlidePrev = allowSlidePrev; 20500 swiper.allowSlideNext = allowSlideNext; 20501 if (swiper.params.watchOverflow && snapGrid !== swiper.snapGrid) { 20502 swiper.checkOverflow(); 20503 } 20504} 20505 20506function onClick(e) { 20507 const swiper = this; 20508 if (!swiper.enabled) return; 20509 if (!swiper.allowClick) { 20510 if (swiper.params.preventClicks) e.preventDefault(); 20511 if (swiper.params.preventClicksPropagation && swiper.animating) { 20512 e.stopPropagation(); 20513 e.stopImmediatePropagation(); 20514 } 20515 } 20516} 20517 20518function onScroll() { 20519 const swiper = this; 20520 const { 20521 wrapperEl, 20522 rtlTranslate, 20523 enabled 20524 } = swiper; 20525 if (!enabled) return; 20526 swiper.previousTranslate = swiper.translate; 20527 if (swiper.isHorizontal()) { 20528 swiper.translate = -wrapperEl.scrollLeft; 20529 } else { 20530 swiper.translate = -wrapperEl.scrollTop; 20531 } 20532 // eslint-disable-next-line 20533 if (swiper.translate === 0) swiper.translate = 0; 20534 swiper.updateActiveIndex(); 20535 swiper.updateSlidesClasses(); 20536 let newProgress; 20537 const translatesDiff = swiper.maxTranslate() - swiper.minTranslate(); 20538 if (translatesDiff === 0) { 20539 newProgress = 0; 20540 } else { 20541 newProgress = (swiper.translate - swiper.minTranslate()) / translatesDiff; 20542 } 20543 if (newProgress !== swiper.progress) { 20544 swiper.updateProgress(rtlTranslate ? -swiper.translate : swiper.translate); 20545 } 20546 swiper.emit('setTranslate', swiper.translate, false); 20547} 20548 20549function onLoad(e) { 20550 const swiper = this; 20551 processLazyPreloader(swiper, e.target); 20552 if (swiper.params.cssMode || swiper.params.slidesPerView !== 'auto' && !swiper.params.autoHeight) { 20553 return; 20554 } 20555 swiper.update(); 20556} 20557 20558function onDocumentTouchStart() { 20559 const swiper = this; 20560 if (swiper.documentTouchHandlerProceeded) return; 20561 swiper.documentTouchHandlerProceeded = true; 20562 if (swiper.params.touchReleaseOnEdges) { 20563 swiper.el.style.touchAction = 'auto'; 20564 } 20565} 20566 20567const events = (swiper, method) => { 20568 const document = (0,_ssr_window_esm_mjs__WEBPACK_IMPORTED_MODULE_0__.g)(); 20569 const { 20570 params, 20571 el, 20572 wrapperEl, 20573 device 20574 } = swiper; 20575 const capture = !!params.nested; 20576 const domMethod = method === 'on' ? 'addEventListener' : 'removeEventListener'; 20577 const swiperMethod = method; 20578 20579 // Touch Events 20580 document[domMethod]('touchstart', swiper.onDocumentTouchStart, { 20581 passive: false, 20582 capture 20583 }); 20584 el[domMethod]('touchstart', swiper.onTouchStart, { 20585 passive: false 20586 }); 20587 el[domMethod]('pointerdown', swiper.onTouchStart, { 20588 passive: false 20589 }); 20590 document[domMethod]('touchmove', swiper.onTouchMove, { 20591 passive: false, 20592 capture 20593 }); 20594 document[domMethod]('pointermove', swiper.onTouchMove, { 20595 passive: false, 20596 capture 20597 }); 20598 document[domMethod]('touchend', swiper.onTouchEnd, { 20599 passive: true 20600 }); 20601 document[domMethod]('pointerup', swiper.onTouchEnd, { 20602 passive: true 20603 }); 20604 document[domMethod]('pointercancel', swiper.onTouchEnd, { 20605 passive: true 20606 }); 20607 document[domMethod]('touchcancel', swiper.onTouchEnd, { 20608 passive: true 20609 }); 20610 document[domMethod]('pointerout', swiper.onTouchEnd, { 20611 passive: true 20612 }); 20613 document[domMethod]('pointerleave', swiper.onTouchEnd, { 20614 passive: true 20615 }); 20616 document[domMethod]('contextmenu', swiper.onTouchEnd, { 20617 passive: true 20618 }); 20619 20620 // Prevent Links Clicks 20621 if (params.preventClicks || params.preventClicksPropagation) { 20622 el[domMethod]('click', swiper.onClick, true); 20623 } 20624 if (params.cssMode) { 20625 wrapperEl[domMethod]('scroll', swiper.onScroll); 20626 } 20627 20628 // Resize handler 20629 if (params.updateOnWindowResize) { 20630 swiper[swiperMethod](device.ios || device.android ? 'resize orientationchange observerUpdate' : 'resize observerUpdate', onResize, true); 20631 } else { 20632 swiper[swiperMethod]('observerUpdate', onResize, true); 20633 } 20634 20635 // Images loader 20636 el[domMethod]('load', swiper.onLoad, { 20637 capture: true 20638 }); 20639}; 20640function attachEvents() { 20641 const swiper = this; 20642 const { 20643 params 20644 } = swiper; 20645 swiper.onTouchStart = onTouchStart.bind(swiper); 20646 swiper.onTouchMove = onTouchMove.bind(swiper); 20647 swiper.onTouchEnd = onTouchEnd.bind(swiper); 20648 swiper.onDocumentTouchStart = onDocumentTouchStart.bind(swiper); 20649 if (params.cssMode) { 20650 swiper.onScroll = onScroll.bind(swiper); 20651 } 20652 swiper.onClick = onClick.bind(swiper); 20653 swiper.onLoad = onLoad.bind(swiper); 20654 events(swiper, 'on'); 20655} 20656function detachEvents() { 20657 const swiper = this; 20658 events(swiper, 'off'); 20659} 20660var events$1 = { 20661 attachEvents, 20662 detachEvents 20663}; 20664 20665const isGridEnabled = (swiper, params) => { 20666 return swiper.grid && params.grid && params.grid.rows > 1; 20667}; 20668function setBreakpoint() { 20669 const swiper = this; 20670 const { 20671 realIndex, 20672 initialized, 20673 params, 20674 el 20675 } = swiper; 20676 const breakpoints = params.breakpoints; 20677 if (!breakpoints || breakpoints && Object.keys(breakpoints).length === 0) return; 20678 20679 // Get breakpoint for window width and update parameters 20680 const breakpoint = swiper.getBreakpoint(breakpoints, swiper.params.breakpointsBase, swiper.el); 20681 if (!breakpoint || swiper.currentBreakpoint === breakpoint) return; 20682 const breakpointOnlyParams = breakpoint in breakpoints ? breakpoints[breakpoint] : undefined; 20683 const breakpointParams = breakpointOnlyParams || swiper.originalParams; 20684 const wasMultiRow = isGridEnabled(swiper, params); 20685 const isMultiRow = isGridEnabled(swiper, breakpointParams); 20686 const wasEnabled = params.enabled; 20687 if (wasMultiRow && !isMultiRow) { 20688 el.classList.remove(`${params.containerModifierClass}grid`, `${params.containerModifierClass}grid-column`); 20689 swiper.emitContainerClasses(); 20690 } else if (!wasMultiRow && isMultiRow) { 20691 el.classList.add(`${params.containerModifierClass}grid`); 20692 if (breakpointParams.grid.fill && breakpointParams.grid.fill === 'column' || !breakpointParams.grid.fill && params.grid.fill === 'column') { 20693 el.classList.add(`${params.containerModifierClass}grid-column`); 20694 } 20695 swiper.emitContainerClasses(); 20696 } 20697 20698 // Toggle navigation, pagination, scrollbar 20699 ['navigation', 'pagination', 'scrollbar'].forEach(prop => { 20700 if (typeof breakpointParams[prop] === 'undefined') return; 20701 const wasModuleEnabled = params[prop] && params[prop].enabled; 20702 const isModuleEnabled = breakpointParams[prop] && breakpointParams[prop].enabled; 20703 if (wasModuleEnabled && !isModuleEnabled) { 20704 swiper[prop].disable(); 20705 } 20706 if (!wasModuleEnabled && isModuleEnabled) { 20707 swiper[prop].enable(); 20708 } 20709 }); 20710 const directionChanged = breakpointParams.direction && breakpointParams.direction !== params.direction; 20711 const needsReLoop = params.loop && (breakpointParams.slidesPerView !== params.slidesPerView || directionChanged); 20712 const wasLoop = params.loop; 20713 if (directionChanged && initialized) { 20714 swiper.changeDirection(); 20715 } 20716 (0,_utils_mjs__WEBPACK_IMPORTED_MODULE_1__.t)(swiper.params, breakpointParams); 20717 const isEnabled = swiper.params.enabled; 20718 const hasLoop = swiper.params.loop; 20719 Object.assign(swiper, { 20720 allowTouchMove: swiper.params.allowTouchMove, 20721 allowSlideNext: swiper.params.allowSlideNext, 20722 allowSlidePrev: swiper.params.allowSlidePrev 20723 }); 20724 if (wasEnabled && !isEnabled) { 20725 swiper.disable(); 20726 } else if (!wasEnabled && isEnabled) { 20727 swiper.enable(); 20728 } 20729 swiper.currentBreakpoint = breakpoint; 20730 swiper.emit('_beforeBreakpoint', breakpointParams); 20731 if (initialized) { 20732 if (needsReLoop) { 20733 swiper.loopDestroy(); 20734 swiper.loopCreate(realIndex); 20735 swiper.updateSlides(); 20736 } else if (!wasLoop && hasLoop) { 20737 swiper.loopCreate(realIndex); 20738 swiper.updateSlides(); 20739 } else if (wasLoop && !hasLoop) { 20740 swiper.loopDestroy(); 20741 } 20742 } 20743 swiper.emit('breakpoint', breakpointParams); 20744} 20745 20746function getBreakpoint(breakpoints, base, containerEl) { 20747 if (base === void 0) { 20748 base = 'window'; 20749 } 20750 if (!breakpoints || base === 'container' && !containerEl) return undefined; 20751 let breakpoint = false; 20752 const window = (0,_ssr_window_esm_mjs__WEBPACK_IMPORTED_MODULE_0__.a)(); 20753 const currentHeight = base === 'window' ? window.innerHeight : containerEl.clientHeight; 20754 const points = Object.keys(breakpoints).map(point => { 20755 if (typeof point === 'string' && point.indexOf('@') === 0) { 20756 const minRatio = parseFloat(point.substr(1)); 20757 const value = currentHeight * minRatio; 20758 return { 20759 value, 20760 point 20761 }; 20762 } 20763 return { 20764 value: point, 20765 point 20766 }; 20767 }); 20768 points.sort((a, b) => parseInt(a.value, 10) - parseInt(b.value, 10)); 20769 for (let i = 0; i < points.length; i += 1) { 20770 const { 20771 point, 20772 value 20773 } = points[i]; 20774 if (base === 'window') { 20775 if (window.matchMedia(`(min-width: ${value}px)`).matches) { 20776 breakpoint = point; 20777 } 20778 } else if (value <= containerEl.clientWidth) { 20779 breakpoint = point; 20780 } 20781 } 20782 return breakpoint || 'max'; 20783} 20784 20785var breakpoints = { 20786 setBreakpoint, 20787 getBreakpoint 20788}; 20789 20790function prepareClasses(entries, prefix) { 20791 const resultClasses = []; 20792 entries.forEach(item => { 20793 if (typeof item === 'object') { 20794 Object.keys(item).forEach(classNames => { 20795 if (item[classNames]) { 20796 resultClasses.push(prefix + classNames); 20797 } 20798 }); 20799 } else if (typeof item === 'string') { 20800 resultClasses.push(prefix + item); 20801 } 20802 }); 20803 return resultClasses; 20804} 20805function addClasses() { 20806 const swiper = this; 20807 const { 20808 classNames, 20809 params, 20810 rtl, 20811 el, 20812 device 20813 } = swiper; 20814 // prettier-ignore 20815 const suffixes = prepareClasses(['initialized', params.direction, { 20816 'free-mode': swiper.params.freeMode && params.freeMode.enabled 20817 }, { 20818 'autoheight': params.autoHeight 20819 }, { 20820 'rtl': rtl 20821 }, { 20822 'grid': params.grid && params.grid.rows > 1 20823 }, { 20824 'grid-column': params.grid && params.grid.rows > 1 && params.grid.fill === 'column' 20825 }, { 20826 'android': device.android 20827 }, { 20828 'ios': device.ios 20829 }, { 20830 'css-mode': params.cssMode 20831 }, { 20832 'centered': params.cssMode && params.centeredSlides 20833 }, { 20834 'watch-progress': params.watchSlidesProgress 20835 }], params.containerModifierClass); 20836 classNames.push(...suffixes); 20837 el.classList.add(...classNames); 20838 swiper.emitContainerClasses(); 20839} 20840 20841function removeClasses() { 20842 const swiper = this; 20843 const { 20844 el, 20845 classNames 20846 } = swiper; 20847 el.classList.remove(...classNames); 20848 swiper.emitContainerClasses(); 20849} 20850 20851var classes = { 20852 addClasses, 20853 removeClasses 20854}; 20855 20856function checkOverflow() { 20857 const swiper = this; 20858 const { 20859 isLocked: wasLocked, 20860 params 20861 } = swiper; 20862 const { 20863 slidesOffsetBefore 20864 } = params; 20865 if (slidesOffsetBefore) { 20866 const lastSlideIndex = swiper.slides.length - 1; 20867 const lastSlideRightEdge = swiper.slidesGrid[lastSlideIndex] + swiper.slidesSizesGrid[lastSlideIndex] + slidesOffsetBefore * 2; 20868 swiper.isLocked = swiper.size > lastSlideRightEdge; 20869 } else { 20870 swiper.isLocked = swiper.snapGrid.length === 1; 20871 } 20872 if (params.allowSlideNext === true) { 20873 swiper.allowSlideNext = !swiper.isLocked; 20874 } 20875 if (params.allowSlidePrev === true) { 20876 swiper.allowSlidePrev = !swiper.isLocked; 20877 } 20878 if (wasLocked && wasLocked !== swiper.isLocked) { 20879 swiper.isEnd = false; 20880 } 20881 if (wasLocked !== swiper.isLocked) { 20882 swiper.emit(swiper.isLocked ? 'lock' : 'unlock'); 20883 } 20884} 20885var checkOverflow$1 = { 20886 checkOverflow 20887}; 20888 20889var defaults = { 20890 init: true, 20891 direction: 'horizontal', 20892 oneWayMovement: false, 20893 touchEventsTarget: 'wrapper', 20894 initialSlide: 0, 20895 speed: 300, 20896 cssMode: false, 20897 updateOnWindowResize: true, 20898 resizeObserver: true, 20899 nested: false, 20900 createElements: false, 20901 eventsPrefix: 'swiper', 20902 enabled: true, 20903 focusableElements: 'input, select, option, textarea, button, video, label', 20904 // Overrides 20905 width: null, 20906 height: null, 20907 // 20908 preventInteractionOnTransition: false, 20909 // ssr 20910 userAgent: null, 20911 url: null, 20912 // To support iOS's swipe-to-go-back gesture (when being used in-app). 20913 edgeSwipeDetection: false, 20914 edgeSwipeThreshold: 20, 20915 // Autoheight 20916 autoHeight: false, 20917 // Set wrapper width 20918 setWrapperSize: false, 20919 // Virtual Translate 20920 virtualTranslate: false, 20921 // Effects 20922 effect: 'slide', 20923 // 'slide' or 'fade' or 'cube' or 'coverflow' or 'flip' 20924 20925 // Breakpoints 20926 breakpoints: undefined, 20927 breakpointsBase: 'window', 20928 // Slides grid 20929 spaceBetween: 0, 20930 slidesPerView: 1, 20931 slidesPerGroup: 1, 20932 slidesPerGroupSkip: 0, 20933 slidesPerGroupAuto: false, 20934 centeredSlides: false, 20935 centeredSlidesBounds: false, 20936 slidesOffsetBefore: 0, 20937 // in px 20938 slidesOffsetAfter: 0, 20939 // in px 20940 normalizeSlideIndex: true, 20941 centerInsufficientSlides: false, 20942 // Disable swiper and hide navigation when container not overflow 20943 watchOverflow: true, 20944 // Round length 20945 roundLengths: false, 20946 // Touches 20947 touchRatio: 1, 20948 touchAngle: 45, 20949 simulateTouch: true, 20950 shortSwipes: true, 20951 longSwipes: true, 20952 longSwipesRatio: 0.5, 20953 longSwipesMs: 300, 20954 followFinger: true, 20955 allowTouchMove: true, 20956 threshold: 5, 20957 touchMoveStopPropagation: false, 20958 touchStartPreventDefault: true, 20959 touchStartForcePreventDefault: false, 20960 touchReleaseOnEdges: false, 20961 // Unique Navigation Elements 20962 uniqueNavElements: true, 20963 // Resistance 20964 resistance: true, 20965 resistanceRatio: 0.85, 20966 // Progress 20967 watchSlidesProgress: false, 20968 // Cursor 20969 grabCursor: false, 20970 // Clicks 20971 preventClicks: true, 20972 preventClicksPropagation: true, 20973 slideToClickedSlide: false, 20974 // loop 20975 loop: false, 20976 loopAddBlankSlides: true, 20977 loopAdditionalSlides: 0, 20978 loopPreventsSliding: true, 20979 // rewind 20980 rewind: false, 20981 // Swiping/no swiping 20982 allowSlidePrev: true, 20983 allowSlideNext: true, 20984 swipeHandler: null, 20985 // '.swipe-handler', 20986 noSwiping: true, 20987 noSwipingClass: 'swiper-no-swiping', 20988 noSwipingSelector: null, 20989 // Passive Listeners 20990 passiveListeners: true, 20991 maxBackfaceHiddenSlides: 10, 20992 // NS 20993 containerModifierClass: 'swiper-', 20994 // NEW 20995 slideClass: 'swiper-slide', 20996 slideBlankClass: 'swiper-slide-blank', 20997 slideActiveClass: 'swiper-slide-active', 20998 slideVisibleClass: 'swiper-slide-visible', 20999 slideFullyVisibleClass: 'swiper-slide-fully-visible', 21000 slideNextClass: 'swiper-slide-next', 21001 slidePrevClass: 'swiper-slide-prev', 21002 wrapperClass: 'swiper-wrapper', 21003 lazyPreloaderClass: 'swiper-lazy-preloader', 21004 lazyPreloadPrevNext: 0, 21005 // Callbacks 21006 runCallbacksOnInit: true, 21007 // Internals 21008 _emitClasses: false 21009}; 21010 21011function moduleExtendParams(params, allModulesParams) { 21012 return function extendParams(obj) { 21013 if (obj === void 0) { 21014 obj = {}; 21015 } 21016 const moduleParamName = Object.keys(obj)[0]; 21017 const moduleParams = obj[moduleParamName]; 21018 if (typeof moduleParams !== 'object' || moduleParams === null) { 21019 (0,_utils_mjs__WEBPACK_IMPORTED_MODULE_1__.t)(allModulesParams, obj); 21020 return; 21021 } 21022 if (params[moduleParamName] === true) { 21023 params[moduleParamName] = { 21024 enabled: true 21025 }; 21026 } 21027 if (moduleParamName === 'navigation' && params[moduleParamName] && params[moduleParamName].enabled && !params[moduleParamName].prevEl && !params[moduleParamName].nextEl) { 21028 params[moduleParamName].auto = true; 21029 } 21030 if (['pagination', 'scrollbar'].indexOf(moduleParamName) >= 0 && params[moduleParamName] && params[moduleParamName].enabled && !params[moduleParamName].el) { 21031 params[moduleParamName].auto = true; 21032 } 21033 if (!(moduleParamName in params && 'enabled' in moduleParams)) { 21034 (0,_utils_mjs__WEBPACK_IMPORTED_MODULE_1__.t)(allModulesParams, obj); 21035 return; 21036 } 21037 if (typeof params[moduleParamName] === 'object' && !('enabled' in params[moduleParamName])) { 21038 params[moduleParamName].enabled = true; 21039 } 21040 if (!params[moduleParamName]) params[moduleParamName] = { 21041 enabled: false 21042 }; 21043 (0,_utils_mjs__WEBPACK_IMPORTED_MODULE_1__.t)(allModulesParams, obj); 21044 }; 21045} 21046 21047/* eslint no-param-reassign: "off" */ 21048const prototypes = { 21049 eventsEmitter, 21050 update, 21051 translate, 21052 transition, 21053 slide, 21054 loop, 21055 grabCursor, 21056 events: events$1, 21057 breakpoints, 21058 checkOverflow: checkOverflow$1, 21059 classes 21060}; 21061const extendedDefaults = {}; 21062class Swiper { 21063 constructor() { 21064 let el; 21065 let params; 21066 for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) { 21067 args[_key] = arguments[_key]; 21068 } 21069 if (args.length === 1 && args[0].constructor && Object.prototype.toString.call(args[0]).slice(8, -1) === 'Object') { 21070 params = args[0]; 21071 } else { 21072 [el, params] = args; 21073 } 21074 if (!params) params = {}; 21075 params = (0,_utils_mjs__WEBPACK_IMPORTED_MODULE_1__.t)({}, params); 21076 if (el && !params.el) params.el = el; 21077 const document = (0,_ssr_window_esm_mjs__WEBPACK_IMPORTED_MODULE_0__.g)(); 21078 if (params.el && typeof params.el === 'string' && document.querySelectorAll(params.el).length > 1) { 21079 const swipers = []; 21080 document.querySelectorAll(params.el).forEach(containerEl => { 21081 const newParams = (0,_utils_mjs__WEBPACK_IMPORTED_MODULE_1__.t)({}, params, { 21082 el: containerEl 21083 }); 21084 swipers.push(new Swiper(newParams)); 21085 }); 21086 // eslint-disable-next-line no-constructor-return 21087 return swipers; 21088 } 21089 21090 // Swiper Instance 21091 const swiper = this; 21092 swiper.__swiper__ = true; 21093 swiper.support = getSupport(); 21094 swiper.device = getDevice({ 21095 userAgent: params.userAgent 21096 }); 21097 swiper.browser = getBrowser(); 21098 swiper.eventsListeners = {}; 21099 swiper.eventsAnyListeners = []; 21100 swiper.modules = [...swiper.__modules__]; 21101 if (params.modules && Array.isArray(params.modules)) { 21102 swiper.modules.push(...params.modules); 21103 } 21104 const allModulesParams = {}; 21105 swiper.modules.forEach(mod => { 21106 mod({ 21107 params, 21108 swiper, 21109 extendParams: moduleExtendParams(params, allModulesParams), 21110 on: swiper.on.bind(swiper), 21111 once: swiper.once.bind(swiper), 21112 off: swiper.off.bind(swiper), 21113 emit: swiper.emit.bind(swiper) 21114 }); 21115 }); 21116 21117 // Extend defaults with modules params 21118 const swiperParams = (0,_utils_mjs__WEBPACK_IMPORTED_MODULE_1__.t)({}, defaults, allModulesParams); 21119 21120 // Extend defaults with passed params 21121 swiper.params = (0,_utils_mjs__WEBPACK_IMPORTED_MODULE_1__.t)({}, swiperParams, extendedDefaults, params); 21122 swiper.originalParams = (0,_utils_mjs__WEBPACK_IMPORTED_MODULE_1__.t)({}, swiper.params); 21123 swiper.passedParams = (0,_utils_mjs__WEBPACK_IMPORTED_MODULE_1__.t)({}, params); 21124 21125 // add event listeners 21126 if (swiper.params && swiper.params.on) { 21127 Object.keys(swiper.params.on).forEach(eventName => { 21128 swiper.on(eventName, swiper.params.on[eventName]); 21129 }); 21130 } 21131 if (swiper.params && swiper.params.onAny) { 21132 swiper.onAny(swiper.params.onAny); 21133 } 21134 21135 // Extend Swiper 21136 Object.assign(swiper, { 21137 enabled: swiper.params.enabled, 21138 el, 21139 // Classes 21140 classNames: [], 21141 // Slides 21142 slides: [], 21143 slidesGrid: [], 21144 snapGrid: [], 21145 slidesSizesGrid: [], 21146 // isDirection 21147 isHorizontal() { 21148 return swiper.params.direction === 'horizontal'; 21149 }, 21150 isVertical() { 21151 return swiper.params.direction === 'vertical'; 21152 }, 21153 // Indexes 21154 activeIndex: 0, 21155 realIndex: 0, 21156 // 21157 isBeginning: true, 21158 isEnd: false, 21159 // Props 21160 translate: 0, 21161 previousTranslate: 0, 21162 progress: 0, 21163 velocity: 0, 21164 animating: false, 21165 cssOverflowAdjustment() { 21166 // Returns 0 unless `translate` is > 2**23 21167 // Should be subtracted from css values to prevent overflow 21168 return Math.trunc(this.translate / 2 ** 23) * 2 ** 23; 21169 }, 21170 // Locks 21171 allowSlideNext: swiper.params.allowSlideNext, 21172 allowSlidePrev: swiper.params.allowSlidePrev, 21173 // Touch Events 21174 touchEventsData: { 21175 isTouched: undefined, 21176 isMoved: undefined, 21177 allowTouchCallbacks: undefined, 21178 touchStartTime: undefined, 21179 isScrolling: undefined, 21180 currentTranslate: undefined, 21181 startTranslate: undefined, 21182 allowThresholdMove: undefined, 21183 // Form elements to match 21184 focusableElements: swiper.params.focusableElements, 21185 // Last click time 21186 lastClickTime: 0, 21187 clickTimeout: undefined, 21188 // Velocities 21189 velocities: [], 21190 allowMomentumBounce: undefined, 21191 startMoving: undefined, 21192 pointerId: null, 21193 touchId: null 21194 }, 21195 // Clicks 21196 allowClick: true, 21197 // Touches 21198 allowTouchMove: swiper.params.allowTouchMove, 21199 touches: { 21200 startX: 0, 21201 startY: 0, 21202 currentX: 0, 21203 currentY: 0, 21204 diff: 0 21205 }, 21206 // Images 21207 imagesToLoad: [], 21208 imagesLoaded: 0 21209 }); 21210 swiper.emit('_swiper'); 21211 21212 // Init 21213 if (swiper.params.init) { 21214 swiper.init(); 21215 } 21216 21217 // Return app instance 21218 // eslint-disable-next-line no-constructor-return 21219 return swiper; 21220 } 21221 getDirectionLabel(property) { 21222 if (this.isHorizontal()) { 21223 return property; 21224 } 21225 // prettier-ignore 21226 return { 21227 'width': 'height', 21228 'margin-top': 'margin-left', 21229 'margin-bottom ': 'margin-right', 21230 'margin-left': 'margin-top', 21231 'margin-right': 'margin-bottom', 21232 'padding-left': 'padding-top', 21233 'padding-right': 'padding-bottom', 21234 'marginRight': 'marginBottom' 21235 }[property]; 21236 } 21237 getSlideIndex(slideEl) { 21238 const { 21239 slidesEl, 21240 params 21241 } = this; 21242 const slides = (0,_utils_mjs__WEBPACK_IMPORTED_MODULE_1__.e)(slidesEl, `.${params.slideClass}, swiper-slide`); 21243 const firstSlideIndex = (0,_utils_mjs__WEBPACK_IMPORTED_MODULE_1__.g)(slides[0]); 21244 return (0,_utils_mjs__WEBPACK_IMPORTED_MODULE_1__.g)(slideEl) - firstSlideIndex; 21245 } 21246 getSlideIndexByData(index) { 21247 return this.getSlideIndex(this.slides.filter(slideEl => slideEl.getAttribute('data-swiper-slide-index') * 1 === index)[0]); 21248 } 21249 recalcSlides() { 21250 const swiper = this; 21251 const { 21252 slidesEl, 21253 params 21254 } = swiper; 21255 swiper.slides = (0,_utils_mjs__WEBPACK_IMPORTED_MODULE_1__.e)(slidesEl, `.${params.slideClass}, swiper-slide`); 21256 } 21257 enable() { 21258 const swiper = this; 21259 if (swiper.enabled) return; 21260 swiper.enabled = true; 21261 if (swiper.params.grabCursor) { 21262 swiper.setGrabCursor(); 21263 } 21264 swiper.emit('enable'); 21265 } 21266 disable() { 21267 const swiper = this; 21268 if (!swiper.enabled) return; 21269 swiper.enabled = false; 21270 if (swiper.params.grabCursor) { 21271 swiper.unsetGrabCursor(); 21272 } 21273 swiper.emit('disable'); 21274 } 21275 setProgress(progress, speed) { 21276 const swiper = this; 21277 progress = Math.min(Math.max(progress, 0), 1); 21278 const min = swiper.minTranslate(); 21279 const max = swiper.maxTranslate(); 21280 const current = (max - min) * progress + min; 21281 swiper.translateTo(current, typeof speed === 'undefined' ? 0 : speed); 21282 swiper.updateActiveIndex(); 21283 swiper.updateSlidesClasses(); 21284 } 21285 emitContainerClasses() { 21286 const swiper = this; 21287 if (!swiper.params._emitClasses || !swiper.el) return; 21288 const cls = swiper.el.className.split(' ').filter(className => { 21289 return className.indexOf('swiper') === 0 || className.indexOf(swiper.params.containerModifierClass) === 0; 21290 }); 21291 swiper.emit('_containerClasses', cls.join(' ')); 21292 } 21293 getSlideClasses(slideEl) { 21294 const swiper = this; 21295 if (swiper.destroyed) return ''; 21296 return slideEl.className.split(' ').filter(className => { 21297 return className.indexOf('swiper-slide') === 0 || className.indexOf(swiper.params.slideClass) === 0; 21298 }).join(' '); 21299 } 21300 emitSlidesClasses() { 21301 const swiper = this; 21302 if (!swiper.params._emitClasses || !swiper.el) return; 21303 const updates = []; 21304 swiper.slides.forEach(slideEl => { 21305 const classNames = swiper.getSlideClasses(slideEl); 21306 updates.push({ 21307 slideEl, 21308 classNames 21309 }); 21310 swiper.emit('_slideClass', slideEl, classNames); 21311 }); 21312 swiper.emit('_slideClasses', updates); 21313 } 21314 slidesPerViewDynamic(view, exact) { 21315 if (view === void 0) { 21316 view = 'current'; 21317 } 21318 if (exact === void 0) { 21319 exact = false; 21320 } 21321 const swiper = this; 21322 const { 21323 params, 21324 slides, 21325 slidesGrid, 21326 slidesSizesGrid, 21327 size: swiperSize, 21328 activeIndex 21329 } = swiper; 21330 let spv = 1; 21331 if (typeof params.slidesPerView === 'number') return params.slidesPerView; 21332 if (params.centeredSlides) { 21333 let slideSize = slides[activeIndex] ? slides[activeIndex].swiperSlideSize : 0; 21334 let breakLoop; 21335 for (let i = activeIndex + 1; i < slides.length; i += 1) { 21336 if (slides[i] && !breakLoop) { 21337 slideSize += slides[i].swiperSlideSize; 21338 spv += 1; 21339 if (slideSize > swiperSize) breakLoop = true; 21340 } 21341 } 21342 for (let i = activeIndex - 1; i >= 0; i -= 1) { 21343 if (slides[i] && !breakLoop) { 21344 slideSize += slides[i].swiperSlideSize; 21345 spv += 1; 21346 if (slideSize > swiperSize) breakLoop = true; 21347 } 21348 } 21349 } else { 21350 // eslint-disable-next-line 21351 if (view === 'current') { 21352 for (let i = activeIndex + 1; i < slides.length; i += 1) { 21353 const slideInView = exact ? slidesGrid[i] + slidesSizesGrid[i] - slidesGrid[activeIndex] < swiperSize : slidesGrid[i] - slidesGrid[activeIndex] < swiperSize; 21354 if (slideInView) { 21355 spv += 1; 21356 } 21357 } 21358 } else { 21359 // previous 21360 for (let i = activeIndex - 1; i >= 0; i -= 1) { 21361 const slideInView = slidesGrid[activeIndex] - slidesGrid[i] < swiperSize; 21362 if (slideInView) { 21363 spv += 1; 21364 } 21365 } 21366 } 21367 } 21368 return spv; 21369 } 21370 update() { 21371 const swiper = this; 21372 if (!swiper || swiper.destroyed) return; 21373 const { 21374 snapGrid, 21375 params 21376 } = swiper; 21377 // Breakpoints 21378 if (params.breakpoints) { 21379 swiper.setBreakpoint(); 21380 } 21381 [...swiper.el.querySelectorAll('[loading="lazy"]')].forEach(imageEl => { 21382 if (imageEl.complete) { 21383 processLazyPreloader(swiper, imageEl); 21384 } 21385 }); 21386 swiper.updateSize(); 21387 swiper.updateSlides(); 21388 swiper.updateProgress(); 21389 swiper.updateSlidesClasses(); 21390 function setTranslate() { 21391 const translateValue = swiper.rtlTranslate ? swiper.translate * -1 : swiper.translate; 21392 const newTranslate = Math.min(Math.max(translateValue, swiper.maxTranslate()), swiper.minTranslate()); 21393 swiper.setTranslate(newTranslate); 21394 swiper.updateActiveIndex(); 21395 swiper.updateSlidesClasses(); 21396 } 21397 let translated; 21398 if (params.freeMode && params.freeMode.enabled && !params.cssMode) { 21399 setTranslate(); 21400 if (params.autoHeight) { 21401 swiper.updateAutoHeight(); 21402 } 21403 } else { 21404 if ((params.slidesPerView === 'auto' || params.slidesPerView > 1) && swiper.isEnd && !params.centeredSlides) { 21405 const slides = swiper.virtual && params.virtual.enabled ? swiper.virtual.slides : swiper.slides; 21406 translated = swiper.slideTo(slides.length - 1, 0, false, true); 21407 } else { 21408 translated = swiper.slideTo(swiper.activeIndex, 0, false, true); 21409 } 21410 if (!translated) { 21411 setTranslate(); 21412 } 21413 } 21414 if (params.watchOverflow && snapGrid !== swiper.snapGrid) { 21415 swiper.checkOverflow(); 21416 } 21417 swiper.emit('update'); 21418 } 21419 changeDirection(newDirection, needUpdate) { 21420 if (needUpdate === void 0) { 21421 needUpdate = true; 21422 } 21423 const swiper = this; 21424 const currentDirection = swiper.params.direction; 21425 if (!newDirection) { 21426 // eslint-disable-next-line 21427 newDirection = currentDirection === 'horizontal' ? 'vertical' : 'horizontal'; 21428 } 21429 if (newDirection === currentDirection || newDirection !== 'horizontal' && newDirection !== 'vertical') { 21430 return swiper; 21431 } 21432 swiper.el.classList.remove(`${swiper.params.containerModifierClass}${currentDirection}`); 21433 swiper.el.classList.add(`${swiper.params.containerModifierClass}${newDirection}`); 21434 swiper.emitContainerClasses(); 21435 swiper.params.direction = newDirection; 21436 swiper.slides.forEach(slideEl => { 21437 if (newDirection === 'vertical') { 21438 slideEl.style.width = ''; 21439 } else { 21440 slideEl.style.height = ''; 21441 } 21442 }); 21443 swiper.emit('changeDirection'); 21444 if (needUpdate) swiper.update(); 21445 return swiper; 21446 } 21447 changeLanguageDirection(direction) { 21448 const swiper = this; 21449 if (swiper.rtl && direction === 'rtl' || !swiper.rtl && direction === 'ltr') return; 21450 swiper.rtl = direction === 'rtl'; 21451 swiper.rtlTranslate = swiper.params.direction === 'horizontal' && swiper.rtl; 21452 if (swiper.rtl) { 21453 swiper.el.classList.add(`${swiper.params.containerModifierClass}rtl`); 21454 swiper.el.dir = 'rtl'; 21455 } else { 21456 swiper.el.classList.remove(`${swiper.params.containerModifierClass}rtl`); 21457 swiper.el.dir = 'ltr'; 21458 } 21459 swiper.update(); 21460 } 21461 mount(element) { 21462 const swiper = this; 21463 if (swiper.mounted) return true; 21464 21465 // Find el 21466 let el = element || swiper.params.el; 21467 if (typeof el === 'string') { 21468 el = document.querySelector(el); 21469 } 21470 if (!el) { 21471 return false; 21472 } 21473 el.swiper = swiper; 21474 if (el.parentNode && el.parentNode.host && el.parentNode.host.nodeName === 'SWIPER-CONTAINER') { 21475 swiper.isElement = true; 21476 } 21477 const getWrapperSelector = () => { 21478 return `.${(swiper.params.wrapperClass || '').trim().split(' ').join('.')}`; 21479 }; 21480 const getWrapper = () => { 21481 if (el && el.shadowRoot && el.shadowRoot.querySelector) { 21482 const res = el.shadowRoot.querySelector(getWrapperSelector()); 21483 // Children needs to return slot items 21484 return res; 21485 } 21486 return (0,_utils_mjs__WEBPACK_IMPORTED_MODULE_1__.e)(el, getWrapperSelector())[0]; 21487 }; 21488 // Find Wrapper 21489 let wrapperEl = getWrapper(); 21490 if (!wrapperEl && swiper.params.createElements) { 21491 wrapperEl = (0,_utils_mjs__WEBPACK_IMPORTED_MODULE_1__.c)('div', swiper.params.wrapperClass); 21492 el.append(wrapperEl); 21493 (0,_utils_mjs__WEBPACK_IMPORTED_MODULE_1__.e)(el, `.${swiper.params.slideClass}`).forEach(slideEl => { 21494 wrapperEl.append(slideEl); 21495 }); 21496 } 21497 Object.assign(swiper, { 21498 el, 21499 wrapperEl, 21500 slidesEl: swiper.isElement && !el.parentNode.host.slideSlots ? el.parentNode.host : wrapperEl, 21501 hostEl: swiper.isElement ? el.parentNode.host : el, 21502 mounted: true, 21503 // RTL 21504 rtl: el.dir.toLowerCase() === 'rtl' || (0,_utils_mjs__WEBPACK_IMPORTED_MODULE_1__.m)(el, 'direction') === 'rtl', 21505 rtlTranslate: swiper.params.direction === 'horizontal' && (el.dir.toLowerCase() === 'rtl' || (0,_utils_mjs__WEBPACK_IMPORTED_MODULE_1__.m)(el, 'direction') === 'rtl'), 21506 wrongRTL: (0,_utils_mjs__WEBPACK_IMPORTED_MODULE_1__.m)(wrapperEl, 'display') === '-webkit-box' 21507 }); 21508 return true; 21509 } 21510 init(el) { 21511 const swiper = this; 21512 if (swiper.initialized) return swiper; 21513 const mounted = swiper.mount(el); 21514 if (mounted === false) return swiper; 21515 swiper.emit('beforeInit'); 21516 21517 // Set breakpoint 21518 if (swiper.params.breakpoints) { 21519 swiper.setBreakpoint(); 21520 } 21521 21522 // Add Classes 21523 swiper.addClasses(); 21524 21525 // Update size 21526 swiper.updateSize(); 21527 21528 // Update slides 21529 swiper.updateSlides(); 21530 if (swiper.params.watchOverflow) { 21531 swiper.checkOverflow(); 21532 } 21533 21534 // Set Grab Cursor 21535 if (swiper.params.grabCursor && swiper.enabled) { 21536 swiper.setGrabCursor(); 21537 } 21538 21539 // Slide To Initial Slide 21540 if (swiper.params.loop && swiper.virtual && swiper.params.virtual.enabled) { 21541 swiper.slideTo(swiper.params.initialSlide + swiper.virtual.slidesBefore, 0, swiper.params.runCallbacksOnInit, false, true); 21542 } else { 21543 swiper.slideTo(swiper.params.initialSlide, 0, swiper.params.runCallbacksOnInit, false, true); 21544 } 21545 21546 // Create loop 21547 if (swiper.params.loop) { 21548 swiper.loopCreate(); 21549 } 21550 21551 // Attach events 21552 swiper.attachEvents(); 21553 const lazyElements = [...swiper.el.querySelectorAll('[loading="lazy"]')]; 21554 if (swiper.isElement) { 21555 lazyElements.push(...swiper.hostEl.querySelectorAll('[loading="lazy"]')); 21556 } 21557 lazyElements.forEach(imageEl => { 21558 if (imageEl.complete) { 21559 processLazyPreloader(swiper, imageEl); 21560 } else { 21561 imageEl.addEventListener('load', e => { 21562 processLazyPreloader(swiper, e.target); 21563 }); 21564 } 21565 }); 21566 preload(swiper); 21567 21568 // Init Flag 21569 swiper.initialized = true; 21570 preload(swiper); 21571 21572 // Emit 21573 swiper.emit('init'); 21574 swiper.emit('afterInit'); 21575 return swiper; 21576 } 21577 destroy(deleteInstance, cleanStyles) { 21578 if (deleteInstance === void 0) { 21579 deleteInstance = true; 21580 } 21581 if (cleanStyles === void 0) { 21582 cleanStyles = true; 21583 } 21584 const swiper = this; 21585 const { 21586 params, 21587 el, 21588 wrapperEl, 21589 slides 21590 } = swiper; 21591 if (typeof swiper.params === 'undefined' || swiper.destroyed) { 21592 return null; 21593 } 21594 swiper.emit('beforeDestroy'); 21595 21596 // Init Flag 21597 swiper.initialized = false; 21598 21599 // Detach events 21600 swiper.detachEvents(); 21601 21602 // Destroy loop 21603 if (params.loop) { 21604 swiper.loopDestroy(); 21605 } 21606 21607 // Cleanup styles 21608 if (cleanStyles) { 21609 swiper.removeClasses(); 21610 el.removeAttribute('style'); 21611 wrapperEl.removeAttribute('style'); 21612 if (slides && slides.length) { 21613 slides.forEach(slideEl => { 21614 slideEl.classList.remove(params.slideVisibleClass, params.slideFullyVisibleClass, params.slideActiveClass, params.slideNextClass, params.slidePrevClass); 21615 slideEl.removeAttribute('style'); 21616 slideEl.removeAttribute('data-swiper-slide-index'); 21617 }); 21618 } 21619 } 21620 swiper.emit('destroy'); 21621 21622 // Detach emitter events 21623 Object.keys(swiper.eventsListeners).forEach(eventName => { 21624 swiper.off(eventName); 21625 }); 21626 if (deleteInstance !== false) { 21627 swiper.el.swiper = null; 21628 (0,_utils_mjs__WEBPACK_IMPORTED_MODULE_1__.u)(swiper); 21629 } 21630 swiper.destroyed = true; 21631 return null; 21632 } 21633 static extendDefaults(newDefaults) { 21634 (0,_utils_mjs__WEBPACK_IMPORTED_MODULE_1__.t)(extendedDefaults, newDefaults); 21635 } 21636 static get extendedDefaults() { 21637 return extendedDefaults; 21638 } 21639 static get defaults() { 21640 return defaults; 21641 } 21642 static installModule(mod) { 21643 if (!Swiper.prototype.__modules__) Swiper.prototype.__modules__ = []; 21644 const modules = Swiper.prototype.__modules__; 21645 if (typeof mod === 'function' && modules.indexOf(mod) < 0) { 21646 modules.push(mod); 21647 } 21648 } 21649 static use(module) { 21650 if (Array.isArray(module)) { 21651 module.forEach(m => Swiper.installModule(m)); 21652 return Swiper; 21653 } 21654 Swiper.installModule(module); 21655 return Swiper; 21656 } 21657} 21658Object.keys(prototypes).forEach(prototypeGroup => { 21659 Object.keys(prototypes[prototypeGroup]).forEach(protoMethod => { 21660 Swiper.prototype[protoMethod] = prototypes[prototypeGroup][protoMethod]; 21661 }); 21662}); 21663Swiper.use([Resize, Observer]); 21664 21665 21666 21667 21668/***/ }), 21669
vendor: 11,471 bytes, lines 21670-21994
21670/***/ "./node_modules/swiper/shared/utils.mjs": 21671/*!**********************************************!*\ 21672 !*** ./node_modules/swiper/shared/utils.mjs ***! 21673 \**********************************************/ 21674/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { 21675 21676"use strict"; 21677__webpack_require__.r(__webpack_exports__); 21678/* harmony export */ __webpack_require__.d(__webpack_exports__, { 21679/* harmony export */ a: () => (/* binding */ elementParents), 21680/* harmony export */ b: () => (/* binding */ elementOffset), 21681/* harmony export */ c: () => (/* binding */ createElement), 21682/* harmony export */ d: () => (/* binding */ now), 21683/* harmony export */ e: () => (/* binding */ elementChildren), 21684/* harmony export */ f: () => (/* binding */ elementOuterSize), 21685/* harmony export */ g: () => (/* binding */ elementIndex), 21686/* harmony export */ h: () => (/* binding */ classesToTokens), 21687/* harmony export */ i: () => (/* binding */ getTranslate), 21688/* harmony export */ j: () => (/* binding */ elementTransitionEnd), 21689/* harmony export */ k: () => (/* binding */ isObject), 21690/* harmony export */ l: () => (/* binding */ getSlideTransformEl), 21691/* harmony export */ m: () => (/* binding */ elementStyle), 21692/* harmony export */ n: () => (/* binding */ nextTick), 21693/* harmony export */ o: () => (/* binding */ elementNextAll), 21694/* harmony export */ p: () => (/* binding */ elementPrevAll), 21695/* harmony export */ q: () => (/* binding */ animateCSSModeScroll), 21696/* harmony export */ r: () => (/* binding */ showWarning), 21697/* harmony export */ s: () => (/* binding */ setCSSProperty), 21698/* harmony export */ t: () => (/* binding */ extend), 21699/* harmony export */ u: () => (/* binding */ deleteProps) 21700/* harmony export */ }); 21701/* harmony import */ var _ssr_window_esm_mjs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./ssr-window.esm.mjs */ "./node_modules/swiper/shared/ssr-window.esm.mjs"); 21702 21703 21704function classesToTokens(classes) { 21705 if (classes === void 0) { 21706 classes = ''; 21707 } 21708 return classes.trim().split(' ').filter(c => !!c.trim()); 21709} 21710 21711function deleteProps(obj) { 21712 const object = obj; 21713 Object.keys(object).forEach(key => { 21714 try { 21715 object[key] = null; 21716 } catch (e) { 21717 // no getter for object 21718 } 21719 try { 21720 delete object[key]; 21721 } catch (e) { 21722 // something got wrong 21723 } 21724 }); 21725} 21726function nextTick(callback, delay) { 21727 if (delay === void 0) { 21728 delay = 0; 21729 } 21730 return setTimeout(callback, delay); 21731} 21732function now() { 21733 return Date.now(); 21734} 21735function getComputedStyle(el) { 21736 const window = (0,_ssr_window_esm_mjs__WEBPACK_IMPORTED_MODULE_0__.a)(); 21737 let style; 21738 if (window.getComputedStyle) { 21739 style = window.getComputedStyle(el, null); 21740 } 21741 if (!style && el.currentStyle) { 21742 style = el.currentStyle; 21743 } 21744 if (!style) { 21745 style = el.style; 21746 } 21747 return style; 21748} 21749function getTranslate(el, axis) { 21750 if (axis === void 0) { 21751 axis = 'x'; 21752 } 21753 const window = (0,_ssr_window_esm_mjs__WEBPACK_IMPORTED_MODULE_0__.a)(); 21754 let matrix; 21755 let curTransform; 21756 let transformMatrix; 21757 const curStyle = getComputedStyle(el); 21758 if (window.WebKitCSSMatrix) { 21759 curTransform = curStyle.transform || curStyle.webkitTransform; 21760 if (curTransform.split(',').length > 6) { 21761 curTransform = curTransform.split(', ').map(a => a.replace(',', '.')).join(', '); 21762 } 21763 // Some old versions of Webkit choke when 'none' is passed; pass 21764 // empty string instead in this case 21765 transformMatrix = new window.WebKitCSSMatrix(curTransform === 'none' ? '' : curTransform); 21766 } else { 21767 transformMatrix = curStyle.MozTransform || curStyle.OTransform || curStyle.MsTransform || curStyle.msTransform || curStyle.transform || curStyle.getPropertyValue('transform').replace('translate(', 'matrix(1, 0, 0, 1,'); 21768 matrix = transformMatrix.toString().split(','); 21769 } 21770 if (axis === 'x') { 21771 // Latest Chrome and webkits Fix 21772 if (window.WebKitCSSMatrix) curTransform = transformMatrix.m41; 21773 // Crazy IE10 Matrix 21774 else if (matrix.length === 16) curTransform = parseFloat(matrix[12]); 21775 // Normal Browsers 21776 else curTransform = parseFloat(matrix[4]); 21777 } 21778 if (axis === 'y') { 21779 // Latest Chrome and webkits Fix 21780 if (window.WebKitCSSMatrix) curTransform = transformMatrix.m42; 21781 // Crazy IE10 Matrix 21782 else if (matrix.length === 16) curTransform = parseFloat(matrix[13]); 21783 // Normal Browsers 21784 else curTransform = parseFloat(matrix[5]); 21785 } 21786 return curTransform || 0; 21787} 21788function isObject(o) { 21789 return typeof o === 'object' && o !== null && o.constructor && Object.prototype.toString.call(o).slice(8, -1) === 'Object'; 21790} 21791function isNode(node) { 21792 // eslint-disable-next-line 21793 if (typeof window !== 'undefined' && typeof window.HTMLElement !== 'undefined') { 21794 return node instanceof HTMLElement; 21795 } 21796 return node && (node.nodeType === 1 || node.nodeType === 11); 21797} 21798function extend() { 21799 const to = Object(arguments.length <= 0 ? undefined : arguments[0]); 21800 const noExtend = ['__proto__', 'constructor', 'prototype']; 21801 for (let i = 1; i < arguments.length; i += 1) { 21802 const nextSource = i < 0 || arguments.length <= i ? undefined : arguments[i]; 21803 if (nextSource !== undefined && nextSource !== null && !isNode(nextSource)) { 21804 const keysArray = Object.keys(Object(nextSource)).filter(key => noExtend.indexOf(key) < 0); 21805 for (let nextIndex = 0, len = keysArray.length; nextIndex < len; nextIndex += 1) { 21806 const nextKey = keysArray[nextIndex]; 21807 const desc = Object.getOwnPropertyDescriptor(nextSource, nextKey); 21808 if (desc !== undefined && desc.enumerable) { 21809 if (isObject(to[nextKey]) && isObject(nextSource[nextKey])) { 21810 if (nextSource[nextKey].__swiper__) { 21811 to[nextKey] = nextSource[nextKey]; 21812 } else { 21813 extend(to[nextKey], nextSource[nextKey]); 21814 } 21815 } else if (!isObject(to[nextKey]) && isObject(nextSource[nextKey])) { 21816 to[nextKey] = {}; 21817 if (nextSource[nextKey].__swiper__) { 21818 to[nextKey] = nextSource[nextKey]; 21819 } else { 21820 extend(to[nextKey], nextSource[nextKey]); 21821 } 21822 } else { 21823 to[nextKey] = nextSource[nextKey]; 21824 } 21825 } 21826 } 21827 } 21828 } 21829 return to; 21830} 21831function setCSSProperty(el, varName, varValue) { 21832 el.style.setProperty(varName, varValue); 21833} 21834function animateCSSModeScroll(_ref) { 21835 let { 21836 swiper, 21837 targetPosition, 21838 side 21839 } = _ref; 21840 const window = (0,_ssr_window_esm_mjs__WEBPACK_IMPORTED_MODULE_0__.a)(); 21841 const startPosition = -swiper.translate; 21842 let startTime = null; 21843 let time; 21844 const duration = swiper.params.speed; 21845 swiper.wrapperEl.style.scrollSnapType = 'none'; 21846 window.cancelAnimationFrame(swiper.cssModeFrameID); 21847 const dir = targetPosition > startPosition ? 'next' : 'prev'; 21848 const isOutOfBound = (current, target) => { 21849 return dir === 'next' && current >= target || dir === 'prev' && current <= target; 21850 }; 21851 const animate = () => { 21852 time = new Date().getTime(); 21853 if (startTime === null) { 21854 startTime = time; 21855 } 21856 const progress = Math.max(Math.min((time - startTime) / duration, 1), 0); 21857 const easeProgress = 0.5 - Math.cos(progress * Math.PI) / 2; 21858 let currentPosition = startPosition + easeProgress * (targetPosition - startPosition); 21859 if (isOutOfBound(currentPosition, targetPosition)) { 21860 currentPosition = targetPosition; 21861 } 21862 swiper.wrapperEl.scrollTo({ 21863 [side]: currentPosition 21864 }); 21865 if (isOutOfBound(currentPosition, targetPosition)) { 21866 swiper.wrapperEl.style.overflow = 'hidden'; 21867 swiper.wrapperEl.style.scrollSnapType = ''; 21868 setTimeout(() => { 21869 swiper.wrapperEl.style.overflow = ''; 21870 swiper.wrapperEl.scrollTo({ 21871 [side]: currentPosition 21872 }); 21873 }); 21874 window.cancelAnimationFrame(swiper.cssModeFrameID); 21875 return; 21876 } 21877 swiper.cssModeFrameID = window.requestAnimationFrame(animate); 21878 }; 21879 animate(); 21880} 21881function getSlideTransformEl(slideEl) { 21882 return slideEl.querySelector('.swiper-slide-transform') || slideEl.shadowRoot && slideEl.shadowRoot.querySelector('.swiper-slide-transform') || slideEl; 21883} 21884function elementChildren(element, selector) { 21885 if (selector === void 0) { 21886 selector = ''; 21887 } 21888 return [...element.children].filter(el => el.matches(selector)); 21889} 21890function showWarning(text) { 21891 try { 21892 console.warn(text); 21893 return; 21894 } catch (err) { 21895 // err 21896 } 21897} 21898function createElement(tag, classes) { 21899 if (classes === void 0) { 21900 classes = []; 21901 } 21902 const el = document.createElement(tag); 21903 el.classList.add(...(Array.isArray(classes) ? classes : classesToTokens(classes))); 21904 return el; 21905} 21906function elementOffset(el) { 21907 const window = (0,_ssr_window_esm_mjs__WEBPACK_IMPORTED_MODULE_0__.a)(); 21908 const document = (0,_ssr_window_esm_mjs__WEBPACK_IMPORTED_MODULE_0__.g)(); 21909 const box = el.getBoundingClientRect(); 21910 const body = document.body; 21911 const clientTop = el.clientTop || body.clientTop || 0; 21912 const clientLeft = el.clientLeft || body.clientLeft || 0; 21913 const scrollTop = el === window ? window.scrollY : el.scrollTop; 21914 const scrollLeft = el === window ? window.scrollX : el.scrollLeft; 21915 return { 21916 top: box.top + scrollTop - clientTop, 21917 left: box.left + scrollLeft - clientLeft 21918 }; 21919} 21920function elementPrevAll(el, selector) { 21921 const prevEls = []; 21922 while (el.previousElementSibling) { 21923 const prev = el.previousElementSibling; // eslint-disable-line 21924 if (selector) { 21925 if (prev.matches(selector)) prevEls.push(prev); 21926 } else prevEls.push(prev); 21927 el = prev; 21928 } 21929 return prevEls; 21930} 21931function elementNextAll(el, selector) { 21932 const nextEls = []; 21933 while (el.nextElementSibling) { 21934 const next = el.nextElementSibling; // eslint-disable-line 21935 if (selector) { 21936 if (next.matches(selector)) nextEls.push(next); 21937 } else nextEls.push(next); 21938 el = next; 21939 } 21940 return nextEls; 21941} 21942function elementStyle(el, prop) { 21943 const window = (0,_ssr_window_esm_mjs__WEBPACK_IMPORTED_MODULE_0__.a)(); 21944 return window.getComputedStyle(el, null).getPropertyValue(prop); 21945} 21946function elementIndex(el) { 21947 let child = el; 21948 let i; 21949 if (child) { 21950 i = 0; 21951 // eslint-disable-next-line 21952 while ((child = child.previousSibling) !== null) { 21953 if (child.nodeType === 1) i += 1; 21954 } 21955 return i; 21956 } 21957 return undefined; 21958} 21959function elementParents(el, selector) { 21960 const parents = []; // eslint-disable-line 21961 let parent = el.parentElement; // eslint-disable-line 21962 while (parent) { 21963 if (selector) { 21964 if (parent.matches(selector)) parents.push(parent); 21965 } else { 21966 parents.push(parent); 21967 } 21968 parent = parent.parentElement; 21969 } 21970 return parents; 21971} 21972function elementTransitionEnd(el, callback) { 21973 function fireCallBack(e) { 21974 if (e.target !== el) return; 21975 callback.call(el, e); 21976 el.removeEventListener('transitionend', fireCallBack); 21977 } 21978 if (callback) { 21979 el.addEventListener('transitionend', fireCallBack); 21980 } 21981} 21982function elementOuterSize(el, size, includeMargins) { 21983 const window = (0,_ssr_window_esm_mjs__WEBPACK_IMPORTED_MODULE_0__.a)(); 21984 if (includeMargins) { 21985 return el[size === 'width' ? 'offsetWidth' : 'offsetHeight'] + parseFloat(window.getComputedStyle(el, null).getPropertyValue(size === 'width' ? 'margin-right' : 'margin-top')) + parseFloat(window.getComputedStyle(el, null).getPropertyValue(size === 'width' ? 'margin-left' : 'margin-bottom')); 21986 } 21987 return el.offsetWidth; 21988} 21989 21990 21991 21992 21993/***/ }), 21994
vendor: 6,894 bytes, lines 21995-22075
21995/***/ "./node_modules/swiper/swiper-bundle.mjs": 21996/*!***********************************************!*\ 21997 !*** ./node_modules/swiper/swiper-bundle.mjs ***! 21998 \***********************************************/ 21999/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { 22000 22001"use strict"; 22002__webpack_require__.r(__webpack_exports__); 22003/* harmony export */ __webpack_require__.d(__webpack_exports__, { 22004/* harmony export */ Swiper: () => (/* reexport safe */ _shared_swiper_core_mjs__WEBPACK_IMPORTED_MODULE_0__.S), 22005/* harmony export */ "default": () => (/* reexport safe */ _shared_swiper_core_mjs__WEBPACK_IMPORTED_MODULE_0__.S) 22006/* harmony export */ }); 22007/* harmony import */ var _shared_swiper_core_mjs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./shared/swiper-core.mjs */ "./node_modules/swiper/shared/swiper-core.mjs"); 22008/* harmony import */ var _modules_virtual_mjs__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./modules/virtual.mjs */ "./node_modules/swiper/modules/virtual.mjs"); 22009/* harmony import */ var _modules_keyboard_mjs__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./modules/keyboard.mjs */ "./node_modules/swiper/modules/keyboard.mjs"); 22010/* harmony import */ var _modules_mousewheel_mjs__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./modules/mousewheel.mjs */ "./node_modules/swiper/modules/mousewheel.mjs"); 22011/* harmony import */ var _modules_navigation_mjs__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./modules/navigation.mjs */ "./node_modules/swiper/modules/navigation.mjs"); 22012/* harmony import */ var _modules_pagination_mjs__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./modules/pagination.mjs */ "./node_modules/swiper/modules/pagination.mjs"); 22013/* harmony import */ var _modules_scrollbar_mjs__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./modules/scrollbar.mjs */ "./node_modules/swiper/modules/scrollbar.mjs"); 22014/* harmony import */ var _modules_parallax_mjs__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./modules/parallax.mjs */ "./node_modules/swiper/modules/parallax.mjs"); 22015/* harmony import */ var _modules_zoom_mjs__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./modules/zoom.mjs */ "./node_modules/swiper/modules/zoom.mjs"); 22016/* harmony import */ var _modules_controller_mjs__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./modules/controller.mjs */ "./node_modules/swiper/modules/controller.mjs"); 22017/* harmony import */ var _modules_a11y_mjs__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./modules/a11y.mjs */ "./node_modules/swiper/modules/a11y.mjs"); 22018/* harmony import */ var _modules_history_mjs__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./modules/history.mjs */ "./node_modules/swiper/modules/history.mjs"); 22019/* harmony import */ var _modules_hash_navigation_mjs__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./modules/hash-navigation.mjs */ "./node_modules/swiper/modules/hash-navigation.mjs"); 22020/* harmony import */ var _modules_autoplay_mjs__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./modules/autoplay.mjs */ "./node_modules/swiper/modules/autoplay.mjs"); 22021/* harmony import */ var _modules_thumbs_mjs__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ./modules/thumbs.mjs */ "./node_modules/swiper/modules/thumbs.mjs"); 22022/* harmony import */ var _modules_free_mode_mjs__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ./modules/free-mode.mjs */ "./node_modules/swiper/modules/free-mode.mjs"); 22023/* harmony import */ var _modules_grid_mjs__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ./modules/grid.mjs */ "./node_modules/swiper/modules/grid.mjs"); 22024/* harmony import */ var _modules_manipulation_mjs__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! ./modules/manipulation.mjs */ "./node_modules/swiper/modules/manipulation.mjs"); 22025/* harmony import */ var _modules_effect_fade_mjs__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! ./modules/effect-fade.mjs */ "./node_modules/swiper/modules/effect-fade.mjs"); 22026/* harmony import */ var _modules_effect_cube_mjs__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! ./modules/effect-cube.mjs */ "./node_modules/swiper/modules/effect-cube.mjs"); 22027/* harmony import */ var _modules_effect_flip_mjs__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! ./modules/effect-flip.mjs */ "./node_modules/swiper/modules/effect-flip.mjs"); 22028/* harmony import */ var _modules_effect_coverflow_mjs__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(/*! ./modules/effect-coverflow.mjs */ "./node_modules/swiper/modules/effect-coverflow.mjs"); 22029/* harmony import */ var _modules_effect_creative_mjs__WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__(/*! ./modules/effect-creative.mjs */ "./node_modules/swiper/modules/effect-creative.mjs"); 22030/* harmony import */ var _modules_effect_cards_mjs__WEBPACK_IMPORTED_MODULE_23__ = __webpack_require__(/*! ./modules/effect-cards.mjs */ "./node_modules/swiper/modules/effect-cards.mjs"); 22031/** 22032 * Swiper 11.0.5 22033 * Most modern mobile touch slider and framework with hardware accelerated transitions 22034 * https://swiperjs.com 22035 * 22036 * Copyright 2014-2023 Vladimir Kharlampidi 22037 * 22038 * Released under the MIT License 22039 * 22040 * Released on: November 22, 2023 22041 */ 22042 22043 22044 22045 22046 22047 22048 22049 22050 22051 22052 22053 22054 22055 22056 22057 22058 22059 22060 22061 22062 22063 22064 22065 22066 22067 22068// Swiper Class 22069const modules = [_modules_virtual_mjs__WEBPACK_IMPORTED_MODULE_1__["default"], _modules_keyboard_mjs__WEBPACK_IMPORTED_MODULE_2__["default"], _modules_mousewheel_mjs__WEBPACK_IMPORTED_MODULE_3__["default"], _modules_navigation_mjs__WEBPACK_IMPORTED_MODULE_4__["default"], _modules_pagination_mjs__WEBPACK_IMPORTED_MODULE_5__["default"], _modules_scrollbar_mjs__WEBPACK_IMPORTED_MODULE_6__["default"], _modules_parallax_mjs__WEBPACK_IMPORTED_MODULE_7__["default"], _modules_zoom_mjs__WEBPACK_IMPORTED_MODULE_8__["default"], _modules_controller_mjs__WEBPACK_IMPORTED_MODULE_9__["default"], _modules_a11y_mjs__WEBPACK_IMPORTED_MODULE_10__["default"], _modules_history_mjs__WEBPACK_IMPORTED_MODULE_11__["default"], _modules_hash_navigation_mjs__WEBPACK_IMPORTED_MODULE_12__["default"], _modules_autoplay_mjs__WEBPACK_IMPORTED_MODULE_13__["default"], _modules_thumbs_mjs__WEBPACK_IMPORTED_MODULE_14__["default"], _modules_free_mode_mjs__WEBPACK_IMPORTED_MODULE_15__["default"], _modules_grid_mjs__WEBPACK_IMPORTED_MODULE_16__["default"], _modules_manipulation_mjs__WEBPACK_IMPORTED_MODULE_17__["default"], _modules_effect_fade_mjs__WEBPACK_IMPORTED_MODULE_18__["default"], _modules_effect_cube_mjs__WEBPACK_IMPORTED_MODULE_19__["default"], _modules_effect_flip_mjs__WEBPACK_IMPORTED_MODULE_20__["default"], _modules_effect_coverflow_mjs__WEBPACK_IMPORTED_MODULE_21__["default"], _modules_effect_creative_mjs__WEBPACK_IMPORTED_MODULE_22__["default"], _modules_effect_cards_mjs__WEBPACK_IMPORTED_MODULE_23__["default"]]; 22070_shared_swiper_core_mjs__WEBPACK_IMPORTED_MODULE_0__.S.use(modules); 22071 22072 22073 22074 22075/***/ })
vendor: 7,692 bytes, lines 22075-22253
22075 22076 22077/******/ }); 22078/************************************************************************/ 22079/******/ // The module cache 22080/******/ var __webpack_module_cache__ = {}; 22081/******/ 22082/******/ // The require function 22083/******/ function __webpack_require__(moduleId) { 22084/******/ // Check if module is in cache 22085/******/ var cachedModule = __webpack_module_cache__[moduleId]; 22086/******/ if (cachedModule !== undefined) { 22087/******/ return cachedModule.exports; 22088/******/ } 22089/******/ // Create a new module (and put it into the cache) 22090/******/ var module = __webpack_module_cache__[moduleId] = { 22091/******/ id: moduleId, 22092/******/ // no module.loaded needed 22093/******/ exports: {} 22094/******/ }; 22095/******/ 22096/******/ // Execute the module function 22097/******/ __webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__); 22098/******/ 22099/******/ // Return the exports of the module 22100/******/ return module.exports; 22101/******/ } 22102/******/ 22103/******/ // expose the modules object (__webpack_modules__) 22104/******/ __webpack_require__.m = __webpack_modules__; 22105/******/ 22106/************************************************************************/ 22107/******/ /* webpack/runtime/chunk loaded */ 22108/******/ (() => { 22109/******/ var deferred = []; 22110/******/ __webpack_require__.O = (result, chunkIds, fn, priority) => { 22111/******/ if(chunkIds) { 22112/******/ priority = priority || 0; 22113/******/ for(var i = deferred.length; i > 0 && deferred[i - 1][2] > priority; i--) deferred[i] = deferred[i - 1]; 22114/******/ deferred[i] = [chunkIds, fn, priority]; 22115/******/ return; 22116/******/ } 22117/******/ var notFulfilled = Infinity; 22118/******/ for (var i = 0; i < deferred.length; i++) { 22119/******/ var [chunkIds, fn, priority] = deferred[i]; 22120/******/ var fulfilled = true; 22121/******/ for (var j = 0; j < chunkIds.length; j++) { 22122/******/ if ((priority & 1 === 0 || notFulfilled >= priority) && Object.keys(__webpack_require__.O).every((key) => (__webpack_require__.O[key](chunkIds[j])))) { 22123/******/ chunkIds.splice(j--, 1); 22124/******/ } else { 22125/******/ fulfilled = false; 22126/******/ if(priority < notFulfilled) notFulfilled = priority; 22127/******/ } 22128/******/ } 22129/******/ if(fulfilled) { 22130/******/ deferred.splice(i--, 1) 22131/******/ var r = fn(); 22132/******/ if (r !== undefined) result = r; 22133/******/ } 22134/******/ } 22135/******/ return result; 22136/******/ }; 22137/******/ })(); 22138/******/ 22139/******/ /* webpack/runtime/compat get default export */ 22140/******/ (() => { 22141/******/ // getDefaultExport function for compatibility with non-harmony modules 22142/******/ __webpack_require__.n = (module) => { 22143/******/ var getter = module && module.__esModule ? 22144/******/ () => (module['default']) : 22145/******/ () => (module); 22146/******/ __webpack_require__.d(getter, { a: getter }); 22147/******/ return getter; 22148/******/ }; 22149/******/ })(); 22150/******/ 22151/******/ /* webpack/runtime/define property getters */ 22152/******/ (() => { 22153/******/ // define getter functions for harmony exports 22154/******/ __webpack_require__.d = (exports, definition) => { 22155/******/ for(var key in definition) { 22156/******/ if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) { 22157/******/ Object.defineProperty(exports, key, { enumerable: true, get: definition[key] }); 22158/******/ } 22159/******/ } 22160/******/ }; 22161/******/ })(); 22162/******/ 22163/******/ /* webpack/runtime/hasOwnProperty shorthand */ 22164/******/ (() => { 22165/******/ __webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop)) 22166/******/ })(); 22167/******/ 22168/******/ /* webpack/runtime/make namespace object */ 22169/******/ (() => { 22170/******/ // define __esModule on exports 22171/******/ __webpack_require__.r = (exports) => { 22172/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) { 22173/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' }); 22174/******/ } 22175/******/ Object.defineProperty(exports, '__esModule', { value: true }); 22176/******/ }; 22177/******/ })(); 22178/******/ 22179/******/ /* webpack/runtime/jsonp chunk loading */ 22180/******/ (() => { 22181/******/ // no baseURI 22182/******/ 22183/******/ // object to store loaded and loading chunks 22184/******/ // undefined = chunk not loaded, null = chunk preloaded/prefetched 22185/******/ // [resolve, reject, Promise] = chunk loading, 0 = chunk loaded 22186/******/ var installedChunks = { 22187/******/ "/library/js/scripts.min": 0, 22188/******/ "library/css/style": 0, 22189/******/ "library/css/plugin-a11y": 0 22190/******/ }; 22191/******/ 22192/******/ // no chunk on demand loading 22193/******/ 22194/******/ // no prefetching 22195/******/ 22196/******/ // no preloaded 22197/******/ 22198/******/ // no HMR 22199/******/ 22200/******/ // no HMR manifest 22201/******/ 22202/******/ __webpack_require__.O.j = (chunkId) => (installedChunks[chunkId] === 0); 22203/******/ 22204/******/ // install a JSONP callback for chunk loading 22205/******/ var webpackJsonpCallback = (parentChunkLoadingFunction, data) => { 22206/******/ var [chunkIds, moreModules, runtime] = data; 22207/******/ // add "moreModules" to the modules object, 22208/******/ // then flag all "chunkIds" as loaded and fire callback 22209/******/ var moduleId, chunkId, i = 0; 22210/******/ if(chunkIds.some((id) => (installedChunks[id] !== 0))) { 22211/******/ for(moduleId in moreModules) { 22212/******/ if(__webpack_require__.o(moreModules, moduleId)) { 22213/******/ __webpack_require__.m[moduleId] = moreModules[moduleId]; 22214/******/ } 22215/******/ } 22216/******/ if(runtime) var result = runtime(__webpack_require__); 22217/******/ } 22218/******/ if(parentChunkLoadingFunction) parentChunkLoadingFunction(data); 22219/******/ for(;i < chunkIds.length; i++) { 22220/******/ chunkId = chunkIds[i]; 22221/******/ if(__webpack_require__.o(installedChunks, chunkId) && installedChunks[chunkId]) { 22222/******/ installedChunks[chunkId][0](); 22223/******/ } 22224/******/ installedChunks[chunkId] = 0; 22225/******/ } 22226/******/ return __webpack_require__.O(result); 22227/******/ } 22228/******/ 22229/******/ var chunkLoadingGlobal = self["webpackChunkplatform81"] = self["webpackChunkplatform81"] || []; 22230/******/ chunkLoadingGlobal.forEach(webpackJsonpCallback.bind(null, 0)); 22231/******/ chunkLoadingGlobal.push = webpackJsonpCallback.bind(null, chunkLoadingGlobal.push.bind(chunkLoadingGlobal)); 22232/******/ })(); 22233/******/ 22234/******/ /* webpack/runtime/nonce */ 22235/******/ (() => { 22236/******/ __webpack_require__.nc = undefined; 22237/******/ })(); 22238/******/ 22239/************************************************************************/ 22240/******/ 22241/******/ // startup 22242/******/ // Load entry module and return exports 22243/******/ // This entry module depends on other loaded chunks and execution need to be delayed 22244/******/ __webpack_require__.O(undefined, ["library/css/style","library/css/plugin-a11y"], () => (__webpack_require__("./library/js/libs/p81-sliders.js"))) 22245/******/ __webpack_require__.O(undefined, ["library/css/style","library/css/plugin-a11y"], () => (__webpack_require__("./library/js/libs/p81-accordion.js"))) 22246/******/ __webpack_require__.O(undefined, ["library/css/style","library/css/plugin-a11y"], () => (__webpack_require__("./library/js/scripts.js"))) 22247/******/ __webpack_require__.O(undefined, ["library/css/style","library/css/plugin-a11y"], () => (__webpack_require__("./library/scss/style.scss"))) 22248/******/ var __webpack_exports__ = __webpack_require__.O(undefined, ["library/css/style","library/css/plugin-a11y"], () => (__webpack_require__("./library/scss/plugin-a11y.scss"))) 22249/******/ __webpack_exports__ = __webpack_require__.O(__webpack_exports__); 22250/******/ 22251/******/ })() 22252; 22253//# sourceMappingURL=scripts.min.js.map
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.