{"version":3,"file":"bundle-a33970.js","mappings":"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","sources":["webpack:///webpack/runtime/create fake namespace object","webpack:///webpack/runtime/load script","webpack:///./node_modules/@hotwired/stimulus/dist/stimulus.js","webpack:///./src/js/controllers/accordion_controller.js","webpack:///./node_modules/lodash-es/_listCacheClear.js","webpack:///./node_modules/lodash-es/eq.js","webpack:///./node_modules/lodash-es/_assocIndexOf.js","webpack:///./node_modules/lodash-es/_listCacheDelete.js","webpack:///./node_modules/lodash-es/_listCacheGet.js","webpack:///./node_modules/lodash-es/_listCacheHas.js","webpack:///./node_modules/lodash-es/_listCacheSet.js","webpack:///./node_modules/lodash-es/_ListCache.js","webpack:///./node_modules/lodash-es/_stackClear.js","webpack:///./node_modules/lodash-es/_stackDelete.js","webpack:///./node_modules/lodash-es/_stackGet.js","webpack:///./node_modules/lodash-es/_stackHas.js","webpack:///./node_modules/lodash-es/_freeGlobal.js","webpack:///./node_modules/lodash-es/_root.js","webpack:///./node_modules/lodash-es/_Symbol.js","webpack:///./node_modules/lodash-es/_getRawTag.js","webpack:///./node_modules/lodash-es/_objectToString.js","webpack:///./node_modules/lodash-es/_baseGetTag.js","webpack:///./node_modules/lodash-es/isObject.js","webpack:///./node_modules/lodash-es/isFunction.js","webpack:///./node_modules/lodash-es/_isMasked.js","webpack:///./node_modules/lodash-es/_coreJsData.js","webpack:///./node_modules/lodash-es/_toSource.js","webpack:///./node_modules/lodash-es/_baseIsNative.js","webpack:///./node_modules/lodash-es/_getValue.js","webpack:///./node_modules/lodash-es/_getNative.js","webpack:///./node_modules/lodash-es/_Map.js","webpack:///./node_modules/lodash-es/_nativeCreate.js","webpack:///./node_modules/lodash-es/_hashClear.js","webpack:///./node_modules/lodash-es/_hashDelete.js","webpack:///./node_modules/lodash-es/_hashGet.js","webpack:///./node_modules/lodash-es/_hashHas.js","webpack:///./node_modules/lodash-es/_hashSet.js","webpack:///./node_modules/lodash-es/_Hash.js","webpack:///./node_modules/lodash-es/_mapCacheClear.js","webpack:///./node_modules/lodash-es/_isKeyable.js","webpack:///./node_modules/lodash-es/_getMapData.js","webpack:///./node_modules/lodash-es/_mapCacheDelete.js","webpack:///./node_modules/lodash-es/_mapCacheGet.js","webpack:///./node_modules/lodash-es/_mapCacheHas.js","webpack:///./node_modules/lodash-es/_mapCacheSet.js","webpack:///./node_modules/lodash-es/_MapCache.js","webpack:///./node_modules/lodash-es/_stackSet.js","webpack:///./node_modules/lodash-es/_Stack.js","webpack:///./node_modules/lodash-es/_defineProperty.js","webpack:///./node_modules/lodash-es/_baseAssignValue.js","webpack:///./node_modules/lodash-es/_assignMergeValue.js","webpack:///./node_modules/lodash-es/_createBaseFor.js","webpack:///./node_modules/lodash-es/_baseFor.js","webpack:///./node_modules/lodash-es/_cloneBuffer.js","webpack:///./node_modules/lodash-es/_Uint8Array.js","webpack:///./node_modules/lodash-es/_cloneArrayBuffer.js","webpack:///./node_modules/lodash-es/_cloneTypedArray.js","webpack:///./node_modules/lodash-es/_copyArray.js","webpack:///./node_modules/lodash-es/_baseCreate.js","webpack:///./node_modules/lodash-es/_overArg.js","webpack:///./node_modules/lodash-es/_getPrototype.js","webpack:///./node_modules/lodash-es/_isPrototype.js","webpack:///./node_modules/lodash-es/_initCloneObject.js","webpack:///./node_modules/lodash-es/isObjectLike.js","webpack:///./node_modules/lodash-es/_baseIsArguments.js","webpack:///./node_modules/lodash-es/isArguments.js","webpack:///./node_modules/lodash-es/isArray.js","webpack:///./node_modules/lodash-es/isLength.js","webpack:///./node_modules/lodash-es/isArrayLike.js","webpack:///./node_modules/lodash-es/isArrayLikeObject.js","webpack:///./node_modules/lodash-es/stubFalse.js","webpack:///./node_modules/lodash-es/isBuffer.js","webpack:///./node_modules/lodash-es/isPlainObject.js","webpack:///./node_modules/lodash-es/_baseIsTypedArray.js","webpack:///./node_modules/lodash-es/_baseUnary.js","webpack:///./node_modules/lodash-es/_nodeUtil.js","webpack:///./node_modules/lodash-es/isTypedArray.js","webpack:///./node_modules/lodash-es/_safeGet.js","webpack:///./node_modules/lodash-es/_assignValue.js","webpack:///./node_modules/lodash-es/_copyObject.js","webpack:///./node_modules/lodash-es/_baseTimes.js","webpack:///./node_modules/lodash-es/_isIndex.js","webpack:///./node_modules/lodash-es/_arrayLikeKeys.js","webpack:///./node_modules/lodash-es/_nativeKeysIn.js","webpack:///./node_modules/lodash-es/_baseKeysIn.js","webpack:///./node_modules/lodash-es/keysIn.js","webpack:///./node_modules/lodash-es/toPlainObject.js","webpack:///./node_modules/lodash-es/_baseMergeDeep.js","webpack:///./node_modules/lodash-es/_baseMerge.js","webpack:///./node_modules/lodash-es/identity.js","webpack:///./node_modules/lodash-es/_apply.js","webpack:///./node_modules/lodash-es/_overRest.js","webpack:///./node_modules/lodash-es/constant.js","webpack:///./node_modules/lodash-es/_baseSetToString.js","webpack:///./node_modules/lodash-es/_shortOut.js","webpack:///./node_modules/lodash-es/_setToString.js","webpack:///./node_modules/lodash-es/_baseRest.js","webpack:///./node_modules/lodash-es/_isIterateeCall.js","webpack:///./node_modules/lodash-es/_createAssigner.js","webpack:///./node_modules/lodash-es/merge.js","webpack:///./src/js/controllers/controller.js","webpack:///./src/js/helpers/datalayer.js","webpack:///./src/js/controllers/datalayer_controller.js","webpack:///./src/js/controllers/date_controller.js","webpack:///./src/js/controllers/dropdown_controller.js","webpack:///./src/js/controllers/example_controller.js","webpack:///./src/js/controllers/fetch_controller.js","webpack:///./src/js/controllers/lazy-embed_controller.js","webpack:///./src/js/transition.js","webpack:///./src/js/controllers/menu_controller.js","webpack:///./src/js/controllers/modal-link_controller.js","webpack:///./node_modules/a11y-dialog/dist/a11y-dialog.esm.js","webpack:///./src/js/controllers/modal_controller.js","webpack:///./src/js/controllers/navigation_controller.js","webpack:///./src/js/controllers/payment_controller.js","webpack:///./src/js/controllers/recaptcha_controller.js","webpack:///./src/js/controllers/scroll-to_controller.js","webpack:///./node_modules/ssr-window/ssr-window.esm.js","webpack:///./node_modules/swiper/shared/utils.js","webpack:///./node_modules/swiper/shared/get-support.js","webpack:///./node_modules/swiper/shared/get-device.js","webpack:///./node_modules/swiper/shared/get-browser.js","webpack:///./node_modules/swiper/core/events-emitter.js","webpack:///./node_modules/swiper/shared/process-lazy-preloader.js","webpack:///./node_modules/swiper/core/update/index.js","webpack:///./node_modules/swiper/core/update/updateSize.js","webpack:///./node_modules/swiper/core/update/updateSlides.js","webpack:///./node_modules/swiper/core/update/updateAutoHeight.js","webpack:///./node_modules/swiper/core/update/updateSlidesOffset.js","webpack:///./node_modules/swiper/core/update/updateSlidesProgress.js","webpack:///./node_modules/swiper/core/update/updateProgress.js","webpack:///./node_modules/swiper/core/update/updateSlidesClasses.js","webpack:///./node_modules/swiper/core/update/updateActiveIndex.js","webpack:///./node_modules/swiper/core/update/updateClickedSlide.js","webpack:///./node_modules/swiper/core/translate/index.js","webpack:///./node_modules/swiper/core/translate/getTranslate.js","webpack:///./node_modules/swiper/core/translate/setTranslate.js","webpack:///./node_modules/swiper/core/translate/minTranslate.js","webpack:///./node_modules/swiper/core/translate/maxTranslate.js","webpack:///./node_modules/swiper/core/translate/translateTo.js","webpack:///./node_modules/swiper/core/transition/transitionEmit.js","webpack:///./node_modules/swiper/core/slide/index.js","webpack:///./node_modules/swiper/core/slide/slideTo.js","webpack:///./node_modules/swiper/core/slide/slideToLoop.js","webpack:///./node_modules/swiper/core/slide/slideNext.js","webpack:///./node_modules/swiper/core/slide/slidePrev.js","webpack:///./node_modules/swiper/core/slide/slideReset.js","webpack:///./node_modules/swiper/core/slide/slideToClosest.js","webpack:///./node_modules/swiper/core/slide/slideToClickedSlide.js","webpack:///./node_modules/swiper/core/loop/index.js","webpack:///./node_modules/swiper/core/loop/loopCreate.js","webpack:///./node_modules/swiper/core/loop/loopFix.js","webpack:///./node_modules/swiper/core/loop/loopDestroy.js","webpack:///./node_modules/swiper/core/events/onTouchStart.js","webpack:///./node_modules/swiper/core/events/onTouchMove.js","webpack:///./node_modules/swiper/core/events/onTouchEnd.js","webpack:///./node_modules/swiper/core/events/onResize.js","webpack:///./node_modules/swiper/core/events/onClick.js","webpack:///./node_modules/swiper/core/events/onScroll.js","webpack:///./node_modules/swiper/core/events/onLoad.js","webpack:///./node_modules/swiper/core/events/index.js","webpack:///./node_modules/swiper/core/breakpoints/setBreakpoint.js","webpack:///./node_modules/swiper/core/check-overflow/index.js","webpack:///./node_modules/swiper/core/defaults.js","webpack:///./node_modules/swiper/core/moduleExtendParams.js","webpack:///./node_modules/swiper/core/core.js","webpack:///./node_modules/swiper/core/transition/index.js","webpack:///./node_modules/swiper/core/transition/setTransition.js","webpack:///./node_modules/swiper/core/transition/transitionStart.js","webpack:///./node_modules/swiper/core/transition/transitionEnd.js","webpack:///./node_modules/swiper/core/grab-cursor/index.js","webpack:///./node_modules/swiper/core/grab-cursor/setGrabCursor.js","webpack:///./node_modules/swiper/core/grab-cursor/unsetGrabCursor.js","webpack:///./node_modules/swiper/core/breakpoints/index.js","webpack:///./node_modules/swiper/core/breakpoints/getBreakpoint.js","webpack:///./node_modules/swiper/core/classes/index.js","webpack:///./node_modules/swiper/core/classes/addClasses.js","webpack:///./node_modules/swiper/core/classes/removeClasses.js","webpack:///./node_modules/swiper/core/modules/resize/resize.js","webpack:///./node_modules/swiper/core/modules/observer/observer.js","webpack:///./node_modules/swiper/shared/create-element-if-not-defined.js","webpack:///./node_modules/swiper/shared/classes-to-selector.js","webpack:///./src/js/controllers/slider_controller.js","webpack:///./node_modules/swiper/modules/a11y/a11y.js","webpack:///./node_modules/swiper/modules/mousewheel/mousewheel.js","webpack:///./node_modules/swiper/modules/navigation/navigation.js","webpack:///./node_modules/swiper/modules/pagination/pagination.js","webpack:///./node_modules/swiper/modules/autoplay/autoplay.js","webpack:///./node_modules/swiper/modules/thumbs/thumbs.js","webpack:///./node_modules/swiper/modules/zoom/zoom.js","webpack:///./src/js/controllers/tabs_controller.js","webpack:///./src/js/controllers/visible_controller.js","webpack:///./src/js/utilities.js","webpack:///./node_modules/focus-visible/dist/focus-visible.js","webpack:///./src/js/controllers/ sync _controller\\.js$","webpack:///webpack/bootstrap","webpack:///webpack/runtime/define property getters","webpack:///webpack/runtime/ensure chunk","webpack:///webpack/runtime/get javascript chunk filename","webpack:///webpack/runtime/get mini-css chunk filename","webpack:///webpack/runtime/hasOwnProperty shorthand","webpack:///webpack/runtime/make namespace object","webpack:///webpack/runtime/publicPath","webpack:///webpack/runtime/jsonp chunk loading","webpack:///./src/js/application.js","webpack:///./node_modules/@hotwired/stimulus-webpack-helpers/dist/stimulus-webpack-helpers.js"],"sourcesContent":["var getProto = Object.getPrototypeOf ? function(obj) { return Object.getPrototypeOf(obj); } : function(obj) { return obj.__proto__; };\nvar leafPrototypes;\n// create a fake namespace object\n// mode & 1: value is a module id, require it\n// mode & 2: merge all properties of value into the ns\n// mode & 4: return value when already ns object\n// mode & 16: return value when it's Promise-like\n// mode & 8|1: behave like require\n__webpack_require__.t = function(value, mode) {\n\tif(mode & 1) value = this(value);\n\tif(mode & 8) return value;\n\tif(typeof value === 'object' && value) {\n\t\tif((mode & 4) && value.__esModule) return value;\n\t\tif((mode & 16) && typeof value.then === 'function') return value;\n\t}\n\tvar ns = Object.create(null);\n\t__webpack_require__.r(ns);\n\tvar def = {};\n\tleafPrototypes = leafPrototypes || [null, getProto({}), getProto([]), getProto(getProto)];\n\tfor(var current = mode & 2 && value; typeof current == 'object' && !~leafPrototypes.indexOf(current); current = getProto(current)) {\n\t\tObject.getOwnPropertyNames(current).forEach(function(key) { def[key] = function() { return value[key]; }; });\n\t}\n\tdef['default'] = function() { return value; };\n\t__webpack_require__.d(ns, def);\n\treturn ns;\n};","var inProgress = {};\n// data-webpack is not used as build has no uniqueName\n// loadScript function to load a script via script tag\n__webpack_require__.l = function(url, done, key, chunkId) {\n\tif(inProgress[url]) { inProgress[url].push(done); return; }\n\tvar script, needAttach;\n\tif(key !== undefined) {\n\t\tvar scripts = document.getElementsByTagName(\"script\");\n\t\tfor(var i = 0; i < scripts.length; i++) {\n\t\t\tvar s = scripts[i];\n\t\t\tif(s.getAttribute(\"src\") == url) { script = s; break; }\n\t\t}\n\t}\n\tif(!script) {\n\t\tneedAttach = true;\n\t\tscript = document.createElement('script');\n\n\t\tscript.charset = 'utf-8';\n\t\tscript.timeout = 120;\n\t\tif (__webpack_require__.nc) {\n\t\t\tscript.setAttribute(\"nonce\", __webpack_require__.nc);\n\t\t}\n\n\t\tscript.src = url;\n\t}\n\tinProgress[url] = [done];\n\tvar onScriptComplete = function(prev, event) {\n\t\t// avoid mem leaks in IE.\n\t\tscript.onerror = script.onload = null;\n\t\tclearTimeout(timeout);\n\t\tvar doneFns = inProgress[url];\n\t\tdelete inProgress[url];\n\t\tscript.parentNode && script.parentNode.removeChild(script);\n\t\tdoneFns && doneFns.forEach(function(fn) { return fn(event); });\n\t\tif(prev) return prev(event);\n\t}\n\t;\n\tvar timeout = setTimeout(onScriptComplete.bind(null, undefined, { type: 'timeout', target: script }), 120000);\n\tscript.onerror = onScriptComplete.bind(null, script.onerror);\n\tscript.onload = onScriptComplete.bind(null, script.onload);\n\tneedAttach && document.head.appendChild(script);\n};","/*\nStimulus 3.1.0\nCopyright © 2022 Basecamp, LLC\n */\nclass EventListener {\n constructor(eventTarget, eventName, eventOptions) {\n this.eventTarget = eventTarget;\n this.eventName = eventName;\n this.eventOptions = eventOptions;\n this.unorderedBindings = new Set();\n }\n connect() {\n this.eventTarget.addEventListener(this.eventName, this, this.eventOptions);\n }\n disconnect() {\n this.eventTarget.removeEventListener(this.eventName, this, this.eventOptions);\n }\n bindingConnected(binding) {\n this.unorderedBindings.add(binding);\n }\n bindingDisconnected(binding) {\n this.unorderedBindings.delete(binding);\n }\n handleEvent(event) {\n const extendedEvent = extendEvent(event);\n for (const binding of this.bindings) {\n if (extendedEvent.immediatePropagationStopped) {\n break;\n }\n else {\n binding.handleEvent(extendedEvent);\n }\n }\n }\n get bindings() {\n return Array.from(this.unorderedBindings).sort((left, right) => {\n const leftIndex = left.index, rightIndex = right.index;\n return leftIndex < rightIndex ? -1 : leftIndex > rightIndex ? 1 : 0;\n });\n }\n}\nfunction extendEvent(event) {\n if (\"immediatePropagationStopped\" in event) {\n return event;\n }\n else {\n const { stopImmediatePropagation } = event;\n return Object.assign(event, {\n immediatePropagationStopped: false,\n stopImmediatePropagation() {\n this.immediatePropagationStopped = true;\n stopImmediatePropagation.call(this);\n }\n });\n }\n}\n\nclass Dispatcher {\n constructor(application) {\n this.application = application;\n this.eventListenerMaps = new Map;\n this.started = false;\n }\n start() {\n if (!this.started) {\n this.started = true;\n this.eventListeners.forEach(eventListener => eventListener.connect());\n }\n }\n stop() {\n if (this.started) {\n this.started = false;\n this.eventListeners.forEach(eventListener => eventListener.disconnect());\n }\n }\n get eventListeners() {\n return Array.from(this.eventListenerMaps.values())\n .reduce((listeners, map) => listeners.concat(Array.from(map.values())), []);\n }\n bindingConnected(binding) {\n this.fetchEventListenerForBinding(binding).bindingConnected(binding);\n }\n bindingDisconnected(binding) {\n this.fetchEventListenerForBinding(binding).bindingDisconnected(binding);\n }\n handleError(error, message, detail = {}) {\n this.application.handleError(error, `Error ${message}`, detail);\n }\n fetchEventListenerForBinding(binding) {\n const { eventTarget, eventName, eventOptions } = binding;\n return this.fetchEventListener(eventTarget, eventName, eventOptions);\n }\n fetchEventListener(eventTarget, eventName, eventOptions) {\n const eventListenerMap = this.fetchEventListenerMapForEventTarget(eventTarget);\n const cacheKey = this.cacheKey(eventName, eventOptions);\n let eventListener = eventListenerMap.get(cacheKey);\n if (!eventListener) {\n eventListener = this.createEventListener(eventTarget, eventName, eventOptions);\n eventListenerMap.set(cacheKey, eventListener);\n }\n return eventListener;\n }\n createEventListener(eventTarget, eventName, eventOptions) {\n const eventListener = new EventListener(eventTarget, eventName, eventOptions);\n if (this.started) {\n eventListener.connect();\n }\n return eventListener;\n }\n fetchEventListenerMapForEventTarget(eventTarget) {\n let eventListenerMap = this.eventListenerMaps.get(eventTarget);\n if (!eventListenerMap) {\n eventListenerMap = new Map;\n this.eventListenerMaps.set(eventTarget, eventListenerMap);\n }\n return eventListenerMap;\n }\n cacheKey(eventName, eventOptions) {\n const parts = [eventName];\n Object.keys(eventOptions).sort().forEach(key => {\n parts.push(`${eventOptions[key] ? \"\" : \"!\"}${key}`);\n });\n return parts.join(\":\");\n }\n}\n\nconst descriptorPattern = /^((.+?)(@(window|document))?->)?(.+?)(#([^:]+?))(:(.+))?$/;\nfunction parseActionDescriptorString(descriptorString) {\n const source = descriptorString.trim();\n const matches = source.match(descriptorPattern) || [];\n return {\n eventTarget: parseEventTarget(matches[4]),\n eventName: matches[2],\n eventOptions: matches[9] ? parseEventOptions(matches[9]) : {},\n identifier: matches[5],\n methodName: matches[7]\n };\n}\nfunction parseEventTarget(eventTargetName) {\n if (eventTargetName == \"window\") {\n return window;\n }\n else if (eventTargetName == \"document\") {\n return document;\n }\n}\nfunction parseEventOptions(eventOptions) {\n return eventOptions.split(\":\").reduce((options, token) => Object.assign(options, { [token.replace(/^!/, \"\")]: !/^!/.test(token) }), {});\n}\nfunction stringifyEventTarget(eventTarget) {\n if (eventTarget == window) {\n return \"window\";\n }\n else if (eventTarget == document) {\n return \"document\";\n }\n}\n\nfunction camelize(value) {\n return value.replace(/(?:[_-])([a-z0-9])/g, (_, char) => char.toUpperCase());\n}\nfunction capitalize(value) {\n return value.charAt(0).toUpperCase() + value.slice(1);\n}\nfunction dasherize(value) {\n return value.replace(/([A-Z])/g, (_, char) => `-${char.toLowerCase()}`);\n}\nfunction tokenize(value) {\n return value.match(/[^\\s]+/g) || [];\n}\n\nclass Action {\n constructor(element, index, descriptor) {\n this.element = element;\n this.index = index;\n this.eventTarget = descriptor.eventTarget || element;\n this.eventName = descriptor.eventName || getDefaultEventNameForElement(element) || error(\"missing event name\");\n this.eventOptions = descriptor.eventOptions || {};\n this.identifier = descriptor.identifier || error(\"missing identifier\");\n this.methodName = descriptor.methodName || error(\"missing method name\");\n }\n static forToken(token) {\n return new this(token.element, token.index, parseActionDescriptorString(token.content));\n }\n toString() {\n const eventNameSuffix = this.eventTargetName ? `@${this.eventTargetName}` : \"\";\n return `${this.eventName}${eventNameSuffix}->${this.identifier}#${this.methodName}`;\n }\n get params() {\n const params = {};\n const pattern = new RegExp(`^data-${this.identifier}-(.+)-param$`);\n for (const { name, value } of Array.from(this.element.attributes)) {\n const match = name.match(pattern);\n const key = match && match[1];\n if (key) {\n params[camelize(key)] = typecast(value);\n }\n }\n return params;\n }\n get eventTargetName() {\n return stringifyEventTarget(this.eventTarget);\n }\n}\nconst defaultEventNames = {\n \"a\": e => \"click\",\n \"button\": e => \"click\",\n \"form\": e => \"submit\",\n \"details\": e => \"toggle\",\n \"input\": e => e.getAttribute(\"type\") == \"submit\" ? \"click\" : \"input\",\n \"select\": e => \"change\",\n \"textarea\": e => \"input\"\n};\nfunction getDefaultEventNameForElement(element) {\n const tagName = element.tagName.toLowerCase();\n if (tagName in defaultEventNames) {\n return defaultEventNames[tagName](element);\n }\n}\nfunction error(message) {\n throw new Error(message);\n}\nfunction typecast(value) {\n try {\n return JSON.parse(value);\n }\n catch (o_O) {\n return value;\n }\n}\n\nclass Binding {\n constructor(context, action) {\n this.context = context;\n this.action = action;\n }\n get index() {\n return this.action.index;\n }\n get eventTarget() {\n return this.action.eventTarget;\n }\n get eventOptions() {\n return this.action.eventOptions;\n }\n get identifier() {\n return this.context.identifier;\n }\n handleEvent(event) {\n if (this.willBeInvokedByEvent(event) && this.shouldBeInvokedPerSelf(event)) {\n this.processStopPropagation(event);\n this.processPreventDefault(event);\n this.invokeWithEvent(event);\n }\n }\n get eventName() {\n return this.action.eventName;\n }\n get method() {\n const method = this.controller[this.methodName];\n if (typeof method == \"function\") {\n return method;\n }\n throw new Error(`Action \"${this.action}\" references undefined method \"${this.methodName}\"`);\n }\n processStopPropagation(event) {\n if (this.eventOptions.stop) {\n event.stopPropagation();\n }\n }\n processPreventDefault(event) {\n if (this.eventOptions.prevent) {\n event.preventDefault();\n }\n }\n invokeWithEvent(event) {\n const { target, currentTarget } = event;\n try {\n const { params } = this.action;\n const actionEvent = Object.assign(event, { params });\n this.method.call(this.controller, actionEvent);\n this.context.logDebugActivity(this.methodName, { event, target, currentTarget, action: this.methodName });\n }\n catch (error) {\n const { identifier, controller, element, index } = this;\n const detail = { identifier, controller, element, index, event };\n this.context.handleError(error, `invoking action \"${this.action}\"`, detail);\n }\n }\n shouldBeInvokedPerSelf(event) {\n if (this.action.eventOptions.self === true) {\n return this.action.element === event.target;\n }\n else {\n return true;\n }\n }\n willBeInvokedByEvent(event) {\n const eventTarget = event.target;\n if (this.element === eventTarget) {\n return true;\n }\n else if (eventTarget instanceof Element && this.element.contains(eventTarget)) {\n return this.scope.containsElement(eventTarget);\n }\n else {\n return this.scope.containsElement(this.action.element);\n }\n }\n get controller() {\n return this.context.controller;\n }\n get methodName() {\n return this.action.methodName;\n }\n get element() {\n return this.scope.element;\n }\n get scope() {\n return this.context.scope;\n }\n}\n\nclass ElementObserver {\n constructor(element, delegate) {\n this.mutationObserverInit = { attributes: true, childList: true, subtree: true };\n this.element = element;\n this.started = false;\n this.delegate = delegate;\n this.elements = new Set;\n this.mutationObserver = new MutationObserver((mutations) => this.processMutations(mutations));\n }\n start() {\n if (!this.started) {\n this.started = true;\n this.mutationObserver.observe(this.element, this.mutationObserverInit);\n this.refresh();\n }\n }\n pause(callback) {\n if (this.started) {\n this.mutationObserver.disconnect();\n this.started = false;\n }\n callback();\n if (!this.started) {\n this.mutationObserver.observe(this.element, this.mutationObserverInit);\n this.started = true;\n }\n }\n stop() {\n if (this.started) {\n this.mutationObserver.takeRecords();\n this.mutationObserver.disconnect();\n this.started = false;\n }\n }\n refresh() {\n if (this.started) {\n const matches = new Set(this.matchElementsInTree());\n for (const element of Array.from(this.elements)) {\n if (!matches.has(element)) {\n this.removeElement(element);\n }\n }\n for (const element of Array.from(matches)) {\n this.addElement(element);\n }\n }\n }\n processMutations(mutations) {\n if (this.started) {\n for (const mutation of mutations) {\n this.processMutation(mutation);\n }\n }\n }\n processMutation(mutation) {\n if (mutation.type == \"attributes\") {\n this.processAttributeChange(mutation.target, mutation.attributeName);\n }\n else if (mutation.type == \"childList\") {\n this.processRemovedNodes(mutation.removedNodes);\n this.processAddedNodes(mutation.addedNodes);\n }\n }\n processAttributeChange(node, attributeName) {\n const element = node;\n if (this.elements.has(element)) {\n if (this.delegate.elementAttributeChanged && this.matchElement(element)) {\n this.delegate.elementAttributeChanged(element, attributeName);\n }\n else {\n this.removeElement(element);\n }\n }\n else if (this.matchElement(element)) {\n this.addElement(element);\n }\n }\n processRemovedNodes(nodes) {\n for (const node of Array.from(nodes)) {\n const element = this.elementFromNode(node);\n if (element) {\n this.processTree(element, this.removeElement);\n }\n }\n }\n processAddedNodes(nodes) {\n for (const node of Array.from(nodes)) {\n const element = this.elementFromNode(node);\n if (element && this.elementIsActive(element)) {\n this.processTree(element, this.addElement);\n }\n }\n }\n matchElement(element) {\n return this.delegate.matchElement(element);\n }\n matchElementsInTree(tree = this.element) {\n return this.delegate.matchElementsInTree(tree);\n }\n processTree(tree, processor) {\n for (const element of this.matchElementsInTree(tree)) {\n processor.call(this, element);\n }\n }\n elementFromNode(node) {\n if (node.nodeType == Node.ELEMENT_NODE) {\n return node;\n }\n }\n elementIsActive(element) {\n if (element.isConnected != this.element.isConnected) {\n return false;\n }\n else {\n return this.element.contains(element);\n }\n }\n addElement(element) {\n if (!this.elements.has(element)) {\n if (this.elementIsActive(element)) {\n this.elements.add(element);\n if (this.delegate.elementMatched) {\n this.delegate.elementMatched(element);\n }\n }\n }\n }\n removeElement(element) {\n if (this.elements.has(element)) {\n this.elements.delete(element);\n if (this.delegate.elementUnmatched) {\n this.delegate.elementUnmatched(element);\n }\n }\n }\n}\n\nclass AttributeObserver {\n constructor(element, attributeName, delegate) {\n this.attributeName = attributeName;\n this.delegate = delegate;\n this.elementObserver = new ElementObserver(element, this);\n }\n get element() {\n return this.elementObserver.element;\n }\n get selector() {\n return `[${this.attributeName}]`;\n }\n start() {\n this.elementObserver.start();\n }\n pause(callback) {\n this.elementObserver.pause(callback);\n }\n stop() {\n this.elementObserver.stop();\n }\n refresh() {\n this.elementObserver.refresh();\n }\n get started() {\n return this.elementObserver.started;\n }\n matchElement(element) {\n return element.hasAttribute(this.attributeName);\n }\n matchElementsInTree(tree) {\n const match = this.matchElement(tree) ? [tree] : [];\n const matches = Array.from(tree.querySelectorAll(this.selector));\n return match.concat(matches);\n }\n elementMatched(element) {\n if (this.delegate.elementMatchedAttribute) {\n this.delegate.elementMatchedAttribute(element, this.attributeName);\n }\n }\n elementUnmatched(element) {\n if (this.delegate.elementUnmatchedAttribute) {\n this.delegate.elementUnmatchedAttribute(element, this.attributeName);\n }\n }\n elementAttributeChanged(element, attributeName) {\n if (this.delegate.elementAttributeValueChanged && this.attributeName == attributeName) {\n this.delegate.elementAttributeValueChanged(element, attributeName);\n }\n }\n}\n\nclass StringMapObserver {\n constructor(element, delegate) {\n this.element = element;\n this.delegate = delegate;\n this.started = false;\n this.stringMap = new Map;\n this.mutationObserver = new MutationObserver(mutations => this.processMutations(mutations));\n }\n start() {\n if (!this.started) {\n this.started = true;\n this.mutationObserver.observe(this.element, { attributes: true, attributeOldValue: true });\n this.refresh();\n }\n }\n stop() {\n if (this.started) {\n this.mutationObserver.takeRecords();\n this.mutationObserver.disconnect();\n this.started = false;\n }\n }\n refresh() {\n if (this.started) {\n for (const attributeName of this.knownAttributeNames) {\n this.refreshAttribute(attributeName, null);\n }\n }\n }\n processMutations(mutations) {\n if (this.started) {\n for (const mutation of mutations) {\n this.processMutation(mutation);\n }\n }\n }\n processMutation(mutation) {\n const attributeName = mutation.attributeName;\n if (attributeName) {\n this.refreshAttribute(attributeName, mutation.oldValue);\n }\n }\n refreshAttribute(attributeName, oldValue) {\n const key = this.delegate.getStringMapKeyForAttribute(attributeName);\n if (key != null) {\n if (!this.stringMap.has(attributeName)) {\n this.stringMapKeyAdded(key, attributeName);\n }\n const value = this.element.getAttribute(attributeName);\n if (this.stringMap.get(attributeName) != value) {\n this.stringMapValueChanged(value, key, oldValue);\n }\n if (value == null) {\n const oldValue = this.stringMap.get(attributeName);\n this.stringMap.delete(attributeName);\n if (oldValue)\n this.stringMapKeyRemoved(key, attributeName, oldValue);\n }\n else {\n this.stringMap.set(attributeName, value);\n }\n }\n }\n stringMapKeyAdded(key, attributeName) {\n if (this.delegate.stringMapKeyAdded) {\n this.delegate.stringMapKeyAdded(key, attributeName);\n }\n }\n stringMapValueChanged(value, key, oldValue) {\n if (this.delegate.stringMapValueChanged) {\n this.delegate.stringMapValueChanged(value, key, oldValue);\n }\n }\n stringMapKeyRemoved(key, attributeName, oldValue) {\n if (this.delegate.stringMapKeyRemoved) {\n this.delegate.stringMapKeyRemoved(key, attributeName, oldValue);\n }\n }\n get knownAttributeNames() {\n return Array.from(new Set(this.currentAttributeNames.concat(this.recordedAttributeNames)));\n }\n get currentAttributeNames() {\n return Array.from(this.element.attributes).map(attribute => attribute.name);\n }\n get recordedAttributeNames() {\n return Array.from(this.stringMap.keys());\n }\n}\n\nfunction add(map, key, value) {\n fetch(map, key).add(value);\n}\nfunction del(map, key, value) {\n fetch(map, key).delete(value);\n prune(map, key);\n}\nfunction fetch(map, key) {\n let values = map.get(key);\n if (!values) {\n values = new Set();\n map.set(key, values);\n }\n return values;\n}\nfunction prune(map, key) {\n const values = map.get(key);\n if (values != null && values.size == 0) {\n map.delete(key);\n }\n}\n\nclass Multimap {\n constructor() {\n this.valuesByKey = new Map();\n }\n get keys() {\n return Array.from(this.valuesByKey.keys());\n }\n get values() {\n const sets = Array.from(this.valuesByKey.values());\n return sets.reduce((values, set) => values.concat(Array.from(set)), []);\n }\n get size() {\n const sets = Array.from(this.valuesByKey.values());\n return sets.reduce((size, set) => size + set.size, 0);\n }\n add(key, value) {\n add(this.valuesByKey, key, value);\n }\n delete(key, value) {\n del(this.valuesByKey, key, value);\n }\n has(key, value) {\n const values = this.valuesByKey.get(key);\n return values != null && values.has(value);\n }\n hasKey(key) {\n return this.valuesByKey.has(key);\n }\n hasValue(value) {\n const sets = Array.from(this.valuesByKey.values());\n return sets.some(set => set.has(value));\n }\n getValuesForKey(key) {\n const values = this.valuesByKey.get(key);\n return values ? Array.from(values) : [];\n }\n getKeysForValue(value) {\n return Array.from(this.valuesByKey)\n .filter(([key, values]) => values.has(value))\n .map(([key, values]) => key);\n }\n}\n\nclass IndexedMultimap extends Multimap {\n constructor() {\n super();\n this.keysByValue = new Map;\n }\n get values() {\n return Array.from(this.keysByValue.keys());\n }\n add(key, value) {\n super.add(key, value);\n add(this.keysByValue, value, key);\n }\n delete(key, value) {\n super.delete(key, value);\n del(this.keysByValue, value, key);\n }\n hasValue(value) {\n return this.keysByValue.has(value);\n }\n getKeysForValue(value) {\n const set = this.keysByValue.get(value);\n return set ? Array.from(set) : [];\n }\n}\n\nclass TokenListObserver {\n constructor(element, attributeName, delegate) {\n this.attributeObserver = new AttributeObserver(element, attributeName, this);\n this.delegate = delegate;\n this.tokensByElement = new Multimap;\n }\n get started() {\n return this.attributeObserver.started;\n }\n start() {\n this.attributeObserver.start();\n }\n pause(callback) {\n this.attributeObserver.pause(callback);\n }\n stop() {\n this.attributeObserver.stop();\n }\n refresh() {\n this.attributeObserver.refresh();\n }\n get element() {\n return this.attributeObserver.element;\n }\n get attributeName() {\n return this.attributeObserver.attributeName;\n }\n elementMatchedAttribute(element) {\n this.tokensMatched(this.readTokensForElement(element));\n }\n elementAttributeValueChanged(element) {\n const [unmatchedTokens, matchedTokens] = this.refreshTokensForElement(element);\n this.tokensUnmatched(unmatchedTokens);\n this.tokensMatched(matchedTokens);\n }\n elementUnmatchedAttribute(element) {\n this.tokensUnmatched(this.tokensByElement.getValuesForKey(element));\n }\n tokensMatched(tokens) {\n tokens.forEach(token => this.tokenMatched(token));\n }\n tokensUnmatched(tokens) {\n tokens.forEach(token => this.tokenUnmatched(token));\n }\n tokenMatched(token) {\n this.delegate.tokenMatched(token);\n this.tokensByElement.add(token.element, token);\n }\n tokenUnmatched(token) {\n this.delegate.tokenUnmatched(token);\n this.tokensByElement.delete(token.element, token);\n }\n refreshTokensForElement(element) {\n const previousTokens = this.tokensByElement.getValuesForKey(element);\n const currentTokens = this.readTokensForElement(element);\n const firstDifferingIndex = zip(previousTokens, currentTokens)\n .findIndex(([previousToken, currentToken]) => !tokensAreEqual(previousToken, currentToken));\n if (firstDifferingIndex == -1) {\n return [[], []];\n }\n else {\n return [previousTokens.slice(firstDifferingIndex), currentTokens.slice(firstDifferingIndex)];\n }\n }\n readTokensForElement(element) {\n const attributeName = this.attributeName;\n const tokenString = element.getAttribute(attributeName) || \"\";\n return parseTokenString(tokenString, element, attributeName);\n }\n}\nfunction parseTokenString(tokenString, element, attributeName) {\n return tokenString.trim().split(/\\s+/).filter(content => content.length)\n .map((content, index) => ({ element, attributeName, content, index }));\n}\nfunction zip(left, right) {\n const length = Math.max(left.length, right.length);\n return Array.from({ length }, (_, index) => [left[index], right[index]]);\n}\nfunction tokensAreEqual(left, right) {\n return left && right && left.index == right.index && left.content == right.content;\n}\n\nclass ValueListObserver {\n constructor(element, attributeName, delegate) {\n this.tokenListObserver = new TokenListObserver(element, attributeName, this);\n this.delegate = delegate;\n this.parseResultsByToken = new WeakMap;\n this.valuesByTokenByElement = new WeakMap;\n }\n get started() {\n return this.tokenListObserver.started;\n }\n start() {\n this.tokenListObserver.start();\n }\n stop() {\n this.tokenListObserver.stop();\n }\n refresh() {\n this.tokenListObserver.refresh();\n }\n get element() {\n return this.tokenListObserver.element;\n }\n get attributeName() {\n return this.tokenListObserver.attributeName;\n }\n tokenMatched(token) {\n const { element } = token;\n const { value } = this.fetchParseResultForToken(token);\n if (value) {\n this.fetchValuesByTokenForElement(element).set(token, value);\n this.delegate.elementMatchedValue(element, value);\n }\n }\n tokenUnmatched(token) {\n const { element } = token;\n const { value } = this.fetchParseResultForToken(token);\n if (value) {\n this.fetchValuesByTokenForElement(element).delete(token);\n this.delegate.elementUnmatchedValue(element, value);\n }\n }\n fetchParseResultForToken(token) {\n let parseResult = this.parseResultsByToken.get(token);\n if (!parseResult) {\n parseResult = this.parseToken(token);\n this.parseResultsByToken.set(token, parseResult);\n }\n return parseResult;\n }\n fetchValuesByTokenForElement(element) {\n let valuesByToken = this.valuesByTokenByElement.get(element);\n if (!valuesByToken) {\n valuesByToken = new Map;\n this.valuesByTokenByElement.set(element, valuesByToken);\n }\n return valuesByToken;\n }\n parseToken(token) {\n try {\n const value = this.delegate.parseValueForToken(token);\n return { value };\n }\n catch (error) {\n return { error };\n }\n }\n}\n\nclass BindingObserver {\n constructor(context, delegate) {\n this.context = context;\n this.delegate = delegate;\n this.bindingsByAction = new Map;\n }\n start() {\n if (!this.valueListObserver) {\n this.valueListObserver = new ValueListObserver(this.element, this.actionAttribute, this);\n this.valueListObserver.start();\n }\n }\n stop() {\n if (this.valueListObserver) {\n this.valueListObserver.stop();\n delete this.valueListObserver;\n this.disconnectAllActions();\n }\n }\n get element() {\n return this.context.element;\n }\n get identifier() {\n return this.context.identifier;\n }\n get actionAttribute() {\n return this.schema.actionAttribute;\n }\n get schema() {\n return this.context.schema;\n }\n get bindings() {\n return Array.from(this.bindingsByAction.values());\n }\n connectAction(action) {\n const binding = new Binding(this.context, action);\n this.bindingsByAction.set(action, binding);\n this.delegate.bindingConnected(binding);\n }\n disconnectAction(action) {\n const binding = this.bindingsByAction.get(action);\n if (binding) {\n this.bindingsByAction.delete(action);\n this.delegate.bindingDisconnected(binding);\n }\n }\n disconnectAllActions() {\n this.bindings.forEach(binding => this.delegate.bindingDisconnected(binding));\n this.bindingsByAction.clear();\n }\n parseValueForToken(token) {\n const action = Action.forToken(token);\n if (action.identifier == this.identifier) {\n return action;\n }\n }\n elementMatchedValue(element, action) {\n this.connectAction(action);\n }\n elementUnmatchedValue(element, action) {\n this.disconnectAction(action);\n }\n}\n\nclass ValueObserver {\n constructor(context, receiver) {\n this.context = context;\n this.receiver = receiver;\n this.stringMapObserver = new StringMapObserver(this.element, this);\n this.valueDescriptorMap = this.controller.valueDescriptorMap;\n }\n start() {\n this.stringMapObserver.start();\n this.invokeChangedCallbacksForDefaultValues();\n }\n stop() {\n this.stringMapObserver.stop();\n }\n get element() {\n return this.context.element;\n }\n get controller() {\n return this.context.controller;\n }\n getStringMapKeyForAttribute(attributeName) {\n if (attributeName in this.valueDescriptorMap) {\n return this.valueDescriptorMap[attributeName].name;\n }\n }\n stringMapKeyAdded(key, attributeName) {\n const descriptor = this.valueDescriptorMap[attributeName];\n if (!this.hasValue(key)) {\n this.invokeChangedCallback(key, descriptor.writer(this.receiver[key]), descriptor.writer(descriptor.defaultValue));\n }\n }\n stringMapValueChanged(value, name, oldValue) {\n const descriptor = this.valueDescriptorNameMap[name];\n if (value === null)\n return;\n if (oldValue === null) {\n oldValue = descriptor.writer(descriptor.defaultValue);\n }\n this.invokeChangedCallback(name, value, oldValue);\n }\n stringMapKeyRemoved(key, attributeName, oldValue) {\n const descriptor = this.valueDescriptorNameMap[key];\n if (this.hasValue(key)) {\n this.invokeChangedCallback(key, descriptor.writer(this.receiver[key]), oldValue);\n }\n else {\n this.invokeChangedCallback(key, descriptor.writer(descriptor.defaultValue), oldValue);\n }\n }\n invokeChangedCallbacksForDefaultValues() {\n for (const { key, name, defaultValue, writer } of this.valueDescriptors) {\n if (defaultValue != undefined && !this.controller.data.has(key)) {\n this.invokeChangedCallback(name, writer(defaultValue), undefined);\n }\n }\n }\n invokeChangedCallback(name, rawValue, rawOldValue) {\n const changedMethodName = `${name}Changed`;\n const changedMethod = this.receiver[changedMethodName];\n if (typeof changedMethod == \"function\") {\n const descriptor = this.valueDescriptorNameMap[name];\n try {\n const value = descriptor.reader(rawValue);\n let oldValue = rawOldValue;\n if (rawOldValue) {\n oldValue = descriptor.reader(rawOldValue);\n }\n changedMethod.call(this.receiver, value, oldValue);\n }\n catch (error) {\n if (!(error instanceof TypeError))\n throw error;\n throw new TypeError(`Stimulus Value \"${this.context.identifier}.${descriptor.name}\" - ${error.message}`);\n }\n }\n }\n get valueDescriptors() {\n const { valueDescriptorMap } = this;\n return Object.keys(valueDescriptorMap).map(key => valueDescriptorMap[key]);\n }\n get valueDescriptorNameMap() {\n const descriptors = {};\n Object.keys(this.valueDescriptorMap).forEach(key => {\n const descriptor = this.valueDescriptorMap[key];\n descriptors[descriptor.name] = descriptor;\n });\n return descriptors;\n }\n hasValue(attributeName) {\n const descriptor = this.valueDescriptorNameMap[attributeName];\n const hasMethodName = `has${capitalize(descriptor.name)}`;\n return this.receiver[hasMethodName];\n }\n}\n\nclass TargetObserver {\n constructor(context, delegate) {\n this.context = context;\n this.delegate = delegate;\n this.targetsByName = new Multimap;\n }\n start() {\n if (!this.tokenListObserver) {\n this.tokenListObserver = new TokenListObserver(this.element, this.attributeName, this);\n this.tokenListObserver.start();\n }\n }\n stop() {\n if (this.tokenListObserver) {\n this.disconnectAllTargets();\n this.tokenListObserver.stop();\n delete this.tokenListObserver;\n }\n }\n tokenMatched({ element, content: name }) {\n if (this.scope.containsElement(element)) {\n this.connectTarget(element, name);\n }\n }\n tokenUnmatched({ element, content: name }) {\n this.disconnectTarget(element, name);\n }\n connectTarget(element, name) {\n var _a;\n if (!this.targetsByName.has(name, element)) {\n this.targetsByName.add(name, element);\n (_a = this.tokenListObserver) === null || _a === void 0 ? void 0 : _a.pause(() => this.delegate.targetConnected(element, name));\n }\n }\n disconnectTarget(element, name) {\n var _a;\n if (this.targetsByName.has(name, element)) {\n this.targetsByName.delete(name, element);\n (_a = this.tokenListObserver) === null || _a === void 0 ? void 0 : _a.pause(() => this.delegate.targetDisconnected(element, name));\n }\n }\n disconnectAllTargets() {\n for (const name of this.targetsByName.keys) {\n for (const element of this.targetsByName.getValuesForKey(name)) {\n this.disconnectTarget(element, name);\n }\n }\n }\n get attributeName() {\n return `data-${this.context.identifier}-target`;\n }\n get element() {\n return this.context.element;\n }\n get scope() {\n return this.context.scope;\n }\n}\n\nclass Context {\n constructor(module, scope) {\n this.logDebugActivity = (functionName, detail = {}) => {\n const { identifier, controller, element } = this;\n detail = Object.assign({ identifier, controller, element }, detail);\n this.application.logDebugActivity(this.identifier, functionName, detail);\n };\n this.module = module;\n this.scope = scope;\n this.controller = new module.controllerConstructor(this);\n this.bindingObserver = new BindingObserver(this, this.dispatcher);\n this.valueObserver = new ValueObserver(this, this.controller);\n this.targetObserver = new TargetObserver(this, this);\n try {\n this.controller.initialize();\n this.logDebugActivity(\"initialize\");\n }\n catch (error) {\n this.handleError(error, \"initializing controller\");\n }\n }\n connect() {\n this.bindingObserver.start();\n this.valueObserver.start();\n this.targetObserver.start();\n try {\n this.controller.connect();\n this.logDebugActivity(\"connect\");\n }\n catch (error) {\n this.handleError(error, \"connecting controller\");\n }\n }\n disconnect() {\n try {\n this.controller.disconnect();\n this.logDebugActivity(\"disconnect\");\n }\n catch (error) {\n this.handleError(error, \"disconnecting controller\");\n }\n this.targetObserver.stop();\n this.valueObserver.stop();\n this.bindingObserver.stop();\n }\n get application() {\n return this.module.application;\n }\n get identifier() {\n return this.module.identifier;\n }\n get schema() {\n return this.application.schema;\n }\n get dispatcher() {\n return this.application.dispatcher;\n }\n get element() {\n return this.scope.element;\n }\n get parentElement() {\n return this.element.parentElement;\n }\n handleError(error, message, detail = {}) {\n const { identifier, controller, element } = this;\n detail = Object.assign({ identifier, controller, element }, detail);\n this.application.handleError(error, `Error ${message}`, detail);\n }\n targetConnected(element, name) {\n this.invokeControllerMethod(`${name}TargetConnected`, element);\n }\n targetDisconnected(element, name) {\n this.invokeControllerMethod(`${name}TargetDisconnected`, element);\n }\n invokeControllerMethod(methodName, ...args) {\n const controller = this.controller;\n if (typeof controller[methodName] == \"function\") {\n controller[methodName](...args);\n }\n }\n}\n\nfunction readInheritableStaticArrayValues(constructor, propertyName) {\n const ancestors = getAncestorsForConstructor(constructor);\n return Array.from(ancestors.reduce((values, constructor) => {\n getOwnStaticArrayValues(constructor, propertyName).forEach(name => values.add(name));\n return values;\n }, new Set));\n}\nfunction readInheritableStaticObjectPairs(constructor, propertyName) {\n const ancestors = getAncestorsForConstructor(constructor);\n return ancestors.reduce((pairs, constructor) => {\n pairs.push(...getOwnStaticObjectPairs(constructor, propertyName));\n return pairs;\n }, []);\n}\nfunction getAncestorsForConstructor(constructor) {\n const ancestors = [];\n while (constructor) {\n ancestors.push(constructor);\n constructor = Object.getPrototypeOf(constructor);\n }\n return ancestors.reverse();\n}\nfunction getOwnStaticArrayValues(constructor, propertyName) {\n const definition = constructor[propertyName];\n return Array.isArray(definition) ? definition : [];\n}\nfunction getOwnStaticObjectPairs(constructor, propertyName) {\n const definition = constructor[propertyName];\n return definition ? Object.keys(definition).map(key => [key, definition[key]]) : [];\n}\n\nfunction bless(constructor) {\n return shadow(constructor, getBlessedProperties(constructor));\n}\nfunction shadow(constructor, properties) {\n const shadowConstructor = extend(constructor);\n const shadowProperties = getShadowProperties(constructor.prototype, properties);\n Object.defineProperties(shadowConstructor.prototype, shadowProperties);\n return shadowConstructor;\n}\nfunction getBlessedProperties(constructor) {\n const blessings = readInheritableStaticArrayValues(constructor, \"blessings\");\n return blessings.reduce((blessedProperties, blessing) => {\n const properties = blessing(constructor);\n for (const key in properties) {\n const descriptor = blessedProperties[key] || {};\n blessedProperties[key] = Object.assign(descriptor, properties[key]);\n }\n return blessedProperties;\n }, {});\n}\nfunction getShadowProperties(prototype, properties) {\n return getOwnKeys(properties).reduce((shadowProperties, key) => {\n const descriptor = getShadowedDescriptor(prototype, properties, key);\n if (descriptor) {\n Object.assign(shadowProperties, { [key]: descriptor });\n }\n return shadowProperties;\n }, {});\n}\nfunction getShadowedDescriptor(prototype, properties, key) {\n const shadowingDescriptor = Object.getOwnPropertyDescriptor(prototype, key);\n const shadowedByValue = shadowingDescriptor && \"value\" in shadowingDescriptor;\n if (!shadowedByValue) {\n const descriptor = Object.getOwnPropertyDescriptor(properties, key).value;\n if (shadowingDescriptor) {\n descriptor.get = shadowingDescriptor.get || descriptor.get;\n descriptor.set = shadowingDescriptor.set || descriptor.set;\n }\n return descriptor;\n }\n}\nconst getOwnKeys = (() => {\n if (typeof Object.getOwnPropertySymbols == \"function\") {\n return (object) => [\n ...Object.getOwnPropertyNames(object),\n ...Object.getOwnPropertySymbols(object)\n ];\n }\n else {\n return Object.getOwnPropertyNames;\n }\n})();\nconst extend = (() => {\n function extendWithReflect(constructor) {\n function extended() {\n return Reflect.construct(constructor, arguments, new.target);\n }\n extended.prototype = Object.create(constructor.prototype, {\n constructor: { value: extended }\n });\n Reflect.setPrototypeOf(extended, constructor);\n return extended;\n }\n function testReflectExtension() {\n const a = function () { this.a.call(this); };\n const b = extendWithReflect(a);\n b.prototype.a = function () { };\n return new b;\n }\n try {\n testReflectExtension();\n return extendWithReflect;\n }\n catch (error) {\n return (constructor) => class extended extends constructor {\n };\n }\n})();\n\nfunction blessDefinition(definition) {\n return {\n identifier: definition.identifier,\n controllerConstructor: bless(definition.controllerConstructor)\n };\n}\n\nclass Module {\n constructor(application, definition) {\n this.application = application;\n this.definition = blessDefinition(definition);\n this.contextsByScope = new WeakMap;\n this.connectedContexts = new Set;\n }\n get identifier() {\n return this.definition.identifier;\n }\n get controllerConstructor() {\n return this.definition.controllerConstructor;\n }\n get contexts() {\n return Array.from(this.connectedContexts);\n }\n connectContextForScope(scope) {\n const context = this.fetchContextForScope(scope);\n this.connectedContexts.add(context);\n context.connect();\n }\n disconnectContextForScope(scope) {\n const context = this.contextsByScope.get(scope);\n if (context) {\n this.connectedContexts.delete(context);\n context.disconnect();\n }\n }\n fetchContextForScope(scope) {\n let context = this.contextsByScope.get(scope);\n if (!context) {\n context = new Context(this, scope);\n this.contextsByScope.set(scope, context);\n }\n return context;\n }\n}\n\nclass ClassMap {\n constructor(scope) {\n this.scope = scope;\n }\n has(name) {\n return this.data.has(this.getDataKey(name));\n }\n get(name) {\n return this.getAll(name)[0];\n }\n getAll(name) {\n const tokenString = this.data.get(this.getDataKey(name)) || \"\";\n return tokenize(tokenString);\n }\n getAttributeName(name) {\n return this.data.getAttributeNameForKey(this.getDataKey(name));\n }\n getDataKey(name) {\n return `${name}-class`;\n }\n get data() {\n return this.scope.data;\n }\n}\n\nclass DataMap {\n constructor(scope) {\n this.scope = scope;\n }\n get element() {\n return this.scope.element;\n }\n get identifier() {\n return this.scope.identifier;\n }\n get(key) {\n const name = this.getAttributeNameForKey(key);\n return this.element.getAttribute(name);\n }\n set(key, value) {\n const name = this.getAttributeNameForKey(key);\n this.element.setAttribute(name, value);\n return this.get(key);\n }\n has(key) {\n const name = this.getAttributeNameForKey(key);\n return this.element.hasAttribute(name);\n }\n delete(key) {\n if (this.has(key)) {\n const name = this.getAttributeNameForKey(key);\n this.element.removeAttribute(name);\n return true;\n }\n else {\n return false;\n }\n }\n getAttributeNameForKey(key) {\n return `data-${this.identifier}-${dasherize(key)}`;\n }\n}\n\nclass Guide {\n constructor(logger) {\n this.warnedKeysByObject = new WeakMap;\n this.logger = logger;\n }\n warn(object, key, message) {\n let warnedKeys = this.warnedKeysByObject.get(object);\n if (!warnedKeys) {\n warnedKeys = new Set;\n this.warnedKeysByObject.set(object, warnedKeys);\n }\n if (!warnedKeys.has(key)) {\n warnedKeys.add(key);\n this.logger.warn(message, object);\n }\n }\n}\n\nfunction attributeValueContainsToken(attributeName, token) {\n return `[${attributeName}~=\"${token}\"]`;\n}\n\nclass TargetSet {\n constructor(scope) {\n this.scope = scope;\n }\n get element() {\n return this.scope.element;\n }\n get identifier() {\n return this.scope.identifier;\n }\n get schema() {\n return this.scope.schema;\n }\n has(targetName) {\n return this.find(targetName) != null;\n }\n find(...targetNames) {\n return targetNames.reduce((target, targetName) => target\n || this.findTarget(targetName)\n || this.findLegacyTarget(targetName), undefined);\n }\n findAll(...targetNames) {\n return targetNames.reduce((targets, targetName) => [\n ...targets,\n ...this.findAllTargets(targetName),\n ...this.findAllLegacyTargets(targetName)\n ], []);\n }\n findTarget(targetName) {\n const selector = this.getSelectorForTargetName(targetName);\n return this.scope.findElement(selector);\n }\n findAllTargets(targetName) {\n const selector = this.getSelectorForTargetName(targetName);\n return this.scope.findAllElements(selector);\n }\n getSelectorForTargetName(targetName) {\n const attributeName = this.schema.targetAttributeForScope(this.identifier);\n return attributeValueContainsToken(attributeName, targetName);\n }\n findLegacyTarget(targetName) {\n const selector = this.getLegacySelectorForTargetName(targetName);\n return this.deprecate(this.scope.findElement(selector), targetName);\n }\n findAllLegacyTargets(targetName) {\n const selector = this.getLegacySelectorForTargetName(targetName);\n return this.scope.findAllElements(selector).map(element => this.deprecate(element, targetName));\n }\n getLegacySelectorForTargetName(targetName) {\n const targetDescriptor = `${this.identifier}.${targetName}`;\n return attributeValueContainsToken(this.schema.targetAttribute, targetDescriptor);\n }\n deprecate(element, targetName) {\n if (element) {\n const { identifier } = this;\n const attributeName = this.schema.targetAttribute;\n const revisedAttributeName = this.schema.targetAttributeForScope(identifier);\n this.guide.warn(element, `target:${targetName}`, `Please replace ${attributeName}=\"${identifier}.${targetName}\" with ${revisedAttributeName}=\"${targetName}\". ` +\n `The ${attributeName} attribute is deprecated and will be removed in a future version of Stimulus.`);\n }\n return element;\n }\n get guide() {\n return this.scope.guide;\n }\n}\n\nclass Scope {\n constructor(schema, element, identifier, logger) {\n this.targets = new TargetSet(this);\n this.classes = new ClassMap(this);\n this.data = new DataMap(this);\n this.containsElement = (element) => {\n return element.closest(this.controllerSelector) === this.element;\n };\n this.schema = schema;\n this.element = element;\n this.identifier = identifier;\n this.guide = new Guide(logger);\n }\n findElement(selector) {\n return this.element.matches(selector)\n ? this.element\n : this.queryElements(selector).find(this.containsElement);\n }\n findAllElements(selector) {\n return [\n ...this.element.matches(selector) ? [this.element] : [],\n ...this.queryElements(selector).filter(this.containsElement)\n ];\n }\n queryElements(selector) {\n return Array.from(this.element.querySelectorAll(selector));\n }\n get controllerSelector() {\n return attributeValueContainsToken(this.schema.controllerAttribute, this.identifier);\n }\n}\n\nclass ScopeObserver {\n constructor(element, schema, delegate) {\n this.element = element;\n this.schema = schema;\n this.delegate = delegate;\n this.valueListObserver = new ValueListObserver(this.element, this.controllerAttribute, this);\n this.scopesByIdentifierByElement = new WeakMap;\n this.scopeReferenceCounts = new WeakMap;\n }\n start() {\n this.valueListObserver.start();\n }\n stop() {\n this.valueListObserver.stop();\n }\n get controllerAttribute() {\n return this.schema.controllerAttribute;\n }\n parseValueForToken(token) {\n const { element, content: identifier } = token;\n const scopesByIdentifier = this.fetchScopesByIdentifierForElement(element);\n let scope = scopesByIdentifier.get(identifier);\n if (!scope) {\n scope = this.delegate.createScopeForElementAndIdentifier(element, identifier);\n scopesByIdentifier.set(identifier, scope);\n }\n return scope;\n }\n elementMatchedValue(element, value) {\n const referenceCount = (this.scopeReferenceCounts.get(value) || 0) + 1;\n this.scopeReferenceCounts.set(value, referenceCount);\n if (referenceCount == 1) {\n this.delegate.scopeConnected(value);\n }\n }\n elementUnmatchedValue(element, value) {\n const referenceCount = this.scopeReferenceCounts.get(value);\n if (referenceCount) {\n this.scopeReferenceCounts.set(value, referenceCount - 1);\n if (referenceCount == 1) {\n this.delegate.scopeDisconnected(value);\n }\n }\n }\n fetchScopesByIdentifierForElement(element) {\n let scopesByIdentifier = this.scopesByIdentifierByElement.get(element);\n if (!scopesByIdentifier) {\n scopesByIdentifier = new Map;\n this.scopesByIdentifierByElement.set(element, scopesByIdentifier);\n }\n return scopesByIdentifier;\n }\n}\n\nclass Router {\n constructor(application) {\n this.application = application;\n this.scopeObserver = new ScopeObserver(this.element, this.schema, this);\n this.scopesByIdentifier = new Multimap;\n this.modulesByIdentifier = new Map;\n }\n get element() {\n return this.application.element;\n }\n get schema() {\n return this.application.schema;\n }\n get logger() {\n return this.application.logger;\n }\n get controllerAttribute() {\n return this.schema.controllerAttribute;\n }\n get modules() {\n return Array.from(this.modulesByIdentifier.values());\n }\n get contexts() {\n return this.modules.reduce((contexts, module) => contexts.concat(module.contexts), []);\n }\n start() {\n this.scopeObserver.start();\n }\n stop() {\n this.scopeObserver.stop();\n }\n loadDefinition(definition) {\n this.unloadIdentifier(definition.identifier);\n const module = new Module(this.application, definition);\n this.connectModule(module);\n }\n unloadIdentifier(identifier) {\n const module = this.modulesByIdentifier.get(identifier);\n if (module) {\n this.disconnectModule(module);\n }\n }\n getContextForElementAndIdentifier(element, identifier) {\n const module = this.modulesByIdentifier.get(identifier);\n if (module) {\n return module.contexts.find(context => context.element == element);\n }\n }\n handleError(error, message, detail) {\n this.application.handleError(error, message, detail);\n }\n createScopeForElementAndIdentifier(element, identifier) {\n return new Scope(this.schema, element, identifier, this.logger);\n }\n scopeConnected(scope) {\n this.scopesByIdentifier.add(scope.identifier, scope);\n const module = this.modulesByIdentifier.get(scope.identifier);\n if (module) {\n module.connectContextForScope(scope);\n }\n }\n scopeDisconnected(scope) {\n this.scopesByIdentifier.delete(scope.identifier, scope);\n const module = this.modulesByIdentifier.get(scope.identifier);\n if (module) {\n module.disconnectContextForScope(scope);\n }\n }\n connectModule(module) {\n this.modulesByIdentifier.set(module.identifier, module);\n const scopes = this.scopesByIdentifier.getValuesForKey(module.identifier);\n scopes.forEach(scope => module.connectContextForScope(scope));\n }\n disconnectModule(module) {\n this.modulesByIdentifier.delete(module.identifier);\n const scopes = this.scopesByIdentifier.getValuesForKey(module.identifier);\n scopes.forEach(scope => module.disconnectContextForScope(scope));\n }\n}\n\nconst defaultSchema = {\n controllerAttribute: \"data-controller\",\n actionAttribute: \"data-action\",\n targetAttribute: \"data-target\",\n targetAttributeForScope: identifier => `data-${identifier}-target`\n};\n\nclass Application {\n constructor(element = document.documentElement, schema = defaultSchema) {\n this.logger = console;\n this.debug = false;\n this.logDebugActivity = (identifier, functionName, detail = {}) => {\n if (this.debug) {\n this.logFormattedMessage(identifier, functionName, detail);\n }\n };\n this.element = element;\n this.schema = schema;\n this.dispatcher = new Dispatcher(this);\n this.router = new Router(this);\n }\n static start(element, schema) {\n const application = new Application(element, schema);\n application.start();\n return application;\n }\n async start() {\n await domReady();\n this.logDebugActivity(\"application\", \"starting\");\n this.dispatcher.start();\n this.router.start();\n this.logDebugActivity(\"application\", \"start\");\n }\n stop() {\n this.logDebugActivity(\"application\", \"stopping\");\n this.dispatcher.stop();\n this.router.stop();\n this.logDebugActivity(\"application\", \"stop\");\n }\n register(identifier, controllerConstructor) {\n this.load({ identifier, controllerConstructor });\n }\n load(head, ...rest) {\n const definitions = Array.isArray(head) ? head : [head, ...rest];\n definitions.forEach(definition => {\n if (definition.controllerConstructor.shouldLoad) {\n this.router.loadDefinition(definition);\n }\n });\n }\n unload(head, ...rest) {\n const identifiers = Array.isArray(head) ? head : [head, ...rest];\n identifiers.forEach(identifier => this.router.unloadIdentifier(identifier));\n }\n get controllers() {\n return this.router.contexts.map(context => context.controller);\n }\n getControllerForElementAndIdentifier(element, identifier) {\n const context = this.router.getContextForElementAndIdentifier(element, identifier);\n return context ? context.controller : null;\n }\n handleError(error, message, detail) {\n var _a;\n this.logger.error(`%s\\n\\n%o\\n\\n%o`, message, error, detail);\n (_a = window.onerror) === null || _a === void 0 ? void 0 : _a.call(window, message, \"\", 0, 0, error);\n }\n logFormattedMessage(identifier, functionName, detail = {}) {\n detail = Object.assign({ application: this }, detail);\n this.logger.groupCollapsed(`${identifier} #${functionName}`);\n this.logger.log(\"details:\", Object.assign({}, detail));\n this.logger.groupEnd();\n }\n}\nfunction domReady() {\n return new Promise(resolve => {\n if (document.readyState == \"loading\") {\n document.addEventListener(\"DOMContentLoaded\", () => resolve());\n }\n else {\n resolve();\n }\n });\n}\n\nfunction ClassPropertiesBlessing(constructor) {\n const classes = readInheritableStaticArrayValues(constructor, \"classes\");\n return classes.reduce((properties, classDefinition) => {\n return Object.assign(properties, propertiesForClassDefinition(classDefinition));\n }, {});\n}\nfunction propertiesForClassDefinition(key) {\n return {\n [`${key}Class`]: {\n get() {\n const { classes } = this;\n if (classes.has(key)) {\n return classes.get(key);\n }\n else {\n const attribute = classes.getAttributeName(key);\n throw new Error(`Missing attribute \"${attribute}\"`);\n }\n }\n },\n [`${key}Classes`]: {\n get() {\n return this.classes.getAll(key);\n }\n },\n [`has${capitalize(key)}Class`]: {\n get() {\n return this.classes.has(key);\n }\n }\n };\n}\n\nfunction TargetPropertiesBlessing(constructor) {\n const targets = readInheritableStaticArrayValues(constructor, \"targets\");\n return targets.reduce((properties, targetDefinition) => {\n return Object.assign(properties, propertiesForTargetDefinition(targetDefinition));\n }, {});\n}\nfunction propertiesForTargetDefinition(name) {\n return {\n [`${name}Target`]: {\n get() {\n const target = this.targets.find(name);\n if (target) {\n return target;\n }\n else {\n throw new Error(`Missing target element \"${name}\" for \"${this.identifier}\" controller`);\n }\n }\n },\n [`${name}Targets`]: {\n get() {\n return this.targets.findAll(name);\n }\n },\n [`has${capitalize(name)}Target`]: {\n get() {\n return this.targets.has(name);\n }\n }\n };\n}\n\nfunction ValuePropertiesBlessing(constructor) {\n const valueDefinitionPairs = readInheritableStaticObjectPairs(constructor, \"values\");\n const propertyDescriptorMap = {\n valueDescriptorMap: {\n get() {\n return valueDefinitionPairs.reduce((result, valueDefinitionPair) => {\n const valueDescriptor = parseValueDefinitionPair(valueDefinitionPair, this.identifier);\n const attributeName = this.data.getAttributeNameForKey(valueDescriptor.key);\n return Object.assign(result, { [attributeName]: valueDescriptor });\n }, {});\n }\n }\n };\n return valueDefinitionPairs.reduce((properties, valueDefinitionPair) => {\n return Object.assign(properties, propertiesForValueDefinitionPair(valueDefinitionPair));\n }, propertyDescriptorMap);\n}\nfunction propertiesForValueDefinitionPair(valueDefinitionPair, controller) {\n const definition = parseValueDefinitionPair(valueDefinitionPair, controller);\n const { key, name, reader: read, writer: write } = definition;\n return {\n [name]: {\n get() {\n const value = this.data.get(key);\n if (value !== null) {\n return read(value);\n }\n else {\n return definition.defaultValue;\n }\n },\n set(value) {\n if (value === undefined) {\n this.data.delete(key);\n }\n else {\n this.data.set(key, write(value));\n }\n }\n },\n [`has${capitalize(name)}`]: {\n get() {\n return this.data.has(key) || definition.hasCustomDefaultValue;\n }\n }\n };\n}\nfunction parseValueDefinitionPair([token, typeDefinition], controller) {\n return valueDescriptorForTokenAndTypeDefinition({\n controller,\n token,\n typeDefinition,\n });\n}\nfunction parseValueTypeConstant(constant) {\n switch (constant) {\n case Array: return \"array\";\n case Boolean: return \"boolean\";\n case Number: return \"number\";\n case Object: return \"object\";\n case String: return \"string\";\n }\n}\nfunction parseValueTypeDefault(defaultValue) {\n switch (typeof defaultValue) {\n case \"boolean\": return \"boolean\";\n case \"number\": return \"number\";\n case \"string\": return \"string\";\n }\n if (Array.isArray(defaultValue))\n return \"array\";\n if (Object.prototype.toString.call(defaultValue) === \"[object Object]\")\n return \"object\";\n}\nfunction parseValueTypeObject(payload) {\n const typeFromObject = parseValueTypeConstant(payload.typeObject.type);\n if (!typeFromObject)\n return;\n const defaultValueType = parseValueTypeDefault(payload.typeObject.default);\n if (typeFromObject !== defaultValueType) {\n const propertyPath = payload.controller ? `${payload.controller}.${payload.token}` : payload.token;\n throw new Error(`The specified default value for the Stimulus Value \"${propertyPath}\" must match the defined type \"${typeFromObject}\". The provided default value of \"${payload.typeObject.default}\" is of type \"${defaultValueType}\".`);\n }\n return typeFromObject;\n}\nfunction parseValueTypeDefinition(payload) {\n const typeFromObject = parseValueTypeObject({\n controller: payload.controller,\n token: payload.token,\n typeObject: payload.typeDefinition\n });\n const typeFromDefaultValue = parseValueTypeDefault(payload.typeDefinition);\n const typeFromConstant = parseValueTypeConstant(payload.typeDefinition);\n const type = typeFromObject || typeFromDefaultValue || typeFromConstant;\n if (type)\n return type;\n const propertyPath = payload.controller ? `${payload.controller}.${payload.typeDefinition}` : payload.token;\n throw new Error(`Unknown value type \"${propertyPath}\" for \"${payload.token}\" value`);\n}\nfunction defaultValueForDefinition(typeDefinition) {\n const constant = parseValueTypeConstant(typeDefinition);\n if (constant)\n return defaultValuesByType[constant];\n const defaultValue = typeDefinition.default;\n if (defaultValue !== undefined)\n return defaultValue;\n return typeDefinition;\n}\nfunction valueDescriptorForTokenAndTypeDefinition(payload) {\n const key = `${dasherize(payload.token)}-value`;\n const type = parseValueTypeDefinition(payload);\n return {\n type,\n key,\n name: camelize(key),\n get defaultValue() { return defaultValueForDefinition(payload.typeDefinition); },\n get hasCustomDefaultValue() { return parseValueTypeDefault(payload.typeDefinition) !== undefined; },\n reader: readers[type],\n writer: writers[type] || writers.default\n };\n}\nconst defaultValuesByType = {\n get array() { return []; },\n boolean: false,\n number: 0,\n get object() { return {}; },\n string: \"\"\n};\nconst readers = {\n array(value) {\n const array = JSON.parse(value);\n if (!Array.isArray(array)) {\n throw new TypeError(`expected value of type \"array\" but instead got value \"${value}\" of type \"${parseValueTypeDefault(array)}\"`);\n }\n return array;\n },\n boolean(value) {\n return !(value == \"0\" || String(value).toLowerCase() == \"false\");\n },\n number(value) {\n return Number(value);\n },\n object(value) {\n const object = JSON.parse(value);\n if (object === null || typeof object != \"object\" || Array.isArray(object)) {\n throw new TypeError(`expected value of type \"object\" but instead got value \"${value}\" of type \"${parseValueTypeDefault(object)}\"`);\n }\n return object;\n },\n string(value) {\n return value;\n }\n};\nconst writers = {\n default: writeString,\n array: writeJSON,\n object: writeJSON\n};\nfunction writeJSON(value) {\n return JSON.stringify(value);\n}\nfunction writeString(value) {\n return `${value}`;\n}\n\nclass Controller {\n constructor(context) {\n this.context = context;\n }\n static get shouldLoad() {\n return true;\n }\n get application() {\n return this.context.application;\n }\n get scope() {\n return this.context.scope;\n }\n get element() {\n return this.scope.element;\n }\n get identifier() {\n return this.scope.identifier;\n }\n get targets() {\n return this.scope.targets;\n }\n get classes() {\n return this.scope.classes;\n }\n get data() {\n return this.scope.data;\n }\n initialize() {\n }\n connect() {\n }\n disconnect() {\n }\n dispatch(eventName, { target = this.element, detail = {}, prefix = this.identifier, bubbles = true, cancelable = true } = {}) {\n const type = prefix ? `${prefix}:${eventName}` : eventName;\n const event = new CustomEvent(type, { detail, bubbles, cancelable });\n target.dispatchEvent(event);\n return event;\n }\n}\nController.blessings = [ClassPropertiesBlessing, TargetPropertiesBlessing, ValuePropertiesBlessing];\nController.targets = [];\nController.values = {};\n\nexport { Application, AttributeObserver, Context, Controller, ElementObserver, IndexedMultimap, Multimap, StringMapObserver, TokenListObserver, ValueListObserver, add, defaultSchema, del, fetch, prune };\n","import Controller from './controller'\n\nexport default class extends Controller {\n initialize() {}\n\n toggle() {\n this.element.classList.toggle('is-open')\n }\n}\n","/**\n * Removes all key-value entries from the list cache.\n *\n * @private\n * @name clear\n * @memberOf ListCache\n */\nfunction listCacheClear() {\n this.__data__ = [];\n this.size = 0;\n}\n\nexport default listCacheClear;\n","/**\n * Performs a\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * comparison between two values to determine if they are equivalent.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * var object = { 'a': 1 };\n * var other = { 'a': 1 };\n *\n * _.eq(object, object);\n * // => true\n *\n * _.eq(object, other);\n * // => false\n *\n * _.eq('a', 'a');\n * // => true\n *\n * _.eq('a', Object('a'));\n * // => false\n *\n * _.eq(NaN, NaN);\n * // => true\n */\nfunction eq(value, other) {\n return value === other || (value !== value && other !== other);\n}\n\nexport default eq;\n","import eq from './eq.js';\n\n/**\n * Gets the index at which the `key` is found in `array` of key-value pairs.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} key The key to search for.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\nfunction assocIndexOf(array, key) {\n var length = array.length;\n while (length--) {\n if (eq(array[length][0], key)) {\n return length;\n }\n }\n return -1;\n}\n\nexport default assocIndexOf;\n","import assocIndexOf from './_assocIndexOf.js';\n\n/** Used for built-in method references. */\nvar arrayProto = Array.prototype;\n\n/** Built-in value references. */\nvar splice = arrayProto.splice;\n\n/**\n * Removes `key` and its value from the list cache.\n *\n * @private\n * @name delete\n * @memberOf ListCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction listCacheDelete(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n return false;\n }\n var lastIndex = data.length - 1;\n if (index == lastIndex) {\n data.pop();\n } else {\n splice.call(data, index, 1);\n }\n --this.size;\n return true;\n}\n\nexport default listCacheDelete;\n","import assocIndexOf from './_assocIndexOf.js';\n\n/**\n * Gets the list cache value for `key`.\n *\n * @private\n * @name get\n * @memberOf ListCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction listCacheGet(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n return index < 0 ? undefined : data[index][1];\n}\n\nexport default listCacheGet;\n","import assocIndexOf from './_assocIndexOf.js';\n\n/**\n * Checks if a list cache value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf ListCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction listCacheHas(key) {\n return assocIndexOf(this.__data__, key) > -1;\n}\n\nexport default listCacheHas;\n","import assocIndexOf from './_assocIndexOf.js';\n\n/**\n * Sets the list cache `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf ListCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the list cache instance.\n */\nfunction listCacheSet(key, value) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n ++this.size;\n data.push([key, value]);\n } else {\n data[index][1] = value;\n }\n return this;\n}\n\nexport default listCacheSet;\n","import listCacheClear from './_listCacheClear.js';\nimport listCacheDelete from './_listCacheDelete.js';\nimport listCacheGet from './_listCacheGet.js';\nimport listCacheHas from './_listCacheHas.js';\nimport listCacheSet from './_listCacheSet.js';\n\n/**\n * Creates an list cache object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction ListCache(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n// Add methods to `ListCache`.\nListCache.prototype.clear = listCacheClear;\nListCache.prototype['delete'] = listCacheDelete;\nListCache.prototype.get = listCacheGet;\nListCache.prototype.has = listCacheHas;\nListCache.prototype.set = listCacheSet;\n\nexport default ListCache;\n","import ListCache from './_ListCache.js';\n\n/**\n * Removes all key-value entries from the stack.\n *\n * @private\n * @name clear\n * @memberOf Stack\n */\nfunction stackClear() {\n this.__data__ = new ListCache;\n this.size = 0;\n}\n\nexport default stackClear;\n","/**\n * Removes `key` and its value from the stack.\n *\n * @private\n * @name delete\n * @memberOf Stack\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction stackDelete(key) {\n var data = this.__data__,\n result = data['delete'](key);\n\n this.size = data.size;\n return result;\n}\n\nexport default stackDelete;\n","/**\n * Gets the stack value for `key`.\n *\n * @private\n * @name get\n * @memberOf Stack\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction stackGet(key) {\n return this.__data__.get(key);\n}\n\nexport default stackGet;\n","/**\n * Checks if a stack value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Stack\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction stackHas(key) {\n return this.__data__.has(key);\n}\n\nexport default stackHas;\n","/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\nexport default freeGlobal;\n","import freeGlobal from './_freeGlobal.js';\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\nexport default root;\n","import root from './_root.js';\n\n/** Built-in value references. */\nvar Symbol = root.Symbol;\n\nexport default Symbol;\n","import Symbol from './_Symbol.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the raw `toStringTag`.\n */\nfunction getRawTag(value) {\n var isOwn = hasOwnProperty.call(value, symToStringTag),\n tag = value[symToStringTag];\n\n try {\n value[symToStringTag] = undefined;\n var unmasked = true;\n } catch (e) {}\n\n var result = nativeObjectToString.call(value);\n if (unmasked) {\n if (isOwn) {\n value[symToStringTag] = tag;\n } else {\n delete value[symToStringTag];\n }\n }\n return result;\n}\n\nexport default getRawTag;\n","/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/**\n * Converts `value` to a string using `Object.prototype.toString`.\n *\n * @private\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n */\nfunction objectToString(value) {\n return nativeObjectToString.call(value);\n}\n\nexport default objectToString;\n","import Symbol from './_Symbol.js';\nimport getRawTag from './_getRawTag.js';\nimport objectToString from './_objectToString.js';\n\n/** `Object#toString` result references. */\nvar nullTag = '[object Null]',\n undefinedTag = '[object Undefined]';\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * The base implementation of `getTag` without fallbacks for buggy environments.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nfunction baseGetTag(value) {\n if (value == null) {\n return value === undefined ? undefinedTag : nullTag;\n }\n return (symToStringTag && symToStringTag in Object(value))\n ? getRawTag(value)\n : objectToString(value);\n}\n\nexport default baseGetTag;\n","/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n var type = typeof value;\n return value != null && (type == 'object' || type == 'function');\n}\n\nexport default isObject;\n","import baseGetTag from './_baseGetTag.js';\nimport isObject from './isObject.js';\n\n/** `Object#toString` result references. */\nvar asyncTag = '[object AsyncFunction]',\n funcTag = '[object Function]',\n genTag = '[object GeneratorFunction]',\n proxyTag = '[object Proxy]';\n\n/**\n * Checks if `value` is classified as a `Function` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a function, else `false`.\n * @example\n *\n * _.isFunction(_);\n * // => true\n *\n * _.isFunction(/abc/);\n * // => false\n */\nfunction isFunction(value) {\n if (!isObject(value)) {\n return false;\n }\n // The use of `Object#toString` avoids issues with the `typeof` operator\n // in Safari 9 which returns 'object' for typed arrays and other constructors.\n var tag = baseGetTag(value);\n return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag;\n}\n\nexport default isFunction;\n","import coreJsData from './_coreJsData.js';\n\n/** Used to detect methods masquerading as native. */\nvar maskSrcKey = (function() {\n var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || '');\n return uid ? ('Symbol(src)_1.' + uid) : '';\n}());\n\n/**\n * Checks if `func` has its source masked.\n *\n * @private\n * @param {Function} func The function to check.\n * @returns {boolean} Returns `true` if `func` is masked, else `false`.\n */\nfunction isMasked(func) {\n return !!maskSrcKey && (maskSrcKey in func);\n}\n\nexport default isMasked;\n","import root from './_root.js';\n\n/** Used to detect overreaching core-js shims. */\nvar coreJsData = root['__core-js_shared__'];\n\nexport default coreJsData;\n","/** Used for built-in method references. */\nvar funcProto = Function.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/**\n * Converts `func` to its source code.\n *\n * @private\n * @param {Function} func The function to convert.\n * @returns {string} Returns the source code.\n */\nfunction toSource(func) {\n if (func != null) {\n try {\n return funcToString.call(func);\n } catch (e) {}\n try {\n return (func + '');\n } catch (e) {}\n }\n return '';\n}\n\nexport default toSource;\n","import isFunction from './isFunction.js';\nimport isMasked from './_isMasked.js';\nimport isObject from './isObject.js';\nimport toSource from './_toSource.js';\n\n/**\n * Used to match `RegExp`\n * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns).\n */\nvar reRegExpChar = /[\\\\^$.*+?()[\\]{}|]/g;\n\n/** Used to detect host constructors (Safari). */\nvar reIsHostCtor = /^\\[object .+?Constructor\\]$/;\n\n/** Used for built-in method references. */\nvar funcProto = Function.prototype,\n objectProto = Object.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Used to detect if a method is native. */\nvar reIsNative = RegExp('^' +\n funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\\\$&')\n .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?') + '$'\n);\n\n/**\n * The base implementation of `_.isNative` without bad shim checks.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a native function,\n * else `false`.\n */\nfunction baseIsNative(value) {\n if (!isObject(value) || isMasked(value)) {\n return false;\n }\n var pattern = isFunction(value) ? reIsNative : reIsHostCtor;\n return pattern.test(toSource(value));\n}\n\nexport default baseIsNative;\n","/**\n * Gets the value at `key` of `object`.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {string} key The key of the property to get.\n * @returns {*} Returns the property value.\n */\nfunction getValue(object, key) {\n return object == null ? undefined : object[key];\n}\n\nexport default getValue;\n","import baseIsNative from './_baseIsNative.js';\nimport getValue from './_getValue.js';\n\n/**\n * Gets the native function at `key` of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the method to get.\n * @returns {*} Returns the function if it's native, else `undefined`.\n */\nfunction getNative(object, key) {\n var value = getValue(object, key);\n return baseIsNative(value) ? value : undefined;\n}\n\nexport default getNative;\n","import getNative from './_getNative.js';\nimport root from './_root.js';\n\n/* Built-in method references that are verified to be native. */\nvar Map = getNative(root, 'Map');\n\nexport default Map;\n","import getNative from './_getNative.js';\n\n/* Built-in method references that are verified to be native. */\nvar nativeCreate = getNative(Object, 'create');\n\nexport default nativeCreate;\n","import nativeCreate from './_nativeCreate.js';\n\n/**\n * Removes all key-value entries from the hash.\n *\n * @private\n * @name clear\n * @memberOf Hash\n */\nfunction hashClear() {\n this.__data__ = nativeCreate ? nativeCreate(null) : {};\n this.size = 0;\n}\n\nexport default hashClear;\n","/**\n * Removes `key` and its value from the hash.\n *\n * @private\n * @name delete\n * @memberOf Hash\n * @param {Object} hash The hash to modify.\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction hashDelete(key) {\n var result = this.has(key) && delete this.__data__[key];\n this.size -= result ? 1 : 0;\n return result;\n}\n\nexport default hashDelete;\n","import nativeCreate from './_nativeCreate.js';\n\n/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Gets the hash value for `key`.\n *\n * @private\n * @name get\n * @memberOf Hash\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction hashGet(key) {\n var data = this.__data__;\n if (nativeCreate) {\n var result = data[key];\n return result === HASH_UNDEFINED ? undefined : result;\n }\n return hasOwnProperty.call(data, key) ? data[key] : undefined;\n}\n\nexport default hashGet;\n","import nativeCreate from './_nativeCreate.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Checks if a hash value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Hash\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction hashHas(key) {\n var data = this.__data__;\n return nativeCreate ? (data[key] !== undefined) : hasOwnProperty.call(data, key);\n}\n\nexport default hashHas;\n","import nativeCreate from './_nativeCreate.js';\n\n/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/**\n * Sets the hash `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Hash\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the hash instance.\n */\nfunction hashSet(key, value) {\n var data = this.__data__;\n this.size += this.has(key) ? 0 : 1;\n data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value;\n return this;\n}\n\nexport default hashSet;\n","import hashClear from './_hashClear.js';\nimport hashDelete from './_hashDelete.js';\nimport hashGet from './_hashGet.js';\nimport hashHas from './_hashHas.js';\nimport hashSet from './_hashSet.js';\n\n/**\n * Creates a hash object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction Hash(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n// Add methods to `Hash`.\nHash.prototype.clear = hashClear;\nHash.prototype['delete'] = hashDelete;\nHash.prototype.get = hashGet;\nHash.prototype.has = hashHas;\nHash.prototype.set = hashSet;\n\nexport default Hash;\n","import Hash from './_Hash.js';\nimport ListCache from './_ListCache.js';\nimport Map from './_Map.js';\n\n/**\n * Removes all key-value entries from the map.\n *\n * @private\n * @name clear\n * @memberOf MapCache\n */\nfunction mapCacheClear() {\n this.size = 0;\n this.__data__ = {\n 'hash': new Hash,\n 'map': new (Map || ListCache),\n 'string': new Hash\n };\n}\n\nexport default mapCacheClear;\n","/**\n * Checks if `value` is suitable for use as unique object key.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is suitable, else `false`.\n */\nfunction isKeyable(value) {\n var type = typeof value;\n return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean')\n ? (value !== '__proto__')\n : (value === null);\n}\n\nexport default isKeyable;\n","import isKeyable from './_isKeyable.js';\n\n/**\n * Gets the data for `map`.\n *\n * @private\n * @param {Object} map The map to query.\n * @param {string} key The reference key.\n * @returns {*} Returns the map data.\n */\nfunction getMapData(map, key) {\n var data = map.__data__;\n return isKeyable(key)\n ? data[typeof key == 'string' ? 'string' : 'hash']\n : data.map;\n}\n\nexport default getMapData;\n","import getMapData from './_getMapData.js';\n\n/**\n * Removes `key` and its value from the map.\n *\n * @private\n * @name delete\n * @memberOf MapCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction mapCacheDelete(key) {\n var result = getMapData(this, key)['delete'](key);\n this.size -= result ? 1 : 0;\n return result;\n}\n\nexport default mapCacheDelete;\n","import getMapData from './_getMapData.js';\n\n/**\n * Gets the map value for `key`.\n *\n * @private\n * @name get\n * @memberOf MapCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction mapCacheGet(key) {\n return getMapData(this, key).get(key);\n}\n\nexport default mapCacheGet;\n","import getMapData from './_getMapData.js';\n\n/**\n * Checks if a map value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf MapCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction mapCacheHas(key) {\n return getMapData(this, key).has(key);\n}\n\nexport default mapCacheHas;\n","import getMapData from './_getMapData.js';\n\n/**\n * Sets the map `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf MapCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the map cache instance.\n */\nfunction mapCacheSet(key, value) {\n var data = getMapData(this, key),\n size = data.size;\n\n data.set(key, value);\n this.size += data.size == size ? 0 : 1;\n return this;\n}\n\nexport default mapCacheSet;\n","import mapCacheClear from './_mapCacheClear.js';\nimport mapCacheDelete from './_mapCacheDelete.js';\nimport mapCacheGet from './_mapCacheGet.js';\nimport mapCacheHas from './_mapCacheHas.js';\nimport mapCacheSet from './_mapCacheSet.js';\n\n/**\n * Creates a map cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction MapCache(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n// Add methods to `MapCache`.\nMapCache.prototype.clear = mapCacheClear;\nMapCache.prototype['delete'] = mapCacheDelete;\nMapCache.prototype.get = mapCacheGet;\nMapCache.prototype.has = mapCacheHas;\nMapCache.prototype.set = mapCacheSet;\n\nexport default MapCache;\n","import ListCache from './_ListCache.js';\nimport Map from './_Map.js';\nimport MapCache from './_MapCache.js';\n\n/** Used as the size to enable large array optimizations. */\nvar LARGE_ARRAY_SIZE = 200;\n\n/**\n * Sets the stack `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Stack\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the stack cache instance.\n */\nfunction stackSet(key, value) {\n var data = this.__data__;\n if (data instanceof ListCache) {\n var pairs = data.__data__;\n if (!Map || (pairs.length < LARGE_ARRAY_SIZE - 1)) {\n pairs.push([key, value]);\n this.size = ++data.size;\n return this;\n }\n data = this.__data__ = new MapCache(pairs);\n }\n data.set(key, value);\n this.size = data.size;\n return this;\n}\n\nexport default stackSet;\n","import ListCache from './_ListCache.js';\nimport stackClear from './_stackClear.js';\nimport stackDelete from './_stackDelete.js';\nimport stackGet from './_stackGet.js';\nimport stackHas from './_stackHas.js';\nimport stackSet from './_stackSet.js';\n\n/**\n * Creates a stack cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction Stack(entries) {\n var data = this.__data__ = new ListCache(entries);\n this.size = data.size;\n}\n\n// Add methods to `Stack`.\nStack.prototype.clear = stackClear;\nStack.prototype['delete'] = stackDelete;\nStack.prototype.get = stackGet;\nStack.prototype.has = stackHas;\nStack.prototype.set = stackSet;\n\nexport default Stack;\n","import getNative from './_getNative.js';\n\nvar defineProperty = (function() {\n try {\n var func = getNative(Object, 'defineProperty');\n func({}, '', {});\n return func;\n } catch (e) {}\n}());\n\nexport default defineProperty;\n","import defineProperty from './_defineProperty.js';\n\n/**\n * The base implementation of `assignValue` and `assignMergeValue` without\n * value checks.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\nfunction baseAssignValue(object, key, value) {\n if (key == '__proto__' && defineProperty) {\n defineProperty(object, key, {\n 'configurable': true,\n 'enumerable': true,\n 'value': value,\n 'writable': true\n });\n } else {\n object[key] = value;\n }\n}\n\nexport default baseAssignValue;\n","import baseAssignValue from './_baseAssignValue.js';\nimport eq from './eq.js';\n\n/**\n * This function is like `assignValue` except that it doesn't assign\n * `undefined` values.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\nfunction assignMergeValue(object, key, value) {\n if ((value !== undefined && !eq(object[key], value)) ||\n (value === undefined && !(key in object))) {\n baseAssignValue(object, key, value);\n }\n}\n\nexport default assignMergeValue;\n","/**\n * Creates a base function for methods like `_.forIn` and `_.forOwn`.\n *\n * @private\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Function} Returns the new base function.\n */\nfunction createBaseFor(fromRight) {\n return function(object, iteratee, keysFunc) {\n var index = -1,\n iterable = Object(object),\n props = keysFunc(object),\n length = props.length;\n\n while (length--) {\n var key = props[fromRight ? length : ++index];\n if (iteratee(iterable[key], key, iterable) === false) {\n break;\n }\n }\n return object;\n };\n}\n\nexport default createBaseFor;\n","import createBaseFor from './_createBaseFor.js';\n\n/**\n * The base implementation of `baseForOwn` which iterates over `object`\n * properties returned by `keysFunc` and invokes `iteratee` for each property.\n * Iteratee functions may exit iteration early by explicitly returning `false`.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {Function} keysFunc The function to get the keys of `object`.\n * @returns {Object} Returns `object`.\n */\nvar baseFor = createBaseFor();\n\nexport default baseFor;\n","import root from './_root.js';\n\n/** Detect free variable `exports`. */\nvar freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n/** Detect free variable `module`. */\nvar freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n/** Detect the popular CommonJS extension `module.exports`. */\nvar moduleExports = freeModule && freeModule.exports === freeExports;\n\n/** Built-in value references. */\nvar Buffer = moduleExports ? root.Buffer : undefined,\n allocUnsafe = Buffer ? Buffer.allocUnsafe : undefined;\n\n/**\n * Creates a clone of `buffer`.\n *\n * @private\n * @param {Buffer} buffer The buffer to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Buffer} Returns the cloned buffer.\n */\nfunction cloneBuffer(buffer, isDeep) {\n if (isDeep) {\n return buffer.slice();\n }\n var length = buffer.length,\n result = allocUnsafe ? allocUnsafe(length) : new buffer.constructor(length);\n\n buffer.copy(result);\n return result;\n}\n\nexport default cloneBuffer;\n","import root from './_root.js';\n\n/** Built-in value references. */\nvar Uint8Array = root.Uint8Array;\n\nexport default Uint8Array;\n","import Uint8Array from './_Uint8Array.js';\n\n/**\n * Creates a clone of `arrayBuffer`.\n *\n * @private\n * @param {ArrayBuffer} arrayBuffer The array buffer to clone.\n * @returns {ArrayBuffer} Returns the cloned array buffer.\n */\nfunction cloneArrayBuffer(arrayBuffer) {\n var result = new arrayBuffer.constructor(arrayBuffer.byteLength);\n new Uint8Array(result).set(new Uint8Array(arrayBuffer));\n return result;\n}\n\nexport default cloneArrayBuffer;\n","import cloneArrayBuffer from './_cloneArrayBuffer.js';\n\n/**\n * Creates a clone of `typedArray`.\n *\n * @private\n * @param {Object} typedArray The typed array to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the cloned typed array.\n */\nfunction cloneTypedArray(typedArray, isDeep) {\n var buffer = isDeep ? cloneArrayBuffer(typedArray.buffer) : typedArray.buffer;\n return new typedArray.constructor(buffer, typedArray.byteOffset, typedArray.length);\n}\n\nexport default cloneTypedArray;\n","/**\n * Copies the values of `source` to `array`.\n *\n * @private\n * @param {Array} source The array to copy values from.\n * @param {Array} [array=[]] The array to copy values to.\n * @returns {Array} Returns `array`.\n */\nfunction copyArray(source, array) {\n var index = -1,\n length = source.length;\n\n array || (array = Array(length));\n while (++index < length) {\n array[index] = source[index];\n }\n return array;\n}\n\nexport default copyArray;\n","import isObject from './isObject.js';\n\n/** Built-in value references. */\nvar objectCreate = Object.create;\n\n/**\n * The base implementation of `_.create` without support for assigning\n * properties to the created object.\n *\n * @private\n * @param {Object} proto The object to inherit from.\n * @returns {Object} Returns the new object.\n */\nvar baseCreate = (function() {\n function object() {}\n return function(proto) {\n if (!isObject(proto)) {\n return {};\n }\n if (objectCreate) {\n return objectCreate(proto);\n }\n object.prototype = proto;\n var result = new object;\n object.prototype = undefined;\n return result;\n };\n}());\n\nexport default baseCreate;\n","/**\n * Creates a unary function that invokes `func` with its argument transformed.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {Function} transform The argument transform.\n * @returns {Function} Returns the new function.\n */\nfunction overArg(func, transform) {\n return function(arg) {\n return func(transform(arg));\n };\n}\n\nexport default overArg;\n","import overArg from './_overArg.js';\n\n/** Built-in value references. */\nvar getPrototype = overArg(Object.getPrototypeOf, Object);\n\nexport default getPrototype;\n","/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Checks if `value` is likely a prototype object.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a prototype, else `false`.\n */\nfunction isPrototype(value) {\n var Ctor = value && value.constructor,\n proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto;\n\n return value === proto;\n}\n\nexport default isPrototype;\n","import baseCreate from './_baseCreate.js';\nimport getPrototype from './_getPrototype.js';\nimport isPrototype from './_isPrototype.js';\n\n/**\n * Initializes an object clone.\n *\n * @private\n * @param {Object} object The object to clone.\n * @returns {Object} Returns the initialized clone.\n */\nfunction initCloneObject(object) {\n return (typeof object.constructor == 'function' && !isPrototype(object))\n ? baseCreate(getPrototype(object))\n : {};\n}\n\nexport default initCloneObject;\n","/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n return value != null && typeof value == 'object';\n}\n\nexport default isObjectLike;\n","import baseGetTag from './_baseGetTag.js';\nimport isObjectLike from './isObjectLike.js';\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]';\n\n/**\n * The base implementation of `_.isArguments`.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n */\nfunction baseIsArguments(value) {\n return isObjectLike(value) && baseGetTag(value) == argsTag;\n}\n\nexport default baseIsArguments;\n","import baseIsArguments from './_baseIsArguments.js';\nimport isObjectLike from './isObjectLike.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Built-in value references. */\nvar propertyIsEnumerable = objectProto.propertyIsEnumerable;\n\n/**\n * Checks if `value` is likely an `arguments` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n * else `false`.\n * @example\n *\n * _.isArguments(function() { return arguments; }());\n * // => true\n *\n * _.isArguments([1, 2, 3]);\n * // => false\n */\nvar isArguments = baseIsArguments(function() { return arguments; }()) ? baseIsArguments : function(value) {\n return isObjectLike(value) && hasOwnProperty.call(value, 'callee') &&\n !propertyIsEnumerable.call(value, 'callee');\n};\n\nexport default isArguments;\n","/**\n * Checks if `value` is classified as an `Array` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array, else `false`.\n * @example\n *\n * _.isArray([1, 2, 3]);\n * // => true\n *\n * _.isArray(document.body.children);\n * // => false\n *\n * _.isArray('abc');\n * // => false\n *\n * _.isArray(_.noop);\n * // => false\n */\nvar isArray = Array.isArray;\n\nexport default isArray;\n","/** Used as references for various `Number` constants. */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/**\n * Checks if `value` is a valid array-like length.\n *\n * **Note:** This method is loosely based on\n * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.\n * @example\n *\n * _.isLength(3);\n * // => true\n *\n * _.isLength(Number.MIN_VALUE);\n * // => false\n *\n * _.isLength(Infinity);\n * // => false\n *\n * _.isLength('3');\n * // => false\n */\nfunction isLength(value) {\n return typeof value == 'number' &&\n value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n}\n\nexport default isLength;\n","import isFunction from './isFunction.js';\nimport isLength from './isLength.js';\n\n/**\n * Checks if `value` is array-like. A value is considered array-like if it's\n * not a function and has a `value.length` that's an integer greater than or\n * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is array-like, else `false`.\n * @example\n *\n * _.isArrayLike([1, 2, 3]);\n * // => true\n *\n * _.isArrayLike(document.body.children);\n * // => true\n *\n * _.isArrayLike('abc');\n * // => true\n *\n * _.isArrayLike(_.noop);\n * // => false\n */\nfunction isArrayLike(value) {\n return value != null && isLength(value.length) && !isFunction(value);\n}\n\nexport default isArrayLike;\n","import isArrayLike from './isArrayLike.js';\nimport isObjectLike from './isObjectLike.js';\n\n/**\n * This method is like `_.isArrayLike` except that it also checks if `value`\n * is an object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array-like object,\n * else `false`.\n * @example\n *\n * _.isArrayLikeObject([1, 2, 3]);\n * // => true\n *\n * _.isArrayLikeObject(document.body.children);\n * // => true\n *\n * _.isArrayLikeObject('abc');\n * // => false\n *\n * _.isArrayLikeObject(_.noop);\n * // => false\n */\nfunction isArrayLikeObject(value) {\n return isObjectLike(value) && isArrayLike(value);\n}\n\nexport default isArrayLikeObject;\n","/**\n * This method returns `false`.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {boolean} Returns `false`.\n * @example\n *\n * _.times(2, _.stubFalse);\n * // => [false, false]\n */\nfunction stubFalse() {\n return false;\n}\n\nexport default stubFalse;\n","import root from './_root.js';\nimport stubFalse from './stubFalse.js';\n\n/** Detect free variable `exports`. */\nvar freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n/** Detect free variable `module`. */\nvar freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n/** Detect the popular CommonJS extension `module.exports`. */\nvar moduleExports = freeModule && freeModule.exports === freeExports;\n\n/** Built-in value references. */\nvar Buffer = moduleExports ? root.Buffer : undefined;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined;\n\n/**\n * Checks if `value` is a buffer.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a buffer, else `false`.\n * @example\n *\n * _.isBuffer(new Buffer(2));\n * // => true\n *\n * _.isBuffer(new Uint8Array(2));\n * // => false\n */\nvar isBuffer = nativeIsBuffer || stubFalse;\n\nexport default isBuffer;\n","import baseGetTag from './_baseGetTag.js';\nimport getPrototype from './_getPrototype.js';\nimport isObjectLike from './isObjectLike.js';\n\n/** `Object#toString` result references. */\nvar objectTag = '[object Object]';\n\n/** Used for built-in method references. */\nvar funcProto = Function.prototype,\n objectProto = Object.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Used to infer the `Object` constructor. */\nvar objectCtorString = funcToString.call(Object);\n\n/**\n * Checks if `value` is a plain object, that is, an object created by the\n * `Object` constructor or one with a `[[Prototype]]` of `null`.\n *\n * @static\n * @memberOf _\n * @since 0.8.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a plain object, else `false`.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * }\n *\n * _.isPlainObject(new Foo);\n * // => false\n *\n * _.isPlainObject([1, 2, 3]);\n * // => false\n *\n * _.isPlainObject({ 'x': 0, 'y': 0 });\n * // => true\n *\n * _.isPlainObject(Object.create(null));\n * // => true\n */\nfunction isPlainObject(value) {\n if (!isObjectLike(value) || baseGetTag(value) != objectTag) {\n return false;\n }\n var proto = getPrototype(value);\n if (proto === null) {\n return true;\n }\n var Ctor = hasOwnProperty.call(proto, 'constructor') && proto.constructor;\n return typeof Ctor == 'function' && Ctor instanceof Ctor &&\n funcToString.call(Ctor) == objectCtorString;\n}\n\nexport default isPlainObject;\n","import baseGetTag from './_baseGetTag.js';\nimport isLength from './isLength.js';\nimport isObjectLike from './isObjectLike.js';\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]',\n arrayTag = '[object Array]',\n boolTag = '[object Boolean]',\n dateTag = '[object Date]',\n errorTag = '[object Error]',\n funcTag = '[object Function]',\n mapTag = '[object Map]',\n numberTag = '[object Number]',\n objectTag = '[object Object]',\n regexpTag = '[object RegExp]',\n setTag = '[object Set]',\n stringTag = '[object String]',\n weakMapTag = '[object WeakMap]';\n\nvar arrayBufferTag = '[object ArrayBuffer]',\n dataViewTag = '[object DataView]',\n float32Tag = '[object Float32Array]',\n float64Tag = '[object Float64Array]',\n int8Tag = '[object Int8Array]',\n int16Tag = '[object Int16Array]',\n int32Tag = '[object Int32Array]',\n uint8Tag = '[object Uint8Array]',\n uint8ClampedTag = '[object Uint8ClampedArray]',\n uint16Tag = '[object Uint16Array]',\n uint32Tag = '[object Uint32Array]';\n\n/** Used to identify `toStringTag` values of typed arrays. */\nvar typedArrayTags = {};\ntypedArrayTags[float32Tag] = typedArrayTags[float64Tag] =\ntypedArrayTags[int8Tag] = typedArrayTags[int16Tag] =\ntypedArrayTags[int32Tag] = typedArrayTags[uint8Tag] =\ntypedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] =\ntypedArrayTags[uint32Tag] = true;\ntypedArrayTags[argsTag] = typedArrayTags[arrayTag] =\ntypedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] =\ntypedArrayTags[dataViewTag] = typedArrayTags[dateTag] =\ntypedArrayTags[errorTag] = typedArrayTags[funcTag] =\ntypedArrayTags[mapTag] = typedArrayTags[numberTag] =\ntypedArrayTags[objectTag] = typedArrayTags[regexpTag] =\ntypedArrayTags[setTag] = typedArrayTags[stringTag] =\ntypedArrayTags[weakMapTag] = false;\n\n/**\n * The base implementation of `_.isTypedArray` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n */\nfunction baseIsTypedArray(value) {\n return isObjectLike(value) &&\n isLength(value.length) && !!typedArrayTags[baseGetTag(value)];\n}\n\nexport default baseIsTypedArray;\n","/**\n * The base implementation of `_.unary` without support for storing metadata.\n *\n * @private\n * @param {Function} func The function to cap arguments for.\n * @returns {Function} Returns the new capped function.\n */\nfunction baseUnary(func) {\n return function(value) {\n return func(value);\n };\n}\n\nexport default baseUnary;\n","import freeGlobal from './_freeGlobal.js';\n\n/** Detect free variable `exports`. */\nvar freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n/** Detect free variable `module`. */\nvar freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n/** Detect the popular CommonJS extension `module.exports`. */\nvar moduleExports = freeModule && freeModule.exports === freeExports;\n\n/** Detect free variable `process` from Node.js. */\nvar freeProcess = moduleExports && freeGlobal.process;\n\n/** Used to access faster Node.js helpers. */\nvar nodeUtil = (function() {\n try {\n // Use `util.types` for Node.js 10+.\n var types = freeModule && freeModule.require && freeModule.require('util').types;\n\n if (types) {\n return types;\n }\n\n // Legacy `process.binding('util')` for Node.js < 10.\n return freeProcess && freeProcess.binding && freeProcess.binding('util');\n } catch (e) {}\n}());\n\nexport default nodeUtil;\n","import baseIsTypedArray from './_baseIsTypedArray.js';\nimport baseUnary from './_baseUnary.js';\nimport nodeUtil from './_nodeUtil.js';\n\n/* Node.js helper references. */\nvar nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray;\n\n/**\n * Checks if `value` is classified as a typed array.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n * @example\n *\n * _.isTypedArray(new Uint8Array);\n * // => true\n *\n * _.isTypedArray([]);\n * // => false\n */\nvar isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray;\n\nexport default isTypedArray;\n","/**\n * Gets the value at `key`, unless `key` is \"__proto__\" or \"constructor\".\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the property to get.\n * @returns {*} Returns the property value.\n */\nfunction safeGet(object, key) {\n if (key === 'constructor' && typeof object[key] === 'function') {\n return;\n }\n\n if (key == '__proto__') {\n return;\n }\n\n return object[key];\n}\n\nexport default safeGet;\n","import baseAssignValue from './_baseAssignValue.js';\nimport eq from './eq.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Assigns `value` to `key` of `object` if the existing value is not equivalent\n * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\nfunction assignValue(object, key, value) {\n var objValue = object[key];\n if (!(hasOwnProperty.call(object, key) && eq(objValue, value)) ||\n (value === undefined && !(key in object))) {\n baseAssignValue(object, key, value);\n }\n}\n\nexport default assignValue;\n","import assignValue from './_assignValue.js';\nimport baseAssignValue from './_baseAssignValue.js';\n\n/**\n * Copies properties of `source` to `object`.\n *\n * @private\n * @param {Object} source The object to copy properties from.\n * @param {Array} props The property identifiers to copy.\n * @param {Object} [object={}] The object to copy properties to.\n * @param {Function} [customizer] The function to customize copied values.\n * @returns {Object} Returns `object`.\n */\nfunction copyObject(source, props, object, customizer) {\n var isNew = !object;\n object || (object = {});\n\n var index = -1,\n length = props.length;\n\n while (++index < length) {\n var key = props[index];\n\n var newValue = customizer\n ? customizer(object[key], source[key], key, object, source)\n : undefined;\n\n if (newValue === undefined) {\n newValue = source[key];\n }\n if (isNew) {\n baseAssignValue(object, key, newValue);\n } else {\n assignValue(object, key, newValue);\n }\n }\n return object;\n}\n\nexport default copyObject;\n","/**\n * The base implementation of `_.times` without support for iteratee shorthands\n * or max array length checks.\n *\n * @private\n * @param {number} n The number of times to invoke `iteratee`.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the array of results.\n */\nfunction baseTimes(n, iteratee) {\n var index = -1,\n result = Array(n);\n\n while (++index < n) {\n result[index] = iteratee(index);\n }\n return result;\n}\n\nexport default baseTimes;\n","/** Used as references for various `Number` constants. */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/** Used to detect unsigned integer values. */\nvar reIsUint = /^(?:0|[1-9]\\d*)$/;\n\n/**\n * Checks if `value` is a valid array-like index.\n *\n * @private\n * @param {*} value The value to check.\n * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.\n * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.\n */\nfunction isIndex(value, length) {\n var type = typeof value;\n length = length == null ? MAX_SAFE_INTEGER : length;\n\n return !!length &&\n (type == 'number' ||\n (type != 'symbol' && reIsUint.test(value))) &&\n (value > -1 && value % 1 == 0 && value < length);\n}\n\nexport default isIndex;\n","import baseTimes from './_baseTimes.js';\nimport isArguments from './isArguments.js';\nimport isArray from './isArray.js';\nimport isBuffer from './isBuffer.js';\nimport isIndex from './_isIndex.js';\nimport isTypedArray from './isTypedArray.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Creates an array of the enumerable property names of the array-like `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @param {boolean} inherited Specify returning inherited property names.\n * @returns {Array} Returns the array of property names.\n */\nfunction arrayLikeKeys(value, inherited) {\n var isArr = isArray(value),\n isArg = !isArr && isArguments(value),\n isBuff = !isArr && !isArg && isBuffer(value),\n isType = !isArr && !isArg && !isBuff && isTypedArray(value),\n skipIndexes = isArr || isArg || isBuff || isType,\n result = skipIndexes ? baseTimes(value.length, String) : [],\n length = result.length;\n\n for (var key in value) {\n if ((inherited || hasOwnProperty.call(value, key)) &&\n !(skipIndexes && (\n // Safari 9 has enumerable `arguments.length` in strict mode.\n key == 'length' ||\n // Node.js 0.10 has enumerable non-index properties on buffers.\n (isBuff && (key == 'offset' || key == 'parent')) ||\n // PhantomJS 2 has enumerable non-index properties on typed arrays.\n (isType && (key == 'buffer' || key == 'byteLength' || key == 'byteOffset')) ||\n // Skip index properties.\n isIndex(key, length)\n ))) {\n result.push(key);\n }\n }\n return result;\n}\n\nexport default arrayLikeKeys;\n","/**\n * This function is like\n * [`Object.keys`](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n * except that it includes inherited enumerable properties.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\nfunction nativeKeysIn(object) {\n var result = [];\n if (object != null) {\n for (var key in Object(object)) {\n result.push(key);\n }\n }\n return result;\n}\n\nexport default nativeKeysIn;\n","import isObject from './isObject.js';\nimport isPrototype from './_isPrototype.js';\nimport nativeKeysIn from './_nativeKeysIn.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * The base implementation of `_.keysIn` which doesn't treat sparse arrays as dense.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\nfunction baseKeysIn(object) {\n if (!isObject(object)) {\n return nativeKeysIn(object);\n }\n var isProto = isPrototype(object),\n result = [];\n\n for (var key in object) {\n if (!(key == 'constructor' && (isProto || !hasOwnProperty.call(object, key)))) {\n result.push(key);\n }\n }\n return result;\n}\n\nexport default baseKeysIn;\n","import arrayLikeKeys from './_arrayLikeKeys.js';\nimport baseKeysIn from './_baseKeysIn.js';\nimport isArrayLike from './isArrayLike.js';\n\n/**\n * Creates an array of the own and inherited enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keysIn(new Foo);\n * // => ['a', 'b', 'c'] (iteration order is not guaranteed)\n */\nfunction keysIn(object) {\n return isArrayLike(object) ? arrayLikeKeys(object, true) : baseKeysIn(object);\n}\n\nexport default keysIn;\n","import copyObject from './_copyObject.js';\nimport keysIn from './keysIn.js';\n\n/**\n * Converts `value` to a plain object flattening inherited enumerable string\n * keyed properties of `value` to own properties of the plain object.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {Object} Returns the converted plain object.\n * @example\n *\n * function Foo() {\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.assign({ 'a': 1 }, new Foo);\n * // => { 'a': 1, 'b': 2 }\n *\n * _.assign({ 'a': 1 }, _.toPlainObject(new Foo));\n * // => { 'a': 1, 'b': 2, 'c': 3 }\n */\nfunction toPlainObject(value) {\n return copyObject(value, keysIn(value));\n}\n\nexport default toPlainObject;\n","import assignMergeValue from './_assignMergeValue.js';\nimport cloneBuffer from './_cloneBuffer.js';\nimport cloneTypedArray from './_cloneTypedArray.js';\nimport copyArray from './_copyArray.js';\nimport initCloneObject from './_initCloneObject.js';\nimport isArguments from './isArguments.js';\nimport isArray from './isArray.js';\nimport isArrayLikeObject from './isArrayLikeObject.js';\nimport isBuffer from './isBuffer.js';\nimport isFunction from './isFunction.js';\nimport isObject from './isObject.js';\nimport isPlainObject from './isPlainObject.js';\nimport isTypedArray from './isTypedArray.js';\nimport safeGet from './_safeGet.js';\nimport toPlainObject from './toPlainObject.js';\n\n/**\n * A specialized version of `baseMerge` for arrays and objects which performs\n * deep merges and tracks traversed objects enabling objects with circular\n * references to be merged.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @param {string} key The key of the value to merge.\n * @param {number} srcIndex The index of `source`.\n * @param {Function} mergeFunc The function to merge values.\n * @param {Function} [customizer] The function to customize assigned values.\n * @param {Object} [stack] Tracks traversed source values and their merged\n * counterparts.\n */\nfunction baseMergeDeep(object, source, key, srcIndex, mergeFunc, customizer, stack) {\n var objValue = safeGet(object, key),\n srcValue = safeGet(source, key),\n stacked = stack.get(srcValue);\n\n if (stacked) {\n assignMergeValue(object, key, stacked);\n return;\n }\n var newValue = customizer\n ? customizer(objValue, srcValue, (key + ''), object, source, stack)\n : undefined;\n\n var isCommon = newValue === undefined;\n\n if (isCommon) {\n var isArr = isArray(srcValue),\n isBuff = !isArr && isBuffer(srcValue),\n isTyped = !isArr && !isBuff && isTypedArray(srcValue);\n\n newValue = srcValue;\n if (isArr || isBuff || isTyped) {\n if (isArray(objValue)) {\n newValue = objValue;\n }\n else if (isArrayLikeObject(objValue)) {\n newValue = copyArray(objValue);\n }\n else if (isBuff) {\n isCommon = false;\n newValue = cloneBuffer(srcValue, true);\n }\n else if (isTyped) {\n isCommon = false;\n newValue = cloneTypedArray(srcValue, true);\n }\n else {\n newValue = [];\n }\n }\n else if (isPlainObject(srcValue) || isArguments(srcValue)) {\n newValue = objValue;\n if (isArguments(objValue)) {\n newValue = toPlainObject(objValue);\n }\n else if (!isObject(objValue) || isFunction(objValue)) {\n newValue = initCloneObject(srcValue);\n }\n }\n else {\n isCommon = false;\n }\n }\n if (isCommon) {\n // Recursively merge objects and arrays (susceptible to call stack limits).\n stack.set(srcValue, newValue);\n mergeFunc(newValue, srcValue, srcIndex, customizer, stack);\n stack['delete'](srcValue);\n }\n assignMergeValue(object, key, newValue);\n}\n\nexport default baseMergeDeep;\n","import Stack from './_Stack.js';\nimport assignMergeValue from './_assignMergeValue.js';\nimport baseFor from './_baseFor.js';\nimport baseMergeDeep from './_baseMergeDeep.js';\nimport isObject from './isObject.js';\nimport keysIn from './keysIn.js';\nimport safeGet from './_safeGet.js';\n\n/**\n * The base implementation of `_.merge` without support for multiple sources.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @param {number} srcIndex The index of `source`.\n * @param {Function} [customizer] The function to customize merged values.\n * @param {Object} [stack] Tracks traversed source values and their merged\n * counterparts.\n */\nfunction baseMerge(object, source, srcIndex, customizer, stack) {\n if (object === source) {\n return;\n }\n baseFor(source, function(srcValue, key) {\n stack || (stack = new Stack);\n if (isObject(srcValue)) {\n baseMergeDeep(object, source, key, srcIndex, baseMerge, customizer, stack);\n }\n else {\n var newValue = customizer\n ? customizer(safeGet(object, key), srcValue, (key + ''), object, source, stack)\n : undefined;\n\n if (newValue === undefined) {\n newValue = srcValue;\n }\n assignMergeValue(object, key, newValue);\n }\n }, keysIn);\n}\n\nexport default baseMerge;\n","/**\n * This method returns the first argument it receives.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Util\n * @param {*} value Any value.\n * @returns {*} Returns `value`.\n * @example\n *\n * var object = { 'a': 1 };\n *\n * console.log(_.identity(object) === object);\n * // => true\n */\nfunction identity(value) {\n return value;\n}\n\nexport default identity;\n","/**\n * A faster alternative to `Function#apply`, this function invokes `func`\n * with the `this` binding of `thisArg` and the arguments of `args`.\n *\n * @private\n * @param {Function} func The function to invoke.\n * @param {*} thisArg The `this` binding of `func`.\n * @param {Array} args The arguments to invoke `func` with.\n * @returns {*} Returns the result of `func`.\n */\nfunction apply(func, thisArg, args) {\n switch (args.length) {\n case 0: return func.call(thisArg);\n case 1: return func.call(thisArg, args[0]);\n case 2: return func.call(thisArg, args[0], args[1]);\n case 3: return func.call(thisArg, args[0], args[1], args[2]);\n }\n return func.apply(thisArg, args);\n}\n\nexport default apply;\n","import apply from './_apply.js';\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeMax = Math.max;\n\n/**\n * A specialized version of `baseRest` which transforms the rest array.\n *\n * @private\n * @param {Function} func The function to apply a rest parameter to.\n * @param {number} [start=func.length-1] The start position of the rest parameter.\n * @param {Function} transform The rest array transform.\n * @returns {Function} Returns the new function.\n */\nfunction overRest(func, start, transform) {\n start = nativeMax(start === undefined ? (func.length - 1) : start, 0);\n return function() {\n var args = arguments,\n index = -1,\n length = nativeMax(args.length - start, 0),\n array = Array(length);\n\n while (++index < length) {\n array[index] = args[start + index];\n }\n index = -1;\n var otherArgs = Array(start + 1);\n while (++index < start) {\n otherArgs[index] = args[index];\n }\n otherArgs[start] = transform(array);\n return apply(func, this, otherArgs);\n };\n}\n\nexport default overRest;\n","/**\n * Creates a function that returns `value`.\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Util\n * @param {*} value The value to return from the new function.\n * @returns {Function} Returns the new constant function.\n * @example\n *\n * var objects = _.times(2, _.constant({ 'a': 1 }));\n *\n * console.log(objects);\n * // => [{ 'a': 1 }, { 'a': 1 }]\n *\n * console.log(objects[0] === objects[1]);\n * // => true\n */\nfunction constant(value) {\n return function() {\n return value;\n };\n}\n\nexport default constant;\n","import constant from './constant.js';\nimport defineProperty from './_defineProperty.js';\nimport identity from './identity.js';\n\n/**\n * The base implementation of `setToString` without support for hot loop shorting.\n *\n * @private\n * @param {Function} func The function to modify.\n * @param {Function} string The `toString` result.\n * @returns {Function} Returns `func`.\n */\nvar baseSetToString = !defineProperty ? identity : function(func, string) {\n return defineProperty(func, 'toString', {\n 'configurable': true,\n 'enumerable': false,\n 'value': constant(string),\n 'writable': true\n });\n};\n\nexport default baseSetToString;\n","/** Used to detect hot functions by number of calls within a span of milliseconds. */\nvar HOT_COUNT = 800,\n HOT_SPAN = 16;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeNow = Date.now;\n\n/**\n * Creates a function that'll short out and invoke `identity` instead\n * of `func` when it's called `HOT_COUNT` or more times in `HOT_SPAN`\n * milliseconds.\n *\n * @private\n * @param {Function} func The function to restrict.\n * @returns {Function} Returns the new shortable function.\n */\nfunction shortOut(func) {\n var count = 0,\n lastCalled = 0;\n\n return function() {\n var stamp = nativeNow(),\n remaining = HOT_SPAN - (stamp - lastCalled);\n\n lastCalled = stamp;\n if (remaining > 0) {\n if (++count >= HOT_COUNT) {\n return arguments[0];\n }\n } else {\n count = 0;\n }\n return func.apply(undefined, arguments);\n };\n}\n\nexport default shortOut;\n","import baseSetToString from './_baseSetToString.js';\nimport shortOut from './_shortOut.js';\n\n/**\n * Sets the `toString` method of `func` to return `string`.\n *\n * @private\n * @param {Function} func The function to modify.\n * @param {Function} string The `toString` result.\n * @returns {Function} Returns `func`.\n */\nvar setToString = shortOut(baseSetToString);\n\nexport default setToString;\n","import identity from './identity.js';\nimport overRest from './_overRest.js';\nimport setToString from './_setToString.js';\n\n/**\n * The base implementation of `_.rest` which doesn't validate or coerce arguments.\n *\n * @private\n * @param {Function} func The function to apply a rest parameter to.\n * @param {number} [start=func.length-1] The start position of the rest parameter.\n * @returns {Function} Returns the new function.\n */\nfunction baseRest(func, start) {\n return setToString(overRest(func, start, identity), func + '');\n}\n\nexport default baseRest;\n","import eq from './eq.js';\nimport isArrayLike from './isArrayLike.js';\nimport isIndex from './_isIndex.js';\nimport isObject from './isObject.js';\n\n/**\n * Checks if the given arguments are from an iteratee call.\n *\n * @private\n * @param {*} value The potential iteratee value argument.\n * @param {*} index The potential iteratee index or key argument.\n * @param {*} object The potential iteratee object argument.\n * @returns {boolean} Returns `true` if the arguments are from an iteratee call,\n * else `false`.\n */\nfunction isIterateeCall(value, index, object) {\n if (!isObject(object)) {\n return false;\n }\n var type = typeof index;\n if (type == 'number'\n ? (isArrayLike(object) && isIndex(index, object.length))\n : (type == 'string' && index in object)\n ) {\n return eq(object[index], value);\n }\n return false;\n}\n\nexport default isIterateeCall;\n","import baseRest from './_baseRest.js';\nimport isIterateeCall from './_isIterateeCall.js';\n\n/**\n * Creates a function like `_.assign`.\n *\n * @private\n * @param {Function} assigner The function to assign values.\n * @returns {Function} Returns the new assigner function.\n */\nfunction createAssigner(assigner) {\n return baseRest(function(object, sources) {\n var index = -1,\n length = sources.length,\n customizer = length > 1 ? sources[length - 1] : undefined,\n guard = length > 2 ? sources[2] : undefined;\n\n customizer = (assigner.length > 3 && typeof customizer == 'function')\n ? (length--, customizer)\n : undefined;\n\n if (guard && isIterateeCall(sources[0], sources[1], guard)) {\n customizer = length < 3 ? undefined : customizer;\n length = 1;\n }\n object = Object(object);\n while (++index < length) {\n var source = sources[index];\n if (source) {\n assigner(object, source, index, customizer);\n }\n }\n return object;\n });\n}\n\nexport default createAssigner;\n","import baseMerge from './_baseMerge.js';\nimport createAssigner from './_createAssigner.js';\n\n/**\n * This method is like `_.assign` except that it recursively merges own and\n * inherited enumerable string keyed properties of source objects into the\n * destination object. Source properties that resolve to `undefined` are\n * skipped if a destination value exists. Array and plain object properties\n * are merged recursively. Other objects and value types are overridden by\n * assignment. Source objects are applied from left to right. Subsequent\n * sources overwrite property assignments of previous sources.\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 0.5.0\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} [sources] The source objects.\n * @returns {Object} Returns `object`.\n * @example\n *\n * var object = {\n * 'a': [{ 'b': 2 }, { 'd': 4 }]\n * };\n *\n * var other = {\n * 'a': [{ 'c': 3 }, { 'e': 5 }]\n * };\n *\n * _.merge(object, other);\n * // => { 'a': [{ 'b': 2, 'c': 3 }, { 'd': 4, 'e': 5 }] }\n */\nvar merge = createAssigner(function(object, source, srcIndex) {\n baseMerge(object, source, srcIndex);\n});\n\nexport default merge;\n","import { merge } from 'lodash-es'\nimport { Controller } from '@hotwired/stimulus'\n\nexport default class extends Controller {\n constructor(...params) {\n super(...params)\n this.setOptions()\n }\n\n setOptions() {\n if (!this.constructor.options) {\n return\n }\n\n let overrides = this.data.get('options')\n\n if (overrides) {\n try {\n overrides = JSON.parse(overrides)\n } catch (error) {\n console.error('Error parsing component options', this.element, overrides)\n overrides = {}\n }\n }\n\n this.options = merge({}, this.constructor.options || {}, overrides || {})\n }\n\n emit(name, options, element = this.element) {\n options = {\n bubbles: false,\n cancelable: false,\n detail: null,\n ...options,\n }\n\n let ev\n\n if (typeof CustomEvent === 'function') {\n ev = new CustomEvent(name, options)\n } else {\n ev = document.createEvent('CustomEvent')\n ev.initCustomEvent(name, options.bubbles, options.cancelable, options.detail)\n }\n\n element.dispatchEvent(ev)\n }\n}\n","export default function dataLayer(event) {\n window.dataLayer = window.dataLayer || []\n window.dataLayer.push(event)\n}\n","import Controller from './controller'\nimport dataLayer from '../helpers/datalayer'\n\nexport default class extends Controller {\n static get targets() {\n return ['nursery']\n }\n\n initialize() {\n this.go = this.go.bind(this)\n }\n\n get nursery() {\n if (!this.hasNurseryTarget) return\n\n return this.nurseryTarget.value\n }\n\n go(event) {\n // console.log(event.currentTarget.getAttribute('data-datalayer-event'))\n dataLayer({\n event: event.currentTarget.getAttribute('data-datalayer-event'),\n nursery: null,\n })\n }\n\n gtmLoaded() {\n return !!window['google_tag_data']\n }\n\n shouldProceed(id) {\n return id === undefined || id.split('-')[0] == 'G'\n }\n\n eventEmailClick(event) {\n if (!this.gtmLoaded()) {\n return true\n }\n\n event.preventDefault()\n dataLayer({\n event: 'email_click',\n nursery: null,\n eventCallback: (id) => {\n if (this.shouldProceed(id)) {\n window.location = event.target.href\n }\n },\n eventTimeout: 2000,\n })\n }\n\n eventPhoneClick(event) {\n if (!this.gtmLoaded()) {\n return true\n }\n\n event.preventDefault()\n dataLayer({\n event: 'phone_click',\n nursery: null,\n eventCallback: (id) => {\n if (this.shouldProceed(id)) {\n window.location = event.target.href\n }\n },\n eventTimeout: 2000,\n })\n }\n\n eventBookAVisit(event) {\n if (!this.gtmLoaded()) {\n return true\n }\n\n event.preventDefault()\n dataLayer({\n event: 'book_a_visit',\n nursery: this.nursery,\n eventCallback: (id) => {\n if (this.shouldProceed(id)) {\n event.target.submit()\n }\n },\n eventTimeout: 2000,\n })\n }\n\n eventMakeAPayment() {\n dataLayer({\n event: 'make_a_payment',\n nursery: null,\n })\n }\n\n eventFeeDownload(event) {\n if (!this.gtmLoaded()) {\n return true\n }\n\n event.preventDefault()\n dataLayer({\n event: 'fee_download',\n nursery: null,\n eventCallback: (id) => {\n if (this.shouldProceed(id)) {\n window.location = event.target.href\n }\n },\n eventTimeout: 2000,\n })\n }\n}\n","import Controller from './controller'\n\nexport default class extends Controller {\n async initialize() {\n let Pikaday = await import(/* webpackChunkName: \"pikaday\" */ 'pikaday')\n Pikaday = Pikaday.default\n\n this.picker = new Pikaday({\n field: this.element,\n format: 'DD-MM-YY',\n minDate: new Date(),\n })\n }\n}\n","import Controller from './controller'\nimport { elementId } from '../utilities'\n\nexport default class extends Controller {\n static targets = ['content', 'toggle']\n\n static values = {\n mouse: Boolean,\n }\n\n get focusables() {\n if (!this.cachedFocusables) {\n this.cachedFocusables = Array.from(this.contentTarget.querySelectorAll('a')).filter(\n (link) => link.offsetWidth > 0,\n )\n }\n\n return this.cachedFocusables\n }\n\n initialize() {\n this.onClick = this.onClick.bind(this)\n this.onKeydown = this.onKeydown.bind(this)\n this.onMouseenter = this.onMouseenter.bind(this)\n this.onMouseleave = this.onMouseleave.bind(this)\n this.resize = this.resize.bind(this)\n\n this.hoverOpenDelay = 125 // Time after mouseenter before showing dropdown\n this.hoverCloseDelay = 250 // Time after mouseleave before hiding dropdown\n this.hoverQuickSwitchDelay = 50 // When switching between dropdowns - time after mouseenter before showing dropdown\n\n this.elementOpenClass = 'is-open'\n\n if (!this.toggleTarget.id) this.toggleTarget.id = elementId()\n if (!this.contentTarget.id) this.contentTarget.id = elementId()\n this.toggleTarget.setAttribute('aria-haspopup', 'true')\n this.toggleTarget.setAttribute('aria-controls', this.contentTarget.id)\n this.contentTarget.setAttribute('aria-labelledby', this.toggleTarget.id)\n\n this.toggleTarget.addEventListener('click', (ev) => {\n ev.preventDefault()\n this.toggle()\n })\n\n this.resize()\n window.addEventListener('resize', this.resize)\n }\n\n resize() {\n // If this.element has ::before content set to 'touch', don't enable mouse interaction\n const isTouch =\n window\n .getComputedStyle(this.element, '::before')\n .getPropertyValue('content')\n .replace(/['\"]+/g, '') === 'touch'\n\n // Open dropdown on hover if this.element has data-dropdown-mouse-value=\"true\" set\n if (this.mouseValue && !isTouch) {\n this.enableMouse()\n } else {\n this.disableMouse()\n }\n }\n\n enableMouse() {\n if (this.isMouseEnabled) return\n this.isMouseEnabled = true\n\n this.element.addEventListener('mouseenter', this.onMouseenter)\n this.element.addEventListener('mouseleave', this.onMouseleave)\n }\n\n disableMouse() {\n if (!this.isMouseEnabled) return\n this.isMouseEnabled = false\n\n this.element.removeEventListener('mouseenter', this.onMouseenter)\n this.element.removeEventListener('mouseleave', this.onMouseleave)\n }\n\n open() {\n clearTimeout(this.closeTimeout)\n\n if (this.isOpen) return\n this.isOpen = true\n\n this.emit('dropdown:open', { bubbles: true, detail: { dropdown: this } })\n\n this.element.classList.add(this.elementOpenClass)\n this.toggleTarget.setAttribute('aria-expanded', 'true')\n\n window.addEventListener('click', this.onClick)\n window.addEventListener('keydown', this.onKeydown)\n }\n\n close() {\n if (!this.isOpen) return\n this.isOpen = false\n\n this.isHoverOpened = false\n\n this.emit('dropdown:close', { bubbles: true, detail: { dropdown: this } })\n\n this.element.classList.remove(this.elementOpenClass)\n this.toggleTarget.removeAttribute('aria-expanded')\n\n window.removeEventListener('click', this.onClick)\n window.removeEventListener('keydown', this.onKeydown)\n }\n\n toggle(ev) {\n if (ev) {\n ev.preventDefault()\n }\n\n if (ev && this.isHoverOpened) {\n this.isHoverOpened = false\n } else if (this.isOpen) {\n this.close()\n } else {\n this.open()\n }\n }\n\n // Reduce hover delay when switching from an already open dropdown to another\n setQuickSwitchMode() {\n this.quickSwitchMode = true\n }\n\n unsetQuickSwitchMode() {\n this.quickSwitchMode = false\n }\n\n onFocusout(ev) {\n if (ev.relatedTarget && !this.element.contains(ev.relatedTarget)) {\n // Timeout to support switching quickly between dropdowns on click. Without this, this dropdown's\n // `dropdown:close` event will be fired before next dropdown's `dropdown:open`, causing both to transition\n this.closeTimeout = setTimeout(() => {\n this.close()\n }, 175)\n }\n }\n\n onClick(ev) {\n if (!this.contentTarget.contains(ev.target) && !this.toggleTarget.contains(ev.target)) {\n this.close()\n }\n }\n\n onElementKeydown(ev) {\n const up = ev.key === 'ArrowUp'\n const down = ev.key === 'ArrowDown'\n\n if (!up && !down) {\n return\n }\n\n // Prevent default arrow action of scrolling the page.\n ev.preventDefault()\n\n // Switch focus to next/previous focusable element.\n const index = this.focusables.indexOf(ev.target)\n const { length } = this.focusables\n const nextFocusable = this.focusables[(index + (down ? 1 : -1) + length) % length]\n\n if (nextFocusable) {\n const focus = () => {\n nextFocusable.focus()\n }\n\n if (this.isOpen) {\n focus()\n } else {\n this.open()\n setTimeout(focus, 100)\n }\n }\n }\n\n onKeydown(ev) {\n if (ev.key === 'Escape') {\n this.close()\n }\n }\n\n onMouseenter() {\n clearTimeout(this.mouseleaveTimeout)\n\n if (!this.isMouseEnabled) return\n\n const delay = this.quickSwitchMode ? this.hoverQuickSwitchDelay : this.hoverOpenDelay\n\n this.mouseenterTimeout = setTimeout(() => {\n if (!this.isOpen) {\n this.isHoverOpened = true\n this.open()\n }\n }, delay)\n }\n\n onMouseleave() {\n clearTimeout(this.mouseenterTimeout)\n\n if (!this.isMouseEnabled || !this.isHoverOpened) return\n\n this.mouseleaveTimeout = setTimeout(() => {\n this.close()\n }, this.hoverCloseDelay)\n }\n}\n","import { Controller } from '@hotwired/stimulus'\n\nexport default class extends Controller {\n static targets = ['name', 'output']\n\n initialize() {\n console.log('Example controller has initialized')\n }\n\n greet(ev) {\n ev.preventDefault()\n\n const name = this.nameTarget.value.trim()\n\n if (name) {\n this.outputTarget.textContent = `Hello, ${name}!`\n } else {\n alert('Your name, please')\n }\n }\n}\n","import Controller from './controller'\n\nexport default class extends Controller {\n async initialize() {\n const url = this.data.get('url')\n const response = await fetch(url)\n\n if (response.ok) {\n const content = await response.text()\n this.element.outerHTML = content\n }\n }\n}\n","import Controller from './controller'\n\nexport default class Visible extends Controller {\n static targets = ['template']\n\n initialize() {\n this.checkIntersection = this.checkIntersection.bind(this)\n this.checkEntryIntersection = this.checkEntryIntersection.bind(this)\n\n this.observer = new IntersectionObserver(this.checkIntersection, {\n rootMargin: '50% 0px'\n })\n this.observer.observe(this.element)\n }\n\n checkIntersection(entries) {\n entries.forEach(this.checkEntryIntersection)\n }\n\n checkEntryIntersection(entry) {\n const element = entry.target\n\n if (entry.isIntersecting) {\n this.show(element)\n }\n }\n\n show() {\n this.observer.disconnect()\n\n this.element.innerHTML = this.templateTarget.innerHTML\n }\n}\n","// Detect when a transition ends and do something\n// This was ported from coffeescript with decaffeinate - it might be weird\nclass Transition {\n static initClass() {\n this.instances = []\n this.indexData = '__transition__'\n this.index = 0\n }\n\n constructor(element, callback, options = {}) {\n this.onTransitionEnd = this.onTransitionEnd.bind(this)\n\n this.element = element\n this.callback = callback\n this.options = options\n\n // Set transition reference, clear any active transitions\n this.init()\n\n this.play()\n }\n\n init() {\n this.index = this.element.dataset[Transition.indexData]\n\n if (this.index != null) {\n if (Transition.instances[this.index] != null) {\n Transition.instances[this.index].cancel(false)\n }\n } else {\n Transition.index += 1\n this.index = Transition.index\n this.element.dataset[Transition.indexData] = this.index\n }\n\n Transition.instances[this.index] = this\n }\n\n play() {\n if (!this.options.instant) {\n this.element.addEventListener(this.eventEndName(), this.onTransitionEnd)\n }\n\n if (this.options.instant) {\n this.after(true)\n }\n }\n\n after(didComplete) {\n if (this.isCompleted) return\n this.isCompleted = true\n\n if (Transition.instances[this.index] == null) {\n return\n }\n\n // Detach transitionend\n if (!this.options.instant) {\n this.element.removeEventListener(this.eventEndName(), this.onTransitionEnd)\n }\n\n // delete rather than splice to maintain indexes in sparse array\n delete Transition.instances[this.index]\n\n this.callback(didComplete)\n }\n\n cancel() {\n this.after(false)\n }\n\n eventEndName() {\n return this.options.animation ? 'animationend' : 'transitionend'\n }\n\n // Element check avoids reacting to bubbling transitionend events triggered by child elements\n onTransitionEnd(ev) {\n if (ev.target === this.element) {\n this.after(true)\n }\n }\n}\n\nTransition.initClass()\n\nexport const transition = (element, options) => new Transition(element, options)\n\nexport const noTransition = (element, callback) => {\n element.style.transition = 'none'\n\n requestAnimationFrame(() => {\n callback(element)\n\n requestAnimationFrame(() => {\n element.style.transition = ''\n })\n })\n}\n\nexport default {\n transition,\n noTransition,\n}\n","import Controller from './controller'\nimport { transition } from '../transition'\nimport { disableBodyScroll, enableBodyScroll } from '../utilities'\n\nexport default class extends Controller {\n static targets = ['content', 'home', 'panel', 'toggle']\n\n initialize() {\n this.close = this.close.bind(this)\n this.elementOpenClass = 'is-open'\n }\n\n connect() {\n this.isOpen = this.element.classList.contains(this.elementOpenClass)\n\n if (this.isOpen) {\n this.addEvents()\n }\n }\n\n disconnect() {\n if (this.isOpen) {\n this.removeEvents()\n }\n }\n\n toggle() {\n if (this.isOpen) {\n this.close()\n } else {\n this.open()\n }\n }\n\n open() {\n if (this.isOpen) return\n this.isOpen = true\n\n this.element.classList.add(this.elementOpenClass)\n this.toggleTarget.setAttribute('aria-expanded', true)\n\n disableBodyScroll()\n\n if (this.afterClose) {\n this.afterClose.cancel()\n }\n\n window.setTimeout(() => {\n this.addEvents()\n }, 50)\n }\n\n close(event) {\n if (\n event &&\n ((event.type === 'keydown' && event.key !== 'Escape') ||\n (event.type === 'click' && this.element.contains(event.target)))\n ) {\n return\n }\n\n if (!this.isOpen) return\n this.isOpen = false\n\n this.element.classList.remove(this.elementOpenClass)\n this.toggleTarget.setAttribute('aria-expanded', false)\n\n enableBodyScroll()\n\n this.removeEvents()\n\n this.emit('header:enable', {}, window)\n }\n\n showPanel(event) {\n event.preventDefault()\n\n if (!this.panels) {\n this.panels = {}\n\n this.panelTargets.forEach((panel) => {\n this.panels[panel.dataset[this.panelData]] = panel\n })\n }\n\n const panel = this.panels[event.currentTarget.dataset[this.panelData]]\n\n if (this.shownPanel) {\n this.backPanels.push(this.shownPanel)\n this.shownPanel.classList.add(this.panelBackClass)\n }\n\n this.contentTarget.classList.add(this.contentPanelShownClass)\n panel.classList.add(this.panelShownClass)\n this.shownPanel = panel\n }\n\n back(event) {\n event.preventDefault()\n\n this.shownPanel.classList.remove(this.panelShownClass)\n this.shownPanel = this.backPanels.pop()\n\n if (this.shownPanel) {\n this.shownPanel.classList.remove(this.panelBackClass)\n } else {\n this.contentTarget.classList.remove(this.contentPanelShownClass)\n }\n }\n\n reset() {\n this.backPanels.forEach((panel) => {\n panel.classList.remove(this.panelShownClass, this.panelBackClass)\n })\n this.backPanels = []\n\n if (this.shownPanel) {\n this.shownPanel.classList.remove(this.panelShownClass)\n this.shownPanel = null\n }\n\n this.contentTarget.classList.remove(this.contentPanelShownClass)\n }\n\n addEvents() {\n window.addEventListener('click', this.close)\n window.addEventListener('keydown', this.close)\n }\n\n removeEvents() {\n window.removeEventListener('click', this.close)\n window.removeEventListener('keydown', this.close)\n }\n}\n","import Controller from './controller'\nimport Modal from './modal_controller'\n\nexport default class extends Controller {\n open(ev) {\n\n this.id ||= this.data.get('id')\n\n // If this modal link is inside a modal, close that modal when opening this new one\n const modalTarget = this.element.closest('[data-controller=\"modal\"]')\n if (modalTarget) {\n const modal = this.application.getControllerForElementAndIdentifier(modalTarget, 'modal')\n modal.close()\n }\n\n // If this modal has been opened before, reopen it\n if (Modal.instances[this.id]) {\n Modal.instances[this.id].open()\n } else {\n this.createModal()\n }\n }\n\n createModal() {\n const template = this.getTemplateTarget()\n\n if (!template) {\n console.warn(`Modal template missing: ${this.id}`)\n return\n }\n\n this.modalTarget = document.importNode(template.content, true).firstElementChild\n this.modalTarget.dataset.modalId = this.id\n this.modalTarget.id ||= `modal-${this.id}`\n\n // Modals open automatically when Stimulus finds them in the DOM (see modal_controller)\n document.body.appendChild(this.modalTarget)\n }\n\n getTemplateTarget() {\n return document.querySelector(`template[data-modal-id='${this.id}']`)\n }\n}\n","var focusableSelectors = [\n 'a[href]:not([tabindex^=\"-\"])',\n 'area[href]:not([tabindex^=\"-\"])',\n 'input:not([type=\"hidden\"]):not([type=\"radio\"]):not([disabled]):not([tabindex^=\"-\"])',\n 'input[type=\"radio\"]:not([disabled]):not([tabindex^=\"-\"])',\n 'select:not([disabled]):not([tabindex^=\"-\"])',\n 'textarea:not([disabled]):not([tabindex^=\"-\"])',\n 'button:not([disabled]):not([tabindex^=\"-\"])',\n 'iframe:not([tabindex^=\"-\"])',\n 'audio[controls]:not([tabindex^=\"-\"])',\n 'video[controls]:not([tabindex^=\"-\"])',\n '[contenteditable]:not([tabindex^=\"-\"])',\n '[tabindex]:not([tabindex^=\"-\"])',\n];\n\nvar TAB_KEY = 'Tab';\nvar ESCAPE_KEY = 'Escape';\n\n/**\n * Define the constructor to instantiate a dialog\n *\n * @constructor\n * @param {Element} element\n */\nfunction A11yDialog(element) {\n // Prebind the functions that will be bound in addEventListener and\n // removeEventListener to avoid losing references\n this._show = this.show.bind(this);\n this._hide = this.hide.bind(this);\n this._maintainFocus = this._maintainFocus.bind(this);\n this._bindKeypress = this._bindKeypress.bind(this);\n\n this.$el = element;\n this.shown = false;\n this._id = this.$el.getAttribute('data-a11y-dialog') || this.$el.id;\n this._previouslyFocused = null;\n this._listeners = {};\n\n // Initialise everything needed for the dialog to work properly\n this.create();\n}\n\n/**\n * Set up everything necessary for the dialog to be functioning\n *\n * @param {(NodeList | Element | string)} targets\n * @return {this}\n */\nA11yDialog.prototype.create = function () {\n this.$el.setAttribute('aria-hidden', true);\n this.$el.setAttribute('aria-modal', true);\n this.$el.setAttribute('tabindex', -1);\n\n if (!this.$el.hasAttribute('role')) {\n this.$el.setAttribute('role', 'dialog');\n }\n\n // Keep a collection of dialog openers, each of which will be bound a click\n // event listener to open the dialog\n this._openers = $$('[data-a11y-dialog-show=\"' + this._id + '\"]');\n this._openers.forEach(\n function (opener) {\n opener.addEventListener('click', this._show);\n }.bind(this)\n );\n\n // Keep a collection of dialog closers, each of which will be bound a click\n // event listener to close the dialog\n const $el = this.$el;\n\n this._closers = $$('[data-a11y-dialog-hide]', this.$el)\n // This filter is necessary in case there are nested dialogs, so that\n // only closers from the current dialog are retrieved and effective\n .filter(function (closer) {\n // Testing for `[aria-modal=\"true\"]` is not enough since this attribute\n // and the collect of closers is done at instantation time, when nested\n // dialogs might not have yet been instantiated. Note that if the dialogs\n // are manually instantiated, this could still fail because none of these\n // selectors would match; this would cause closers to close all parent\n // dialogs instead of just the current one\n return closer.closest('[aria-modal=\"true\"], [data-a11y-dialog]') === $el\n })\n .concat($$('[data-a11y-dialog-hide=\"' + this._id + '\"]'));\n\n this._closers.forEach(\n function (closer) {\n closer.addEventListener('click', this._hide);\n }.bind(this)\n );\n\n // Execute all callbacks registered for the `create` event\n this._fire('create');\n\n return this\n};\n\n/**\n * Show the dialog element, disable all the targets (siblings), trap the\n * current focus within it, listen for some specific key presses and fire all\n * registered callbacks for `show` event\n *\n * @param {CustomEvent} event\n * @return {this}\n */\nA11yDialog.prototype.show = function (event) {\n // If the dialog is already open, abort\n if (this.shown) {\n return this\n }\n\n // Keep a reference to the currently focused element to be able to restore\n // it later\n this._previouslyFocused = document.activeElement;\n this.$el.removeAttribute('aria-hidden');\n this.shown = true;\n\n // Set the focus to the dialog element\n moveFocusToDialog(this.$el);\n\n // Bind a focus event listener to the body element to make sure the focus\n // stays trapped inside the dialog while open, and start listening for some\n // specific key presses (TAB and ESC)\n document.body.addEventListener('focus', this._maintainFocus, true);\n document.addEventListener('keydown', this._bindKeypress);\n\n // Execute all callbacks registered for the `show` event\n this._fire('show', event);\n\n return this\n};\n\n/**\n * Hide the dialog element, enable all the targets (siblings), restore the\n * focus to the previously active element, stop listening for some specific\n * key presses and fire all registered callbacks for `hide` event\n *\n * @param {CustomEvent} event\n * @return {this}\n */\nA11yDialog.prototype.hide = function (event) {\n // If the dialog is already closed, abort\n if (!this.shown) {\n return this\n }\n\n this.shown = false;\n this.$el.setAttribute('aria-hidden', 'true');\n\n // If there was a focused element before the dialog was opened (and it has a\n // `focus` method), restore the focus back to it\n // See: https://github.com/KittyGiraudel/a11y-dialog/issues/108\n if (this._previouslyFocused && this._previouslyFocused.focus) {\n this._previouslyFocused.focus();\n }\n\n // Remove the focus event listener to the body element and stop listening\n // for specific key presses\n document.body.removeEventListener('focus', this._maintainFocus, true);\n document.removeEventListener('keydown', this._bindKeypress);\n\n // Execute all callbacks registered for the `hide` event\n this._fire('hide', event);\n\n return this\n};\n\n/**\n * Destroy the current instance (after making sure the dialog has been hidden)\n * and remove all associated listeners from dialog openers and closers\n *\n * @return {this}\n */\nA11yDialog.prototype.destroy = function () {\n // Hide the dialog to avoid destroying an open instance\n this.hide();\n\n // Remove the click event listener from all dialog openers\n this._openers.forEach(\n function (opener) {\n opener.removeEventListener('click', this._show);\n }.bind(this)\n );\n\n // Remove the click event listener from all dialog closers\n this._closers.forEach(\n function (closer) {\n closer.removeEventListener('click', this._hide);\n }.bind(this)\n );\n\n // Execute all callbacks registered for the `destroy` event\n this._fire('destroy');\n\n // Keep an object of listener types mapped to callback functions\n this._listeners = {};\n\n return this\n};\n\n/**\n * Register a new callback for the given event type\n *\n * @param {string} type\n * @param {Function} handler\n */\nA11yDialog.prototype.on = function (type, handler) {\n if (typeof this._listeners[type] === 'undefined') {\n this._listeners[type] = [];\n }\n\n this._listeners[type].push(handler);\n\n return this\n};\n\n/**\n * Unregister an existing callback for the given event type\n *\n * @param {string} type\n * @param {Function} handler\n */\nA11yDialog.prototype.off = function (type, handler) {\n var index = (this._listeners[type] || []).indexOf(handler);\n\n if (index > -1) {\n this._listeners[type].splice(index, 1);\n }\n\n return this\n};\n\n/**\n * Iterate over all registered handlers for given type and call them all with\n * the dialog element as first argument, event as second argument (if any). Also\n * dispatch a custom event on the DOM element itself to make it possible to\n * react to the lifecycle of auto-instantiated dialogs.\n *\n * @access private\n * @param {string} type\n * @param {CustomEvent} event\n */\nA11yDialog.prototype._fire = function (type, event) {\n var listeners = this._listeners[type] || [];\n var domEvent = new CustomEvent(type, { detail: event });\n\n this.$el.dispatchEvent(domEvent);\n\n listeners.forEach(\n function (listener) {\n listener(this.$el, event);\n }.bind(this)\n );\n};\n\n/**\n * Private event handler used when listening to some specific key presses\n * (namely ESCAPE and TAB)\n *\n * @access private\n * @param {Event} event\n */\nA11yDialog.prototype._bindKeypress = function (event) {\n // This is an escape hatch in case there are nested dialogs, so the keypresses\n // are only reacted to for the most recent one\n const focused = document.activeElement;\n if (focused && focused.closest('[aria-modal=\"true\"]') !== this.$el) return\n\n // If the dialog is shown and the ESCAPE key is being pressed, prevent any\n // further effects from the ESCAPE key and hide the dialog, unless its role\n // is 'alertdialog', which should be modal\n if (\n this.shown &&\n event.key === ESCAPE_KEY &&\n this.$el.getAttribute('role') !== 'alertdialog'\n ) {\n event.preventDefault();\n this.hide(event);\n }\n\n // If the dialog is shown and the TAB key is being pressed, make sure the\n // focus stays trapped within the dialog element\n if (this.shown && event.key === TAB_KEY) {\n trapTabKey(this.$el, event);\n }\n};\n\n/**\n * Private event handler used when making sure the focus stays within the\n * currently open dialog\n *\n * @access private\n * @param {Event} event\n */\nA11yDialog.prototype._maintainFocus = function (event) {\n // If the dialog is shown and the focus is not within a dialog element (either\n // this one or another one in case of nested dialogs) or within an element\n // with the `data-a11y-dialog-focus-trap-ignore` attribute, move it back to\n // its first focusable child.\n // See: https://github.com/KittyGiraudel/a11y-dialog/issues/177\n if (\n this.shown &&\n !event.target.closest('[aria-modal=\"true\"]') &&\n !event.target.closest('[data-a11y-dialog-ignore-focus-trap]')\n ) {\n moveFocusToDialog(this.$el);\n }\n};\n\n/**\n * Convert a NodeList into an array\n *\n * @param {NodeList} collection\n * @return {Array}\n */\nfunction toArray(collection) {\n return Array.prototype.slice.call(collection)\n}\n\n/**\n * Query the DOM for nodes matching the given selector, scoped to context (or\n * the whole document)\n *\n * @param {String} selector\n * @param {Element} [context = document]\n * @return {Array}\n */\nfunction $$(selector, context) {\n return toArray((context || document).querySelectorAll(selector))\n}\n\n/**\n * Set the focus to the first element with `autofocus` with the element or the\n * element itself\n *\n * @param {Element} node\n */\nfunction moveFocusToDialog(node) {\n var focused = node.querySelector('[autofocus]') || node;\n\n focused.focus();\n}\n\n/**\n * Get the focusable children of the given element\n *\n * @param {Element} node\n * @return {Array}\n */\nfunction getFocusableChildren(node) {\n return $$(focusableSelectors.join(','), node).filter(function (child) {\n return !!(\n child.offsetWidth ||\n child.offsetHeight ||\n child.getClientRects().length\n )\n })\n}\n\n/**\n * Trap the focus inside the given element\n *\n * @param {Element} node\n * @param {Event} event\n */\nfunction trapTabKey(node, event) {\n var focusableChildren = getFocusableChildren(node);\n var focusedItemIndex = focusableChildren.indexOf(document.activeElement);\n\n // If the SHIFT key is being pressed while tabbing (moving backwards) and\n // the currently focused item is the first one, move the focus to the last\n // focusable item from the dialog element\n if (event.shiftKey && focusedItemIndex === 0) {\n focusableChildren[focusableChildren.length - 1].focus();\n event.preventDefault();\n // If the SHIFT key is not being pressed (moving forwards) and the currently\n // focused item is the last one, move the focus to the first focusable item\n // from the dialog element\n } else if (\n !event.shiftKey &&\n focusedItemIndex === focusableChildren.length - 1\n ) {\n focusableChildren[0].focus();\n event.preventDefault();\n }\n}\n\nfunction instantiateDialogs() {\n $$('[data-a11y-dialog]').forEach(function (node) {\n new A11yDialog(node);\n });\n}\n\nif (typeof document !== 'undefined') {\n if (document.readyState === 'loading') {\n document.addEventListener('DOMContentLoaded', instantiateDialogs);\n } else {\n if (window.requestAnimationFrame) {\n window.requestAnimationFrame(instantiateDialogs);\n } else {\n window.setTimeout(instantiateDialogs, 16);\n }\n }\n}\n\nexport { A11yDialog as default };\n","import A11yDialog from 'a11y-dialog'\nimport Controller from './controller'\nimport { disableBodyScroll, enableBodyScroll } from '../utilities'\n\nexport default class Modal extends Controller {\n static get options() {\n return {\n destroyOnClose: false,\n }\n }\n\n initialize() {\n this.destroy = this.destroy.bind(this)\n this.onDialogHide = this.onDialogHide.bind(this)\n\n this.openClass = 'is-open'\n this.dialog = new A11yDialog(this.element)\n\n // Store this modal so it can be reopened if a modal-link with the same ID is clicked\n this.id = this.data.get('id')\n Modal.instances[this.id] = this\n\n if (!this.element.hasAttribute('data-modal-closed')) {\n this.open()\n }\n\n this.hashCheck()\n }\n\n hashCheck() {\n const hash = window.location.hash.substr(1)\n\n if (this.id === hash) {\n this.open()\n }\n }\n\n destroy() {\n this.element.parentNode.removeChild(this.element)\n }\n\n open() {\n if (this.isOpen) return\n this.isOpen = true\n\n // Add open class after a delay, otherwise transitions may not work (if modal has just been added to the DOM)\n requestAnimationFrame(() => {\n this.element.classList.add(this.openClass)\n })\n\n disableBodyScroll()\n\n // Delay needed after modal is added to the DOM, or A11yDialog may not set focus element & hitting esc won't close modal\n setTimeout(() => {\n this.dialog.show()\n this.dialog.on('hide', this.onDialogHide)\n }, 50)\n }\n\n close() {\n this.dialog.hide()\n }\n\n onDialogHide() {\n if (!this.isOpen) return\n this.isOpen = false\n\n if (this.options.destroyOnClose) {\n Modal.instances[this.id] = null\n\n // Wait until transition ends before removing modal\n setTimeout(this.destroy, 350)\n }\n\n // Add class to trigger hiding transition\n this.element.classList.remove(this.openClass)\n this.dialog.off('hide', this.onDialogHide)\n\n window.removeEventListener('keydown', this.onKeydown)\n\n enableBodyScroll()\n }\n}\n\nModal.instances = {}\n","import Controller from './controller'\n\nexport default class extends Controller {\n static targets = ['item']\n\n initialize() {\n this.elementOpenClass = 'has-open-dropdown'\n this.elementOpeningClass = 'has-opening-dropdown'\n\n this.element.addEventListener('dropdown:open', (ev) => {\n const prevDropdown = this.openDropdown\n this.openDropdown = ev.detail.dropdown\n\n if (prevDropdown) {\n prevDropdown.close()\n } else {\n this.element.classList.add(this.elementOpeningClass)\n\n this.afterOpenTimeout = setTimeout(() => {\n this.setQuickSwitchMode()\n }, 350)\n }\n })\n\n this.element.addEventListener('dropdown:close', (ev) => {\n // If a new dropdown hasn't been opened\n if (ev.detail.dropdown === this.openDropdown) {\n this.openDropdown = null\n this.element.classList.remove(this.elementOpeningClass)\n\n clearTimeout(this.afterOpenTimeout)\n this.unsetQuickSwitchMode()\n }\n })\n }\n\n // Reduce hover delay when switching from an already open dropdown to another\n setQuickSwitchMode() {\n if (this.quickSwitchMode) return\n this.quickSwitchMode = true\n\n this.element.classList.add(this.elementOpenClass)\n\n this.itemTargets.forEach((_item, i) => {\n const dropdown = this.dropdownInstance(i)\n\n if (dropdown) {\n dropdown.quickSwitchMode = true\n }\n })\n }\n\n unsetQuickSwitchMode() {\n if (!this.quickSwitchMode) return\n this.quickSwitchMode = false\n\n this.element.classList.remove(this.elementOpenClass)\n\n this.itemTargets.forEach((_item, i) => {\n const dropdown = this.dropdownInstance(i)\n\n if (dropdown) {\n dropdown.quickSwitchMode = false\n }\n })\n }\n\n focus(ev) {\n const right = ev.key === 'ArrowRight'\n const left = ev.key === 'ArrowLeft'\n\n if (!right && !left) {\n return\n }\n\n const index = this.itemTargets.indexOf(ev.currentTarget)\n const nextIndex = index + (right ? 1 : -1)\n\n if (this.itemTargets[nextIndex]) {\n const currentDropdown = this.dropdownInstance(index)\n const nextDropdown = this.dropdownInstance(nextIndex)\n\n if (nextDropdown) {\n // Focus dropdown\n nextDropdown.toggleTarget.focus()\n } else {\n // Focus link\n this.itemTargets[nextIndex].focus()\n }\n\n // Keep current open state when moving focus to next dropdown\n if (currentDropdown && currentDropdown.isOpen) {\n currentDropdown.close()\n\n if (nextDropdown) {\n nextDropdown.open()\n }\n }\n }\n }\n\n // Get a `dropdown_controller` instance from a dropdown element\n dropdownInstance(index) {\n if (!this.dropdownInstances) this.dropdownInstances = {}\n\n if (!this.dropdownInstances[index]) {\n this.dropdownInstances[index] = this.application.getControllerForElementAndIdentifier(\n this.itemTargets[index],\n 'dropdown',\n )\n }\n\n return this.dropdownInstances[index]\n }\n}\n","import Controller from './controller'\n\nexport default class extends Controller {\n static get targets() {\n return [\n 'name',\n 'email',\n 'amount',\n 'stripe',\n 'paymentElement',\n 'linkAuthenticationElement',\n 'ref',\n 'invoice',\n 'location',\n 'payButton',\n ]\n }\n\n setLoading(state = true) {\n this.loading = state\n }\n\n async setupStripeElements(event) {\n event.preventDefault()\n event.stopPropagation()\n if (this.loading) return\n this.setLoading(true)\n\n const amount = parseFloat(this.amountTarget.value)\n const name = this.nameTarget.value\n const email = this.emailTarget.value\n const ref = this.refTarget.value\n const location = this.locationTarget.value\n const invoice = this.invoiceTarget.value\n\n const csrf = this.element.querySelector('[name=\"CRAFT_CSRF_TOKEN\"]')\n\n if (!email) {\n alert('enter your email')\n this.setLoading(false)\n return\n }\n\n if (!name) {\n alert('enter your name')\n this.setLoading(false)\n return\n }\n\n if (!location) {\n alert('enter your location')\n this.setLoading(false)\n return\n }\n\n if (!ref) {\n alert('enter your child reference')\n this.setLoading(false)\n return\n }\n\n if (isNaN(amount)) {\n alert('You must enter a number')\n this.setLoading(false)\n return\n }\n\n if (amount < 5) {\n alert('You must enter a larger amount')\n this.setLoading(false)\n return\n }\n\n for (const target of ['name', 'email', 'amount', 'ref', 'invoice', 'location']) {\n this[`${target}Target`].setAttribute('disabled', true)\n }\n\n this.payButtonTarget.parentNode.removeChild(this.payButtonTarget)\n let config = ''\n\n try {\n config = this.locationTarget.selectedOptions[0].dataset.config || ''\n } catch (e) {}\n\n const res = await fetch('/actions/buffalo/stripe/create-intent', {\n method: 'POST',\n body: JSON.stringify({\n CRAFT_CSRF_TOKEN: csrf.value,\n amount,\n name,\n email,\n ref,\n location,\n invoice,\n config,\n }),\n headers: {\n Accept: 'application/json',\n 'Content-Type': 'application/json',\n },\n })\n const json = await res.json()\n\n const stripe = Stripe(json.pk)\n const elements = stripe.elements({ clientSecret: json?.intent?.client_secret })\n\n const paymentElementOptions = {\n layout: 'tabs',\n }\n\n const paymentElement = elements.create('payment', paymentElementOptions)\n const linkAuthenticationElement = elements.create('linkAuthentication', {\n defaultValues: { email },\n })\n linkAuthenticationElement.mount(this.linkAuthenticationElementTarget)\n paymentElement.mount(this.paymentElementTarget)\n\n const button = document.createElement('button')\n button.setAttribute('type', 'submit')\n button.innerText = 'Complete Payment'\n button.classList.add('button')\n\n this.stripeTarget.appendChild(button)\n\n let paymentLoading = false\n this.stripeTarget.addEventListener('submit', async (e) => {\n e.preventDefault()\n if (paymentLoading) return\n paymentLoading = true\n\n const returnUrl = new URL(window.location)\n returnUrl.pathname = '/parents-area/thanks'\n\n const { error } = await stripe.confirmPayment({\n elements,\n confirmParams: {\n return_url: returnUrl.toString(),\n receipt_email: email,\n },\n })\n\n if (error.type === 'card_error' || error.type === 'validation_error') {\n alert(error.message)\n } else {\n alert('An unexpected error occurred.')\n }\n\n paymentLoading = false\n return false\n })\n\n return false\n }\n}\n","import Controller from './controller'\n\nexport default class Recaptcha extends Controller {\n initialize() {\n this.form = this.element.closest('form')\n\n if (!this.form) {\n console.warn('Recaptcha without form ancestor', this.element)\n return\n }\n\n this.onInteraction = this.onInteraction.bind(this)\n\n // Defer loading reCAPTCHA API JS until the visitor interacts with this form\n this.form.addEventListener('focusin', this.onInteraction)\n }\n\n onInteraction() {\n if (this.hasReceivedInteraction) return\n this.hasReceivedInteraction = true\n\n this.form.removeEventListener('focusin', this.onInteraction)\n\n if (!Recaptcha.isApiLoading) {\n Recaptcha.loadApi()\n }\n\n this.form.addEventListener('submit', (ev) => {\n const input = this.form.querySelector('.g-recaptcha-response')\n\n if (!input?.value.trim()) {\n ev.preventDefault()\n ev.stopImmediatePropagation()\n alert('Please complete the reCAPTCHA')\n }\n })\n }\n}\n\nRecaptcha.loadApi = () => {\n Recaptcha.isApiLoading = true\n\n window.onRecaptchaApiReady = () => {\n document.querySelectorAll('[data-controller*=\"recaptcha\"] .g-recaptcha').forEach((element) => {\n window.grecaptcha.render(element, {\n sitekey: element.getAttribute('data-sitekey'),\n callback: (token) => {\n const input = element.closest('form').querySelector('.g-recaptcha-response')\n input.value = token\n },\n })\n })\n }\n\n const recaptchaScript = document.createElement('script')\n recaptchaScript.src =\n 'https://www.google.com/recaptcha/api.js?onload=onRecaptchaApiReady&render=explicit'\n recaptchaScript.async = true\n document.head.appendChild(recaptchaScript)\n}\n","import Controller from './controller'\nimport { scrollToPosition } from '../utilities'\n\nexport default class extends Controller {\n scroll(ev) {\n const navEl = document.getElementById('navigation')\n ev.preventDefault()\n\n if (!this.target) {\n console.warn('Scroll target not found', this.element)\n return\n }\n\n scrollToPosition({\n top: window.pageYOffset + this.target.getBoundingClientRect().top - navEl.offsetHeight,\n includeHeaderOffset: false,\n })\n }\n\n get target() {\n if (!this._target) {\n // e.g. `data-scroll-to-target=\"#element\"` or `href=\"#element\"`\n const selector = this.data.get('selector') || this.element.hash\n\n if (selector) {\n this._target = document.querySelector(selector)\n }\n }\n\n return this._target\n }\n}\n","/**\n * SSR Window 4.0.2\n * Better handling for window object in SSR environment\n * https://github.com/nolimits4web/ssr-window\n *\n * Copyright 2021, Vladimir Kharlampidi\n *\n * Licensed under MIT\n *\n * Released on: December 13, 2021\n */\n/* eslint-disable no-param-reassign */\nfunction isObject(obj) {\n return (obj !== null &&\n typeof obj === 'object' &&\n 'constructor' in obj &&\n obj.constructor === Object);\n}\nfunction extend(target = {}, src = {}) {\n Object.keys(src).forEach((key) => {\n if (typeof target[key] === 'undefined')\n target[key] = src[key];\n else if (isObject(src[key]) &&\n isObject(target[key]) &&\n Object.keys(src[key]).length > 0) {\n extend(target[key], src[key]);\n }\n });\n}\n\nconst ssrDocument = {\n body: {},\n addEventListener() { },\n removeEventListener() { },\n activeElement: {\n blur() { },\n nodeName: '',\n },\n querySelector() {\n return null;\n },\n querySelectorAll() {\n return [];\n },\n getElementById() {\n return null;\n },\n createEvent() {\n return {\n initEvent() { },\n };\n },\n createElement() {\n return {\n children: [],\n childNodes: [],\n style: {},\n setAttribute() { },\n getElementsByTagName() {\n return [];\n },\n };\n },\n createElementNS() {\n return {};\n },\n importNode() {\n return null;\n },\n location: {\n hash: '',\n host: '',\n hostname: '',\n href: '',\n origin: '',\n pathname: '',\n protocol: '',\n search: '',\n },\n};\nfunction getDocument() {\n const doc = typeof document !== 'undefined' ? document : {};\n extend(doc, ssrDocument);\n return doc;\n}\n\nconst ssrWindow = {\n document: ssrDocument,\n navigator: {\n userAgent: '',\n },\n location: {\n hash: '',\n host: '',\n hostname: '',\n href: '',\n origin: '',\n pathname: '',\n protocol: '',\n search: '',\n },\n history: {\n replaceState() { },\n pushState() { },\n go() { },\n back() { },\n },\n CustomEvent: function CustomEvent() {\n return this;\n },\n addEventListener() { },\n removeEventListener() { },\n getComputedStyle() {\n return {\n getPropertyValue() {\n return '';\n },\n };\n },\n Image() { },\n Date() { },\n screen: {},\n setTimeout() { },\n clearTimeout() { },\n matchMedia() {\n return {};\n },\n requestAnimationFrame(callback) {\n if (typeof setTimeout === 'undefined') {\n callback();\n return null;\n }\n return setTimeout(callback, 0);\n },\n cancelAnimationFrame(id) {\n if (typeof setTimeout === 'undefined') {\n return;\n }\n clearTimeout(id);\n },\n};\nfunction getWindow() {\n const win = typeof window !== 'undefined' ? window : {};\n extend(win, ssrWindow);\n return win;\n}\n\nexport { extend, getDocument, getWindow, ssrDocument, ssrWindow };\n","import { getWindow, getDocument } from 'ssr-window';\nfunction deleteProps(obj) {\n const object = obj;\n Object.keys(object).forEach(key => {\n try {\n object[key] = null;\n } catch (e) {\n // no getter for object\n }\n try {\n delete object[key];\n } catch (e) {\n // something got wrong\n }\n });\n}\nfunction nextTick(callback, delay = 0) {\n return setTimeout(callback, delay);\n}\nfunction now() {\n return Date.now();\n}\nfunction getComputedStyle(el) {\n const window = getWindow();\n let style;\n if (window.getComputedStyle) {\n style = window.getComputedStyle(el, null);\n }\n if (!style && el.currentStyle) {\n style = el.currentStyle;\n }\n if (!style) {\n style = el.style;\n }\n return style;\n}\nfunction getTranslate(el, axis = 'x') {\n const window = getWindow();\n let matrix;\n let curTransform;\n let transformMatrix;\n const curStyle = getComputedStyle(el, null);\n if (window.WebKitCSSMatrix) {\n curTransform = curStyle.transform || curStyle.webkitTransform;\n if (curTransform.split(',').length > 6) {\n curTransform = curTransform.split(', ').map(a => a.replace(',', '.')).join(', ');\n }\n // Some old versions of Webkit choke when 'none' is passed; pass\n // empty string instead in this case\n transformMatrix = new window.WebKitCSSMatrix(curTransform === 'none' ? '' : curTransform);\n } else {\n transformMatrix = curStyle.MozTransform || curStyle.OTransform || curStyle.MsTransform || curStyle.msTransform || curStyle.transform || curStyle.getPropertyValue('transform').replace('translate(', 'matrix(1, 0, 0, 1,');\n matrix = transformMatrix.toString().split(',');\n }\n if (axis === 'x') {\n // Latest Chrome and webkits Fix\n if (window.WebKitCSSMatrix) curTransform = transformMatrix.m41;\n // Crazy IE10 Matrix\n else if (matrix.length === 16) curTransform = parseFloat(matrix[12]);\n // Normal Browsers\n else curTransform = parseFloat(matrix[4]);\n }\n if (axis === 'y') {\n // Latest Chrome and webkits Fix\n if (window.WebKitCSSMatrix) curTransform = transformMatrix.m42;\n // Crazy IE10 Matrix\n else if (matrix.length === 16) curTransform = parseFloat(matrix[13]);\n // Normal Browsers\n else curTransform = parseFloat(matrix[5]);\n }\n return curTransform || 0;\n}\nfunction isObject(o) {\n return typeof o === 'object' && o !== null && o.constructor && Object.prototype.toString.call(o).slice(8, -1) === 'Object';\n}\nfunction isNode(node) {\n // eslint-disable-next-line\n if (typeof window !== 'undefined' && typeof window.HTMLElement !== 'undefined') {\n return node instanceof HTMLElement;\n }\n return node && (node.nodeType === 1 || node.nodeType === 11);\n}\nfunction extend(...args) {\n const to = Object(args[0]);\n const noExtend = ['__proto__', 'constructor', 'prototype'];\n for (let i = 1; i < args.length; i += 1) {\n const nextSource = args[i];\n if (nextSource !== undefined && nextSource !== null && !isNode(nextSource)) {\n const keysArray = Object.keys(Object(nextSource)).filter(key => noExtend.indexOf(key) < 0);\n for (let nextIndex = 0, len = keysArray.length; nextIndex < len; nextIndex += 1) {\n const nextKey = keysArray[nextIndex];\n const desc = Object.getOwnPropertyDescriptor(nextSource, nextKey);\n if (desc !== undefined && desc.enumerable) {\n if (isObject(to[nextKey]) && isObject(nextSource[nextKey])) {\n if (nextSource[nextKey].__swiper__) {\n to[nextKey] = nextSource[nextKey];\n } else {\n extend(to[nextKey], nextSource[nextKey]);\n }\n } else if (!isObject(to[nextKey]) && isObject(nextSource[nextKey])) {\n to[nextKey] = {};\n if (nextSource[nextKey].__swiper__) {\n to[nextKey] = nextSource[nextKey];\n } else {\n extend(to[nextKey], nextSource[nextKey]);\n }\n } else {\n to[nextKey] = nextSource[nextKey];\n }\n }\n }\n }\n }\n return to;\n}\nfunction setCSSProperty(el, varName, varValue) {\n el.style.setProperty(varName, varValue);\n}\nfunction animateCSSModeScroll({\n swiper,\n targetPosition,\n side\n}) {\n const window = getWindow();\n const startPosition = -swiper.translate;\n let startTime = null;\n let time;\n const duration = swiper.params.speed;\n swiper.wrapperEl.style.scrollSnapType = 'none';\n window.cancelAnimationFrame(swiper.cssModeFrameID);\n const dir = targetPosition > startPosition ? 'next' : 'prev';\n const isOutOfBound = (current, target) => {\n return dir === 'next' && current >= target || dir === 'prev' && current <= target;\n };\n const animate = () => {\n time = new Date().getTime();\n if (startTime === null) {\n startTime = time;\n }\n const progress = Math.max(Math.min((time - startTime) / duration, 1), 0);\n const easeProgress = 0.5 - Math.cos(progress * Math.PI) / 2;\n let currentPosition = startPosition + easeProgress * (targetPosition - startPosition);\n if (isOutOfBound(currentPosition, targetPosition)) {\n currentPosition = targetPosition;\n }\n swiper.wrapperEl.scrollTo({\n [side]: currentPosition\n });\n if (isOutOfBound(currentPosition, targetPosition)) {\n swiper.wrapperEl.style.overflow = 'hidden';\n swiper.wrapperEl.style.scrollSnapType = '';\n setTimeout(() => {\n swiper.wrapperEl.style.overflow = '';\n swiper.wrapperEl.scrollTo({\n [side]: currentPosition\n });\n });\n window.cancelAnimationFrame(swiper.cssModeFrameID);\n return;\n }\n swiper.cssModeFrameID = window.requestAnimationFrame(animate);\n };\n animate();\n}\nfunction getSlideTransformEl(slideEl) {\n return slideEl.querySelector('.swiper-slide-transform') || slideEl.shadowEl && slideEl.shadowEl.querySelector('.swiper-slide-transform') || slideEl;\n}\nfunction findElementsInElements(elements = [], selector = '') {\n const found = [];\n elements.forEach(el => {\n found.push(...el.querySelectorAll(selector));\n });\n return found;\n}\nfunction elementChildren(element, selector = '') {\n return [...element.children].filter(el => el.matches(selector));\n}\nfunction createElement(tag, classes = []) {\n const el = document.createElement(tag);\n el.classList.add(...(Array.isArray(classes) ? classes : [classes]));\n return el;\n}\nfunction elementOffset(el) {\n const window = getWindow();\n const document = getDocument();\n const box = el.getBoundingClientRect();\n const body = document.body;\n const clientTop = el.clientTop || body.clientTop || 0;\n const clientLeft = el.clientLeft || body.clientLeft || 0;\n const scrollTop = el === window ? window.scrollY : el.scrollTop;\n const scrollLeft = el === window ? window.scrollX : el.scrollLeft;\n return {\n top: box.top + scrollTop - clientTop,\n left: box.left + scrollLeft - clientLeft\n };\n}\nfunction elementPrevAll(el, selector) {\n const prevEls = [];\n while (el.previousElementSibling) {\n const prev = el.previousElementSibling; // eslint-disable-line\n if (selector) {\n if (prev.matches(selector)) prevEls.push(prev);\n } else prevEls.push(prev);\n el = prev;\n }\n return prevEls;\n}\nfunction elementNextAll(el, selector) {\n const nextEls = [];\n while (el.nextElementSibling) {\n const next = el.nextElementSibling; // eslint-disable-line\n if (selector) {\n if (next.matches(selector)) nextEls.push(next);\n } else nextEls.push(next);\n el = next;\n }\n return nextEls;\n}\nfunction elementStyle(el, prop) {\n const window = getWindow();\n return window.getComputedStyle(el, null).getPropertyValue(prop);\n}\nfunction elementIndex(el) {\n let child = el;\n let i;\n if (child) {\n i = 0;\n // eslint-disable-next-line\n while ((child = child.previousSibling) !== null) {\n if (child.nodeType === 1) i += 1;\n }\n return i;\n }\n return undefined;\n}\nfunction elementParents(el, selector) {\n const parents = []; // eslint-disable-line\n let parent = el.parentElement; // eslint-disable-line\n while (parent) {\n if (selector) {\n if (parent.matches(selector)) parents.push(parent);\n } else {\n parents.push(parent);\n }\n parent = parent.parentElement;\n }\n return parents;\n}\nfunction elementTransitionEnd(el, callback) {\n function fireCallBack(e) {\n if (e.target !== el) return;\n callback.call(el, e);\n el.removeEventListener('transitionend', fireCallBack);\n }\n if (callback) {\n el.addEventListener('transitionend', fireCallBack);\n }\n}\nfunction elementOuterSize(el, size, includeMargins) {\n const window = getWindow();\n if (includeMargins) {\n 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'));\n }\n return el.offsetWidth;\n}\nexport { animateCSSModeScroll, deleteProps, nextTick, now, getTranslate, isObject, extend, getComputedStyle, setCSSProperty, getSlideTransformEl,\n// dom\nfindElementsInElements, createElement, elementChildren, elementOffset, elementPrevAll, elementNextAll, elementStyle, elementIndex, elementParents, elementTransitionEnd, elementOuterSize };","import { getWindow, getDocument } from 'ssr-window';\nlet support;\nfunction calcSupport() {\n const window = getWindow();\n const document = getDocument();\n return {\n smoothScroll: document.documentElement && document.documentElement.style && 'scrollBehavior' in document.documentElement.style,\n touch: !!('ontouchstart' in window || window.DocumentTouch && document instanceof window.DocumentTouch)\n };\n}\nfunction getSupport() {\n if (!support) {\n support = calcSupport();\n }\n return support;\n}\nexport { getSupport };","import { getWindow } from 'ssr-window';\nimport { getSupport } from './get-support.js';\nlet deviceCached;\nfunction calcDevice({\n userAgent\n} = {}) {\n const support = getSupport();\n const window = getWindow();\n const platform = window.navigator.platform;\n const ua = userAgent || window.navigator.userAgent;\n const device = {\n ios: false,\n android: false\n };\n const screenWidth = window.screen.width;\n const screenHeight = window.screen.height;\n const android = ua.match(/(Android);?[\\s\\/]+([\\d.]+)?/); // eslint-disable-line\n let ipad = ua.match(/(iPad).*OS\\s([\\d_]+)/);\n const ipod = ua.match(/(iPod)(.*OS\\s([\\d_]+))?/);\n const iphone = !ipad && ua.match(/(iPhone\\sOS|iOS)\\s([\\d_]+)/);\n const windows = platform === 'Win32';\n let macos = platform === 'MacIntel';\n\n // iPadOs 13 fix\n const iPadScreens = ['1024x1366', '1366x1024', '834x1194', '1194x834', '834x1112', '1112x834', '768x1024', '1024x768', '820x1180', '1180x820', '810x1080', '1080x810'];\n if (!ipad && macos && support.touch && iPadScreens.indexOf(`${screenWidth}x${screenHeight}`) >= 0) {\n ipad = ua.match(/(Version)\\/([\\d.]+)/);\n if (!ipad) ipad = [0, 1, '13_0_0'];\n macos = false;\n }\n\n // Android\n if (android && !windows) {\n device.os = 'android';\n device.android = true;\n }\n if (ipad || iphone || ipod) {\n device.os = 'ios';\n device.ios = true;\n }\n\n // Export object\n return device;\n}\nfunction getDevice(overrides = {}) {\n if (!deviceCached) {\n deviceCached = calcDevice(overrides);\n }\n return deviceCached;\n}\nexport { getDevice };","import { getWindow } from 'ssr-window';\nlet browser;\nfunction calcBrowser() {\n const window = getWindow();\n let needPerspectiveFix = false;\n function isSafari() {\n const ua = window.navigator.userAgent.toLowerCase();\n return ua.indexOf('safari') >= 0 && ua.indexOf('chrome') < 0 && ua.indexOf('android') < 0;\n }\n if (isSafari()) {\n const ua = String(window.navigator.userAgent);\n if (ua.includes('Version/')) {\n const [major, minor] = ua.split('Version/')[1].split(' ')[0].split('.').map(num => Number(num));\n needPerspectiveFix = major < 16 || major === 16 && minor < 2;\n }\n }\n return {\n isSafari: needPerspectiveFix || isSafari(),\n needPerspectiveFix,\n isWebView: /(iPhone|iPod|iPad).*AppleWebKit(?!.*Safari)/i.test(window.navigator.userAgent)\n };\n}\nfunction getBrowser() {\n if (!browser) {\n browser = calcBrowser();\n }\n return browser;\n}\nexport { getBrowser };","/* eslint-disable no-underscore-dangle */\n\nexport default {\n on(events, handler, priority) {\n const self = this;\n if (!self.eventsListeners || self.destroyed) return self;\n if (typeof handler !== 'function') return self;\n const method = priority ? 'unshift' : 'push';\n events.split(' ').forEach(event => {\n if (!self.eventsListeners[event]) self.eventsListeners[event] = [];\n self.eventsListeners[event][method](handler);\n });\n return self;\n },\n once(events, handler, priority) {\n const self = this;\n if (!self.eventsListeners || self.destroyed) return self;\n if (typeof handler !== 'function') return self;\n function onceHandler(...args) {\n self.off(events, onceHandler);\n if (onceHandler.__emitterProxy) {\n delete onceHandler.__emitterProxy;\n }\n handler.apply(self, args);\n }\n onceHandler.__emitterProxy = handler;\n return self.on(events, onceHandler, priority);\n },\n onAny(handler, priority) {\n const self = this;\n if (!self.eventsListeners || self.destroyed) return self;\n if (typeof handler !== 'function') return self;\n const method = priority ? 'unshift' : 'push';\n if (self.eventsAnyListeners.indexOf(handler) < 0) {\n self.eventsAnyListeners[method](handler);\n }\n return self;\n },\n offAny(handler) {\n const self = this;\n if (!self.eventsListeners || self.destroyed) return self;\n if (!self.eventsAnyListeners) return self;\n const index = self.eventsAnyListeners.indexOf(handler);\n if (index >= 0) {\n self.eventsAnyListeners.splice(index, 1);\n }\n return self;\n },\n off(events, handler) {\n const self = this;\n if (!self.eventsListeners || self.destroyed) return self;\n if (!self.eventsListeners) return self;\n events.split(' ').forEach(event => {\n if (typeof handler === 'undefined') {\n self.eventsListeners[event] = [];\n } else if (self.eventsListeners[event]) {\n self.eventsListeners[event].forEach((eventHandler, index) => {\n if (eventHandler === handler || eventHandler.__emitterProxy && eventHandler.__emitterProxy === handler) {\n self.eventsListeners[event].splice(index, 1);\n }\n });\n }\n });\n return self;\n },\n emit(...args) {\n const self = this;\n if (!self.eventsListeners || self.destroyed) return self;\n if (!self.eventsListeners) return self;\n let events;\n let data;\n let context;\n if (typeof args[0] === 'string' || Array.isArray(args[0])) {\n events = args[0];\n data = args.slice(1, args.length);\n context = self;\n } else {\n events = args[0].events;\n data = args[0].data;\n context = args[0].context || self;\n }\n data.unshift(context);\n const eventsArray = Array.isArray(events) ? events : events.split(' ');\n eventsArray.forEach(event => {\n if (self.eventsAnyListeners && self.eventsAnyListeners.length) {\n self.eventsAnyListeners.forEach(eventHandler => {\n eventHandler.apply(context, [event, ...data]);\n });\n }\n if (self.eventsListeners && self.eventsListeners[event]) {\n self.eventsListeners[event].forEach(eventHandler => {\n eventHandler.apply(context, data);\n });\n }\n });\n return self;\n }\n};","export const processLazyPreloader = (swiper, imageEl) => {\n if (!swiper || swiper.destroyed || !swiper.params) return;\n const slideSelector = () => swiper.isElement ? `swiper-slide` : `.${swiper.params.slideClass}`;\n const slideEl = imageEl.closest(slideSelector());\n if (slideEl) {\n const lazyEl = slideEl.querySelector(`.${swiper.params.lazyPreloaderClass}`);\n if (lazyEl) lazyEl.remove();\n }\n};\nconst unlazy = (swiper, index) => {\n if (!swiper.slides[index]) return;\n const imageEl = swiper.slides[index].querySelector('[loading=\"lazy\"]');\n if (imageEl) imageEl.removeAttribute('loading');\n};\nexport const preload = swiper => {\n if (!swiper || swiper.destroyed || !swiper.params) return;\n let amount = swiper.params.lazyPreloadPrevNext;\n const len = swiper.slides.length;\n if (!len || !amount || amount < 0) return;\n amount = Math.min(amount, len);\n const slidesPerView = swiper.params.slidesPerView === 'auto' ? swiper.slidesPerViewDynamic() : Math.ceil(swiper.params.slidesPerView);\n const activeIndex = swiper.activeIndex;\n if (swiper.params.grid && swiper.params.grid.rows > 1) {\n const activeColumn = activeIndex;\n const preloadColumns = [activeColumn - amount];\n preloadColumns.push(...Array.from({\n length: amount\n }).map((_, i) => {\n return activeColumn + slidesPerView + i;\n }));\n swiper.slides.forEach((slideEl, i) => {\n if (preloadColumns.includes(slideEl.column)) unlazy(swiper, i);\n });\n return;\n }\n const slideIndexLastInView = activeIndex + slidesPerView - 1;\n if (swiper.params.rewind || swiper.params.loop) {\n for (let i = activeIndex - amount; i <= slideIndexLastInView + amount; i += 1) {\n const realIndex = (i % len + len) % len;\n if (realIndex < activeIndex || realIndex > slideIndexLastInView) unlazy(swiper, realIndex);\n }\n } else {\n for (let i = Math.max(activeIndex - amount, 0); i <= Math.min(slideIndexLastInView + amount, len - 1); i += 1) {\n if (i !== activeIndex && (i > slideIndexLastInView || i < activeIndex)) {\n unlazy(swiper, i);\n }\n }\n }\n};","import updateSize from './updateSize.js';\nimport updateSlides from './updateSlides.js';\nimport updateAutoHeight from './updateAutoHeight.js';\nimport updateSlidesOffset from './updateSlidesOffset.js';\nimport updateSlidesProgress from './updateSlidesProgress.js';\nimport updateProgress from './updateProgress.js';\nimport updateSlidesClasses from './updateSlidesClasses.js';\nimport updateActiveIndex from './updateActiveIndex.js';\nimport updateClickedSlide from './updateClickedSlide.js';\nexport default {\n updateSize,\n updateSlides,\n updateAutoHeight,\n updateSlidesOffset,\n updateSlidesProgress,\n updateProgress,\n updateSlidesClasses,\n updateActiveIndex,\n updateClickedSlide\n};","import { elementStyle } from '../../shared/utils.js';\nexport default function updateSize() {\n const swiper = this;\n let width;\n let height;\n const el = swiper.el;\n if (typeof swiper.params.width !== 'undefined' && swiper.params.width !== null) {\n width = swiper.params.width;\n } else {\n width = el.clientWidth;\n }\n if (typeof swiper.params.height !== 'undefined' && swiper.params.height !== null) {\n height = swiper.params.height;\n } else {\n height = el.clientHeight;\n }\n if (width === 0 && swiper.isHorizontal() || height === 0 && swiper.isVertical()) {\n return;\n }\n\n // Subtract paddings\n width = width - parseInt(elementStyle(el, 'padding-left') || 0, 10) - parseInt(elementStyle(el, 'padding-right') || 0, 10);\n height = height - parseInt(elementStyle(el, 'padding-top') || 0, 10) - parseInt(elementStyle(el, 'padding-bottom') || 0, 10);\n if (Number.isNaN(width)) width = 0;\n if (Number.isNaN(height)) height = 0;\n Object.assign(swiper, {\n width,\n height,\n size: swiper.isHorizontal() ? width : height\n });\n}","import { elementChildren, elementOuterSize, elementStyle, setCSSProperty } from '../../shared/utils.js';\nexport default function updateSlides() {\n const swiper = this;\n function getDirectionLabel(property) {\n if (swiper.isHorizontal()) {\n return property;\n }\n // prettier-ignore\n return {\n 'width': 'height',\n 'margin-top': 'margin-left',\n 'margin-bottom ': 'margin-right',\n 'margin-left': 'margin-top',\n 'margin-right': 'margin-bottom',\n 'padding-left': 'padding-top',\n 'padding-right': 'padding-bottom',\n 'marginRight': 'marginBottom'\n }[property];\n }\n function getDirectionPropertyValue(node, label) {\n return parseFloat(node.getPropertyValue(getDirectionLabel(label)) || 0);\n }\n const params = swiper.params;\n const {\n wrapperEl,\n slidesEl,\n size: swiperSize,\n rtlTranslate: rtl,\n wrongRTL\n } = swiper;\n const isVirtual = swiper.virtual && params.virtual.enabled;\n const previousSlidesLength = isVirtual ? swiper.virtual.slides.length : swiper.slides.length;\n const slides = elementChildren(slidesEl, `.${swiper.params.slideClass}, swiper-slide`);\n const slidesLength = isVirtual ? swiper.virtual.slides.length : slides.length;\n let snapGrid = [];\n const slidesGrid = [];\n const slidesSizesGrid = [];\n let offsetBefore = params.slidesOffsetBefore;\n if (typeof offsetBefore === 'function') {\n offsetBefore = params.slidesOffsetBefore.call(swiper);\n }\n let offsetAfter = params.slidesOffsetAfter;\n if (typeof offsetAfter === 'function') {\n offsetAfter = params.slidesOffsetAfter.call(swiper);\n }\n const previousSnapGridLength = swiper.snapGrid.length;\n const previousSlidesGridLength = swiper.slidesGrid.length;\n let spaceBetween = params.spaceBetween;\n let slidePosition = -offsetBefore;\n let prevSlideSize = 0;\n let index = 0;\n if (typeof swiperSize === 'undefined') {\n return;\n }\n if (typeof spaceBetween === 'string' && spaceBetween.indexOf('%') >= 0) {\n spaceBetween = parseFloat(spaceBetween.replace('%', '')) / 100 * swiperSize;\n } else if (typeof spaceBetween === 'string') {\n spaceBetween = parseFloat(spaceBetween);\n }\n swiper.virtualSize = -spaceBetween;\n\n // reset margins\n slides.forEach(slideEl => {\n if (rtl) {\n slideEl.style.marginLeft = '';\n } else {\n slideEl.style.marginRight = '';\n }\n slideEl.style.marginBottom = '';\n slideEl.style.marginTop = '';\n });\n\n // reset cssMode offsets\n if (params.centeredSlides && params.cssMode) {\n setCSSProperty(wrapperEl, '--swiper-centered-offset-before', '');\n setCSSProperty(wrapperEl, '--swiper-centered-offset-after', '');\n }\n const gridEnabled = params.grid && params.grid.rows > 1 && swiper.grid;\n if (gridEnabled) {\n swiper.grid.initSlides(slidesLength);\n }\n\n // Calc slides\n let slideSize;\n const shouldResetSlideSize = params.slidesPerView === 'auto' && params.breakpoints && Object.keys(params.breakpoints).filter(key => {\n return typeof params.breakpoints[key].slidesPerView !== 'undefined';\n }).length > 0;\n for (let i = 0; i < slidesLength; i += 1) {\n slideSize = 0;\n let slide;\n if (slides[i]) slide = slides[i];\n if (gridEnabled) {\n swiper.grid.updateSlide(i, slide, slidesLength, getDirectionLabel);\n }\n if (slides[i] && elementStyle(slide, 'display') === 'none') continue; // eslint-disable-line\n\n if (params.slidesPerView === 'auto') {\n if (shouldResetSlideSize) {\n slides[i].style[getDirectionLabel('width')] = ``;\n }\n const slideStyles = getComputedStyle(slide);\n const currentTransform = slide.style.transform;\n const currentWebKitTransform = slide.style.webkitTransform;\n if (currentTransform) {\n slide.style.transform = 'none';\n }\n if (currentWebKitTransform) {\n slide.style.webkitTransform = 'none';\n }\n if (params.roundLengths) {\n slideSize = swiper.isHorizontal() ? elementOuterSize(slide, 'width', true) : elementOuterSize(slide, 'height', true);\n } else {\n // eslint-disable-next-line\n const width = getDirectionPropertyValue(slideStyles, 'width');\n const paddingLeft = getDirectionPropertyValue(slideStyles, 'padding-left');\n const paddingRight = getDirectionPropertyValue(slideStyles, 'padding-right');\n const marginLeft = getDirectionPropertyValue(slideStyles, 'margin-left');\n const marginRight = getDirectionPropertyValue(slideStyles, 'margin-right');\n const boxSizing = slideStyles.getPropertyValue('box-sizing');\n if (boxSizing && boxSizing === 'border-box') {\n slideSize = width + marginLeft + marginRight;\n } else {\n const {\n clientWidth,\n offsetWidth\n } = slide;\n slideSize = width + paddingLeft + paddingRight + marginLeft + marginRight + (offsetWidth - clientWidth);\n }\n }\n if (currentTransform) {\n slide.style.transform = currentTransform;\n }\n if (currentWebKitTransform) {\n slide.style.webkitTransform = currentWebKitTransform;\n }\n if (params.roundLengths) slideSize = Math.floor(slideSize);\n } else {\n slideSize = (swiperSize - (params.slidesPerView - 1) * spaceBetween) / params.slidesPerView;\n if (params.roundLengths) slideSize = Math.floor(slideSize);\n if (slides[i]) {\n slides[i].style[getDirectionLabel('width')] = `${slideSize}px`;\n }\n }\n if (slides[i]) {\n slides[i].swiperSlideSize = slideSize;\n }\n slidesSizesGrid.push(slideSize);\n if (params.centeredSlides) {\n slidePosition = slidePosition + slideSize / 2 + prevSlideSize / 2 + spaceBetween;\n if (prevSlideSize === 0 && i !== 0) slidePosition = slidePosition - swiperSize / 2 - spaceBetween;\n if (i === 0) slidePosition = slidePosition - swiperSize / 2 - spaceBetween;\n if (Math.abs(slidePosition) < 1 / 1000) slidePosition = 0;\n if (params.roundLengths) slidePosition = Math.floor(slidePosition);\n if (index % params.slidesPerGroup === 0) snapGrid.push(slidePosition);\n slidesGrid.push(slidePosition);\n } else {\n if (params.roundLengths) slidePosition = Math.floor(slidePosition);\n if ((index - Math.min(swiper.params.slidesPerGroupSkip, index)) % swiper.params.slidesPerGroup === 0) snapGrid.push(slidePosition);\n slidesGrid.push(slidePosition);\n slidePosition = slidePosition + slideSize + spaceBetween;\n }\n swiper.virtualSize += slideSize + spaceBetween;\n prevSlideSize = slideSize;\n index += 1;\n }\n swiper.virtualSize = Math.max(swiper.virtualSize, swiperSize) + offsetAfter;\n if (rtl && wrongRTL && (params.effect === 'slide' || params.effect === 'coverflow')) {\n wrapperEl.style.width = `${swiper.virtualSize + spaceBetween}px`;\n }\n if (params.setWrapperSize) {\n wrapperEl.style[getDirectionLabel('width')] = `${swiper.virtualSize + spaceBetween}px`;\n }\n if (gridEnabled) {\n swiper.grid.updateWrapperSize(slideSize, snapGrid, getDirectionLabel);\n }\n\n // Remove last grid elements depending on width\n if (!params.centeredSlides) {\n const newSlidesGrid = [];\n for (let i = 0; i < snapGrid.length; i += 1) {\n let slidesGridItem = snapGrid[i];\n if (params.roundLengths) slidesGridItem = Math.floor(slidesGridItem);\n if (snapGrid[i] <= swiper.virtualSize - swiperSize) {\n newSlidesGrid.push(slidesGridItem);\n }\n }\n snapGrid = newSlidesGrid;\n if (Math.floor(swiper.virtualSize - swiperSize) - Math.floor(snapGrid[snapGrid.length - 1]) > 1) {\n snapGrid.push(swiper.virtualSize - swiperSize);\n }\n }\n if (isVirtual && params.loop) {\n const size = slidesSizesGrid[0] + spaceBetween;\n if (params.slidesPerGroup > 1) {\n const groups = Math.ceil((swiper.virtual.slidesBefore + swiper.virtual.slidesAfter) / params.slidesPerGroup);\n const groupSize = size * params.slidesPerGroup;\n for (let i = 0; i < groups; i += 1) {\n snapGrid.push(snapGrid[snapGrid.length - 1] + groupSize);\n }\n }\n for (let i = 0; i < swiper.virtual.slidesBefore + swiper.virtual.slidesAfter; i += 1) {\n if (params.slidesPerGroup === 1) {\n snapGrid.push(snapGrid[snapGrid.length - 1] + size);\n }\n slidesGrid.push(slidesGrid[slidesGrid.length - 1] + size);\n swiper.virtualSize += size;\n }\n }\n if (snapGrid.length === 0) snapGrid = [0];\n if (spaceBetween !== 0) {\n const key = swiper.isHorizontal() && rtl ? 'marginLeft' : getDirectionLabel('marginRight');\n slides.filter((_, slideIndex) => {\n if (!params.cssMode || params.loop) return true;\n if (slideIndex === slides.length - 1) {\n return false;\n }\n return true;\n }).forEach(slideEl => {\n slideEl.style[key] = `${spaceBetween}px`;\n });\n }\n if (params.centeredSlides && params.centeredSlidesBounds) {\n let allSlidesSize = 0;\n slidesSizesGrid.forEach(slideSizeValue => {\n allSlidesSize += slideSizeValue + (spaceBetween || 0);\n });\n allSlidesSize -= spaceBetween;\n const maxSnap = allSlidesSize - swiperSize;\n snapGrid = snapGrid.map(snap => {\n if (snap <= 0) return -offsetBefore;\n if (snap > maxSnap) return maxSnap + offsetAfter;\n return snap;\n });\n }\n if (params.centerInsufficientSlides) {\n let allSlidesSize = 0;\n slidesSizesGrid.forEach(slideSizeValue => {\n allSlidesSize += slideSizeValue + (spaceBetween || 0);\n });\n allSlidesSize -= spaceBetween;\n if (allSlidesSize < swiperSize) {\n const allSlidesOffset = (swiperSize - allSlidesSize) / 2;\n snapGrid.forEach((snap, snapIndex) => {\n snapGrid[snapIndex] = snap - allSlidesOffset;\n });\n slidesGrid.forEach((snap, snapIndex) => {\n slidesGrid[snapIndex] = snap + allSlidesOffset;\n });\n }\n }\n Object.assign(swiper, {\n slides,\n snapGrid,\n slidesGrid,\n slidesSizesGrid\n });\n if (params.centeredSlides && params.cssMode && !params.centeredSlidesBounds) {\n setCSSProperty(wrapperEl, '--swiper-centered-offset-before', `${-snapGrid[0]}px`);\n setCSSProperty(wrapperEl, '--swiper-centered-offset-after', `${swiper.size / 2 - slidesSizesGrid[slidesSizesGrid.length - 1] / 2}px`);\n const addToSnapGrid = -swiper.snapGrid[0];\n const addToSlidesGrid = -swiper.slidesGrid[0];\n swiper.snapGrid = swiper.snapGrid.map(v => v + addToSnapGrid);\n swiper.slidesGrid = swiper.slidesGrid.map(v => v + addToSlidesGrid);\n }\n if (slidesLength !== previousSlidesLength) {\n swiper.emit('slidesLengthChange');\n }\n if (snapGrid.length !== previousSnapGridLength) {\n if (swiper.params.watchOverflow) swiper.checkOverflow();\n swiper.emit('snapGridLengthChange');\n }\n if (slidesGrid.length !== previousSlidesGridLength) {\n swiper.emit('slidesGridLengthChange');\n }\n if (params.watchSlidesProgress) {\n swiper.updateSlidesOffset();\n }\n if (!isVirtual && !params.cssMode && (params.effect === 'slide' || params.effect === 'fade')) {\n const backFaceHiddenClass = `${params.containerModifierClass}backface-hidden`;\n const hasClassBackfaceClassAdded = swiper.el.classList.contains(backFaceHiddenClass);\n if (slidesLength <= params.maxBackfaceHiddenSlides) {\n if (!hasClassBackfaceClassAdded) swiper.el.classList.add(backFaceHiddenClass);\n } else if (hasClassBackfaceClassAdded) {\n swiper.el.classList.remove(backFaceHiddenClass);\n }\n }\n}","export default function updateAutoHeight(speed) {\n const swiper = this;\n const activeSlides = [];\n const isVirtual = swiper.virtual && swiper.params.virtual.enabled;\n let newHeight = 0;\n let i;\n if (typeof speed === 'number') {\n swiper.setTransition(speed);\n } else if (speed === true) {\n swiper.setTransition(swiper.params.speed);\n }\n const getSlideByIndex = index => {\n if (isVirtual) {\n return swiper.slides[swiper.getSlideIndexByData(index)];\n }\n return swiper.slides[index];\n };\n // Find slides currently in view\n if (swiper.params.slidesPerView !== 'auto' && swiper.params.slidesPerView > 1) {\n if (swiper.params.centeredSlides) {\n (swiper.visibleSlides || []).forEach(slide => {\n activeSlides.push(slide);\n });\n } else {\n for (i = 0; i < Math.ceil(swiper.params.slidesPerView); i += 1) {\n const index = swiper.activeIndex + i;\n if (index > swiper.slides.length && !isVirtual) break;\n activeSlides.push(getSlideByIndex(index));\n }\n }\n } else {\n activeSlides.push(getSlideByIndex(swiper.activeIndex));\n }\n\n // Find new height from highest slide in view\n for (i = 0; i < activeSlides.length; i += 1) {\n if (typeof activeSlides[i] !== 'undefined') {\n const height = activeSlides[i].offsetHeight;\n newHeight = height > newHeight ? height : newHeight;\n }\n }\n\n // Update Height\n if (newHeight || newHeight === 0) swiper.wrapperEl.style.height = `${newHeight}px`;\n}","export default function updateSlidesOffset() {\n const swiper = this;\n const slides = swiper.slides;\n // eslint-disable-next-line\n const minusOffset = swiper.isElement ? swiper.isHorizontal() ? swiper.wrapperEl.offsetLeft : swiper.wrapperEl.offsetTop : 0;\n for (let i = 0; i < slides.length; i += 1) {\n slides[i].swiperSlideOffset = (swiper.isHorizontal() ? slides[i].offsetLeft : slides[i].offsetTop) - minusOffset - swiper.cssOverflowAdjustment();\n }\n}","export default function updateSlidesProgress(translate = this && this.translate || 0) {\n const swiper = this;\n const params = swiper.params;\n const {\n slides,\n rtlTranslate: rtl,\n snapGrid\n } = swiper;\n if (slides.length === 0) return;\n if (typeof slides[0].swiperSlideOffset === 'undefined') swiper.updateSlidesOffset();\n let offsetCenter = -translate;\n if (rtl) offsetCenter = translate;\n\n // Visible Slides\n slides.forEach(slideEl => {\n slideEl.classList.remove(params.slideVisibleClass);\n });\n swiper.visibleSlidesIndexes = [];\n swiper.visibleSlides = [];\n let spaceBetween = params.spaceBetween;\n if (typeof spaceBetween === 'string' && spaceBetween.indexOf('%') >= 0) {\n spaceBetween = parseFloat(spaceBetween.replace('%', '')) / 100 * swiper.size;\n } else if (typeof spaceBetween === 'string') {\n spaceBetween = parseFloat(spaceBetween);\n }\n for (let i = 0; i < slides.length; i += 1) {\n const slide = slides[i];\n let slideOffset = slide.swiperSlideOffset;\n if (params.cssMode && params.centeredSlides) {\n slideOffset -= slides[0].swiperSlideOffset;\n }\n const slideProgress = (offsetCenter + (params.centeredSlides ? swiper.minTranslate() : 0) - slideOffset) / (slide.swiperSlideSize + spaceBetween);\n const originalSlideProgress = (offsetCenter - snapGrid[0] + (params.centeredSlides ? swiper.minTranslate() : 0) - slideOffset) / (slide.swiperSlideSize + spaceBetween);\n const slideBefore = -(offsetCenter - slideOffset);\n const slideAfter = slideBefore + swiper.slidesSizesGrid[i];\n const isVisible = slideBefore >= 0 && slideBefore < swiper.size - 1 || slideAfter > 1 && slideAfter <= swiper.size || slideBefore <= 0 && slideAfter >= swiper.size;\n if (isVisible) {\n swiper.visibleSlides.push(slide);\n swiper.visibleSlidesIndexes.push(i);\n slides[i].classList.add(params.slideVisibleClass);\n }\n slide.progress = rtl ? -slideProgress : slideProgress;\n slide.originalProgress = rtl ? -originalSlideProgress : originalSlideProgress;\n }\n}","export default function updateProgress(translate) {\n const swiper = this;\n if (typeof translate === 'undefined') {\n const multiplier = swiper.rtlTranslate ? -1 : 1;\n // eslint-disable-next-line\n translate = swiper && swiper.translate && swiper.translate * multiplier || 0;\n }\n const params = swiper.params;\n const translatesDiff = swiper.maxTranslate() - swiper.minTranslate();\n let {\n progress,\n isBeginning,\n isEnd,\n progressLoop\n } = swiper;\n const wasBeginning = isBeginning;\n const wasEnd = isEnd;\n if (translatesDiff === 0) {\n progress = 0;\n isBeginning = true;\n isEnd = true;\n } else {\n progress = (translate - swiper.minTranslate()) / translatesDiff;\n const isBeginningRounded = Math.abs(translate - swiper.minTranslate()) < 1;\n const isEndRounded = Math.abs(translate - swiper.maxTranslate()) < 1;\n isBeginning = isBeginningRounded || progress <= 0;\n isEnd = isEndRounded || progress >= 1;\n if (isBeginningRounded) progress = 0;\n if (isEndRounded) progress = 1;\n }\n if (params.loop) {\n const firstSlideIndex = swiper.getSlideIndexByData(0);\n const lastSlideIndex = swiper.getSlideIndexByData(swiper.slides.length - 1);\n const firstSlideTranslate = swiper.slidesGrid[firstSlideIndex];\n const lastSlideTranslate = swiper.slidesGrid[lastSlideIndex];\n const translateMax = swiper.slidesGrid[swiper.slidesGrid.length - 1];\n const translateAbs = Math.abs(translate);\n if (translateAbs >= firstSlideTranslate) {\n progressLoop = (translateAbs - firstSlideTranslate) / translateMax;\n } else {\n progressLoop = (translateAbs + translateMax - lastSlideTranslate) / translateMax;\n }\n if (progressLoop > 1) progressLoop -= 1;\n }\n Object.assign(swiper, {\n progress,\n progressLoop,\n isBeginning,\n isEnd\n });\n if (params.watchSlidesProgress || params.centeredSlides && params.autoHeight) swiper.updateSlidesProgress(translate);\n if (isBeginning && !wasBeginning) {\n swiper.emit('reachBeginning toEdge');\n }\n if (isEnd && !wasEnd) {\n swiper.emit('reachEnd toEdge');\n }\n if (wasBeginning && !isBeginning || wasEnd && !isEnd) {\n swiper.emit('fromEdge');\n }\n swiper.emit('progress', progress);\n}","import { elementChildren, elementNextAll, elementPrevAll } from '../../shared/utils.js';\nexport default function updateSlidesClasses() {\n const swiper = this;\n const {\n slides,\n params,\n slidesEl,\n activeIndex\n } = swiper;\n const isVirtual = swiper.virtual && params.virtual.enabled;\n const getFilteredSlide = selector => {\n return elementChildren(slidesEl, `.${params.slideClass}${selector}, swiper-slide${selector}`)[0];\n };\n slides.forEach(slideEl => {\n slideEl.classList.remove(params.slideActiveClass, params.slideNextClass, params.slidePrevClass);\n });\n let activeSlide;\n if (isVirtual) {\n if (params.loop) {\n let slideIndex = activeIndex - swiper.virtual.slidesBefore;\n if (slideIndex < 0) slideIndex = swiper.virtual.slides.length + slideIndex;\n if (slideIndex >= swiper.virtual.slides.length) slideIndex -= swiper.virtual.slides.length;\n activeSlide = getFilteredSlide(`[data-swiper-slide-index=\"${slideIndex}\"]`);\n } else {\n activeSlide = getFilteredSlide(`[data-swiper-slide-index=\"${activeIndex}\"]`);\n }\n } else {\n activeSlide = slides[activeIndex];\n }\n if (activeSlide) {\n // Active classes\n activeSlide.classList.add(params.slideActiveClass);\n\n // Next Slide\n let nextSlide = elementNextAll(activeSlide, `.${params.slideClass}, swiper-slide`)[0];\n if (params.loop && !nextSlide) {\n nextSlide = slides[0];\n }\n if (nextSlide) {\n nextSlide.classList.add(params.slideNextClass);\n }\n // Prev Slide\n let prevSlide = elementPrevAll(activeSlide, `.${params.slideClass}, swiper-slide`)[0];\n if (params.loop && !prevSlide === 0) {\n prevSlide = slides[slides.length - 1];\n }\n if (prevSlide) {\n prevSlide.classList.add(params.slidePrevClass);\n }\n }\n swiper.emitSlidesClasses();\n}","import { preload } from '../../shared/process-lazy-preloader.js';\nexport function getActiveIndexByTranslate(swiper) {\n const {\n slidesGrid,\n params\n } = swiper;\n const translate = swiper.rtlTranslate ? swiper.translate : -swiper.translate;\n let activeIndex;\n for (let i = 0; i < slidesGrid.length; i += 1) {\n if (typeof slidesGrid[i + 1] !== 'undefined') {\n if (translate >= slidesGrid[i] && translate < slidesGrid[i + 1] - (slidesGrid[i + 1] - slidesGrid[i]) / 2) {\n activeIndex = i;\n } else if (translate >= slidesGrid[i] && translate < slidesGrid[i + 1]) {\n activeIndex = i + 1;\n }\n } else if (translate >= slidesGrid[i]) {\n activeIndex = i;\n }\n }\n // Normalize slideIndex\n if (params.normalizeSlideIndex) {\n if (activeIndex < 0 || typeof activeIndex === 'undefined') activeIndex = 0;\n }\n return activeIndex;\n}\nexport default function updateActiveIndex(newActiveIndex) {\n const swiper = this;\n const translate = swiper.rtlTranslate ? swiper.translate : -swiper.translate;\n const {\n snapGrid,\n params,\n activeIndex: previousIndex,\n realIndex: previousRealIndex,\n snapIndex: previousSnapIndex\n } = swiper;\n let activeIndex = newActiveIndex;\n let snapIndex;\n const getVirtualRealIndex = aIndex => {\n let realIndex = aIndex - swiper.virtual.slidesBefore;\n if (realIndex < 0) {\n realIndex = swiper.virtual.slides.length + realIndex;\n }\n if (realIndex >= swiper.virtual.slides.length) {\n realIndex -= swiper.virtual.slides.length;\n }\n return realIndex;\n };\n if (typeof activeIndex === 'undefined') {\n activeIndex = getActiveIndexByTranslate(swiper);\n }\n if (snapGrid.indexOf(translate) >= 0) {\n snapIndex = snapGrid.indexOf(translate);\n } else {\n const skip = Math.min(params.slidesPerGroupSkip, activeIndex);\n snapIndex = skip + Math.floor((activeIndex - skip) / params.slidesPerGroup);\n }\n if (snapIndex >= snapGrid.length) snapIndex = snapGrid.length - 1;\n if (activeIndex === previousIndex) {\n if (snapIndex !== previousSnapIndex) {\n swiper.snapIndex = snapIndex;\n swiper.emit('snapIndexChange');\n }\n if (swiper.params.loop && swiper.virtual && swiper.params.virtual.enabled) {\n swiper.realIndex = getVirtualRealIndex(activeIndex);\n }\n return;\n }\n // Get real index\n let realIndex;\n if (swiper.virtual && params.virtual.enabled && params.loop) {\n realIndex = getVirtualRealIndex(activeIndex);\n } else if (swiper.slides[activeIndex]) {\n realIndex = parseInt(swiper.slides[activeIndex].getAttribute('data-swiper-slide-index') || activeIndex, 10);\n } else {\n realIndex = activeIndex;\n }\n Object.assign(swiper, {\n previousSnapIndex,\n snapIndex,\n previousRealIndex,\n realIndex,\n previousIndex,\n activeIndex\n });\n if (swiper.initialized) {\n preload(swiper);\n }\n swiper.emit('activeIndexChange');\n swiper.emit('snapIndexChange');\n if (previousRealIndex !== realIndex) {\n swiper.emit('realIndexChange');\n }\n if (swiper.initialized || swiper.params.runCallbacksOnInit) {\n swiper.emit('slideChange');\n }\n}","export default function updateClickedSlide(e) {\n const swiper = this;\n const params = swiper.params;\n const slide = e.closest(`.${params.slideClass}, swiper-slide`);\n let slideFound = false;\n let slideIndex;\n if (slide) {\n for (let i = 0; i < swiper.slides.length; i += 1) {\n if (swiper.slides[i] === slide) {\n slideFound = true;\n slideIndex = i;\n break;\n }\n }\n }\n if (slide && slideFound) {\n swiper.clickedSlide = slide;\n if (swiper.virtual && swiper.params.virtual.enabled) {\n swiper.clickedIndex = parseInt(slide.getAttribute('data-swiper-slide-index'), 10);\n } else {\n swiper.clickedIndex = slideIndex;\n }\n } else {\n swiper.clickedSlide = undefined;\n swiper.clickedIndex = undefined;\n return;\n }\n if (params.slideToClickedSlide && swiper.clickedIndex !== undefined && swiper.clickedIndex !== swiper.activeIndex) {\n swiper.slideToClickedSlide();\n }\n}","import getTranslate from './getTranslate.js';\nimport setTranslate from './setTranslate.js';\nimport minTranslate from './minTranslate.js';\nimport maxTranslate from './maxTranslate.js';\nimport translateTo from './translateTo.js';\nexport default {\n getTranslate,\n setTranslate,\n minTranslate,\n maxTranslate,\n translateTo\n};","import { getTranslate } from '../../shared/utils.js';\nexport default function getSwiperTranslate(axis = this.isHorizontal() ? 'x' : 'y') {\n const swiper = this;\n const {\n params,\n rtlTranslate: rtl,\n translate,\n wrapperEl\n } = swiper;\n if (params.virtualTranslate) {\n return rtl ? -translate : translate;\n }\n if (params.cssMode) {\n return translate;\n }\n let currentTranslate = getTranslate(wrapperEl, axis);\n currentTranslate += swiper.cssOverflowAdjustment();\n if (rtl) currentTranslate = -currentTranslate;\n return currentTranslate || 0;\n}","export default function setTranslate(translate, byController) {\n const swiper = this;\n const {\n rtlTranslate: rtl,\n params,\n wrapperEl,\n progress\n } = swiper;\n let x = 0;\n let y = 0;\n const z = 0;\n if (swiper.isHorizontal()) {\n x = rtl ? -translate : translate;\n } else {\n y = translate;\n }\n if (params.roundLengths) {\n x = Math.floor(x);\n y = Math.floor(y);\n }\n swiper.previousTranslate = swiper.translate;\n swiper.translate = swiper.isHorizontal() ? x : y;\n if (params.cssMode) {\n wrapperEl[swiper.isHorizontal() ? 'scrollLeft' : 'scrollTop'] = swiper.isHorizontal() ? -x : -y;\n } else if (!params.virtualTranslate) {\n if (swiper.isHorizontal()) {\n x -= swiper.cssOverflowAdjustment();\n } else {\n y -= swiper.cssOverflowAdjustment();\n }\n wrapperEl.style.transform = `translate3d(${x}px, ${y}px, ${z}px)`;\n }\n\n // Check if we need to update progress\n let newProgress;\n const translatesDiff = swiper.maxTranslate() - swiper.minTranslate();\n if (translatesDiff === 0) {\n newProgress = 0;\n } else {\n newProgress = (translate - swiper.minTranslate()) / translatesDiff;\n }\n if (newProgress !== progress) {\n swiper.updateProgress(translate);\n }\n swiper.emit('setTranslate', swiper.translate, byController);\n}","export default function minTranslate() {\n return -this.snapGrid[0];\n}","export default function maxTranslate() {\n return -this.snapGrid[this.snapGrid.length - 1];\n}","import { animateCSSModeScroll } from '../../shared/utils.js';\nexport default function translateTo(translate = 0, speed = this.params.speed, runCallbacks = true, translateBounds = true, internal) {\n const swiper = this;\n const {\n params,\n wrapperEl\n } = swiper;\n if (swiper.animating && params.preventInteractionOnTransition) {\n return false;\n }\n const minTranslate = swiper.minTranslate();\n const maxTranslate = swiper.maxTranslate();\n let newTranslate;\n if (translateBounds && translate > minTranslate) newTranslate = minTranslate;else if (translateBounds && translate < maxTranslate) newTranslate = maxTranslate;else newTranslate = translate;\n\n // Update progress\n swiper.updateProgress(newTranslate);\n if (params.cssMode) {\n const isH = swiper.isHorizontal();\n if (speed === 0) {\n wrapperEl[isH ? 'scrollLeft' : 'scrollTop'] = -newTranslate;\n } else {\n if (!swiper.support.smoothScroll) {\n animateCSSModeScroll({\n swiper,\n targetPosition: -newTranslate,\n side: isH ? 'left' : 'top'\n });\n return true;\n }\n wrapperEl.scrollTo({\n [isH ? 'left' : 'top']: -newTranslate,\n behavior: 'smooth'\n });\n }\n return true;\n }\n if (speed === 0) {\n swiper.setTransition(0);\n swiper.setTranslate(newTranslate);\n if (runCallbacks) {\n swiper.emit('beforeTransitionStart', speed, internal);\n swiper.emit('transitionEnd');\n }\n } else {\n swiper.setTransition(speed);\n swiper.setTranslate(newTranslate);\n if (runCallbacks) {\n swiper.emit('beforeTransitionStart', speed, internal);\n swiper.emit('transitionStart');\n }\n if (!swiper.animating) {\n swiper.animating = true;\n if (!swiper.onTranslateToWrapperTransitionEnd) {\n swiper.onTranslateToWrapperTransitionEnd = function transitionEnd(e) {\n if (!swiper || swiper.destroyed) return;\n if (e.target !== this) return;\n swiper.wrapperEl.removeEventListener('transitionend', swiper.onTranslateToWrapperTransitionEnd);\n swiper.onTranslateToWrapperTransitionEnd = null;\n delete swiper.onTranslateToWrapperTransitionEnd;\n if (runCallbacks) {\n swiper.emit('transitionEnd');\n }\n };\n }\n swiper.wrapperEl.addEventListener('transitionend', swiper.onTranslateToWrapperTransitionEnd);\n }\n }\n return true;\n}","export default function transitionEmit({\n swiper,\n runCallbacks,\n direction,\n step\n}) {\n const {\n activeIndex,\n previousIndex\n } = swiper;\n let dir = direction;\n if (!dir) {\n if (activeIndex > previousIndex) dir = 'next';else if (activeIndex < previousIndex) dir = 'prev';else dir = 'reset';\n }\n swiper.emit(`transition${step}`);\n if (runCallbacks && activeIndex !== previousIndex) {\n if (dir === 'reset') {\n swiper.emit(`slideResetTransition${step}`);\n return;\n }\n swiper.emit(`slideChangeTransition${step}`);\n if (dir === 'next') {\n swiper.emit(`slideNextTransition${step}`);\n } else {\n swiper.emit(`slidePrevTransition${step}`);\n }\n }\n}","import slideTo from './slideTo.js';\nimport slideToLoop from './slideToLoop.js';\nimport slideNext from './slideNext.js';\nimport slidePrev from './slidePrev.js';\nimport slideReset from './slideReset.js';\nimport slideToClosest from './slideToClosest.js';\nimport slideToClickedSlide from './slideToClickedSlide.js';\nexport default {\n slideTo,\n slideToLoop,\n slideNext,\n slidePrev,\n slideReset,\n slideToClosest,\n slideToClickedSlide\n};","import { animateCSSModeScroll } from '../../shared/utils.js';\nexport default function slideTo(index = 0, speed = this.params.speed, runCallbacks = true, internal, initial) {\n if (typeof index === 'string') {\n index = parseInt(index, 10);\n }\n const swiper = this;\n let slideIndex = index;\n if (slideIndex < 0) slideIndex = 0;\n const {\n params,\n snapGrid,\n slidesGrid,\n previousIndex,\n activeIndex,\n rtlTranslate: rtl,\n wrapperEl,\n enabled\n } = swiper;\n if (swiper.animating && params.preventInteractionOnTransition || !enabled && !internal && !initial) {\n return false;\n }\n const skip = Math.min(swiper.params.slidesPerGroupSkip, slideIndex);\n let snapIndex = skip + Math.floor((slideIndex - skip) / swiper.params.slidesPerGroup);\n if (snapIndex >= snapGrid.length) snapIndex = snapGrid.length - 1;\n const translate = -snapGrid[snapIndex];\n // Normalize slideIndex\n if (params.normalizeSlideIndex) {\n for (let i = 0; i < slidesGrid.length; i += 1) {\n const normalizedTranslate = -Math.floor(translate * 100);\n const normalizedGrid = Math.floor(slidesGrid[i] * 100);\n const normalizedGridNext = Math.floor(slidesGrid[i + 1] * 100);\n if (typeof slidesGrid[i + 1] !== 'undefined') {\n if (normalizedTranslate >= normalizedGrid && normalizedTranslate < normalizedGridNext - (normalizedGridNext - normalizedGrid) / 2) {\n slideIndex = i;\n } else if (normalizedTranslate >= normalizedGrid && normalizedTranslate < normalizedGridNext) {\n slideIndex = i + 1;\n }\n } else if (normalizedTranslate >= normalizedGrid) {\n slideIndex = i;\n }\n }\n }\n // Directions locks\n if (swiper.initialized && slideIndex !== activeIndex) {\n if (!swiper.allowSlideNext && (rtl ? translate > swiper.translate && translate > swiper.minTranslate() : translate < swiper.translate && translate < swiper.minTranslate())) {\n return false;\n }\n if (!swiper.allowSlidePrev && translate > swiper.translate && translate > swiper.maxTranslate()) {\n if ((activeIndex || 0) !== slideIndex) {\n return false;\n }\n }\n }\n if (slideIndex !== (previousIndex || 0) && runCallbacks) {\n swiper.emit('beforeSlideChangeStart');\n }\n\n // Update progress\n swiper.updateProgress(translate);\n let direction;\n if (slideIndex > activeIndex) direction = 'next';else if (slideIndex < activeIndex) direction = 'prev';else direction = 'reset';\n\n // Update Index\n if (rtl && -translate === swiper.translate || !rtl && translate === swiper.translate) {\n swiper.updateActiveIndex(slideIndex);\n // Update Height\n if (params.autoHeight) {\n swiper.updateAutoHeight();\n }\n swiper.updateSlidesClasses();\n if (params.effect !== 'slide') {\n swiper.setTranslate(translate);\n }\n if (direction !== 'reset') {\n swiper.transitionStart(runCallbacks, direction);\n swiper.transitionEnd(runCallbacks, direction);\n }\n return false;\n }\n if (params.cssMode) {\n const isH = swiper.isHorizontal();\n const t = rtl ? translate : -translate;\n if (speed === 0) {\n const isVirtual = swiper.virtual && swiper.params.virtual.enabled;\n if (isVirtual) {\n swiper.wrapperEl.style.scrollSnapType = 'none';\n swiper._immediateVirtual = true;\n }\n if (isVirtual && !swiper._cssModeVirtualInitialSet && swiper.params.initialSlide > 0) {\n swiper._cssModeVirtualInitialSet = true;\n requestAnimationFrame(() => {\n wrapperEl[isH ? 'scrollLeft' : 'scrollTop'] = t;\n });\n } else {\n wrapperEl[isH ? 'scrollLeft' : 'scrollTop'] = t;\n }\n if (isVirtual) {\n requestAnimationFrame(() => {\n swiper.wrapperEl.style.scrollSnapType = '';\n swiper._immediateVirtual = false;\n });\n }\n } else {\n if (!swiper.support.smoothScroll) {\n animateCSSModeScroll({\n swiper,\n targetPosition: t,\n side: isH ? 'left' : 'top'\n });\n return true;\n }\n wrapperEl.scrollTo({\n [isH ? 'left' : 'top']: t,\n behavior: 'smooth'\n });\n }\n return true;\n }\n swiper.setTransition(speed);\n swiper.setTranslate(translate);\n swiper.updateActiveIndex(slideIndex);\n swiper.updateSlidesClasses();\n swiper.emit('beforeTransitionStart', speed, internal);\n swiper.transitionStart(runCallbacks, direction);\n if (speed === 0) {\n swiper.transitionEnd(runCallbacks, direction);\n } else if (!swiper.animating) {\n swiper.animating = true;\n if (!swiper.onSlideToWrapperTransitionEnd) {\n swiper.onSlideToWrapperTransitionEnd = function transitionEnd(e) {\n if (!swiper || swiper.destroyed) return;\n if (e.target !== this) return;\n swiper.wrapperEl.removeEventListener('transitionend', swiper.onSlideToWrapperTransitionEnd);\n swiper.onSlideToWrapperTransitionEnd = null;\n delete swiper.onSlideToWrapperTransitionEnd;\n swiper.transitionEnd(runCallbacks, direction);\n };\n }\n swiper.wrapperEl.addEventListener('transitionend', swiper.onSlideToWrapperTransitionEnd);\n }\n return true;\n}","export default function slideToLoop(index = 0, speed = this.params.speed, runCallbacks = true, internal) {\n if (typeof index === 'string') {\n const indexAsNumber = parseInt(index, 10);\n index = indexAsNumber;\n }\n const swiper = this;\n let newIndex = index;\n if (swiper.params.loop) {\n if (swiper.virtual && swiper.params.virtual.enabled) {\n // eslint-disable-next-line\n newIndex = newIndex + swiper.virtual.slidesBefore;\n } else {\n newIndex = swiper.getSlideIndexByData(newIndex);\n }\n }\n return swiper.slideTo(newIndex, speed, runCallbacks, internal);\n}","/* eslint no-unused-vars: \"off\" */\nexport default function slideNext(speed = this.params.speed, runCallbacks = true, internal) {\n const swiper = this;\n const {\n enabled,\n params,\n animating\n } = swiper;\n if (!enabled) return swiper;\n let perGroup = params.slidesPerGroup;\n if (params.slidesPerView === 'auto' && params.slidesPerGroup === 1 && params.slidesPerGroupAuto) {\n perGroup = Math.max(swiper.slidesPerViewDynamic('current', true), 1);\n }\n const increment = swiper.activeIndex < params.slidesPerGroupSkip ? 1 : perGroup;\n const isVirtual = swiper.virtual && params.virtual.enabled;\n if (params.loop) {\n if (animating && !isVirtual && params.loopPreventsSliding) return false;\n swiper.loopFix({\n direction: 'next'\n });\n // eslint-disable-next-line\n swiper._clientLeft = swiper.wrapperEl.clientLeft;\n }\n if (params.rewind && swiper.isEnd) {\n return swiper.slideTo(0, speed, runCallbacks, internal);\n }\n return swiper.slideTo(swiper.activeIndex + increment, speed, runCallbacks, internal);\n}","/* eslint no-unused-vars: \"off\" */\nexport default function slidePrev(speed = this.params.speed, runCallbacks = true, internal) {\n const swiper = this;\n const {\n params,\n snapGrid,\n slidesGrid,\n rtlTranslate,\n enabled,\n animating\n } = swiper;\n if (!enabled) return swiper;\n const isVirtual = swiper.virtual && params.virtual.enabled;\n if (params.loop) {\n if (animating && !isVirtual && params.loopPreventsSliding) return false;\n swiper.loopFix({\n direction: 'prev'\n });\n // eslint-disable-next-line\n swiper._clientLeft = swiper.wrapperEl.clientLeft;\n }\n const translate = rtlTranslate ? swiper.translate : -swiper.translate;\n function normalize(val) {\n if (val < 0) return -Math.floor(Math.abs(val));\n return Math.floor(val);\n }\n const normalizedTranslate = normalize(translate);\n const normalizedSnapGrid = snapGrid.map(val => normalize(val));\n let prevSnap = snapGrid[normalizedSnapGrid.indexOf(normalizedTranslate) - 1];\n if (typeof prevSnap === 'undefined' && params.cssMode) {\n let prevSnapIndex;\n snapGrid.forEach((snap, snapIndex) => {\n if (normalizedTranslate >= snap) {\n // prevSnap = snap;\n prevSnapIndex = snapIndex;\n }\n });\n if (typeof prevSnapIndex !== 'undefined') {\n prevSnap = snapGrid[prevSnapIndex > 0 ? prevSnapIndex - 1 : prevSnapIndex];\n }\n }\n let prevIndex = 0;\n if (typeof prevSnap !== 'undefined') {\n prevIndex = slidesGrid.indexOf(prevSnap);\n if (prevIndex < 0) prevIndex = swiper.activeIndex - 1;\n if (params.slidesPerView === 'auto' && params.slidesPerGroup === 1 && params.slidesPerGroupAuto) {\n prevIndex = prevIndex - swiper.slidesPerViewDynamic('previous', true) + 1;\n prevIndex = Math.max(prevIndex, 0);\n }\n }\n if (params.rewind && swiper.isBeginning) {\n const lastIndex = swiper.params.virtual && swiper.params.virtual.enabled && swiper.virtual ? swiper.virtual.slides.length - 1 : swiper.slides.length - 1;\n return swiper.slideTo(lastIndex, speed, runCallbacks, internal);\n }\n return swiper.slideTo(prevIndex, speed, runCallbacks, internal);\n}","/* eslint no-unused-vars: \"off\" */\nexport default function slideReset(speed = this.params.speed, runCallbacks = true, internal) {\n const swiper = this;\n return swiper.slideTo(swiper.activeIndex, speed, runCallbacks, internal);\n}","/* eslint no-unused-vars: \"off\" */\nexport default function slideToClosest(speed = this.params.speed, runCallbacks = true, internal, threshold = 0.5) {\n const swiper = this;\n let index = swiper.activeIndex;\n const skip = Math.min(swiper.params.slidesPerGroupSkip, index);\n const snapIndex = skip + Math.floor((index - skip) / swiper.params.slidesPerGroup);\n const translate = swiper.rtlTranslate ? swiper.translate : -swiper.translate;\n if (translate >= swiper.snapGrid[snapIndex]) {\n // The current translate is on or after the current snap index, so the choice\n // is between the current index and the one after it.\n const currentSnap = swiper.snapGrid[snapIndex];\n const nextSnap = swiper.snapGrid[snapIndex + 1];\n if (translate - currentSnap > (nextSnap - currentSnap) * threshold) {\n index += swiper.params.slidesPerGroup;\n }\n } else {\n // The current translate is before the current snap index, so the choice\n // is between the current index and the one before it.\n const prevSnap = swiper.snapGrid[snapIndex - 1];\n const currentSnap = swiper.snapGrid[snapIndex];\n if (translate - prevSnap <= (currentSnap - prevSnap) * threshold) {\n index -= swiper.params.slidesPerGroup;\n }\n }\n index = Math.max(index, 0);\n index = Math.min(index, swiper.slidesGrid.length - 1);\n return swiper.slideTo(index, speed, runCallbacks, internal);\n}","import { elementChildren, nextTick } from '../../shared/utils.js';\nexport default function slideToClickedSlide() {\n const swiper = this;\n const {\n params,\n slidesEl\n } = swiper;\n const slidesPerView = params.slidesPerView === 'auto' ? swiper.slidesPerViewDynamic() : params.slidesPerView;\n let slideToIndex = swiper.clickedIndex;\n let realIndex;\n const slideSelector = swiper.isElement ? `swiper-slide` : `.${params.slideClass}`;\n if (params.loop) {\n if (swiper.animating) return;\n realIndex = parseInt(swiper.clickedSlide.getAttribute('data-swiper-slide-index'), 10);\n if (params.centeredSlides) {\n if (slideToIndex < swiper.loopedSlides - slidesPerView / 2 || slideToIndex > swiper.slides.length - swiper.loopedSlides + slidesPerView / 2) {\n swiper.loopFix();\n slideToIndex = swiper.getSlideIndex(elementChildren(slidesEl, `${slideSelector}[data-swiper-slide-index=\"${realIndex}\"]`)[0]);\n nextTick(() => {\n swiper.slideTo(slideToIndex);\n });\n } else {\n swiper.slideTo(slideToIndex);\n }\n } else if (slideToIndex > swiper.slides.length - slidesPerView) {\n swiper.loopFix();\n slideToIndex = swiper.getSlideIndex(elementChildren(slidesEl, `${slideSelector}[data-swiper-slide-index=\"${realIndex}\"]`)[0]);\n nextTick(() => {\n swiper.slideTo(slideToIndex);\n });\n } else {\n swiper.slideTo(slideToIndex);\n }\n } else {\n swiper.slideTo(slideToIndex);\n }\n}","import loopCreate from './loopCreate.js';\nimport loopFix from './loopFix.js';\nimport loopDestroy from './loopDestroy.js';\nexport default {\n loopCreate,\n loopFix,\n loopDestroy\n};","import { elementChildren } from '../../shared/utils.js';\nexport default function loopCreate(slideRealIndex) {\n const swiper = this;\n const {\n params,\n slidesEl\n } = swiper;\n if (!params.loop || swiper.virtual && swiper.params.virtual.enabled) return;\n const slides = elementChildren(slidesEl, `.${params.slideClass}, swiper-slide`);\n slides.forEach((el, index) => {\n el.setAttribute('data-swiper-slide-index', index);\n });\n swiper.loopFix({\n slideRealIndex,\n direction: params.centeredSlides ? undefined : 'next'\n });\n}","export default function loopFix({\n slideRealIndex,\n slideTo = true,\n direction,\n setTranslate,\n activeSlideIndex,\n byController,\n byMousewheel\n} = {}) {\n const swiper = this;\n if (!swiper.params.loop) return;\n swiper.emit('beforeLoopFix');\n const {\n slides,\n allowSlidePrev,\n allowSlideNext,\n slidesEl,\n params\n } = swiper;\n swiper.allowSlidePrev = true;\n swiper.allowSlideNext = true;\n if (swiper.virtual && params.virtual.enabled) {\n if (slideTo) {\n if (!params.centeredSlides && swiper.snapIndex === 0) {\n swiper.slideTo(swiper.virtual.slides.length, 0, false, true);\n } else if (params.centeredSlides && swiper.snapIndex < params.slidesPerView) {\n swiper.slideTo(swiper.virtual.slides.length + swiper.snapIndex, 0, false, true);\n } else if (swiper.snapIndex === swiper.snapGrid.length - 1) {\n swiper.slideTo(swiper.virtual.slidesBefore, 0, false, true);\n }\n }\n swiper.allowSlidePrev = allowSlidePrev;\n swiper.allowSlideNext = allowSlideNext;\n swiper.emit('loopFix');\n return;\n }\n const slidesPerView = params.slidesPerView === 'auto' ? swiper.slidesPerViewDynamic() : Math.ceil(parseFloat(params.slidesPerView, 10));\n let loopedSlides = params.loopedSlides || slidesPerView;\n if (loopedSlides % params.slidesPerGroup !== 0) {\n loopedSlides += params.slidesPerGroup - loopedSlides % params.slidesPerGroup;\n }\n swiper.loopedSlides = loopedSlides;\n const prependSlidesIndexes = [];\n const appendSlidesIndexes = [];\n let activeIndex = swiper.activeIndex;\n if (typeof activeSlideIndex === 'undefined') {\n activeSlideIndex = swiper.getSlideIndex(swiper.slides.filter(el => el.classList.contains(params.slideActiveClass))[0]);\n } else {\n activeIndex = activeSlideIndex;\n }\n const isNext = direction === 'next' || !direction;\n const isPrev = direction === 'prev' || !direction;\n let slidesPrepended = 0;\n let slidesAppended = 0;\n // prepend last slides before start\n if (activeSlideIndex < loopedSlides) {\n slidesPrepended = Math.max(loopedSlides - activeSlideIndex, params.slidesPerGroup);\n for (let i = 0; i < loopedSlides - activeSlideIndex; i += 1) {\n const index = i - Math.floor(i / slides.length) * slides.length;\n prependSlidesIndexes.push(slides.length - index - 1);\n }\n } else if (activeSlideIndex /* + slidesPerView */ > swiper.slides.length - loopedSlides * 2) {\n slidesAppended = Math.max(activeSlideIndex - (swiper.slides.length - loopedSlides * 2), params.slidesPerGroup);\n for (let i = 0; i < slidesAppended; i += 1) {\n const index = i - Math.floor(i / slides.length) * slides.length;\n appendSlidesIndexes.push(index);\n }\n }\n if (isPrev) {\n prependSlidesIndexes.forEach(index => {\n swiper.slides[index].swiperLoopMoveDOM = true;\n slidesEl.prepend(swiper.slides[index]);\n swiper.slides[index].swiperLoopMoveDOM = false;\n });\n }\n if (isNext) {\n appendSlidesIndexes.forEach(index => {\n swiper.slides[index].swiperLoopMoveDOM = true;\n slidesEl.append(swiper.slides[index]);\n swiper.slides[index].swiperLoopMoveDOM = false;\n });\n }\n swiper.recalcSlides();\n if (params.slidesPerView === 'auto') {\n swiper.updateSlides();\n }\n if (params.watchSlidesProgress) {\n swiper.updateSlidesOffset();\n }\n if (slideTo) {\n if (prependSlidesIndexes.length > 0 && isPrev) {\n if (typeof slideRealIndex === 'undefined') {\n const currentSlideTranslate = swiper.slidesGrid[activeIndex];\n const newSlideTranslate = swiper.slidesGrid[activeIndex + slidesPrepended];\n const diff = newSlideTranslate - currentSlideTranslate;\n if (byMousewheel) {\n swiper.setTranslate(swiper.translate - diff);\n } else {\n swiper.slideTo(activeIndex + slidesPrepended, 0, false, true);\n if (setTranslate) {\n swiper.touches[swiper.isHorizontal() ? 'startX' : 'startY'] += diff;\n }\n }\n } else {\n if (setTranslate) {\n swiper.slideToLoop(slideRealIndex, 0, false, true);\n }\n }\n } else if (appendSlidesIndexes.length > 0 && isNext) {\n if (typeof slideRealIndex === 'undefined') {\n const currentSlideTranslate = swiper.slidesGrid[activeIndex];\n const newSlideTranslate = swiper.slidesGrid[activeIndex - slidesAppended];\n const diff = newSlideTranslate - currentSlideTranslate;\n if (byMousewheel) {\n swiper.setTranslate(swiper.translate - diff);\n } else {\n swiper.slideTo(activeIndex - slidesAppended, 0, false, true);\n if (setTranslate) {\n swiper.touches[swiper.isHorizontal() ? 'startX' : 'startY'] += diff;\n }\n }\n } else {\n swiper.slideToLoop(slideRealIndex, 0, false, true);\n }\n }\n }\n swiper.allowSlidePrev = allowSlidePrev;\n swiper.allowSlideNext = allowSlideNext;\n if (swiper.controller && swiper.controller.control && !byController) {\n const loopParams = {\n slideRealIndex,\n slideTo: false,\n direction,\n setTranslate,\n activeSlideIndex,\n byController: true\n };\n if (Array.isArray(swiper.controller.control)) {\n swiper.controller.control.forEach(c => {\n if (!c.destroyed && c.params.loop) c.loopFix(loopParams);\n });\n } else if (swiper.controller.control instanceof swiper.constructor && swiper.controller.control.params.loop) {\n swiper.controller.control.loopFix(loopParams);\n }\n }\n swiper.emit('loopFix');\n}","export default function loopDestroy() {\n const swiper = this;\n const {\n params,\n slidesEl\n } = swiper;\n if (!params.loop || swiper.virtual && swiper.params.virtual.enabled) return;\n swiper.recalcSlides();\n const newSlidesOrder = [];\n swiper.slides.forEach(slideEl => {\n const index = typeof slideEl.swiperSlideIndex === 'undefined' ? slideEl.getAttribute('data-swiper-slide-index') * 1 : slideEl.swiperSlideIndex;\n newSlidesOrder[index] = slideEl;\n });\n swiper.slides.forEach(slideEl => {\n slideEl.removeAttribute('data-swiper-slide-index');\n });\n newSlidesOrder.forEach(slideEl => {\n slidesEl.append(slideEl);\n });\n swiper.recalcSlides();\n swiper.slideTo(swiper.realIndex, 0);\n}","import { getWindow, getDocument } from 'ssr-window';\nimport { now } from '../../shared/utils.js';\n\n// Modified from https://stackoverflow.com/questions/54520554/custom-element-getrootnode-closest-function-crossing-multiple-parent-shadowd\nfunction closestElement(selector, base = this) {\n function __closestFrom(el) {\n if (!el || el === getDocument() || el === getWindow()) return null;\n if (el.assignedSlot) el = el.assignedSlot;\n const found = el.closest(selector);\n if (!found && !el.getRootNode) {\n return null;\n }\n return found || __closestFrom(el.getRootNode().host);\n }\n return __closestFrom(base);\n}\nexport default function onTouchStart(event) {\n const swiper = this;\n const document = getDocument();\n const window = getWindow();\n const data = swiper.touchEventsData;\n data.evCache.push(event);\n const {\n params,\n touches,\n enabled\n } = swiper;\n if (!enabled) return;\n if (!params.simulateTouch && event.pointerType === 'mouse') return;\n if (swiper.animating && params.preventInteractionOnTransition) {\n return;\n }\n if (!swiper.animating && params.cssMode && params.loop) {\n swiper.loopFix();\n }\n let e = event;\n if (e.originalEvent) e = e.originalEvent;\n let targetEl = e.target;\n if (params.touchEventsTarget === 'wrapper') {\n if (!swiper.wrapperEl.contains(targetEl)) return;\n }\n if ('which' in e && e.which === 3) return;\n if ('button' in e && e.button > 0) return;\n if (data.isTouched && data.isMoved) return;\n\n // change target el for shadow root component\n const swipingClassHasValue = !!params.noSwipingClass && params.noSwipingClass !== '';\n // eslint-disable-next-line\n const eventPath = event.composedPath ? event.composedPath() : event.path;\n if (swipingClassHasValue && e.target && e.target.shadowRoot && eventPath) {\n targetEl = eventPath[0];\n }\n const noSwipingSelector = params.noSwipingSelector ? params.noSwipingSelector : `.${params.noSwipingClass}`;\n const isTargetShadow = !!(e.target && e.target.shadowRoot);\n\n // use closestElement for shadow root element to get the actual closest for nested shadow root element\n if (params.noSwiping && (isTargetShadow ? closestElement(noSwipingSelector, targetEl) : targetEl.closest(noSwipingSelector))) {\n swiper.allowClick = true;\n return;\n }\n if (params.swipeHandler) {\n if (!targetEl.closest(params.swipeHandler)) return;\n }\n touches.currentX = e.pageX;\n touches.currentY = e.pageY;\n const startX = touches.currentX;\n const startY = touches.currentY;\n\n // Do NOT start if iOS edge swipe is detected. Otherwise iOS app cannot swipe-to-go-back anymore\n\n const edgeSwipeDetection = params.edgeSwipeDetection || params.iOSEdgeSwipeDetection;\n const edgeSwipeThreshold = params.edgeSwipeThreshold || params.iOSEdgeSwipeThreshold;\n if (edgeSwipeDetection && (startX <= edgeSwipeThreshold || startX >= window.innerWidth - edgeSwipeThreshold)) {\n if (edgeSwipeDetection === 'prevent') {\n event.preventDefault();\n } else {\n return;\n }\n }\n Object.assign(data, {\n isTouched: true,\n isMoved: false,\n allowTouchCallbacks: true,\n isScrolling: undefined,\n startMoving: undefined\n });\n touches.startX = startX;\n touches.startY = startY;\n data.touchStartTime = now();\n swiper.allowClick = true;\n swiper.updateSize();\n swiper.swipeDirection = undefined;\n if (params.threshold > 0) data.allowThresholdMove = false;\n let preventDefault = true;\n if (targetEl.matches(data.focusableElements)) {\n preventDefault = false;\n if (targetEl.nodeName === 'SELECT') {\n data.isTouched = false;\n }\n }\n if (document.activeElement && document.activeElement.matches(data.focusableElements) && document.activeElement !== targetEl) {\n document.activeElement.blur();\n }\n const shouldPreventDefault = preventDefault && swiper.allowTouchMove && params.touchStartPreventDefault;\n if ((params.touchStartForcePreventDefault || shouldPreventDefault) && !targetEl.isContentEditable) {\n e.preventDefault();\n }\n if (params.freeMode && params.freeMode.enabled && swiper.freeMode && swiper.animating && !params.cssMode) {\n swiper.freeMode.onTouchStart();\n }\n swiper.emit('touchStart', e);\n}","import { getDocument } from 'ssr-window';\nimport { now } from '../../shared/utils.js';\nexport default function onTouchMove(event) {\n const document = getDocument();\n const swiper = this;\n const data = swiper.touchEventsData;\n const {\n params,\n touches,\n rtlTranslate: rtl,\n enabled\n } = swiper;\n if (!enabled) return;\n if (!params.simulateTouch && event.pointerType === 'mouse') return;\n let e = event;\n if (e.originalEvent) e = e.originalEvent;\n if (!data.isTouched) {\n if (data.startMoving && data.isScrolling) {\n swiper.emit('touchMoveOpposite', e);\n }\n return;\n }\n const pointerIndex = data.evCache.findIndex(cachedEv => cachedEv.pointerId === e.pointerId);\n if (pointerIndex >= 0) data.evCache[pointerIndex] = e;\n const targetTouch = data.evCache.length > 1 ? data.evCache[0] : e;\n const pageX = targetTouch.pageX;\n const pageY = targetTouch.pageY;\n if (e.preventedByNestedSwiper) {\n touches.startX = pageX;\n touches.startY = pageY;\n return;\n }\n if (!swiper.allowTouchMove) {\n if (!e.target.matches(data.focusableElements)) {\n swiper.allowClick = false;\n }\n if (data.isTouched) {\n Object.assign(touches, {\n startX: pageX,\n startY: pageY,\n prevX: swiper.touches.currentX,\n prevY: swiper.touches.currentY,\n currentX: pageX,\n currentY: pageY\n });\n data.touchStartTime = now();\n }\n return;\n }\n if (params.touchReleaseOnEdges && !params.loop) {\n if (swiper.isVertical()) {\n // Vertical\n if (pageY < touches.startY && swiper.translate <= swiper.maxTranslate() || pageY > touches.startY && swiper.translate >= swiper.minTranslate()) {\n data.isTouched = false;\n data.isMoved = false;\n return;\n }\n } else if (pageX < touches.startX && swiper.translate <= swiper.maxTranslate() || pageX > touches.startX && swiper.translate >= swiper.minTranslate()) {\n return;\n }\n }\n if (document.activeElement) {\n if (e.target === document.activeElement && e.target.matches(data.focusableElements)) {\n data.isMoved = true;\n swiper.allowClick = false;\n return;\n }\n }\n if (data.allowTouchCallbacks) {\n swiper.emit('touchMove', e);\n }\n if (e.targetTouches && e.targetTouches.length > 1) return;\n touches.currentX = pageX;\n touches.currentY = pageY;\n const diffX = touches.currentX - touches.startX;\n const diffY = touches.currentY - touches.startY;\n if (swiper.params.threshold && Math.sqrt(diffX ** 2 + diffY ** 2) < swiper.params.threshold) return;\n if (typeof data.isScrolling === 'undefined') {\n let touchAngle;\n if (swiper.isHorizontal() && touches.currentY === touches.startY || swiper.isVertical() && touches.currentX === touches.startX) {\n data.isScrolling = false;\n } else {\n // eslint-disable-next-line\n if (diffX * diffX + diffY * diffY >= 25) {\n touchAngle = Math.atan2(Math.abs(diffY), Math.abs(diffX)) * 180 / Math.PI;\n data.isScrolling = swiper.isHorizontal() ? touchAngle > params.touchAngle : 90 - touchAngle > params.touchAngle;\n }\n }\n }\n if (data.isScrolling) {\n swiper.emit('touchMoveOpposite', e);\n }\n if (typeof data.startMoving === 'undefined') {\n if (touches.currentX !== touches.startX || touches.currentY !== touches.startY) {\n data.startMoving = true;\n }\n }\n if (data.isScrolling || swiper.zoom && swiper.params.zoom && swiper.params.zoom.enabled && data.evCache.length > 1) {\n data.isTouched = false;\n return;\n }\n if (!data.startMoving) {\n return;\n }\n swiper.allowClick = false;\n if (!params.cssMode && e.cancelable) {\n e.preventDefault();\n }\n if (params.touchMoveStopPropagation && !params.nested) {\n e.stopPropagation();\n }\n let diff = swiper.isHorizontal() ? diffX : diffY;\n let touchesDiff = swiper.isHorizontal() ? touches.currentX - touches.previousX : touches.currentY - touches.previousY;\n if (params.oneWayMovement) {\n diff = Math.abs(diff) * (rtl ? 1 : -1);\n touchesDiff = Math.abs(touchesDiff) * (rtl ? 1 : -1);\n }\n touches.diff = diff;\n diff *= params.touchRatio;\n if (rtl) {\n diff = -diff;\n touchesDiff = -touchesDiff;\n }\n const prevTouchesDirection = swiper.touchesDirection;\n swiper.swipeDirection = diff > 0 ? 'prev' : 'next';\n swiper.touchesDirection = touchesDiff > 0 ? 'prev' : 'next';\n const isLoop = swiper.params.loop && !params.cssMode;\n if (!data.isMoved) {\n if (isLoop) {\n swiper.loopFix({\n direction: swiper.swipeDirection\n });\n }\n data.startTranslate = swiper.getTranslate();\n swiper.setTransition(0);\n if (swiper.animating) {\n const evt = new window.CustomEvent('transitionend', {\n bubbles: true,\n cancelable: true\n });\n swiper.wrapperEl.dispatchEvent(evt);\n }\n data.allowMomentumBounce = false;\n // Grab Cursor\n if (params.grabCursor && (swiper.allowSlideNext === true || swiper.allowSlidePrev === true)) {\n swiper.setGrabCursor(true);\n }\n swiper.emit('sliderFirstMove', e);\n }\n let loopFixed;\n if (data.isMoved && prevTouchesDirection !== swiper.touchesDirection && isLoop && Math.abs(diff) >= 1) {\n // need another loop fix\n swiper.loopFix({\n direction: swiper.swipeDirection,\n setTranslate: true\n });\n loopFixed = true;\n }\n swiper.emit('sliderMove', e);\n data.isMoved = true;\n data.currentTranslate = diff + data.startTranslate;\n let disableParentSwiper = true;\n let resistanceRatio = params.resistanceRatio;\n if (params.touchReleaseOnEdges) {\n resistanceRatio = 0;\n }\n if (diff > 0) {\n if (isLoop && !loopFixed && data.currentTranslate > (params.centeredSlides ? swiper.minTranslate() - swiper.size / 2 : swiper.minTranslate())) {\n swiper.loopFix({\n direction: 'prev',\n setTranslate: true,\n activeSlideIndex: 0\n });\n }\n if (data.currentTranslate > swiper.minTranslate()) {\n disableParentSwiper = false;\n if (params.resistance) {\n data.currentTranslate = swiper.minTranslate() - 1 + (-swiper.minTranslate() + data.startTranslate + diff) ** resistanceRatio;\n }\n }\n } else if (diff < 0) {\n if (isLoop && !loopFixed && data.currentTranslate < (params.centeredSlides ? swiper.maxTranslate() + swiper.size / 2 : swiper.maxTranslate())) {\n swiper.loopFix({\n direction: 'next',\n setTranslate: true,\n activeSlideIndex: swiper.slides.length - (params.slidesPerView === 'auto' ? swiper.slidesPerViewDynamic() : Math.ceil(parseFloat(params.slidesPerView, 10)))\n });\n }\n if (data.currentTranslate < swiper.maxTranslate()) {\n disableParentSwiper = false;\n if (params.resistance) {\n data.currentTranslate = swiper.maxTranslate() + 1 - (swiper.maxTranslate() - data.startTranslate - diff) ** resistanceRatio;\n }\n }\n }\n if (disableParentSwiper) {\n e.preventedByNestedSwiper = true;\n }\n\n // Directions locks\n if (!swiper.allowSlideNext && swiper.swipeDirection === 'next' && data.currentTranslate < data.startTranslate) {\n data.currentTranslate = data.startTranslate;\n }\n if (!swiper.allowSlidePrev && swiper.swipeDirection === 'prev' && data.currentTranslate > data.startTranslate) {\n data.currentTranslate = data.startTranslate;\n }\n if (!swiper.allowSlidePrev && !swiper.allowSlideNext) {\n data.currentTranslate = data.startTranslate;\n }\n\n // Threshold\n if (params.threshold > 0) {\n if (Math.abs(diff) > params.threshold || data.allowThresholdMove) {\n if (!data.allowThresholdMove) {\n data.allowThresholdMove = true;\n touches.startX = touches.currentX;\n touches.startY = touches.currentY;\n data.currentTranslate = data.startTranslate;\n touches.diff = swiper.isHorizontal() ? touches.currentX - touches.startX : touches.currentY - touches.startY;\n return;\n }\n } else {\n data.currentTranslate = data.startTranslate;\n return;\n }\n }\n if (!params.followFinger || params.cssMode) return;\n\n // Update active index in free mode\n if (params.freeMode && params.freeMode.enabled && swiper.freeMode || params.watchSlidesProgress) {\n swiper.updateActiveIndex();\n swiper.updateSlidesClasses();\n }\n if (params.freeMode && params.freeMode.enabled && swiper.freeMode) {\n swiper.freeMode.onTouchMove();\n }\n // Update progress\n swiper.updateProgress(data.currentTranslate);\n // Update translate\n swiper.setTranslate(data.currentTranslate);\n}","import { now, nextTick } from '../../shared/utils.js';\nexport default function onTouchEnd(event) {\n const swiper = this;\n const data = swiper.touchEventsData;\n const pointerIndex = data.evCache.findIndex(cachedEv => cachedEv.pointerId === event.pointerId);\n if (pointerIndex >= 0) {\n data.evCache.splice(pointerIndex, 1);\n }\n if (['pointercancel', 'pointerout', 'pointerleave'].includes(event.type)) {\n const proceed = event.type === 'pointercancel' && (swiper.browser.isSafari || swiper.browser.isWebView);\n if (!proceed) {\n return;\n }\n }\n const {\n params,\n touches,\n rtlTranslate: rtl,\n slidesGrid,\n enabled\n } = swiper;\n if (!enabled) return;\n if (!params.simulateTouch && event.pointerType === 'mouse') return;\n let e = event;\n if (e.originalEvent) e = e.originalEvent;\n if (data.allowTouchCallbacks) {\n swiper.emit('touchEnd', e);\n }\n data.allowTouchCallbacks = false;\n if (!data.isTouched) {\n if (data.isMoved && params.grabCursor) {\n swiper.setGrabCursor(false);\n }\n data.isMoved = false;\n data.startMoving = false;\n return;\n }\n // Return Grab Cursor\n if (params.grabCursor && data.isMoved && data.isTouched && (swiper.allowSlideNext === true || swiper.allowSlidePrev === true)) {\n swiper.setGrabCursor(false);\n }\n\n // Time diff\n const touchEndTime = now();\n const timeDiff = touchEndTime - data.touchStartTime;\n\n // Tap, doubleTap, Click\n if (swiper.allowClick) {\n const pathTree = e.path || e.composedPath && e.composedPath();\n swiper.updateClickedSlide(pathTree && pathTree[0] || e.target);\n swiper.emit('tap click', e);\n if (timeDiff < 300 && touchEndTime - data.lastClickTime < 300) {\n swiper.emit('doubleTap doubleClick', e);\n }\n }\n data.lastClickTime = now();\n nextTick(() => {\n if (!swiper.destroyed) swiper.allowClick = true;\n });\n if (!data.isTouched || !data.isMoved || !swiper.swipeDirection || touches.diff === 0 || data.currentTranslate === data.startTranslate) {\n data.isTouched = false;\n data.isMoved = false;\n data.startMoving = false;\n return;\n }\n data.isTouched = false;\n data.isMoved = false;\n data.startMoving = false;\n let currentPos;\n if (params.followFinger) {\n currentPos = rtl ? swiper.translate : -swiper.translate;\n } else {\n currentPos = -data.currentTranslate;\n }\n if (params.cssMode) {\n return;\n }\n if (params.freeMode && params.freeMode.enabled) {\n swiper.freeMode.onTouchEnd({\n currentPos\n });\n return;\n }\n\n // Find current slide\n let stopIndex = 0;\n let groupSize = swiper.slidesSizesGrid[0];\n for (let i = 0; i < slidesGrid.length; i += i < params.slidesPerGroupSkip ? 1 : params.slidesPerGroup) {\n const increment = i < params.slidesPerGroupSkip - 1 ? 1 : params.slidesPerGroup;\n if (typeof slidesGrid[i + increment] !== 'undefined') {\n if (currentPos >= slidesGrid[i] && currentPos < slidesGrid[i + increment]) {\n stopIndex = i;\n groupSize = slidesGrid[i + increment] - slidesGrid[i];\n }\n } else if (currentPos >= slidesGrid[i]) {\n stopIndex = i;\n groupSize = slidesGrid[slidesGrid.length - 1] - slidesGrid[slidesGrid.length - 2];\n }\n }\n let rewindFirstIndex = null;\n let rewindLastIndex = null;\n if (params.rewind) {\n if (swiper.isBeginning) {\n rewindLastIndex = params.virtual && params.virtual.enabled && swiper.virtual ? swiper.virtual.slides.length - 1 : swiper.slides.length - 1;\n } else if (swiper.isEnd) {\n rewindFirstIndex = 0;\n }\n }\n // Find current slide size\n const ratio = (currentPos - slidesGrid[stopIndex]) / groupSize;\n const increment = stopIndex < params.slidesPerGroupSkip - 1 ? 1 : params.slidesPerGroup;\n if (timeDiff > params.longSwipesMs) {\n // Long touches\n if (!params.longSwipes) {\n swiper.slideTo(swiper.activeIndex);\n return;\n }\n if (swiper.swipeDirection === 'next') {\n if (ratio >= params.longSwipesRatio) swiper.slideTo(params.rewind && swiper.isEnd ? rewindFirstIndex : stopIndex + increment);else swiper.slideTo(stopIndex);\n }\n if (swiper.swipeDirection === 'prev') {\n if (ratio > 1 - params.longSwipesRatio) {\n swiper.slideTo(stopIndex + increment);\n } else if (rewindLastIndex !== null && ratio < 0 && Math.abs(ratio) > params.longSwipesRatio) {\n swiper.slideTo(rewindLastIndex);\n } else {\n swiper.slideTo(stopIndex);\n }\n }\n } else {\n // Short swipes\n if (!params.shortSwipes) {\n swiper.slideTo(swiper.activeIndex);\n return;\n }\n const isNavButtonTarget = swiper.navigation && (e.target === swiper.navigation.nextEl || e.target === swiper.navigation.prevEl);\n if (!isNavButtonTarget) {\n if (swiper.swipeDirection === 'next') {\n swiper.slideTo(rewindFirstIndex !== null ? rewindFirstIndex : stopIndex + increment);\n }\n if (swiper.swipeDirection === 'prev') {\n swiper.slideTo(rewindLastIndex !== null ? rewindLastIndex : stopIndex);\n }\n } else if (e.target === swiper.navigation.nextEl) {\n swiper.slideTo(stopIndex + increment);\n } else {\n swiper.slideTo(stopIndex);\n }\n }\n}","export default function onResize() {\n const swiper = this;\n const {\n params,\n el\n } = swiper;\n if (el && el.offsetWidth === 0) return;\n\n // Breakpoints\n if (params.breakpoints) {\n swiper.setBreakpoint();\n }\n\n // Save locks\n const {\n allowSlideNext,\n allowSlidePrev,\n snapGrid\n } = swiper;\n const isVirtual = swiper.virtual && swiper.params.virtual.enabled;\n\n // Disable locks on resize\n swiper.allowSlideNext = true;\n swiper.allowSlidePrev = true;\n swiper.updateSize();\n swiper.updateSlides();\n swiper.updateSlidesClasses();\n const isVirtualLoop = isVirtual && params.loop;\n if ((params.slidesPerView === 'auto' || params.slidesPerView > 1) && swiper.isEnd && !swiper.isBeginning && !swiper.params.centeredSlides && !isVirtualLoop) {\n swiper.slideTo(swiper.slides.length - 1, 0, false, true);\n } else {\n if (swiper.params.loop && !isVirtual) {\n swiper.slideToLoop(swiper.realIndex, 0, false, true);\n } else {\n swiper.slideTo(swiper.activeIndex, 0, false, true);\n }\n }\n if (swiper.autoplay && swiper.autoplay.running && swiper.autoplay.paused) {\n clearTimeout(swiper.autoplay.resizeTimeout);\n swiper.autoplay.resizeTimeout = setTimeout(() => {\n if (swiper.autoplay && swiper.autoplay.running && swiper.autoplay.paused) {\n swiper.autoplay.resume();\n }\n }, 500);\n }\n // Return locks after resize\n swiper.allowSlidePrev = allowSlidePrev;\n swiper.allowSlideNext = allowSlideNext;\n if (swiper.params.watchOverflow && snapGrid !== swiper.snapGrid) {\n swiper.checkOverflow();\n }\n}","export default function onClick(e) {\n const swiper = this;\n if (!swiper.enabled) return;\n if (!swiper.allowClick) {\n if (swiper.params.preventClicks) e.preventDefault();\n if (swiper.params.preventClicksPropagation && swiper.animating) {\n e.stopPropagation();\n e.stopImmediatePropagation();\n }\n }\n}","export default function onScroll() {\n const swiper = this;\n const {\n wrapperEl,\n rtlTranslate,\n enabled\n } = swiper;\n if (!enabled) return;\n swiper.previousTranslate = swiper.translate;\n if (swiper.isHorizontal()) {\n swiper.translate = -wrapperEl.scrollLeft;\n } else {\n swiper.translate = -wrapperEl.scrollTop;\n }\n // eslint-disable-next-line\n if (swiper.translate === 0) swiper.translate = 0;\n swiper.updateActiveIndex();\n swiper.updateSlidesClasses();\n let newProgress;\n const translatesDiff = swiper.maxTranslate() - swiper.minTranslate();\n if (translatesDiff === 0) {\n newProgress = 0;\n } else {\n newProgress = (swiper.translate - swiper.minTranslate()) / translatesDiff;\n }\n if (newProgress !== swiper.progress) {\n swiper.updateProgress(rtlTranslate ? -swiper.translate : swiper.translate);\n }\n swiper.emit('setTranslate', swiper.translate, false);\n}","import { processLazyPreloader } from '../../shared/process-lazy-preloader.js';\nexport default function onLoad(e) {\n const swiper = this;\n processLazyPreloader(swiper, e.target);\n if (swiper.params.cssMode || swiper.params.slidesPerView !== 'auto' && !swiper.params.autoHeight) {\n return;\n }\n swiper.update();\n}","import { getDocument } from 'ssr-window';\nimport onTouchStart from './onTouchStart.js';\nimport onTouchMove from './onTouchMove.js';\nimport onTouchEnd from './onTouchEnd.js';\nimport onResize from './onResize.js';\nimport onClick from './onClick.js';\nimport onScroll from './onScroll.js';\nimport onLoad from './onLoad.js';\nlet dummyEventAttached = false;\nfunction dummyEventListener() {}\nconst events = (swiper, method) => {\n const document = getDocument();\n const {\n params,\n el,\n wrapperEl,\n device\n } = swiper;\n const capture = !!params.nested;\n const domMethod = method === 'on' ? 'addEventListener' : 'removeEventListener';\n const swiperMethod = method;\n\n // Touch Events\n el[domMethod]('pointerdown', swiper.onTouchStart, {\n passive: false\n });\n document[domMethod]('pointermove', swiper.onTouchMove, {\n passive: false,\n capture\n });\n document[domMethod]('pointerup', swiper.onTouchEnd, {\n passive: true\n });\n document[domMethod]('pointercancel', swiper.onTouchEnd, {\n passive: true\n });\n document[domMethod]('pointerout', swiper.onTouchEnd, {\n passive: true\n });\n document[domMethod]('pointerleave', swiper.onTouchEnd, {\n passive: true\n });\n\n // Prevent Links Clicks\n if (params.preventClicks || params.preventClicksPropagation) {\n el[domMethod]('click', swiper.onClick, true);\n }\n if (params.cssMode) {\n wrapperEl[domMethod]('scroll', swiper.onScroll);\n }\n\n // Resize handler\n if (params.updateOnWindowResize) {\n swiper[swiperMethod](device.ios || device.android ? 'resize orientationchange observerUpdate' : 'resize observerUpdate', onResize, true);\n } else {\n swiper[swiperMethod]('observerUpdate', onResize, true);\n }\n\n // Images loader\n el[domMethod]('load', swiper.onLoad, {\n capture: true\n });\n};\nfunction attachEvents() {\n const swiper = this;\n const document = getDocument();\n const {\n params\n } = swiper;\n swiper.onTouchStart = onTouchStart.bind(swiper);\n swiper.onTouchMove = onTouchMove.bind(swiper);\n swiper.onTouchEnd = onTouchEnd.bind(swiper);\n if (params.cssMode) {\n swiper.onScroll = onScroll.bind(swiper);\n }\n swiper.onClick = onClick.bind(swiper);\n swiper.onLoad = onLoad.bind(swiper);\n if (!dummyEventAttached) {\n document.addEventListener('touchstart', dummyEventListener);\n dummyEventAttached = true;\n }\n events(swiper, 'on');\n}\nfunction detachEvents() {\n const swiper = this;\n events(swiper, 'off');\n}\nexport default {\n attachEvents,\n detachEvents\n};","import { extend } from '../../shared/utils.js';\nconst isGridEnabled = (swiper, params) => {\n return swiper.grid && params.grid && params.grid.rows > 1;\n};\nexport default function setBreakpoint() {\n const swiper = this;\n const {\n realIndex,\n initialized,\n params,\n el\n } = swiper;\n const breakpoints = params.breakpoints;\n if (!breakpoints || breakpoints && Object.keys(breakpoints).length === 0) return;\n\n // Get breakpoint for window width and update parameters\n const breakpoint = swiper.getBreakpoint(breakpoints, swiper.params.breakpointsBase, swiper.el);\n if (!breakpoint || swiper.currentBreakpoint === breakpoint) return;\n const breakpointOnlyParams = breakpoint in breakpoints ? breakpoints[breakpoint] : undefined;\n const breakpointParams = breakpointOnlyParams || swiper.originalParams;\n const wasMultiRow = isGridEnabled(swiper, params);\n const isMultiRow = isGridEnabled(swiper, breakpointParams);\n const wasEnabled = params.enabled;\n if (wasMultiRow && !isMultiRow) {\n el.classList.remove(`${params.containerModifierClass}grid`, `${params.containerModifierClass}grid-column`);\n swiper.emitContainerClasses();\n } else if (!wasMultiRow && isMultiRow) {\n el.classList.add(`${params.containerModifierClass}grid`);\n if (breakpointParams.grid.fill && breakpointParams.grid.fill === 'column' || !breakpointParams.grid.fill && params.grid.fill === 'column') {\n el.classList.add(`${params.containerModifierClass}grid-column`);\n }\n swiper.emitContainerClasses();\n }\n\n // Toggle navigation, pagination, scrollbar\n ['navigation', 'pagination', 'scrollbar'].forEach(prop => {\n if (typeof breakpointParams[prop] === 'undefined') return;\n const wasModuleEnabled = params[prop] && params[prop].enabled;\n const isModuleEnabled = breakpointParams[prop] && breakpointParams[prop].enabled;\n if (wasModuleEnabled && !isModuleEnabled) {\n swiper[prop].disable();\n }\n if (!wasModuleEnabled && isModuleEnabled) {\n swiper[prop].enable();\n }\n });\n const directionChanged = breakpointParams.direction && breakpointParams.direction !== params.direction;\n const needsReLoop = params.loop && (breakpointParams.slidesPerView !== params.slidesPerView || directionChanged);\n if (directionChanged && initialized) {\n swiper.changeDirection();\n }\n extend(swiper.params, breakpointParams);\n const isEnabled = swiper.params.enabled;\n Object.assign(swiper, {\n allowTouchMove: swiper.params.allowTouchMove,\n allowSlideNext: swiper.params.allowSlideNext,\n allowSlidePrev: swiper.params.allowSlidePrev\n });\n if (wasEnabled && !isEnabled) {\n swiper.disable();\n } else if (!wasEnabled && isEnabled) {\n swiper.enable();\n }\n swiper.currentBreakpoint = breakpoint;\n swiper.emit('_beforeBreakpoint', breakpointParams);\n if (needsReLoop && initialized) {\n swiper.loopDestroy();\n swiper.loopCreate(realIndex);\n swiper.updateSlides();\n }\n swiper.emit('breakpoint', breakpointParams);\n}","function checkOverflow() {\n const swiper = this;\n const {\n isLocked: wasLocked,\n params\n } = swiper;\n const {\n slidesOffsetBefore\n } = params;\n if (slidesOffsetBefore) {\n const lastSlideIndex = swiper.slides.length - 1;\n const lastSlideRightEdge = swiper.slidesGrid[lastSlideIndex] + swiper.slidesSizesGrid[lastSlideIndex] + slidesOffsetBefore * 2;\n swiper.isLocked = swiper.size > lastSlideRightEdge;\n } else {\n swiper.isLocked = swiper.snapGrid.length === 1;\n }\n if (params.allowSlideNext === true) {\n swiper.allowSlideNext = !swiper.isLocked;\n }\n if (params.allowSlidePrev === true) {\n swiper.allowSlidePrev = !swiper.isLocked;\n }\n if (wasLocked && wasLocked !== swiper.isLocked) {\n swiper.isEnd = false;\n }\n if (wasLocked !== swiper.isLocked) {\n swiper.emit(swiper.isLocked ? 'lock' : 'unlock');\n }\n}\nexport default {\n checkOverflow\n};","export default {\n init: true,\n direction: 'horizontal',\n oneWayMovement: false,\n touchEventsTarget: 'wrapper',\n initialSlide: 0,\n speed: 300,\n cssMode: false,\n updateOnWindowResize: true,\n resizeObserver: true,\n nested: false,\n createElements: false,\n enabled: true,\n focusableElements: 'input, select, option, textarea, button, video, label',\n // Overrides\n width: null,\n height: null,\n //\n preventInteractionOnTransition: false,\n // ssr\n userAgent: null,\n url: null,\n // To support iOS's swipe-to-go-back gesture (when being used in-app).\n edgeSwipeDetection: false,\n edgeSwipeThreshold: 20,\n // Autoheight\n autoHeight: false,\n // Set wrapper width\n setWrapperSize: false,\n // Virtual Translate\n virtualTranslate: false,\n // Effects\n effect: 'slide',\n // 'slide' or 'fade' or 'cube' or 'coverflow' or 'flip'\n\n // Breakpoints\n breakpoints: undefined,\n breakpointsBase: 'window',\n // Slides grid\n spaceBetween: 0,\n slidesPerView: 1,\n slidesPerGroup: 1,\n slidesPerGroupSkip: 0,\n slidesPerGroupAuto: false,\n centeredSlides: false,\n centeredSlidesBounds: false,\n slidesOffsetBefore: 0,\n // in px\n slidesOffsetAfter: 0,\n // in px\n normalizeSlideIndex: true,\n centerInsufficientSlides: false,\n // Disable swiper and hide navigation when container not overflow\n watchOverflow: true,\n // Round length\n roundLengths: false,\n // Touches\n touchRatio: 1,\n touchAngle: 45,\n simulateTouch: true,\n shortSwipes: true,\n longSwipes: true,\n longSwipesRatio: 0.5,\n longSwipesMs: 300,\n followFinger: true,\n allowTouchMove: true,\n threshold: 5,\n touchMoveStopPropagation: false,\n touchStartPreventDefault: true,\n touchStartForcePreventDefault: false,\n touchReleaseOnEdges: false,\n // Unique Navigation Elements\n uniqueNavElements: true,\n // Resistance\n resistance: true,\n resistanceRatio: 0.85,\n // Progress\n watchSlidesProgress: false,\n // Cursor\n grabCursor: false,\n // Clicks\n preventClicks: true,\n preventClicksPropagation: true,\n slideToClickedSlide: false,\n // loop\n loop: false,\n loopedSlides: null,\n loopPreventsSliding: true,\n // rewind\n rewind: false,\n // Swiping/no swiping\n allowSlidePrev: true,\n allowSlideNext: true,\n swipeHandler: null,\n // '.swipe-handler',\n noSwiping: true,\n noSwipingClass: 'swiper-no-swiping',\n noSwipingSelector: null,\n // Passive Listeners\n passiveListeners: true,\n maxBackfaceHiddenSlides: 10,\n // NS\n containerModifierClass: 'swiper-',\n // NEW\n slideClass: 'swiper-slide',\n slideActiveClass: 'swiper-slide-active',\n slideVisibleClass: 'swiper-slide-visible',\n slideNextClass: 'swiper-slide-next',\n slidePrevClass: 'swiper-slide-prev',\n wrapperClass: 'swiper-wrapper',\n lazyPreloaderClass: 'swiper-lazy-preloader',\n lazyPreloadPrevNext: 0,\n // Callbacks\n runCallbacksOnInit: true,\n // Internals\n _emitClasses: false\n};","import { extend } from '../shared/utils.js';\nexport default function moduleExtendParams(params, allModulesParams) {\n return function extendParams(obj = {}) {\n const moduleParamName = Object.keys(obj)[0];\n const moduleParams = obj[moduleParamName];\n if (typeof moduleParams !== 'object' || moduleParams === null) {\n extend(allModulesParams, obj);\n return;\n }\n if (['navigation', 'pagination', 'scrollbar'].indexOf(moduleParamName) >= 0 && params[moduleParamName] === true) {\n params[moduleParamName] = {\n auto: true\n };\n }\n if (!(moduleParamName in params && 'enabled' in moduleParams)) {\n extend(allModulesParams, obj);\n return;\n }\n if (params[moduleParamName] === true) {\n params[moduleParamName] = {\n enabled: true\n };\n }\n if (typeof params[moduleParamName] === 'object' && !('enabled' in params[moduleParamName])) {\n params[moduleParamName].enabled = true;\n }\n if (!params[moduleParamName]) params[moduleParamName] = {\n enabled: false\n };\n extend(allModulesParams, obj);\n };\n}","/* eslint no-param-reassign: \"off\" */\nimport { getDocument } from 'ssr-window';\nimport { extend, deleteProps, createElement, elementChildren, elementStyle, elementIndex } from '../shared/utils.js';\nimport { getSupport } from '../shared/get-support.js';\nimport { getDevice } from '../shared/get-device.js';\nimport { getBrowser } from '../shared/get-browser.js';\nimport Resize from './modules/resize/resize.js';\nimport Observer from './modules/observer/observer.js';\nimport eventsEmitter from './events-emitter.js';\nimport update from './update/index.js';\nimport translate from './translate/index.js';\nimport transition from './transition/index.js';\nimport slide from './slide/index.js';\nimport loop from './loop/index.js';\nimport grabCursor from './grab-cursor/index.js';\nimport events from './events/index.js';\nimport breakpoints from './breakpoints/index.js';\nimport classes from './classes/index.js';\nimport checkOverflow from './check-overflow/index.js';\nimport defaults from './defaults.js';\nimport moduleExtendParams from './moduleExtendParams.js';\nimport { processLazyPreloader, preload } from '../shared/process-lazy-preloader.js';\nconst prototypes = {\n eventsEmitter,\n update,\n translate,\n transition,\n slide,\n loop,\n grabCursor,\n events,\n breakpoints,\n checkOverflow,\n classes\n};\nconst extendedDefaults = {};\nclass Swiper {\n constructor(...args) {\n let el;\n let params;\n if (args.length === 1 && args[0].constructor && Object.prototype.toString.call(args[0]).slice(8, -1) === 'Object') {\n params = args[0];\n } else {\n [el, params] = args;\n }\n if (!params) params = {};\n params = extend({}, params);\n if (el && !params.el) params.el = el;\n const document = getDocument();\n if (params.el && typeof params.el === 'string' && document.querySelectorAll(params.el).length > 1) {\n const swipers = [];\n document.querySelectorAll(params.el).forEach(containerEl => {\n const newParams = extend({}, params, {\n el: containerEl\n });\n swipers.push(new Swiper(newParams));\n });\n // eslint-disable-next-line no-constructor-return\n return swipers;\n }\n\n // Swiper Instance\n const swiper = this;\n swiper.__swiper__ = true;\n swiper.support = getSupport();\n swiper.device = getDevice({\n userAgent: params.userAgent\n });\n swiper.browser = getBrowser();\n swiper.eventsListeners = {};\n swiper.eventsAnyListeners = [];\n swiper.modules = [...swiper.__modules__];\n if (params.modules && Array.isArray(params.modules)) {\n swiper.modules.push(...params.modules);\n }\n const allModulesParams = {};\n swiper.modules.forEach(mod => {\n mod({\n params,\n swiper,\n extendParams: moduleExtendParams(params, allModulesParams),\n on: swiper.on.bind(swiper),\n once: swiper.once.bind(swiper),\n off: swiper.off.bind(swiper),\n emit: swiper.emit.bind(swiper)\n });\n });\n\n // Extend defaults with modules params\n const swiperParams = extend({}, defaults, allModulesParams);\n\n // Extend defaults with passed params\n swiper.params = extend({}, swiperParams, extendedDefaults, params);\n swiper.originalParams = extend({}, swiper.params);\n swiper.passedParams = extend({}, params);\n\n // add event listeners\n if (swiper.params && swiper.params.on) {\n Object.keys(swiper.params.on).forEach(eventName => {\n swiper.on(eventName, swiper.params.on[eventName]);\n });\n }\n if (swiper.params && swiper.params.onAny) {\n swiper.onAny(swiper.params.onAny);\n }\n\n // Extend Swiper\n Object.assign(swiper, {\n enabled: swiper.params.enabled,\n el,\n // Classes\n classNames: [],\n // Slides\n slides: [],\n slidesGrid: [],\n snapGrid: [],\n slidesSizesGrid: [],\n // isDirection\n isHorizontal() {\n return swiper.params.direction === 'horizontal';\n },\n isVertical() {\n return swiper.params.direction === 'vertical';\n },\n // Indexes\n activeIndex: 0,\n realIndex: 0,\n //\n isBeginning: true,\n isEnd: false,\n // Props\n translate: 0,\n previousTranslate: 0,\n progress: 0,\n velocity: 0,\n animating: false,\n cssOverflowAdjustment() {\n // Returns 0 unless `translate` is > 2**23\n // Should be subtracted from css values to prevent overflow\n return Math.trunc(this.translate / 2 ** 23) * 2 ** 23;\n },\n // Locks\n allowSlideNext: swiper.params.allowSlideNext,\n allowSlidePrev: swiper.params.allowSlidePrev,\n // Touch Events\n touchEventsData: {\n isTouched: undefined,\n isMoved: undefined,\n allowTouchCallbacks: undefined,\n touchStartTime: undefined,\n isScrolling: undefined,\n currentTranslate: undefined,\n startTranslate: undefined,\n allowThresholdMove: undefined,\n // Form elements to match\n focusableElements: swiper.params.focusableElements,\n // Last click time\n lastClickTime: 0,\n clickTimeout: undefined,\n // Velocities\n velocities: [],\n allowMomentumBounce: undefined,\n startMoving: undefined,\n evCache: []\n },\n // Clicks\n allowClick: true,\n // Touches\n allowTouchMove: swiper.params.allowTouchMove,\n touches: {\n startX: 0,\n startY: 0,\n currentX: 0,\n currentY: 0,\n diff: 0\n },\n // Images\n imagesToLoad: [],\n imagesLoaded: 0\n });\n swiper.emit('_swiper');\n\n // Init\n if (swiper.params.init) {\n swiper.init();\n }\n\n // Return app instance\n // eslint-disable-next-line no-constructor-return\n return swiper;\n }\n getSlideIndex(slideEl) {\n const {\n slidesEl,\n params\n } = this;\n const slides = elementChildren(slidesEl, `.${params.slideClass}, swiper-slide`);\n const firstSlideIndex = elementIndex(slides[0]);\n return elementIndex(slideEl) - firstSlideIndex;\n }\n getSlideIndexByData(index) {\n return this.getSlideIndex(this.slides.filter(slideEl => slideEl.getAttribute('data-swiper-slide-index') * 1 === index)[0]);\n }\n recalcSlides() {\n const swiper = this;\n const {\n slidesEl,\n params\n } = swiper;\n swiper.slides = elementChildren(slidesEl, `.${params.slideClass}, swiper-slide`);\n }\n enable() {\n const swiper = this;\n if (swiper.enabled) return;\n swiper.enabled = true;\n if (swiper.params.grabCursor) {\n swiper.setGrabCursor();\n }\n swiper.emit('enable');\n }\n disable() {\n const swiper = this;\n if (!swiper.enabled) return;\n swiper.enabled = false;\n if (swiper.params.grabCursor) {\n swiper.unsetGrabCursor();\n }\n swiper.emit('disable');\n }\n setProgress(progress, speed) {\n const swiper = this;\n progress = Math.min(Math.max(progress, 0), 1);\n const min = swiper.minTranslate();\n const max = swiper.maxTranslate();\n const current = (max - min) * progress + min;\n swiper.translateTo(current, typeof speed === 'undefined' ? 0 : speed);\n swiper.updateActiveIndex();\n swiper.updateSlidesClasses();\n }\n emitContainerClasses() {\n const swiper = this;\n if (!swiper.params._emitClasses || !swiper.el) return;\n const cls = swiper.el.className.split(' ').filter(className => {\n return className.indexOf('swiper') === 0 || className.indexOf(swiper.params.containerModifierClass) === 0;\n });\n swiper.emit('_containerClasses', cls.join(' '));\n }\n getSlideClasses(slideEl) {\n const swiper = this;\n if (swiper.destroyed) return '';\n return slideEl.className.split(' ').filter(className => {\n return className.indexOf('swiper-slide') === 0 || className.indexOf(swiper.params.slideClass) === 0;\n }).join(' ');\n }\n emitSlidesClasses() {\n const swiper = this;\n if (!swiper.params._emitClasses || !swiper.el) return;\n const updates = [];\n swiper.slides.forEach(slideEl => {\n const classNames = swiper.getSlideClasses(slideEl);\n updates.push({\n slideEl,\n classNames\n });\n swiper.emit('_slideClass', slideEl, classNames);\n });\n swiper.emit('_slideClasses', updates);\n }\n slidesPerViewDynamic(view = 'current', exact = false) {\n const swiper = this;\n const {\n params,\n slides,\n slidesGrid,\n slidesSizesGrid,\n size: swiperSize,\n activeIndex\n } = swiper;\n let spv = 1;\n if (params.centeredSlides) {\n let slideSize = slides[activeIndex] ? slides[activeIndex].swiperSlideSize : 0;\n let breakLoop;\n for (let i = activeIndex + 1; i < slides.length; i += 1) {\n if (slides[i] && !breakLoop) {\n slideSize += slides[i].swiperSlideSize;\n spv += 1;\n if (slideSize > swiperSize) breakLoop = true;\n }\n }\n for (let i = activeIndex - 1; i >= 0; i -= 1) {\n if (slides[i] && !breakLoop) {\n slideSize += slides[i].swiperSlideSize;\n spv += 1;\n if (slideSize > swiperSize) breakLoop = true;\n }\n }\n } else {\n // eslint-disable-next-line\n if (view === 'current') {\n for (let i = activeIndex + 1; i < slides.length; i += 1) {\n const slideInView = exact ? slidesGrid[i] + slidesSizesGrid[i] - slidesGrid[activeIndex] < swiperSize : slidesGrid[i] - slidesGrid[activeIndex] < swiperSize;\n if (slideInView) {\n spv += 1;\n }\n }\n } else {\n // previous\n for (let i = activeIndex - 1; i >= 0; i -= 1) {\n const slideInView = slidesGrid[activeIndex] - slidesGrid[i] < swiperSize;\n if (slideInView) {\n spv += 1;\n }\n }\n }\n }\n return spv;\n }\n update() {\n const swiper = this;\n if (!swiper || swiper.destroyed) return;\n const {\n snapGrid,\n params\n } = swiper;\n // Breakpoints\n if (params.breakpoints) {\n swiper.setBreakpoint();\n }\n [...swiper.el.querySelectorAll('[loading=\"lazy\"]')].forEach(imageEl => {\n if (imageEl.complete) {\n processLazyPreloader(swiper, imageEl);\n }\n });\n swiper.updateSize();\n swiper.updateSlides();\n swiper.updateProgress();\n swiper.updateSlidesClasses();\n function setTranslate() {\n const translateValue = swiper.rtlTranslate ? swiper.translate * -1 : swiper.translate;\n const newTranslate = Math.min(Math.max(translateValue, swiper.maxTranslate()), swiper.minTranslate());\n swiper.setTranslate(newTranslate);\n swiper.updateActiveIndex();\n swiper.updateSlidesClasses();\n }\n let translated;\n if (params.freeMode && params.freeMode.enabled && !params.cssMode) {\n setTranslate();\n if (params.autoHeight) {\n swiper.updateAutoHeight();\n }\n } else {\n if ((params.slidesPerView === 'auto' || params.slidesPerView > 1) && swiper.isEnd && !params.centeredSlides) {\n const slides = swiper.virtual && params.virtual.enabled ? swiper.virtual.slides : swiper.slides;\n translated = swiper.slideTo(slides.length - 1, 0, false, true);\n } else {\n translated = swiper.slideTo(swiper.activeIndex, 0, false, true);\n }\n if (!translated) {\n setTranslate();\n }\n }\n if (params.watchOverflow && snapGrid !== swiper.snapGrid) {\n swiper.checkOverflow();\n }\n swiper.emit('update');\n }\n changeDirection(newDirection, needUpdate = true) {\n const swiper = this;\n const currentDirection = swiper.params.direction;\n if (!newDirection) {\n // eslint-disable-next-line\n newDirection = currentDirection === 'horizontal' ? 'vertical' : 'horizontal';\n }\n if (newDirection === currentDirection || newDirection !== 'horizontal' && newDirection !== 'vertical') {\n return swiper;\n }\n swiper.el.classList.remove(`${swiper.params.containerModifierClass}${currentDirection}`);\n swiper.el.classList.add(`${swiper.params.containerModifierClass}${newDirection}`);\n swiper.emitContainerClasses();\n swiper.params.direction = newDirection;\n swiper.slides.forEach(slideEl => {\n if (newDirection === 'vertical') {\n slideEl.style.width = '';\n } else {\n slideEl.style.height = '';\n }\n });\n swiper.emit('changeDirection');\n if (needUpdate) swiper.update();\n return swiper;\n }\n changeLanguageDirection(direction) {\n const swiper = this;\n if (swiper.rtl && direction === 'rtl' || !swiper.rtl && direction === 'ltr') return;\n swiper.rtl = direction === 'rtl';\n swiper.rtlTranslate = swiper.params.direction === 'horizontal' && swiper.rtl;\n if (swiper.rtl) {\n swiper.el.classList.add(`${swiper.params.containerModifierClass}rtl`);\n swiper.el.dir = 'rtl';\n } else {\n swiper.el.classList.remove(`${swiper.params.containerModifierClass}rtl`);\n swiper.el.dir = 'ltr';\n }\n swiper.update();\n }\n mount(element) {\n const swiper = this;\n if (swiper.mounted) return true;\n\n // Find el\n let el = element || swiper.params.el;\n if (typeof el === 'string') {\n el = document.querySelector(el);\n }\n if (!el) {\n return false;\n }\n el.swiper = swiper;\n if (el.shadowEl) {\n swiper.isElement = true;\n }\n const getWrapperSelector = () => {\n return `.${(swiper.params.wrapperClass || '').trim().split(' ').join('.')}`;\n };\n const getWrapper = () => {\n if (el && el.shadowRoot && el.shadowRoot.querySelector) {\n const res = el.shadowRoot.querySelector(getWrapperSelector());\n // Children needs to return slot items\n return res;\n }\n return elementChildren(el, getWrapperSelector())[0];\n };\n // Find Wrapper\n let wrapperEl = getWrapper();\n if (!wrapperEl && swiper.params.createElements) {\n wrapperEl = createElement('div', swiper.params.wrapperClass);\n el.append(wrapperEl);\n elementChildren(el, `.${swiper.params.slideClass}`).forEach(slideEl => {\n wrapperEl.append(slideEl);\n });\n }\n Object.assign(swiper, {\n el,\n wrapperEl,\n slidesEl: swiper.isElement ? el : wrapperEl,\n mounted: true,\n // RTL\n rtl: el.dir.toLowerCase() === 'rtl' || elementStyle(el, 'direction') === 'rtl',\n rtlTranslate: swiper.params.direction === 'horizontal' && (el.dir.toLowerCase() === 'rtl' || elementStyle(el, 'direction') === 'rtl'),\n wrongRTL: elementStyle(wrapperEl, 'display') === '-webkit-box'\n });\n return true;\n }\n init(el) {\n const swiper = this;\n if (swiper.initialized) return swiper;\n const mounted = swiper.mount(el);\n if (mounted === false) return swiper;\n swiper.emit('beforeInit');\n\n // Set breakpoint\n if (swiper.params.breakpoints) {\n swiper.setBreakpoint();\n }\n\n // Add Classes\n swiper.addClasses();\n\n // Update size\n swiper.updateSize();\n\n // Update slides\n swiper.updateSlides();\n if (swiper.params.watchOverflow) {\n swiper.checkOverflow();\n }\n\n // Set Grab Cursor\n if (swiper.params.grabCursor && swiper.enabled) {\n swiper.setGrabCursor();\n }\n\n // Slide To Initial Slide\n if (swiper.params.loop && swiper.virtual && swiper.params.virtual.enabled) {\n swiper.slideTo(swiper.params.initialSlide + swiper.virtual.slidesBefore, 0, swiper.params.runCallbacksOnInit, false, true);\n } else {\n swiper.slideTo(swiper.params.initialSlide, 0, swiper.params.runCallbacksOnInit, false, true);\n }\n\n // Create loop\n if (swiper.params.loop) {\n swiper.loopCreate();\n }\n\n // Attach events\n swiper.attachEvents();\n [...swiper.el.querySelectorAll('[loading=\"lazy\"]')].forEach(imageEl => {\n if (imageEl.complete) {\n processLazyPreloader(swiper, imageEl);\n } else {\n imageEl.addEventListener('load', e => {\n processLazyPreloader(swiper, e.target);\n });\n }\n });\n preload(swiper);\n\n // Init Flag\n swiper.initialized = true;\n preload(swiper);\n\n // Emit\n swiper.emit('init');\n swiper.emit('afterInit');\n return swiper;\n }\n destroy(deleteInstance = true, cleanStyles = true) {\n const swiper = this;\n const {\n params,\n el,\n wrapperEl,\n slides\n } = swiper;\n if (typeof swiper.params === 'undefined' || swiper.destroyed) {\n return null;\n }\n swiper.emit('beforeDestroy');\n\n // Init Flag\n swiper.initialized = false;\n\n // Detach events\n swiper.detachEvents();\n\n // Destroy loop\n if (params.loop) {\n swiper.loopDestroy();\n }\n\n // Cleanup styles\n if (cleanStyles) {\n swiper.removeClasses();\n el.removeAttribute('style');\n wrapperEl.removeAttribute('style');\n if (slides && slides.length) {\n slides.forEach(slideEl => {\n slideEl.classList.remove(params.slideVisibleClass, params.slideActiveClass, params.slideNextClass, params.slidePrevClass);\n slideEl.removeAttribute('style');\n slideEl.removeAttribute('data-swiper-slide-index');\n });\n }\n }\n swiper.emit('destroy');\n\n // Detach emitter events\n Object.keys(swiper.eventsListeners).forEach(eventName => {\n swiper.off(eventName);\n });\n if (deleteInstance !== false) {\n swiper.el.swiper = null;\n deleteProps(swiper);\n }\n swiper.destroyed = true;\n return null;\n }\n static extendDefaults(newDefaults) {\n extend(extendedDefaults, newDefaults);\n }\n static get extendedDefaults() {\n return extendedDefaults;\n }\n static get defaults() {\n return defaults;\n }\n static installModule(mod) {\n if (!Swiper.prototype.__modules__) Swiper.prototype.__modules__ = [];\n const modules = Swiper.prototype.__modules__;\n if (typeof mod === 'function' && modules.indexOf(mod) < 0) {\n modules.push(mod);\n }\n }\n static use(module) {\n if (Array.isArray(module)) {\n module.forEach(m => Swiper.installModule(m));\n return Swiper;\n }\n Swiper.installModule(module);\n return Swiper;\n }\n}\nObject.keys(prototypes).forEach(prototypeGroup => {\n Object.keys(prototypes[prototypeGroup]).forEach(protoMethod => {\n Swiper.prototype[protoMethod] = prototypes[prototypeGroup][protoMethod];\n });\n});\nSwiper.use([Resize, Observer]);\nexport default Swiper;","import setTransition from './setTransition.js';\nimport transitionStart from './transitionStart.js';\nimport transitionEnd from './transitionEnd.js';\nexport default {\n setTransition,\n transitionStart,\n transitionEnd\n};","export default function setTransition(duration, byController) {\n const swiper = this;\n if (!swiper.params.cssMode) {\n swiper.wrapperEl.style.transitionDuration = `${duration}ms`;\n }\n swiper.emit('setTransition', duration, byController);\n}","import transitionEmit from './transitionEmit.js';\nexport default function transitionStart(runCallbacks = true, direction) {\n const swiper = this;\n const {\n params\n } = swiper;\n if (params.cssMode) return;\n if (params.autoHeight) {\n swiper.updateAutoHeight();\n }\n transitionEmit({\n swiper,\n runCallbacks,\n direction,\n step: 'Start'\n });\n}","import transitionEmit from './transitionEmit.js';\nexport default function transitionEnd(runCallbacks = true, direction) {\n const swiper = this;\n const {\n params\n } = swiper;\n swiper.animating = false;\n if (params.cssMode) return;\n swiper.setTransition(0);\n transitionEmit({\n swiper,\n runCallbacks,\n direction,\n step: 'End'\n });\n}","import setGrabCursor from './setGrabCursor.js';\nimport unsetGrabCursor from './unsetGrabCursor.js';\nexport default {\n setGrabCursor,\n unsetGrabCursor\n};","export default function setGrabCursor(moving) {\n const swiper = this;\n if (!swiper.params.simulateTouch || swiper.params.watchOverflow && swiper.isLocked || swiper.params.cssMode) return;\n const el = swiper.params.touchEventsTarget === 'container' ? swiper.el : swiper.wrapperEl;\n if (swiper.isElement) {\n swiper.__preventObserver__ = true;\n }\n el.style.cursor = 'move';\n el.style.cursor = moving ? 'grabbing' : 'grab';\n if (swiper.isElement) {\n requestAnimationFrame(() => {\n swiper.__preventObserver__ = false;\n });\n }\n}","export default function unsetGrabCursor() {\n const swiper = this;\n if (swiper.params.watchOverflow && swiper.isLocked || swiper.params.cssMode) {\n return;\n }\n if (swiper.isElement) {\n swiper.__preventObserver__ = true;\n }\n swiper[swiper.params.touchEventsTarget === 'container' ? 'el' : 'wrapperEl'].style.cursor = '';\n if (swiper.isElement) {\n requestAnimationFrame(() => {\n swiper.__preventObserver__ = false;\n });\n }\n}","import setBreakpoint from './setBreakpoint.js';\nimport getBreakpoint from './getBreakpoint.js';\nexport default {\n setBreakpoint,\n getBreakpoint\n};","import { getWindow } from 'ssr-window';\nexport default function getBreakpoint(breakpoints, base = 'window', containerEl) {\n if (!breakpoints || base === 'container' && !containerEl) return undefined;\n let breakpoint = false;\n const window = getWindow();\n const currentHeight = base === 'window' ? window.innerHeight : containerEl.clientHeight;\n const points = Object.keys(breakpoints).map(point => {\n if (typeof point === 'string' && point.indexOf('@') === 0) {\n const minRatio = parseFloat(point.substr(1));\n const value = currentHeight * minRatio;\n return {\n value,\n point\n };\n }\n return {\n value: point,\n point\n };\n });\n points.sort((a, b) => parseInt(a.value, 10) - parseInt(b.value, 10));\n for (let i = 0; i < points.length; i += 1) {\n const {\n point,\n value\n } = points[i];\n if (base === 'window') {\n if (window.matchMedia(`(min-width: ${value}px)`).matches) {\n breakpoint = point;\n }\n } else if (value <= containerEl.clientWidth) {\n breakpoint = point;\n }\n }\n return breakpoint || 'max';\n}","import addClasses from './addClasses.js';\nimport removeClasses from './removeClasses.js';\nexport default {\n addClasses,\n removeClasses\n};","function prepareClasses(entries, prefix) {\n const resultClasses = [];\n entries.forEach(item => {\n if (typeof item === 'object') {\n Object.keys(item).forEach(classNames => {\n if (item[classNames]) {\n resultClasses.push(prefix + classNames);\n }\n });\n } else if (typeof item === 'string') {\n resultClasses.push(prefix + item);\n }\n });\n return resultClasses;\n}\nexport default function addClasses() {\n const swiper = this;\n const {\n classNames,\n params,\n rtl,\n el,\n device\n } = swiper;\n // prettier-ignore\n const suffixes = prepareClasses(['initialized', params.direction, {\n 'free-mode': swiper.params.freeMode && params.freeMode.enabled\n }, {\n 'autoheight': params.autoHeight\n }, {\n 'rtl': rtl\n }, {\n 'grid': params.grid && params.grid.rows > 1\n }, {\n 'grid-column': params.grid && params.grid.rows > 1 && params.grid.fill === 'column'\n }, {\n 'android': device.android\n }, {\n 'ios': device.ios\n }, {\n 'css-mode': params.cssMode\n }, {\n 'centered': params.cssMode && params.centeredSlides\n }, {\n 'watch-progress': params.watchSlidesProgress\n }], params.containerModifierClass);\n classNames.push(...suffixes);\n el.classList.add(...classNames);\n swiper.emitContainerClasses();\n}","export default function removeClasses() {\n const swiper = this;\n const {\n el,\n classNames\n } = swiper;\n el.classList.remove(...classNames);\n swiper.emitContainerClasses();\n}","import { getWindow } from 'ssr-window';\nexport default function Resize({\n swiper,\n on,\n emit\n}) {\n const window = getWindow();\n let observer = null;\n let animationFrame = null;\n const resizeHandler = () => {\n if (!swiper || swiper.destroyed || !swiper.initialized) return;\n emit('beforeResize');\n emit('resize');\n };\n const createObserver = () => {\n if (!swiper || swiper.destroyed || !swiper.initialized) return;\n observer = new ResizeObserver(entries => {\n animationFrame = window.requestAnimationFrame(() => {\n const {\n width,\n height\n } = swiper;\n let newWidth = width;\n let newHeight = height;\n entries.forEach(({\n contentBoxSize,\n contentRect,\n target\n }) => {\n if (target && target !== swiper.el) return;\n newWidth = contentRect ? contentRect.width : (contentBoxSize[0] || contentBoxSize).inlineSize;\n newHeight = contentRect ? contentRect.height : (contentBoxSize[0] || contentBoxSize).blockSize;\n });\n if (newWidth !== width || newHeight !== height) {\n resizeHandler();\n }\n });\n });\n observer.observe(swiper.el);\n };\n const removeObserver = () => {\n if (animationFrame) {\n window.cancelAnimationFrame(animationFrame);\n }\n if (observer && observer.unobserve && swiper.el) {\n observer.unobserve(swiper.el);\n observer = null;\n }\n };\n const orientationChangeHandler = () => {\n if (!swiper || swiper.destroyed || !swiper.initialized) return;\n emit('orientationchange');\n };\n on('init', () => {\n if (swiper.params.resizeObserver && typeof window.ResizeObserver !== 'undefined') {\n createObserver();\n return;\n }\n window.addEventListener('resize', resizeHandler);\n window.addEventListener('orientationchange', orientationChangeHandler);\n });\n on('destroy', () => {\n removeObserver();\n window.removeEventListener('resize', resizeHandler);\n window.removeEventListener('orientationchange', orientationChangeHandler);\n });\n}","import { getWindow } from 'ssr-window';\nimport { elementParents } from '../../../shared/utils.js';\nexport default function Observer({\n swiper,\n extendParams,\n on,\n emit\n}) {\n const observers = [];\n const window = getWindow();\n const attach = (target, options = {}) => {\n const ObserverFunc = window.MutationObserver || window.WebkitMutationObserver;\n const observer = new ObserverFunc(mutations => {\n // The observerUpdate event should only be triggered\n // once despite the number of mutations. Additional\n // triggers are redundant and are very costly\n if (swiper.__preventObserver__) return;\n if (mutations.length === 1) {\n emit('observerUpdate', mutations[0]);\n return;\n }\n const observerUpdate = function observerUpdate() {\n emit('observerUpdate', mutations[0]);\n };\n if (window.requestAnimationFrame) {\n window.requestAnimationFrame(observerUpdate);\n } else {\n window.setTimeout(observerUpdate, 0);\n }\n });\n observer.observe(target, {\n attributes: typeof options.attributes === 'undefined' ? true : options.attributes,\n childList: typeof options.childList === 'undefined' ? true : options.childList,\n characterData: typeof options.characterData === 'undefined' ? true : options.characterData\n });\n observers.push(observer);\n };\n const init = () => {\n if (!swiper.params.observer) return;\n if (swiper.params.observeParents) {\n const containerParents = elementParents(swiper.el);\n for (let i = 0; i < containerParents.length; i += 1) {\n attach(containerParents[i]);\n }\n }\n // Observe container\n attach(swiper.el, {\n childList: swiper.params.observeSlideChildren\n });\n\n // Observe wrapper\n attach(swiper.wrapperEl, {\n attributes: false\n });\n };\n const destroy = () => {\n observers.forEach(observer => {\n observer.disconnect();\n });\n observers.splice(0, observers.length);\n };\n extendParams({\n observer: false,\n observeParents: false,\n observeSlideChildren: false\n });\n on('init', init);\n on('destroy', destroy);\n}","import { createElement, elementChildren } from './utils.js';\nexport default function createElementIfNotDefined(swiper, originalParams, params, checkProps) {\n if (swiper.params.createElements) {\n Object.keys(checkProps).forEach(key => {\n if (!params[key] && params.auto === true) {\n let element = elementChildren(swiper.el, `.${checkProps[key]}`)[0];\n if (!element) {\n element = createElement('div', checkProps[key]);\n element.className = checkProps[key];\n swiper.el.append(element);\n }\n params[key] = element;\n originalParams[key] = element;\n }\n });\n }\n return params;\n}","export default function classesToSelector(classes = '') {\n return `.${classes.trim().replace(/([\\.:!+\\/])/g, '\\\\$1') // eslint-disable-line\n .replace(/ /g, '.')}`;\n}","import SwiperCore, {\n A11y,\n Mousewheel,\n Navigation,\n Pagination,\n Autoplay,\n Thumbs,\n Zoom,\n} from 'swiper/core'\nimport Controller from './controller'\n\nSwiperCore.use([A11y, Mousewheel, Navigation, Pagination, Autoplay, Thumbs, Zoom])\n\nexport default class extends Controller {\n static targets = ['slides', 'previous', 'next', 'pagination', 'go']\n\n static options = {\n grabCursor: true,\n loop: true,\n mousewheel: {\n forceToAxis: true,\n },\n preloadImages: false,\n updateOnImagesReady: false,\n slidesPerView: 'auto',\n centeredSlides: true,\n loopFillGroupWithBlank: true,\n }\n\n initialize() {\n if (this.options.thumbContainer) {\n this.thumbJazz()\n } else {\n this.createSwiper()\n }\n\n if (this.hasGoTarget) {\n this.swiper.slideTo(this.goTarget.getAttribute('data-index'))\n }\n }\n\n thumbJazz() {\n const slider = document.querySelector(this.options.thumbContainer)\n\n this.thumbInterval = setInterval(() => {\n this.sliderController = this.application.getControllerForElementAndIdentifier(\n slider,\n 'slider',\n )\n\n if (this.sliderController) {\n clearInterval(this.thumbInterval)\n\n this.options.thumbs = {\n swiper: this.sliderController.swiper,\n }\n\n this.createSwiper()\n }\n }, 50)\n }\n\n createSwiper() {\n if (this.hasNextTarget) {\n this.options.navigation ||= {}\n this.options.navigation.nextEl = this.nextTarget\n }\n\n if (this.hasPreviousTarget) {\n this.options.navigation ||= {}\n this.options.navigation.prevEl = this.previousTarget\n }\n\n if (this.hasPaginationTarget) {\n this.options.pagination ||= {\n clickable: true,\n }\n this.options.pagination.el = this.paginationTarget\n }\n\n const slidesTarget = this.hasSlidesTarget ? this.slidesTarget : this.element\n this.swiper = new SwiperCore(slidesTarget, this.options)\n }\n}\n","import classesToSelector from '../../shared/classes-to-selector.js';\nimport { createElement, elementIndex } from '../../shared/utils.js';\nexport default function A11y({\n swiper,\n extendParams,\n on\n}) {\n extendParams({\n a11y: {\n enabled: true,\n notificationClass: 'swiper-notification',\n prevSlideMessage: 'Previous slide',\n nextSlideMessage: 'Next slide',\n firstSlideMessage: 'This is the first slide',\n lastSlideMessage: 'This is the last slide',\n paginationBulletMessage: 'Go to slide {{index}}',\n slideLabelMessage: '{{index}} / {{slidesLength}}',\n containerMessage: null,\n containerRoleDescriptionMessage: null,\n itemRoleDescriptionMessage: null,\n slideRole: 'group',\n id: null\n }\n });\n swiper.a11y = {\n clicked: false\n };\n let liveRegion = null;\n function notify(message) {\n const notification = liveRegion;\n if (notification.length === 0) return;\n notification.innerHTML = '';\n notification.innerHTML = message;\n }\n const makeElementsArray = el => {\n if (!Array.isArray(el)) el = [el].filter(e => !!e);\n return el;\n };\n function getRandomNumber(size = 16) {\n const randomChar = () => Math.round(16 * Math.random()).toString(16);\n return 'x'.repeat(size).replace(/x/g, randomChar);\n }\n function makeElFocusable(el) {\n el = makeElementsArray(el);\n el.forEach(subEl => {\n subEl.setAttribute('tabIndex', '0');\n });\n }\n function makeElNotFocusable(el) {\n el = makeElementsArray(el);\n el.forEach(subEl => {\n subEl.setAttribute('tabIndex', '-1');\n });\n }\n function addElRole(el, role) {\n el = makeElementsArray(el);\n el.forEach(subEl => {\n subEl.setAttribute('role', role);\n });\n }\n function addElRoleDescription(el, description) {\n el = makeElementsArray(el);\n el.forEach(subEl => {\n subEl.setAttribute('aria-roledescription', description);\n });\n }\n function addElControls(el, controls) {\n el = makeElementsArray(el);\n el.forEach(subEl => {\n subEl.setAttribute('aria-controls', controls);\n });\n }\n function addElLabel(el, label) {\n el = makeElementsArray(el);\n el.forEach(subEl => {\n subEl.setAttribute('aria-label', label);\n });\n }\n function addElId(el, id) {\n el = makeElementsArray(el);\n el.forEach(subEl => {\n subEl.setAttribute('id', id);\n });\n }\n function addElLive(el, live) {\n el = makeElementsArray(el);\n el.forEach(subEl => {\n subEl.setAttribute('aria-live', live);\n });\n }\n function disableEl(el) {\n el = makeElementsArray(el);\n el.forEach(subEl => {\n subEl.setAttribute('aria-disabled', true);\n });\n }\n function enableEl(el) {\n el = makeElementsArray(el);\n el.forEach(subEl => {\n subEl.setAttribute('aria-disabled', false);\n });\n }\n function onEnterOrSpaceKey(e) {\n if (e.keyCode !== 13 && e.keyCode !== 32) return;\n const params = swiper.params.a11y;\n const targetEl = e.target;\n if (swiper.pagination && swiper.pagination.el && (targetEl === swiper.pagination.el || swiper.pagination.el.contains(e.target))) {\n if (!e.target.matches(classesToSelector(swiper.params.pagination.bulletClass))) return;\n }\n if (swiper.navigation && swiper.navigation.nextEl && targetEl === swiper.navigation.nextEl) {\n if (!(swiper.isEnd && !swiper.params.loop)) {\n swiper.slideNext();\n }\n if (swiper.isEnd) {\n notify(params.lastSlideMessage);\n } else {\n notify(params.nextSlideMessage);\n }\n }\n if (swiper.navigation && swiper.navigation.prevEl && targetEl === swiper.navigation.prevEl) {\n if (!(swiper.isBeginning && !swiper.params.loop)) {\n swiper.slidePrev();\n }\n if (swiper.isBeginning) {\n notify(params.firstSlideMessage);\n } else {\n notify(params.prevSlideMessage);\n }\n }\n if (swiper.pagination && targetEl.matches(classesToSelector(swiper.params.pagination.bulletClass))) {\n targetEl.click();\n }\n }\n function updateNavigation() {\n if (swiper.params.loop || swiper.params.rewind || !swiper.navigation) return;\n const {\n nextEl,\n prevEl\n } = swiper.navigation;\n if (prevEl) {\n if (swiper.isBeginning) {\n disableEl(prevEl);\n makeElNotFocusable(prevEl);\n } else {\n enableEl(prevEl);\n makeElFocusable(prevEl);\n }\n }\n if (nextEl) {\n if (swiper.isEnd) {\n disableEl(nextEl);\n makeElNotFocusable(nextEl);\n } else {\n enableEl(nextEl);\n makeElFocusable(nextEl);\n }\n }\n }\n function hasPagination() {\n return swiper.pagination && swiper.pagination.bullets && swiper.pagination.bullets.length;\n }\n function hasClickablePagination() {\n return hasPagination() && swiper.params.pagination.clickable;\n }\n function updatePagination() {\n const params = swiper.params.a11y;\n if (!hasPagination()) return;\n swiper.pagination.bullets.forEach(bulletEl => {\n if (swiper.params.pagination.clickable) {\n makeElFocusable(bulletEl);\n if (!swiper.params.pagination.renderBullet) {\n addElRole(bulletEl, 'button');\n addElLabel(bulletEl, params.paginationBulletMessage.replace(/\\{\\{index\\}\\}/, elementIndex(bulletEl) + 1));\n }\n }\n if (bulletEl.matches(classesToSelector(swiper.params.pagination.bulletActiveClass))) {\n bulletEl.setAttribute('aria-current', 'true');\n } else {\n bulletEl.removeAttribute('aria-current');\n }\n });\n }\n const initNavEl = (el, wrapperId, message) => {\n makeElFocusable(el);\n if (el.tagName !== 'BUTTON') {\n addElRole(el, 'button');\n el.addEventListener('keydown', onEnterOrSpaceKey);\n }\n addElLabel(el, message);\n addElControls(el, wrapperId);\n };\n const handlePointerDown = () => {\n swiper.a11y.clicked = true;\n };\n const handlePointerUp = () => {\n requestAnimationFrame(() => {\n requestAnimationFrame(() => {\n if (!swiper.destroyed) {\n swiper.a11y.clicked = false;\n }\n });\n });\n };\n const handleFocus = e => {\n if (swiper.a11y.clicked) return;\n const slideEl = e.target.closest(`.${swiper.params.slideClass}, swiper-slide`);\n if (!slideEl || !swiper.slides.includes(slideEl)) return;\n const isActive = swiper.slides.indexOf(slideEl) === swiper.activeIndex;\n const isVisible = swiper.params.watchSlidesProgress && swiper.visibleSlides && swiper.visibleSlides.includes(slideEl);\n if (isActive || isVisible) return;\n if (e.sourceCapabilities && e.sourceCapabilities.firesTouchEvents) return;\n if (swiper.isHorizontal()) {\n swiper.el.scrollLeft = 0;\n } else {\n swiper.el.scrollTop = 0;\n }\n swiper.slideTo(swiper.slides.indexOf(slideEl), 0);\n };\n const initSlides = () => {\n const params = swiper.params.a11y;\n if (params.itemRoleDescriptionMessage) {\n addElRoleDescription(swiper.slides, params.itemRoleDescriptionMessage);\n }\n if (params.slideRole) {\n addElRole(swiper.slides, params.slideRole);\n }\n const slidesLength = swiper.slides.length;\n if (params.slideLabelMessage) {\n swiper.slides.forEach((slideEl, index) => {\n const slideIndex = swiper.params.loop ? parseInt(slideEl.getAttribute('data-swiper-slide-index'), 10) : index;\n const ariaLabelMessage = params.slideLabelMessage.replace(/\\{\\{index\\}\\}/, slideIndex + 1).replace(/\\{\\{slidesLength\\}\\}/, slidesLength);\n addElLabel(slideEl, ariaLabelMessage);\n });\n }\n };\n const init = () => {\n const params = swiper.params.a11y;\n if (swiper.isElement) {\n swiper.el.shadowEl.append(liveRegion);\n } else {\n swiper.el.append(liveRegion);\n }\n\n // Container\n const containerEl = swiper.el;\n if (params.containerRoleDescriptionMessage) {\n addElRoleDescription(containerEl, params.containerRoleDescriptionMessage);\n }\n if (params.containerMessage) {\n addElLabel(containerEl, params.containerMessage);\n }\n\n // Wrapper\n const wrapperEl = swiper.wrapperEl;\n const wrapperId = params.id || wrapperEl.getAttribute('id') || `swiper-wrapper-${getRandomNumber(16)}`;\n const live = swiper.params.autoplay && swiper.params.autoplay.enabled ? 'off' : 'polite';\n addElId(wrapperEl, wrapperId);\n addElLive(wrapperEl, live);\n\n // Slide\n initSlides();\n\n // Navigation\n let {\n nextEl,\n prevEl\n } = swiper.navigation ? swiper.navigation : {};\n nextEl = makeElementsArray(nextEl);\n prevEl = makeElementsArray(prevEl);\n if (nextEl) {\n nextEl.forEach(el => initNavEl(el, wrapperId, params.nextSlideMessage));\n }\n if (prevEl) {\n prevEl.forEach(el => initNavEl(el, wrapperId, params.prevSlideMessage));\n }\n\n // Pagination\n if (hasClickablePagination()) {\n const paginationEl = Array.isArray(swiper.pagination.el) ? swiper.pagination.el : [swiper.pagination.el];\n paginationEl.forEach(el => {\n el.addEventListener('keydown', onEnterOrSpaceKey);\n });\n }\n\n // Tab focus\n swiper.el.addEventListener('focus', handleFocus, true);\n swiper.el.addEventListener('pointerdown', handlePointerDown, true);\n swiper.el.addEventListener('pointerup', handlePointerUp, true);\n };\n function destroy() {\n if (liveRegion) liveRegion.remove();\n let {\n nextEl,\n prevEl\n } = swiper.navigation ? swiper.navigation : {};\n nextEl = makeElementsArray(nextEl);\n prevEl = makeElementsArray(prevEl);\n if (nextEl) {\n nextEl.forEach(el => el.removeEventListener('keydown', onEnterOrSpaceKey));\n }\n if (prevEl) {\n prevEl.forEach(el => el.removeEventListener('keydown', onEnterOrSpaceKey));\n }\n\n // Pagination\n if (hasClickablePagination()) {\n const paginationEl = Array.isArray(swiper.pagination.el) ? swiper.pagination.el : [swiper.pagination.el];\n paginationEl.forEach(el => {\n el.removeEventListener('keydown', onEnterOrSpaceKey);\n });\n }\n\n // Tab focus\n swiper.el.removeEventListener('focus', handleFocus, true);\n swiper.el.removeEventListener('pointerdown', handlePointerDown, true);\n swiper.el.removeEventListener('pointerup', handlePointerUp, true);\n }\n on('beforeInit', () => {\n liveRegion = createElement('span', swiper.params.a11y.notificationClass);\n liveRegion.setAttribute('aria-live', 'assertive');\n liveRegion.setAttribute('aria-atomic', 'true');\n });\n on('afterInit', () => {\n if (!swiper.params.a11y.enabled) return;\n init();\n });\n on('slidesLengthChange snapGridLengthChange slidesGridLengthChange', () => {\n if (!swiper.params.a11y.enabled) return;\n initSlides();\n });\n on('fromEdge toEdge afterInit lock unlock', () => {\n if (!swiper.params.a11y.enabled) return;\n updateNavigation();\n });\n on('paginationUpdate', () => {\n if (!swiper.params.a11y.enabled) return;\n updatePagination();\n });\n on('destroy', () => {\n if (!swiper.params.a11y.enabled) return;\n destroy();\n });\n}","/* eslint-disable consistent-return */\nimport { getWindow } from 'ssr-window';\nimport { now, nextTick } from '../../shared/utils.js';\nexport default function Mousewheel({\n swiper,\n extendParams,\n on,\n emit\n}) {\n const window = getWindow();\n extendParams({\n mousewheel: {\n enabled: false,\n releaseOnEdges: false,\n invert: false,\n forceToAxis: false,\n sensitivity: 1,\n eventsTarget: 'container',\n thresholdDelta: null,\n thresholdTime: null,\n noMousewheelClass: 'swiper-no-mousewheel'\n }\n });\n swiper.mousewheel = {\n enabled: false\n };\n let timeout;\n let lastScrollTime = now();\n let lastEventBeforeSnap;\n const recentWheelEvents = [];\n function normalize(e) {\n // Reasonable defaults\n const PIXEL_STEP = 10;\n const LINE_HEIGHT = 40;\n const PAGE_HEIGHT = 800;\n let sX = 0;\n let sY = 0; // spinX, spinY\n let pX = 0;\n let pY = 0; // pixelX, pixelY\n\n // Legacy\n if ('detail' in e) {\n sY = e.detail;\n }\n if ('wheelDelta' in e) {\n sY = -e.wheelDelta / 120;\n }\n if ('wheelDeltaY' in e) {\n sY = -e.wheelDeltaY / 120;\n }\n if ('wheelDeltaX' in e) {\n sX = -e.wheelDeltaX / 120;\n }\n\n // side scrolling on FF with DOMMouseScroll\n if ('axis' in e && e.axis === e.HORIZONTAL_AXIS) {\n sX = sY;\n sY = 0;\n }\n pX = sX * PIXEL_STEP;\n pY = sY * PIXEL_STEP;\n if ('deltaY' in e) {\n pY = e.deltaY;\n }\n if ('deltaX' in e) {\n pX = e.deltaX;\n }\n if (e.shiftKey && !pX) {\n // if user scrolls with shift he wants horizontal scroll\n pX = pY;\n pY = 0;\n }\n if ((pX || pY) && e.deltaMode) {\n if (e.deltaMode === 1) {\n // delta in LINE units\n pX *= LINE_HEIGHT;\n pY *= LINE_HEIGHT;\n } else {\n // delta in PAGE units\n pX *= PAGE_HEIGHT;\n pY *= PAGE_HEIGHT;\n }\n }\n\n // Fall-back if spin cannot be determined\n if (pX && !sX) {\n sX = pX < 1 ? -1 : 1;\n }\n if (pY && !sY) {\n sY = pY < 1 ? -1 : 1;\n }\n return {\n spinX: sX,\n spinY: sY,\n pixelX: pX,\n pixelY: pY\n };\n }\n function handleMouseEnter() {\n if (!swiper.enabled) return;\n swiper.mouseEntered = true;\n }\n function handleMouseLeave() {\n if (!swiper.enabled) return;\n swiper.mouseEntered = false;\n }\n function animateSlider(newEvent) {\n if (swiper.params.mousewheel.thresholdDelta && newEvent.delta < swiper.params.mousewheel.thresholdDelta) {\n // Prevent if delta of wheel scroll delta is below configured threshold\n return false;\n }\n if (swiper.params.mousewheel.thresholdTime && now() - lastScrollTime < swiper.params.mousewheel.thresholdTime) {\n // Prevent if time between scrolls is below configured threshold\n return false;\n }\n\n // If the movement is NOT big enough and\n // if the last time the user scrolled was too close to the current one (avoid continuously triggering the slider):\n // Don't go any further (avoid insignificant scroll movement).\n if (newEvent.delta >= 6 && now() - lastScrollTime < 60) {\n // Return false as a default\n return true;\n }\n // If user is scrolling towards the end:\n // If the slider hasn't hit the latest slide or\n // if the slider is a loop and\n // if the slider isn't moving right now:\n // Go to next slide and\n // emit a scroll event.\n // Else (the user is scrolling towards the beginning) and\n // if the slider hasn't hit the first slide or\n // if the slider is a loop and\n // if the slider isn't moving right now:\n // Go to prev slide and\n // emit a scroll event.\n if (newEvent.direction < 0) {\n if ((!swiper.isEnd || swiper.params.loop) && !swiper.animating) {\n swiper.slideNext();\n emit('scroll', newEvent.raw);\n }\n } else if ((!swiper.isBeginning || swiper.params.loop) && !swiper.animating) {\n swiper.slidePrev();\n emit('scroll', newEvent.raw);\n }\n // If you got here is because an animation has been triggered so store the current time\n lastScrollTime = new window.Date().getTime();\n // Return false as a default\n return false;\n }\n function releaseScroll(newEvent) {\n const params = swiper.params.mousewheel;\n if (newEvent.direction < 0) {\n if (swiper.isEnd && !swiper.params.loop && params.releaseOnEdges) {\n // Return true to animate scroll on edges\n return true;\n }\n } else if (swiper.isBeginning && !swiper.params.loop && params.releaseOnEdges) {\n // Return true to animate scroll on edges\n return true;\n }\n return false;\n }\n function handle(event) {\n let e = event;\n let disableParentSwiper = true;\n if (!swiper.enabled) return;\n\n // Ignore event if the target or its parents have the swiper-no-mousewheel class\n if (event.target.closest(`.${swiper.params.mousewheel.noMousewheelClass}`)) return;\n const params = swiper.params.mousewheel;\n if (swiper.params.cssMode) {\n e.preventDefault();\n }\n let targetEl = swiper.el;\n if (swiper.params.mousewheel.eventsTarget !== 'container') {\n targetEl = document.querySelector(swiper.params.mousewheel.eventsTarget);\n }\n const targetElContainsTarget = targetEl && targetEl.contains(e.target);\n if (!swiper.mouseEntered && !targetElContainsTarget && !params.releaseOnEdges) return true;\n if (e.originalEvent) e = e.originalEvent; // jquery fix\n let delta = 0;\n const rtlFactor = swiper.rtlTranslate ? -1 : 1;\n const data = normalize(e);\n if (params.forceToAxis) {\n if (swiper.isHorizontal()) {\n if (Math.abs(data.pixelX) > Math.abs(data.pixelY)) delta = -data.pixelX * rtlFactor;else return true;\n } else if (Math.abs(data.pixelY) > Math.abs(data.pixelX)) delta = -data.pixelY;else return true;\n } else {\n delta = Math.abs(data.pixelX) > Math.abs(data.pixelY) ? -data.pixelX * rtlFactor : -data.pixelY;\n }\n if (delta === 0) return true;\n if (params.invert) delta = -delta;\n\n // Get the scroll positions\n let positions = swiper.getTranslate() + delta * params.sensitivity;\n if (positions >= swiper.minTranslate()) positions = swiper.minTranslate();\n if (positions <= swiper.maxTranslate()) positions = swiper.maxTranslate();\n\n // When loop is true:\n // the disableParentSwiper will be true.\n // When loop is false:\n // if the scroll positions is not on edge,\n // then the disableParentSwiper will be true.\n // if the scroll on edge positions,\n // then the disableParentSwiper will be false.\n disableParentSwiper = swiper.params.loop ? true : !(positions === swiper.minTranslate() || positions === swiper.maxTranslate());\n if (disableParentSwiper && swiper.params.nested) e.stopPropagation();\n if (!swiper.params.freeMode || !swiper.params.freeMode.enabled) {\n // Register the new event in a variable which stores the relevant data\n const newEvent = {\n time: now(),\n delta: Math.abs(delta),\n direction: Math.sign(delta),\n raw: event\n };\n\n // Keep the most recent events\n if (recentWheelEvents.length >= 2) {\n recentWheelEvents.shift(); // only store the last N events\n }\n\n const prevEvent = recentWheelEvents.length ? recentWheelEvents[recentWheelEvents.length - 1] : undefined;\n recentWheelEvents.push(newEvent);\n\n // If there is at least one previous recorded event:\n // If direction has changed or\n // if the scroll is quicker than the previous one:\n // Animate the slider.\n // Else (this is the first time the wheel is moved):\n // Animate the slider.\n if (prevEvent) {\n if (newEvent.direction !== prevEvent.direction || newEvent.delta > prevEvent.delta || newEvent.time > prevEvent.time + 150) {\n animateSlider(newEvent);\n }\n } else {\n animateSlider(newEvent);\n }\n\n // If it's time to release the scroll:\n // Return now so you don't hit the preventDefault.\n if (releaseScroll(newEvent)) {\n return true;\n }\n } else {\n // Freemode or scrollContainer:\n\n // If we recently snapped after a momentum scroll, then ignore wheel events\n // to give time for the deceleration to finish. Stop ignoring after 500 msecs\n // or if it's a new scroll (larger delta or inverse sign as last event before\n // an end-of-momentum snap).\n const newEvent = {\n time: now(),\n delta: Math.abs(delta),\n direction: Math.sign(delta)\n };\n const ignoreWheelEvents = lastEventBeforeSnap && newEvent.time < lastEventBeforeSnap.time + 500 && newEvent.delta <= lastEventBeforeSnap.delta && newEvent.direction === lastEventBeforeSnap.direction;\n if (!ignoreWheelEvents) {\n lastEventBeforeSnap = undefined;\n let position = swiper.getTranslate() + delta * params.sensitivity;\n const wasBeginning = swiper.isBeginning;\n const wasEnd = swiper.isEnd;\n if (position >= swiper.minTranslate()) position = swiper.minTranslate();\n if (position <= swiper.maxTranslate()) position = swiper.maxTranslate();\n swiper.setTransition(0);\n swiper.setTranslate(position);\n swiper.updateProgress();\n swiper.updateActiveIndex();\n swiper.updateSlidesClasses();\n if (!wasBeginning && swiper.isBeginning || !wasEnd && swiper.isEnd) {\n swiper.updateSlidesClasses();\n }\n if (swiper.params.loop) {\n swiper.loopFix({\n direction: newEvent.direction < 0 ? 'next' : 'prev',\n byMousewheel: true\n });\n }\n if (swiper.params.freeMode.sticky) {\n // When wheel scrolling starts with sticky (aka snap) enabled, then detect\n // the end of a momentum scroll by storing recent (N=15?) wheel events.\n // 1. do all N events have decreasing or same (absolute value) delta?\n // 2. did all N events arrive in the last M (M=500?) msecs?\n // 3. does the earliest event have an (absolute value) delta that's\n // at least P (P=1?) larger than the most recent event's delta?\n // 4. does the latest event have a delta that's smaller than Q (Q=6?) pixels?\n // If 1-4 are \"yes\" then we're near the end of a momentum scroll deceleration.\n // Snap immediately and ignore remaining wheel events in this scroll.\n // See comment above for \"remaining wheel events in this scroll\" determination.\n // If 1-4 aren't satisfied, then wait to snap until 500ms after the last event.\n clearTimeout(timeout);\n timeout = undefined;\n if (recentWheelEvents.length >= 15) {\n recentWheelEvents.shift(); // only store the last N events\n }\n\n const prevEvent = recentWheelEvents.length ? recentWheelEvents[recentWheelEvents.length - 1] : undefined;\n const firstEvent = recentWheelEvents[0];\n recentWheelEvents.push(newEvent);\n if (prevEvent && (newEvent.delta > prevEvent.delta || newEvent.direction !== prevEvent.direction)) {\n // Increasing or reverse-sign delta means the user started scrolling again. Clear the wheel event log.\n recentWheelEvents.splice(0);\n } else if (recentWheelEvents.length >= 15 && newEvent.time - firstEvent.time < 500 && firstEvent.delta - newEvent.delta >= 1 && newEvent.delta <= 6) {\n // We're at the end of the deceleration of a momentum scroll, so there's no need\n // to wait for more events. Snap ASAP on the next tick.\n // Also, because there's some remaining momentum we'll bias the snap in the\n // direction of the ongoing scroll because it's better UX for the scroll to snap\n // in the same direction as the scroll instead of reversing to snap. Therefore,\n // if it's already scrolled more than 20% in the current direction, keep going.\n const snapToThreshold = delta > 0 ? 0.8 : 0.2;\n lastEventBeforeSnap = newEvent;\n recentWheelEvents.splice(0);\n timeout = nextTick(() => {\n swiper.slideToClosest(swiper.params.speed, true, undefined, snapToThreshold);\n }, 0); // no delay; move on next tick\n }\n\n if (!timeout) {\n // if we get here, then we haven't detected the end of a momentum scroll, so\n // we'll consider a scroll \"complete\" when there haven't been any wheel events\n // for 500ms.\n timeout = nextTick(() => {\n const snapToThreshold = 0.5;\n lastEventBeforeSnap = newEvent;\n recentWheelEvents.splice(0);\n swiper.slideToClosest(swiper.params.speed, true, undefined, snapToThreshold);\n }, 500);\n }\n }\n\n // Emit event\n if (!ignoreWheelEvents) emit('scroll', e);\n\n // Stop autoplay\n if (swiper.params.autoplay && swiper.params.autoplayDisableOnInteraction) swiper.autoplay.stop();\n // Return page scroll on edge positions\n if (position === swiper.minTranslate() || position === swiper.maxTranslate()) return true;\n }\n }\n if (e.preventDefault) e.preventDefault();else e.returnValue = false;\n return false;\n }\n function events(method) {\n let targetEl = swiper.el;\n if (swiper.params.mousewheel.eventsTarget !== 'container') {\n targetEl = document.querySelector(swiper.params.mousewheel.eventsTarget);\n }\n targetEl[method]('mouseenter', handleMouseEnter);\n targetEl[method]('mouseleave', handleMouseLeave);\n targetEl[method]('wheel', handle);\n }\n function enable() {\n if (swiper.params.cssMode) {\n swiper.wrapperEl.removeEventListener('wheel', handle);\n return true;\n }\n if (swiper.mousewheel.enabled) return false;\n events('addEventListener');\n swiper.mousewheel.enabled = true;\n return true;\n }\n function disable() {\n if (swiper.params.cssMode) {\n swiper.wrapperEl.addEventListener(event, handle);\n return true;\n }\n if (!swiper.mousewheel.enabled) return false;\n events('removeEventListener');\n swiper.mousewheel.enabled = false;\n return true;\n }\n on('init', () => {\n if (!swiper.params.mousewheel.enabled && swiper.params.cssMode) {\n disable();\n }\n if (swiper.params.mousewheel.enabled) enable();\n });\n on('destroy', () => {\n if (swiper.params.cssMode) {\n enable();\n }\n if (swiper.mousewheel.enabled) disable();\n });\n Object.assign(swiper.mousewheel, {\n enable,\n disable\n });\n}","import createElementIfNotDefined from '../../shared/create-element-if-not-defined.js';\nexport default function Navigation({\n swiper,\n extendParams,\n on,\n emit\n}) {\n extendParams({\n navigation: {\n nextEl: null,\n prevEl: null,\n hideOnClick: false,\n disabledClass: 'swiper-button-disabled',\n hiddenClass: 'swiper-button-hidden',\n lockClass: 'swiper-button-lock',\n navigationDisabledClass: 'swiper-navigation-disabled'\n }\n });\n swiper.navigation = {\n nextEl: null,\n prevEl: null\n };\n const makeElementsArray = el => {\n if (!Array.isArray(el)) el = [el].filter(e => !!e);\n return el;\n };\n function getEl(el) {\n let res;\n if (el && typeof el === 'string' && swiper.isElement) {\n res = swiper.el.shadowRoot.querySelector(el);\n if (res) return res;\n }\n if (el) {\n if (typeof el === 'string') res = [...document.querySelectorAll(el)];\n if (swiper.params.uniqueNavElements && typeof el === 'string' && res.length > 1 && swiper.el.querySelectorAll(el).length === 1) {\n res = swiper.el.querySelector(el);\n }\n }\n if (el && !res) return el;\n // if (Array.isArray(res) && res.length === 1) res = res[0];\n return res;\n }\n function toggleEl(el, disabled) {\n const params = swiper.params.navigation;\n el = makeElementsArray(el);\n el.forEach(subEl => {\n if (subEl) {\n subEl.classList[disabled ? 'add' : 'remove'](...params.disabledClass.split(' '));\n if (subEl.tagName === 'BUTTON') subEl.disabled = disabled;\n if (swiper.params.watchOverflow && swiper.enabled) {\n subEl.classList[swiper.isLocked ? 'add' : 'remove'](params.lockClass);\n }\n }\n });\n }\n function update() {\n // Update Navigation Buttons\n const {\n nextEl,\n prevEl\n } = swiper.navigation;\n if (swiper.params.loop) {\n toggleEl(prevEl, false);\n toggleEl(nextEl, false);\n return;\n }\n toggleEl(prevEl, swiper.isBeginning && !swiper.params.rewind);\n toggleEl(nextEl, swiper.isEnd && !swiper.params.rewind);\n }\n function onPrevClick(e) {\n e.preventDefault();\n if (swiper.isBeginning && !swiper.params.loop && !swiper.params.rewind) return;\n swiper.slidePrev();\n emit('navigationPrev');\n }\n function onNextClick(e) {\n e.preventDefault();\n if (swiper.isEnd && !swiper.params.loop && !swiper.params.rewind) return;\n swiper.slideNext();\n emit('navigationNext');\n }\n function init() {\n const params = swiper.params.navigation;\n swiper.params.navigation = createElementIfNotDefined(swiper, swiper.originalParams.navigation, swiper.params.navigation, {\n nextEl: 'swiper-button-next',\n prevEl: 'swiper-button-prev'\n });\n if (!(params.nextEl || params.prevEl)) return;\n let nextEl = getEl(params.nextEl);\n let prevEl = getEl(params.prevEl);\n Object.assign(swiper.navigation, {\n nextEl,\n prevEl\n });\n nextEl = makeElementsArray(nextEl);\n prevEl = makeElementsArray(prevEl);\n const initButton = (el, dir) => {\n if (el) {\n el.addEventListener('click', dir === 'next' ? onNextClick : onPrevClick);\n }\n if (!swiper.enabled && el) {\n el.classList.add(...params.lockClass.split(' '));\n }\n };\n nextEl.forEach(el => initButton(el, 'next'));\n prevEl.forEach(el => initButton(el, 'prev'));\n }\n function destroy() {\n let {\n nextEl,\n prevEl\n } = swiper.navigation;\n nextEl = makeElementsArray(nextEl);\n prevEl = makeElementsArray(prevEl);\n const destroyButton = (el, dir) => {\n el.removeEventListener('click', dir === 'next' ? onNextClick : onPrevClick);\n el.classList.remove(...swiper.params.navigation.disabledClass.split(' '));\n };\n nextEl.forEach(el => destroyButton(el, 'next'));\n prevEl.forEach(el => destroyButton(el, 'prev'));\n }\n on('init', () => {\n if (swiper.params.navigation.enabled === false) {\n // eslint-disable-next-line\n disable();\n } else {\n init();\n update();\n }\n });\n on('toEdge fromEdge lock unlock', () => {\n update();\n });\n on('destroy', () => {\n destroy();\n });\n on('enable disable', () => {\n let {\n nextEl,\n prevEl\n } = swiper.navigation;\n nextEl = makeElementsArray(nextEl);\n prevEl = makeElementsArray(prevEl);\n [...nextEl, ...prevEl].filter(el => !!el).forEach(el => el.classList[swiper.enabled ? 'remove' : 'add'](swiper.params.navigation.lockClass));\n });\n on('click', (_s, e) => {\n let {\n nextEl,\n prevEl\n } = swiper.navigation;\n nextEl = makeElementsArray(nextEl);\n prevEl = makeElementsArray(prevEl);\n const targetEl = e.target;\n if (swiper.params.navigation.hideOnClick && !prevEl.includes(targetEl) && !nextEl.includes(targetEl)) {\n if (swiper.pagination && swiper.params.pagination && swiper.params.pagination.clickable && (swiper.pagination.el === targetEl || swiper.pagination.el.contains(targetEl))) return;\n let isHidden;\n if (nextEl.length) {\n isHidden = nextEl[0].classList.contains(swiper.params.navigation.hiddenClass);\n } else if (prevEl.length) {\n isHidden = prevEl[0].classList.contains(swiper.params.navigation.hiddenClass);\n }\n if (isHidden === true) {\n emit('navigationShow');\n } else {\n emit('navigationHide');\n }\n [...nextEl, ...prevEl].filter(el => !!el).forEach(el => el.classList.toggle(swiper.params.navigation.hiddenClass));\n }\n });\n const enable = () => {\n swiper.el.classList.remove(...swiper.params.navigation.navigationDisabledClass.split(' '));\n init();\n update();\n };\n const disable = () => {\n swiper.el.classList.add(...swiper.params.navigation.navigationDisabledClass.split(' '));\n destroy();\n };\n Object.assign(swiper.navigation, {\n enable,\n disable,\n update,\n init,\n destroy\n });\n}","import classesToSelector from '../../shared/classes-to-selector.js';\nimport createElementIfNotDefined from '../../shared/create-element-if-not-defined.js';\nimport { elementIndex, elementOuterSize, elementParents } from '../../shared/utils.js';\nexport default function Pagination({\n swiper,\n extendParams,\n on,\n emit\n}) {\n const pfx = 'swiper-pagination';\n extendParams({\n pagination: {\n el: null,\n bulletElement: 'span',\n clickable: false,\n hideOnClick: false,\n renderBullet: null,\n renderProgressbar: null,\n renderFraction: null,\n renderCustom: null,\n progressbarOpposite: false,\n type: 'bullets',\n // 'bullets' or 'progressbar' or 'fraction' or 'custom'\n dynamicBullets: false,\n dynamicMainBullets: 1,\n formatFractionCurrent: number => number,\n formatFractionTotal: number => number,\n bulletClass: `${pfx}-bullet`,\n bulletActiveClass: `${pfx}-bullet-active`,\n modifierClass: `${pfx}-`,\n currentClass: `${pfx}-current`,\n totalClass: `${pfx}-total`,\n hiddenClass: `${pfx}-hidden`,\n progressbarFillClass: `${pfx}-progressbar-fill`,\n progressbarOppositeClass: `${pfx}-progressbar-opposite`,\n clickableClass: `${pfx}-clickable`,\n lockClass: `${pfx}-lock`,\n horizontalClass: `${pfx}-horizontal`,\n verticalClass: `${pfx}-vertical`,\n paginationDisabledClass: `${pfx}-disabled`\n }\n });\n swiper.pagination = {\n el: null,\n bullets: []\n };\n let bulletSize;\n let dynamicBulletIndex = 0;\n const makeElementsArray = el => {\n if (!Array.isArray(el)) el = [el].filter(e => !!e);\n return el;\n };\n function isPaginationDisabled() {\n return !swiper.params.pagination.el || !swiper.pagination.el || Array.isArray(swiper.pagination.el) && swiper.pagination.el.length === 0;\n }\n function setSideBullets(bulletEl, position) {\n const {\n bulletActiveClass\n } = swiper.params.pagination;\n if (!bulletEl) return;\n bulletEl = bulletEl[`${position === 'prev' ? 'previous' : 'next'}ElementSibling`];\n if (bulletEl) {\n bulletEl.classList.add(`${bulletActiveClass}-${position}`);\n bulletEl = bulletEl[`${position === 'prev' ? 'previous' : 'next'}ElementSibling`];\n if (bulletEl) {\n bulletEl.classList.add(`${bulletActiveClass}-${position}-${position}`);\n }\n }\n }\n function onBulletClick(e) {\n const bulletEl = e.target.closest(classesToSelector(swiper.params.pagination.bulletClass));\n if (!bulletEl) {\n return;\n }\n e.preventDefault();\n const index = elementIndex(bulletEl) * swiper.params.slidesPerGroup;\n if (swiper.params.loop) {\n if (swiper.realIndex === index) return;\n const newSlideIndex = swiper.getSlideIndexByData(index);\n const currentSlideIndex = swiper.getSlideIndexByData(swiper.realIndex);\n if (newSlideIndex > swiper.slides.length - swiper.loopedSlides) {\n swiper.loopFix({\n direction: newSlideIndex > currentSlideIndex ? 'next' : 'prev',\n activeSlideIndex: newSlideIndex,\n slideTo: false\n });\n }\n swiper.slideToLoop(index);\n } else {\n swiper.slideTo(index);\n }\n }\n function update() {\n // Render || Update Pagination bullets/items\n const rtl = swiper.rtl;\n const params = swiper.params.pagination;\n if (isPaginationDisabled()) return;\n let el = swiper.pagination.el;\n el = makeElementsArray(el);\n // Current/Total\n let current;\n let previousIndex;\n const slidesLength = swiper.virtual && swiper.params.virtual.enabled ? swiper.virtual.slides.length : swiper.slides.length;\n const total = swiper.params.loop ? Math.ceil(slidesLength / swiper.params.slidesPerGroup) : swiper.snapGrid.length;\n if (swiper.params.loop) {\n previousIndex = swiper.previousRealIndex || 0;\n current = swiper.params.slidesPerGroup > 1 ? Math.floor(swiper.realIndex / swiper.params.slidesPerGroup) : swiper.realIndex;\n } else if (typeof swiper.snapIndex !== 'undefined') {\n current = swiper.snapIndex;\n previousIndex = swiper.previousSnapIndex;\n } else {\n previousIndex = swiper.previousIndex || 0;\n current = swiper.activeIndex || 0;\n }\n // Types\n if (params.type === 'bullets' && swiper.pagination.bullets && swiper.pagination.bullets.length > 0) {\n const bullets = swiper.pagination.bullets;\n let firstIndex;\n let lastIndex;\n let midIndex;\n if (params.dynamicBullets) {\n bulletSize = elementOuterSize(bullets[0], swiper.isHorizontal() ? 'width' : 'height', true);\n el.forEach(subEl => {\n subEl.style[swiper.isHorizontal() ? 'width' : 'height'] = `${bulletSize * (params.dynamicMainBullets + 4)}px`;\n });\n if (params.dynamicMainBullets > 1 && previousIndex !== undefined) {\n dynamicBulletIndex += current - (previousIndex || 0);\n if (dynamicBulletIndex > params.dynamicMainBullets - 1) {\n dynamicBulletIndex = params.dynamicMainBullets - 1;\n } else if (dynamicBulletIndex < 0) {\n dynamicBulletIndex = 0;\n }\n }\n firstIndex = Math.max(current - dynamicBulletIndex, 0);\n lastIndex = firstIndex + (Math.min(bullets.length, params.dynamicMainBullets) - 1);\n midIndex = (lastIndex + firstIndex) / 2;\n }\n bullets.forEach(bulletEl => {\n 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();\n bulletEl.classList.remove(...classesToRemove);\n });\n if (el.length > 1) {\n bullets.forEach(bullet => {\n const bulletIndex = elementIndex(bullet);\n if (bulletIndex === current) {\n bullet.classList.add(...params.bulletActiveClass.split(' '));\n } else if (swiper.isElement) {\n bullet.setAttribute('part', 'bullet');\n }\n if (params.dynamicBullets) {\n if (bulletIndex >= firstIndex && bulletIndex <= lastIndex) {\n bullet.classList.add(...`${params.bulletActiveClass}-main`.split(' '));\n }\n if (bulletIndex === firstIndex) {\n setSideBullets(bullet, 'prev');\n }\n if (bulletIndex === lastIndex) {\n setSideBullets(bullet, 'next');\n }\n }\n });\n } else {\n const bullet = bullets[current];\n if (bullet) {\n bullet.classList.add(...params.bulletActiveClass.split(' '));\n }\n if (swiper.isElement) {\n bullets.forEach((bulletEl, bulletIndex) => {\n bulletEl.setAttribute('part', bulletIndex === current ? 'bullet-active' : 'bullet');\n });\n }\n if (params.dynamicBullets) {\n const firstDisplayedBullet = bullets[firstIndex];\n const lastDisplayedBullet = bullets[lastIndex];\n for (let i = firstIndex; i <= lastIndex; i += 1) {\n if (bullets[i]) {\n bullets[i].classList.add(...`${params.bulletActiveClass}-main`.split(' '));\n }\n }\n setSideBullets(firstDisplayedBullet, 'prev');\n setSideBullets(lastDisplayedBullet, 'next');\n }\n }\n if (params.dynamicBullets) {\n const dynamicBulletsLength = Math.min(bullets.length, params.dynamicMainBullets + 4);\n const bulletsOffset = (bulletSize * dynamicBulletsLength - bulletSize) / 2 - midIndex * bulletSize;\n const offsetProp = rtl ? 'right' : 'left';\n bullets.forEach(bullet => {\n bullet.style[swiper.isHorizontal() ? offsetProp : 'top'] = `${bulletsOffset}px`;\n });\n }\n }\n el.forEach((subEl, subElIndex) => {\n if (params.type === 'fraction') {\n subEl.querySelectorAll(classesToSelector(params.currentClass)).forEach(fractionEl => {\n fractionEl.textContent = params.formatFractionCurrent(current + 1);\n });\n subEl.querySelectorAll(classesToSelector(params.totalClass)).forEach(totalEl => {\n totalEl.textContent = params.formatFractionTotal(total);\n });\n }\n if (params.type === 'progressbar') {\n let progressbarDirection;\n if (params.progressbarOpposite) {\n progressbarDirection = swiper.isHorizontal() ? 'vertical' : 'horizontal';\n } else {\n progressbarDirection = swiper.isHorizontal() ? 'horizontal' : 'vertical';\n }\n const scale = (current + 1) / total;\n let scaleX = 1;\n let scaleY = 1;\n if (progressbarDirection === 'horizontal') {\n scaleX = scale;\n } else {\n scaleY = scale;\n }\n subEl.querySelectorAll(classesToSelector(params.progressbarFillClass)).forEach(progressEl => {\n progressEl.style.transform = `translate3d(0,0,0) scaleX(${scaleX}) scaleY(${scaleY})`;\n progressEl.style.transitionDuration = `${swiper.params.speed}ms`;\n });\n }\n if (params.type === 'custom' && params.renderCustom) {\n subEl.innerHTML = params.renderCustom(swiper, current + 1, total);\n if (subElIndex === 0) emit('paginationRender', subEl);\n } else {\n if (subElIndex === 0) emit('paginationRender', subEl);\n emit('paginationUpdate', subEl);\n }\n if (swiper.params.watchOverflow && swiper.enabled) {\n subEl.classList[swiper.isLocked ? 'add' : 'remove'](params.lockClass);\n }\n });\n }\n function render() {\n // Render Container\n const params = swiper.params.pagination;\n if (isPaginationDisabled()) return;\n const slidesLength = swiper.virtual && swiper.params.virtual.enabled ? swiper.virtual.slides.length : swiper.slides.length;\n let el = swiper.pagination.el;\n el = makeElementsArray(el);\n let paginationHTML = '';\n if (params.type === 'bullets') {\n let numberOfBullets = swiper.params.loop ? Math.ceil(slidesLength / swiper.params.slidesPerGroup) : swiper.snapGrid.length;\n if (swiper.params.freeMode && swiper.params.freeMode.enabled && numberOfBullets > slidesLength) {\n numberOfBullets = slidesLength;\n }\n for (let i = 0; i < numberOfBullets; i += 1) {\n if (params.renderBullet) {\n paginationHTML += params.renderBullet.call(swiper, i, params.bulletClass);\n } else {\n // prettier-ignore\n paginationHTML += `<${params.bulletElement} ${swiper.isElement ? 'part=\"bullet\"' : ''} class=\"${params.bulletClass}\">`;\n }\n }\n }\n if (params.type === 'fraction') {\n if (params.renderFraction) {\n paginationHTML = params.renderFraction.call(swiper, params.currentClass, params.totalClass);\n } else {\n paginationHTML = `` + ' / ' + ``;\n }\n }\n if (params.type === 'progressbar') {\n if (params.renderProgressbar) {\n paginationHTML = params.renderProgressbar.call(swiper, params.progressbarFillClass);\n } else {\n paginationHTML = ``;\n }\n }\n swiper.pagination.bullets = [];\n el.forEach(subEl => {\n if (params.type !== 'custom') {\n subEl.innerHTML = paginationHTML || '';\n }\n if (params.type === 'bullets') {\n swiper.pagination.bullets.push(...subEl.querySelectorAll(classesToSelector(params.bulletClass)));\n }\n });\n if (params.type !== 'custom') {\n emit('paginationRender', el[0]);\n }\n }\n function init() {\n swiper.params.pagination = createElementIfNotDefined(swiper, swiper.originalParams.pagination, swiper.params.pagination, {\n el: 'swiper-pagination'\n });\n const params = swiper.params.pagination;\n if (!params.el) return;\n let el;\n if (typeof params.el === 'string' && swiper.isElement) {\n el = swiper.el.shadowRoot.querySelector(params.el);\n }\n if (!el && typeof params.el === 'string') {\n el = [...document.querySelectorAll(params.el)];\n }\n if (!el) {\n el = params.el;\n }\n if (!el || el.length === 0) return;\n if (swiper.params.uniqueNavElements && typeof params.el === 'string' && Array.isArray(el) && el.length > 1) {\n el = [...swiper.el.querySelectorAll(params.el)];\n // check if it belongs to another nested Swiper\n if (el.length > 1) {\n el = el.filter(subEl => {\n if (elementParents(subEl, '.swiper')[0] !== swiper.el) return false;\n return true;\n })[0];\n }\n }\n if (Array.isArray(el) && el.length === 1) el = el[0];\n Object.assign(swiper.pagination, {\n el\n });\n el = makeElementsArray(el);\n el.forEach(subEl => {\n if (params.type === 'bullets' && params.clickable) {\n subEl.classList.add(params.clickableClass);\n }\n subEl.classList.add(params.modifierClass + params.type);\n subEl.classList.add(swiper.isHorizontal() ? params.horizontalClass : params.verticalClass);\n if (params.type === 'bullets' && params.dynamicBullets) {\n subEl.classList.add(`${params.modifierClass}${params.type}-dynamic`);\n dynamicBulletIndex = 0;\n if (params.dynamicMainBullets < 1) {\n params.dynamicMainBullets = 1;\n }\n }\n if (params.type === 'progressbar' && params.progressbarOpposite) {\n subEl.classList.add(params.progressbarOppositeClass);\n }\n if (params.clickable) {\n subEl.addEventListener('click', onBulletClick);\n }\n if (!swiper.enabled) {\n subEl.classList.add(params.lockClass);\n }\n });\n }\n function destroy() {\n const params = swiper.params.pagination;\n if (isPaginationDisabled()) return;\n let el = swiper.pagination.el;\n if (el) {\n el = makeElementsArray(el);\n el.forEach(subEl => {\n subEl.classList.remove(params.hiddenClass);\n subEl.classList.remove(params.modifierClass + params.type);\n subEl.classList.remove(swiper.isHorizontal() ? params.horizontalClass : params.verticalClass);\n if (params.clickable) {\n subEl.removeEventListener('click', onBulletClick);\n }\n });\n }\n if (swiper.pagination.bullets) swiper.pagination.bullets.forEach(subEl => subEl.classList.remove(...params.bulletActiveClass.split(' ')));\n }\n on('changeDirection', () => {\n if (!swiper.pagination || !swiper.pagination.el) return;\n const params = swiper.params.pagination;\n let {\n el\n } = swiper.pagination;\n el = makeElementsArray(el);\n el.forEach(subEl => {\n subEl.classList.remove(params.horizontalClass, params.verticalClass);\n subEl.classList.add(swiper.isHorizontal() ? params.horizontalClass : params.verticalClass);\n });\n });\n on('init', () => {\n if (swiper.params.pagination.enabled === false) {\n // eslint-disable-next-line\n disable();\n } else {\n init();\n render();\n update();\n }\n });\n on('activeIndexChange', () => {\n if (typeof swiper.snapIndex === 'undefined') {\n update();\n }\n });\n on('snapIndexChange', () => {\n update();\n });\n on('snapGridLengthChange', () => {\n render();\n update();\n });\n on('destroy', () => {\n destroy();\n });\n on('enable disable', () => {\n let {\n el\n } = swiper.pagination;\n if (el) {\n el = makeElementsArray(el);\n el.forEach(subEl => subEl.classList[swiper.enabled ? 'remove' : 'add'](swiper.params.pagination.lockClass));\n }\n });\n on('lock unlock', () => {\n update();\n });\n on('click', (_s, e) => {\n const targetEl = e.target;\n let {\n el\n } = swiper.pagination;\n if (!Array.isArray(el)) el = [el].filter(element => !!element);\n if (swiper.params.pagination.el && swiper.params.pagination.hideOnClick && el && el.length > 0 && !targetEl.classList.contains(swiper.params.pagination.bulletClass)) {\n if (swiper.navigation && (swiper.navigation.nextEl && targetEl === swiper.navigation.nextEl || swiper.navigation.prevEl && targetEl === swiper.navigation.prevEl)) return;\n const isHidden = el[0].classList.contains(swiper.params.pagination.hiddenClass);\n if (isHidden === true) {\n emit('paginationShow');\n } else {\n emit('paginationHide');\n }\n el.forEach(subEl => subEl.classList.toggle(swiper.params.pagination.hiddenClass));\n }\n });\n const enable = () => {\n swiper.el.classList.remove(swiper.params.pagination.paginationDisabledClass);\n let {\n el\n } = swiper.pagination;\n if (el) {\n el = makeElementsArray(el);\n el.forEach(subEl => subEl.classList.remove(swiper.params.pagination.paginationDisabledClass));\n }\n init();\n render();\n update();\n };\n const disable = () => {\n swiper.el.classList.add(swiper.params.pagination.paginationDisabledClass);\n let {\n el\n } = swiper.pagination;\n if (el) {\n el = makeElementsArray(el);\n el.forEach(subEl => subEl.classList.add(swiper.params.pagination.paginationDisabledClass));\n }\n destroy();\n };\n Object.assign(swiper.pagination, {\n enable,\n disable,\n render,\n update,\n init,\n destroy\n });\n}","/* eslint no-underscore-dangle: \"off\" */\n/* eslint no-use-before-define: \"off\" */\nimport { getDocument } from 'ssr-window';\nexport default function Autoplay({\n swiper,\n extendParams,\n on,\n emit,\n params\n}) {\n swiper.autoplay = {\n running: false,\n paused: false,\n timeLeft: 0\n };\n extendParams({\n autoplay: {\n enabled: false,\n delay: 3000,\n waitForTransition: true,\n disableOnInteraction: true,\n stopOnLastSlide: false,\n reverseDirection: false,\n pauseOnMouseEnter: false\n }\n });\n let timeout;\n let raf;\n let autoplayDelayTotal = params && params.autoplay ? params.autoplay.delay : 3000;\n let autoplayDelayCurrent = params && params.autoplay ? params.autoplay.delay : 3000;\n let autoplayTimeLeft;\n let autoplayStartTime = new Date().getTime;\n let wasPaused;\n let isTouched;\n let pausedByTouch;\n let touchStartTimeout;\n let slideChanged;\n let pausedByInteraction;\n function onTransitionEnd(e) {\n if (!swiper || swiper.destroyed || !swiper.wrapperEl) return;\n if (e.target !== swiper.wrapperEl) return;\n swiper.wrapperEl.removeEventListener('transitionend', onTransitionEnd);\n resume();\n }\n const calcTimeLeft = () => {\n if (swiper.destroyed || !swiper.autoplay.running) return;\n if (swiper.autoplay.paused) {\n wasPaused = true;\n } else if (wasPaused) {\n autoplayDelayCurrent = autoplayTimeLeft;\n wasPaused = false;\n }\n const timeLeft = swiper.autoplay.paused ? autoplayTimeLeft : autoplayStartTime + autoplayDelayCurrent - new Date().getTime();\n swiper.autoplay.timeLeft = timeLeft;\n emit('autoplayTimeLeft', timeLeft, timeLeft / autoplayDelayTotal);\n raf = requestAnimationFrame(() => {\n calcTimeLeft();\n });\n };\n const getSlideDelay = () => {\n let activeSlideEl;\n if (swiper.virtual && swiper.params.virtual.enabled) {\n activeSlideEl = swiper.slides.filter(slideEl => slideEl.classList.contains('swiper-slide-active'))[0];\n } else {\n activeSlideEl = swiper.slides[swiper.activeIndex];\n }\n if (!activeSlideEl) return undefined;\n const currentSlideDelay = parseInt(activeSlideEl.getAttribute('data-swiper-autoplay'), 10);\n return currentSlideDelay;\n };\n const run = delayForce => {\n if (swiper.destroyed || !swiper.autoplay.running) return;\n cancelAnimationFrame(raf);\n calcTimeLeft();\n let delay = typeof delayForce === 'undefined' ? swiper.params.autoplay.delay : delayForce;\n autoplayDelayTotal = swiper.params.autoplay.delay;\n autoplayDelayCurrent = swiper.params.autoplay.delay;\n const currentSlideDelay = getSlideDelay();\n if (!Number.isNaN(currentSlideDelay) && currentSlideDelay > 0 && typeof delayForce === 'undefined') {\n delay = currentSlideDelay;\n autoplayDelayTotal = currentSlideDelay;\n autoplayDelayCurrent = currentSlideDelay;\n }\n autoplayTimeLeft = delay;\n const speed = swiper.params.speed;\n const proceed = () => {\n if (!swiper || swiper.destroyed) return;\n if (swiper.params.autoplay.reverseDirection) {\n if (!swiper.isBeginning || swiper.params.loop || swiper.params.rewind) {\n swiper.slidePrev(speed, true, true);\n emit('autoplay');\n } else if (!swiper.params.autoplay.stopOnLastSlide) {\n swiper.slideTo(swiper.slides.length - 1, speed, true, true);\n emit('autoplay');\n }\n } else {\n if (!swiper.isEnd || swiper.params.loop || swiper.params.rewind) {\n swiper.slideNext(speed, true, true);\n emit('autoplay');\n } else if (!swiper.params.autoplay.stopOnLastSlide) {\n swiper.slideTo(0, speed, true, true);\n emit('autoplay');\n }\n }\n if (swiper.params.cssMode) {\n autoplayStartTime = new Date().getTime();\n requestAnimationFrame(() => {\n run();\n });\n }\n };\n if (delay > 0) {\n clearTimeout(timeout);\n timeout = setTimeout(() => {\n proceed();\n }, delay);\n } else {\n requestAnimationFrame(() => {\n proceed();\n });\n }\n\n // eslint-disable-next-line\n return delay;\n };\n const start = () => {\n swiper.autoplay.running = true;\n run();\n emit('autoplayStart');\n };\n const stop = () => {\n swiper.autoplay.running = false;\n clearTimeout(timeout);\n cancelAnimationFrame(raf);\n emit('autoplayStop');\n };\n const pause = (internal, reset) => {\n if (swiper.destroyed || !swiper.autoplay.running) return;\n clearTimeout(timeout);\n if (!internal) {\n pausedByInteraction = true;\n }\n const proceed = () => {\n emit('autoplayPause');\n if (swiper.params.autoplay.waitForTransition) {\n swiper.wrapperEl.addEventListener('transitionend', onTransitionEnd);\n } else {\n resume();\n }\n };\n swiper.autoplay.paused = true;\n if (reset) {\n if (slideChanged) {\n autoplayTimeLeft = swiper.params.autoplay.delay;\n }\n slideChanged = false;\n proceed();\n return;\n }\n const delay = autoplayTimeLeft || swiper.params.autoplay.delay;\n autoplayTimeLeft = delay - (new Date().getTime() - autoplayStartTime);\n if (swiper.isEnd && autoplayTimeLeft < 0 && !swiper.params.loop) return;\n if (autoplayTimeLeft < 0) autoplayTimeLeft = 0;\n proceed();\n };\n const resume = () => {\n if (swiper.isEnd && autoplayTimeLeft < 0 && !swiper.params.loop || swiper.destroyed || !swiper.autoplay.running) return;\n autoplayStartTime = new Date().getTime();\n if (pausedByInteraction) {\n pausedByInteraction = false;\n run(autoplayTimeLeft);\n } else {\n run();\n }\n swiper.autoplay.paused = false;\n emit('autoplayResume');\n };\n const onVisibilityChange = () => {\n if (swiper.destroyed || !swiper.autoplay.running) return;\n const document = getDocument();\n if (document.visibilityState === 'hidden') {\n pausedByInteraction = true;\n pause(true);\n }\n if (document.visibilityState === 'visible') {\n resume();\n }\n };\n const onPointerEnter = e => {\n if (e.pointerType !== 'mouse') return;\n pausedByInteraction = true;\n pause(true);\n };\n const onPointerLeave = e => {\n if (e.pointerType !== 'mouse') return;\n if (swiper.autoplay.paused) {\n resume();\n }\n };\n const attachMouseEvents = () => {\n if (swiper.params.autoplay.pauseOnMouseEnter) {\n swiper.el.addEventListener('pointerenter', onPointerEnter);\n swiper.el.addEventListener('pointerleave', onPointerLeave);\n }\n };\n const detachMouseEvents = () => {\n swiper.el.removeEventListener('pointerenter', onPointerEnter);\n swiper.el.removeEventListener('pointerleave', onPointerLeave);\n };\n const attachDocumentEvents = () => {\n const document = getDocument();\n document.addEventListener('visibilitychange', onVisibilityChange);\n };\n const detachDocumentEvents = () => {\n const document = getDocument();\n document.removeEventListener('visibilitychange', onVisibilityChange);\n };\n on('init', () => {\n if (swiper.params.autoplay.enabled) {\n attachMouseEvents();\n attachDocumentEvents();\n autoplayStartTime = new Date().getTime();\n start();\n }\n });\n on('destroy', () => {\n detachMouseEvents();\n detachDocumentEvents();\n if (swiper.autoplay.running) {\n stop();\n }\n });\n on('beforeTransitionStart', (_s, speed, internal) => {\n if (swiper.destroyed || !swiper.autoplay.running) return;\n if (internal || !swiper.params.autoplay.disableOnInteraction) {\n pause(true, true);\n } else {\n stop();\n }\n });\n on('sliderFirstMove', () => {\n if (swiper.destroyed || !swiper.autoplay.running) return;\n if (swiper.params.autoplay.disableOnInteraction) {\n stop();\n return;\n }\n isTouched = true;\n pausedByTouch = false;\n pausedByInteraction = false;\n touchStartTimeout = setTimeout(() => {\n pausedByInteraction = true;\n pausedByTouch = true;\n pause(true);\n }, 200);\n });\n on('touchEnd', () => {\n if (swiper.destroyed || !swiper.autoplay.running || !isTouched) return;\n clearTimeout(touchStartTimeout);\n clearTimeout(timeout);\n if (swiper.params.autoplay.disableOnInteraction) {\n pausedByTouch = false;\n isTouched = false;\n return;\n }\n if (pausedByTouch && swiper.params.cssMode) resume();\n pausedByTouch = false;\n isTouched = false;\n });\n on('slideChange', () => {\n if (swiper.destroyed || !swiper.autoplay.running) return;\n slideChanged = true;\n });\n Object.assign(swiper.autoplay, {\n start,\n stop,\n pause,\n resume\n });\n}","import { getDocument } from 'ssr-window';\nimport { elementChildren, isObject } from '../../shared/utils.js';\nexport default function Thumb({\n swiper,\n extendParams,\n on\n}) {\n extendParams({\n thumbs: {\n swiper: null,\n multipleActiveThumbs: true,\n autoScrollOffset: 0,\n slideThumbActiveClass: 'swiper-slide-thumb-active',\n thumbsContainerClass: 'swiper-thumbs'\n }\n });\n let initialized = false;\n let swiperCreated = false;\n swiper.thumbs = {\n swiper: null\n };\n function onThumbClick() {\n const thumbsSwiper = swiper.thumbs.swiper;\n if (!thumbsSwiper || thumbsSwiper.destroyed) return;\n const clickedIndex = thumbsSwiper.clickedIndex;\n const clickedSlide = thumbsSwiper.clickedSlide;\n if (clickedSlide && clickedSlide.classList.contains(swiper.params.thumbs.slideThumbActiveClass)) return;\n if (typeof clickedIndex === 'undefined' || clickedIndex === null) return;\n let slideToIndex;\n if (thumbsSwiper.params.loop) {\n slideToIndex = parseInt(thumbsSwiper.clickedSlide.getAttribute('data-swiper-slide-index'), 10);\n } else {\n slideToIndex = clickedIndex;\n }\n if (swiper.params.loop) {\n swiper.slideToLoop(slideToIndex);\n } else {\n swiper.slideTo(slideToIndex);\n }\n }\n function init() {\n const {\n thumbs: thumbsParams\n } = swiper.params;\n if (initialized) return false;\n initialized = true;\n const SwiperClass = swiper.constructor;\n if (thumbsParams.swiper instanceof SwiperClass) {\n swiper.thumbs.swiper = thumbsParams.swiper;\n Object.assign(swiper.thumbs.swiper.originalParams, {\n watchSlidesProgress: true,\n slideToClickedSlide: false\n });\n Object.assign(swiper.thumbs.swiper.params, {\n watchSlidesProgress: true,\n slideToClickedSlide: false\n });\n swiper.thumbs.swiper.update();\n } else if (isObject(thumbsParams.swiper)) {\n const thumbsSwiperParams = Object.assign({}, thumbsParams.swiper);\n Object.assign(thumbsSwiperParams, {\n watchSlidesProgress: true,\n slideToClickedSlide: false\n });\n swiper.thumbs.swiper = new SwiperClass(thumbsSwiperParams);\n swiperCreated = true;\n }\n swiper.thumbs.swiper.el.classList.add(swiper.params.thumbs.thumbsContainerClass);\n swiper.thumbs.swiper.on('tap', onThumbClick);\n return true;\n }\n function update(initial) {\n const thumbsSwiper = swiper.thumbs.swiper;\n if (!thumbsSwiper || thumbsSwiper.destroyed) return;\n const slidesPerView = thumbsSwiper.params.slidesPerView === 'auto' ? thumbsSwiper.slidesPerViewDynamic() : thumbsSwiper.params.slidesPerView;\n\n // Activate thumbs\n let thumbsToActivate = 1;\n const thumbActiveClass = swiper.params.thumbs.slideThumbActiveClass;\n if (swiper.params.slidesPerView > 1 && !swiper.params.centeredSlides) {\n thumbsToActivate = swiper.params.slidesPerView;\n }\n if (!swiper.params.thumbs.multipleActiveThumbs) {\n thumbsToActivate = 1;\n }\n thumbsToActivate = Math.floor(thumbsToActivate);\n thumbsSwiper.slides.forEach(slideEl => slideEl.classList.remove(thumbActiveClass));\n if (thumbsSwiper.params.loop || thumbsSwiper.params.virtual && thumbsSwiper.params.virtual.enabled) {\n for (let i = 0; i < thumbsToActivate; i += 1) {\n elementChildren(thumbsSwiper.slidesEl, `[data-swiper-slide-index=\"${swiper.realIndex + i}\"]`).forEach(slideEl => {\n slideEl.classList.add(thumbActiveClass);\n });\n }\n } else {\n for (let i = 0; i < thumbsToActivate; i += 1) {\n if (thumbsSwiper.slides[swiper.realIndex + i]) {\n thumbsSwiper.slides[swiper.realIndex + i].classList.add(thumbActiveClass);\n }\n }\n }\n const autoScrollOffset = swiper.params.thumbs.autoScrollOffset;\n const useOffset = autoScrollOffset && !thumbsSwiper.params.loop;\n if (swiper.realIndex !== thumbsSwiper.realIndex || useOffset) {\n const currentThumbsIndex = thumbsSwiper.activeIndex;\n let newThumbsIndex;\n let direction;\n if (thumbsSwiper.params.loop) {\n const newThumbsSlide = thumbsSwiper.slides.filter(slideEl => slideEl.getAttribute('data-swiper-slide-index') === `${swiper.realIndex}`)[0];\n newThumbsIndex = thumbsSwiper.slides.indexOf(newThumbsSlide);\n direction = swiper.activeIndex > swiper.previousIndex ? 'next' : 'prev';\n } else {\n newThumbsIndex = swiper.realIndex;\n direction = newThumbsIndex > swiper.previousIndex ? 'next' : 'prev';\n }\n if (useOffset) {\n newThumbsIndex += direction === 'next' ? autoScrollOffset : -1 * autoScrollOffset;\n }\n if (thumbsSwiper.visibleSlidesIndexes && thumbsSwiper.visibleSlidesIndexes.indexOf(newThumbsIndex) < 0) {\n if (thumbsSwiper.params.centeredSlides) {\n if (newThumbsIndex > currentThumbsIndex) {\n newThumbsIndex = newThumbsIndex - Math.floor(slidesPerView / 2) + 1;\n } else {\n newThumbsIndex = newThumbsIndex + Math.floor(slidesPerView / 2) - 1;\n }\n } else if (newThumbsIndex > currentThumbsIndex && thumbsSwiper.params.slidesPerGroup === 1) {\n // newThumbsIndex = newThumbsIndex - slidesPerView + 1;\n }\n thumbsSwiper.slideTo(newThumbsIndex, initial ? 0 : undefined);\n }\n }\n }\n on('beforeInit', () => {\n const {\n thumbs\n } = swiper.params;\n if (!thumbs || !thumbs.swiper) return;\n if (typeof thumbs.swiper === 'string' || thumbs.swiper instanceof HTMLElement) {\n const document = getDocument();\n const getThumbsElementAndInit = () => {\n const thumbsElement = typeof thumbs.swiper === 'string' ? document.querySelector(thumbs.swiper) : thumbs.swiper;\n if (thumbsElement && thumbsElement.swiper) {\n thumbs.swiper = thumbsElement.swiper;\n init();\n update(true);\n } else if (thumbsElement) {\n const onThumbsSwiper = e => {\n thumbs.swiper = e.detail[0];\n thumbsElement.removeEventListener('init', onThumbsSwiper);\n init();\n update(true);\n thumbs.swiper.update();\n swiper.update();\n };\n thumbsElement.addEventListener('init', onThumbsSwiper);\n }\n return thumbsElement;\n };\n const watchForThumbsToAppear = () => {\n if (swiper.destroyed) return;\n const thumbsElement = getThumbsElementAndInit();\n if (!thumbsElement) {\n requestAnimationFrame(watchForThumbsToAppear);\n }\n };\n requestAnimationFrame(watchForThumbsToAppear);\n } else {\n init();\n update(true);\n }\n });\n on('slideChange update resize observerUpdate', () => {\n update();\n });\n on('setTransition', (_s, duration) => {\n const thumbsSwiper = swiper.thumbs.swiper;\n if (!thumbsSwiper || thumbsSwiper.destroyed) return;\n thumbsSwiper.setTransition(duration);\n });\n on('beforeDestroy', () => {\n const thumbsSwiper = swiper.thumbs.swiper;\n if (!thumbsSwiper || thumbsSwiper.destroyed) return;\n if (swiperCreated) {\n thumbsSwiper.destroy();\n }\n });\n Object.assign(swiper.thumbs, {\n init,\n update\n });\n}","import { getWindow } from 'ssr-window';\nimport { elementChildren, elementOffset, elementParents, getTranslate } from '../../shared/utils.js';\nexport default function Zoom({\n swiper,\n extendParams,\n on,\n emit\n}) {\n const window = getWindow();\n extendParams({\n zoom: {\n enabled: false,\n maxRatio: 3,\n minRatio: 1,\n toggle: true,\n containerClass: 'swiper-zoom-container',\n zoomedSlideClass: 'swiper-slide-zoomed'\n }\n });\n swiper.zoom = {\n enabled: false\n };\n let currentScale = 1;\n let isScaling = false;\n let fakeGestureTouched;\n let fakeGestureMoved;\n const evCache = [];\n const gesture = {\n originX: 0,\n originY: 0,\n slideEl: undefined,\n slideWidth: undefined,\n slideHeight: undefined,\n imageEl: undefined,\n imageWrapEl: undefined,\n maxRatio: 3\n };\n const image = {\n isTouched: undefined,\n isMoved: undefined,\n currentX: undefined,\n currentY: undefined,\n minX: undefined,\n minY: undefined,\n maxX: undefined,\n maxY: undefined,\n width: undefined,\n height: undefined,\n startX: undefined,\n startY: undefined,\n touchesStart: {},\n touchesCurrent: {}\n };\n const velocity = {\n x: undefined,\n y: undefined,\n prevPositionX: undefined,\n prevPositionY: undefined,\n prevTime: undefined\n };\n let scale = 1;\n Object.defineProperty(swiper.zoom, 'scale', {\n get() {\n return scale;\n },\n set(value) {\n if (scale !== value) {\n const imageEl = gesture.imageEl;\n const slideEl = gesture.slideEl;\n emit('zoomChange', value, imageEl, slideEl);\n }\n scale = value;\n }\n });\n function getDistanceBetweenTouches() {\n if (evCache.length < 2) return 1;\n const x1 = evCache[0].pageX;\n const y1 = evCache[0].pageY;\n const x2 = evCache[1].pageX;\n const y2 = evCache[1].pageY;\n const distance = Math.sqrt((x2 - x1) ** 2 + (y2 - y1) ** 2);\n return distance;\n }\n function getScaleOrigin() {\n if (evCache.length < 2) return {\n x: null,\n y: null\n };\n const box = gesture.imageEl.getBoundingClientRect();\n return [(evCache[0].pageX + (evCache[1].pageX - evCache[0].pageX) / 2 - box.x) / currentScale, (evCache[0].pageY + (evCache[1].pageY - evCache[0].pageY) / 2 - box.y) / currentScale];\n }\n function getSlideSelector() {\n return swiper.isElement ? `swiper-slide` : `.${swiper.params.slideClass}`;\n }\n function eventWithinSlide(e) {\n const slideSelector = getSlideSelector();\n if (e.target.matches(slideSelector)) return true;\n if (swiper.slides.filter(slideEl => slideEl.contains(e.target)).length > 0) return true;\n return false;\n }\n function eventWithinZoomContainer(e) {\n const selector = `.${swiper.params.zoom.containerClass}`;\n if (e.target.matches(selector)) return true;\n if ([...swiper.el.querySelectorAll(selector)].filter(containerEl => containerEl.contains(e.target)).length > 0) return true;\n return false;\n }\n\n // Events\n function onGestureStart(e) {\n if (e.pointerType === 'mouse') {\n evCache.splice(0, evCache.length);\n }\n if (!eventWithinSlide(e)) return;\n const params = swiper.params.zoom;\n fakeGestureTouched = false;\n fakeGestureMoved = false;\n evCache.push(e);\n if (evCache.length < 2) {\n return;\n }\n fakeGestureTouched = true;\n gesture.scaleStart = getDistanceBetweenTouches();\n if (!gesture.slideEl) {\n gesture.slideEl = e.target.closest(`.${swiper.params.slideClass}, swiper-slide`);\n if (!gesture.slideEl) gesture.slideEl = swiper.slides[swiper.activeIndex];\n let imageEl = gesture.slideEl.querySelector(`.${params.containerClass}`);\n if (imageEl) {\n imageEl = imageEl.querySelectorAll('picture, img, svg, canvas, .swiper-zoom-target')[0];\n }\n gesture.imageEl = imageEl;\n if (imageEl) {\n gesture.imageWrapEl = elementParents(gesture.imageEl, `.${params.containerClass}`)[0];\n } else {\n gesture.imageWrapEl = undefined;\n }\n if (!gesture.imageWrapEl) {\n gesture.imageEl = undefined;\n return;\n }\n gesture.maxRatio = gesture.imageWrapEl.getAttribute('data-swiper-zoom') || params.maxRatio;\n }\n if (gesture.imageEl) {\n const [originX, originY] = getScaleOrigin();\n gesture.originX = originX;\n gesture.originY = originY;\n gesture.imageEl.style.transitionDuration = '0ms';\n }\n isScaling = true;\n }\n function onGestureChange(e) {\n if (!eventWithinSlide(e)) return;\n const params = swiper.params.zoom;\n const zoom = swiper.zoom;\n const pointerIndex = evCache.findIndex(cachedEv => cachedEv.pointerId === e.pointerId);\n if (pointerIndex >= 0) evCache[pointerIndex] = e;\n if (evCache.length < 2) {\n return;\n }\n fakeGestureMoved = true;\n gesture.scaleMove = getDistanceBetweenTouches();\n if (!gesture.imageEl) {\n return;\n }\n zoom.scale = gesture.scaleMove / gesture.scaleStart * currentScale;\n if (zoom.scale > gesture.maxRatio) {\n zoom.scale = gesture.maxRatio - 1 + (zoom.scale - gesture.maxRatio + 1) ** 0.5;\n }\n if (zoom.scale < params.minRatio) {\n zoom.scale = params.minRatio + 1 - (params.minRatio - zoom.scale + 1) ** 0.5;\n }\n gesture.imageEl.style.transform = `translate3d(0,0,0) scale(${zoom.scale})`;\n }\n function onGestureEnd(e) {\n if (!eventWithinSlide(e)) return;\n if (e.pointerType === 'mouse' && e.type === 'pointerout') return;\n const params = swiper.params.zoom;\n const zoom = swiper.zoom;\n const pointerIndex = evCache.findIndex(cachedEv => cachedEv.pointerId === e.pointerId);\n if (pointerIndex >= 0) evCache.splice(pointerIndex, 1);\n if (!fakeGestureTouched || !fakeGestureMoved) {\n return;\n }\n fakeGestureTouched = false;\n fakeGestureMoved = false;\n if (!gesture.imageEl) return;\n zoom.scale = Math.max(Math.min(zoom.scale, gesture.maxRatio), params.minRatio);\n gesture.imageEl.style.transitionDuration = `${swiper.params.speed}ms`;\n gesture.imageEl.style.transform = `translate3d(0,0,0) scale(${zoom.scale})`;\n currentScale = zoom.scale;\n isScaling = false;\n if (zoom.scale > 1 && gesture.slideEl) {\n gesture.slideEl.classList.add(`${params.zoomedSlideClass}`);\n } else if (zoom.scale <= 1 && gesture.slideEl) {\n gesture.slideEl.classList.remove(`${params.zoomedSlideClass}`);\n }\n if (zoom.scale === 1) {\n gesture.originX = 0;\n gesture.originY = 0;\n gesture.slideEl = undefined;\n }\n }\n function onTouchStart(e) {\n const device = swiper.device;\n if (!gesture.imageEl) return;\n if (image.isTouched) return;\n if (device.android && e.cancelable) e.preventDefault();\n image.isTouched = true;\n const event = evCache.length > 0 ? evCache[0] : e;\n image.touchesStart.x = event.pageX;\n image.touchesStart.y = event.pageY;\n }\n function onTouchMove(e) {\n if (!eventWithinSlide(e) || !eventWithinZoomContainer(e)) return;\n const zoom = swiper.zoom;\n if (!gesture.imageEl) return;\n if (!image.isTouched || !gesture.slideEl) return;\n if (!image.isMoved) {\n image.width = gesture.imageEl.offsetWidth;\n image.height = gesture.imageEl.offsetHeight;\n image.startX = getTranslate(gesture.imageWrapEl, 'x') || 0;\n image.startY = getTranslate(gesture.imageWrapEl, 'y') || 0;\n gesture.slideWidth = gesture.slideEl.offsetWidth;\n gesture.slideHeight = gesture.slideEl.offsetHeight;\n gesture.imageWrapEl.style.transitionDuration = '0ms';\n }\n // Define if we need image drag\n const scaledWidth = image.width * zoom.scale;\n const scaledHeight = image.height * zoom.scale;\n if (scaledWidth < gesture.slideWidth && scaledHeight < gesture.slideHeight) return;\n image.minX = Math.min(gesture.slideWidth / 2 - scaledWidth / 2, 0);\n image.maxX = -image.minX;\n image.minY = Math.min(gesture.slideHeight / 2 - scaledHeight / 2, 0);\n image.maxY = -image.minY;\n image.touchesCurrent.x = evCache.length > 0 ? evCache[0].pageX : e.pageX;\n image.touchesCurrent.y = evCache.length > 0 ? evCache[0].pageY : e.pageY;\n const touchesDiff = Math.max(Math.abs(image.touchesCurrent.x - image.touchesStart.x), Math.abs(image.touchesCurrent.y - image.touchesStart.y));\n if (touchesDiff > 5) {\n swiper.allowClick = false;\n }\n if (!image.isMoved && !isScaling) {\n 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)) {\n image.isTouched = false;\n return;\n }\n 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)) {\n image.isTouched = false;\n return;\n }\n }\n if (e.cancelable) {\n e.preventDefault();\n }\n e.stopPropagation();\n image.isMoved = true;\n const scaleRatio = (zoom.scale - currentScale) / (gesture.maxRatio - swiper.params.zoom.minRatio);\n const {\n originX,\n originY\n } = gesture;\n image.currentX = image.touchesCurrent.x - image.touchesStart.x + image.startX + scaleRatio * (image.width - originX * 2);\n image.currentY = image.touchesCurrent.y - image.touchesStart.y + image.startY + scaleRatio * (image.height - originY * 2);\n if (image.currentX < image.minX) {\n image.currentX = image.minX + 1 - (image.minX - image.currentX + 1) ** 0.8;\n }\n if (image.currentX > image.maxX) {\n image.currentX = image.maxX - 1 + (image.currentX - image.maxX + 1) ** 0.8;\n }\n if (image.currentY < image.minY) {\n image.currentY = image.minY + 1 - (image.minY - image.currentY + 1) ** 0.8;\n }\n if (image.currentY > image.maxY) {\n image.currentY = image.maxY - 1 + (image.currentY - image.maxY + 1) ** 0.8;\n }\n\n // Velocity\n if (!velocity.prevPositionX) velocity.prevPositionX = image.touchesCurrent.x;\n if (!velocity.prevPositionY) velocity.prevPositionY = image.touchesCurrent.y;\n if (!velocity.prevTime) velocity.prevTime = Date.now();\n velocity.x = (image.touchesCurrent.x - velocity.prevPositionX) / (Date.now() - velocity.prevTime) / 2;\n velocity.y = (image.touchesCurrent.y - velocity.prevPositionY) / (Date.now() - velocity.prevTime) / 2;\n if (Math.abs(image.touchesCurrent.x - velocity.prevPositionX) < 2) velocity.x = 0;\n if (Math.abs(image.touchesCurrent.y - velocity.prevPositionY) < 2) velocity.y = 0;\n velocity.prevPositionX = image.touchesCurrent.x;\n velocity.prevPositionY = image.touchesCurrent.y;\n velocity.prevTime = Date.now();\n gesture.imageWrapEl.style.transform = `translate3d(${image.currentX}px, ${image.currentY}px,0)`;\n }\n function onTouchEnd() {\n const zoom = swiper.zoom;\n if (!gesture.imageEl) return;\n if (!image.isTouched || !image.isMoved) {\n image.isTouched = false;\n image.isMoved = false;\n return;\n }\n image.isTouched = false;\n image.isMoved = false;\n let momentumDurationX = 300;\n let momentumDurationY = 300;\n const momentumDistanceX = velocity.x * momentumDurationX;\n const newPositionX = image.currentX + momentumDistanceX;\n const momentumDistanceY = velocity.y * momentumDurationY;\n const newPositionY = image.currentY + momentumDistanceY;\n\n // Fix duration\n if (velocity.x !== 0) momentumDurationX = Math.abs((newPositionX - image.currentX) / velocity.x);\n if (velocity.y !== 0) momentumDurationY = Math.abs((newPositionY - image.currentY) / velocity.y);\n const momentumDuration = Math.max(momentumDurationX, momentumDurationY);\n image.currentX = newPositionX;\n image.currentY = newPositionY;\n // Define if we need image drag\n const scaledWidth = image.width * zoom.scale;\n const scaledHeight = image.height * zoom.scale;\n image.minX = Math.min(gesture.slideWidth / 2 - scaledWidth / 2, 0);\n image.maxX = -image.minX;\n image.minY = Math.min(gesture.slideHeight / 2 - scaledHeight / 2, 0);\n image.maxY = -image.minY;\n image.currentX = Math.max(Math.min(image.currentX, image.maxX), image.minX);\n image.currentY = Math.max(Math.min(image.currentY, image.maxY), image.minY);\n gesture.imageWrapEl.style.transitionDuration = `${momentumDuration}ms`;\n gesture.imageWrapEl.style.transform = `translate3d(${image.currentX}px, ${image.currentY}px,0)`;\n }\n function onTransitionEnd() {\n const zoom = swiper.zoom;\n if (gesture.slideEl && swiper.activeIndex !== swiper.slides.indexOf(gesture.slideEl)) {\n if (gesture.imageEl) {\n gesture.imageEl.style.transform = 'translate3d(0,0,0) scale(1)';\n }\n if (gesture.imageWrapEl) {\n gesture.imageWrapEl.style.transform = 'translate3d(0,0,0)';\n }\n gesture.slideEl.classList.remove(`${swiper.params.zoom.zoomedSlideClass}`);\n zoom.scale = 1;\n currentScale = 1;\n gesture.slideEl = undefined;\n gesture.imageEl = undefined;\n gesture.imageWrapEl = undefined;\n gesture.originX = 0;\n gesture.originY = 0;\n }\n }\n function zoomIn(e) {\n const zoom = swiper.zoom;\n const params = swiper.params.zoom;\n if (!gesture.slideEl) {\n if (e && e.target) {\n gesture.slideEl = e.target.closest(`.${swiper.params.slideClass}, swiper-slide`);\n }\n if (!gesture.slideEl) {\n if (swiper.params.virtual && swiper.params.virtual.enabled && swiper.virtual) {\n gesture.slideEl = elementChildren(swiper.slidesEl, `.${swiper.params.slideActiveClass}`)[0];\n } else {\n gesture.slideEl = swiper.slides[swiper.activeIndex];\n }\n }\n let imageEl = gesture.slideEl.querySelector(`.${params.containerClass}`);\n if (imageEl) {\n imageEl = imageEl.querySelectorAll('picture, img, svg, canvas, .swiper-zoom-target')[0];\n }\n gesture.imageEl = imageEl;\n if (imageEl) {\n gesture.imageWrapEl = elementParents(gesture.imageEl, `.${params.containerClass}`)[0];\n } else {\n gesture.imageWrapEl = undefined;\n }\n }\n if (!gesture.imageEl || !gesture.imageWrapEl) return;\n if (swiper.params.cssMode) {\n swiper.wrapperEl.style.overflow = 'hidden';\n swiper.wrapperEl.style.touchAction = 'none';\n }\n gesture.slideEl.classList.add(`${params.zoomedSlideClass}`);\n let touchX;\n let touchY;\n let offsetX;\n let offsetY;\n let diffX;\n let diffY;\n let translateX;\n let translateY;\n let imageWidth;\n let imageHeight;\n let scaledWidth;\n let scaledHeight;\n let translateMinX;\n let translateMinY;\n let translateMaxX;\n let translateMaxY;\n let slideWidth;\n let slideHeight;\n if (typeof image.touchesStart.x === 'undefined' && e) {\n touchX = e.pageX;\n touchY = e.pageY;\n } else {\n touchX = image.touchesStart.x;\n touchY = image.touchesStart.y;\n }\n const forceZoomRatio = typeof e === 'number' ? e : null;\n if (currentScale === 1 && forceZoomRatio) {\n touchX = undefined;\n touchY = undefined;\n }\n zoom.scale = forceZoomRatio || gesture.imageWrapEl.getAttribute('data-swiper-zoom') || params.maxRatio;\n currentScale = forceZoomRatio || gesture.imageWrapEl.getAttribute('data-swiper-zoom') || params.maxRatio;\n if (e && !(currentScale === 1 && forceZoomRatio)) {\n slideWidth = gesture.slideEl.offsetWidth;\n slideHeight = gesture.slideEl.offsetHeight;\n offsetX = elementOffset(gesture.slideEl).left + window.scrollX;\n offsetY = elementOffset(gesture.slideEl).top + window.scrollY;\n diffX = offsetX + slideWidth / 2 - touchX;\n diffY = offsetY + slideHeight / 2 - touchY;\n imageWidth = gesture.imageEl.offsetWidth;\n imageHeight = gesture.imageEl.offsetHeight;\n scaledWidth = imageWidth * zoom.scale;\n scaledHeight = imageHeight * zoom.scale;\n translateMinX = Math.min(slideWidth / 2 - scaledWidth / 2, 0);\n translateMinY = Math.min(slideHeight / 2 - scaledHeight / 2, 0);\n translateMaxX = -translateMinX;\n translateMaxY = -translateMinY;\n translateX = diffX * zoom.scale;\n translateY = diffY * zoom.scale;\n if (translateX < translateMinX) {\n translateX = translateMinX;\n }\n if (translateX > translateMaxX) {\n translateX = translateMaxX;\n }\n if (translateY < translateMinY) {\n translateY = translateMinY;\n }\n if (translateY > translateMaxY) {\n translateY = translateMaxY;\n }\n } else {\n translateX = 0;\n translateY = 0;\n }\n if (forceZoomRatio && zoom.scale === 1) {\n gesture.originX = 0;\n gesture.originY = 0;\n }\n gesture.imageWrapEl.style.transitionDuration = '300ms';\n gesture.imageWrapEl.style.transform = `translate3d(${translateX}px, ${translateY}px,0)`;\n gesture.imageEl.style.transitionDuration = '300ms';\n gesture.imageEl.style.transform = `translate3d(0,0,0) scale(${zoom.scale})`;\n }\n function zoomOut() {\n const zoom = swiper.zoom;\n const params = swiper.params.zoom;\n if (!gesture.slideEl) {\n if (swiper.params.virtual && swiper.params.virtual.enabled && swiper.virtual) {\n gesture.slideEl = elementChildren(swiper.slidesEl, `.${swiper.params.slideActiveClass}`)[0];\n } else {\n gesture.slideEl = swiper.slides[swiper.activeIndex];\n }\n let imageEl = gesture.slideEl.querySelector(`.${params.containerClass}`);\n if (imageEl) {\n imageEl = imageEl.querySelectorAll('picture, img, svg, canvas, .swiper-zoom-target')[0];\n }\n gesture.imageEl = imageEl;\n if (imageEl) {\n gesture.imageWrapEl = elementParents(gesture.imageEl, `.${params.containerClass}`)[0];\n } else {\n gesture.imageWrapEl = undefined;\n }\n }\n if (!gesture.imageEl || !gesture.imageWrapEl) return;\n if (swiper.params.cssMode) {\n swiper.wrapperEl.style.overflow = '';\n swiper.wrapperEl.style.touchAction = '';\n }\n zoom.scale = 1;\n currentScale = 1;\n gesture.imageWrapEl.style.transitionDuration = '300ms';\n gesture.imageWrapEl.style.transform = 'translate3d(0,0,0)';\n gesture.imageEl.style.transitionDuration = '300ms';\n gesture.imageEl.style.transform = 'translate3d(0,0,0) scale(1)';\n gesture.slideEl.classList.remove(`${params.zoomedSlideClass}`);\n gesture.slideEl = undefined;\n gesture.originX = 0;\n gesture.originY = 0;\n }\n\n // Toggle Zoom\n function zoomToggle(e) {\n const zoom = swiper.zoom;\n if (zoom.scale && zoom.scale !== 1) {\n // Zoom Out\n zoomOut();\n } else {\n // Zoom In\n zoomIn(e);\n }\n }\n function getListeners() {\n const passiveListener = swiper.params.passiveListeners ? {\n passive: true,\n capture: false\n } : false;\n const activeListenerWithCapture = swiper.params.passiveListeners ? {\n passive: false,\n capture: true\n } : true;\n return {\n passiveListener,\n activeListenerWithCapture\n };\n }\n\n // Attach/Detach Events\n function enable() {\n const zoom = swiper.zoom;\n if (zoom.enabled) return;\n zoom.enabled = true;\n const {\n passiveListener,\n activeListenerWithCapture\n } = getListeners();\n\n // Scale image\n swiper.wrapperEl.addEventListener('pointerdown', onGestureStart, passiveListener);\n swiper.wrapperEl.addEventListener('pointermove', onGestureChange, activeListenerWithCapture);\n ['pointerup', 'pointercancel', 'pointerout'].forEach(eventName => {\n swiper.wrapperEl.addEventListener(eventName, onGestureEnd, passiveListener);\n });\n\n // Move image\n swiper.wrapperEl.addEventListener('pointermove', onTouchMove, activeListenerWithCapture);\n }\n function disable() {\n const zoom = swiper.zoom;\n if (!zoom.enabled) return;\n zoom.enabled = false;\n const {\n passiveListener,\n activeListenerWithCapture\n } = getListeners();\n\n // Scale image\n swiper.wrapperEl.removeEventListener('pointerdown', onGestureStart, passiveListener);\n swiper.wrapperEl.removeEventListener('pointermove', onGestureChange, activeListenerWithCapture);\n ['pointerup', 'pointercancel', 'pointerout'].forEach(eventName => {\n swiper.wrapperEl.removeEventListener(eventName, onGestureEnd, passiveListener);\n });\n\n // Move image\n swiper.wrapperEl.removeEventListener('pointermove', onTouchMove, activeListenerWithCapture);\n }\n on('init', () => {\n if (swiper.params.zoom.enabled) {\n enable();\n }\n });\n on('destroy', () => {\n disable();\n });\n on('touchStart', (_s, e) => {\n if (!swiper.zoom.enabled) return;\n onTouchStart(e);\n });\n on('touchEnd', (_s, e) => {\n if (!swiper.zoom.enabled) return;\n onTouchEnd(e);\n });\n on('doubleTap', (_s, e) => {\n if (!swiper.animating && swiper.params.zoom.enabled && swiper.zoom.enabled && swiper.params.zoom.toggle) {\n zoomToggle(e);\n }\n });\n on('transitionEnd', () => {\n if (swiper.zoom.enabled && swiper.params.zoom.enabled) {\n onTransitionEnd();\n }\n });\n on('slideChange', () => {\n if (swiper.zoom.enabled && swiper.params.zoom.enabled && swiper.params.cssMode) {\n onTransitionEnd();\n }\n });\n Object.assign(swiper.zoom, {\n enable,\n disable,\n in: zoomIn,\n out: zoomOut,\n toggle: zoomToggle\n });\n}","import Controller from './controller'\nimport { scrollToPosition } from '../utilities'\n\nexport default class extends Controller {\n static targets = ['content', 'link', 'toggle']\n\n static values = {\n smoothScroll: Boolean,\n }\n\n initialize() {\n this.selectedClass = 'is-selected'\n this.next = this.next.bind(this)\n this.hide = this.hide.bind(this)\n this.previous = this.previous.bind(this)\n this.hash420 = this.linkTargets[0].hasAttribute('data-hash')\n\n const selectedLink = this.linkTargets.find((link) =>\n link.classList.contains(this.selectedClass),\n )\n if (selectedLink) {\n this.selectedIndex = this.linkTargets.indexOf(selectedLink)\n }\n\n if (this.hash420) {\n this.hashCheck()\n }\n }\n\n hashCheck() {\n const hash = window.location.hash.substr(1)\n\n for (let i = 0; i < this.linkTargets.length; i++) {\n if (this.linkTargets[i].getAttribute('data-hash') === hash) {\n this.go(i)\n }\n }\n }\n\n previous() {\n if (this.selectedIndex - 1 < 0) {\n this.go(this.linkTargets.length - 1)\n } else {\n this.go(this.selectedIndex - 1)\n }\n }\n\n next() {\n if (this.selectedIndex + 1 > this.linkTargets.length - 1) {\n this.go(0)\n } else {\n this.go(this.selectedIndex + 1)\n }\n }\n\n select(ev) {\n ev.preventDefault()\n\n const index = this.linkTargets.indexOf(ev.currentTarget)\n\n this.go(index)\n }\n\n hide() {\n this.linkTargets.forEach((elem, index) => elem.classList.remove(this.selectedClass))\n this.contentTargets.forEach((elem, index) => elem.classList.remove(this.selectedClass))\n }\n\n toggle(ev) {\n ev.preventDefault()\n\n const index = this.toggleTargets.indexOf(ev.currentTarget)\n\n if (index === this.selectedIndex) {\n this.hide()\n this.selectedIndex = -1\n } else {\n this.go(index)\n }\n }\n\n go(index) {\n this.emit('tabs:beforechange', { bubbles: true })\n\n this.hide()\n\n this.linkTargets[index].classList.add(this.selectedClass)\n this.contentTargets[index].classList.add(this.selectedClass)\n\n if (this.hash420) {\n window.location.hash = this.linkTargets[index].getAttribute('data-hash')\n }\n\n if (this.element.hasAttribute('data-scroll') && index != this.selectedIndex) {\n setTimeout(() => {\n this.scrollToTarget(this.contentTargets[this.selectedIndex])\n }, 0)\n }\n\n this.selectedIndex = index\n }\n\n scrollToTarget(element) {\n // Not sure this works in IE. Added as a quick temp fix for the staging demo.\n element.scrollIntoView({\n block: 'start',\n })\n\n element.setAttribute('tabindex', '-1')\n element.focus({ preventScroll: true })\n }\n\n scrollToTop() {\n const top = this.element.getBoundingClientRect().top + 2 // Extra to cover tab border\n\n if (top < 2) {\n scrollToPosition({\n top: window.pageYOffset + top,\n behavior: this.smoothScrollValue ? 'smooth' : 'auto',\n })\n }\n }\n}\n","import Controller from './controller'\nimport { parseJson } from '../utilities'\n\nexport default class extends Controller {\n static get targets() {\n return ['item']\n }\n\n static get options() {\n return {\n // Delay in ms between animating items in. Can be overridden per element by setting delay in\n // its data attribute, e.g. `data-visible-stagger=\"50\"`\n staggerInterval: 83,\n\n // Options passed to `IntersectionObserver`. Can be overridden per element by setting options\n // in its data attribute, e.g. `data-visible='{ \"threshold\": 1, \"rootMargin\": \"-50px\" }'`\n // Available options: https://developer.mozilla.org/en-US/docs/Web/API/IntersectionObserver/IntersectionObserver#Parameters\n intersectionObserverOptions: {\n threshold: 0.1,\n },\n }\n }\n\n initialize() {\n this.checkIntersection = this.checkIntersection.bind(this)\n this.checkEntryIntersection = this.checkEntryIntersection.bind(this)\n\n this.isPaused = true\n this.queue = []\n this.observers = {}\n this.timeouts = new WeakMap()\n\n this.observeItems()\n this.play()\n\n this.element.addEventListener('visible:reset', this.reset.bind(this))\n }\n\n play() {\n this.isPaused = false\n this.playInterval = setInterval(() => {\n if (this.queue.length > 0) {\n this.show(this.queue.shift())\n } else {\n this.pause()\n }\n }, this.options.staggerInterval)\n }\n\n pause() {\n this.isPaused = true\n clearInterval(this.playInterval)\n }\n\n observeItems(elements = this.itemTargets) {\n elements.forEach(this.observeItem.bind(this))\n }\n\n observeItem(item) {\n const settings = item.dataset.visible\n let options = this.options.intersectionObserverOptions\n\n if (settings) {\n options = Object.assign({}, options, parseJson(settings))\n }\n\n // Re-use existing IntersectionObserver when settings are the same\n if (!this.observers[settings]) {\n this.observers[settings] = new IntersectionObserver(this.checkIntersection, options)\n }\n\n this.observers[settings].observe(item)\n }\n\n checkIntersection(entries) {\n entries.forEach(this.checkEntryIntersection)\n }\n\n checkEntryIntersection(entry) {\n const element = entry.target\n\n if (entry.isIntersecting) {\n this.staggeredShow(element)\n } else {\n this.removeFromQueue(element, true)\n }\n }\n\n staggeredShow(element) {\n if (element.dataset.visibleStagger) {\n const delay = Number(element.dataset.visibleStagger)\n const timeout = setTimeout(() => {\n this.show(element)\n this.timeouts.delete(element)\n }, delay)\n\n this.timeouts.set(element, timeout)\n } else {\n this.queue.push(element)\n\n if (this.isPaused) {\n this.play()\n }\n }\n }\n\n show(element) {\n element.dataset.isVisible = true\n this.observers[element.dataset.visible].unobserve(element)\n\n element.classList.add('is-visible')\n this.emit('visible:show', {}, element)\n\n if (element.tagName === 'VIDEO') {\n element.play()\n }\n }\n\n hide(element) {\n delete element.dataset.isVisible\n this.observeItem(element)\n\n element.classList.remove('is-visible')\n this.emit('visible:hide', {}, element)\n }\n\n reset(ev) {\n const element = ev.target\n\n if (element.dataset.isVisible) {\n this.hide(element)\n } else {\n this.removeFromQueue(element)\n }\n }\n\n removeFromQueue(element, show = false) {\n const index = this.queue.indexOf(element)\n if (index > -1) {\n this.queue.splice(index, 1)\n\n if (show) {\n this.show(element)\n }\n } else if (this.timeouts.has(element)) {\n clearTimeout(this.timeouts.get(element))\n this.timeouts.delete(element)\n\n if (show) {\n this.show(element)\n }\n }\n }\n}\n","let elementIdIndex = 0\n\nexport const elementId = () => {\n elementIdIndex += 1\n return `_element_${elementIdIndex}`\n}\n\n// https://stackoverflow.com/a/27728417\nexport const youtubeUrlToId = (url) => {\n const regExp =\n /^.*(?:(?:youtu\\.be\\/|v\\/|vi\\/|u\\/\\w\\/|embed\\/)|(?:(?:watch)?\\?v(?:i)?=|\\&v(?:i)?=))([^#\\&\\?]+).*/\n const match = url.match(regExp)\n return match ? match[1] : null\n}\n\nlet _scrollbarWidth\nexport const scrollbarWidth = () => {\n if (_scrollbarWidth == null) {\n _scrollbarWidth = window.innerWidth - document.body.offsetWidth\n }\n\n return _scrollbarWidth\n}\n\nexport const disableBodyScroll = () => {\n const bodyScrollbarWidth = scrollbarWidth()\n\n if (bodyScrollbarWidth) {\n document.documentElement.style.setProperty('--scrollbar-gap', `${bodyScrollbarWidth}px`)\n }\n\n document.body.style.overflow = 'hidden'\n document.body.style.paddingRight = `${bodyScrollbarWidth}px`\n}\n\nexport const enableBodyScroll = () => {\n document.body.style.overflow = ''\n document.body.style.paddingRight = ''\n document.documentElement.style.removeProperty('--scrollbar-gap')\n}\n\nexport const isReducedMotion = () => window.matchMedia('(prefers-reduced-motion: reduce)').matches\n\nlet fixedMobileHeaderHeightElement\nlet fixedMainHeaderHeightElement\nexport const fixedHeaderHeight = () => {\n if (!fixedMobileHeaderHeightElement) {\n fixedMobileHeaderHeightElement = document.getElementById('fixed-mobile-header-height')\n }\n\n if (!fixedMainHeaderHeightElement) {\n fixedMainHeaderHeightElement = document.getElementById('fixed-main-header-height')\n }\n\n return Math.max(\n fixedMobileHeaderHeightElement.offsetHeight,\n fixedMainHeaderHeightElement.offsetHeight,\n )\n}\n\nexport const scrollToPosition = ({ target, top, left, behavior, includeHeaderOffset }) => {\n target ||= window\n top ||= 0\n left ||= 0\n behavior ||= 'smooth'\n\n if (behavior === 'smooth' && isReducedMotion()) {\n behavior = 'auto'\n }\n\n target.scrollTo({\n top,\n left,\n behavior,\n })\n}\n\nexport const parseJson = (json) => {\n if (!json) return {}\n\n let parsed\n\n try {\n parsed = JSON.parse(json)\n } catch (error) {\n parsed = {}\n }\n\n return parsed\n}\n","(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? factory() :\n typeof define === 'function' && define.amd ? define(factory) :\n (factory());\n}(this, (function () { 'use strict';\n\n /**\n * Applies the :focus-visible polyfill at the given scope.\n * A scope in this case is either the top-level Document or a Shadow Root.\n *\n * @param {(Document|ShadowRoot)} scope\n * @see https://github.com/WICG/focus-visible\n */\n function applyFocusVisiblePolyfill(scope) {\n var hadKeyboardEvent = true;\n var hadFocusVisibleRecently = false;\n var hadFocusVisibleRecentlyTimeout = null;\n\n var inputTypesAllowlist = {\n text: true,\n search: true,\n url: true,\n tel: true,\n email: true,\n password: true,\n number: true,\n date: true,\n month: true,\n week: true,\n time: true,\n datetime: true,\n 'datetime-local': true\n };\n\n /**\n * Helper function for legacy browsers and iframes which sometimes focus\n * elements like document, body, and non-interactive SVG.\n * @param {Element} el\n */\n function isValidFocusTarget(el) {\n if (\n el &&\n el !== document &&\n el.nodeName !== 'HTML' &&\n el.nodeName !== 'BODY' &&\n 'classList' in el &&\n 'contains' in el.classList\n ) {\n return true;\n }\n return false;\n }\n\n /**\n * Computes whether the given element should automatically trigger the\n * `focus-visible` class being added, i.e. whether it should always match\n * `:focus-visible` when focused.\n * @param {Element} el\n * @return {boolean}\n */\n function focusTriggersKeyboardModality(el) {\n var type = el.type;\n var tagName = el.tagName;\n\n if (tagName === 'INPUT' && inputTypesAllowlist[type] && !el.readOnly) {\n return true;\n }\n\n if (tagName === 'TEXTAREA' && !el.readOnly) {\n return true;\n }\n\n if (el.isContentEditable) {\n return true;\n }\n\n return false;\n }\n\n /**\n * Add the `focus-visible` class to the given element if it was not added by\n * the author.\n * @param {Element} el\n */\n function addFocusVisibleClass(el) {\n if (el.classList.contains('focus-visible')) {\n return;\n }\n el.classList.add('focus-visible');\n el.setAttribute('data-focus-visible-added', '');\n }\n\n /**\n * Remove the `focus-visible` class from the given element if it was not\n * originally added by the author.\n * @param {Element} el\n */\n function removeFocusVisibleClass(el) {\n if (!el.hasAttribute('data-focus-visible-added')) {\n return;\n }\n el.classList.remove('focus-visible');\n el.removeAttribute('data-focus-visible-added');\n }\n\n /**\n * If the most recent user interaction was via the keyboard;\n * and the key press did not include a meta, alt/option, or control key;\n * then the modality is keyboard. Otherwise, the modality is not keyboard.\n * Apply `focus-visible` to any current active element and keep track\n * of our keyboard modality state with `hadKeyboardEvent`.\n * @param {KeyboardEvent} e\n */\n function onKeyDown(e) {\n if (e.metaKey || e.altKey || e.ctrlKey) {\n return;\n }\n\n if (isValidFocusTarget(scope.activeElement)) {\n addFocusVisibleClass(scope.activeElement);\n }\n\n hadKeyboardEvent = true;\n }\n\n /**\n * If at any point a user clicks with a pointing device, ensure that we change\n * the modality away from keyboard.\n * This avoids the situation where a user presses a key on an already focused\n * element, and then clicks on a different element, focusing it with a\n * pointing device, while we still think we're in keyboard modality.\n * @param {Event} e\n */\n function onPointerDown(e) {\n hadKeyboardEvent = false;\n }\n\n /**\n * On `focus`, add the `focus-visible` class to the target if:\n * - the target received focus as a result of keyboard navigation, or\n * - the event target is an element that will likely require interaction\n * via the keyboard (e.g. a text box)\n * @param {Event} e\n */\n function onFocus(e) {\n // Prevent IE from focusing the document or HTML element.\n if (!isValidFocusTarget(e.target)) {\n return;\n }\n\n if (hadKeyboardEvent || focusTriggersKeyboardModality(e.target)) {\n addFocusVisibleClass(e.target);\n }\n }\n\n /**\n * On `blur`, remove the `focus-visible` class from the target.\n * @param {Event} e\n */\n function onBlur(e) {\n if (!isValidFocusTarget(e.target)) {\n return;\n }\n\n if (\n e.target.classList.contains('focus-visible') ||\n e.target.hasAttribute('data-focus-visible-added')\n ) {\n // To detect a tab/window switch, we look for a blur event followed\n // rapidly by a visibility change.\n // If we don't see a visibility change within 100ms, it's probably a\n // regular focus change.\n hadFocusVisibleRecently = true;\n window.clearTimeout(hadFocusVisibleRecentlyTimeout);\n hadFocusVisibleRecentlyTimeout = window.setTimeout(function() {\n hadFocusVisibleRecently = false;\n }, 100);\n removeFocusVisibleClass(e.target);\n }\n }\n\n /**\n * If the user changes tabs, keep track of whether or not the previously\n * focused element had .focus-visible.\n * @param {Event} e\n */\n function onVisibilityChange(e) {\n if (document.visibilityState === 'hidden') {\n // If the tab becomes active again, the browser will handle calling focus\n // on the element (Safari actually calls it twice).\n // If this tab change caused a blur on an element with focus-visible,\n // re-apply the class when the user switches back to the tab.\n if (hadFocusVisibleRecently) {\n hadKeyboardEvent = true;\n }\n addInitialPointerMoveListeners();\n }\n }\n\n /**\n * Add a group of listeners to detect usage of any pointing devices.\n * These listeners will be added when the polyfill first loads, and anytime\n * the window is blurred, so that they are active when the window regains\n * focus.\n */\n function addInitialPointerMoveListeners() {\n document.addEventListener('mousemove', onInitialPointerMove);\n document.addEventListener('mousedown', onInitialPointerMove);\n document.addEventListener('mouseup', onInitialPointerMove);\n document.addEventListener('pointermove', onInitialPointerMove);\n document.addEventListener('pointerdown', onInitialPointerMove);\n document.addEventListener('pointerup', onInitialPointerMove);\n document.addEventListener('touchmove', onInitialPointerMove);\n document.addEventListener('touchstart', onInitialPointerMove);\n document.addEventListener('touchend', onInitialPointerMove);\n }\n\n function removeInitialPointerMoveListeners() {\n document.removeEventListener('mousemove', onInitialPointerMove);\n document.removeEventListener('mousedown', onInitialPointerMove);\n document.removeEventListener('mouseup', onInitialPointerMove);\n document.removeEventListener('pointermove', onInitialPointerMove);\n document.removeEventListener('pointerdown', onInitialPointerMove);\n document.removeEventListener('pointerup', onInitialPointerMove);\n document.removeEventListener('touchmove', onInitialPointerMove);\n document.removeEventListener('touchstart', onInitialPointerMove);\n document.removeEventListener('touchend', onInitialPointerMove);\n }\n\n /**\n * When the polfyill first loads, assume the user is in keyboard modality.\n * If any event is received from a pointing device (e.g. mouse, pointer,\n * touch), turn off keyboard modality.\n * This accounts for situations where focus enters the page from the URL bar.\n * @param {Event} e\n */\n function onInitialPointerMove(e) {\n // Work around a Safari quirk that fires a mousemove on whenever the\n // window blurs, even if you're tabbing out of the page. ¯\\_(ツ)_/¯\n if (e.target.nodeName && e.target.nodeName.toLowerCase() === 'html') {\n return;\n }\n\n hadKeyboardEvent = false;\n removeInitialPointerMoveListeners();\n }\n\n // For some kinds of state, we are interested in changes at the global scope\n // only. For example, global pointer input, global key presses and global\n // visibility change should affect the state at every scope:\n document.addEventListener('keydown', onKeyDown, true);\n document.addEventListener('mousedown', onPointerDown, true);\n document.addEventListener('pointerdown', onPointerDown, true);\n document.addEventListener('touchstart', onPointerDown, true);\n document.addEventListener('visibilitychange', onVisibilityChange, true);\n\n addInitialPointerMoveListeners();\n\n // For focus and blur, we specifically care about state changes in the local\n // scope. This is because focus / blur events that originate from within a\n // shadow root are not re-dispatched from the host element if it was already\n // the active element in its own scope:\n scope.addEventListener('focus', onFocus, true);\n scope.addEventListener('blur', onBlur, true);\n\n // We detect that a node is a ShadowRoot by ensuring that it is a\n // DocumentFragment and also has a host property. This check covers native\n // implementation and polyfill implementation transparently. If we only cared\n // about the native implementation, we could just check if the scope was\n // an instance of a ShadowRoot.\n if (scope.nodeType === Node.DOCUMENT_FRAGMENT_NODE && scope.host) {\n // Since a ShadowRoot is a special kind of DocumentFragment, it does not\n // have a root element to add a class to. So, we add this attribute to the\n // host element instead:\n scope.host.setAttribute('data-js-focus-visible', '');\n } else if (scope.nodeType === Node.DOCUMENT_NODE) {\n document.documentElement.classList.add('js-focus-visible');\n document.documentElement.setAttribute('data-js-focus-visible', '');\n }\n }\n\n // It is important to wrap all references to global window and document in\n // these checks to support server-side rendering use cases\n // @see https://github.com/WICG/focus-visible/issues/199\n if (typeof window !== 'undefined' && typeof document !== 'undefined') {\n // Make the polyfill helper globally available. This can be used as a signal\n // to interested libraries that wish to coordinate with the polyfill for e.g.,\n // applying the polyfill to a shadow root:\n window.applyFocusVisiblePolyfill = applyFocusVisiblePolyfill;\n\n // Notify interested libraries of the polyfill's presence, in case the\n // polyfill was loaded lazily:\n var event;\n\n try {\n event = new CustomEvent('focus-visible-polyfill-ready');\n } catch (error) {\n // IE11 does not support using CustomEvent as a constructor directly:\n event = document.createEvent('CustomEvent');\n event.initCustomEvent('focus-visible-polyfill-ready', false, false, {});\n }\n\n window.dispatchEvent(event);\n }\n\n if (typeof document !== 'undefined') {\n // Apply the polyfill to the global document, so that no JavaScript\n // coordination is required to use the polyfill in the top-level document:\n applyFocusVisiblePolyfill(document);\n }\n\n})));\n","var map = {\n\t\"./accordion_controller.js\": 810,\n\t\"./datalayer_controller.js\": 499,\n\t\"./date_controller.js\": 84,\n\t\"./dropdown_controller.js\": 62,\n\t\"./example_controller.js\": 472,\n\t\"./fetch_controller.js\": 8,\n\t\"./lazy-embed_controller.js\": 983,\n\t\"./menu_controller.js\": 17,\n\t\"./modal-link_controller.js\": 291,\n\t\"./modal_controller.js\": 406,\n\t\"./navigation_controller.js\": 424,\n\t\"./payment_controller.js\": 522,\n\t\"./recaptcha_controller.js\": 583,\n\t\"./scroll-to_controller.js\": 486,\n\t\"./slider_controller.js\": 766,\n\t\"./tabs_controller.js\": 479,\n\t\"./visible_controller.js\": 575\n};\n\n\nfunction webpackContext(req) {\n\tvar id = webpackContextResolve(req);\n\treturn __webpack_require__(id);\n}\nfunction webpackContextResolve(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t}\n\treturn map[req];\n}\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = 96;","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n// expose the modules object (__webpack_modules__)\n__webpack_require__.m = __webpack_modules__;\n\n","// define getter functions for harmony exports\n__webpack_require__.d = function(exports, definition) {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.f = {};\n// This file contains only the entry chunk.\n// The chunk loading function for additional chunks\n__webpack_require__.e = function(chunkId) {\n\treturn Promise.all(Object.keys(__webpack_require__.f).reduce(function(promises, key) {\n\t\t__webpack_require__.f[key](chunkId, promises);\n\t\treturn promises;\n\t}, []));\n};","// This function allow to reference async chunks\n__webpack_require__.u = function(chunkId) {\n\t// return url for filenames based on template\n\treturn \"\" + \"pikaday\" + \"-\" + \"06598d\" + \".js\";\n};","// This function allow to reference async chunks\n__webpack_require__.miniCssF = function(chunkId) {\n\t// return url for filenames based on template\n\treturn undefined;\n};","__webpack_require__.o = function(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); }","// define __esModule on exports\n__webpack_require__.r = function(exports) {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","__webpack_require__.p = \"/dist/\";","// no baseURI\n\n// object to store loaded and loading chunks\n// undefined = chunk not loaded, null = chunk preloaded/prefetched\n// [resolve, reject, Promise] = chunk loading, 0 = chunk loaded\nvar installedChunks = {\n\t296: 0\n};\n\n__webpack_require__.f.j = function(chunkId, promises) {\n\t\t// JSONP chunk loading for javascript\n\t\tvar installedChunkData = __webpack_require__.o(installedChunks, chunkId) ? installedChunks[chunkId] : undefined;\n\t\tif(installedChunkData !== 0) { // 0 means \"already installed\".\n\n\t\t\t// a Promise means \"currently loading\".\n\t\t\tif(installedChunkData) {\n\t\t\t\tpromises.push(installedChunkData[2]);\n\t\t\t} else {\n\t\t\t\tif(true) { // all chunks have JS\n\t\t\t\t\t// setup Promise in chunk cache\n\t\t\t\t\tvar promise = new Promise(function(resolve, reject) { installedChunkData = installedChunks[chunkId] = [resolve, reject]; });\n\t\t\t\t\tpromises.push(installedChunkData[2] = promise);\n\n\t\t\t\t\t// start chunk loading\n\t\t\t\t\tvar url = __webpack_require__.p + __webpack_require__.u(chunkId);\n\t\t\t\t\t// create error before stack unwound to get useful stacktrace later\n\t\t\t\t\tvar error = new Error();\n\t\t\t\t\tvar loadingEnded = function(event) {\n\t\t\t\t\t\tif(__webpack_require__.o(installedChunks, chunkId)) {\n\t\t\t\t\t\t\tinstalledChunkData = installedChunks[chunkId];\n\t\t\t\t\t\t\tif(installedChunkData !== 0) installedChunks[chunkId] = undefined;\n\t\t\t\t\t\t\tif(installedChunkData) {\n\t\t\t\t\t\t\t\tvar errorType = event && (event.type === 'load' ? 'missing' : event.type);\n\t\t\t\t\t\t\t\tvar realSrc = event && event.target && event.target.src;\n\t\t\t\t\t\t\t\terror.message = 'Loading chunk ' + chunkId + ' failed.\\n(' + errorType + ': ' + realSrc + ')';\n\t\t\t\t\t\t\t\terror.name = 'ChunkLoadError';\n\t\t\t\t\t\t\t\terror.type = errorType;\n\t\t\t\t\t\t\t\terror.request = realSrc;\n\t\t\t\t\t\t\t\tinstalledChunkData[1](error);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t\t__webpack_require__.l(url, loadingEnded, \"chunk-\" + chunkId, chunkId);\n\t\t\t\t} else installedChunks[chunkId] = 0;\n\t\t\t}\n\t\t}\n};\n\n// no prefetching\n\n// no preloaded\n\n// no HMR\n\n// no HMR manifest\n\n// no on chunks loaded\n\n// install a JSONP callback for chunk loading\nvar webpackJsonpCallback = function(parentChunkLoadingFunction, data) {\n\tvar chunkIds = data[0];\n\tvar moreModules = data[1];\n\tvar runtime = data[2];\n\t// add \"moreModules\" to the modules object,\n\t// then flag all \"chunkIds\" as loaded and fire callback\n\tvar moduleId, chunkId, i = 0;\n\tif(chunkIds.some(function(id) { return installedChunks[id] !== 0; })) {\n\t\tfor(moduleId in moreModules) {\n\t\t\tif(__webpack_require__.o(moreModules, moduleId)) {\n\t\t\t\t__webpack_require__.m[moduleId] = moreModules[moduleId];\n\t\t\t}\n\t\t}\n\t\tif(runtime) var result = runtime(__webpack_require__);\n\t}\n\tif(parentChunkLoadingFunction) parentChunkLoadingFunction(data);\n\tfor(;i < chunkIds.length; i++) {\n\t\tchunkId = chunkIds[i];\n\t\tif(__webpack_require__.o(installedChunks, chunkId) && installedChunks[chunkId]) {\n\t\t\tinstalledChunks[chunkId][0]();\n\t\t}\n\t\tinstalledChunks[chunkId] = 0;\n\t}\n\n}\n\nvar chunkLoadingGlobal = self[\"webpackChunk\"] = self[\"webpackChunk\"] || [];\nchunkLoadingGlobal.forEach(webpackJsonpCallback.bind(null, 0));\nchunkLoadingGlobal.push = webpackJsonpCallback.bind(null, chunkLoadingGlobal.push.bind(chunkLoadingGlobal));","import { Application } from '@hotwired/stimulus'\nimport { definitionsFromContext } from '@hotwired/stimulus-webpack-helpers'\nimport 'focus-visible'\n\nconst application = Application.start()\nconst context = require.context('./controllers', true, /_controller\\.js$/)\n\napplication.load(definitionsFromContext(context))\n","/*\nStimulus Webpack Helpers 1.0.0\nCopyright © 2021 Basecamp, LLC\n */\nfunction definitionsFromContext(context) {\n return context.keys()\n .map((key) => definitionForModuleWithContextAndKey(context, key))\n .filter((value) => value);\n}\nfunction definitionForModuleWithContextAndKey(context, key) {\n const identifier = identifierForContextKey(key);\n if (identifier) {\n return definitionForModuleAndIdentifier(context(key), identifier);\n }\n}\nfunction definitionForModuleAndIdentifier(module, identifier) {\n const controllerConstructor = module.default;\n if (typeof controllerConstructor == \"function\") {\n return { identifier, controllerConstructor };\n }\n}\nfunction identifierForContextKey(key) {\n const logicalName = (key.match(/^(?:\\.\\/)?(.+)(?:[_-]controller\\..+?)$/) || [])[1];\n if (logicalName) {\n return logicalName.replace(/_/g, \"-\").replace(/\\//g, \"--\");\n }\n}\n\nexport { definitionForModuleAndIdentifier, definitionForModuleWithContextAndKey, definitionsFromContext, identifierForContextKey };\n"],"names":["leafPrototypes","getProto","inProgress","EventListener","constructor","eventTarget","eventName","eventOptions","this","unorderedBindings","Set","connect","addEventListener","disconnect","removeEventListener","bindingConnected","binding","add","bindingDisconnected","delete","handleEvent","event","extendedEvent","stopImmediatePropagation","Object","assign","immediatePropagationStopped","call","extendEvent","bindings","Array","from","sort","left","right","leftIndex","index","rightIndex","Dispatcher","application","eventListenerMaps","Map","started","start","eventListeners","forEach","eventListener","stop","values","reduce","listeners","map","concat","fetchEventListenerForBinding","handleError","error","message","detail","fetchEventListener","eventListenerMap","fetchEventListenerMapForEventTarget","cacheKey","get","createEventListener","set","parts","keys","key","push","join","descriptorPattern","parseEventTarget","eventTargetName","window","document","camelize","value","replace","_","char","toUpperCase","capitalize","charAt","slice","dasherize","toLowerCase","Action","element","descriptor","tagName","defaultEventNames","getDefaultEventNameForElement","identifier","methodName","static","token","descriptorString","matches","trim","match","split","options","test","parseActionDescriptorString","content","toString","eventNameSuffix","params","pattern","RegExp","name","attributes","typecast","e","getAttribute","Error","JSON","parse","o_O","Binding","context","action","willBeInvokedByEvent","shouldBeInvokedPerSelf","processStopPropagation","processPreventDefault","invokeWithEvent","method","controller","stopPropagation","prevent","preventDefault","target","currentTarget","actionEvent","logDebugActivity","self","Element","contains","scope","containsElement","ElementObserver","delegate","mutationObserverInit","childList","subtree","elements","mutationObserver","MutationObserver","mutations","processMutations","observe","refresh","pause","callback","takeRecords","matchElementsInTree","has","removeElement","addElement","mutation","processMutation","type","processAttributeChange","attributeName","processRemovedNodes","removedNodes","processAddedNodes","addedNodes","node","elementAttributeChanged","matchElement","nodes","elementFromNode","processTree","elementIsActive","tree","processor","nodeType","Node","ELEMENT_NODE","isConnected","elementMatched","elementUnmatched","AttributeObserver","elementObserver","selector","hasAttribute","querySelectorAll","elementMatchedAttribute","elementUnmatchedAttribute","elementAttributeValueChanged","StringMapObserver","stringMap","attributeOldValue","knownAttributeNames","refreshAttribute","oldValue","getStringMapKeyForAttribute","stringMapKeyAdded","stringMapValueChanged","stringMapKeyRemoved","currentAttributeNames","recordedAttributeNames","attribute","fetch","del","size","prune","Multimap","valuesByKey","hasKey","hasValue","some","getValuesForKey","getKeysForValue","filter","TokenListObserver","attributeObserver","tokensByElement","tokensMatched","readTokensForElement","unmatchedTokens","matchedTokens","refreshTokensForElement","tokensUnmatched","tokens","tokenMatched","tokenUnmatched","previousTokens","currentTokens","firstDifferingIndex","length","Math","max","zip","findIndex","previousToken","currentToken","tokenString","parseTokenString","ValueListObserver","tokenListObserver","parseResultsByToken","WeakMap","valuesByTokenByElement","fetchParseResultForToken","fetchValuesByTokenForElement","elementMatchedValue","elementUnmatchedValue","parseResult","parseToken","valuesByToken","parseValueForToken","BindingObserver","bindingsByAction","valueListObserver","actionAttribute","disconnectAllActions","schema","connectAction","disconnectAction","clear","forToken","ValueObserver","receiver","stringMapObserver","valueDescriptorMap","invokeChangedCallbacksForDefaultValues","invokeChangedCallback","writer","defaultValue","valueDescriptorNameMap","valueDescriptors","undefined","data","rawValue","rawOldValue","changedMethodName","changedMethod","reader","TypeError","descriptors","hasMethodName","TargetObserver","targetsByName","disconnectAllTargets","connectTarget","disconnectTarget","_a","targetConnected","targetDisconnected","Context","module","functionName","controllerConstructor","bindingObserver","dispatcher","valueObserver","targetObserver","initialize","parentElement","invokeControllerMethod","args","readInheritableStaticArrayValues","propertyName","ancestors","getAncestorsForConstructor","definition","isArray","getOwnStaticArrayValues","readInheritableStaticObjectPairs","pairs","getOwnStaticObjectPairs","getPrototypeOf","reverse","bless","properties","shadowConstructor","extend","shadowProperties","prototype","getOwnKeys","shadowingDescriptor","getOwnPropertyDescriptor","getShadowedDescriptor","getShadowProperties","defineProperties","shadow","blessedProperties","blessing","getBlessedProperties","getOwnPropertySymbols","object","getOwnPropertyNames","extendWithReflect","extended","Reflect","construct","arguments","create","setPrototypeOf","b","a","testReflectExtension","Module","blessDefinition","contextsByScope","connectedContexts","contexts","connectContextForScope","fetchContextForScope","disconnectContextForScope","ClassMap","getDataKey","getAll","getAttributeName","getAttributeNameForKey","DataMap","setAttribute","removeAttribute","Guide","logger","warnedKeysByObject","warn","warnedKeys","attributeValueContainsToken","TargetSet","targetName","find","targetNames","findTarget","findLegacyTarget","findAll","targets","findAllTargets","findAllLegacyTargets","getSelectorForTargetName","findElement","findAllElements","targetAttributeForScope","getLegacySelectorForTargetName","deprecate","targetDescriptor","targetAttribute","revisedAttributeName","guide","Scope","classes","closest","controllerSelector","queryElements","controllerAttribute","ScopeObserver","scopesByIdentifierByElement","scopeReferenceCounts","scopesByIdentifier","fetchScopesByIdentifierForElement","createScopeForElementAndIdentifier","referenceCount","scopeConnected","scopeDisconnected","Router","scopeObserver","modulesByIdentifier","modules","loadDefinition","unloadIdentifier","connectModule","disconnectModule","getContextForElementAndIdentifier","defaultSchema","Application","documentElement","console","debug","logFormattedMessage","router","async","Promise","resolve","readyState","register","load","head","rest","shouldLoad","unload","controllers","getControllerForElementAndIdentifier","onerror","groupCollapsed","log","groupEnd","parseValueDefinitionPair","typeDefinition","payload","typeFromObject","parseValueTypeConstant","typeObject","defaultValueType","parseValueTypeDefault","default","propertyPath","parseValueTypeObject","typeFromDefaultValue","typeFromConstant","parseValueTypeDefinition","constant","defaultValuesByType","defaultValueForDefinition","hasCustomDefaultValue","readers","writers","valueDescriptorForTokenAndTypeDefinition","Boolean","Number","String","array","boolean","number","string","writeJSON","stringify","Controller","dispatch","prefix","bubbles","cancelable","CustomEvent","dispatchEvent","blessings","classDefinition","targetDefinition","valueDefinitionPairs","propertyDescriptorMap","result","valueDefinitionPair","valueDescriptor","read","write","propertiesForValueDefinitionPair","toggle","classList","__data__","other","splice","pop","ListCache","entries","entry","global","freeSelf","Function","objectProto","hasOwnProperty","nativeObjectToString","symToStringTag","isOwn","tag","unmasked","uid","maskSrcKey","exec","func","funcToString","reIsHostCtor","reIsNative","Hash","MapCache","LARGE_ARRAY_SIZE","Stack","fromRight","iteratee","keysFunc","iterable","props","freeExports","exports","freeModule","Buffer","allocUnsafe","buffer","isDeep","copy","arrayBuffer","byteLength","typedArray","byteOffset","source","objectCreate","proto","transform","arg","Ctor","propertyIsEnumerable","isArguments","isBuffer","objectCtorString","typedArrayTags","freeProcess","nodeUtil","types","require","nodeIsTypedArray","objValue","customizer","isNew","newValue","n","reIsUint","inherited","isArr","isArg","isBuff","isType","skipIndexes","isProto","srcIndex","mergeFunc","stack","srcValue","stacked","isCommon","isTyped","baseMerge","thisArg","apply","nativeMax","otherArgs","nativeNow","Date","now","count","lastCalled","stamp","remaining","assigner","sources","guard","super","setOptions","overrides","merge","emit","ev","createEvent","initCustomEvent","dataLayer","go","bind","nursery","hasNurseryTarget","nurseryTarget","gtmLoaded","shouldProceed","id","eventEmailClick","eventCallback","location","href","eventTimeout","eventPhoneClick","eventBookAVisit","submit","eventMakeAPayment","eventFeeDownload","Pikaday","picker","field","format","minDate","focusables","cachedFocusables","contentTarget","link","offsetWidth","onClick","onKeydown","onMouseenter","onMouseleave","resize","hoverOpenDelay","hoverCloseDelay","hoverQuickSwitchDelay","elementOpenClass","toggleTarget","elementId","isTouch","getComputedStyle","getPropertyValue","mouseValue","enableMouse","disableMouse","isMouseEnabled","open","clearTimeout","closeTimeout","isOpen","dropdown","close","isHoverOpened","remove","setQuickSwitchMode","quickSwitchMode","unsetQuickSwitchMode","onFocusout","relatedTarget","setTimeout","onElementKeydown","up","down","indexOf","nextFocusable","focus","mouseleaveTimeout","delay","mouseenterTimeout","mouse","greet","nameTarget","outputTarget","textContent","alert","url","response","ok","text","outerHTML","Visible","checkIntersection","checkEntryIntersection","observer","IntersectionObserver","rootMargin","isIntersecting","show","innerHTML","templateTarget","Transition","instances","indexData","onTransitionEnd","init","play","dataset","cancel","instant","eventEndName","after","didComplete","isCompleted","animation","initClass","addEvents","removeEvents","disableBodyScroll","afterClose","enableBodyScroll","showPanel","panels","panelTargets","panel","panelData","shownPanel","backPanels","panelBackClass","contentPanelShownClass","panelShownClass","back","reset","modalTarget","Modal","createModal","template","getTemplateTarget","importNode","firstElementChild","modalId","body","appendChild","querySelector","focusableSelectors","A11yDialog","_show","_hide","hide","_maintainFocus","_bindKeypress","$el","shown","_id","_previouslyFocused","_listeners","$$","collection","moveFocusToDialog","instantiateDialogs","_openers","opener","_closers","closer","_fire","activeElement","destroy","on","handler","off","domEvent","listener","focused","focusableChildren","child","offsetHeight","getClientRects","getFocusableChildren","focusedItemIndex","shiftKey","trapTabKey","requestAnimationFrame","destroyOnClose","onDialogHide","openClass","dialog","hashCheck","hash","substr","parentNode","removeChild","elementOpeningClass","prevDropdown","openDropdown","afterOpenTimeout","itemTargets","_item","i","dropdownInstance","nextIndex","currentDropdown","nextDropdown","dropdownInstances","setLoading","state","loading","amount","parseFloat","amountTarget","email","emailTarget","ref","refTarget","locationTarget","invoice","invoiceTarget","csrf","isNaN","payButtonTarget","config","selectedOptions","res","CRAFT_CSRF_TOKEN","headers","Accept","json","stripe","Stripe","pk","clientSecret","intent","client_secret","paymentElement","layout","defaultValues","mount","linkAuthenticationElementTarget","paymentElementTarget","button","createElement","innerText","stripeTarget","paymentLoading","returnUrl","URL","pathname","confirmPayment","confirmParams","return_url","receipt_email","Recaptcha","form","onInteraction","hasReceivedInteraction","isApiLoading","loadApi","input","onRecaptchaApiReady","grecaptcha","render","sitekey","recaptchaScript","src","scroll","navEl","getElementById","scrollToPosition","top","pageYOffset","getBoundingClientRect","includeHeaderOffset","_target","isObject","obj","ssrDocument","blur","nodeName","initEvent","children","childNodes","style","getElementsByTagName","createElementNS","host","hostname","origin","protocol","search","doc","ssrWindow","navigator","userAgent","history","replaceState","pushState","Image","screen","matchMedia","cancelAnimationFrame","win","getTranslate","el","axis","matrix","curTransform","transformMatrix","curStyle","currentStyle","WebKitCSSMatrix","webkitTransform","MozTransform","OTransform","MsTransform","msTransform","m41","m42","o","to","noExtend","nextSource","HTMLElement","keysArray","len","nextKey","desc","enumerable","__swiper__","varName","varValue","setProperty","animateCSSModeScroll","swiper","targetPosition","side","startPosition","translate","time","startTime","duration","speed","wrapperEl","scrollSnapType","cssModeFrameID","dir","isOutOfBound","current","animate","getTime","progress","min","easeProgress","cos","PI","currentPosition","scrollTo","overflow","box","clientTop","clientLeft","scrollTop","scrollY","scrollLeft","scrollX","elementStyle","prop","elementIndex","previousSibling","parents","parent","elementOuterSize","includeMargins","support","deviceCached","browser","getSupport","smoothScroll","touch","DocumentTouch","calcSupport","getDevice","platform","ua","device","ios","android","screenWidth","width","screenHeight","height","ipad","ipod","iphone","windows","macos","os","calcDevice","getBrowser","needPerspectiveFix","isSafari","includes","major","minor","num","isWebView","calcBrowser","events","priority","eventsListeners","destroyed","once","onceHandler","__emitterProxy","onAny","eventsAnyListeners","offAny","eventHandler","unshift","processLazyPreloader","imageEl","slideEl","isElement","slideClass","lazyEl","lazyPreloaderClass","unlazy","slides","preload","lazyPreloadPrevNext","slidesPerView","slidesPerViewDynamic","ceil","activeIndex","grid","rows","activeColumn","preloadColumns","column","slideIndexLastInView","rewind","loop","realIndex","updateSize","clientWidth","clientHeight","isHorizontal","isVertical","parseInt","updateSlides","getDirectionLabel","property","getDirectionPropertyValue","label","slidesEl","swiperSize","rtlTranslate","rtl","wrongRTL","isVirtual","virtual","enabled","previousSlidesLength","slidesLength","snapGrid","slidesGrid","slidesSizesGrid","offsetBefore","slidesOffsetBefore","offsetAfter","slidesOffsetAfter","previousSnapGridLength","previousSlidesGridLength","spaceBetween","slidePosition","prevSlideSize","virtualSize","marginLeft","marginRight","marginBottom","marginTop","centeredSlides","cssMode","gridEnabled","slideSize","initSlides","shouldResetSlideSize","breakpoints","slide","updateSlide","slideStyles","currentTransform","currentWebKitTransform","roundLengths","paddingLeft","paddingRight","boxSizing","floor","swiperSlideSize","abs","slidesPerGroup","slidesPerGroupSkip","effect","setWrapperSize","updateWrapperSize","newSlidesGrid","slidesGridItem","groups","slidesBefore","slidesAfter","groupSize","slideIndex","centeredSlidesBounds","allSlidesSize","slideSizeValue","maxSnap","snap","centerInsufficientSlides","allSlidesOffset","snapIndex","addToSnapGrid","addToSlidesGrid","v","watchOverflow","checkOverflow","watchSlidesProgress","updateSlidesOffset","backFaceHiddenClass","containerModifierClass","hasClassBackfaceClassAdded","maxBackfaceHiddenSlides","updateAutoHeight","activeSlides","newHeight","setTransition","getSlideByIndex","getSlideIndexByData","visibleSlides","minusOffset","offsetLeft","offsetTop","swiperSlideOffset","cssOverflowAdjustment","updateSlidesProgress","offsetCenter","slideVisibleClass","visibleSlidesIndexes","slideOffset","slideProgress","minTranslate","originalSlideProgress","slideBefore","slideAfter","originalProgress","updateProgress","multiplier","translatesDiff","maxTranslate","isBeginning","isEnd","progressLoop","wasBeginning","wasEnd","isBeginningRounded","isEndRounded","firstSlideIndex","lastSlideIndex","firstSlideTranslate","lastSlideTranslate","translateMax","translateAbs","autoHeight","updateSlidesClasses","getFilteredSlide","activeSlide","slideActiveClass","slideNextClass","slidePrevClass","nextSlide","nextEls","nextElementSibling","next","elementNextAll","prevSlide","prevEls","previousElementSibling","prev","elementPrevAll","emitSlidesClasses","updateActiveIndex","newActiveIndex","previousIndex","previousRealIndex","previousSnapIndex","getVirtualRealIndex","aIndex","normalizeSlideIndex","getActiveIndexByTranslate","skip","initialized","runCallbacksOnInit","updateClickedSlide","slideFound","clickedSlide","clickedIndex","slideToClickedSlide","virtualTranslate","currentTranslate","setTranslate","byController","newProgress","x","y","previousTranslate","translateTo","runCallbacks","translateBounds","internal","animating","preventInteractionOnTransition","newTranslate","isH","behavior","onTranslateToWrapperTransitionEnd","transitionEmit","direction","step","slideTo","initial","normalizedTranslate","normalizedGrid","normalizedGridNext","allowSlideNext","allowSlidePrev","transitionStart","transitionEnd","t","_immediateVirtual","_cssModeVirtualInitialSet","initialSlide","onSlideToWrapperTransitionEnd","slideToLoop","newIndex","slideNext","perGroup","slidesPerGroupAuto","increment","loopPreventsSliding","loopFix","_clientLeft","slidePrev","normalize","val","normalizedSnapGrid","prevSnap","prevSnapIndex","prevIndex","lastIndex","slideReset","slideToClosest","threshold","currentSnap","slideToIndex","slideSelector","loopedSlides","getSlideIndex","loopCreate","slideRealIndex","activeSlideIndex","byMousewheel","prependSlidesIndexes","appendSlidesIndexes","isNext","isPrev","slidesPrepended","slidesAppended","swiperLoopMoveDOM","prepend","append","recalcSlides","currentSlideTranslate","diff","touches","control","loopParams","c","loopDestroy","newSlidesOrder","swiperSlideIndex","onTouchStart","touchEventsData","evCache","simulateTouch","pointerType","originalEvent","targetEl","touchEventsTarget","which","isTouched","isMoved","swipingClassHasValue","noSwipingClass","eventPath","composedPath","path","shadowRoot","noSwipingSelector","isTargetShadow","noSwiping","base","__closestFrom","assignedSlot","found","getRootNode","closestElement","allowClick","swipeHandler","currentX","pageX","currentY","pageY","startX","startY","edgeSwipeDetection","iOSEdgeSwipeDetection","edgeSwipeThreshold","iOSEdgeSwipeThreshold","innerWidth","allowTouchCallbacks","isScrolling","startMoving","touchStartTime","swipeDirection","allowThresholdMove","focusableElements","shouldPreventDefault","allowTouchMove","touchStartPreventDefault","touchStartForcePreventDefault","isContentEditable","freeMode","onTouchMove","pointerIndex","cachedEv","pointerId","targetTouch","preventedByNestedSwiper","prevX","prevY","touchReleaseOnEdges","targetTouches","diffX","diffY","sqrt","touchAngle","atan2","zoom","touchMoveStopPropagation","nested","touchesDiff","previousX","previousY","oneWayMovement","touchRatio","prevTouchesDirection","touchesDirection","isLoop","startTranslate","evt","allowMomentumBounce","grabCursor","setGrabCursor","loopFixed","disableParentSwiper","resistanceRatio","resistance","followFinger","onTouchEnd","touchEndTime","timeDiff","pathTree","lastClickTime","currentPos","stopIndex","rewindFirstIndex","rewindLastIndex","ratio","longSwipesMs","longSwipes","longSwipesRatio","shortSwipes","navigation","nextEl","prevEl","onResize","setBreakpoint","isVirtualLoop","autoplay","running","paused","resizeTimeout","resume","preventClicks","preventClicksPropagation","onScroll","onLoad","update","dummyEventAttached","dummyEventListener","capture","domMethod","swiperMethod","passive","updateOnWindowResize","isGridEnabled","resizeObserver","createElements","breakpointsBase","uniqueNavElements","passiveListeners","wrapperClass","_emitClasses","moduleExtendParams","allModulesParams","moduleParamName","moduleParams","auto","prototypes","eventsEmitter","transition","transitionDuration","moving","isLocked","__preventObserver__","cursor","unsetGrabCursor","attachEvents","detachEvents","breakpoint","getBreakpoint","currentBreakpoint","breakpointParams","originalParams","wasMultiRow","isMultiRow","wasEnabled","emitContainerClasses","fill","wasModuleEnabled","isModuleEnabled","disable","enable","directionChanged","needsReLoop","changeDirection","isEnabled","containerEl","currentHeight","innerHeight","points","point","minRatio","wasLocked","lastSlideRightEdge","addClasses","classNames","suffixes","resultClasses","item","prepareClasses","removeClasses","extendedDefaults","Swiper","swipers","newParams","__modules__","mod","extendParams","swiperParams","defaults","passedParams","velocity","trunc","clickTimeout","velocities","imagesToLoad","imagesLoaded","setProgress","cls","className","getSlideClasses","updates","view","exact","spv","breakLoop","translateValue","translated","complete","newDirection","needUpdate","currentDirection","changeLanguageDirection","mounted","shadowEl","getWrapperSelector","getWrapper","deleteInstance","cleanStyles","deleteProps","newDefaults","m","installModule","prototypeGroup","protoMethod","use","animationFrame","resizeHandler","orientationChangeHandler","ResizeObserver","newWidth","contentBoxSize","contentRect","inlineSize","blockSize","unobserve","observers","attach","WebkitMutationObserver","observerUpdate","characterData","observeParents","observeSlideChildren","containerParents","checkProps","classesToSelector","SwiperCore","a11y","notificationClass","prevSlideMessage","nextSlideMessage","firstSlideMessage","lastSlideMessage","paginationBulletMessage","slideLabelMessage","containerMessage","containerRoleDescriptionMessage","itemRoleDescriptionMessage","slideRole","clicked","liveRegion","notify","notification","makeElementsArray","makeElFocusable","subEl","makeElNotFocusable","addElRole","role","addElRoleDescription","description","addElLabel","disableEl","enableEl","onEnterOrSpaceKey","keyCode","pagination","bulletClass","click","hasPagination","bullets","hasClickablePagination","clickable","initNavEl","wrapperId","controls","addElControls","handlePointerDown","handlePointerUp","handleFocus","isActive","isVisible","sourceCapabilities","firesTouchEvents","repeat","round","random","getRandomNumber","live","addElLive","updateNavigation","bulletEl","renderBullet","bulletActiveClass","updatePagination","timeout","mousewheel","releaseOnEdges","invert","forceToAxis","sensitivity","eventsTarget","thresholdDelta","thresholdTime","noMousewheelClass","lastEventBeforeSnap","lastScrollTime","recentWheelEvents","handleMouseEnter","mouseEntered","handleMouseLeave","animateSlider","newEvent","delta","raw","handle","targetElContainsTarget","rtlFactor","sX","sY","pX","pY","wheelDelta","wheelDeltaY","wheelDeltaX","HORIZONTAL_AXIS","deltaY","deltaX","deltaMode","spinX","spinY","pixelX","pixelY","positions","sign","ignoreWheelEvents","position","sticky","shift","prevEvent","firstEvent","snapToThreshold","autoplayDisableOnInteraction","releaseScroll","returnValue","hideOnClick","disabledClass","hiddenClass","lockClass","navigationDisabledClass","getEl","toggleEl","disabled","onPrevClick","onNextClick","initButton","destroyButton","_s","isHidden","pfx","bulletSize","bulletElement","renderProgressbar","renderFraction","renderCustom","progressbarOpposite","dynamicBullets","dynamicMainBullets","formatFractionCurrent","formatFractionTotal","modifierClass","currentClass","totalClass","progressbarFillClass","progressbarOppositeClass","clickableClass","horizontalClass","verticalClass","paginationDisabledClass","dynamicBulletIndex","isPaginationDisabled","setSideBullets","onBulletClick","newSlideIndex","currentSlideIndex","total","firstIndex","midIndex","classesToRemove","suffix","s","flat","bullet","bulletIndex","firstDisplayedBullet","lastDisplayedBullet","dynamicBulletsLength","bulletsOffset","offsetProp","subElIndex","fractionEl","totalEl","progressbarDirection","scale","scaleX","scaleY","progressEl","paginationHTML","numberOfBullets","raf","timeLeft","waitForTransition","disableOnInteraction","stopOnLastSlide","reverseDirection","pauseOnMouseEnter","autoplayTimeLeft","wasPaused","pausedByTouch","touchStartTimeout","slideChanged","pausedByInteraction","autoplayDelayTotal","autoplayDelayCurrent","autoplayStartTime","calcTimeLeft","run","delayForce","currentSlideDelay","activeSlideEl","getSlideDelay","proceed","onVisibilityChange","visibilityState","onPointerEnter","onPointerLeave","thumbs","multipleActiveThumbs","autoScrollOffset","slideThumbActiveClass","thumbsContainerClass","swiperCreated","onThumbClick","thumbsSwiper","thumbsParams","SwiperClass","thumbsSwiperParams","thumbsToActivate","thumbActiveClass","useOffset","currentThumbsIndex","newThumbsIndex","newThumbsSlide","getThumbsElementAndInit","thumbsElement","onThumbsSwiper","watchForThumbsToAppear","maxRatio","containerClass","zoomedSlideClass","fakeGestureTouched","fakeGestureMoved","currentScale","isScaling","gesture","originX","originY","slideWidth","slideHeight","imageWrapEl","image","minX","minY","maxX","maxY","touchesStart","touchesCurrent","prevPositionX","prevPositionY","prevTime","getDistanceBetweenTouches","x1","y1","x2","y2","eventWithinSlide","onGestureStart","scaleStart","getScaleOrigin","onGestureChange","scaleMove","onGestureEnd","eventWithinZoomContainer","scaledWidth","scaledHeight","scaleRatio","zoomIn","touchX","touchY","offsetX","offsetY","translateX","translateY","imageWidth","imageHeight","translateMinX","translateMinY","translateMaxX","translateMaxY","touchAction","forceZoomRatio","zoomOut","zoomToggle","getListeners","passiveListener","activeListenerWithCapture","defineProperty","momentumDurationX","momentumDurationY","momentumDistanceX","newPositionX","momentumDistanceY","newPositionY","momentumDuration","in","out","thumbContainer","thumbJazz","createSwiper","hasGoTarget","goTarget","slider","thumbInterval","setInterval","sliderController","clearInterval","hasNextTarget","nextTarget","hasPreviousTarget","previousTarget","hasPaginationTarget","paginationTarget","slidesTarget","hasSlidesTarget","preloadImages","updateOnImagesReady","loopFillGroupWithBlank","selectedClass","previous","hash420","linkTargets","selectedLink","selectedIndex","select","elem","contentTargets","toggleTargets","scrollToTarget","scrollIntoView","block","preventScroll","scrollToTop","smoothScrollValue","staggerInterval","intersectionObserverOptions","isPaused","queue","timeouts","observeItems","playInterval","observeItem","settings","visible","parseJson","staggeredShow","removeFromQueue","visibleStagger","elementIdIndex","_scrollbarWidth","bodyScrollbarWidth","removeProperty","parsed","applyFocusVisiblePolyfill","hadKeyboardEvent","hadFocusVisibleRecently","hadFocusVisibleRecentlyTimeout","inputTypesAllowlist","tel","password","date","month","week","datetime","isValidFocusTarget","focusTriggersKeyboardModality","readOnly","addFocusVisibleClass","removeFocusVisibleClass","onKeyDown","metaKey","altKey","ctrlKey","onPointerDown","onFocus","onBlur","addInitialPointerMoveListeners","onInitialPointerMove","removeInitialPointerMoveListeners","DOCUMENT_FRAGMENT_NODE","DOCUMENT_NODE","factory","webpackContext","req","webpackContextResolve","__webpack_require__","code","__webpack_module_cache__","moduleId","cachedModule","__webpack_modules__","__proto__","mode","__esModule","then","ns","r","def","d","f","chunkId","all","promises","u","miniCssF","l","done","script","needAttach","scripts","charset","nc","onScriptComplete","onload","doneFns","fn","Symbol","toStringTag","p","installedChunks","j","installedChunkData","promise","reject","errorType","realSrc","request","webpackJsonpCallback","parentChunkLoadingFunction","chunkIds","moreModules","runtime","chunkLoadingGlobal","logicalName","identifierForContextKey","definitionForModuleAndIdentifier","definitionForModuleWithContextAndKey","definitionsFromContext"],"sourceRoot":""}