{"mappings":"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","sources":["","static_src/main.ts","static_src/js/components/payment.ts","node_modules/@hotwired/stimulus/dist/stimulus.js","static_src/controllers/carousel.ts","node_modules/swiper/modules/index.mjs","node_modules/swiper/modules/virtual.mjs","node_modules/swiper/shared/ssr-window.esm.mjs","node_modules/swiper/shared/utils.mjs","node_modules/swiper/modules/keyboard.mjs","node_modules/swiper/modules/mousewheel.mjs","node_modules/swiper/modules/navigation.mjs","node_modules/swiper/shared/create-element-if-not-defined.mjs","node_modules/swiper/modules/pagination.mjs","node_modules/swiper/shared/classes-to-selector.mjs","node_modules/swiper/modules/scrollbar.mjs","node_modules/swiper/modules/parallax.mjs","node_modules/swiper/modules/zoom.mjs","node_modules/swiper/modules/controller.mjs","node_modules/swiper/modules/a11y.mjs","node_modules/swiper/modules/history.mjs","node_modules/swiper/modules/hash-navigation.mjs","node_modules/swiper/modules/autoplay.mjs","node_modules/swiper/modules/thumbs.mjs","node_modules/swiper/modules/free-mode.mjs","node_modules/swiper/modules/grid.mjs","node_modules/swiper/modules/manipulation.mjs","node_modules/swiper/modules/effect-fade.mjs","node_modules/swiper/shared/effect-init.mjs","node_modules/swiper/shared/effect-target.mjs","node_modules/swiper/shared/effect-virtual-transition-end.mjs","node_modules/swiper/modules/effect-cube.mjs","node_modules/swiper/modules/effect-flip.mjs","node_modules/swiper/shared/create-shadow.mjs","node_modules/swiper/modules/effect-coverflow.mjs","node_modules/swiper/modules/effect-creative.mjs","node_modules/swiper/modules/effect-cards.mjs","node_modules/swiper/swiper.mjs","node_modules/swiper/shared/swiper-core.mjs","static_src/controllers/menu.ts","static_src/controllers/booking.ts"],"sourcesContent":["(() => {\n// import Turbo from \"@hotwired/turbo\"\n\nclass $8b78d3c676514ebb$var$Payment {\n static selector() {\n return \"[data-payment]\";\n }\n constructor(node){\n const mollie = Mollie(\"pfl_qCasbusi7m\", {\n locale: \"fr_FR\",\n testmode: true\n });\n const options = {};\n /**\n * Get elements\n */ const form = document.getElementById(\"mcForm\");\n const formError = document.getElementById(\"form-error\");\n const submitButton = document.getElementById(\"submit-button\");\n /**\n * Create card holder input\n */ const cardHolder = mollie.createComponent(\"cardHolder\", options);\n cardHolder.mount(\"#card-holder\");\n const cardHolderError = document.getElementById(\"card-holder-error\");\n cardHolder.addEventListener(\"change\", function(event) {\n if (event.error && event.touched) cardHolderError.textContent = event.error;\n else cardHolderError.textContent = \"\";\n });\n /**\n * Create card number input\n */ const cardNumber = mollie.createComponent(\"cardNumber\", options);\n cardNumber.mount(\"#card-number\");\n const cardNumberError = document.getElementById(\"card-number-error\");\n cardNumber.addEventListener(\"change\", function(event) {\n if (event.error && event.touched) cardNumberError.textContent = event.error;\n else cardNumberError.textContent = \"\";\n });\n /**\n * Create expiry date input\n */ const expiryDate = mollie.createComponent(\"expiryDate\", options);\n expiryDate.mount(\"#expiry-date\");\n const expiryDateError = document.getElementById(\"expiry-date-error\");\n expiryDate.addEventListener(\"change\", function(event) {\n if (event.error && event.touched) expiryDateError.textContent = event.error;\n else expiryDateError.textContent = \"\";\n });\n /**\n * Create verification code input\n */ const verificationCode = mollie.createComponent(\"verificationCode\", options);\n verificationCode.mount(\"#verification-code\");\n const verificationCodeError = document.getElementById(\"verification-code-error\");\n verificationCode.addEventListener(\"change\", function(event) {\n if (event.error && event.touched) verificationCodeError.textContent = event.error;\n else verificationCodeError.textContent = \"\";\n });\n /**\n * Disables the form inputs and submit button\n */ function disableForm() {\n submitButton.disabled = true;\n }\n /**\n * Enables the form inputs and submit button\n */ function enableForm() {\n submitButton.disabled = false;\n }\n /**\n * Submit handler\n */ form.addEventListener(\"submit\", function(event) {\n console.log(\"SUBMIT FORM\");\n event.preventDefault();\n disableForm();\n // Reset possible form error\n formError.textContent = \"\";\n // Get a payment token\n mollie.createToken().then(function(result) {\n const token = result.token;\n const error = result.error;\n if (error) {\n enableForm();\n formError.textContent = error.message;\n return;\n }\n // Add token to the form\n const tokenInput = document.createElement(\"input\");\n tokenInput.setAttribute(\"name\", \"token\");\n tokenInput.setAttribute(\"type\", \"hidden\");\n tokenInput.setAttribute(\"value\", token);\n form.appendChild(tokenInput);\n console.error({\n token: token\n });\n form.submit();\n });\n });\n }\n}\nvar $8b78d3c676514ebb$export$2e2bcd8739ae039 = $8b78d3c676514ebb$var$Payment;\n\n\n/*\nStimulus 3.2.1\nCopyright © 2023 Basecamp, LLC\n */ class $1e1b4d625d583414$var$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 = $1e1b4d625d583414$var$extendEvent(event);\n for (const binding of this.bindings){\n if (extendedEvent.immediatePropagationStopped) break;\n else binding.handleEvent(extendedEvent);\n }\n }\n hasBindings() {\n return this.unorderedBindings.size > 0;\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 $1e1b4d625d583414$var$extendEvent(event) {\n if (\"immediatePropagationStopped\" in event) return event;\n else {\n const { stopImmediatePropagation: stopImmediatePropagation } = event;\n return Object.assign(event, {\n immediatePropagationStopped: false,\n stopImmediatePropagation () {\n this.immediatePropagationStopped = true;\n stopImmediatePropagation.call(this);\n }\n });\n }\n}\nclass $1e1b4d625d583414$var$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()).reduce((listeners, map)=>listeners.concat(Array.from(map.values())), []);\n }\n bindingConnected(binding) {\n this.fetchEventListenerForBinding(binding).bindingConnected(binding);\n }\n bindingDisconnected(binding, clearEventListeners = false) {\n this.fetchEventListenerForBinding(binding).bindingDisconnected(binding);\n if (clearEventListeners) this.clearEventListenersForBinding(binding);\n }\n handleError(error, message, detail = {}) {\n this.application.handleError(error, `Error ${message}`, detail);\n }\n clearEventListenersForBinding(binding) {\n const eventListener = this.fetchEventListenerForBinding(binding);\n if (!eventListener.hasBindings()) {\n eventListener.disconnect();\n this.removeMappedEventListenerFor(binding);\n }\n }\n removeMappedEventListenerFor(binding) {\n const { eventTarget: eventTarget, eventName: eventName, eventOptions: eventOptions } = binding;\n const eventListenerMap = this.fetchEventListenerMapForEventTarget(eventTarget);\n const cacheKey = this.cacheKey(eventName, eventOptions);\n eventListenerMap.delete(cacheKey);\n if (eventListenerMap.size == 0) this.eventListenerMaps.delete(eventTarget);\n }\n fetchEventListenerForBinding(binding) {\n const { eventTarget: eventTarget, eventName: eventName, eventOptions: 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 $1e1b4d625d583414$var$EventListener(eventTarget, eventName, eventOptions);\n if (this.started) eventListener.connect();\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 = [\n eventName\n ];\n Object.keys(eventOptions).sort().forEach((key)=>{\n parts.push(`${eventOptions[key] ? \"\" : \"!\"}${key}`);\n });\n return parts.join(\":\");\n }\n}\nconst $1e1b4d625d583414$var$defaultActionDescriptorFilters = {\n stop ({ event: event, value: value }) {\n if (value) event.stopPropagation();\n return true;\n },\n prevent ({ event: event, value: value }) {\n if (value) event.preventDefault();\n return true;\n },\n self ({ event: event, value: value, element: element }) {\n if (value) return element === event.target;\n else return true;\n }\n};\nconst $1e1b4d625d583414$var$descriptorPattern = /^(?:(?:([^.]+?)\\+)?(.+?)(?:\\.(.+?))?(?:@(window|document))?->)?(.+?)(?:#([^:]+?))(?::(.+))?$/;\nfunction $1e1b4d625d583414$var$parseActionDescriptorString(descriptorString) {\n const source = descriptorString.trim();\n const matches = source.match($1e1b4d625d583414$var$descriptorPattern) || [];\n let eventName = matches[2];\n let keyFilter = matches[3];\n if (keyFilter && ![\n \"keydown\",\n \"keyup\",\n \"keypress\"\n ].includes(eventName)) {\n eventName += `.${keyFilter}`;\n keyFilter = \"\";\n }\n return {\n eventTarget: $1e1b4d625d583414$var$parseEventTarget(matches[4]),\n eventName: eventName,\n eventOptions: matches[7] ? $1e1b4d625d583414$var$parseEventOptions(matches[7]) : {},\n identifier: matches[5],\n methodName: matches[6],\n keyFilter: matches[1] || keyFilter\n };\n}\nfunction $1e1b4d625d583414$var$parseEventTarget(eventTargetName) {\n if (eventTargetName == \"window\") return window;\n else if (eventTargetName == \"document\") return document;\n}\nfunction $1e1b4d625d583414$var$parseEventOptions(eventOptions) {\n return eventOptions.split(\":\").reduce((options, token)=>Object.assign(options, {\n [token.replace(/^!/, \"\")]: !/^!/.test(token)\n }), {});\n}\nfunction $1e1b4d625d583414$var$stringifyEventTarget(eventTarget) {\n if (eventTarget == window) return \"window\";\n else if (eventTarget == document) return \"document\";\n}\nfunction $1e1b4d625d583414$var$camelize(value) {\n return value.replace(/(?:[_-])([a-z0-9])/g, (_, char)=>char.toUpperCase());\n}\nfunction $1e1b4d625d583414$var$namespaceCamelize(value) {\n return $1e1b4d625d583414$var$camelize(value.replace(/--/g, \"-\").replace(/__/g, \"_\"));\n}\nfunction $1e1b4d625d583414$var$capitalize(value) {\n return value.charAt(0).toUpperCase() + value.slice(1);\n}\nfunction $1e1b4d625d583414$var$dasherize(value) {\n return value.replace(/([A-Z])/g, (_, char)=>`-${char.toLowerCase()}`);\n}\nfunction $1e1b4d625d583414$var$tokenize(value) {\n return value.match(/[^\\s]+/g) || [];\n}\nfunction $1e1b4d625d583414$var$isSomething(object) {\n return object !== null && object !== undefined;\n}\nfunction $1e1b4d625d583414$var$hasProperty(object, property) {\n return Object.prototype.hasOwnProperty.call(object, property);\n}\nconst $1e1b4d625d583414$var$allModifiers = [\n \"meta\",\n \"ctrl\",\n \"alt\",\n \"shift\"\n];\nclass $1e1b4d625d583414$var$Action {\n constructor(element, index, descriptor, schema){\n this.element = element;\n this.index = index;\n this.eventTarget = descriptor.eventTarget || element;\n this.eventName = descriptor.eventName || $1e1b4d625d583414$var$getDefaultEventNameForElement(element) || $1e1b4d625d583414$var$error(\"missing event name\");\n this.eventOptions = descriptor.eventOptions || {};\n this.identifier = descriptor.identifier || $1e1b4d625d583414$var$error(\"missing identifier\");\n this.methodName = descriptor.methodName || $1e1b4d625d583414$var$error(\"missing method name\");\n this.keyFilter = descriptor.keyFilter || \"\";\n this.schema = schema;\n }\n static forToken(token, schema) {\n return new this(token.element, token.index, $1e1b4d625d583414$var$parseActionDescriptorString(token.content), schema);\n }\n toString() {\n const eventFilter = this.keyFilter ? `.${this.keyFilter}` : \"\";\n const eventTarget = this.eventTargetName ? `@${this.eventTargetName}` : \"\";\n return `${this.eventName}${eventFilter}${eventTarget}->${this.identifier}#${this.methodName}`;\n }\n shouldIgnoreKeyboardEvent(event) {\n if (!this.keyFilter) return false;\n const filters = this.keyFilter.split(\"+\");\n if (this.keyFilterDissatisfied(event, filters)) return true;\n const standardFilter = filters.filter((key)=>!$1e1b4d625d583414$var$allModifiers.includes(key))[0];\n if (!standardFilter) return false;\n if (!$1e1b4d625d583414$var$hasProperty(this.keyMappings, standardFilter)) $1e1b4d625d583414$var$error(`contains unknown key filter: ${this.keyFilter}`);\n return this.keyMappings[standardFilter].toLowerCase() !== event.key.toLowerCase();\n }\n shouldIgnoreMouseEvent(event) {\n if (!this.keyFilter) return false;\n const filters = [\n this.keyFilter\n ];\n if (this.keyFilterDissatisfied(event, filters)) return true;\n return false;\n }\n get params() {\n const params = {};\n const pattern = new RegExp(`^data-${this.identifier}-(.+)-param$`, \"i\");\n for (const { name: name, value: value } of Array.from(this.element.attributes)){\n const match = name.match(pattern);\n const key = match && match[1];\n if (key) params[$1e1b4d625d583414$var$camelize(key)] = $1e1b4d625d583414$var$typecast(value);\n }\n return params;\n }\n get eventTargetName() {\n return $1e1b4d625d583414$var$stringifyEventTarget(this.eventTarget);\n }\n get keyMappings() {\n return this.schema.keyMappings;\n }\n keyFilterDissatisfied(event, filters) {\n const [meta, ctrl, alt, shift] = $1e1b4d625d583414$var$allModifiers.map((modifier)=>filters.includes(modifier));\n return event.metaKey !== meta || event.ctrlKey !== ctrl || event.altKey !== alt || event.shiftKey !== shift;\n }\n}\nconst $1e1b4d625d583414$var$defaultEventNames = {\n a: ()=>\"click\",\n button: ()=>\"click\",\n form: ()=>\"submit\",\n details: ()=>\"toggle\",\n input: (e)=>e.getAttribute(\"type\") == \"submit\" ? \"click\" : \"input\",\n select: ()=>\"change\",\n textarea: ()=>\"input\"\n};\nfunction $1e1b4d625d583414$var$getDefaultEventNameForElement(element) {\n const tagName = element.tagName.toLowerCase();\n if (tagName in $1e1b4d625d583414$var$defaultEventNames) return $1e1b4d625d583414$var$defaultEventNames[tagName](element);\n}\nfunction $1e1b4d625d583414$var$error(message) {\n throw new Error(message);\n}\nfunction $1e1b4d625d583414$var$typecast(value) {\n try {\n return JSON.parse(value);\n } catch (o_O) {\n return value;\n }\n}\nclass $1e1b4d625d583414$var$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 const actionEvent = this.prepareActionEvent(event);\n if (this.willBeInvokedByEvent(event) && this.applyEventModifiers(actionEvent)) this.invokeWithEvent(actionEvent);\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\") return method;\n throw new Error(`Action \"${this.action}\" references undefined method \"${this.methodName}\"`);\n }\n applyEventModifiers(event) {\n const { element: element } = this.action;\n const { actionDescriptorFilters: actionDescriptorFilters } = this.context.application;\n const { controller: controller } = this.context;\n let passes = true;\n for (const [name, value] of Object.entries(this.eventOptions)){\n if (name in actionDescriptorFilters) {\n const filter = actionDescriptorFilters[name];\n passes = passes && filter({\n name: name,\n value: value,\n event: event,\n element: element,\n controller: controller\n });\n } else continue;\n }\n return passes;\n }\n prepareActionEvent(event) {\n return Object.assign(event, {\n params: this.action.params\n });\n }\n invokeWithEvent(event) {\n const { target: target, currentTarget: currentTarget } = event;\n try {\n this.method.call(this.controller, event);\n this.context.logDebugActivity(this.methodName, {\n event: event,\n target: target,\n currentTarget: currentTarget,\n action: this.methodName\n });\n } catch (error) {\n const { identifier: identifier, controller: controller, element: element, index: index } = this;\n const detail = {\n identifier: identifier,\n controller: controller,\n element: element,\n index: index,\n event: event\n };\n this.context.handleError(error, `invoking action \"${this.action}\"`, detail);\n }\n }\n willBeInvokedByEvent(event) {\n const eventTarget = event.target;\n if (event instanceof KeyboardEvent && this.action.shouldIgnoreKeyboardEvent(event)) return false;\n if (event instanceof MouseEvent && this.action.shouldIgnoreMouseEvent(event)) return false;\n if (this.element === eventTarget) return true;\n else if (eventTarget instanceof Element && this.element.contains(eventTarget)) return this.scope.containsElement(eventTarget);\n else return this.scope.containsElement(this.action.element);\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}\nclass $1e1b4d625d583414$export$12e07a2a9f87578a {\n constructor(element, delegate){\n this.mutationObserverInit = {\n attributes: true,\n childList: true,\n subtree: true\n };\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))if (!matches.has(element)) this.removeElement(element);\n for (const element of Array.from(matches))this.addElement(element);\n }\n }\n processMutations(mutations) {\n if (this.started) for (const mutation of mutations)this.processMutation(mutation);\n }\n processMutation(mutation) {\n if (mutation.type == \"attributes\") this.processAttributeChange(mutation.target, mutation.attributeName);\n else if (mutation.type == \"childList\") {\n this.processRemovedNodes(mutation.removedNodes);\n this.processAddedNodes(mutation.addedNodes);\n }\n }\n processAttributeChange(element, attributeName) {\n if (this.elements.has(element)) {\n if (this.delegate.elementAttributeChanged && this.matchElement(element)) this.delegate.elementAttributeChanged(element, attributeName);\n else this.removeElement(element);\n } else if (this.matchElement(element)) this.addElement(element);\n }\n processRemovedNodes(nodes) {\n for (const node of Array.from(nodes)){\n const element = this.elementFromNode(node);\n if (element) this.processTree(element, this.removeElement);\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)) this.processTree(element, this.addElement);\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))processor.call(this, element);\n }\n elementFromNode(node) {\n if (node.nodeType == Node.ELEMENT_NODE) return node;\n }\n elementIsActive(element) {\n if (element.isConnected != this.element.isConnected) return false;\n else return this.element.contains(element);\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) this.delegate.elementMatched(element);\n }\n }\n }\n removeElement(element) {\n if (this.elements.has(element)) {\n this.elements.delete(element);\n if (this.delegate.elementUnmatched) this.delegate.elementUnmatched(element);\n }\n }\n}\nclass $1e1b4d625d583414$export$fe68319d413d05cb {\n constructor(element, attributeName, delegate){\n this.attributeName = attributeName;\n this.delegate = delegate;\n this.elementObserver = new $1e1b4d625d583414$export$12e07a2a9f87578a(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) ? [\n tree\n ] : [];\n const matches = Array.from(tree.querySelectorAll(this.selector));\n return match.concat(matches);\n }\n elementMatched(element) {\n if (this.delegate.elementMatchedAttribute) this.delegate.elementMatchedAttribute(element, this.attributeName);\n }\n elementUnmatched(element) {\n if (this.delegate.elementUnmatchedAttribute) this.delegate.elementUnmatchedAttribute(element, this.attributeName);\n }\n elementAttributeChanged(element, attributeName) {\n if (this.delegate.elementAttributeValueChanged && this.attributeName == attributeName) this.delegate.elementAttributeValueChanged(element, attributeName);\n }\n}\nfunction $1e1b4d625d583414$export$e16d8520af44a096(map, key, value) {\n $1e1b4d625d583414$export$e7aa7bc5c1b3cfb3(map, key).add(value);\n}\nfunction $1e1b4d625d583414$export$1d2f21e549771e67(map, key, value) {\n $1e1b4d625d583414$export$e7aa7bc5c1b3cfb3(map, key).delete(value);\n $1e1b4d625d583414$export$d6cf75919f12ca5a(map, key);\n}\nfunction $1e1b4d625d583414$export$e7aa7bc5c1b3cfb3(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 $1e1b4d625d583414$export$d6cf75919f12ca5a(map, key) {\n const values = map.get(key);\n if (values != null && values.size == 0) map.delete(key);\n}\nclass $1e1b4d625d583414$export$8bd4ad37b76db6ba {\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 $1e1b4d625d583414$export$e16d8520af44a096(this.valuesByKey, key, value);\n }\n delete(key, value) {\n $1e1b4d625d583414$export$1d2f21e549771e67(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).filter(([_key, values])=>values.has(value)).map(([key, _values])=>key);\n }\n}\nclass $1e1b4d625d583414$export$a7c3d2c2552a674d extends $1e1b4d625d583414$export$8bd4ad37b76db6ba {\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 $1e1b4d625d583414$export$e16d8520af44a096(this.keysByValue, value, key);\n }\n delete(key, value) {\n super.delete(key, value);\n $1e1b4d625d583414$export$1d2f21e549771e67(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}\nclass $1e1b4d625d583414$export$116e0b48509995b {\n constructor(element, selector, delegate, details){\n this._selector = selector;\n this.details = details;\n this.elementObserver = new $1e1b4d625d583414$export$12e07a2a9f87578a(element, this);\n this.delegate = delegate;\n this.matchesByElement = new $1e1b4d625d583414$export$8bd4ad37b76db6ba();\n }\n get started() {\n return this.elementObserver.started;\n }\n get selector() {\n return this._selector;\n }\n set selector(selector) {\n this._selector = selector;\n this.refresh();\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 element() {\n return this.elementObserver.element;\n }\n matchElement(element) {\n const { selector: selector } = this;\n if (selector) {\n const matches = element.matches(selector);\n if (this.delegate.selectorMatchElement) return matches && this.delegate.selectorMatchElement(element, this.details);\n return matches;\n } else return false;\n }\n matchElementsInTree(tree) {\n const { selector: selector } = this;\n if (selector) {\n const match = this.matchElement(tree) ? [\n tree\n ] : [];\n const matches = Array.from(tree.querySelectorAll(selector)).filter((match)=>this.matchElement(match));\n return match.concat(matches);\n } else return [];\n }\n elementMatched(element) {\n const { selector: selector } = this;\n if (selector) this.selectorMatched(element, selector);\n }\n elementUnmatched(element) {\n const selectors = this.matchesByElement.getKeysForValue(element);\n for (const selector of selectors)this.selectorUnmatched(element, selector);\n }\n elementAttributeChanged(element, _attributeName) {\n const { selector: selector } = this;\n if (selector) {\n const matches = this.matchElement(element);\n const matchedBefore = this.matchesByElement.has(selector, element);\n if (matches && !matchedBefore) this.selectorMatched(element, selector);\n else if (!matches && matchedBefore) this.selectorUnmatched(element, selector);\n }\n }\n selectorMatched(element, selector) {\n this.delegate.selectorMatched(element, selector, this.details);\n this.matchesByElement.add(selector, element);\n }\n selectorUnmatched(element, selector) {\n this.delegate.selectorUnmatched(element, selector, this.details);\n this.matchesByElement.delete(selector, element);\n }\n}\nclass $1e1b4d625d583414$export$da226bebbf7f6caa {\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, {\n attributes: true,\n attributeOldValue: true\n });\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) for (const attributeName of this.knownAttributeNames)this.refreshAttribute(attributeName, null);\n }\n processMutations(mutations) {\n if (this.started) for (const mutation of mutations)this.processMutation(mutation);\n }\n processMutation(mutation) {\n const attributeName = mutation.attributeName;\n if (attributeName) this.refreshAttribute(attributeName, mutation.oldValue);\n }\n refreshAttribute(attributeName, oldValue) {\n const key = this.delegate.getStringMapKeyForAttribute(attributeName);\n if (key != null) {\n if (!this.stringMap.has(attributeName)) this.stringMapKeyAdded(key, attributeName);\n const value = this.element.getAttribute(attributeName);\n if (this.stringMap.get(attributeName) != value) this.stringMapValueChanged(value, key, oldValue);\n if (value == null) {\n const oldValue = this.stringMap.get(attributeName);\n this.stringMap.delete(attributeName);\n if (oldValue) this.stringMapKeyRemoved(key, attributeName, oldValue);\n } else this.stringMap.set(attributeName, value);\n }\n }\n stringMapKeyAdded(key, attributeName) {\n if (this.delegate.stringMapKeyAdded) this.delegate.stringMapKeyAdded(key, attributeName);\n }\n stringMapValueChanged(value, key, oldValue) {\n if (this.delegate.stringMapValueChanged) this.delegate.stringMapValueChanged(value, key, oldValue);\n }\n stringMapKeyRemoved(key, attributeName, oldValue) {\n if (this.delegate.stringMapKeyRemoved) this.delegate.stringMapKeyRemoved(key, attributeName, oldValue);\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}\nclass $1e1b4d625d583414$export$3aa21c2f03ef6b3b {\n constructor(element, attributeName, delegate){\n this.attributeObserver = new $1e1b4d625d583414$export$fe68319d413d05cb(element, attributeName, this);\n this.delegate = delegate;\n this.tokensByElement = new $1e1b4d625d583414$export$8bd4ad37b76db6ba();\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 = $1e1b4d625d583414$var$zip(previousTokens, currentTokens).findIndex(([previousToken, currentToken])=>!$1e1b4d625d583414$var$tokensAreEqual(previousToken, currentToken));\n if (firstDifferingIndex == -1) return [\n [],\n []\n ];\n else return [\n previousTokens.slice(firstDifferingIndex),\n currentTokens.slice(firstDifferingIndex)\n ];\n }\n readTokensForElement(element) {\n const attributeName = this.attributeName;\n const tokenString = element.getAttribute(attributeName) || \"\";\n return $1e1b4d625d583414$var$parseTokenString(tokenString, element, attributeName);\n }\n}\nfunction $1e1b4d625d583414$var$parseTokenString(tokenString, element, attributeName) {\n return tokenString.trim().split(/\\s+/).filter((content)=>content.length).map((content, index)=>({\n element: element,\n attributeName: attributeName,\n content: content,\n index: index\n }));\n}\nfunction $1e1b4d625d583414$var$zip(left, right) {\n const length = Math.max(left.length, right.length);\n return Array.from({\n length: length\n }, (_, index)=>[\n left[index],\n right[index]\n ]);\n}\nfunction $1e1b4d625d583414$var$tokensAreEqual(left, right) {\n return left && right && left.index == right.index && left.content == right.content;\n}\nclass $1e1b4d625d583414$export$d27fa4c7330a452e {\n constructor(element, attributeName, delegate){\n this.tokenListObserver = new $1e1b4d625d583414$export$3aa21c2f03ef6b3b(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: element } = token;\n const { value: 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: element } = token;\n const { value: 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 {\n value: value\n };\n } catch (error) {\n return {\n error: error\n };\n }\n }\n}\nclass $1e1b4d625d583414$var$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 $1e1b4d625d583414$export$d27fa4c7330a452e(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 $1e1b4d625d583414$var$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, true));\n this.bindingsByAction.clear();\n }\n parseValueForToken(token) {\n const action = $1e1b4d625d583414$var$Action.forToken(token, this.schema);\n if (action.identifier == this.identifier) return action;\n }\n elementMatchedValue(element, action) {\n this.connectAction(action);\n }\n elementUnmatchedValue(element, action) {\n this.disconnectAction(action);\n }\n}\nclass $1e1b4d625d583414$var$ValueObserver {\n constructor(context, receiver){\n this.context = context;\n this.receiver = receiver;\n this.stringMapObserver = new $1e1b4d625d583414$export$da226bebbf7f6caa(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) return this.valueDescriptorMap[attributeName].name;\n }\n stringMapKeyAdded(key, attributeName) {\n const descriptor = this.valueDescriptorMap[attributeName];\n if (!this.hasValue(key)) this.invokeChangedCallback(key, descriptor.writer(this.receiver[key]), descriptor.writer(descriptor.defaultValue));\n }\n stringMapValueChanged(value, name, oldValue) {\n const descriptor = this.valueDescriptorNameMap[name];\n if (value === null) return;\n if (oldValue === null) oldValue = descriptor.writer(descriptor.defaultValue);\n this.invokeChangedCallback(name, value, oldValue);\n }\n stringMapKeyRemoved(key, attributeName, oldValue) {\n const descriptor = this.valueDescriptorNameMap[key];\n if (this.hasValue(key)) this.invokeChangedCallback(key, descriptor.writer(this.receiver[key]), oldValue);\n else this.invokeChangedCallback(key, descriptor.writer(descriptor.defaultValue), oldValue);\n }\n invokeChangedCallbacksForDefaultValues() {\n for (const { key: key, name: name, defaultValue: defaultValue, writer: writer } of this.valueDescriptors)if (defaultValue != undefined && !this.controller.data.has(key)) this.invokeChangedCallback(name, writer(defaultValue), undefined);\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) oldValue = descriptor.reader(rawOldValue);\n changedMethod.call(this.receiver, value, oldValue);\n } catch (error) {\n if (error instanceof TypeError) error.message = `Stimulus Value \"${this.context.identifier}.${descriptor.name}\" - ${error.message}`;\n throw error;\n }\n }\n }\n get valueDescriptors() {\n const { valueDescriptorMap: 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${$1e1b4d625d583414$var$capitalize(descriptor.name)}`;\n return this.receiver[hasMethodName];\n }\n}\nclass $1e1b4d625d583414$var$TargetObserver {\n constructor(context, delegate){\n this.context = context;\n this.delegate = delegate;\n this.targetsByName = new $1e1b4d625d583414$export$8bd4ad37b76db6ba();\n }\n start() {\n if (!this.tokenListObserver) {\n this.tokenListObserver = new $1e1b4d625d583414$export$3aa21c2f03ef6b3b(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: element, content: name }) {\n if (this.scope.containsElement(element)) this.connectTarget(element, name);\n }\n tokenUnmatched({ element: 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 || _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 || _a.pause(()=>this.delegate.targetDisconnected(element, name));\n }\n }\n disconnectAllTargets() {\n for (const name of this.targetsByName.keys)for (const element of this.targetsByName.getValuesForKey(name))this.disconnectTarget(element, name);\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}\nfunction $1e1b4d625d583414$var$readInheritableStaticArrayValues(constructor, propertyName) {\n const ancestors = $1e1b4d625d583414$var$getAncestorsForConstructor(constructor);\n return Array.from(ancestors.reduce((values, constructor)=>{\n $1e1b4d625d583414$var$getOwnStaticArrayValues(constructor, propertyName).forEach((name)=>values.add(name));\n return values;\n }, new Set()));\n}\nfunction $1e1b4d625d583414$var$readInheritableStaticObjectPairs(constructor, propertyName) {\n const ancestors = $1e1b4d625d583414$var$getAncestorsForConstructor(constructor);\n return ancestors.reduce((pairs, constructor)=>{\n pairs.push(...$1e1b4d625d583414$var$getOwnStaticObjectPairs(constructor, propertyName));\n return pairs;\n }, []);\n}\nfunction $1e1b4d625d583414$var$getAncestorsForConstructor(constructor) {\n const ancestors = [];\n while(constructor){\n ancestors.push(constructor);\n constructor = Object.getPrototypeOf(constructor);\n }\n return ancestors.reverse();\n}\nfunction $1e1b4d625d583414$var$getOwnStaticArrayValues(constructor, propertyName) {\n const definition = constructor[propertyName];\n return Array.isArray(definition) ? definition : [];\n}\nfunction $1e1b4d625d583414$var$getOwnStaticObjectPairs(constructor, propertyName) {\n const definition = constructor[propertyName];\n return definition ? Object.keys(definition).map((key)=>[\n key,\n definition[key]\n ]) : [];\n}\nclass $1e1b4d625d583414$var$OutletObserver {\n constructor(context, delegate){\n this.started = false;\n this.context = context;\n this.delegate = delegate;\n this.outletsByName = new $1e1b4d625d583414$export$8bd4ad37b76db6ba();\n this.outletElementsByName = new $1e1b4d625d583414$export$8bd4ad37b76db6ba();\n this.selectorObserverMap = new Map();\n this.attributeObserverMap = new Map();\n }\n start() {\n if (!this.started) {\n this.outletDefinitions.forEach((outletName)=>{\n this.setupSelectorObserverForOutlet(outletName);\n this.setupAttributeObserverForOutlet(outletName);\n });\n this.started = true;\n this.dependentContexts.forEach((context)=>context.refresh());\n }\n }\n refresh() {\n this.selectorObserverMap.forEach((observer)=>observer.refresh());\n this.attributeObserverMap.forEach((observer)=>observer.refresh());\n }\n stop() {\n if (this.started) {\n this.started = false;\n this.disconnectAllOutlets();\n this.stopSelectorObservers();\n this.stopAttributeObservers();\n }\n }\n stopSelectorObservers() {\n if (this.selectorObserverMap.size > 0) {\n this.selectorObserverMap.forEach((observer)=>observer.stop());\n this.selectorObserverMap.clear();\n }\n }\n stopAttributeObservers() {\n if (this.attributeObserverMap.size > 0) {\n this.attributeObserverMap.forEach((observer)=>observer.stop());\n this.attributeObserverMap.clear();\n }\n }\n selectorMatched(element, _selector, { outletName: outletName }) {\n const outlet = this.getOutlet(element, outletName);\n if (outlet) this.connectOutlet(outlet, element, outletName);\n }\n selectorUnmatched(element, _selector, { outletName: outletName }) {\n const outlet = this.getOutletFromMap(element, outletName);\n if (outlet) this.disconnectOutlet(outlet, element, outletName);\n }\n selectorMatchElement(element, { outletName: outletName }) {\n const selector = this.selector(outletName);\n const hasOutlet = this.hasOutlet(element, outletName);\n const hasOutletController = element.matches(`[${this.schema.controllerAttribute}~=${outletName}]`);\n if (selector) return hasOutlet && hasOutletController && element.matches(selector);\n else return false;\n }\n elementMatchedAttribute(_element, attributeName) {\n const outletName = this.getOutletNameFromOutletAttributeName(attributeName);\n if (outletName) this.updateSelectorObserverForOutlet(outletName);\n }\n elementAttributeValueChanged(_element, attributeName) {\n const outletName = this.getOutletNameFromOutletAttributeName(attributeName);\n if (outletName) this.updateSelectorObserverForOutlet(outletName);\n }\n elementUnmatchedAttribute(_element, attributeName) {\n const outletName = this.getOutletNameFromOutletAttributeName(attributeName);\n if (outletName) this.updateSelectorObserverForOutlet(outletName);\n }\n connectOutlet(outlet, element, outletName) {\n var _a;\n if (!this.outletElementsByName.has(outletName, element)) {\n this.outletsByName.add(outletName, outlet);\n this.outletElementsByName.add(outletName, element);\n (_a = this.selectorObserverMap.get(outletName)) === null || _a === void 0 || _a.pause(()=>this.delegate.outletConnected(outlet, element, outletName));\n }\n }\n disconnectOutlet(outlet, element, outletName) {\n var _a;\n if (this.outletElementsByName.has(outletName, element)) {\n this.outletsByName.delete(outletName, outlet);\n this.outletElementsByName.delete(outletName, element);\n (_a = this.selectorObserverMap.get(outletName)) === null || _a === void 0 || _a.pause(()=>this.delegate.outletDisconnected(outlet, element, outletName));\n }\n }\n disconnectAllOutlets() {\n for (const outletName of this.outletElementsByName.keys){\n for (const element of this.outletElementsByName.getValuesForKey(outletName))for (const outlet of this.outletsByName.getValuesForKey(outletName))this.disconnectOutlet(outlet, element, outletName);\n }\n }\n updateSelectorObserverForOutlet(outletName) {\n const observer = this.selectorObserverMap.get(outletName);\n if (observer) observer.selector = this.selector(outletName);\n }\n setupSelectorObserverForOutlet(outletName) {\n const selector = this.selector(outletName);\n const selectorObserver = new $1e1b4d625d583414$export$116e0b48509995b(document.body, selector, this, {\n outletName: outletName\n });\n this.selectorObserverMap.set(outletName, selectorObserver);\n selectorObserver.start();\n }\n setupAttributeObserverForOutlet(outletName) {\n const attributeName = this.attributeNameForOutletName(outletName);\n const attributeObserver = new $1e1b4d625d583414$export$fe68319d413d05cb(this.scope.element, attributeName, this);\n this.attributeObserverMap.set(outletName, attributeObserver);\n attributeObserver.start();\n }\n selector(outletName) {\n return this.scope.outlets.getSelectorForOutletName(outletName);\n }\n attributeNameForOutletName(outletName) {\n return this.scope.schema.outletAttributeForScope(this.identifier, outletName);\n }\n getOutletNameFromOutletAttributeName(attributeName) {\n return this.outletDefinitions.find((outletName)=>this.attributeNameForOutletName(outletName) === attributeName);\n }\n get outletDependencies() {\n const dependencies = new $1e1b4d625d583414$export$8bd4ad37b76db6ba();\n this.router.modules.forEach((module)=>{\n const constructor = module.definition.controllerConstructor;\n const outlets = $1e1b4d625d583414$var$readInheritableStaticArrayValues(constructor, \"outlets\");\n outlets.forEach((outlet)=>dependencies.add(outlet, module.identifier));\n });\n return dependencies;\n }\n get outletDefinitions() {\n return this.outletDependencies.getKeysForValue(this.identifier);\n }\n get dependentControllerIdentifiers() {\n return this.outletDependencies.getValuesForKey(this.identifier);\n }\n get dependentContexts() {\n const identifiers = this.dependentControllerIdentifiers;\n return this.router.contexts.filter((context)=>identifiers.includes(context.identifier));\n }\n hasOutlet(element, outletName) {\n return !!this.getOutlet(element, outletName) || !!this.getOutletFromMap(element, outletName);\n }\n getOutlet(element, outletName) {\n return this.application.getControllerForElementAndIdentifier(element, outletName);\n }\n getOutletFromMap(element, outletName) {\n return this.outletsByName.getValuesForKey(outletName).find((outlet)=>outlet.element === element);\n }\n get scope() {\n return this.context.scope;\n }\n get schema() {\n return this.context.schema;\n }\n get identifier() {\n return this.context.identifier;\n }\n get application() {\n return this.context.application;\n }\n get router() {\n return this.application.router;\n }\n}\nclass $1e1b4d625d583414$export$841858b892ce1f4c {\n constructor(module, scope){\n this.logDebugActivity = (functionName, detail = {})=>{\n const { identifier: identifier, controller: controller, element: element } = this;\n detail = Object.assign({\n identifier: identifier,\n controller: controller,\n element: element\n }, 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 $1e1b4d625d583414$var$BindingObserver(this, this.dispatcher);\n this.valueObserver = new $1e1b4d625d583414$var$ValueObserver(this, this.controller);\n this.targetObserver = new $1e1b4d625d583414$var$TargetObserver(this, this);\n this.outletObserver = new $1e1b4d625d583414$var$OutletObserver(this, this);\n try {\n this.controller.initialize();\n this.logDebugActivity(\"initialize\");\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 this.outletObserver.start();\n try {\n this.controller.connect();\n this.logDebugActivity(\"connect\");\n } catch (error) {\n this.handleError(error, \"connecting controller\");\n }\n }\n refresh() {\n this.outletObserver.refresh();\n }\n disconnect() {\n try {\n this.controller.disconnect();\n this.logDebugActivity(\"disconnect\");\n } catch (error) {\n this.handleError(error, \"disconnecting controller\");\n }\n this.outletObserver.stop();\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: identifier, controller: controller, element: element } = this;\n detail = Object.assign({\n identifier: identifier,\n controller: controller,\n element: element\n }, 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 outletConnected(outlet, element, name) {\n this.invokeControllerMethod(`${$1e1b4d625d583414$var$namespaceCamelize(name)}OutletConnected`, outlet, element);\n }\n outletDisconnected(outlet, element, name) {\n this.invokeControllerMethod(`${$1e1b4d625d583414$var$namespaceCamelize(name)}OutletDisconnected`, outlet, element);\n }\n invokeControllerMethod(methodName, ...args) {\n const controller = this.controller;\n if (typeof controller[methodName] == \"function\") controller[methodName](...args);\n }\n}\nfunction $1e1b4d625d583414$var$bless(constructor) {\n return $1e1b4d625d583414$var$shadow(constructor, $1e1b4d625d583414$var$getBlessedProperties(constructor));\n}\nfunction $1e1b4d625d583414$var$shadow(constructor, properties) {\n const shadowConstructor = $1e1b4d625d583414$var$extend(constructor);\n const shadowProperties = $1e1b4d625d583414$var$getShadowProperties(constructor.prototype, properties);\n Object.defineProperties(shadowConstructor.prototype, shadowProperties);\n return shadowConstructor;\n}\nfunction $1e1b4d625d583414$var$getBlessedProperties(constructor) {\n const blessings = $1e1b4d625d583414$var$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 $1e1b4d625d583414$var$getShadowProperties(prototype, properties) {\n return $1e1b4d625d583414$var$getOwnKeys(properties).reduce((shadowProperties, key)=>{\n const descriptor = $1e1b4d625d583414$var$getShadowedDescriptor(prototype, properties, key);\n if (descriptor) Object.assign(shadowProperties, {\n [key]: descriptor\n });\n return shadowProperties;\n }, {});\n}\nfunction $1e1b4d625d583414$var$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 $1e1b4d625d583414$var$getOwnKeys = (()=>{\n if (typeof Object.getOwnPropertySymbols == \"function\") return (object)=>[\n ...Object.getOwnPropertyNames(object),\n ...Object.getOwnPropertySymbols(object)\n ];\n else return Object.getOwnPropertyNames;\n})();\nconst $1e1b4d625d583414$var$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: {\n value: extended\n }\n });\n Reflect.setPrototypeOf(extended, constructor);\n return extended;\n }\n function testReflectExtension() {\n const a = function() {\n this.a.call(this);\n };\n const b = extendWithReflect(a);\n b.prototype.a = function() {};\n return new b();\n }\n try {\n testReflectExtension();\n return extendWithReflect;\n } catch (error) {\n return (constructor)=>class extended extends constructor {\n };\n }\n})();\nfunction $1e1b4d625d583414$var$blessDefinition(definition) {\n return {\n identifier: definition.identifier,\n controllerConstructor: $1e1b4d625d583414$var$bless(definition.controllerConstructor)\n };\n}\nclass $1e1b4d625d583414$var$Module {\n constructor(application, definition){\n this.application = application;\n this.definition = $1e1b4d625d583414$var$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 $1e1b4d625d583414$export$841858b892ce1f4c(this, scope);\n this.contextsByScope.set(scope, context);\n }\n return context;\n }\n}\nclass $1e1b4d625d583414$var$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 $1e1b4d625d583414$var$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}\nclass $1e1b4d625d583414$var$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 } else return false;\n }\n getAttributeNameForKey(key) {\n return `data-${this.identifier}-${$1e1b4d625d583414$var$dasherize(key)}`;\n }\n}\nclass $1e1b4d625d583414$var$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}\nfunction $1e1b4d625d583414$var$attributeValueContainsToken(attributeName, token) {\n return `[${attributeName}~=\"${token}\"]`;\n}\nclass $1e1b4d625d583414$var$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 || this.findTarget(targetName) || 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 $1e1b4d625d583414$var$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 $1e1b4d625d583414$var$attributeValueContainsToken(this.schema.targetAttribute, targetDescriptor);\n }\n deprecate(element, targetName) {\n if (element) {\n const { identifier: 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}\". ` + `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}\nclass $1e1b4d625d583414$var$OutletSet {\n constructor(scope, controllerElement){\n this.scope = scope;\n this.controllerElement = controllerElement;\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(outletName) {\n return this.find(outletName) != null;\n }\n find(...outletNames) {\n return outletNames.reduce((outlet, outletName)=>outlet || this.findOutlet(outletName), undefined);\n }\n findAll(...outletNames) {\n return outletNames.reduce((outlets, outletName)=>[\n ...outlets,\n ...this.findAllOutlets(outletName)\n ], []);\n }\n getSelectorForOutletName(outletName) {\n const attributeName = this.schema.outletAttributeForScope(this.identifier, outletName);\n return this.controllerElement.getAttribute(attributeName);\n }\n findOutlet(outletName) {\n const selector = this.getSelectorForOutletName(outletName);\n if (selector) return this.findElement(selector, outletName);\n }\n findAllOutlets(outletName) {\n const selector = this.getSelectorForOutletName(outletName);\n return selector ? this.findAllElements(selector, outletName) : [];\n }\n findElement(selector, outletName) {\n const elements = this.scope.queryElements(selector);\n return elements.filter((element)=>this.matchesElement(element, selector, outletName))[0];\n }\n findAllElements(selector, outletName) {\n const elements = this.scope.queryElements(selector);\n return elements.filter((element)=>this.matchesElement(element, selector, outletName));\n }\n matchesElement(element, selector, outletName) {\n const controllerAttribute = element.getAttribute(this.scope.schema.controllerAttribute) || \"\";\n return element.matches(selector) && controllerAttribute.split(\" \").includes(outletName);\n }\n}\nclass $1e1b4d625d583414$var$Scope {\n constructor(schema, element, identifier, logger){\n this.targets = new $1e1b4d625d583414$var$TargetSet(this);\n this.classes = new $1e1b4d625d583414$var$ClassMap(this);\n this.data = new $1e1b4d625d583414$var$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 $1e1b4d625d583414$var$Guide(logger);\n this.outlets = new $1e1b4d625d583414$var$OutletSet(this.documentScope, element);\n }\n findElement(selector) {\n return this.element.matches(selector) ? this.element : this.queryElements(selector).find(this.containsElement);\n }\n findAllElements(selector) {\n return [\n ...this.element.matches(selector) ? [\n this.element\n ] : [],\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 $1e1b4d625d583414$var$attributeValueContainsToken(this.schema.controllerAttribute, this.identifier);\n }\n get isDocumentScope() {\n return this.element === document.documentElement;\n }\n get documentScope() {\n return this.isDocumentScope ? this : new $1e1b4d625d583414$var$Scope(this.schema, document.documentElement, this.identifier, this.guide.logger);\n }\n}\nclass $1e1b4d625d583414$var$ScopeObserver {\n constructor(element, schema, delegate){\n this.element = element;\n this.schema = schema;\n this.delegate = delegate;\n this.valueListObserver = new $1e1b4d625d583414$export$d27fa4c7330a452e(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: element, content: identifier } = token;\n return this.parseValueForElementAndIdentifier(element, identifier);\n }\n parseValueForElementAndIdentifier(element, identifier) {\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) this.delegate.scopeConnected(value);\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) this.delegate.scopeDisconnected(value);\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}\nclass $1e1b4d625d583414$var$Router {\n constructor(application){\n this.application = application;\n this.scopeObserver = new $1e1b4d625d583414$var$ScopeObserver(this.element, this.schema, this);\n this.scopesByIdentifier = new $1e1b4d625d583414$export$8bd4ad37b76db6ba();\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 $1e1b4d625d583414$var$Module(this.application, definition);\n this.connectModule(module);\n const afterLoad = definition.controllerConstructor.afterLoad;\n if (afterLoad) afterLoad.call(definition.controllerConstructor, definition.identifier, this.application);\n }\n unloadIdentifier(identifier) {\n const module = this.modulesByIdentifier.get(identifier);\n if (module) this.disconnectModule(module);\n }\n getContextForElementAndIdentifier(element, identifier) {\n const module = this.modulesByIdentifier.get(identifier);\n if (module) return module.contexts.find((context)=>context.element == element);\n }\n proposeToConnectScopeForElementAndIdentifier(element, identifier) {\n const scope = this.scopeObserver.parseValueForElementAndIdentifier(element, identifier);\n if (scope) this.scopeObserver.elementMatchedValue(scope.element, scope);\n else console.error(`Couldn't find or create scope for identifier: \"${identifier}\" and element:`, element);\n }\n handleError(error, message, detail) {\n this.application.handleError(error, message, detail);\n }\n createScopeForElementAndIdentifier(element, identifier) {\n return new $1e1b4d625d583414$var$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) module.connectContextForScope(scope);\n }\n scopeDisconnected(scope) {\n this.scopesByIdentifier.delete(scope.identifier, scope);\n const module = this.modulesByIdentifier.get(scope.identifier);\n if (module) module.disconnectContextForScope(scope);\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}\nconst $1e1b4d625d583414$export$1db618b7b2275ea1 = {\n controllerAttribute: \"data-controller\",\n actionAttribute: \"data-action\",\n targetAttribute: \"data-target\",\n targetAttributeForScope: (identifier)=>`data-${identifier}-target`,\n outletAttributeForScope: (identifier, outlet)=>`data-${identifier}-${outlet}-outlet`,\n keyMappings: Object.assign(Object.assign({\n enter: \"Enter\",\n tab: \"Tab\",\n esc: \"Escape\",\n space: \" \",\n up: \"ArrowUp\",\n down: \"ArrowDown\",\n left: \"ArrowLeft\",\n right: \"ArrowRight\",\n home: \"Home\",\n end: \"End\",\n page_up: \"PageUp\",\n page_down: \"PageDown\"\n }, $1e1b4d625d583414$var$objectFromEntries(\"abcdefghijklmnopqrstuvwxyz\".split(\"\").map((c)=>[\n c,\n c\n ]))), $1e1b4d625d583414$var$objectFromEntries(\"0123456789\".split(\"\").map((n)=>[\n n,\n n\n ])))\n};\nfunction $1e1b4d625d583414$var$objectFromEntries(array) {\n return array.reduce((memo, [k, v])=>Object.assign(Object.assign({}, memo), {\n [k]: v\n }), {});\n}\nclass $1e1b4d625d583414$export$16975c34e60e1e61 {\n constructor(element = document.documentElement, schema = $1e1b4d625d583414$export$1db618b7b2275ea1){\n this.logger = console;\n this.debug = false;\n this.logDebugActivity = (identifier, functionName, detail = {})=>{\n if (this.debug) this.logFormattedMessage(identifier, functionName, detail);\n };\n this.element = element;\n this.schema = schema;\n this.dispatcher = new $1e1b4d625d583414$var$Dispatcher(this);\n this.router = new $1e1b4d625d583414$var$Router(this);\n this.actionDescriptorFilters = Object.assign({}, $1e1b4d625d583414$var$defaultActionDescriptorFilters);\n }\n static start(element, schema) {\n const application = new this(element, schema);\n application.start();\n return application;\n }\n async start() {\n await $1e1b4d625d583414$var$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({\n identifier: identifier,\n controllerConstructor: controllerConstructor\n });\n }\n registerActionOption(name, filter) {\n this.actionDescriptorFilters[name] = filter;\n }\n load(head, ...rest) {\n const definitions = Array.isArray(head) ? head : [\n head,\n ...rest\n ];\n definitions.forEach((definition)=>{\n if (definition.controllerConstructor.shouldLoad) this.router.loadDefinition(definition);\n });\n }\n unload(head, ...rest) {\n const identifiers = Array.isArray(head) ? head : [\n head,\n ...rest\n ];\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 || _a.call(window, message, \"\", 0, 0, error);\n }\n logFormattedMessage(identifier, functionName, detail = {}) {\n detail = Object.assign({\n application: this\n }, detail);\n this.logger.groupCollapsed(`${identifier} #${functionName}`);\n this.logger.log(\"details:\", Object.assign({}, detail));\n this.logger.groupEnd();\n }\n}\nfunction $1e1b4d625d583414$var$domReady() {\n return new Promise((resolve)=>{\n if (document.readyState == \"loading\") document.addEventListener(\"DOMContentLoaded\", ()=>resolve());\n else resolve();\n });\n}\nfunction $1e1b4d625d583414$var$ClassPropertiesBlessing(constructor) {\n const classes = $1e1b4d625d583414$var$readInheritableStaticArrayValues(constructor, \"classes\");\n return classes.reduce((properties, classDefinition)=>{\n return Object.assign(properties, $1e1b4d625d583414$var$propertiesForClassDefinition(classDefinition));\n }, {});\n}\nfunction $1e1b4d625d583414$var$propertiesForClassDefinition(key) {\n return {\n [`${key}Class`]: {\n get () {\n const { classes: classes } = this;\n if (classes.has(key)) return classes.get(key);\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${$1e1b4d625d583414$var$capitalize(key)}Class`]: {\n get () {\n return this.classes.has(key);\n }\n }\n };\n}\nfunction $1e1b4d625d583414$var$OutletPropertiesBlessing(constructor) {\n const outlets = $1e1b4d625d583414$var$readInheritableStaticArrayValues(constructor, \"outlets\");\n return outlets.reduce((properties, outletDefinition)=>{\n return Object.assign(properties, $1e1b4d625d583414$var$propertiesForOutletDefinition(outletDefinition));\n }, {});\n}\nfunction $1e1b4d625d583414$var$getOutletController(controller, element, identifier) {\n return controller.application.getControllerForElementAndIdentifier(element, identifier);\n}\nfunction $1e1b4d625d583414$var$getControllerAndEnsureConnectedScope(controller, element, outletName) {\n let outletController = $1e1b4d625d583414$var$getOutletController(controller, element, outletName);\n if (outletController) return outletController;\n controller.application.router.proposeToConnectScopeForElementAndIdentifier(element, outletName);\n outletController = $1e1b4d625d583414$var$getOutletController(controller, element, outletName);\n if (outletController) return outletController;\n}\nfunction $1e1b4d625d583414$var$propertiesForOutletDefinition(name) {\n const camelizedName = $1e1b4d625d583414$var$namespaceCamelize(name);\n return {\n [`${camelizedName}Outlet`]: {\n get () {\n const outletElement = this.outlets.find(name);\n const selector = this.outlets.getSelectorForOutletName(name);\n if (outletElement) {\n const outletController = $1e1b4d625d583414$var$getControllerAndEnsureConnectedScope(this, outletElement, name);\n if (outletController) return outletController;\n throw new Error(`The provided outlet element is missing an outlet controller \"${name}\" instance for host controller \"${this.identifier}\"`);\n }\n throw new Error(`Missing outlet element \"${name}\" for host controller \"${this.identifier}\". Stimulus couldn't find a matching outlet element using selector \"${selector}\".`);\n }\n },\n [`${camelizedName}Outlets`]: {\n get () {\n const outlets = this.outlets.findAll(name);\n if (outlets.length > 0) return outlets.map((outletElement)=>{\n const outletController = $1e1b4d625d583414$var$getControllerAndEnsureConnectedScope(this, outletElement, name);\n if (outletController) return outletController;\n console.warn(`The provided outlet element is missing an outlet controller \"${name}\" instance for host controller \"${this.identifier}\"`, outletElement);\n }).filter((controller)=>controller);\n return [];\n }\n },\n [`${camelizedName}OutletElement`]: {\n get () {\n const outletElement = this.outlets.find(name);\n const selector = this.outlets.getSelectorForOutletName(name);\n if (outletElement) return outletElement;\n else throw new Error(`Missing outlet element \"${name}\" for host controller \"${this.identifier}\". Stimulus couldn't find a matching outlet element using selector \"${selector}\".`);\n }\n },\n [`${camelizedName}OutletElements`]: {\n get () {\n return this.outlets.findAll(name);\n }\n },\n [`has${$1e1b4d625d583414$var$capitalize(camelizedName)}Outlet`]: {\n get () {\n return this.outlets.has(name);\n }\n }\n };\n}\nfunction $1e1b4d625d583414$var$TargetPropertiesBlessing(constructor) {\n const targets = $1e1b4d625d583414$var$readInheritableStaticArrayValues(constructor, \"targets\");\n return targets.reduce((properties, targetDefinition)=>{\n return Object.assign(properties, $1e1b4d625d583414$var$propertiesForTargetDefinition(targetDefinition));\n }, {});\n}\nfunction $1e1b4d625d583414$var$propertiesForTargetDefinition(name) {\n return {\n [`${name}Target`]: {\n get () {\n const target = this.targets.find(name);\n if (target) return target;\n else throw new Error(`Missing target element \"${name}\" for \"${this.identifier}\" controller`);\n }\n },\n [`${name}Targets`]: {\n get () {\n return this.targets.findAll(name);\n }\n },\n [`has${$1e1b4d625d583414$var$capitalize(name)}Target`]: {\n get () {\n return this.targets.has(name);\n }\n }\n };\n}\nfunction $1e1b4d625d583414$var$ValuePropertiesBlessing(constructor) {\n const valueDefinitionPairs = $1e1b4d625d583414$var$readInheritableStaticObjectPairs(constructor, \"values\");\n const propertyDescriptorMap = {\n valueDescriptorMap: {\n get () {\n return valueDefinitionPairs.reduce((result, valueDefinitionPair)=>{\n const valueDescriptor = $1e1b4d625d583414$var$parseValueDefinitionPair(valueDefinitionPair, this.identifier);\n const attributeName = this.data.getAttributeNameForKey(valueDescriptor.key);\n return Object.assign(result, {\n [attributeName]: valueDescriptor\n });\n }, {});\n }\n }\n };\n return valueDefinitionPairs.reduce((properties, valueDefinitionPair)=>{\n return Object.assign(properties, $1e1b4d625d583414$var$propertiesForValueDefinitionPair(valueDefinitionPair));\n }, propertyDescriptorMap);\n}\nfunction $1e1b4d625d583414$var$propertiesForValueDefinitionPair(valueDefinitionPair, controller) {\n const definition = $1e1b4d625d583414$var$parseValueDefinitionPair(valueDefinitionPair, controller);\n const { key: key, name: name, reader: read, writer: write } = definition;\n return {\n [name]: {\n get () {\n const value = this.data.get(key);\n if (value !== null) return read(value);\n else return definition.defaultValue;\n },\n set (value) {\n if (value === undefined) this.data.delete(key);\n else this.data.set(key, write(value));\n }\n },\n [`has${$1e1b4d625d583414$var$capitalize(name)}`]: {\n get () {\n return this.data.has(key) || definition.hasCustomDefaultValue;\n }\n }\n };\n}\nfunction $1e1b4d625d583414$var$parseValueDefinitionPair([token, typeDefinition], controller) {\n return $1e1b4d625d583414$var$valueDescriptorForTokenAndTypeDefinition({\n controller: controller,\n token: token,\n typeDefinition: typeDefinition\n });\n}\nfunction $1e1b4d625d583414$var$parseValueTypeConstant(constant) {\n switch(constant){\n case Array:\n return \"array\";\n case Boolean:\n return \"boolean\";\n case Number:\n return \"number\";\n case Object:\n return \"object\";\n case String:\n return \"string\";\n }\n}\nfunction $1e1b4d625d583414$var$parseValueTypeDefault(defaultValue) {\n switch(typeof defaultValue){\n case \"boolean\":\n return \"boolean\";\n case \"number\":\n return \"number\";\n case \"string\":\n return \"string\";\n }\n if (Array.isArray(defaultValue)) return \"array\";\n if (Object.prototype.toString.call(defaultValue) === \"[object Object]\") return \"object\";\n}\nfunction $1e1b4d625d583414$var$parseValueTypeObject(payload) {\n const { controller: controller, token: token, typeObject: typeObject } = payload;\n const hasType = $1e1b4d625d583414$var$isSomething(typeObject.type);\n const hasDefault = $1e1b4d625d583414$var$isSomething(typeObject.default);\n const fullObject = hasType && hasDefault;\n const onlyType = hasType && !hasDefault;\n const onlyDefault = !hasType && hasDefault;\n const typeFromObject = $1e1b4d625d583414$var$parseValueTypeConstant(typeObject.type);\n const typeFromDefaultValue = $1e1b4d625d583414$var$parseValueTypeDefault(payload.typeObject.default);\n if (onlyType) return typeFromObject;\n if (onlyDefault) return typeFromDefaultValue;\n if (typeFromObject !== typeFromDefaultValue) {\n const propertyPath = controller ? `${controller}.${token}` : 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 \"${typeObject.default}\" is of type \"${typeFromDefaultValue}\".`);\n }\n if (fullObject) return typeFromObject;\n}\nfunction $1e1b4d625d583414$var$parseValueTypeDefinition(payload) {\n const { controller: controller, token: token, typeDefinition: typeDefinition } = payload;\n const typeObject = {\n controller: controller,\n token: token,\n typeObject: typeDefinition\n };\n const typeFromObject = $1e1b4d625d583414$var$parseValueTypeObject(typeObject);\n const typeFromDefaultValue = $1e1b4d625d583414$var$parseValueTypeDefault(typeDefinition);\n const typeFromConstant = $1e1b4d625d583414$var$parseValueTypeConstant(typeDefinition);\n const type = typeFromObject || typeFromDefaultValue || typeFromConstant;\n if (type) return type;\n const propertyPath = controller ? `${controller}.${typeDefinition}` : token;\n throw new Error(`Unknown value type \"${propertyPath}\" for \"${token}\" value`);\n}\nfunction $1e1b4d625d583414$var$defaultValueForDefinition(typeDefinition) {\n const constant = $1e1b4d625d583414$var$parseValueTypeConstant(typeDefinition);\n if (constant) return $1e1b4d625d583414$var$defaultValuesByType[constant];\n const hasDefault = $1e1b4d625d583414$var$hasProperty(typeDefinition, \"default\");\n const hasType = $1e1b4d625d583414$var$hasProperty(typeDefinition, \"type\");\n const typeObject = typeDefinition;\n if (hasDefault) return typeObject.default;\n if (hasType) {\n const { type: type } = typeObject;\n const constantFromType = $1e1b4d625d583414$var$parseValueTypeConstant(type);\n if (constantFromType) return $1e1b4d625d583414$var$defaultValuesByType[constantFromType];\n }\n return typeDefinition;\n}\nfunction $1e1b4d625d583414$var$valueDescriptorForTokenAndTypeDefinition(payload) {\n const { token: token, typeDefinition: typeDefinition } = payload;\n const key = `${$1e1b4d625d583414$var$dasherize(token)}-value`;\n const type = $1e1b4d625d583414$var$parseValueTypeDefinition(payload);\n return {\n type: type,\n key: key,\n name: $1e1b4d625d583414$var$camelize(key),\n get defaultValue () {\n return $1e1b4d625d583414$var$defaultValueForDefinition(typeDefinition);\n },\n get hasCustomDefaultValue () {\n return $1e1b4d625d583414$var$parseValueTypeDefault(typeDefinition) !== undefined;\n },\n reader: $1e1b4d625d583414$var$readers[type],\n writer: $1e1b4d625d583414$var$writers[type] || $1e1b4d625d583414$var$writers.default\n };\n}\nconst $1e1b4d625d583414$var$defaultValuesByType = {\n get array () {\n return [];\n },\n boolean: false,\n number: 0,\n get object () {\n return {};\n },\n string: \"\"\n};\nconst $1e1b4d625d583414$var$readers = {\n array (value) {\n const array = JSON.parse(value);\n if (!Array.isArray(array)) throw new TypeError(`expected value of type \"array\" but instead got value \"${value}\" of type \"${$1e1b4d625d583414$var$parseValueTypeDefault(array)}\"`);\n return array;\n },\n boolean (value) {\n return !(value == \"0\" || String(value).toLowerCase() == \"false\");\n },\n number (value) {\n return Number(value.replace(/_/g, \"\"));\n },\n object (value) {\n const object = JSON.parse(value);\n if (object === null || typeof object != \"object\" || Array.isArray(object)) throw new TypeError(`expected value of type \"object\" but instead got value \"${value}\" of type \"${$1e1b4d625d583414$var$parseValueTypeDefault(object)}\"`);\n return object;\n },\n string (value) {\n return value;\n }\n};\nconst $1e1b4d625d583414$var$writers = {\n default: $1e1b4d625d583414$var$writeString,\n array: $1e1b4d625d583414$var$writeJSON,\n object: $1e1b4d625d583414$var$writeJSON\n};\nfunction $1e1b4d625d583414$var$writeJSON(value) {\n return JSON.stringify(value);\n}\nfunction $1e1b4d625d583414$var$writeString(value) {\n return `${value}`;\n}\nclass $1e1b4d625d583414$export$bd0bf19f25da8474 {\n constructor(context){\n this.context = context;\n }\n static get shouldLoad() {\n return true;\n }\n static afterLoad(_identifier, _application) {\n return;\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 outlets() {\n return this.scope.outlets;\n }\n get classes() {\n return this.scope.classes;\n }\n get data() {\n return this.scope.data;\n }\n initialize() {}\n connect() {}\n disconnect() {}\n dispatch(eventName, { target: target = this.element, detail: detail = {}, prefix: prefix = this.identifier, bubbles: bubbles = true, cancelable: cancelable = true } = {}) {\n const type = prefix ? `${prefix}:${eventName}` : eventName;\n const event = new CustomEvent(type, {\n detail: detail,\n bubbles: bubbles,\n cancelable: cancelable\n });\n target.dispatchEvent(event);\n return event;\n }\n}\n$1e1b4d625d583414$export$bd0bf19f25da8474.blessings = [\n $1e1b4d625d583414$var$ClassPropertiesBlessing,\n $1e1b4d625d583414$var$TargetPropertiesBlessing,\n $1e1b4d625d583414$var$ValuePropertiesBlessing,\n $1e1b4d625d583414$var$OutletPropertiesBlessing\n];\n$1e1b4d625d583414$export$bd0bf19f25da8474.targets = [];\n$1e1b4d625d583414$export$bd0bf19f25da8474.outlets = [];\n$1e1b4d625d583414$export$bd0bf19f25da8474.values = {};\n\n\n\n/**\n * SSR Window 5.0.0\n * Better handling for window object in SSR environment\n * https://github.com/nolimits4web/ssr-window\n *\n * Copyright 2025, Vladimir Kharlampidi\n *\n * Licensed under MIT\n *\n * Released on: February 12, 2025\n */ /* eslint-disable no-param-reassign */ function $768c2f4c151a0363$var$isObject(obj) {\n return obj !== null && typeof obj === 'object' && 'constructor' in obj && obj.constructor === Object;\n}\nfunction $768c2f4c151a0363$var$extend(target, src) {\n if (target === void 0) target = {};\n if (src === void 0) src = {};\n const noExtend = [\n '__proto__',\n 'constructor',\n 'prototype'\n ];\n Object.keys(src).filter((key)=>noExtend.indexOf(key) < 0).forEach((key)=>{\n if (typeof target[key] === 'undefined') target[key] = src[key];\n else if ($768c2f4c151a0363$var$isObject(src[key]) && $768c2f4c151a0363$var$isObject(target[key]) && Object.keys(src[key]).length > 0) $768c2f4c151a0363$var$extend(target[key], src[key]);\n });\n}\nconst $768c2f4c151a0363$var$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 $768c2f4c151a0363$export$39b482c5e57630a8() {\n const doc = typeof document !== 'undefined' ? document : {};\n $768c2f4c151a0363$var$extend(doc, $768c2f4c151a0363$var$ssrDocument);\n return doc;\n}\nconst $768c2f4c151a0363$var$ssrWindow = {\n document: $768c2f4c151a0363$var$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') return;\n clearTimeout(id);\n }\n};\nfunction $768c2f4c151a0363$export$407448d2b89b1813() {\n const win = typeof window !== 'undefined' ? window : {};\n $768c2f4c151a0363$var$extend(win, $768c2f4c151a0363$var$ssrWindow);\n return win;\n}\n\n\n\nfunction $3e0e2b092da8f124$export$35e795649ee09318(classes) {\n if (classes === void 0) classes = '';\n return classes.trim().split(' ').filter((c)=>!!c.trim());\n}\nfunction $3e0e2b092da8f124$export$4a5767248b18ef41(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 $3e0e2b092da8f124$export$7ccc53e8f1e7dfc5(callback, delay) {\n if (delay === void 0) delay = 0;\n return setTimeout(callback, delay);\n}\nfunction $3e0e2b092da8f124$export$2d1720544b23b823() {\n return Date.now();\n}\nfunction $3e0e2b092da8f124$var$getComputedStyle(el) {\n const window1 = (0, $768c2f4c151a0363$export$407448d2b89b1813)();\n let style;\n if (window1.getComputedStyle) style = window1.getComputedStyle(el, null);\n if (!style && el.currentStyle) style = el.currentStyle;\n if (!style) style = el.style;\n return style;\n}\nfunction $3e0e2b092da8f124$export$342063e11d6c3cad(el, axis) {\n if (axis === void 0) axis = 'x';\n const window1 = (0, $768c2f4c151a0363$export$407448d2b89b1813)();\n let matrix;\n let curTransform;\n let transformMatrix;\n const curStyle = $3e0e2b092da8f124$var$getComputedStyle(el);\n if (window1.WebKitCSSMatrix) {\n curTransform = curStyle.transform || curStyle.webkitTransform;\n if (curTransform.split(',').length > 6) curTransform = curTransform.split(', ').map((a)=>a.replace(',', '.')).join(', ');\n // Some old versions of Webkit choke when 'none' is passed; pass\n // empty string instead in this case\n transformMatrix = new window1.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 (window1.WebKitCSSMatrix) curTransform = transformMatrix.m41;\n else if (matrix.length === 16) curTransform = parseFloat(matrix[12]);\n else curTransform = parseFloat(matrix[4]);\n }\n if (axis === 'y') {\n // Latest Chrome and webkits Fix\n if (window1.WebKitCSSMatrix) curTransform = transformMatrix.m42;\n else if (matrix.length === 16) curTransform = parseFloat(matrix[13]);\n else curTransform = parseFloat(matrix[5]);\n }\n return curTransform || 0;\n}\nfunction $3e0e2b092da8f124$export$ae1af26003f05816(o) {\n return typeof o === 'object' && o !== null && o.constructor && Object.prototype.toString.call(o).slice(8, -1) === 'Object';\n}\nfunction $3e0e2b092da8f124$var$isNode(node) {\n // eslint-disable-next-line\n if (typeof window !== 'undefined' && typeof window.HTMLElement !== 'undefined') return node instanceof HTMLElement;\n return node && (node.nodeType === 1 || node.nodeType === 11);\n}\nfunction $3e0e2b092da8f124$export$d141bba7fdc215a3() {\n const to = Object(arguments.length <= 0 ? undefined : arguments[0]);\n const noExtend = [\n '__proto__',\n 'constructor',\n 'prototype'\n ];\n for(let i = 1; i < arguments.length; i += 1){\n const nextSource = i < 0 || arguments.length <= i ? undefined : arguments[i];\n if (nextSource !== undefined && nextSource !== null && !$3e0e2b092da8f124$var$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 ($3e0e2b092da8f124$export$ae1af26003f05816(to[nextKey]) && $3e0e2b092da8f124$export$ae1af26003f05816(nextSource[nextKey])) {\n if (nextSource[nextKey].__swiper__) to[nextKey] = nextSource[nextKey];\n else $3e0e2b092da8f124$export$d141bba7fdc215a3(to[nextKey], nextSource[nextKey]);\n } else if (!$3e0e2b092da8f124$export$ae1af26003f05816(to[nextKey]) && $3e0e2b092da8f124$export$ae1af26003f05816(nextSource[nextKey])) {\n to[nextKey] = {};\n if (nextSource[nextKey].__swiper__) to[nextKey] = nextSource[nextKey];\n else $3e0e2b092da8f124$export$d141bba7fdc215a3(to[nextKey], nextSource[nextKey]);\n } else to[nextKey] = nextSource[nextKey];\n }\n }\n }\n }\n return to;\n}\nfunction $3e0e2b092da8f124$export$407448d2b89b1813(el, varName, varValue) {\n el.style.setProperty(varName, varValue);\n}\nfunction $3e0e2b092da8f124$export$3b14a55fb2447963(_ref) {\n let { swiper: swiper, targetPosition: targetPosition, side: side } = _ref;\n const window1 = (0, $768c2f4c151a0363$export$407448d2b89b1813)();\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 window1.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) startTime = time;\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)) currentPosition = targetPosition;\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 window1.cancelAnimationFrame(swiper.cssModeFrameID);\n return;\n }\n swiper.cssModeFrameID = window1.requestAnimationFrame(animate);\n };\n animate();\n}\nfunction $3e0e2b092da8f124$export$39b482c5e57630a8(slideEl) {\n return slideEl.querySelector('.swiper-slide-transform') || slideEl.shadowRoot && slideEl.shadowRoot.querySelector('.swiper-slide-transform') || slideEl;\n}\nfunction $3e0e2b092da8f124$export$f1e1789686576879(element, selector) {\n if (selector === void 0) selector = '';\n const window1 = (0, $768c2f4c151a0363$export$407448d2b89b1813)();\n const children = [\n ...element.children\n ];\n if (window1.HTMLSlotElement && element instanceof HTMLSlotElement) children.push(...element.assignedElements());\n if (!selector) return children;\n return children.filter((el)=>el.matches(selector));\n}\nfunction $3e0e2b092da8f124$var$elementIsChildOfSlot(el, slot) {\n // Breadth-first search through all parent's children and assigned elements\n const elementsQueue = [\n slot\n ];\n while(elementsQueue.length > 0){\n const elementToCheck = elementsQueue.shift();\n if (el === elementToCheck) return true;\n elementsQueue.push(...elementToCheck.children, ...elementToCheck.shadowRoot ? elementToCheck.shadowRoot.children : [], ...elementToCheck.assignedElements ? elementToCheck.assignedElements() : []);\n }\n}\nfunction $3e0e2b092da8f124$export$efccba1c4a2ef57b(el, parent) {\n const window1 = (0, $768c2f4c151a0363$export$407448d2b89b1813)();\n let isChild = parent.contains(el);\n if (!isChild && window1.HTMLSlotElement && parent instanceof HTMLSlotElement) {\n const children = [\n ...parent.assignedElements()\n ];\n isChild = children.includes(el);\n if (!isChild) isChild = $3e0e2b092da8f124$var$elementIsChildOfSlot(el, parent);\n }\n return isChild;\n}\nfunction $3e0e2b092da8f124$export$90a7f3efeed30595(text) {\n try {\n console.warn(text);\n return;\n } catch (err) {\n // err\n }\n}\nfunction $3e0e2b092da8f124$export$db3b6bfb95261072(tag, classes) {\n if (classes === void 0) classes = [];\n const el = document.createElement(tag);\n el.classList.add(...Array.isArray(classes) ? classes : $3e0e2b092da8f124$export$35e795649ee09318(classes));\n return el;\n}\nfunction $3e0e2b092da8f124$export$4368d992c4eafac0(el) {\n const window1 = (0, $768c2f4c151a0363$export$407448d2b89b1813)();\n const document1 = (0, $768c2f4c151a0363$export$39b482c5e57630a8)();\n const box = el.getBoundingClientRect();\n const body = document1.body;\n const clientTop = el.clientTop || body.clientTop || 0;\n const clientLeft = el.clientLeft || body.clientLeft || 0;\n const scrollTop = el === window1 ? window1.scrollY : el.scrollTop;\n const scrollLeft = el === window1 ? window1.scrollX : el.scrollLeft;\n return {\n top: box.top + scrollTop - clientTop,\n left: box.left + scrollLeft - clientLeft\n };\n}\nfunction $3e0e2b092da8f124$export$625550452a3fa3ec(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 $3e0e2b092da8f124$export$43caf9889c228507(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 $3e0e2b092da8f124$export$9e5f44173e64f162(el, prop) {\n const window1 = (0, $768c2f4c151a0363$export$407448d2b89b1813)();\n return window1.getComputedStyle(el, null).getPropertyValue(prop);\n}\nfunction $3e0e2b092da8f124$export$23f2a1d2818174ef(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)if (child.nodeType === 1) i += 1;\n return i;\n }\n return undefined;\n}\nfunction $3e0e2b092da8f124$export$8b22cf2602fb60ce(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 parents.push(parent);\n parent = parent.parentElement;\n }\n return parents;\n}\nfunction $3e0e2b092da8f124$export$882b5998b3b9117c(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) el.addEventListener('transitionend', fireCallBack);\n}\nfunction $3e0e2b092da8f124$export$dda1d9f60106f0e9(el, size, includeMargins) {\n const window1 = (0, $768c2f4c151a0363$export$407448d2b89b1813)();\n if (includeMargins) return el[size === 'width' ? 'offsetWidth' : 'offsetHeight'] + parseFloat(window1.getComputedStyle(el, null).getPropertyValue(size === 'width' ? 'margin-right' : 'margin-top')) + parseFloat(window1.getComputedStyle(el, null).getPropertyValue(size === 'width' ? 'margin-left' : 'margin-bottom'));\n return el.offsetWidth;\n}\nfunction $3e0e2b092da8f124$export$953cecd6e717a553(el) {\n return (Array.isArray(el) ? el : [\n el\n ]).filter((e)=>!!e);\n}\nfunction $3e0e2b092da8f124$export$ffb5f4729a158638(swiper) {\n return (v)=>{\n if (Math.abs(v) > 0 && swiper.browser && swiper.browser.need3dFix && Math.abs(v) % 90 === 0) return v + 0.001;\n return v;\n };\n}\nfunction $3e0e2b092da8f124$export$2408f22a0fab9ae5(el, html) {\n if (html === void 0) html = '';\n if (typeof trustedTypes !== 'undefined') el.innerHTML = trustedTypes.createPolicy('html', {\n createHTML: (s)=>s\n }).createHTML(html);\n else el.innerHTML = html;\n}\n\n\nfunction $46fa7b324a069045$export$2e2bcd8739ae039(_ref) {\n let { swiper: swiper, extendParams: extendParams, on: on, emit: emit } = _ref;\n extendParams({\n virtual: {\n enabled: false,\n slides: [],\n cache: true,\n renderSlide: null,\n renderExternal: null,\n renderExternalUpdate: true,\n addSlidesBefore: 0,\n addSlidesAfter: 0\n }\n });\n let cssModeTimeout;\n const document = (0, $768c2f4c151a0363$export$39b482c5e57630a8)();\n swiper.virtual = {\n cache: {},\n from: undefined,\n to: undefined,\n slides: [],\n offset: 0,\n slidesGrid: []\n };\n const tempDOM = document.createElement('div');\n function renderSlide(slide, index) {\n const params = swiper.params.virtual;\n if (params.cache && swiper.virtual.cache[index]) return swiper.virtual.cache[index];\n // eslint-disable-next-line\n let slideEl;\n if (params.renderSlide) {\n slideEl = params.renderSlide.call(swiper, slide, index);\n if (typeof slideEl === 'string') {\n setInnerHTML(tempDOM, slideEl);\n slideEl = tempDOM.children[0];\n }\n } else if (swiper.isElement) slideEl = (0, $3e0e2b092da8f124$export$db3b6bfb95261072)('swiper-slide');\n else slideEl = (0, $3e0e2b092da8f124$export$db3b6bfb95261072)('div', swiper.params.slideClass);\n slideEl.setAttribute('data-swiper-slide-index', index);\n if (!params.renderSlide) setInnerHTML(slideEl, slide);\n if (params.cache) swiper.virtual.cache[index] = slideEl;\n return slideEl;\n }\n function update(force, beforeInit, forceActiveIndex) {\n const { slidesPerView: slidesPerView, slidesPerGroup: slidesPerGroup, centeredSlides: centeredSlides, loop: isLoop, initialSlide: initialSlide } = swiper.params;\n if (beforeInit && !isLoop && initialSlide > 0) return;\n const { addSlidesBefore: addSlidesBefore, addSlidesAfter: addSlidesAfter } = swiper.params.virtual;\n const { from: previousFrom, to: previousTo, slides: slides, slidesGrid: previousSlidesGrid, offset: previousOffset } = swiper.virtual;\n if (!swiper.params.cssMode) swiper.updateActiveIndex();\n const activeIndex = typeof forceActiveIndex === 'undefined' ? swiper.activeIndex || 0 : forceActiveIndex;\n let offsetProp;\n if (swiper.rtlTranslate) offsetProp = 'right';\n else offsetProp = swiper.isHorizontal() ? 'left' : 'top';\n let slidesAfter;\n let slidesBefore;\n if (centeredSlides) {\n slidesAfter = Math.floor(slidesPerView / 2) + slidesPerGroup + addSlidesAfter;\n slidesBefore = Math.floor(slidesPerView / 2) + slidesPerGroup + addSlidesBefore;\n } else {\n slidesAfter = slidesPerView + (slidesPerGroup - 1) + addSlidesAfter;\n slidesBefore = (isLoop ? slidesPerView : slidesPerGroup) + addSlidesBefore;\n }\n let from = activeIndex - slidesBefore;\n let to = activeIndex + slidesAfter;\n if (!isLoop) {\n from = Math.max(from, 0);\n to = Math.min(to, slides.length - 1);\n }\n let offset = (swiper.slidesGrid[from] || 0) - (swiper.slidesGrid[0] || 0);\n if (isLoop && activeIndex >= slidesBefore) {\n from -= slidesBefore;\n if (!centeredSlides) offset += swiper.slidesGrid[0];\n } else if (isLoop && activeIndex < slidesBefore) {\n from = -slidesBefore;\n if (centeredSlides) offset += swiper.slidesGrid[0];\n }\n Object.assign(swiper.virtual, {\n from: from,\n to: to,\n offset: offset,\n slidesGrid: swiper.slidesGrid,\n slidesBefore: slidesBefore,\n slidesAfter: slidesAfter\n });\n function onRendered() {\n swiper.updateSlides();\n swiper.updateProgress();\n swiper.updateSlidesClasses();\n emit('virtualUpdate');\n }\n if (previousFrom === from && previousTo === to && !force) {\n if (swiper.slidesGrid !== previousSlidesGrid && offset !== previousOffset) swiper.slides.forEach((slideEl)=>{\n slideEl.style[offsetProp] = `${offset - Math.abs(swiper.cssOverflowAdjustment())}px`;\n });\n swiper.updateProgress();\n emit('virtualUpdate');\n return;\n }\n if (swiper.params.virtual.renderExternal) {\n swiper.params.virtual.renderExternal.call(swiper, {\n offset: offset,\n from: from,\n to: to,\n slides: function getSlides() {\n const slidesToRender = [];\n for(let i = from; i <= to; i += 1)slidesToRender.push(slides[i]);\n return slidesToRender;\n }()\n });\n if (swiper.params.virtual.renderExternalUpdate) onRendered();\n else emit('virtualUpdate');\n return;\n }\n const prependIndexes = [];\n const appendIndexes = [];\n const getSlideIndex = (index)=>{\n let slideIndex = index;\n if (index < 0) slideIndex = slides.length + index;\n else if (slideIndex >= slides.length) // eslint-disable-next-line\n slideIndex = slideIndex - slides.length;\n return slideIndex;\n };\n if (force) swiper.slides.filter((el)=>el.matches(`.${swiper.params.slideClass}, swiper-slide`)).forEach((slideEl)=>{\n slideEl.remove();\n });\n else {\n for(let i = previousFrom; i <= previousTo; i += 1)if (i < from || i > to) {\n const slideIndex = getSlideIndex(i);\n swiper.slides.filter((el)=>el.matches(`.${swiper.params.slideClass}[data-swiper-slide-index=\"${slideIndex}\"], swiper-slide[data-swiper-slide-index=\"${slideIndex}\"]`)).forEach((slideEl)=>{\n slideEl.remove();\n });\n }\n }\n const loopFrom = isLoop ? -slides.length : 0;\n const loopTo = isLoop ? slides.length * 2 : slides.length;\n for(let i = loopFrom; i < loopTo; i += 1)if (i >= from && i <= to) {\n const slideIndex = getSlideIndex(i);\n if (typeof previousTo === 'undefined' || force) appendIndexes.push(slideIndex);\n else {\n if (i > previousTo) appendIndexes.push(slideIndex);\n if (i < previousFrom) prependIndexes.push(slideIndex);\n }\n }\n appendIndexes.forEach((index)=>{\n swiper.slidesEl.append(renderSlide(slides[index], index));\n });\n if (isLoop) for(let i = prependIndexes.length - 1; i >= 0; i -= 1){\n const index = prependIndexes[i];\n swiper.slidesEl.prepend(renderSlide(slides[index], index));\n }\n else {\n prependIndexes.sort((a, b)=>b - a);\n prependIndexes.forEach((index)=>{\n swiper.slidesEl.prepend(renderSlide(slides[index], index));\n });\n }\n (0, $3e0e2b092da8f124$export$f1e1789686576879)(swiper.slidesEl, '.swiper-slide, swiper-slide').forEach((slideEl)=>{\n slideEl.style[offsetProp] = `${offset - Math.abs(swiper.cssOverflowAdjustment())}px`;\n });\n onRendered();\n }\n function appendSlide(slides) {\n if (typeof slides === 'object' && 'length' in slides) {\n for(let i = 0; i < slides.length; i += 1)if (slides[i]) swiper.virtual.slides.push(slides[i]);\n } else swiper.virtual.slides.push(slides);\n update(true);\n }\n function prependSlide(slides) {\n const activeIndex = swiper.activeIndex;\n let newActiveIndex = activeIndex + 1;\n let numberOfNewSlides = 1;\n if (Array.isArray(slides)) {\n for(let i = 0; i < slides.length; i += 1)if (slides[i]) swiper.virtual.slides.unshift(slides[i]);\n newActiveIndex = activeIndex + slides.length;\n numberOfNewSlides = slides.length;\n } else swiper.virtual.slides.unshift(slides);\n if (swiper.params.virtual.cache) {\n const cache = swiper.virtual.cache;\n const newCache = {};\n Object.keys(cache).forEach((cachedIndex)=>{\n const cachedEl = cache[cachedIndex];\n const cachedElIndex = cachedEl.getAttribute('data-swiper-slide-index');\n if (cachedElIndex) cachedEl.setAttribute('data-swiper-slide-index', parseInt(cachedElIndex, 10) + numberOfNewSlides);\n newCache[parseInt(cachedIndex, 10) + numberOfNewSlides] = cachedEl;\n });\n swiper.virtual.cache = newCache;\n }\n update(true);\n swiper.slideTo(newActiveIndex, 0);\n }\n function removeSlide(slidesIndexes) {\n if (typeof slidesIndexes === 'undefined' || slidesIndexes === null) return;\n let activeIndex = swiper.activeIndex;\n if (Array.isArray(slidesIndexes)) for(let i = slidesIndexes.length - 1; i >= 0; i -= 1){\n if (swiper.params.virtual.cache) {\n delete swiper.virtual.cache[slidesIndexes[i]];\n // shift cache indexes\n Object.keys(swiper.virtual.cache).forEach((key)=>{\n if (key > slidesIndexes) {\n swiper.virtual.cache[key - 1] = swiper.virtual.cache[key];\n swiper.virtual.cache[key - 1].setAttribute('data-swiper-slide-index', key - 1);\n delete swiper.virtual.cache[key];\n }\n });\n }\n swiper.virtual.slides.splice(slidesIndexes[i], 1);\n if (slidesIndexes[i] < activeIndex) activeIndex -= 1;\n activeIndex = Math.max(activeIndex, 0);\n }\n else {\n if (swiper.params.virtual.cache) {\n delete swiper.virtual.cache[slidesIndexes];\n // shift cache indexes\n Object.keys(swiper.virtual.cache).forEach((key)=>{\n if (key > slidesIndexes) {\n swiper.virtual.cache[key - 1] = swiper.virtual.cache[key];\n swiper.virtual.cache[key - 1].setAttribute('data-swiper-slide-index', key - 1);\n delete swiper.virtual.cache[key];\n }\n });\n }\n swiper.virtual.slides.splice(slidesIndexes, 1);\n if (slidesIndexes < activeIndex) activeIndex -= 1;\n activeIndex = Math.max(activeIndex, 0);\n }\n update(true);\n swiper.slideTo(activeIndex, 0);\n }\n function removeAllSlides() {\n swiper.virtual.slides = [];\n if (swiper.params.virtual.cache) swiper.virtual.cache = {};\n update(true);\n swiper.slideTo(0, 0);\n }\n on('beforeInit', ()=>{\n if (!swiper.params.virtual.enabled) return;\n let domSlidesAssigned;\n if (typeof swiper.passedParams.virtual.slides === 'undefined') {\n const slides = [\n ...swiper.slidesEl.children\n ].filter((el)=>el.matches(`.${swiper.params.slideClass}, swiper-slide`));\n if (slides && slides.length) {\n swiper.virtual.slides = [\n ...slides\n ];\n domSlidesAssigned = true;\n slides.forEach((slideEl, slideIndex)=>{\n slideEl.setAttribute('data-swiper-slide-index', slideIndex);\n swiper.virtual.cache[slideIndex] = slideEl;\n slideEl.remove();\n });\n }\n }\n if (!domSlidesAssigned) swiper.virtual.slides = swiper.params.virtual.slides;\n swiper.classNames.push(`${swiper.params.containerModifierClass}virtual`);\n swiper.params.watchSlidesProgress = true;\n swiper.originalParams.watchSlidesProgress = true;\n update(false, true);\n });\n on('setTranslate', ()=>{\n if (!swiper.params.virtual.enabled) return;\n if (swiper.params.cssMode && !swiper._immediateVirtual) {\n clearTimeout(cssModeTimeout);\n cssModeTimeout = setTimeout(()=>{\n update();\n }, 100);\n } else update();\n });\n on('init update resize', ()=>{\n if (!swiper.params.virtual.enabled) return;\n if (swiper.params.cssMode) (0, $3e0e2b092da8f124$export$407448d2b89b1813)(swiper.wrapperEl, '--swiper-virtual-size', `${swiper.virtualSize}px`);\n });\n Object.assign(swiper.virtual, {\n appendSlide: appendSlide,\n prependSlide: prependSlide,\n removeSlide: removeSlide,\n removeAllSlides: removeAllSlides,\n update: update\n });\n}\n\n\n\n\n/* eslint-disable consistent-return */ function $398e6017151607ad$export$2e2bcd8739ae039(_ref) {\n let { swiper: swiper, extendParams: extendParams, on: on, emit: emit } = _ref;\n const document = (0, $768c2f4c151a0363$export$39b482c5e57630a8)();\n const window = (0, $768c2f4c151a0363$export$407448d2b89b1813)();\n swiper.keyboard = {\n enabled: false\n };\n extendParams({\n keyboard: {\n enabled: false,\n onlyInViewport: true,\n pageUpDown: true\n }\n });\n function handle(event) {\n if (!swiper.enabled) return;\n const { rtlTranslate: rtl } = swiper;\n let e = event;\n if (e.originalEvent) e = e.originalEvent; // jquery fix\n const kc = e.keyCode || e.charCode;\n const pageUpDown = swiper.params.keyboard.pageUpDown;\n const isPageUp = pageUpDown && kc === 33;\n const isPageDown = pageUpDown && kc === 34;\n const isArrowLeft = kc === 37;\n const isArrowRight = kc === 39;\n const isArrowUp = kc === 38;\n const isArrowDown = kc === 40;\n // Directions locks\n if (!swiper.allowSlideNext && (swiper.isHorizontal() && isArrowRight || swiper.isVertical() && isArrowDown || isPageDown)) return false;\n if (!swiper.allowSlidePrev && (swiper.isHorizontal() && isArrowLeft || swiper.isVertical() && isArrowUp || isPageUp)) return false;\n if (e.shiftKey || e.altKey || e.ctrlKey || e.metaKey) return undefined;\n if (document.activeElement && document.activeElement.nodeName && (document.activeElement.nodeName.toLowerCase() === 'input' || document.activeElement.nodeName.toLowerCase() === 'textarea')) return undefined;\n if (swiper.params.keyboard.onlyInViewport && (isPageUp || isPageDown || isArrowLeft || isArrowRight || isArrowUp || isArrowDown)) {\n let inView = false;\n // Check that swiper should be inside of visible area of window\n if ((0, $3e0e2b092da8f124$export$8b22cf2602fb60ce)(swiper.el, `.${swiper.params.slideClass}, swiper-slide`).length > 0 && (0, $3e0e2b092da8f124$export$8b22cf2602fb60ce)(swiper.el, `.${swiper.params.slideActiveClass}`).length === 0) return undefined;\n const el = swiper.el;\n const swiperWidth = el.clientWidth;\n const swiperHeight = el.clientHeight;\n const windowWidth = window.innerWidth;\n const windowHeight = window.innerHeight;\n const swiperOffset = (0, $3e0e2b092da8f124$export$4368d992c4eafac0)(el);\n if (rtl) swiperOffset.left -= el.scrollLeft;\n const swiperCoord = [\n [\n swiperOffset.left,\n swiperOffset.top\n ],\n [\n swiperOffset.left + swiperWidth,\n swiperOffset.top\n ],\n [\n swiperOffset.left,\n swiperOffset.top + swiperHeight\n ],\n [\n swiperOffset.left + swiperWidth,\n swiperOffset.top + swiperHeight\n ]\n ];\n for(let i = 0; i < swiperCoord.length; i += 1){\n const point = swiperCoord[i];\n if (point[0] >= 0 && point[0] <= windowWidth && point[1] >= 0 && point[1] <= windowHeight) {\n if (point[0] === 0 && point[1] === 0) continue; // eslint-disable-line\n inView = true;\n }\n }\n if (!inView) return undefined;\n }\n if (swiper.isHorizontal()) {\n if (isPageUp || isPageDown || isArrowLeft || isArrowRight) {\n if (e.preventDefault) e.preventDefault();\n else e.returnValue = false;\n }\n if ((isPageDown || isArrowRight) && !rtl || (isPageUp || isArrowLeft) && rtl) swiper.slideNext();\n if ((isPageUp || isArrowLeft) && !rtl || (isPageDown || isArrowRight) && rtl) swiper.slidePrev();\n } else {\n if (isPageUp || isPageDown || isArrowUp || isArrowDown) {\n if (e.preventDefault) e.preventDefault();\n else e.returnValue = false;\n }\n if (isPageDown || isArrowDown) swiper.slideNext();\n if (isPageUp || isArrowUp) swiper.slidePrev();\n }\n emit('keyPress', kc);\n return undefined;\n }\n function enable() {\n if (swiper.keyboard.enabled) return;\n document.addEventListener('keydown', handle);\n swiper.keyboard.enabled = true;\n }\n function disable() {\n if (!swiper.keyboard.enabled) return;\n document.removeEventListener('keydown', handle);\n swiper.keyboard.enabled = false;\n }\n on('init', ()=>{\n if (swiper.params.keyboard.enabled) enable();\n });\n on('destroy', ()=>{\n if (swiper.keyboard.enabled) disable();\n });\n Object.assign(swiper.keyboard, {\n enable: enable,\n disable: disable\n });\n}\n\n\n\n\n/* eslint-disable consistent-return */ function $343d866400a2e3c2$export$2e2bcd8739ae039(_ref) {\n let { swiper: swiper, extendParams: extendParams, on: on, emit: emit } = _ref;\n const window = (0, $768c2f4c151a0363$export$407448d2b89b1813)();\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 = (0, $3e0e2b092da8f124$export$2d1720544b23b823)();\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 // Legacy\n if ('detail' in e) sY = e.detail;\n if ('wheelDelta' in e) sY = -e.wheelDelta / 120;\n if ('wheelDeltaY' in e) sY = -e.wheelDeltaY / 120;\n if ('wheelDeltaX' in e) sX = -e.wheelDeltaX / 120;\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) pY = e.deltaY;\n if ('deltaX' in e) pX = e.deltaX;\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 // Fall-back if spin cannot be determined\n if (pX && !sX) sX = pX < 1 ? -1 : 1;\n if (pY && !sY) sY = pY < 1 ? -1 : 1;\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) // Prevent if delta of wheel scroll delta is below configured threshold\n return false;\n if (swiper.params.mousewheel.thresholdTime && (0, $3e0e2b092da8f124$export$2d1720544b23b823)() - lastScrollTime < swiper.params.mousewheel.thresholdTime) // Prevent if time between scrolls is below configured threshold\n return false;\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 && (0, $3e0e2b092da8f124$export$2d1720544b23b823)() - lastScrollTime < 60) // Return false as a default\n return true;\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) // Return true to animate scroll on edges\n return true;\n } else if (swiper.isBeginning && !swiper.params.loop && params.releaseOnEdges) // Return true to animate scroll on edges\n return true;\n return false;\n }\n function handle(event1) {\n let e = event1;\n let disableParentSwiper = true;\n if (!swiper.enabled) return;\n // Ignore event if the target or its parents have the swiper-no-mousewheel class\n if (event1.target.closest(`.${swiper.params.mousewheel.noMousewheelClass}`)) return;\n const params = swiper.params.mousewheel;\n if (swiper.params.cssMode) e.preventDefault();\n let targetEl = swiper.el;\n if (swiper.params.mousewheel.eventsTarget !== 'container') targetEl = document.querySelector(swiper.params.mousewheel.eventsTarget);\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;\n else return true;\n } else if (Math.abs(data.pixelY) > Math.abs(data.pixelX)) delta = -data.pixelY;\n else return true;\n } else delta = Math.abs(data.pixelX) > Math.abs(data.pixelY) ? -data.pixelX * rtlFactor : -data.pixelY;\n if (delta === 0) return true;\n if (params.invert) delta = -delta;\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 // 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: (0, $3e0e2b092da8f124$export$2d1720544b23b823)(),\n delta: Math.abs(delta),\n direction: Math.sign(delta),\n raw: event1\n };\n // Keep the most recent events\n if (recentWheelEvents.length >= 2) recentWheelEvents.shift(); // only store the last N events\n const prevEvent = recentWheelEvents.length ? recentWheelEvents[recentWheelEvents.length - 1] : undefined;\n recentWheelEvents.push(newEvent);\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) animateSlider(newEvent);\n } else animateSlider(newEvent);\n // If it's time to release the scroll:\n // Return now so you don't hit the preventDefault.\n if (releaseScroll(newEvent)) return true;\n } else {\n // Freemode or scrollContainer:\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: (0, $3e0e2b092da8f124$export$2d1720544b23b823)(),\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) swiper.updateSlidesClasses();\n if (swiper.params.loop) swiper.loopFix({\n direction: newEvent.direction < 0 ? 'next' : 'prev',\n byMousewheel: true\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) recentWheelEvents.shift(); // only store the last N events\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)) // 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 = (0, $3e0e2b092da8f124$export$7ccc53e8f1e7dfc5)(()=>{\n if (swiper.destroyed || !swiper.params) return;\n swiper.slideToClosest(swiper.params.speed, true, undefined, snapToThreshold);\n }, 0); // no delay; move on next tick\n }\n if (!timeout) // 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 = (0, $3e0e2b092da8f124$export$7ccc53e8f1e7dfc5)(()=>{\n if (swiper.destroyed || !swiper.params) return;\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 // Emit event\n if (!ignoreWheelEvents) emit('scroll', e);\n // Stop autoplay\n if (swiper.params.autoplay && swiper.params.autoplay.disableOnInteraction) swiper.autoplay.stop();\n // Return page scroll on edge positions\n if (params.releaseOnEdges && (position === swiper.minTranslate() || position === swiper.maxTranslate())) return true;\n }\n }\n if (e.preventDefault) e.preventDefault();\n else e.returnValue = false;\n return false;\n }\n function events(method) {\n let targetEl = swiper.el;\n if (swiper.params.mousewheel.eventsTarget !== 'container') targetEl = document.querySelector(swiper.params.mousewheel.eventsTarget);\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) disable();\n if (swiper.params.mousewheel.enabled) enable();\n });\n on('destroy', ()=>{\n if (swiper.params.cssMode) enable();\n if (swiper.mousewheel.enabled) disable();\n });\n Object.assign(swiper.mousewheel, {\n enable: enable,\n disable: disable\n });\n}\n\n\n\nfunction $d6f86baea06bd282$export$db3b6bfb95261072(swiper, originalParams, params, checkProps) {\n if (swiper.params.createElements) Object.keys(checkProps).forEach((key)=>{\n if (!params[key] && params.auto === true) {\n let element = (0, $3e0e2b092da8f124$export$f1e1789686576879)(swiper.el, `.${checkProps[key]}`)[0];\n if (!element) {\n element = (0, $3e0e2b092da8f124$export$db3b6bfb95261072)('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 return params;\n}\n\n\n\nfunction $ad56a2ca63fb5863$export$2e2bcd8739ae039(_ref) {\n let { swiper: swiper, extendParams: extendParams, on: on, emit: emit } = _ref;\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 function getEl(el) {\n let res;\n if (el && typeof el === 'string' && swiper.isElement) {\n res = swiper.el.querySelector(el) || swiper.hostEl.querySelector(el);\n if (res) return res;\n }\n if (el) {\n if (typeof el === 'string') res = [\n ...document.querySelectorAll(el)\n ];\n if (swiper.params.uniqueNavElements && typeof el === 'string' && res && res.length > 1 && swiper.el.querySelectorAll(el).length === 1) res = swiper.el.querySelector(el);\n else if (res && res.length === 1) res = res[0];\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 = (0, $3e0e2b092da8f124$export$953cecd6e717a553)(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) subEl.classList[swiper.isLocked ? 'add' : 'remove'](params.lockClass);\n }\n });\n }\n function update() {\n // Update Navigation Buttons\n const { nextEl: nextEl, prevEl: prevEl } = 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 = (0, $d6f86baea06bd282$export$db3b6bfb95261072)(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: nextEl,\n prevEl: prevEl\n });\n nextEl = (0, $3e0e2b092da8f124$export$953cecd6e717a553)(nextEl);\n prevEl = (0, $3e0e2b092da8f124$export$953cecd6e717a553)(prevEl);\n const initButton = (el, dir)=>{\n if (el) el.addEventListener('click', dir === 'next' ? onNextClick : onPrevClick);\n if (!swiper.enabled && el) el.classList.add(...params.lockClass.split(' '));\n };\n nextEl.forEach((el)=>initButton(el, 'next'));\n prevEl.forEach((el)=>initButton(el, 'prev'));\n }\n function destroy() {\n let { nextEl: nextEl, prevEl: prevEl } = swiper.navigation;\n nextEl = (0, $3e0e2b092da8f124$export$953cecd6e717a553)(nextEl);\n prevEl = (0, $3e0e2b092da8f124$export$953cecd6e717a553)(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) // 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 { nextEl: nextEl, prevEl: prevEl } = swiper.navigation;\n nextEl = (0, $3e0e2b092da8f124$export$953cecd6e717a553)(nextEl);\n prevEl = (0, $3e0e2b092da8f124$export$953cecd6e717a553)(prevEl);\n if (swiper.enabled) {\n update();\n return;\n }\n [\n ...nextEl,\n ...prevEl\n ].filter((el)=>!!el).forEach((el)=>el.classList.add(swiper.params.navigation.lockClass));\n });\n on('click', (_s, e)=>{\n let { nextEl: nextEl, prevEl: prevEl } = swiper.navigation;\n nextEl = (0, $3e0e2b092da8f124$export$953cecd6e717a553)(nextEl);\n prevEl = (0, $3e0e2b092da8f124$export$953cecd6e717a553)(prevEl);\n const targetEl = e.target;\n let targetIsButton = prevEl.includes(targetEl) || nextEl.includes(targetEl);\n if (swiper.isElement && !targetIsButton) {\n const path = e.path || e.composedPath && e.composedPath();\n if (path) targetIsButton = path.find((pathEl)=>nextEl.includes(pathEl) || prevEl.includes(pathEl));\n }\n if (swiper.params.navigation.hideOnClick && !targetIsButton) {\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) isHidden = nextEl[0].classList.contains(swiper.params.navigation.hiddenClass);\n else if (prevEl.length) isHidden = prevEl[0].classList.contains(swiper.params.navigation.hiddenClass);\n if (isHidden === true) emit('navigationShow');\n else emit('navigationHide');\n [\n ...nextEl,\n ...prevEl\n ].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: enable,\n disable: disable,\n update: update,\n init: init,\n destroy: destroy\n });\n}\n\n\nfunction $452edee79264d178$export$db3b6bfb95261072(classes) {\n if (classes === void 0) classes = '';\n return `.${classes.trim().replace(/([\\.:!+\\/])/g, '\\\\$1') // eslint-disable-line\n .replace(/ /g, '.')}`;\n}\n\n\n\n\nfunction $4b9f6507912f3e92$export$2e2bcd8739ae039(_ref) {\n let { swiper: swiper, extendParams: extendParams, on: on, emit: emit } = _ref;\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 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 { bulletActiveClass: bulletActiveClass } = 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) bulletEl.classList.add(`${bulletActiveClass}-${position}-${position}`);\n }\n }\n function getMoveDirection(prevIndex, nextIndex, length) {\n prevIndex = prevIndex % length;\n nextIndex = nextIndex % length;\n if (nextIndex === prevIndex + 1) return 'next';\n else if (nextIndex === prevIndex - 1) return 'previous';\n return;\n }\n function onBulletClick(e) {\n const bulletEl = e.target.closest((0, $452edee79264d178$export$db3b6bfb95261072)(swiper.params.pagination.bulletClass));\n if (!bulletEl) return;\n e.preventDefault();\n const index = (0, $3e0e2b092da8f124$export$23f2a1d2818174ef)(bulletEl) * swiper.params.slidesPerGroup;\n if (swiper.params.loop) {\n if (swiper.realIndex === index) return;\n const moveDirection = getMoveDirection(swiper.realIndex, index, swiper.slides.length);\n if (moveDirection === 'next') swiper.slideNext();\n else if (moveDirection === 'previous') swiper.slidePrev();\n else swiper.slideToLoop(index);\n } else swiper.slideTo(index);\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 = (0, $3e0e2b092da8f124$export$953cecd6e717a553)(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 = (0, $3e0e2b092da8f124$export$dda1d9f60106f0e9)(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) dynamicBulletIndex = params.dynamicMainBullets - 1;\n else if (dynamicBulletIndex < 0) dynamicBulletIndex = 0;\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 = [\n ...[\n '',\n '-next',\n '-next-next',\n '-prev',\n '-prev-prev',\n '-main'\n ].map((suffix)=>`${params.bulletActiveClass}${suffix}`)\n ].map((s)=>typeof s === 'string' && s.includes(' ') ? s.split(' ') : s).flat();\n bulletEl.classList.remove(...classesToRemove);\n });\n if (el.length > 1) bullets.forEach((bullet)=>{\n const bulletIndex = (0, $3e0e2b092da8f124$export$23f2a1d2818174ef)(bullet);\n if (bulletIndex === current) bullet.classList.add(...params.bulletActiveClass.split(' '));\n else if (swiper.isElement) bullet.setAttribute('part', 'bullet');\n if (params.dynamicBullets) {\n if (bulletIndex >= firstIndex && bulletIndex <= lastIndex) bullet.classList.add(...`${params.bulletActiveClass}-main`.split(' '));\n if (bulletIndex === firstIndex) setSideBullets(bullet, 'prev');\n if (bulletIndex === lastIndex) setSideBullets(bullet, 'next');\n }\n });\n else {\n const bullet = bullets[current];\n if (bullet) bullet.classList.add(...params.bulletActiveClass.split(' '));\n if (swiper.isElement) bullets.forEach((bulletEl, bulletIndex)=>{\n bulletEl.setAttribute('part', bulletIndex === current ? 'bullet-active' : 'bullet');\n });\n if (params.dynamicBullets) {\n const firstDisplayedBullet = bullets[firstIndex];\n const lastDisplayedBullet = bullets[lastIndex];\n for(let i = firstIndex; i <= lastIndex; i += 1)if (bullets[i]) bullets[i].classList.add(...`${params.bulletActiveClass}-main`.split(' '));\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((0, $452edee79264d178$export$db3b6bfb95261072)(params.currentClass)).forEach((fractionEl)=>{\n fractionEl.textContent = params.formatFractionCurrent(current + 1);\n });\n subEl.querySelectorAll((0, $452edee79264d178$export$db3b6bfb95261072)(params.totalClass)).forEach((totalEl)=>{\n totalEl.textContent = params.formatFractionTotal(total);\n });\n }\n if (params.type === 'progressbar') {\n let progressbarDirection;\n if (params.progressbarOpposite) progressbarDirection = swiper.isHorizontal() ? 'vertical' : 'horizontal';\n else progressbarDirection = swiper.isHorizontal() ? 'horizontal' : 'vertical';\n const scale = (current + 1) / total;\n let scaleX = 1;\n let scaleY = 1;\n if (progressbarDirection === 'horizontal') scaleX = scale;\n else scaleY = scale;\n subEl.querySelectorAll((0, $452edee79264d178$export$db3b6bfb95261072)(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 (0, $3e0e2b092da8f124$export$2408f22a0fab9ae5)(subEl, 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) subEl.classList[swiper.isLocked ? 'add' : 'remove'](params.lockClass);\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.grid && swiper.params.grid.rows > 1 ? swiper.slides.length / Math.ceil(swiper.params.grid.rows) : swiper.slides.length;\n let el = swiper.pagination.el;\n el = (0, $3e0e2b092da8f124$export$953cecd6e717a553)(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) numberOfBullets = slidesLength;\n for(let i = 0; i < numberOfBullets; i += 1)if (params.renderBullet) paginationHTML += params.renderBullet.call(swiper, i, params.bulletClass);\n else // prettier-ignore\n paginationHTML += `<${params.bulletElement} ${swiper.isElement ? 'part=\"bullet\"' : ''} class=\"${params.bulletClass}\">`;\n }\n if (params.type === 'fraction') {\n if (params.renderFraction) paginationHTML = params.renderFraction.call(swiper, params.currentClass, params.totalClass);\n else paginationHTML = `` + ' / ' + ``;\n }\n if (params.type === 'progressbar') {\n if (params.renderProgressbar) paginationHTML = params.renderProgressbar.call(swiper, params.progressbarFillClass);\n else paginationHTML = ``;\n }\n swiper.pagination.bullets = [];\n el.forEach((subEl)=>{\n if (params.type !== 'custom') (0, $3e0e2b092da8f124$export$2408f22a0fab9ae5)(subEl, paginationHTML || '');\n if (params.type === 'bullets') swiper.pagination.bullets.push(...subEl.querySelectorAll((0, $452edee79264d178$export$db3b6bfb95261072)(params.bulletClass)));\n });\n if (params.type !== 'custom') emit('paginationRender', el[0]);\n }\n function init() {\n swiper.params.pagination = (0, $d6f86baea06bd282$export$db3b6bfb95261072)(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) el = swiper.el.querySelector(params.el);\n if (!el && typeof params.el === 'string') el = [\n ...document.querySelectorAll(params.el)\n ];\n if (!el) el = params.el;\n if (!el || el.length === 0) return;\n if (swiper.params.uniqueNavElements && typeof params.el === 'string' && Array.isArray(el) && el.length > 1) {\n el = [\n ...swiper.el.querySelectorAll(params.el)\n ];\n // check if it belongs to another nested Swiper\n if (el.length > 1) el = el.find((subEl)=>{\n if ((0, $3e0e2b092da8f124$export$8b22cf2602fb60ce)(subEl, '.swiper')[0] !== swiper.el) return false;\n return true;\n });\n }\n if (Array.isArray(el) && el.length === 1) el = el[0];\n Object.assign(swiper.pagination, {\n el: el\n });\n el = (0, $3e0e2b092da8f124$export$953cecd6e717a553)(el);\n el.forEach((subEl)=>{\n if (params.type === 'bullets' && params.clickable) subEl.classList.add(...(params.clickableClass || '').split(' '));\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) params.dynamicMainBullets = 1;\n }\n if (params.type === 'progressbar' && params.progressbarOpposite) subEl.classList.add(params.progressbarOppositeClass);\n if (params.clickable) subEl.addEventListener('click', onBulletClick);\n if (!swiper.enabled) subEl.classList.add(params.lockClass);\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 = (0, $3e0e2b092da8f124$export$953cecd6e717a553)(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.classList.remove(...(params.clickableClass || '').split(' '));\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 { el: el } = swiper.pagination;\n el = (0, $3e0e2b092da8f124$export$953cecd6e717a553)(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) // 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') update();\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 { el: el } = swiper.pagination;\n if (el) {\n el = (0, $3e0e2b092da8f124$export$953cecd6e717a553)(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 const el = (0, $3e0e2b092da8f124$export$953cecd6e717a553)(swiper.pagination.el);\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) emit('paginationShow');\n else emit('paginationHide');\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 { el: el } = swiper.pagination;\n if (el) {\n el = (0, $3e0e2b092da8f124$export$953cecd6e717a553)(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 { el: el } = swiper.pagination;\n if (el) {\n el = (0, $3e0e2b092da8f124$export$953cecd6e717a553)(el);\n el.forEach((subEl)=>subEl.classList.add(swiper.params.pagination.paginationDisabledClass));\n }\n destroy();\n };\n Object.assign(swiper.pagination, {\n enable: enable,\n disable: disable,\n render: render,\n update: update,\n init: init,\n destroy: destroy\n });\n}\n\n\n\n\n\n\nfunction $86d9ada396b8d520$export$2e2bcd8739ae039(_ref) {\n let { swiper: swiper, extendParams: extendParams, on: on, emit: emit } = _ref;\n const document = (0, $768c2f4c151a0363$export$39b482c5e57630a8)();\n let isTouched = false;\n let timeout = null;\n let dragTimeout = null;\n let dragStartPos;\n let dragSize;\n let trackSize;\n let divider;\n extendParams({\n scrollbar: {\n el: null,\n dragSize: 'auto',\n hide: false,\n draggable: false,\n snapOnRelease: true,\n lockClass: 'swiper-scrollbar-lock',\n dragClass: 'swiper-scrollbar-drag',\n scrollbarDisabledClass: 'swiper-scrollbar-disabled',\n horizontalClass: `swiper-scrollbar-horizontal`,\n verticalClass: `swiper-scrollbar-vertical`\n }\n });\n swiper.scrollbar = {\n el: null,\n dragEl: null\n };\n function setTranslate() {\n if (!swiper.params.scrollbar.el || !swiper.scrollbar.el) return;\n const { scrollbar: scrollbar, rtlTranslate: rtl } = swiper;\n const { dragEl: dragEl, el: el } = scrollbar;\n const params = swiper.params.scrollbar;\n const progress = swiper.params.loop ? swiper.progressLoop : swiper.progress;\n let newSize = dragSize;\n let newPos = (trackSize - dragSize) * progress;\n if (rtl) {\n newPos = -newPos;\n if (newPos > 0) {\n newSize = dragSize - newPos;\n newPos = 0;\n } else if (-newPos + dragSize > trackSize) newSize = trackSize + newPos;\n } else if (newPos < 0) {\n newSize = dragSize + newPos;\n newPos = 0;\n } else if (newPos + dragSize > trackSize) newSize = trackSize - newPos;\n if (swiper.isHorizontal()) {\n dragEl.style.transform = `translate3d(${newPos}px, 0, 0)`;\n dragEl.style.width = `${newSize}px`;\n } else {\n dragEl.style.transform = `translate3d(0px, ${newPos}px, 0)`;\n dragEl.style.height = `${newSize}px`;\n }\n if (params.hide) {\n clearTimeout(timeout);\n el.style.opacity = 1;\n timeout = setTimeout(()=>{\n el.style.opacity = 0;\n el.style.transitionDuration = '400ms';\n }, 1000);\n }\n }\n function setTransition(duration) {\n if (!swiper.params.scrollbar.el || !swiper.scrollbar.el) return;\n swiper.scrollbar.dragEl.style.transitionDuration = `${duration}ms`;\n }\n function updateSize() {\n if (!swiper.params.scrollbar.el || !swiper.scrollbar.el) return;\n const { scrollbar: scrollbar } = swiper;\n const { dragEl: dragEl, el: el } = scrollbar;\n dragEl.style.width = '';\n dragEl.style.height = '';\n trackSize = swiper.isHorizontal() ? el.offsetWidth : el.offsetHeight;\n divider = swiper.size / (swiper.virtualSize + swiper.params.slidesOffsetBefore - (swiper.params.centeredSlides ? swiper.snapGrid[0] : 0));\n if (swiper.params.scrollbar.dragSize === 'auto') dragSize = trackSize * divider;\n else dragSize = parseInt(swiper.params.scrollbar.dragSize, 10);\n if (swiper.isHorizontal()) dragEl.style.width = `${dragSize}px`;\n else dragEl.style.height = `${dragSize}px`;\n if (divider >= 1) el.style.display = 'none';\n else el.style.display = '';\n if (swiper.params.scrollbar.hide) el.style.opacity = 0;\n if (swiper.params.watchOverflow && swiper.enabled) scrollbar.el.classList[swiper.isLocked ? 'add' : 'remove'](swiper.params.scrollbar.lockClass);\n }\n function getPointerPosition(e) {\n return swiper.isHorizontal() ? e.clientX : e.clientY;\n }\n function setDragPosition(e) {\n const { scrollbar: scrollbar, rtlTranslate: rtl } = swiper;\n const { el: el } = scrollbar;\n let positionRatio;\n positionRatio = (getPointerPosition(e) - (0, $3e0e2b092da8f124$export$4368d992c4eafac0)(el)[swiper.isHorizontal() ? 'left' : 'top'] - (dragStartPos !== null ? dragStartPos : dragSize / 2)) / (trackSize - dragSize);\n positionRatio = Math.max(Math.min(positionRatio, 1), 0);\n if (rtl) positionRatio = 1 - positionRatio;\n const position = swiper.minTranslate() + (swiper.maxTranslate() - swiper.minTranslate()) * positionRatio;\n swiper.updateProgress(position);\n swiper.setTranslate(position);\n swiper.updateActiveIndex();\n swiper.updateSlidesClasses();\n }\n function onDragStart(e) {\n const params = swiper.params.scrollbar;\n const { scrollbar: scrollbar, wrapperEl: wrapperEl } = swiper;\n const { el: el, dragEl: dragEl } = scrollbar;\n isTouched = true;\n dragStartPos = e.target === dragEl ? getPointerPosition(e) - e.target.getBoundingClientRect()[swiper.isHorizontal() ? 'left' : 'top'] : null;\n e.preventDefault();\n e.stopPropagation();\n wrapperEl.style.transitionDuration = '100ms';\n dragEl.style.transitionDuration = '100ms';\n setDragPosition(e);\n clearTimeout(dragTimeout);\n el.style.transitionDuration = '0ms';\n if (params.hide) el.style.opacity = 1;\n if (swiper.params.cssMode) swiper.wrapperEl.style['scroll-snap-type'] = 'none';\n emit('scrollbarDragStart', e);\n }\n function onDragMove(e) {\n const { scrollbar: scrollbar, wrapperEl: wrapperEl } = swiper;\n const { el: el, dragEl: dragEl } = scrollbar;\n if (!isTouched) return;\n if (e.preventDefault && e.cancelable) e.preventDefault();\n else e.returnValue = false;\n setDragPosition(e);\n wrapperEl.style.transitionDuration = '0ms';\n el.style.transitionDuration = '0ms';\n dragEl.style.transitionDuration = '0ms';\n emit('scrollbarDragMove', e);\n }\n function onDragEnd(e) {\n const params = swiper.params.scrollbar;\n const { scrollbar: scrollbar, wrapperEl: wrapperEl } = swiper;\n const { el: el } = scrollbar;\n if (!isTouched) return;\n isTouched = false;\n if (swiper.params.cssMode) {\n swiper.wrapperEl.style['scroll-snap-type'] = '';\n wrapperEl.style.transitionDuration = '';\n }\n if (params.hide) {\n clearTimeout(dragTimeout);\n dragTimeout = (0, $3e0e2b092da8f124$export$7ccc53e8f1e7dfc5)(()=>{\n el.style.opacity = 0;\n el.style.transitionDuration = '400ms';\n }, 1000);\n }\n emit('scrollbarDragEnd', e);\n if (params.snapOnRelease) swiper.slideToClosest();\n }\n function events(method) {\n const { scrollbar: scrollbar, params: params } = swiper;\n const el = scrollbar.el;\n if (!el) return;\n const target = el;\n const activeListener = params.passiveListeners ? {\n passive: false,\n capture: false\n } : false;\n const passiveListener = params.passiveListeners ? {\n passive: true,\n capture: false\n } : false;\n if (!target) return;\n const eventMethod = method === 'on' ? 'addEventListener' : 'removeEventListener';\n target[eventMethod]('pointerdown', onDragStart, activeListener);\n document[eventMethod]('pointermove', onDragMove, activeListener);\n document[eventMethod]('pointerup', onDragEnd, passiveListener);\n }\n function enableDraggable() {\n if (!swiper.params.scrollbar.el || !swiper.scrollbar.el) return;\n events('on');\n }\n function disableDraggable() {\n if (!swiper.params.scrollbar.el || !swiper.scrollbar.el) return;\n events('off');\n }\n function init() {\n const { scrollbar: scrollbar, el: swiperEl } = swiper;\n swiper.params.scrollbar = (0, $d6f86baea06bd282$export$db3b6bfb95261072)(swiper, swiper.originalParams.scrollbar, swiper.params.scrollbar, {\n el: 'swiper-scrollbar'\n });\n const params = swiper.params.scrollbar;\n if (!params.el) return;\n let el;\n if (typeof params.el === 'string' && swiper.isElement) el = swiper.el.querySelector(params.el);\n if (!el && typeof params.el === 'string') {\n el = document.querySelectorAll(params.el);\n if (!el.length) return;\n } else if (!el) el = params.el;\n if (swiper.params.uniqueNavElements && typeof params.el === 'string' && el.length > 1 && swiperEl.querySelectorAll(params.el).length === 1) el = swiperEl.querySelector(params.el);\n if (el.length > 0) el = el[0];\n el.classList.add(swiper.isHorizontal() ? params.horizontalClass : params.verticalClass);\n let dragEl;\n if (el) {\n dragEl = el.querySelector((0, $452edee79264d178$export$db3b6bfb95261072)(swiper.params.scrollbar.dragClass));\n if (!dragEl) {\n dragEl = (0, $3e0e2b092da8f124$export$db3b6bfb95261072)('div', swiper.params.scrollbar.dragClass);\n el.append(dragEl);\n }\n }\n Object.assign(scrollbar, {\n el: el,\n dragEl: dragEl\n });\n if (params.draggable) enableDraggable();\n if (el) el.classList[swiper.enabled ? 'remove' : 'add'](...(0, $3e0e2b092da8f124$export$35e795649ee09318)(swiper.params.scrollbar.lockClass));\n }\n function destroy() {\n const params = swiper.params.scrollbar;\n const el = swiper.scrollbar.el;\n if (el) el.classList.remove(...(0, $3e0e2b092da8f124$export$35e795649ee09318)(swiper.isHorizontal() ? params.horizontalClass : params.verticalClass));\n disableDraggable();\n }\n on('changeDirection', ()=>{\n if (!swiper.scrollbar || !swiper.scrollbar.el) return;\n const params = swiper.params.scrollbar;\n let { el: el } = swiper.scrollbar;\n el = (0, $3e0e2b092da8f124$export$953cecd6e717a553)(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.scrollbar.enabled === false) // eslint-disable-next-line\n disable();\n else {\n init();\n updateSize();\n setTranslate();\n }\n });\n on('update resize observerUpdate lock unlock changeDirection', ()=>{\n updateSize();\n });\n on('setTranslate', ()=>{\n setTranslate();\n });\n on('setTransition', (_s, duration)=>{\n setTransition(duration);\n });\n on('enable disable', ()=>{\n const { el: el } = swiper.scrollbar;\n if (el) el.classList[swiper.enabled ? 'remove' : 'add'](...(0, $3e0e2b092da8f124$export$35e795649ee09318)(swiper.params.scrollbar.lockClass));\n });\n on('destroy', ()=>{\n destroy();\n });\n const enable = ()=>{\n swiper.el.classList.remove(...(0, $3e0e2b092da8f124$export$35e795649ee09318)(swiper.params.scrollbar.scrollbarDisabledClass));\n if (swiper.scrollbar.el) swiper.scrollbar.el.classList.remove(...(0, $3e0e2b092da8f124$export$35e795649ee09318)(swiper.params.scrollbar.scrollbarDisabledClass));\n init();\n updateSize();\n setTranslate();\n };\n const disable = ()=>{\n swiper.el.classList.add(...(0, $3e0e2b092da8f124$export$35e795649ee09318)(swiper.params.scrollbar.scrollbarDisabledClass));\n if (swiper.scrollbar.el) swiper.scrollbar.el.classList.add(...(0, $3e0e2b092da8f124$export$35e795649ee09318)(swiper.params.scrollbar.scrollbarDisabledClass));\n destroy();\n };\n Object.assign(swiper.scrollbar, {\n enable: enable,\n disable: disable,\n updateSize: updateSize,\n setTranslate: setTranslate,\n init: init,\n destroy: destroy\n });\n}\n\n\n\nfunction $9a5a5dc98a39a784$export$2e2bcd8739ae039(_ref) {\n let { swiper: swiper, extendParams: extendParams, on: on } = _ref;\n extendParams({\n parallax: {\n enabled: false\n }\n });\n const elementsSelector = '[data-swiper-parallax], [data-swiper-parallax-x], [data-swiper-parallax-y], [data-swiper-parallax-opacity], [data-swiper-parallax-scale]';\n const setTransform = (el, progress)=>{\n const { rtl: rtl } = swiper;\n const rtlFactor = rtl ? -1 : 1;\n const p = el.getAttribute('data-swiper-parallax') || '0';\n let x = el.getAttribute('data-swiper-parallax-x');\n let y = el.getAttribute('data-swiper-parallax-y');\n const scale = el.getAttribute('data-swiper-parallax-scale');\n const opacity = el.getAttribute('data-swiper-parallax-opacity');\n const rotate = el.getAttribute('data-swiper-parallax-rotate');\n if (x || y) {\n x = x || '0';\n y = y || '0';\n } else if (swiper.isHorizontal()) {\n x = p;\n y = '0';\n } else {\n y = p;\n x = '0';\n }\n if (x.indexOf('%') >= 0) x = `${parseInt(x, 10) * progress * rtlFactor}%`;\n else x = `${x * progress * rtlFactor}px`;\n if (y.indexOf('%') >= 0) y = `${parseInt(y, 10) * progress}%`;\n else y = `${y * progress}px`;\n if (typeof opacity !== 'undefined' && opacity !== null) {\n const currentOpacity = opacity - (opacity - 1) * (1 - Math.abs(progress));\n el.style.opacity = currentOpacity;\n }\n let transform = `translate3d(${x}, ${y}, 0px)`;\n if (typeof scale !== 'undefined' && scale !== null) {\n const currentScale = scale - (scale - 1) * (1 - Math.abs(progress));\n transform += ` scale(${currentScale})`;\n }\n if (rotate && typeof rotate !== 'undefined' && rotate !== null) {\n const currentRotate = rotate * progress * -1;\n transform += ` rotate(${currentRotate}deg)`;\n }\n el.style.transform = transform;\n };\n const setTranslate = ()=>{\n const { el: el, slides: slides, progress: progress, snapGrid: snapGrid, isElement: isElement } = swiper;\n const elements = (0, $3e0e2b092da8f124$export$f1e1789686576879)(el, elementsSelector);\n if (swiper.isElement) elements.push(...(0, $3e0e2b092da8f124$export$f1e1789686576879)(swiper.hostEl, elementsSelector));\n elements.forEach((subEl)=>{\n setTransform(subEl, progress);\n });\n slides.forEach((slideEl, slideIndex)=>{\n let slideProgress = slideEl.progress;\n if (swiper.params.slidesPerGroup > 1 && swiper.params.slidesPerView !== 'auto') slideProgress += Math.ceil(slideIndex / 2) - progress * (snapGrid.length - 1);\n slideProgress = Math.min(Math.max(slideProgress, -1), 1);\n slideEl.querySelectorAll(`${elementsSelector}, [data-swiper-parallax-rotate]`).forEach((subEl)=>{\n setTransform(subEl, slideProgress);\n });\n });\n };\n const setTransition = function(duration) {\n if (duration === void 0) duration = swiper.params.speed;\n const { el: el, hostEl: hostEl } = swiper;\n const elements = [\n ...el.querySelectorAll(elementsSelector)\n ];\n if (swiper.isElement) elements.push(...hostEl.querySelectorAll(elementsSelector));\n elements.forEach((parallaxEl)=>{\n let parallaxDuration = parseInt(parallaxEl.getAttribute('data-swiper-parallax-duration'), 10) || duration;\n if (duration === 0) parallaxDuration = 0;\n parallaxEl.style.transitionDuration = `${parallaxDuration}ms`;\n });\n };\n on('beforeInit', ()=>{\n if (!swiper.params.parallax.enabled) return;\n swiper.params.watchSlidesProgress = true;\n swiper.originalParams.watchSlidesProgress = true;\n });\n on('init', ()=>{\n if (!swiper.params.parallax.enabled) return;\n setTranslate();\n });\n on('setTranslate', ()=>{\n if (!swiper.params.parallax.enabled) return;\n setTranslate();\n });\n on('setTransition', (_swiper, duration)=>{\n if (!swiper.params.parallax.enabled) return;\n setTransition(duration);\n });\n}\n\n\n\n\nfunction $902ac29743f68e69$export$2e2bcd8739ae039(_ref) {\n let { swiper: swiper, extendParams: extendParams, on: on, emit: emit } = _ref;\n const window = (0, $768c2f4c151a0363$export$407448d2b89b1813)();\n extendParams({\n zoom: {\n enabled: false,\n limitToOriginalSize: false,\n maxRatio: 3,\n minRatio: 1,\n panOnMouseMove: false,\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 isPanningWithMouse = false;\n let mousePanStart = {\n x: 0,\n y: 0\n };\n const mousePanSensitivity = -3; // Negative to invert pan direction\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 getMaxRatio() {\n const params = swiper.params.zoom;\n const maxRatio = gesture.imageWrapEl.getAttribute('data-swiper-zoom') || params.maxRatio;\n if (params.limitToOriginalSize && gesture.imageEl && gesture.imageEl.naturalWidth) {\n const imageMaxRatio = gesture.imageEl.naturalWidth / gesture.imageEl.offsetWidth;\n return Math.min(imageMaxRatio, maxRatio);\n }\n return maxRatio;\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 [\n (evCache[0].pageX + (evCache[1].pageX - evCache[0].pageX) / 2 - box.x - window.scrollX) / currentScale,\n (evCache[0].pageY + (evCache[1].pageY - evCache[0].pageY) / 2 - box.y - window.scrollY) / currentScale\n ];\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 ([\n ...swiper.hostEl.querySelectorAll(selector)\n ].filter((containerEl)=>containerEl.contains(e.target)).length > 0) return true;\n return false;\n }\n // Events\n function onGestureStart(e) {\n if (e.pointerType === 'mouse') evCache.splice(0, evCache.length);\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) return;\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) imageEl = imageEl.querySelectorAll('picture, img, svg, canvas, .swiper-zoom-target')[0];\n gesture.imageEl = imageEl;\n if (imageEl) gesture.imageWrapEl = (0, $3e0e2b092da8f124$export$8b22cf2602fb60ce)(gesture.imageEl, `.${params.containerClass}`)[0];\n else gesture.imageWrapEl = undefined;\n if (!gesture.imageWrapEl) {\n gesture.imageEl = undefined;\n return;\n }\n gesture.maxRatio = getMaxRatio();\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) return;\n fakeGestureMoved = true;\n gesture.scaleMove = getDistanceBetweenTouches();\n if (!gesture.imageEl) return;\n zoom.scale = gesture.scaleMove / gesture.scaleStart * currentScale;\n if (zoom.scale > gesture.maxRatio) zoom.scale = gesture.maxRatio - 1 + (zoom.scale - gesture.maxRatio + 1) ** 0.5;\n if (zoom.scale < params.minRatio) zoom.scale = params.minRatio + 1 - (params.minRatio - zoom.scale + 1) ** 0.5;\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) return;\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) gesture.slideEl.classList.add(`${params.zoomedSlideClass}`);\n else if (zoom.scale <= 1 && gesture.slideEl) gesture.slideEl.classList.remove(`${params.zoomedSlideClass}`);\n if (zoom.scale === 1) {\n gesture.originX = 0;\n gesture.originY = 0;\n gesture.slideEl = undefined;\n }\n }\n let allowTouchMoveTimeout;\n function allowTouchMove() {\n swiper.touchEventsData.preventTouchMoveFromPointerMove = false;\n }\n function preventTouchMove() {\n clearTimeout(allowTouchMoveTimeout);\n swiper.touchEventsData.preventTouchMoveFromPointerMove = true;\n allowTouchMoveTimeout = setTimeout(()=>{\n if (swiper.destroyed) return;\n allowTouchMove();\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 const isMouseEvent = e.pointerType === 'mouse';\n const isMousePan = isMouseEvent && swiper.params.zoom.panOnMouseMove;\n if (!eventWithinSlide(e) || !eventWithinZoomContainer(e)) return;\n const zoom = swiper.zoom;\n if (!gesture.imageEl) return;\n if (!image.isTouched || !gesture.slideEl) {\n if (isMousePan) onMouseMove(e);\n return;\n }\n if (isMousePan) {\n onMouseMove(e);\n return;\n }\n if (!image.isMoved) {\n image.width = gesture.imageEl.offsetWidth || gesture.imageEl.clientWidth;\n image.height = gesture.imageEl.offsetHeight || gesture.imageEl.clientHeight;\n image.startX = (0, $3e0e2b092da8f124$export$342063e11d6c3cad)(gesture.imageWrapEl, 'x') || 0;\n image.startY = (0, $3e0e2b092da8f124$export$342063e11d6c3cad)(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 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) swiper.allowClick = false;\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 allowTouchMove();\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 allowTouchMove();\n return;\n }\n }\n if (e.cancelable) e.preventDefault();\n e.stopPropagation();\n preventTouchMove();\n image.isMoved = true;\n const scaleRatio = (zoom.scale - currentScale) / (gesture.maxRatio - swiper.params.zoom.minRatio);\n const { originX: originX, originY: originY } = 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) image.currentX = image.minX + 1 - (image.minX - image.currentX + 1) ** 0.8;\n if (image.currentX > image.maxX) image.currentX = image.maxX - 1 + (image.currentX - image.maxX + 1) ** 0.8;\n if (image.currentY < image.minY) image.currentY = image.minY + 1 - (image.minY - image.currentY + 1) ** 0.8;\n if (image.currentY > image.maxY) image.currentY = image.maxY - 1 + (image.currentY - image.maxY + 1) ** 0.8;\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 evCache.length = 0;\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 // 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) gesture.imageEl.style.transform = 'translate3d(0,0,0) scale(1)';\n if (gesture.imageWrapEl) gesture.imageWrapEl.style.transform = 'translate3d(0,0,0)';\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 onMouseMove(e) {\n // Only pan if zoomed in and mouse panning is enabled\n if (currentScale <= 1 || !gesture.imageWrapEl) return;\n if (!eventWithinSlide(e) || !eventWithinZoomContainer(e)) return;\n const currentTransform = window.getComputedStyle(gesture.imageWrapEl).transform;\n const matrix = new window.DOMMatrix(currentTransform);\n if (!isPanningWithMouse) {\n isPanningWithMouse = true;\n mousePanStart.x = e.clientX;\n mousePanStart.y = e.clientY;\n image.startX = matrix.e;\n image.startY = matrix.f;\n image.width = gesture.imageEl.offsetWidth || gesture.imageEl.clientWidth;\n image.height = gesture.imageEl.offsetHeight || gesture.imageEl.clientHeight;\n gesture.slideWidth = gesture.slideEl.offsetWidth;\n gesture.slideHeight = gesture.slideEl.offsetHeight;\n return;\n }\n const deltaX = (e.clientX - mousePanStart.x) * mousePanSensitivity;\n const deltaY = (e.clientY - mousePanStart.y) * mousePanSensitivity;\n const scaledWidth = image.width * currentScale;\n const scaledHeight = image.height * currentScale;\n const slideWidth = gesture.slideWidth;\n const slideHeight = gesture.slideHeight;\n const minX = Math.min(slideWidth / 2 - scaledWidth / 2, 0);\n const maxX = -minX;\n const minY = Math.min(slideHeight / 2 - scaledHeight / 2, 0);\n const maxY = -minY;\n const newX = Math.max(Math.min(image.startX + deltaX, maxX), minX);\n const newY = Math.max(Math.min(image.startY + deltaY, maxY), minY);\n gesture.imageWrapEl.style.transitionDuration = '0ms';\n gesture.imageWrapEl.style.transform = `translate3d(${newX}px, ${newY}px, 0)`;\n mousePanStart.x = e.clientX;\n mousePanStart.y = e.clientY;\n image.startX = newX;\n image.startY = newY;\n image.currentX = newX;\n image.currentY = newY;\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) gesture.slideEl = e.target.closest(`.${swiper.params.slideClass}, swiper-slide`);\n if (!gesture.slideEl) {\n if (swiper.params.virtual && swiper.params.virtual.enabled && swiper.virtual) gesture.slideEl = (0, $3e0e2b092da8f124$export$f1e1789686576879)(swiper.slidesEl, `.${swiper.params.slideActiveClass}`)[0];\n else gesture.slideEl = swiper.slides[swiper.activeIndex];\n }\n let imageEl = gesture.slideEl.querySelector(`.${params.containerClass}`);\n if (imageEl) imageEl = imageEl.querySelectorAll('picture, img, svg, canvas, .swiper-zoom-target')[0];\n gesture.imageEl = imageEl;\n if (imageEl) gesture.imageWrapEl = (0, $3e0e2b092da8f124$export$8b22cf2602fb60ce)(gesture.imageEl, `.${params.containerClass}`)[0];\n else gesture.imageWrapEl = undefined;\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 prevScale = currentScale;\n const forceZoomRatio = typeof e === 'number' ? e : null;\n if (currentScale === 1 && forceZoomRatio) {\n touchX = undefined;\n touchY = undefined;\n image.touchesStart.x = undefined;\n image.touchesStart.y = undefined;\n }\n const maxRatio = getMaxRatio();\n zoom.scale = forceZoomRatio || maxRatio;\n currentScale = forceZoomRatio || maxRatio;\n if (e && !(currentScale === 1 && forceZoomRatio)) {\n slideWidth = gesture.slideEl.offsetWidth;\n slideHeight = gesture.slideEl.offsetHeight;\n offsetX = (0, $3e0e2b092da8f124$export$4368d992c4eafac0)(gesture.slideEl).left + window.scrollX;\n offsetY = (0, $3e0e2b092da8f124$export$4368d992c4eafac0)(gesture.slideEl).top + window.scrollY;\n diffX = offsetX + slideWidth / 2 - touchX;\n diffY = offsetY + slideHeight / 2 - touchY;\n imageWidth = gesture.imageEl.offsetWidth || gesture.imageEl.clientWidth;\n imageHeight = gesture.imageEl.offsetHeight || gesture.imageEl.clientHeight;\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 if (prevScale > 0 && forceZoomRatio && typeof image.currentX === 'number' && typeof image.currentY === 'number') {\n translateX = image.currentX * zoom.scale / prevScale;\n translateY = image.currentY * zoom.scale / prevScale;\n } else {\n translateX = diffX * zoom.scale;\n translateY = diffY * zoom.scale;\n }\n if (translateX < translateMinX) translateX = translateMinX;\n if (translateX > translateMaxX) translateX = translateMaxX;\n if (translateY < translateMinY) translateY = translateMinY;\n if (translateY > translateMaxY) translateY = translateMaxY;\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 image.currentX = translateX;\n image.currentY = translateY;\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) gesture.slideEl = (0, $3e0e2b092da8f124$export$f1e1789686576879)(swiper.slidesEl, `.${swiper.params.slideActiveClass}`)[0];\n else gesture.slideEl = swiper.slides[swiper.activeIndex];\n let imageEl = gesture.slideEl.querySelector(`.${params.containerClass}`);\n if (imageEl) imageEl = imageEl.querySelectorAll('picture, img, svg, canvas, .swiper-zoom-target')[0];\n gesture.imageEl = imageEl;\n if (imageEl) gesture.imageWrapEl = (0, $3e0e2b092da8f124$export$8b22cf2602fb60ce)(gesture.imageEl, `.${params.containerClass}`)[0];\n else gesture.imageWrapEl = undefined;\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 image.currentX = undefined;\n image.currentY = undefined;\n image.touchesStart.x = undefined;\n image.touchesStart.y = undefined;\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 if (swiper.params.zoom.panOnMouseMove) {\n mousePanStart = {\n x: 0,\n y: 0\n };\n if (isPanningWithMouse) {\n isPanningWithMouse = false;\n image.startX = 0;\n image.startY = 0;\n }\n }\n }\n // Toggle Zoom\n function zoomToggle(e) {\n const zoom = swiper.zoom;\n if (zoom.scale && zoom.scale !== 1) // Zoom Out\n zoomOut();\n else // Zoom In\n zoomIn(e);\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: passiveListener,\n activeListenerWithCapture: activeListenerWithCapture\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 { passiveListener: passiveListener, activeListenerWithCapture: activeListenerWithCapture } = getListeners();\n // Scale image\n swiper.wrapperEl.addEventListener('pointerdown', onGestureStart, passiveListener);\n swiper.wrapperEl.addEventListener('pointermove', onGestureChange, activeListenerWithCapture);\n [\n 'pointerup',\n 'pointercancel',\n 'pointerout'\n ].forEach((eventName)=>{\n swiper.wrapperEl.addEventListener(eventName, onGestureEnd, passiveListener);\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 { passiveListener: passiveListener, activeListenerWithCapture: activeListenerWithCapture } = getListeners();\n // Scale image\n swiper.wrapperEl.removeEventListener('pointerdown', onGestureStart, passiveListener);\n swiper.wrapperEl.removeEventListener('pointermove', onGestureChange, activeListenerWithCapture);\n [\n 'pointerup',\n 'pointercancel',\n 'pointerout'\n ].forEach((eventName)=>{\n swiper.wrapperEl.removeEventListener(eventName, onGestureEnd, passiveListener);\n });\n // Move image\n swiper.wrapperEl.removeEventListener('pointermove', onTouchMove, activeListenerWithCapture);\n }\n on('init', ()=>{\n if (swiper.params.zoom.enabled) enable();\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();\n });\n on('doubleTap', (_s, e)=>{\n if (!swiper.animating && swiper.params.zoom.enabled && swiper.zoom.enabled && swiper.params.zoom.toggle) zoomToggle(e);\n });\n on('transitionEnd', ()=>{\n if (swiper.zoom.enabled && swiper.params.zoom.enabled) onTransitionEnd();\n });\n on('slideChange', ()=>{\n if (swiper.zoom.enabled && swiper.params.zoom.enabled && swiper.params.cssMode) onTransitionEnd();\n });\n Object.assign(swiper.zoom, {\n enable: enable,\n disable: disable,\n in: zoomIn,\n out: zoomOut,\n toggle: zoomToggle\n });\n}\n\n\n\n/* eslint no-bitwise: [\"error\", { \"allow\": [\">>\"] }] */ function $8ad27336c27f2357$export$2e2bcd8739ae039(_ref) {\n let { swiper: swiper, extendParams: extendParams, on: on } = _ref;\n extendParams({\n controller: {\n control: undefined,\n inverse: false,\n by: 'slide' // or 'container'\n }\n });\n swiper.controller = {\n control: undefined\n };\n function LinearSpline(x, y) {\n const binarySearch = function search() {\n let maxIndex;\n let minIndex;\n let guess;\n return (array, val)=>{\n minIndex = -1;\n maxIndex = array.length;\n while(maxIndex - minIndex > 1){\n guess = maxIndex + minIndex >> 1;\n if (array[guess] <= val) minIndex = guess;\n else maxIndex = guess;\n }\n return maxIndex;\n };\n }();\n this.x = x;\n this.y = y;\n this.lastIndex = x.length - 1;\n // Given an x value (x2), return the expected y2 value:\n // (x1,y1) is the known point before given value,\n // (x3,y3) is the known point after given value.\n let i1;\n let i3;\n this.interpolate = function interpolate(x2) {\n if (!x2) return 0;\n // Get the indexes of x1 and x3 (the array indexes before and after given x2):\n i3 = binarySearch(this.x, x2);\n i1 = i3 - 1;\n // We have our indexes i1 & i3, so we can calculate already:\n // y2 := ((x2−x1) × (y3−y1)) ÷ (x3−x1) + y1\n return (x2 - this.x[i1]) * (this.y[i3] - this.y[i1]) / (this.x[i3] - this.x[i1]) + this.y[i1];\n };\n return this;\n }\n function getInterpolateFunction(c) {\n swiper.controller.spline = swiper.params.loop ? new LinearSpline(swiper.slidesGrid, c.slidesGrid) : new LinearSpline(swiper.snapGrid, c.snapGrid);\n }\n function setTranslate(_t, byController) {\n const controlled = swiper.controller.control;\n let multiplier;\n let controlledTranslate;\n const Swiper = swiper.constructor;\n function setControlledTranslate(c) {\n if (c.destroyed) return;\n // this will create an Interpolate function based on the snapGrids\n // x is the Grid of the scrolled scroller and y will be the controlled scroller\n // it makes sense to create this only once and recall it for the interpolation\n // the function does a lot of value caching for performance\n const translate = swiper.rtlTranslate ? -swiper.translate : swiper.translate;\n if (swiper.params.controller.by === 'slide') {\n getInterpolateFunction(c);\n // i am not sure why the values have to be multiplicated this way, tried to invert the snapGrid\n // but it did not work out\n controlledTranslate = -swiper.controller.spline.interpolate(-translate);\n }\n if (!controlledTranslate || swiper.params.controller.by === 'container') {\n multiplier = (c.maxTranslate() - c.minTranslate()) / (swiper.maxTranslate() - swiper.minTranslate());\n if (Number.isNaN(multiplier) || !Number.isFinite(multiplier)) multiplier = 1;\n controlledTranslate = (translate - swiper.minTranslate()) * multiplier + c.minTranslate();\n }\n if (swiper.params.controller.inverse) controlledTranslate = c.maxTranslate() - controlledTranslate;\n c.updateProgress(controlledTranslate);\n c.setTranslate(controlledTranslate, swiper);\n c.updateActiveIndex();\n c.updateSlidesClasses();\n }\n if (Array.isArray(controlled)) {\n for(let i = 0; i < controlled.length; i += 1)if (controlled[i] !== byController && controlled[i] instanceof Swiper) setControlledTranslate(controlled[i]);\n } else if (controlled instanceof Swiper && byController !== controlled) setControlledTranslate(controlled);\n }\n function setTransition(duration, byController) {\n const Swiper = swiper.constructor;\n const controlled = swiper.controller.control;\n let i;\n function setControlledTransition(c) {\n if (c.destroyed) return;\n c.setTransition(duration, swiper);\n if (duration !== 0) {\n c.transitionStart();\n if (c.params.autoHeight) (0, $3e0e2b092da8f124$export$7ccc53e8f1e7dfc5)(()=>{\n c.updateAutoHeight();\n });\n (0, $3e0e2b092da8f124$export$882b5998b3b9117c)(c.wrapperEl, ()=>{\n if (!controlled) return;\n c.transitionEnd();\n });\n }\n }\n if (Array.isArray(controlled)) {\n for(i = 0; i < controlled.length; i += 1)if (controlled[i] !== byController && controlled[i] instanceof Swiper) setControlledTransition(controlled[i]);\n } else if (controlled instanceof Swiper && byController !== controlled) setControlledTransition(controlled);\n }\n function removeSpline() {\n if (!swiper.controller.control) return;\n if (swiper.controller.spline) {\n swiper.controller.spline = undefined;\n delete swiper.controller.spline;\n }\n }\n on('beforeInit', ()=>{\n if (typeof window !== 'undefined' && // eslint-disable-line\n (typeof swiper.params.controller.control === 'string' || swiper.params.controller.control instanceof HTMLElement)) {\n const controlElements = typeof swiper.params.controller.control === 'string' ? [\n ...document.querySelectorAll(swiper.params.controller.control)\n ] : [\n swiper.params.controller.control\n ];\n controlElements.forEach((controlElement)=>{\n if (!swiper.controller.control) swiper.controller.control = [];\n if (controlElement && controlElement.swiper) swiper.controller.control.push(controlElement.swiper);\n else if (controlElement) {\n const eventName = `${swiper.params.eventsPrefix}init`;\n const onControllerSwiper = (e)=>{\n swiper.controller.control.push(e.detail[0]);\n swiper.update();\n controlElement.removeEventListener(eventName, onControllerSwiper);\n };\n controlElement.addEventListener(eventName, onControllerSwiper);\n }\n });\n return;\n }\n swiper.controller.control = swiper.params.controller.control;\n });\n on('update', ()=>{\n removeSpline();\n });\n on('resize', ()=>{\n removeSpline();\n });\n on('observerUpdate', ()=>{\n removeSpline();\n });\n on('setTranslate', (_s, translate, byController)=>{\n if (!swiper.controller.control || swiper.controller.control.destroyed) return;\n swiper.controller.setTranslate(translate, byController);\n });\n on('setTransition', (_s, duration, byController)=>{\n if (!swiper.controller.control || swiper.controller.control.destroyed) return;\n swiper.controller.setTransition(duration, byController);\n });\n Object.assign(swiper.controller, {\n setTranslate: setTranslate,\n setTransition: setTransition\n });\n}\n\n\n\n\n\nfunction $f036f37c54b3aa6f$export$2e2bcd8739ae039(_ref) {\n let { swiper: swiper, extendParams: extendParams, on: on } = _ref;\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 containerRole: null,\n itemRoleDescriptionMessage: null,\n slideRole: 'group',\n id: null,\n scrollOnFocus: true\n }\n });\n swiper.a11y = {\n clicked: false\n };\n let liveRegion = null;\n let preventFocusHandler;\n let focusTargetSlideEl;\n let visibilityChangedTimestamp = new Date().getTime();\n function notify(message) {\n const notification = liveRegion;\n if (notification.length === 0) return;\n (0, $3e0e2b092da8f124$export$2408f22a0fab9ae5)(notification, message);\n }\n function getRandomNumber(size) {\n if (size === void 0) 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 = (0, $3e0e2b092da8f124$export$953cecd6e717a553)(el);\n el.forEach((subEl)=>{\n subEl.setAttribute('tabIndex', '0');\n });\n }\n function makeElNotFocusable(el) {\n el = (0, $3e0e2b092da8f124$export$953cecd6e717a553)(el);\n el.forEach((subEl)=>{\n subEl.setAttribute('tabIndex', '-1');\n });\n }\n function addElRole(el, role) {\n el = (0, $3e0e2b092da8f124$export$953cecd6e717a553)(el);\n el.forEach((subEl)=>{\n subEl.setAttribute('role', role);\n });\n }\n function addElRoleDescription(el, description) {\n el = (0, $3e0e2b092da8f124$export$953cecd6e717a553)(el);\n el.forEach((subEl)=>{\n subEl.setAttribute('aria-roledescription', description);\n });\n }\n function addElControls(el, controls) {\n el = (0, $3e0e2b092da8f124$export$953cecd6e717a553)(el);\n el.forEach((subEl)=>{\n subEl.setAttribute('aria-controls', controls);\n });\n }\n function addElLabel(el, label) {\n el = (0, $3e0e2b092da8f124$export$953cecd6e717a553)(el);\n el.forEach((subEl)=>{\n subEl.setAttribute('aria-label', label);\n });\n }\n function addElId(el, id) {\n el = (0, $3e0e2b092da8f124$export$953cecd6e717a553)(el);\n el.forEach((subEl)=>{\n subEl.setAttribute('id', id);\n });\n }\n function addElLive(el, live) {\n el = (0, $3e0e2b092da8f124$export$953cecd6e717a553)(el);\n el.forEach((subEl)=>{\n subEl.setAttribute('aria-live', live);\n });\n }\n function disableEl(el) {\n el = (0, $3e0e2b092da8f124$export$953cecd6e717a553)(el);\n el.forEach((subEl)=>{\n subEl.setAttribute('aria-disabled', true);\n });\n }\n function enableEl(el) {\n el = (0, $3e0e2b092da8f124$export$953cecd6e717a553)(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((0, $452edee79264d178$export$db3b6bfb95261072)(swiper.params.pagination.bulletClass))) return;\n }\n if (swiper.navigation && swiper.navigation.prevEl && swiper.navigation.nextEl) {\n const prevEls = (0, $3e0e2b092da8f124$export$953cecd6e717a553)(swiper.navigation.prevEl);\n const nextEls = (0, $3e0e2b092da8f124$export$953cecd6e717a553)(swiper.navigation.nextEl);\n if (nextEls.includes(targetEl)) {\n if (!(swiper.isEnd && !swiper.params.loop)) swiper.slideNext();\n if (swiper.isEnd) notify(params.lastSlideMessage);\n else notify(params.nextSlideMessage);\n }\n if (prevEls.includes(targetEl)) {\n if (!(swiper.isBeginning && !swiper.params.loop)) swiper.slidePrev();\n if (swiper.isBeginning) notify(params.firstSlideMessage);\n else notify(params.prevSlideMessage);\n }\n }\n if (swiper.pagination && targetEl.matches((0, $452edee79264d178$export$db3b6bfb95261072)(swiper.params.pagination.bulletClass))) targetEl.click();\n }\n function updateNavigation() {\n if (swiper.params.loop || swiper.params.rewind || !swiper.navigation) return;\n const { nextEl: nextEl, prevEl: prevEl } = 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\\}\\}/, (0, $3e0e2b092da8f124$export$23f2a1d2818174ef)(bulletEl) + 1));\n }\n }\n if (bulletEl.matches((0, $452edee79264d178$export$db3b6bfb95261072)(swiper.params.pagination.bulletActiveClass))) bulletEl.setAttribute('aria-current', 'true');\n else bulletEl.removeAttribute('aria-current');\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 = (e)=>{\n if (focusTargetSlideEl && focusTargetSlideEl !== e.target && !focusTargetSlideEl.contains(e.target)) preventFocusHandler = true;\n swiper.a11y.clicked = true;\n };\n const handlePointerUp = ()=>{\n preventFocusHandler = false;\n requestAnimationFrame(()=>{\n requestAnimationFrame(()=>{\n if (!swiper.destroyed) swiper.a11y.clicked = false;\n });\n });\n };\n const onVisibilityChange = (e)=>{\n visibilityChangedTimestamp = new Date().getTime();\n };\n const handleFocus = (e)=>{\n if (swiper.a11y.clicked || !swiper.params.a11y.scrollOnFocus) return;\n if (new Date().getTime() - visibilityChangedTimestamp < 100) return;\n const slideEl = e.target.closest(`.${swiper.params.slideClass}, swiper-slide`);\n if (!slideEl || !swiper.slides.includes(slideEl)) return;\n focusTargetSlideEl = slideEl;\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()) swiper.el.scrollLeft = 0;\n else swiper.el.scrollTop = 0;\n requestAnimationFrame(()=>{\n if (preventFocusHandler) return;\n if (swiper.params.loop) swiper.slideToLoop(parseInt(slideEl.getAttribute('data-swiper-slide-index')), 0);\n else swiper.slideTo(swiper.slides.indexOf(slideEl), 0);\n preventFocusHandler = false;\n });\n };\n const initSlides = ()=>{\n const params = swiper.params.a11y;\n if (params.itemRoleDescriptionMessage) addElRoleDescription(swiper.slides, params.itemRoleDescriptionMessage);\n if (params.slideRole) addElRole(swiper.slides, params.slideRole);\n const slidesLength = swiper.slides.length;\n if (params.slideLabelMessage) 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 const init = ()=>{\n const params = swiper.params.a11y;\n swiper.el.append(liveRegion);\n // Container\n const containerEl = swiper.el;\n if (params.containerRoleDescriptionMessage) addElRoleDescription(containerEl, params.containerRoleDescriptionMessage);\n if (params.containerMessage) addElLabel(containerEl, params.containerMessage);\n if (params.containerRole) addElRole(containerEl, params.containerRole);\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 // Slide\n initSlides();\n // Navigation\n let { nextEl: nextEl, prevEl: prevEl } = swiper.navigation ? swiper.navigation : {};\n nextEl = (0, $3e0e2b092da8f124$export$953cecd6e717a553)(nextEl);\n prevEl = (0, $3e0e2b092da8f124$export$953cecd6e717a553)(prevEl);\n if (nextEl) nextEl.forEach((el)=>initNavEl(el, wrapperId, params.nextSlideMessage));\n if (prevEl) prevEl.forEach((el)=>initNavEl(el, wrapperId, params.prevSlideMessage));\n // Pagination\n if (hasClickablePagination()) {\n const paginationEl = (0, $3e0e2b092da8f124$export$953cecd6e717a553)(swiper.pagination.el);\n paginationEl.forEach((el)=>{\n el.addEventListener('keydown', onEnterOrSpaceKey);\n });\n }\n // Tab focus\n const document = (0, $768c2f4c151a0363$export$39b482c5e57630a8)();\n document.addEventListener('visibilitychange', onVisibilityChange);\n swiper.el.addEventListener('focus', handleFocus, true);\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 { nextEl: nextEl, prevEl: prevEl } = swiper.navigation ? swiper.navigation : {};\n nextEl = (0, $3e0e2b092da8f124$export$953cecd6e717a553)(nextEl);\n prevEl = (0, $3e0e2b092da8f124$export$953cecd6e717a553)(prevEl);\n if (nextEl) nextEl.forEach((el)=>el.removeEventListener('keydown', onEnterOrSpaceKey));\n if (prevEl) prevEl.forEach((el)=>el.removeEventListener('keydown', onEnterOrSpaceKey));\n // Pagination\n if (hasClickablePagination()) {\n const paginationEl = (0, $3e0e2b092da8f124$export$953cecd6e717a553)(swiper.pagination.el);\n paginationEl.forEach((el)=>{\n el.removeEventListener('keydown', onEnterOrSpaceKey);\n });\n }\n const document = (0, $768c2f4c151a0363$export$39b482c5e57630a8)();\n document.removeEventListener('visibilitychange', onVisibilityChange);\n // Tab focus\n if (swiper.el && typeof swiper.el !== 'string') {\n swiper.el.removeEventListener('focus', handleFocus, true);\n swiper.el.removeEventListener('pointerdown', handlePointerDown, true);\n swiper.el.removeEventListener('pointerup', handlePointerUp, true);\n }\n }\n on('beforeInit', ()=>{\n liveRegion = (0, $3e0e2b092da8f124$export$db3b6bfb95261072)('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}\n\n\n\nfunction $0ce99a47f98448f9$export$2e2bcd8739ae039(_ref) {\n let { swiper: swiper, extendParams: extendParams, on: on } = _ref;\n extendParams({\n history: {\n enabled: false,\n root: '',\n replaceState: false,\n key: 'slides',\n keepQuery: false\n }\n });\n let initialized = false;\n let paths = {};\n const slugify = (text)=>{\n return text.toString().replace(/\\s+/g, '-').replace(/[^\\w-]+/g, '').replace(/--+/g, '-').replace(/^-+/, '').replace(/-+$/, '');\n };\n const getPathValues = (urlOverride)=>{\n const window = (0, $768c2f4c151a0363$export$407448d2b89b1813)();\n let location;\n if (urlOverride) location = new URL(urlOverride);\n else location = window.location;\n const pathArray = location.pathname.slice(1).split('/').filter((part)=>part !== '');\n const total = pathArray.length;\n const key = pathArray[total - 2];\n const value = pathArray[total - 1];\n return {\n key: key,\n value: value\n };\n };\n const setHistory = (key, index)=>{\n const window = (0, $768c2f4c151a0363$export$407448d2b89b1813)();\n if (!initialized || !swiper.params.history.enabled) return;\n let location;\n if (swiper.params.url) location = new URL(swiper.params.url);\n else location = window.location;\n const slide = swiper.virtual && swiper.params.virtual.enabled ? swiper.slidesEl.querySelector(`[data-swiper-slide-index=\"${index}\"]`) : swiper.slides[index];\n let value = slugify(slide.getAttribute('data-history'));\n if (swiper.params.history.root.length > 0) {\n let root = swiper.params.history.root;\n if (root[root.length - 1] === '/') root = root.slice(0, root.length - 1);\n value = `${root}/${key ? `${key}/` : ''}${value}`;\n } else if (!location.pathname.includes(key)) value = `${key ? `${key}/` : ''}${value}`;\n if (swiper.params.history.keepQuery) value += location.search;\n const currentState = window.history.state;\n if (currentState && currentState.value === value) return;\n if (swiper.params.history.replaceState) window.history.replaceState({\n value: value\n }, null, value);\n else window.history.pushState({\n value: value\n }, null, value);\n };\n const scrollToSlide = (speed, value, runCallbacks)=>{\n if (value) for(let i = 0, length = swiper.slides.length; i < length; i += 1){\n const slide = swiper.slides[i];\n const slideHistory = slugify(slide.getAttribute('data-history'));\n if (slideHistory === value) {\n const index = swiper.getSlideIndex(slide);\n swiper.slideTo(index, speed, runCallbacks);\n }\n }\n else swiper.slideTo(0, speed, runCallbacks);\n };\n const setHistoryPopState = ()=>{\n paths = getPathValues(swiper.params.url);\n scrollToSlide(swiper.params.speed, paths.value, false);\n };\n const init = ()=>{\n const window = (0, $768c2f4c151a0363$export$407448d2b89b1813)();\n if (!swiper.params.history) return;\n if (!window.history || !window.history.pushState) {\n swiper.params.history.enabled = false;\n swiper.params.hashNavigation.enabled = true;\n return;\n }\n initialized = true;\n paths = getPathValues(swiper.params.url);\n if (!paths.key && !paths.value) {\n if (!swiper.params.history.replaceState) window.addEventListener('popstate', setHistoryPopState);\n return;\n }\n scrollToSlide(0, paths.value, swiper.params.runCallbacksOnInit);\n if (!swiper.params.history.replaceState) window.addEventListener('popstate', setHistoryPopState);\n };\n const destroy = ()=>{\n const window = (0, $768c2f4c151a0363$export$407448d2b89b1813)();\n if (!swiper.params.history.replaceState) window.removeEventListener('popstate', setHistoryPopState);\n };\n on('init', ()=>{\n if (swiper.params.history.enabled) init();\n });\n on('destroy', ()=>{\n if (swiper.params.history.enabled) destroy();\n });\n on('transitionEnd _freeModeNoMomentumRelease', ()=>{\n if (initialized) setHistory(swiper.params.history.key, swiper.activeIndex);\n });\n on('slideChange', ()=>{\n if (initialized && swiper.params.cssMode) setHistory(swiper.params.history.key, swiper.activeIndex);\n });\n}\n\n\n\n\nfunction $749dc992af967f35$export$2e2bcd8739ae039(_ref) {\n let { swiper: swiper, extendParams: extendParams, emit: emit, on: on } = _ref;\n let initialized = false;\n const document = (0, $768c2f4c151a0363$export$39b482c5e57630a8)();\n const window = (0, $768c2f4c151a0363$export$407448d2b89b1813)();\n extendParams({\n hashNavigation: {\n enabled: false,\n replaceState: false,\n watchState: false,\n getSlideIndex (_s, hash) {\n if (swiper.virtual && swiper.params.virtual.enabled) {\n const slideWithHash = swiper.slides.find((slideEl)=>slideEl.getAttribute('data-hash') === hash);\n if (!slideWithHash) return 0;\n const index = parseInt(slideWithHash.getAttribute('data-swiper-slide-index'), 10);\n return index;\n }\n return swiper.getSlideIndex((0, $3e0e2b092da8f124$export$f1e1789686576879)(swiper.slidesEl, `.${swiper.params.slideClass}[data-hash=\"${hash}\"], swiper-slide[data-hash=\"${hash}\"]`)[0]);\n }\n }\n });\n const onHashChange = ()=>{\n emit('hashChange');\n const newHash = document.location.hash.replace('#', '');\n const activeSlideEl = swiper.virtual && swiper.params.virtual.enabled ? swiper.slidesEl.querySelector(`[data-swiper-slide-index=\"${swiper.activeIndex}\"]`) : swiper.slides[swiper.activeIndex];\n const activeSlideHash = activeSlideEl ? activeSlideEl.getAttribute('data-hash') : '';\n if (newHash !== activeSlideHash) {\n const newIndex = swiper.params.hashNavigation.getSlideIndex(swiper, newHash);\n if (typeof newIndex === 'undefined' || Number.isNaN(newIndex)) return;\n swiper.slideTo(newIndex);\n }\n };\n const setHash = ()=>{\n if (!initialized || !swiper.params.hashNavigation.enabled) return;\n const activeSlideEl = swiper.virtual && swiper.params.virtual.enabled ? swiper.slidesEl.querySelector(`[data-swiper-slide-index=\"${swiper.activeIndex}\"]`) : swiper.slides[swiper.activeIndex];\n const activeSlideHash = activeSlideEl ? activeSlideEl.getAttribute('data-hash') || activeSlideEl.getAttribute('data-history') : '';\n if (swiper.params.hashNavigation.replaceState && window.history && window.history.replaceState) {\n window.history.replaceState(null, null, `#${activeSlideHash}` || '');\n emit('hashSet');\n } else {\n document.location.hash = activeSlideHash || '';\n emit('hashSet');\n }\n };\n const init = ()=>{\n if (!swiper.params.hashNavigation.enabled || swiper.params.history && swiper.params.history.enabled) return;\n initialized = true;\n const hash = document.location.hash.replace('#', '');\n if (hash) {\n const speed = 0;\n const index = swiper.params.hashNavigation.getSlideIndex(swiper, hash);\n swiper.slideTo(index || 0, speed, swiper.params.runCallbacksOnInit, true);\n }\n if (swiper.params.hashNavigation.watchState) window.addEventListener('hashchange', onHashChange);\n };\n const destroy = ()=>{\n if (swiper.params.hashNavigation.watchState) window.removeEventListener('hashchange', onHashChange);\n };\n on('init', ()=>{\n if (swiper.params.hashNavigation.enabled) init();\n });\n on('destroy', ()=>{\n if (swiper.params.hashNavigation.enabled) destroy();\n });\n on('transitionEnd _freeModeNoMomentumRelease', ()=>{\n if (initialized) setHash();\n });\n on('slideChange', ()=>{\n if (initialized && swiper.params.cssMode) setHash();\n });\n}\n\n\n\n/* eslint no-underscore-dangle: \"off\" */ /* eslint no-use-before-define: \"off\" */ function $41ae6f5a5ccdab5c$export$2e2bcd8739ae039(_ref) {\n let { swiper: swiper, extendParams: extendParams, on: on, emit: emit, params: params } = _ref;\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: false,\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 let pausedByPointerEnter;\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 if (pausedByPointerEnter || e.detail && e.detail.bySwiperTouchMove) return;\n resume();\n }\n const calcTimeLeft = ()=>{\n if (swiper.destroyed || !swiper.autoplay.running) return;\n if (swiper.autoplay.paused) 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) activeSlideEl = swiper.slides.find((slideEl)=>slideEl.classList.contains('swiper-slide-active'));\n else activeSlideEl = swiper.slides[swiper.activeIndex];\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 requestAnimationFrame(()=>{\n proceed();\n });\n // eslint-disable-next-line\n return delay;\n };\n const start = ()=>{\n autoplayStartTime = new Date().getTime();\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) pausedByInteraction = true;\n const proceed = ()=>{\n emit('autoplayPause');\n if (swiper.params.autoplay.waitForTransition) swiper.wrapperEl.addEventListener('transitionend', onTransitionEnd);\n else resume();\n };\n swiper.autoplay.paused = true;\n if (reset) {\n if (slideChanged) autoplayTimeLeft = swiper.params.autoplay.delay;\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 run();\n swiper.autoplay.paused = false;\n emit('autoplayResume');\n };\n const onVisibilityChange = ()=>{\n if (swiper.destroyed || !swiper.autoplay.running) return;\n const document = (0, $768c2f4c151a0363$export$39b482c5e57630a8)();\n if (document.visibilityState === 'hidden') {\n pausedByInteraction = true;\n pause(true);\n }\n if (document.visibilityState === 'visible') resume();\n };\n const onPointerEnter = (e)=>{\n if (e.pointerType !== 'mouse') return;\n pausedByInteraction = true;\n pausedByPointerEnter = true;\n if (swiper.animating || swiper.autoplay.paused) return;\n pause(true);\n };\n const onPointerLeave = (e)=>{\n if (e.pointerType !== 'mouse') return;\n pausedByPointerEnter = false;\n if (swiper.autoplay.paused) resume();\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 if (swiper.el && typeof swiper.el !== 'string') {\n swiper.el.removeEventListener('pointerenter', onPointerEnter);\n swiper.el.removeEventListener('pointerleave', onPointerLeave);\n }\n };\n const attachDocumentEvents = ()=>{\n const document = (0, $768c2f4c151a0363$export$39b482c5e57630a8)();\n document.addEventListener('visibilitychange', onVisibilityChange);\n };\n const detachDocumentEvents = ()=>{\n const document = (0, $768c2f4c151a0363$export$39b482c5e57630a8)();\n document.removeEventListener('visibilitychange', onVisibilityChange);\n };\n on('init', ()=>{\n if (swiper.params.autoplay.enabled) {\n attachMouseEvents();\n attachDocumentEvents();\n start();\n }\n });\n on('destroy', ()=>{\n detachMouseEvents();\n detachDocumentEvents();\n if (swiper.autoplay.running) stop();\n });\n on('_freeModeStaticRelease', ()=>{\n if (pausedByTouch || pausedByInteraction) resume();\n });\n on('_freeModeNoMomentumRelease', ()=>{\n if (!swiper.params.autoplay.disableOnInteraction) pause(true, true);\n else stop();\n });\n on('beforeTransitionStart', (_s, speed, internal)=>{\n if (swiper.destroyed || !swiper.autoplay.running) return;\n if (internal || !swiper.params.autoplay.disableOnInteraction) pause(true, true);\n else stop();\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: start,\n stop: stop,\n pause: pause,\n resume: resume\n });\n}\n\n\n\n\nfunction $1664cd01e0f13904$export$2e2bcd8739ae039(_ref) {\n let { swiper: swiper, extendParams: extendParams, on: on } = _ref;\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) slideToIndex = parseInt(thumbsSwiper.clickedSlide.getAttribute('data-swiper-slide-index'), 10);\n else slideToIndex = clickedIndex;\n if (swiper.params.loop) swiper.slideToLoop(slideToIndex);\n else swiper.slideTo(slideToIndex);\n }\n function init() {\n const { thumbs: thumbsParams } = swiper.params;\n if (initialized) return false;\n initialized = true;\n const SwiperClass = swiper.constructor;\n if (thumbsParams.swiper instanceof SwiperClass) {\n if (thumbsParams.swiper.destroyed) {\n initialized = false;\n return false;\n }\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 ((0, $3e0e2b092da8f124$export$ae1af26003f05816)(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 // Activate thumbs\n let thumbsToActivate = 1;\n const thumbActiveClass = swiper.params.thumbs.slideThumbActiveClass;\n if (swiper.params.slidesPerView > 1 && !swiper.params.centeredSlides) thumbsToActivate = swiper.params.slidesPerView;\n if (!swiper.params.thumbs.multipleActiveThumbs) thumbsToActivate = 1;\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) for(let i = 0; i < thumbsToActivate; i += 1)(0, $3e0e2b092da8f124$export$f1e1789686576879)(thumbsSwiper.slidesEl, `[data-swiper-slide-index=\"${swiper.realIndex + i}\"]`).forEach((slideEl)=>{\n slideEl.classList.add(thumbActiveClass);\n });\n else {\n for(let i = 0; i < thumbsToActivate; i += 1)if (thumbsSwiper.slides[swiper.realIndex + i]) thumbsSwiper.slides[swiper.realIndex + i].classList.add(thumbActiveClass);\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.find((slideEl)=>slideEl.getAttribute('data-swiper-slide-index') === `${swiper.realIndex}`);\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) newThumbsIndex += direction === 'next' ? autoScrollOffset : -1 * autoScrollOffset;\n if (thumbsSwiper.visibleSlidesIndexes && thumbsSwiper.visibleSlidesIndexes.indexOf(newThumbsIndex) < 0) {\n if (thumbsSwiper.params.centeredSlides) {\n if (newThumbsIndex > currentThumbsIndex) newThumbsIndex = newThumbsIndex - Math.floor(slidesPerView / 2) + 1;\n else newThumbsIndex = newThumbsIndex + Math.floor(slidesPerView / 2) - 1;\n } else newThumbsIndex > currentThumbsIndex && thumbsSwiper.params.slidesPerGroup;\n thumbsSwiper.slideTo(newThumbsIndex, initial ? 0 : undefined);\n }\n }\n }\n on('beforeInit', ()=>{\n const { thumbs: thumbs } = swiper.params;\n if (!thumbs || !thumbs.swiper) return;\n if (typeof thumbs.swiper === 'string' || thumbs.swiper instanceof HTMLElement) {\n const document = (0, $768c2f4c151a0363$export$39b482c5e57630a8)();\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 eventName = `${swiper.params.eventsPrefix}init`;\n const onThumbsSwiper = (e)=>{\n thumbs.swiper = e.detail[0];\n thumbsElement.removeEventListener(eventName, onThumbsSwiper);\n init();\n update(true);\n thumbs.swiper.update();\n swiper.update();\n };\n thumbsElement.addEventListener(eventName, onThumbsSwiper);\n }\n return thumbsElement;\n };\n const watchForThumbsToAppear = ()=>{\n if (swiper.destroyed) return;\n const thumbsElement = getThumbsElementAndInit();\n if (!thumbsElement) requestAnimationFrame(watchForThumbsToAppear);\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) thumbsSwiper.destroy();\n });\n Object.assign(swiper.thumbs, {\n init: init,\n update: update\n });\n}\n\n\n\nfunction $661f7d385acf36a7$export$2e2bcd8739ae039(_ref) {\n let { swiper: swiper, extendParams: extendParams, emit: emit, once: once } = _ref;\n extendParams({\n freeMode: {\n enabled: false,\n momentum: true,\n momentumRatio: 1,\n momentumBounce: true,\n momentumBounceRatio: 1,\n momentumVelocityRatio: 1,\n sticky: false,\n minimumVelocity: 0.02\n }\n });\n function onTouchStart() {\n if (swiper.params.cssMode) return;\n const translate = swiper.getTranslate();\n swiper.setTranslate(translate);\n swiper.setTransition(0);\n swiper.touchEventsData.velocities.length = 0;\n swiper.freeMode.onTouchEnd({\n currentPos: swiper.rtl ? swiper.translate : -swiper.translate\n });\n }\n function onTouchMove() {\n if (swiper.params.cssMode) return;\n const { touchEventsData: data, touches: touches } = swiper;\n // Velocity\n if (data.velocities.length === 0) data.velocities.push({\n position: touches[swiper.isHorizontal() ? 'startX' : 'startY'],\n time: data.touchStartTime\n });\n data.velocities.push({\n position: touches[swiper.isHorizontal() ? 'currentX' : 'currentY'],\n time: (0, $3e0e2b092da8f124$export$2d1720544b23b823)()\n });\n }\n function onTouchEnd(_ref2) {\n let { currentPos: currentPos } = _ref2;\n if (swiper.params.cssMode) return;\n const { params: params, wrapperEl: wrapperEl, rtlTranslate: rtl, snapGrid: snapGrid, touchEventsData: data } = swiper;\n // Time diff\n const touchEndTime = (0, $3e0e2b092da8f124$export$2d1720544b23b823)();\n const timeDiff = touchEndTime - data.touchStartTime;\n if (currentPos < -swiper.minTranslate()) {\n swiper.slideTo(swiper.activeIndex);\n return;\n }\n if (currentPos > -swiper.maxTranslate()) {\n if (swiper.slides.length < snapGrid.length) swiper.slideTo(snapGrid.length - 1);\n else swiper.slideTo(swiper.slides.length - 1);\n return;\n }\n if (params.freeMode.momentum) {\n if (data.velocities.length > 1) {\n const lastMoveEvent = data.velocities.pop();\n const velocityEvent = data.velocities.pop();\n const distance = lastMoveEvent.position - velocityEvent.position;\n const time = lastMoveEvent.time - velocityEvent.time;\n swiper.velocity = distance / time;\n swiper.velocity /= 2;\n if (Math.abs(swiper.velocity) < params.freeMode.minimumVelocity) swiper.velocity = 0;\n // this implies that the user stopped moving a finger then released.\n // There would be no events with distance zero, so the last event is stale.\n if (time > 150 || (0, $3e0e2b092da8f124$export$2d1720544b23b823)() - lastMoveEvent.time > 300) swiper.velocity = 0;\n } else swiper.velocity = 0;\n swiper.velocity *= params.freeMode.momentumVelocityRatio;\n data.velocities.length = 0;\n let momentumDuration = 1000 * params.freeMode.momentumRatio;\n const momentumDistance = swiper.velocity * momentumDuration;\n let newPosition = swiper.translate + momentumDistance;\n if (rtl) newPosition = -newPosition;\n let doBounce = false;\n let afterBouncePosition;\n const bounceAmount = Math.abs(swiper.velocity) * 20 * params.freeMode.momentumBounceRatio;\n let needsLoopFix;\n if (newPosition < swiper.maxTranslate()) {\n if (params.freeMode.momentumBounce) {\n if (newPosition + swiper.maxTranslate() < -bounceAmount) newPosition = swiper.maxTranslate() - bounceAmount;\n afterBouncePosition = swiper.maxTranslate();\n doBounce = true;\n data.allowMomentumBounce = true;\n } else newPosition = swiper.maxTranslate();\n if (params.loop && params.centeredSlides) needsLoopFix = true;\n } else if (newPosition > swiper.minTranslate()) {\n if (params.freeMode.momentumBounce) {\n if (newPosition - swiper.minTranslate() > bounceAmount) newPosition = swiper.minTranslate() + bounceAmount;\n afterBouncePosition = swiper.minTranslate();\n doBounce = true;\n data.allowMomentumBounce = true;\n } else newPosition = swiper.minTranslate();\n if (params.loop && params.centeredSlides) needsLoopFix = true;\n } else if (params.freeMode.sticky) {\n let nextSlide;\n for(let j = 0; j < snapGrid.length; j += 1)if (snapGrid[j] > -newPosition) {\n nextSlide = j;\n break;\n }\n if (Math.abs(snapGrid[nextSlide] - newPosition) < Math.abs(snapGrid[nextSlide - 1] - newPosition) || swiper.swipeDirection === 'next') newPosition = snapGrid[nextSlide];\n else newPosition = snapGrid[nextSlide - 1];\n newPosition = -newPosition;\n }\n if (needsLoopFix) once('transitionEnd', ()=>{\n swiper.loopFix();\n });\n // Fix duration\n if (swiper.velocity !== 0) {\n if (rtl) momentumDuration = Math.abs((-newPosition - swiper.translate) / swiper.velocity);\n else momentumDuration = Math.abs((newPosition - swiper.translate) / swiper.velocity);\n if (params.freeMode.sticky) {\n // If freeMode.sticky is active and the user ends a swipe with a slow-velocity\n // event, then durations can be 20+ seconds to slide one (or zero!) slides.\n // It's easy to see this when simulating touch with mouse events. To fix this,\n // limit single-slide swipes to the default slide duration. This also has the\n // nice side effect of matching slide speed if the user stopped moving before\n // lifting finger or mouse vs. moving slowly before lifting the finger/mouse.\n // For faster swipes, also apply limits (albeit higher ones).\n const moveDistance = Math.abs((rtl ? -newPosition : newPosition) - swiper.translate);\n const currentSlideSize = swiper.slidesSizesGrid[swiper.activeIndex];\n if (moveDistance < currentSlideSize) momentumDuration = params.speed;\n else if (moveDistance < 2 * currentSlideSize) momentumDuration = params.speed * 1.5;\n else momentumDuration = params.speed * 2.5;\n }\n } else if (params.freeMode.sticky) {\n swiper.slideToClosest();\n return;\n }\n if (params.freeMode.momentumBounce && doBounce) {\n swiper.updateProgress(afterBouncePosition);\n swiper.setTransition(momentumDuration);\n swiper.setTranslate(newPosition);\n swiper.transitionStart(true, swiper.swipeDirection);\n swiper.animating = true;\n (0, $3e0e2b092da8f124$export$882b5998b3b9117c)(wrapperEl, ()=>{\n if (!swiper || swiper.destroyed || !data.allowMomentumBounce) return;\n emit('momentumBounce');\n swiper.setTransition(params.speed);\n setTimeout(()=>{\n swiper.setTranslate(afterBouncePosition);\n (0, $3e0e2b092da8f124$export$882b5998b3b9117c)(wrapperEl, ()=>{\n if (!swiper || swiper.destroyed) return;\n swiper.transitionEnd();\n });\n }, 0);\n });\n } else if (swiper.velocity) {\n emit('_freeModeNoMomentumRelease');\n swiper.updateProgress(newPosition);\n swiper.setTransition(momentumDuration);\n swiper.setTranslate(newPosition);\n swiper.transitionStart(true, swiper.swipeDirection);\n if (!swiper.animating) {\n swiper.animating = true;\n (0, $3e0e2b092da8f124$export$882b5998b3b9117c)(wrapperEl, ()=>{\n if (!swiper || swiper.destroyed) return;\n swiper.transitionEnd();\n });\n }\n } else swiper.updateProgress(newPosition);\n swiper.updateActiveIndex();\n swiper.updateSlidesClasses();\n } else if (params.freeMode.sticky) {\n swiper.slideToClosest();\n return;\n } else if (params.freeMode) emit('_freeModeNoMomentumRelease');\n if (!params.freeMode.momentum || timeDiff >= params.longSwipesMs) {\n emit('_freeModeStaticRelease');\n swiper.updateProgress();\n swiper.updateActiveIndex();\n swiper.updateSlidesClasses();\n }\n }\n Object.assign(swiper, {\n freeMode: {\n onTouchStart: onTouchStart,\n onTouchMove: onTouchMove,\n onTouchEnd: onTouchEnd\n }\n });\n}\n\n\nfunction $3767883c93014eb9$export$2e2bcd8739ae039(_ref) {\n let { swiper: swiper, extendParams: extendParams, on: on } = _ref;\n extendParams({\n grid: {\n rows: 1,\n fill: 'column'\n }\n });\n let slidesNumberEvenToRows;\n let slidesPerRow;\n let numFullColumns;\n let wasMultiRow;\n const getSpaceBetween = ()=>{\n let spaceBetween = swiper.params.spaceBetween;\n if (typeof spaceBetween === 'string' && spaceBetween.indexOf('%') >= 0) spaceBetween = parseFloat(spaceBetween.replace('%', '')) / 100 * swiper.size;\n else if (typeof spaceBetween === 'string') spaceBetween = parseFloat(spaceBetween);\n return spaceBetween;\n };\n const initSlides = (slides)=>{\n const { slidesPerView: slidesPerView } = swiper.params;\n const { rows: rows, fill: fill } = swiper.params.grid;\n const slidesLength = swiper.virtual && swiper.params.virtual.enabled ? swiper.virtual.slides.length : slides.length;\n numFullColumns = Math.floor(slidesLength / rows);\n if (Math.floor(slidesLength / rows) === slidesLength / rows) slidesNumberEvenToRows = slidesLength;\n else slidesNumberEvenToRows = Math.ceil(slidesLength / rows) * rows;\n if (slidesPerView !== 'auto' && fill === 'row') slidesNumberEvenToRows = Math.max(slidesNumberEvenToRows, slidesPerView * rows);\n slidesPerRow = slidesNumberEvenToRows / rows;\n };\n const unsetSlides = ()=>{\n if (swiper.slides) swiper.slides.forEach((slide)=>{\n if (slide.swiperSlideGridSet) {\n slide.style.height = '';\n slide.style[swiper.getDirectionLabel('margin-top')] = '';\n }\n });\n };\n const updateSlide = (i, slide, slides)=>{\n const { slidesPerGroup: slidesPerGroup } = swiper.params;\n const spaceBetween = getSpaceBetween();\n const { rows: rows, fill: fill } = swiper.params.grid;\n const slidesLength = swiper.virtual && swiper.params.virtual.enabled ? swiper.virtual.slides.length : slides.length;\n // Set slides order\n let newSlideOrderIndex;\n let column;\n let row;\n if (fill === 'row' && slidesPerGroup > 1) {\n const groupIndex = Math.floor(i / (slidesPerGroup * rows));\n const slideIndexInGroup = i - rows * slidesPerGroup * groupIndex;\n const columnsInGroup = groupIndex === 0 ? slidesPerGroup : Math.min(Math.ceil((slidesLength - groupIndex * rows * slidesPerGroup) / rows), slidesPerGroup);\n row = Math.floor(slideIndexInGroup / columnsInGroup);\n column = slideIndexInGroup - row * columnsInGroup + groupIndex * slidesPerGroup;\n newSlideOrderIndex = column + row * slidesNumberEvenToRows / rows;\n slide.style.order = newSlideOrderIndex;\n } else if (fill === 'column') {\n column = Math.floor(i / rows);\n row = i - column * rows;\n if (column > numFullColumns || column === numFullColumns && row === rows - 1) {\n row += 1;\n if (row >= rows) {\n row = 0;\n column += 1;\n }\n }\n } else {\n row = Math.floor(i / slidesPerRow);\n column = i - row * slidesPerRow;\n }\n slide.row = row;\n slide.column = column;\n slide.style.height = `calc((100% - ${(rows - 1) * spaceBetween}px) / ${rows})`;\n slide.style[swiper.getDirectionLabel('margin-top')] = row !== 0 ? spaceBetween && `${spaceBetween}px` : '';\n slide.swiperSlideGridSet = true;\n };\n const updateWrapperSize = (slideSize, snapGrid)=>{\n const { centeredSlides: centeredSlides, roundLengths: roundLengths } = swiper.params;\n const spaceBetween = getSpaceBetween();\n const { rows: rows } = swiper.params.grid;\n swiper.virtualSize = (slideSize + spaceBetween) * slidesNumberEvenToRows;\n swiper.virtualSize = Math.ceil(swiper.virtualSize / rows) - spaceBetween;\n if (!swiper.params.cssMode) swiper.wrapperEl.style[swiper.getDirectionLabel('width')] = `${swiper.virtualSize + spaceBetween}px`;\n if (centeredSlides) {\n const newSlidesGrid = [];\n for(let i = 0; i < snapGrid.length; i += 1){\n let slidesGridItem = snapGrid[i];\n if (roundLengths) slidesGridItem = Math.floor(slidesGridItem);\n if (snapGrid[i] < swiper.virtualSize + snapGrid[0]) newSlidesGrid.push(slidesGridItem);\n }\n snapGrid.splice(0, snapGrid.length);\n snapGrid.push(...newSlidesGrid);\n }\n };\n const onInit = ()=>{\n wasMultiRow = swiper.params.grid && swiper.params.grid.rows > 1;\n };\n const onUpdate = ()=>{\n const { params: params, el: el } = swiper;\n const isMultiRow = params.grid && params.grid.rows > 1;\n if (wasMultiRow && !isMultiRow) {\n el.classList.remove(`${params.containerModifierClass}grid`, `${params.containerModifierClass}grid-column`);\n numFullColumns = 1;\n swiper.emitContainerClasses();\n } else if (!wasMultiRow && isMultiRow) {\n el.classList.add(`${params.containerModifierClass}grid`);\n if (params.grid.fill === 'column') el.classList.add(`${params.containerModifierClass}grid-column`);\n swiper.emitContainerClasses();\n }\n wasMultiRow = isMultiRow;\n };\n on('init', onInit);\n on('update', onUpdate);\n swiper.grid = {\n initSlides: initSlides,\n unsetSlides: unsetSlides,\n updateSlide: updateSlide,\n updateWrapperSize: updateWrapperSize\n };\n}\n\n\n\nfunction $e8eb9c2e5c926b2c$var$appendSlide(slides) {\n const swiper = this;\n const { params: params, slidesEl: slidesEl } = swiper;\n if (params.loop) swiper.loopDestroy();\n const appendElement = (slideEl)=>{\n if (typeof slideEl === 'string') {\n const tempDOM = document.createElement('div');\n (0, $3e0e2b092da8f124$export$2408f22a0fab9ae5)(tempDOM, slideEl);\n slidesEl.append(tempDOM.children[0]);\n (0, $3e0e2b092da8f124$export$2408f22a0fab9ae5)(tempDOM, '');\n } else slidesEl.append(slideEl);\n };\n if (typeof slides === 'object' && 'length' in slides) {\n for(let i = 0; i < slides.length; i += 1)if (slides[i]) appendElement(slides[i]);\n } else appendElement(slides);\n swiper.recalcSlides();\n if (params.loop) swiper.loopCreate();\n if (!params.observer || swiper.isElement) swiper.update();\n}\nfunction $e8eb9c2e5c926b2c$var$prependSlide(slides) {\n const swiper = this;\n const { params: params, activeIndex: activeIndex, slidesEl: slidesEl } = swiper;\n if (params.loop) swiper.loopDestroy();\n let newActiveIndex = activeIndex + 1;\n const prependElement = (slideEl)=>{\n if (typeof slideEl === 'string') {\n const tempDOM = document.createElement('div');\n (0, $3e0e2b092da8f124$export$2408f22a0fab9ae5)(tempDOM, slideEl);\n slidesEl.prepend(tempDOM.children[0]);\n (0, $3e0e2b092da8f124$export$2408f22a0fab9ae5)(tempDOM, '');\n } else slidesEl.prepend(slideEl);\n };\n if (typeof slides === 'object' && 'length' in slides) {\n for(let i = 0; i < slides.length; i += 1)if (slides[i]) prependElement(slides[i]);\n newActiveIndex = activeIndex + slides.length;\n } else prependElement(slides);\n swiper.recalcSlides();\n if (params.loop) swiper.loopCreate();\n if (!params.observer || swiper.isElement) swiper.update();\n swiper.slideTo(newActiveIndex, 0, false);\n}\nfunction $e8eb9c2e5c926b2c$var$addSlide(index, slides) {\n const swiper = this;\n const { params: params, activeIndex: activeIndex, slidesEl: slidesEl } = swiper;\n let activeIndexBuffer = activeIndex;\n if (params.loop) {\n activeIndexBuffer -= swiper.loopedSlides;\n swiper.loopDestroy();\n swiper.recalcSlides();\n }\n const baseLength = swiper.slides.length;\n if (index <= 0) {\n swiper.prependSlide(slides);\n return;\n }\n if (index >= baseLength) {\n swiper.appendSlide(slides);\n return;\n }\n let newActiveIndex = activeIndexBuffer > index ? activeIndexBuffer + 1 : activeIndexBuffer;\n const slidesBuffer = [];\n for(let i = baseLength - 1; i >= index; i -= 1){\n const currentSlide = swiper.slides[i];\n currentSlide.remove();\n slidesBuffer.unshift(currentSlide);\n }\n if (typeof slides === 'object' && 'length' in slides) {\n for(let i = 0; i < slides.length; i += 1)if (slides[i]) slidesEl.append(slides[i]);\n newActiveIndex = activeIndexBuffer > index ? activeIndexBuffer + slides.length : activeIndexBuffer;\n } else slidesEl.append(slides);\n for(let i = 0; i < slidesBuffer.length; i += 1)slidesEl.append(slidesBuffer[i]);\n swiper.recalcSlides();\n if (params.loop) swiper.loopCreate();\n if (!params.observer || swiper.isElement) swiper.update();\n if (params.loop) swiper.slideTo(newActiveIndex + swiper.loopedSlides, 0, false);\n else swiper.slideTo(newActiveIndex, 0, false);\n}\nfunction $e8eb9c2e5c926b2c$var$removeSlide(slidesIndexes) {\n const swiper = this;\n const { params: params, activeIndex: activeIndex } = swiper;\n let activeIndexBuffer = activeIndex;\n if (params.loop) {\n activeIndexBuffer -= swiper.loopedSlides;\n swiper.loopDestroy();\n }\n let newActiveIndex = activeIndexBuffer;\n let indexToRemove;\n if (typeof slidesIndexes === 'object' && 'length' in slidesIndexes) {\n for(let i = 0; i < slidesIndexes.length; i += 1){\n indexToRemove = slidesIndexes[i];\n if (swiper.slides[indexToRemove]) swiper.slides[indexToRemove].remove();\n if (indexToRemove < newActiveIndex) newActiveIndex -= 1;\n }\n newActiveIndex = Math.max(newActiveIndex, 0);\n } else {\n indexToRemove = slidesIndexes;\n if (swiper.slides[indexToRemove]) swiper.slides[indexToRemove].remove();\n if (indexToRemove < newActiveIndex) newActiveIndex -= 1;\n newActiveIndex = Math.max(newActiveIndex, 0);\n }\n swiper.recalcSlides();\n if (params.loop) swiper.loopCreate();\n if (!params.observer || swiper.isElement) swiper.update();\n if (params.loop) swiper.slideTo(newActiveIndex + swiper.loopedSlides, 0, false);\n else swiper.slideTo(newActiveIndex, 0, false);\n}\nfunction $e8eb9c2e5c926b2c$var$removeAllSlides() {\n const swiper = this;\n const slidesIndexes = [];\n for(let i = 0; i < swiper.slides.length; i += 1)slidesIndexes.push(i);\n swiper.removeSlide(slidesIndexes);\n}\nfunction $e8eb9c2e5c926b2c$export$2e2bcd8739ae039(_ref) {\n let { swiper: swiper } = _ref;\n Object.assign(swiper, {\n appendSlide: $e8eb9c2e5c926b2c$var$appendSlide.bind(swiper),\n prependSlide: $e8eb9c2e5c926b2c$var$prependSlide.bind(swiper),\n addSlide: $e8eb9c2e5c926b2c$var$addSlide.bind(swiper),\n removeSlide: $e8eb9c2e5c926b2c$var$removeSlide.bind(swiper),\n removeAllSlides: $e8eb9c2e5c926b2c$var$removeAllSlides.bind(swiper)\n });\n}\n\n\nfunction $ce39167a9c5549e3$export$f1e1789686576879(params) {\n const { effect: effect, swiper: swiper, on: on, setTranslate: setTranslate, setTransition: setTransition, overwriteParams: overwriteParams, perspective: perspective, recreateShadows: recreateShadows, getEffectParams: getEffectParams } = params;\n on('beforeInit', ()=>{\n if (swiper.params.effect !== effect) return;\n swiper.classNames.push(`${swiper.params.containerModifierClass}${effect}`);\n if (perspective && perspective()) swiper.classNames.push(`${swiper.params.containerModifierClass}3d`);\n const overwriteParamsResult = overwriteParams ? overwriteParams() : {};\n Object.assign(swiper.params, overwriteParamsResult);\n Object.assign(swiper.originalParams, overwriteParamsResult);\n });\n on('setTranslate _virtualUpdated', ()=>{\n if (swiper.params.effect !== effect) return;\n setTranslate();\n });\n on('setTransition', (_s, duration)=>{\n if (swiper.params.effect !== effect) return;\n setTransition(duration);\n });\n on('transitionEnd', ()=>{\n if (swiper.params.effect !== effect) return;\n if (recreateShadows) {\n if (!getEffectParams || !getEffectParams().slideShadows) return;\n // remove shadows\n swiper.slides.forEach((slideEl)=>{\n slideEl.querySelectorAll('.swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left').forEach((shadowEl)=>shadowEl.remove());\n });\n // create new one\n recreateShadows();\n }\n });\n let requireUpdateOnVirtual;\n on('virtualUpdate', ()=>{\n if (swiper.params.effect !== effect) return;\n if (!swiper.slides.length) requireUpdateOnVirtual = true;\n requestAnimationFrame(()=>{\n if (requireUpdateOnVirtual && swiper.slides && swiper.slides.length) {\n setTranslate();\n requireUpdateOnVirtual = false;\n }\n });\n });\n}\n\n\n\nfunction $1edc75782959477e$export$f1e1789686576879(effectParams, slideEl) {\n const transformEl = (0, $3e0e2b092da8f124$export$39b482c5e57630a8)(slideEl);\n if (transformEl !== slideEl) {\n transformEl.style.backfaceVisibility = 'hidden';\n transformEl.style['-webkit-backface-visibility'] = 'hidden';\n }\n return transformEl;\n}\n\n\n\nfunction $3ea27eb365069d23$export$f1e1789686576879(_ref) {\n let { swiper: swiper, duration: duration, transformElements: transformElements, allSlides: allSlides } = _ref;\n const { activeIndex: activeIndex } = swiper;\n const getSlide = (el)=>{\n if (!el.parentElement) {\n // assume shadow root\n const slide = swiper.slides.find((slideEl)=>slideEl.shadowRoot && slideEl.shadowRoot === el.parentNode);\n return slide;\n }\n return el.parentElement;\n };\n if (swiper.params.virtualTranslate && duration !== 0) {\n let eventTriggered = false;\n let transitionEndTarget;\n if (allSlides) transitionEndTarget = transformElements;\n else transitionEndTarget = transformElements.filter((transformEl)=>{\n const el = transformEl.classList.contains('swiper-slide-transform') ? getSlide(transformEl) : transformEl;\n return swiper.getSlideIndex(el) === activeIndex;\n });\n transitionEndTarget.forEach((el)=>{\n (0, $3e0e2b092da8f124$export$882b5998b3b9117c)(el, ()=>{\n if (eventTriggered) return;\n if (!swiper || swiper.destroyed) return;\n eventTriggered = true;\n swiper.animating = false;\n const evt = new window.CustomEvent('transitionend', {\n bubbles: true,\n cancelable: true\n });\n swiper.wrapperEl.dispatchEvent(evt);\n });\n });\n }\n}\n\n\n\nfunction $ed89a1cd6005d986$export$2e2bcd8739ae039(_ref) {\n let { swiper: swiper, extendParams: extendParams, on: on } = _ref;\n extendParams({\n fadeEffect: {\n crossFade: false\n }\n });\n const setTranslate = ()=>{\n const { slides: slides } = swiper;\n const params = swiper.params.fadeEffect;\n for(let i = 0; i < slides.length; i += 1){\n const slideEl = swiper.slides[i];\n const offset = slideEl.swiperSlideOffset;\n let tx = -offset;\n if (!swiper.params.virtualTranslate) tx -= swiper.translate;\n let ty = 0;\n if (!swiper.isHorizontal()) {\n ty = tx;\n tx = 0;\n }\n const slideOpacity = swiper.params.fadeEffect.crossFade ? Math.max(1 - Math.abs(slideEl.progress), 0) : 1 + Math.min(Math.max(slideEl.progress, -1), 0);\n const targetEl = (0, $1edc75782959477e$export$f1e1789686576879)(params, slideEl);\n targetEl.style.opacity = slideOpacity;\n targetEl.style.transform = `translate3d(${tx}px, ${ty}px, 0px)`;\n }\n };\n const setTransition = (duration)=>{\n const transformElements = swiper.slides.map((slideEl)=>(0, $3e0e2b092da8f124$export$39b482c5e57630a8)(slideEl));\n transformElements.forEach((el)=>{\n el.style.transitionDuration = `${duration}ms`;\n });\n (0, $3ea27eb365069d23$export$f1e1789686576879)({\n swiper: swiper,\n duration: duration,\n transformElements: transformElements,\n allSlides: true\n });\n };\n (0, $ce39167a9c5549e3$export$f1e1789686576879)({\n effect: 'fade',\n swiper: swiper,\n on: on,\n setTranslate: setTranslate,\n setTransition: setTransition,\n overwriteParams: ()=>({\n slidesPerView: 1,\n slidesPerGroup: 1,\n watchSlidesProgress: true,\n spaceBetween: 0,\n virtualTranslate: !swiper.params.cssMode\n })\n });\n}\n\n\n\n\nfunction $75984ef6f5fe27b6$export$2e2bcd8739ae039(_ref) {\n let { swiper: swiper, extendParams: extendParams, on: on } = _ref;\n extendParams({\n cubeEffect: {\n slideShadows: true,\n shadow: true,\n shadowOffset: 20,\n shadowScale: 0.94\n }\n });\n const createSlideShadows = (slideEl, progress, isHorizontal)=>{\n let shadowBefore = isHorizontal ? slideEl.querySelector('.swiper-slide-shadow-left') : slideEl.querySelector('.swiper-slide-shadow-top');\n let shadowAfter = isHorizontal ? slideEl.querySelector('.swiper-slide-shadow-right') : slideEl.querySelector('.swiper-slide-shadow-bottom');\n if (!shadowBefore) {\n shadowBefore = (0, $3e0e2b092da8f124$export$db3b6bfb95261072)('div', `swiper-slide-shadow-cube swiper-slide-shadow-${isHorizontal ? 'left' : 'top'}`.split(' '));\n slideEl.append(shadowBefore);\n }\n if (!shadowAfter) {\n shadowAfter = (0, $3e0e2b092da8f124$export$db3b6bfb95261072)('div', `swiper-slide-shadow-cube swiper-slide-shadow-${isHorizontal ? 'right' : 'bottom'}`.split(' '));\n slideEl.append(shadowAfter);\n }\n if (shadowBefore) shadowBefore.style.opacity = Math.max(-progress, 0);\n if (shadowAfter) shadowAfter.style.opacity = Math.max(progress, 0);\n };\n const recreateShadows = ()=>{\n // create new ones\n const isHorizontal = swiper.isHorizontal();\n swiper.slides.forEach((slideEl)=>{\n const progress = Math.max(Math.min(slideEl.progress, 1), -1);\n createSlideShadows(slideEl, progress, isHorizontal);\n });\n };\n const setTranslate = ()=>{\n const { el: el, wrapperEl: wrapperEl, slides: slides, width: swiperWidth, height: swiperHeight, rtlTranslate: rtl, size: swiperSize, browser: browser } = swiper;\n const r = (0, $3e0e2b092da8f124$export$ffb5f4729a158638)(swiper);\n const params = swiper.params.cubeEffect;\n const isHorizontal = swiper.isHorizontal();\n const isVirtual = swiper.virtual && swiper.params.virtual.enabled;\n let wrapperRotate = 0;\n let cubeShadowEl;\n if (params.shadow) {\n if (isHorizontal) {\n cubeShadowEl = swiper.wrapperEl.querySelector('.swiper-cube-shadow');\n if (!cubeShadowEl) {\n cubeShadowEl = (0, $3e0e2b092da8f124$export$db3b6bfb95261072)('div', 'swiper-cube-shadow');\n swiper.wrapperEl.append(cubeShadowEl);\n }\n cubeShadowEl.style.height = `${swiperWidth}px`;\n } else {\n cubeShadowEl = el.querySelector('.swiper-cube-shadow');\n if (!cubeShadowEl) {\n cubeShadowEl = (0, $3e0e2b092da8f124$export$db3b6bfb95261072)('div', 'swiper-cube-shadow');\n el.append(cubeShadowEl);\n }\n }\n }\n for(let i = 0; i < slides.length; i += 1){\n const slideEl = slides[i];\n let slideIndex = i;\n if (isVirtual) slideIndex = parseInt(slideEl.getAttribute('data-swiper-slide-index'), 10);\n let slideAngle = slideIndex * 90;\n let round = Math.floor(slideAngle / 360);\n if (rtl) {\n slideAngle = -slideAngle;\n round = Math.floor(-slideAngle / 360);\n }\n const progress = Math.max(Math.min(slideEl.progress, 1), -1);\n let tx = 0;\n let ty = 0;\n let tz = 0;\n if (slideIndex % 4 === 0) {\n tx = -round * 4 * swiperSize;\n tz = 0;\n } else if ((slideIndex - 1) % 4 === 0) {\n tx = 0;\n tz = -round * 4 * swiperSize;\n } else if ((slideIndex - 2) % 4 === 0) {\n tx = swiperSize + round * 4 * swiperSize;\n tz = swiperSize;\n } else if ((slideIndex - 3) % 4 === 0) {\n tx = -swiperSize;\n tz = 3 * swiperSize + swiperSize * 4 * round;\n }\n if (rtl) tx = -tx;\n if (!isHorizontal) {\n ty = tx;\n tx = 0;\n }\n const transform = `rotateX(${r(isHorizontal ? 0 : -slideAngle)}deg) rotateY(${r(isHorizontal ? slideAngle : 0)}deg) translate3d(${tx}px, ${ty}px, ${tz}px)`;\n if (progress <= 1 && progress > -1) {\n wrapperRotate = slideIndex * 90 + progress * 90;\n if (rtl) wrapperRotate = -slideIndex * 90 - progress * 90;\n }\n slideEl.style.transform = transform;\n if (params.slideShadows) createSlideShadows(slideEl, progress, isHorizontal);\n }\n wrapperEl.style.transformOrigin = `50% 50% -${swiperSize / 2}px`;\n wrapperEl.style['-webkit-transform-origin'] = `50% 50% -${swiperSize / 2}px`;\n if (params.shadow) {\n if (isHorizontal) cubeShadowEl.style.transform = `translate3d(0px, ${swiperWidth / 2 + params.shadowOffset}px, ${-swiperWidth / 2}px) rotateX(89.99deg) rotateZ(0deg) scale(${params.shadowScale})`;\n else {\n const shadowAngle = Math.abs(wrapperRotate) - Math.floor(Math.abs(wrapperRotate) / 90) * 90;\n const multiplier = 1.5 - (Math.sin(shadowAngle * 2 * Math.PI / 360) / 2 + Math.cos(shadowAngle * 2 * Math.PI / 360) / 2);\n const scale1 = params.shadowScale;\n const scale2 = params.shadowScale / multiplier;\n const offset = params.shadowOffset;\n cubeShadowEl.style.transform = `scale3d(${scale1}, 1, ${scale2}) translate3d(0px, ${swiperHeight / 2 + offset}px, ${-swiperHeight / 2 / scale2}px) rotateX(-89.99deg)`;\n }\n }\n const zFactor = (browser.isSafari || browser.isWebView) && browser.needPerspectiveFix ? -swiperSize / 2 : 0;\n wrapperEl.style.transform = `translate3d(0px,0,${zFactor}px) rotateX(${r(swiper.isHorizontal() ? 0 : wrapperRotate)}deg) rotateY(${r(swiper.isHorizontal() ? -wrapperRotate : 0)}deg)`;\n wrapperEl.style.setProperty('--swiper-cube-translate-z', `${zFactor}px`);\n };\n const setTransition = (duration)=>{\n const { el: el, slides: slides } = swiper;\n slides.forEach((slideEl)=>{\n slideEl.style.transitionDuration = `${duration}ms`;\n slideEl.querySelectorAll('.swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left').forEach((subEl)=>{\n subEl.style.transitionDuration = `${duration}ms`;\n });\n });\n if (swiper.params.cubeEffect.shadow && !swiper.isHorizontal()) {\n const shadowEl = el.querySelector('.swiper-cube-shadow');\n if (shadowEl) shadowEl.style.transitionDuration = `${duration}ms`;\n }\n };\n (0, $ce39167a9c5549e3$export$f1e1789686576879)({\n effect: 'cube',\n swiper: swiper,\n on: on,\n setTranslate: setTranslate,\n setTransition: setTransition,\n recreateShadows: recreateShadows,\n getEffectParams: ()=>swiper.params.cubeEffect,\n perspective: ()=>true,\n overwriteParams: ()=>({\n slidesPerView: 1,\n slidesPerGroup: 1,\n watchSlidesProgress: true,\n resistanceRatio: 0,\n spaceBetween: 0,\n centeredSlides: false,\n virtualTranslate: true\n })\n });\n}\n\n\n\nfunction $4dfb92d69cb8a433$export$db3b6bfb95261072(suffix, slideEl, side) {\n const shadowClass = `swiper-slide-shadow${side ? `-${side}` : ''}${suffix ? ` swiper-slide-shadow-${suffix}` : ''}`;\n const shadowContainer = (0, $3e0e2b092da8f124$export$39b482c5e57630a8)(slideEl);\n let shadowEl = shadowContainer.querySelector(`.${shadowClass.split(' ').join('.')}`);\n if (!shadowEl) {\n shadowEl = (0, $3e0e2b092da8f124$export$db3b6bfb95261072)('div', shadowClass.split(' '));\n shadowContainer.append(shadowEl);\n }\n return shadowEl;\n}\n\n\n\n\n\n\nfunction $7a3c30fafac582ff$export$2e2bcd8739ae039(_ref) {\n let { swiper: swiper, extendParams: extendParams, on: on } = _ref;\n extendParams({\n flipEffect: {\n slideShadows: true,\n limitRotation: true\n }\n });\n const createSlideShadows = (slideEl, progress)=>{\n let shadowBefore = swiper.isHorizontal() ? slideEl.querySelector('.swiper-slide-shadow-left') : slideEl.querySelector('.swiper-slide-shadow-top');\n let shadowAfter = swiper.isHorizontal() ? slideEl.querySelector('.swiper-slide-shadow-right') : slideEl.querySelector('.swiper-slide-shadow-bottom');\n if (!shadowBefore) shadowBefore = (0, $4dfb92d69cb8a433$export$db3b6bfb95261072)('flip', slideEl, swiper.isHorizontal() ? 'left' : 'top');\n if (!shadowAfter) shadowAfter = (0, $4dfb92d69cb8a433$export$db3b6bfb95261072)('flip', slideEl, swiper.isHorizontal() ? 'right' : 'bottom');\n if (shadowBefore) shadowBefore.style.opacity = Math.max(-progress, 0);\n if (shadowAfter) shadowAfter.style.opacity = Math.max(progress, 0);\n };\n const recreateShadows = ()=>{\n // Set shadows\n swiper.params.flipEffect;\n swiper.slides.forEach((slideEl)=>{\n let progress = slideEl.progress;\n if (swiper.params.flipEffect.limitRotation) progress = Math.max(Math.min(slideEl.progress, 1), -1);\n createSlideShadows(slideEl, progress);\n });\n };\n const setTranslate = ()=>{\n const { slides: slides, rtlTranslate: rtl } = swiper;\n const params = swiper.params.flipEffect;\n const rotateFix = (0, $3e0e2b092da8f124$export$ffb5f4729a158638)(swiper);\n for(let i = 0; i < slides.length; i += 1){\n const slideEl = slides[i];\n let progress = slideEl.progress;\n if (swiper.params.flipEffect.limitRotation) progress = Math.max(Math.min(slideEl.progress, 1), -1);\n const offset = slideEl.swiperSlideOffset;\n const rotate = -180 * progress;\n let rotateY = rotate;\n let rotateX = 0;\n let tx = swiper.params.cssMode ? -offset - swiper.translate : -offset;\n let ty = 0;\n if (!swiper.isHorizontal()) {\n ty = tx;\n tx = 0;\n rotateX = -rotateY;\n rotateY = 0;\n } else if (rtl) rotateY = -rotateY;\n slideEl.style.zIndex = -Math.abs(Math.round(progress)) + slides.length;\n if (params.slideShadows) createSlideShadows(slideEl, progress);\n const transform = `translate3d(${tx}px, ${ty}px, 0px) rotateX(${rotateFix(rotateX)}deg) rotateY(${rotateFix(rotateY)}deg)`;\n const targetEl = (0, $1edc75782959477e$export$f1e1789686576879)(params, slideEl);\n targetEl.style.transform = transform;\n }\n };\n const setTransition = (duration)=>{\n const transformElements = swiper.slides.map((slideEl)=>(0, $3e0e2b092da8f124$export$39b482c5e57630a8)(slideEl));\n transformElements.forEach((el)=>{\n el.style.transitionDuration = `${duration}ms`;\n el.querySelectorAll('.swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left').forEach((shadowEl)=>{\n shadowEl.style.transitionDuration = `${duration}ms`;\n });\n });\n (0, $3ea27eb365069d23$export$f1e1789686576879)({\n swiper: swiper,\n duration: duration,\n transformElements: transformElements\n });\n };\n (0, $ce39167a9c5549e3$export$f1e1789686576879)({\n effect: 'flip',\n swiper: swiper,\n on: on,\n setTranslate: setTranslate,\n setTransition: setTransition,\n recreateShadows: recreateShadows,\n getEffectParams: ()=>swiper.params.flipEffect,\n perspective: ()=>true,\n overwriteParams: ()=>({\n slidesPerView: 1,\n slidesPerGroup: 1,\n watchSlidesProgress: true,\n spaceBetween: 0,\n virtualTranslate: !swiper.params.cssMode\n })\n });\n}\n\n\n\n\n\n\nfunction $8b7378894c192c44$export$2e2bcd8739ae039(_ref) {\n let { swiper: swiper, extendParams: extendParams, on: on } = _ref;\n extendParams({\n coverflowEffect: {\n rotate: 50,\n stretch: 0,\n depth: 100,\n scale: 1,\n modifier: 1,\n slideShadows: true\n }\n });\n const setTranslate = ()=>{\n const { width: swiperWidth, height: swiperHeight, slides: slides, slidesSizesGrid: slidesSizesGrid } = swiper;\n const params = swiper.params.coverflowEffect;\n const isHorizontal = swiper.isHorizontal();\n const transform = swiper.translate;\n const center = isHorizontal ? -transform + swiperWidth / 2 : -transform + swiperHeight / 2;\n const rotate = isHorizontal ? params.rotate : -params.rotate;\n const translate = params.depth;\n const r = (0, $3e0e2b092da8f124$export$ffb5f4729a158638)(swiper);\n // Each slide offset from center\n for(let i = 0, length = slides.length; i < length; i += 1){\n const slideEl = slides[i];\n const slideSize = slidesSizesGrid[i];\n const slideOffset = slideEl.swiperSlideOffset;\n const centerOffset = (center - slideOffset - slideSize / 2) / slideSize;\n const offsetMultiplier = typeof params.modifier === 'function' ? params.modifier(centerOffset) : centerOffset * params.modifier;\n let rotateY = isHorizontal ? rotate * offsetMultiplier : 0;\n let rotateX = isHorizontal ? 0 : rotate * offsetMultiplier;\n // var rotateZ = 0\n let translateZ = -translate * Math.abs(offsetMultiplier);\n let stretch = params.stretch;\n // Allow percentage to make a relative stretch for responsive sliders\n if (typeof stretch === 'string' && stretch.indexOf('%') !== -1) stretch = parseFloat(params.stretch) / 100 * slideSize;\n let translateY = isHorizontal ? 0 : stretch * offsetMultiplier;\n let translateX = isHorizontal ? stretch * offsetMultiplier : 0;\n let scale = 1 - (1 - params.scale) * Math.abs(offsetMultiplier);\n // Fix for ultra small values\n if (Math.abs(translateX) < 0.001) translateX = 0;\n if (Math.abs(translateY) < 0.001) translateY = 0;\n if (Math.abs(translateZ) < 0.001) translateZ = 0;\n if (Math.abs(rotateY) < 0.001) rotateY = 0;\n if (Math.abs(rotateX) < 0.001) rotateX = 0;\n if (Math.abs(scale) < 0.001) scale = 0;\n const slideTransform = `translate3d(${translateX}px,${translateY}px,${translateZ}px) rotateX(${r(rotateX)}deg) rotateY(${r(rotateY)}deg) scale(${scale})`;\n const targetEl = (0, $1edc75782959477e$export$f1e1789686576879)(params, slideEl);\n targetEl.style.transform = slideTransform;\n slideEl.style.zIndex = -Math.abs(Math.round(offsetMultiplier)) + 1;\n if (params.slideShadows) {\n // Set shadows\n let shadowBeforeEl = isHorizontal ? slideEl.querySelector('.swiper-slide-shadow-left') : slideEl.querySelector('.swiper-slide-shadow-top');\n let shadowAfterEl = isHorizontal ? slideEl.querySelector('.swiper-slide-shadow-right') : slideEl.querySelector('.swiper-slide-shadow-bottom');\n if (!shadowBeforeEl) shadowBeforeEl = (0, $4dfb92d69cb8a433$export$db3b6bfb95261072)('coverflow', slideEl, isHorizontal ? 'left' : 'top');\n if (!shadowAfterEl) shadowAfterEl = (0, $4dfb92d69cb8a433$export$db3b6bfb95261072)('coverflow', slideEl, isHorizontal ? 'right' : 'bottom');\n if (shadowBeforeEl) shadowBeforeEl.style.opacity = offsetMultiplier > 0 ? offsetMultiplier : 0;\n if (shadowAfterEl) shadowAfterEl.style.opacity = -offsetMultiplier > 0 ? -offsetMultiplier : 0;\n }\n }\n };\n const setTransition = (duration)=>{\n const transformElements = swiper.slides.map((slideEl)=>(0, $3e0e2b092da8f124$export$39b482c5e57630a8)(slideEl));\n transformElements.forEach((el)=>{\n el.style.transitionDuration = `${duration}ms`;\n el.querySelectorAll('.swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left').forEach((shadowEl)=>{\n shadowEl.style.transitionDuration = `${duration}ms`;\n });\n });\n };\n (0, $ce39167a9c5549e3$export$f1e1789686576879)({\n effect: 'coverflow',\n swiper: swiper,\n on: on,\n setTranslate: setTranslate,\n setTransition: setTransition,\n perspective: ()=>true,\n overwriteParams: ()=>({\n watchSlidesProgress: true\n })\n });\n}\n\n\n\n\n\n\n\nfunction $9406c03f7fbaac7d$export$2e2bcd8739ae039(_ref) {\n let { swiper: swiper, extendParams: extendParams, on: on } = _ref;\n extendParams({\n creativeEffect: {\n limitProgress: 1,\n shadowPerProgress: false,\n progressMultiplier: 1,\n perspective: true,\n prev: {\n translate: [\n 0,\n 0,\n 0\n ],\n rotate: [\n 0,\n 0,\n 0\n ],\n opacity: 1,\n scale: 1\n },\n next: {\n translate: [\n 0,\n 0,\n 0\n ],\n rotate: [\n 0,\n 0,\n 0\n ],\n opacity: 1,\n scale: 1\n }\n }\n });\n const getTranslateValue = (value)=>{\n if (typeof value === 'string') return value;\n return `${value}px`;\n };\n const setTranslate = ()=>{\n const { slides: slides, wrapperEl: wrapperEl, slidesSizesGrid: slidesSizesGrid } = swiper;\n const params = swiper.params.creativeEffect;\n const { progressMultiplier: multiplier } = params;\n const isCenteredSlides = swiper.params.centeredSlides;\n const rotateFix = (0, $3e0e2b092da8f124$export$ffb5f4729a158638)(swiper);\n if (isCenteredSlides) {\n const margin = slidesSizesGrid[0] / 2 - swiper.params.slidesOffsetBefore || 0;\n wrapperEl.style.transform = `translateX(calc(50% - ${margin}px))`;\n }\n for(let i = 0; i < slides.length; i += 1){\n const slideEl = slides[i];\n const slideProgress = slideEl.progress;\n const progress = Math.min(Math.max(slideEl.progress, -params.limitProgress), params.limitProgress);\n let originalProgress = progress;\n if (!isCenteredSlides) originalProgress = Math.min(Math.max(slideEl.originalProgress, -params.limitProgress), params.limitProgress);\n const offset = slideEl.swiperSlideOffset;\n const t = [\n swiper.params.cssMode ? -offset - swiper.translate : -offset,\n 0,\n 0\n ];\n const r = [\n 0,\n 0,\n 0\n ];\n let custom = false;\n if (!swiper.isHorizontal()) {\n t[1] = t[0];\n t[0] = 0;\n }\n let data = {\n translate: [\n 0,\n 0,\n 0\n ],\n rotate: [\n 0,\n 0,\n 0\n ],\n scale: 1,\n opacity: 1\n };\n if (progress < 0) {\n data = params.next;\n custom = true;\n } else if (progress > 0) {\n data = params.prev;\n custom = true;\n }\n // set translate\n t.forEach((value, index)=>{\n t[index] = `calc(${value}px + (${getTranslateValue(data.translate[index])} * ${Math.abs(progress * multiplier)}))`;\n });\n // set rotates\n r.forEach((value, index)=>{\n let val = data.rotate[index] * Math.abs(progress * multiplier);\n r[index] = val;\n });\n slideEl.style.zIndex = -Math.abs(Math.round(slideProgress)) + slides.length;\n const translateString = t.join(', ');\n const rotateString = `rotateX(${rotateFix(r[0])}deg) rotateY(${rotateFix(r[1])}deg) rotateZ(${rotateFix(r[2])}deg)`;\n const scaleString = originalProgress < 0 ? `scale(${1 + (1 - data.scale) * originalProgress * multiplier})` : `scale(${1 - (1 - data.scale) * originalProgress * multiplier})`;\n const opacityString = originalProgress < 0 ? 1 + (1 - data.opacity) * originalProgress * multiplier : 1 - (1 - data.opacity) * originalProgress * multiplier;\n const transform = `translate3d(${translateString}) ${rotateString} ${scaleString}`;\n // Set shadows\n if (custom && data.shadow || !custom) {\n let shadowEl = slideEl.querySelector('.swiper-slide-shadow');\n if (!shadowEl && data.shadow) shadowEl = (0, $4dfb92d69cb8a433$export$db3b6bfb95261072)('creative', slideEl);\n if (shadowEl) {\n const shadowOpacity = params.shadowPerProgress ? progress * (1 / params.limitProgress) : progress;\n shadowEl.style.opacity = Math.min(Math.max(Math.abs(shadowOpacity), 0), 1);\n }\n }\n const targetEl = (0, $1edc75782959477e$export$f1e1789686576879)(params, slideEl);\n targetEl.style.transform = transform;\n targetEl.style.opacity = opacityString;\n if (data.origin) targetEl.style.transformOrigin = data.origin;\n }\n };\n const setTransition = (duration)=>{\n const transformElements = swiper.slides.map((slideEl)=>(0, $3e0e2b092da8f124$export$39b482c5e57630a8)(slideEl));\n transformElements.forEach((el)=>{\n el.style.transitionDuration = `${duration}ms`;\n el.querySelectorAll('.swiper-slide-shadow').forEach((shadowEl)=>{\n shadowEl.style.transitionDuration = `${duration}ms`;\n });\n });\n (0, $3ea27eb365069d23$export$f1e1789686576879)({\n swiper: swiper,\n duration: duration,\n transformElements: transformElements,\n allSlides: true\n });\n };\n (0, $ce39167a9c5549e3$export$f1e1789686576879)({\n effect: 'creative',\n swiper: swiper,\n on: on,\n setTranslate: setTranslate,\n setTransition: setTransition,\n perspective: ()=>swiper.params.creativeEffect.perspective,\n overwriteParams: ()=>({\n watchSlidesProgress: true,\n virtualTranslate: !swiper.params.cssMode\n })\n });\n}\n\n\n\n\n\n\n\nfunction $ccd0a7134d1e48e4$export$2e2bcd8739ae039(_ref) {\n let { swiper: swiper, extendParams: extendParams, on: on } = _ref;\n extendParams({\n cardsEffect: {\n slideShadows: true,\n rotate: true,\n perSlideRotate: 2,\n perSlideOffset: 8\n }\n });\n const setTranslate = ()=>{\n const { slides: slides, activeIndex: activeIndex, rtlTranslate: rtl } = swiper;\n const params = swiper.params.cardsEffect;\n const { startTranslate: startTranslate, isTouched: isTouched } = swiper.touchEventsData;\n const currentTranslate = rtl ? -swiper.translate : swiper.translate;\n for(let i = 0; i < slides.length; i += 1){\n const slideEl = slides[i];\n const slideProgress = slideEl.progress;\n const progress = Math.min(Math.max(slideProgress, -4), 4);\n let offset = slideEl.swiperSlideOffset;\n if (swiper.params.centeredSlides && !swiper.params.cssMode) swiper.wrapperEl.style.transform = `translateX(${swiper.minTranslate()}px)`;\n if (swiper.params.centeredSlides && swiper.params.cssMode) offset -= slides[0].swiperSlideOffset;\n let tX = swiper.params.cssMode ? -offset - swiper.translate : -offset;\n let tY = 0;\n const tZ = -100 * Math.abs(progress);\n let scale = 1;\n let rotate = -params.perSlideRotate * progress;\n let tXAdd = params.perSlideOffset - Math.abs(progress) * 0.75;\n const slideIndex = swiper.virtual && swiper.params.virtual.enabled ? swiper.virtual.from + i : i;\n const isSwipeToNext = (slideIndex === activeIndex || slideIndex === activeIndex - 1) && progress > 0 && progress < 1 && (isTouched || swiper.params.cssMode) && currentTranslate < startTranslate;\n const isSwipeToPrev = (slideIndex === activeIndex || slideIndex === activeIndex + 1) && progress < 0 && progress > -1 && (isTouched || swiper.params.cssMode) && currentTranslate > startTranslate;\n if (isSwipeToNext || isSwipeToPrev) {\n const subProgress = (1 - Math.abs((Math.abs(progress) - 0.5) / 0.5)) ** 0.5;\n rotate += -28 * progress * subProgress;\n scale += -0.5 * subProgress;\n tXAdd += 96 * subProgress;\n tY = `${-25 * subProgress * Math.abs(progress)}%`;\n }\n if (progress < 0) // next\n tX = `calc(${tX}px ${rtl ? '-' : '+'} (${tXAdd * Math.abs(progress)}%))`;\n else if (progress > 0) // prev\n tX = `calc(${tX}px ${rtl ? '-' : '+'} (-${tXAdd * Math.abs(progress)}%))`;\n else tX = `${tX}px`;\n if (!swiper.isHorizontal()) {\n const prevY = tY;\n tY = tX;\n tX = prevY;\n }\n const scaleString = progress < 0 ? `${1 + (1 - scale) * progress}` : `${1 - (1 - scale) * progress}`;\n /* eslint-disable */ const transform = `\n translate3d(${tX}, ${tY}, ${tZ}px)\n rotateZ(${params.rotate ? rtl ? -rotate : rotate : 0}deg)\n scale(${scaleString})\n `;\n /* eslint-enable */ if (params.slideShadows) {\n // Set shadows\n let shadowEl = slideEl.querySelector('.swiper-slide-shadow');\n if (!shadowEl) shadowEl = (0, $4dfb92d69cb8a433$export$db3b6bfb95261072)('cards', slideEl);\n if (shadowEl) shadowEl.style.opacity = Math.min(Math.max((Math.abs(progress) - 0.5) / 0.5, 0), 1);\n }\n slideEl.style.zIndex = -Math.abs(Math.round(slideProgress)) + slides.length;\n const targetEl = (0, $1edc75782959477e$export$f1e1789686576879)(params, slideEl);\n targetEl.style.transform = transform;\n }\n };\n const setTransition = (duration)=>{\n const transformElements = swiper.slides.map((slideEl)=>(0, $3e0e2b092da8f124$export$39b482c5e57630a8)(slideEl));\n transformElements.forEach((el)=>{\n el.style.transitionDuration = `${duration}ms`;\n el.querySelectorAll('.swiper-slide-shadow').forEach((shadowEl)=>{\n shadowEl.style.transitionDuration = `${duration}ms`;\n });\n });\n (0, $3ea27eb365069d23$export$f1e1789686576879)({\n swiper: swiper,\n duration: duration,\n transformElements: transformElements\n });\n };\n (0, $ce39167a9c5549e3$export$f1e1789686576879)({\n effect: 'cards',\n swiper: swiper,\n on: on,\n setTranslate: setTranslate,\n setTransition: setTransition,\n perspective: ()=>true,\n overwriteParams: ()=>({\n _loopSwapReset: false,\n watchSlidesProgress: true,\n loopAdditionalSlides: swiper.params.cardsEffect.rotate ? 3 : 2,\n centeredSlides: true,\n virtualTranslate: !swiper.params.cssMode\n })\n });\n}\n\n\n\n\n/**\n * Swiper 11.2.7\n * Most modern mobile touch slider and framework with hardware accelerated transitions\n * https://swiperjs.com\n *\n * Copyright 2014-2025 Vladimir Kharlampidi\n *\n * Released under the MIT License\n *\n * Released on: May 19, 2025\n */ \n\nlet $6946bfb4689eabba$var$support;\nfunction $6946bfb4689eabba$var$calcSupport() {\n const window1 = (0, $768c2f4c151a0363$export$407448d2b89b1813)();\n const document1 = (0, $768c2f4c151a0363$export$39b482c5e57630a8)();\n return {\n smoothScroll: document1.documentElement && document1.documentElement.style && 'scrollBehavior' in document1.documentElement.style,\n touch: !!('ontouchstart' in window1 || window1.DocumentTouch && document1 instanceof window1.DocumentTouch)\n };\n}\nfunction $6946bfb4689eabba$var$getSupport() {\n if (!$6946bfb4689eabba$var$support) $6946bfb4689eabba$var$support = $6946bfb4689eabba$var$calcSupport();\n return $6946bfb4689eabba$var$support;\n}\nlet $6946bfb4689eabba$var$deviceCached;\nfunction $6946bfb4689eabba$var$calcDevice(_temp) {\n let { userAgent: userAgent } = _temp === void 0 ? {} : _temp;\n const support = $6946bfb4689eabba$var$getSupport();\n const window1 = (0, $768c2f4c151a0363$export$407448d2b89b1813)();\n const platform = window1.navigator.platform;\n const ua = userAgent || window1.navigator.userAgent;\n const device = {\n ios: false,\n android: false\n };\n const screenWidth = window1.screen.width;\n const screenHeight = window1.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 // iPadOs 13 fix\n const iPadScreens = [\n '1024x1366',\n '1366x1024',\n '834x1194',\n '1194x834',\n '834x1112',\n '1112x834',\n '768x1024',\n '1024x768',\n '820x1180',\n '1180x820',\n '810x1080',\n '1080x810'\n ];\n if (!ipad && macos && support.touch && iPadScreens.indexOf(`${screenWidth}x${screenHeight}`) >= 0) {\n ipad = ua.match(/(Version)\\/([\\d.]+)/);\n if (!ipad) ipad = [\n 0,\n 1,\n '13_0_0'\n ];\n macos = false;\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 // Export object\n return device;\n}\nfunction $6946bfb4689eabba$var$getDevice(overrides) {\n if (overrides === void 0) overrides = {};\n if (!$6946bfb4689eabba$var$deviceCached) $6946bfb4689eabba$var$deviceCached = $6946bfb4689eabba$var$calcDevice(overrides);\n return $6946bfb4689eabba$var$deviceCached;\n}\nlet $6946bfb4689eabba$var$browser;\nfunction $6946bfb4689eabba$var$calcBrowser() {\n const window1 = (0, $768c2f4c151a0363$export$407448d2b89b1813)();\n const device = $6946bfb4689eabba$var$getDevice();\n let needPerspectiveFix = false;\n function isSafari() {\n const ua = window1.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(window1.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 const isWebView = /(iPhone|iPod|iPad).*AppleWebKit(?!.*Safari)/i.test(window1.navigator.userAgent);\n const isSafariBrowser = isSafari();\n const need3dFix = isSafariBrowser || isWebView && device.ios;\n return {\n isSafari: needPerspectiveFix || isSafariBrowser,\n needPerspectiveFix: needPerspectiveFix,\n need3dFix: need3dFix,\n isWebView: isWebView\n };\n}\nfunction $6946bfb4689eabba$var$getBrowser() {\n if (!$6946bfb4689eabba$var$browser) $6946bfb4689eabba$var$browser = $6946bfb4689eabba$var$calcBrowser();\n return $6946bfb4689eabba$var$browser;\n}\nfunction $6946bfb4689eabba$var$Resize(_ref) {\n let { swiper: swiper, on: on, emit: emit } = _ref;\n const window1 = (0, $768c2f4c151a0363$export$407448d2b89b1813)();\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 = window1.requestAnimationFrame(()=>{\n const { width: width, height: height } = swiper;\n let newWidth = width;\n let newHeight = height;\n entries.forEach((_ref2)=>{\n let { contentBoxSize: contentBoxSize, contentRect: contentRect, target: target } = _ref2;\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) resizeHandler();\n });\n });\n observer.observe(swiper.el);\n };\n const removeObserver = ()=>{\n if (animationFrame) window1.cancelAnimationFrame(animationFrame);\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 window1.ResizeObserver !== 'undefined') {\n createObserver();\n return;\n }\n window1.addEventListener('resize', resizeHandler);\n window1.addEventListener('orientationchange', orientationChangeHandler);\n });\n on('destroy', ()=>{\n removeObserver();\n window1.removeEventListener('resize', resizeHandler);\n window1.removeEventListener('orientationchange', orientationChangeHandler);\n });\n}\nfunction $6946bfb4689eabba$var$Observer(_ref) {\n let { swiper: swiper, extendParams: extendParams, on: on, emit: emit } = _ref;\n const observers = [];\n const window1 = (0, $768c2f4c151a0363$export$407448d2b89b1813)();\n const attach = function(target, options) {\n if (options === void 0) options = {};\n const ObserverFunc = window1.MutationObserver || window1.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 (window1.requestAnimationFrame) window1.requestAnimationFrame(observerUpdate);\n else window1.setTimeout(observerUpdate, 0);\n });\n observer.observe(target, {\n attributes: typeof options.attributes === 'undefined' ? true : options.attributes,\n childList: swiper.isElement || (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 = (0, $3e0e2b092da8f124$export$8b22cf2602fb60ce)(swiper.hostEl);\n for(let i = 0; i < containerParents.length; i += 1)attach(containerParents[i]);\n }\n // Observe container\n attach(swiper.hostEl, {\n childList: swiper.params.observeSlideChildren\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}\n/* eslint-disable no-underscore-dangle */ var $6946bfb4689eabba$var$eventsEmitter = {\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() {\n self.off(events, onceHandler);\n if (onceHandler.__emitterProxy) delete onceHandler.__emitterProxy;\n for(var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++)args[_key] = arguments[_key];\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) self.eventsAnyListeners[method](handler);\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) self.eventsAnyListeners.splice(index, 1);\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') self.eventsListeners[event] = [];\n else if (self.eventsListeners[event]) self.eventsListeners[event].forEach((eventHandler, index)=>{\n if (eventHandler === handler || eventHandler.__emitterProxy && eventHandler.__emitterProxy === handler) self.eventsListeners[event].splice(index, 1);\n });\n });\n return self;\n },\n emit () {\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 for(var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++)args[_key2] = arguments[_key2];\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) self.eventsAnyListeners.forEach((eventHandler)=>{\n eventHandler.apply(context, [\n event,\n ...data\n ]);\n });\n if (self.eventsListeners && self.eventsListeners[event]) self.eventsListeners[event].forEach((eventHandler)=>{\n eventHandler.apply(context, data);\n });\n });\n return self;\n }\n};\nfunction $6946bfb4689eabba$var$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) width = swiper.params.width;\n else width = el.clientWidth;\n if (typeof swiper.params.height !== 'undefined' && swiper.params.height !== null) height = swiper.params.height;\n else height = el.clientHeight;\n if (width === 0 && swiper.isHorizontal() || height === 0 && swiper.isVertical()) return;\n // Subtract paddings\n width = width - parseInt((0, $3e0e2b092da8f124$export$9e5f44173e64f162)(el, 'padding-left') || 0, 10) - parseInt((0, $3e0e2b092da8f124$export$9e5f44173e64f162)(el, 'padding-right') || 0, 10);\n height = height - parseInt((0, $3e0e2b092da8f124$export$9e5f44173e64f162)(el, 'padding-top') || 0, 10) - parseInt((0, $3e0e2b092da8f124$export$9e5f44173e64f162)(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: width,\n height: height,\n size: swiper.isHorizontal() ? width : height\n });\n}\nfunction $6946bfb4689eabba$var$updateSlides() {\n const swiper = this;\n function getDirectionPropertyValue(node, label) {\n return parseFloat(node.getPropertyValue(swiper.getDirectionLabel(label)) || 0);\n }\n const params = swiper.params;\n const { wrapperEl: wrapperEl, slidesEl: slidesEl, size: swiperSize, rtlTranslate: rtl, wrongRTL: wrongRTL } = swiper;\n const isVirtual = swiper.virtual && params.virtual.enabled;\n const previousSlidesLength = isVirtual ? swiper.virtual.slides.length : swiper.slides.length;\n const slides = (0, $3e0e2b092da8f124$export$f1e1789686576879)(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') offsetBefore = params.slidesOffsetBefore.call(swiper);\n let offsetAfter = params.slidesOffsetAfter;\n if (typeof offsetAfter === 'function') offsetAfter = params.slidesOffsetAfter.call(swiper);\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') return;\n if (typeof spaceBetween === 'string' && spaceBetween.indexOf('%') >= 0) spaceBetween = parseFloat(spaceBetween.replace('%', '')) / 100 * swiperSize;\n else if (typeof spaceBetween === 'string') spaceBetween = parseFloat(spaceBetween);\n swiper.virtualSize = -spaceBetween;\n // reset margins\n slides.forEach((slideEl)=>{\n if (rtl) slideEl.style.marginLeft = '';\n else slideEl.style.marginRight = '';\n slideEl.style.marginBottom = '';\n slideEl.style.marginTop = '';\n });\n // reset cssMode offsets\n if (params.centeredSlides && params.cssMode) {\n (0, $3e0e2b092da8f124$export$407448d2b89b1813)(wrapperEl, '--swiper-centered-offset-before', '');\n (0, $3e0e2b092da8f124$export$407448d2b89b1813)(wrapperEl, '--swiper-centered-offset-after', '');\n }\n const gridEnabled = params.grid && params.grid.rows > 1 && swiper.grid;\n if (gridEnabled) swiper.grid.initSlides(slides);\n else if (swiper.grid) swiper.grid.unsetSlides();\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) swiper.grid.updateSlide(i, slide, slides);\n if (slides[i] && (0, $3e0e2b092da8f124$export$9e5f44173e64f162)(slide, 'display') === 'none') continue; // eslint-disable-line\n if (params.slidesPerView === 'auto') {\n if (shouldResetSlideSize) slides[i].style[swiper.getDirectionLabel('width')] = ``;\n const slideStyles = getComputedStyle(slide);\n const currentTransform = slide.style.transform;\n const currentWebKitTransform = slide.style.webkitTransform;\n if (currentTransform) slide.style.transform = 'none';\n if (currentWebKitTransform) slide.style.webkitTransform = 'none';\n if (params.roundLengths) slideSize = swiper.isHorizontal() ? (0, $3e0e2b092da8f124$export$dda1d9f60106f0e9)(slide, 'width', true) : (0, $3e0e2b092da8f124$export$dda1d9f60106f0e9)(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') slideSize = width + marginLeft + marginRight;\n else {\n const { clientWidth: clientWidth, offsetWidth: offsetWidth } = slide;\n slideSize = width + paddingLeft + paddingRight + marginLeft + marginRight + (offsetWidth - clientWidth);\n }\n }\n if (currentTransform) slide.style.transform = currentTransform;\n if (currentWebKitTransform) slide.style.webkitTransform = currentWebKitTransform;\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]) slides[i].style[swiper.getDirectionLabel('width')] = `${slideSize}px`;\n }\n if (slides[i]) slides[i].swiperSlideSize = slideSize;\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) < 0.001) 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')) wrapperEl.style.width = `${swiper.virtualSize + spaceBetween}px`;\n if (params.setWrapperSize) wrapperEl.style[swiper.getDirectionLabel('width')] = `${swiper.virtualSize + spaceBetween}px`;\n if (gridEnabled) swiper.grid.updateWrapperSize(slideSize, snapGrid);\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) newSlidesGrid.push(slidesGridItem);\n }\n snapGrid = newSlidesGrid;\n if (Math.floor(swiper.virtualSize - swiperSize) - Math.floor(snapGrid[snapGrid.length - 1]) > 1) snapGrid.push(swiper.virtualSize - swiperSize);\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)snapGrid.push(snapGrid[snapGrid.length - 1] + groupSize);\n }\n for(let i = 0; i < swiper.virtual.slidesBefore + swiper.virtual.slidesAfter; i += 1){\n if (params.slidesPerGroup === 1) snapGrid.push(snapGrid[snapGrid.length - 1] + size);\n slidesGrid.push(slidesGrid[slidesGrid.length - 1] + size);\n swiper.virtualSize += size;\n }\n }\n if (snapGrid.length === 0) snapGrid = [\n 0\n ];\n if (spaceBetween !== 0) {\n const key = swiper.isHorizontal() && rtl ? 'marginLeft' : swiper.getDirectionLabel('marginRight');\n slides.filter((_, slideIndex)=>{\n if (!params.cssMode || params.loop) return true;\n if (slideIndex === slides.length - 1) return false;\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 ? allSlidesSize - swiperSize : 0;\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 const offsetSize = (params.slidesOffsetBefore || 0) + (params.slidesOffsetAfter || 0);\n if (allSlidesSize + offsetSize < swiperSize) {\n const allSlidesOffset = (swiperSize - allSlidesSize - offsetSize) / 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: slides,\n snapGrid: snapGrid,\n slidesGrid: slidesGrid,\n slidesSizesGrid: slidesSizesGrid\n });\n if (params.centeredSlides && params.cssMode && !params.centeredSlidesBounds) {\n (0, $3e0e2b092da8f124$export$407448d2b89b1813)(wrapperEl, '--swiper-centered-offset-before', `${-snapGrid[0]}px`);\n (0, $3e0e2b092da8f124$export$407448d2b89b1813)(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) swiper.emit('slidesLengthChange');\n if (snapGrid.length !== previousSnapGridLength) {\n if (swiper.params.watchOverflow) swiper.checkOverflow();\n swiper.emit('snapGridLengthChange');\n }\n if (slidesGrid.length !== previousSlidesGridLength) swiper.emit('slidesGridLengthChange');\n if (params.watchSlidesProgress) swiper.updateSlidesOffset();\n swiper.emit('slidesUpdated');\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) swiper.el.classList.remove(backFaceHiddenClass);\n }\n}\nfunction $6946bfb4689eabba$var$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') swiper.setTransition(speed);\n else if (speed === true) swiper.setTransition(swiper.params.speed);\n const getSlideByIndex = (index)=>{\n if (isVirtual) return swiper.slides[swiper.getSlideIndexByData(index)];\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) (swiper.visibleSlides || []).forEach((slide)=>{\n activeSlides.push(slide);\n });\n else 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 } else activeSlides.push(getSlideByIndex(swiper.activeIndex));\n // Find new height from highest slide in view\n for(i = 0; i < activeSlides.length; i += 1)if (typeof activeSlides[i] !== 'undefined') {\n const height = activeSlides[i].offsetHeight;\n newHeight = height > newHeight ? height : newHeight;\n }\n // Update Height\n if (newHeight || newHeight === 0) swiper.wrapperEl.style.height = `${newHeight}px`;\n}\nfunction $6946bfb4689eabba$var$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)slides[i].swiperSlideOffset = (swiper.isHorizontal() ? slides[i].offsetLeft : slides[i].offsetTop) - minusOffset - swiper.cssOverflowAdjustment();\n}\nconst $6946bfb4689eabba$var$toggleSlideClasses$1 = (slideEl, condition, className)=>{\n if (condition && !slideEl.classList.contains(className)) slideEl.classList.add(className);\n else if (!condition && slideEl.classList.contains(className)) slideEl.classList.remove(className);\n};\nfunction $6946bfb4689eabba$var$updateSlidesProgress(translate) {\n if (translate === void 0) translate = this && this.translate || 0;\n const swiper = this;\n const params = swiper.params;\n const { slides: slides, rtlTranslate: rtl, snapGrid: snapGrid } = 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 swiper.visibleSlidesIndexes = [];\n swiper.visibleSlides = [];\n let spaceBetween = params.spaceBetween;\n if (typeof spaceBetween === 'string' && spaceBetween.indexOf('%') >= 0) spaceBetween = parseFloat(spaceBetween.replace('%', '')) / 100 * swiper.size;\n else if (typeof spaceBetween === 'string') spaceBetween = parseFloat(spaceBetween);\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) slideOffset -= slides[0].swiperSlideOffset;\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 isFullyVisible = slideBefore >= 0 && slideBefore <= swiper.size - 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 }\n $6946bfb4689eabba$var$toggleSlideClasses$1(slide, isVisible, params.slideVisibleClass);\n $6946bfb4689eabba$var$toggleSlideClasses$1(slide, isFullyVisible, params.slideFullyVisibleClass);\n slide.progress = rtl ? -slideProgress : slideProgress;\n slide.originalProgress = rtl ? -originalSlideProgress : originalSlideProgress;\n }\n}\nfunction $6946bfb4689eabba$var$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 { progress: progress, isBeginning: isBeginning, isEnd: isEnd, progressLoop: progressLoop } = 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) progressLoop = (translateAbs - firstSlideTranslate) / translateMax;\n else progressLoop = (translateAbs + translateMax - lastSlideTranslate) / translateMax;\n if (progressLoop > 1) progressLoop -= 1;\n }\n Object.assign(swiper, {\n progress: progress,\n progressLoop: progressLoop,\n isBeginning: isBeginning,\n isEnd: isEnd\n });\n if (params.watchSlidesProgress || params.centeredSlides && params.autoHeight) swiper.updateSlidesProgress(translate);\n if (isBeginning && !wasBeginning) swiper.emit('reachBeginning toEdge');\n if (isEnd && !wasEnd) swiper.emit('reachEnd toEdge');\n if (wasBeginning && !isBeginning || wasEnd && !isEnd) swiper.emit('fromEdge');\n swiper.emit('progress', progress);\n}\nconst $6946bfb4689eabba$var$toggleSlideClasses = (slideEl, condition, className)=>{\n if (condition && !slideEl.classList.contains(className)) slideEl.classList.add(className);\n else if (!condition && slideEl.classList.contains(className)) slideEl.classList.remove(className);\n};\nfunction $6946bfb4689eabba$var$updateSlidesClasses() {\n const swiper = this;\n const { slides: slides, params: params, slidesEl: slidesEl, activeIndex: activeIndex } = swiper;\n const isVirtual = swiper.virtual && params.virtual.enabled;\n const gridEnabled = swiper.grid && params.grid && params.grid.rows > 1;\n const getFilteredSlide = (selector)=>{\n return (0, $3e0e2b092da8f124$export$f1e1789686576879)(slidesEl, `.${params.slideClass}${selector}, swiper-slide${selector}`)[0];\n };\n let activeSlide;\n let prevSlide;\n let nextSlide;\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 activeSlide = getFilteredSlide(`[data-swiper-slide-index=\"${activeIndex}\"]`);\n } else if (gridEnabled) {\n activeSlide = slides.find((slideEl)=>slideEl.column === activeIndex);\n nextSlide = slides.find((slideEl)=>slideEl.column === activeIndex + 1);\n prevSlide = slides.find((slideEl)=>slideEl.column === activeIndex - 1);\n } else activeSlide = slides[activeIndex];\n if (activeSlide) {\n if (!gridEnabled) {\n // Next Slide\n nextSlide = (0, $3e0e2b092da8f124$export$43caf9889c228507)(activeSlide, `.${params.slideClass}, swiper-slide`)[0];\n if (params.loop && !nextSlide) nextSlide = slides[0];\n // Prev Slide\n prevSlide = (0, $3e0e2b092da8f124$export$625550452a3fa3ec)(activeSlide, `.${params.slideClass}, swiper-slide`)[0];\n params.loop;\n }\n }\n slides.forEach((slideEl)=>{\n $6946bfb4689eabba$var$toggleSlideClasses(slideEl, slideEl === activeSlide, params.slideActiveClass);\n $6946bfb4689eabba$var$toggleSlideClasses(slideEl, slideEl === nextSlide, params.slideNextClass);\n $6946bfb4689eabba$var$toggleSlideClasses(slideEl, slideEl === prevSlide, params.slidePrevClass);\n });\n swiper.emitSlidesClasses();\n}\nconst $6946bfb4689eabba$var$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 let lazyEl = slideEl.querySelector(`.${swiper.params.lazyPreloaderClass}`);\n if (!lazyEl && swiper.isElement) {\n if (slideEl.shadowRoot) lazyEl = slideEl.shadowRoot.querySelector(`.${swiper.params.lazyPreloaderClass}`);\n else // init later\n requestAnimationFrame(()=>{\n if (slideEl.shadowRoot) {\n lazyEl = slideEl.shadowRoot.querySelector(`.${swiper.params.lazyPreloaderClass}`);\n if (lazyEl) lazyEl.remove();\n }\n });\n }\n if (lazyEl) lazyEl.remove();\n }\n};\nconst $6946bfb4689eabba$var$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};\nconst $6946bfb4689eabba$var$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 = [\n activeColumn - amount\n ];\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)) $6946bfb4689eabba$var$unlazy(swiper, i);\n });\n return;\n }\n const slideIndexLastInView = activeIndex + slidesPerView - 1;\n if (swiper.params.rewind || swiper.params.loop) for(let i = activeIndex - amount; i <= slideIndexLastInView + amount; i += 1){\n const realIndex = (i % len + len) % len;\n if (realIndex < activeIndex || realIndex > slideIndexLastInView) $6946bfb4689eabba$var$unlazy(swiper, realIndex);\n }\n else {\n for(let i = Math.max(activeIndex - amount, 0); i <= Math.min(slideIndexLastInView + amount, len - 1); i += 1)if (i !== activeIndex && (i > slideIndexLastInView || i < activeIndex)) $6946bfb4689eabba$var$unlazy(swiper, i);\n }\n};\nfunction $6946bfb4689eabba$var$getActiveIndexByTranslate(swiper) {\n const { slidesGrid: slidesGrid, params: params } = 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) activeIndex = i;\n else if (translate >= slidesGrid[i] && translate < slidesGrid[i + 1]) activeIndex = i + 1;\n } else if (translate >= slidesGrid[i]) activeIndex = i;\n }\n // Normalize slideIndex\n if (params.normalizeSlideIndex) {\n if (activeIndex < 0 || typeof activeIndex === 'undefined') activeIndex = 0;\n }\n return activeIndex;\n}\nfunction $6946bfb4689eabba$var$updateActiveIndex(newActiveIndex) {\n const swiper = this;\n const translate = swiper.rtlTranslate ? swiper.translate : -swiper.translate;\n const { snapGrid: snapGrid, params: params, activeIndex: previousIndex, realIndex: previousRealIndex, snapIndex: previousSnapIndex } = swiper;\n let activeIndex = newActiveIndex;\n let snapIndex;\n const getVirtualRealIndex = (aIndex)=>{\n let realIndex = aIndex - swiper.virtual.slidesBefore;\n if (realIndex < 0) realIndex = swiper.virtual.slides.length + realIndex;\n if (realIndex >= swiper.virtual.slides.length) realIndex -= swiper.virtual.slides.length;\n return realIndex;\n };\n if (typeof activeIndex === 'undefined') activeIndex = $6946bfb4689eabba$var$getActiveIndexByTranslate(swiper);\n if (snapGrid.indexOf(translate) >= 0) 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 && !swiper.params.loop) {\n if (snapIndex !== previousSnapIndex) {\n swiper.snapIndex = snapIndex;\n swiper.emit('snapIndexChange');\n }\n return;\n }\n if (activeIndex === previousIndex && swiper.params.loop && swiper.virtual && swiper.params.virtual.enabled) {\n swiper.realIndex = getVirtualRealIndex(activeIndex);\n return;\n }\n const gridEnabled = swiper.grid && params.grid && params.grid.rows > 1;\n // Get real index\n let realIndex;\n if (swiper.virtual && params.virtual.enabled && params.loop) realIndex = getVirtualRealIndex(activeIndex);\n else if (gridEnabled) {\n const firstSlideInColumn = swiper.slides.find((slideEl)=>slideEl.column === activeIndex);\n let activeSlideIndex = parseInt(firstSlideInColumn.getAttribute('data-swiper-slide-index'), 10);\n if (Number.isNaN(activeSlideIndex)) activeSlideIndex = Math.max(swiper.slides.indexOf(firstSlideInColumn), 0);\n realIndex = Math.floor(activeSlideIndex / params.grid.rows);\n } else if (swiper.slides[activeIndex]) {\n const slideIndex = swiper.slides[activeIndex].getAttribute('data-swiper-slide-index');\n if (slideIndex) realIndex = parseInt(slideIndex, 10);\n else realIndex = activeIndex;\n } else realIndex = activeIndex;\n Object.assign(swiper, {\n previousSnapIndex: previousSnapIndex,\n snapIndex: snapIndex,\n previousRealIndex: previousRealIndex,\n realIndex: realIndex,\n previousIndex: previousIndex,\n activeIndex: activeIndex\n });\n if (swiper.initialized) $6946bfb4689eabba$var$preload(swiper);\n swiper.emit('activeIndexChange');\n swiper.emit('snapIndexChange');\n if (swiper.initialized || swiper.params.runCallbacksOnInit) {\n if (previousRealIndex !== realIndex) swiper.emit('realIndexChange');\n swiper.emit('slideChange');\n }\n}\nfunction $6946bfb4689eabba$var$updateClickedSlide(el, path) {\n const swiper = this;\n const params = swiper.params;\n let slide = el.closest(`.${params.slideClass}, swiper-slide`);\n if (!slide && swiper.isElement && path && path.length > 1 && path.includes(el)) [\n ...path.slice(path.indexOf(el) + 1, path.length)\n ].forEach((pathEl)=>{\n if (!slide && pathEl.matches && pathEl.matches(`.${params.slideClass}, swiper-slide`)) slide = pathEl;\n });\n let slideFound = false;\n let slideIndex;\n if (slide) {\n for(let i = 0; i < swiper.slides.length; i += 1)if (swiper.slides[i] === slide) {\n slideFound = true;\n slideIndex = i;\n break;\n }\n }\n if (slide && slideFound) {\n swiper.clickedSlide = slide;\n if (swiper.virtual && swiper.params.virtual.enabled) swiper.clickedIndex = parseInt(slide.getAttribute('data-swiper-slide-index'), 10);\n else swiper.clickedIndex = slideIndex;\n } else {\n swiper.clickedSlide = undefined;\n swiper.clickedIndex = undefined;\n return;\n }\n if (params.slideToClickedSlide && swiper.clickedIndex !== undefined && swiper.clickedIndex !== swiper.activeIndex) swiper.slideToClickedSlide();\n}\nvar $6946bfb4689eabba$var$update = {\n updateSize: $6946bfb4689eabba$var$updateSize,\n updateSlides: $6946bfb4689eabba$var$updateSlides,\n updateAutoHeight: $6946bfb4689eabba$var$updateAutoHeight,\n updateSlidesOffset: $6946bfb4689eabba$var$updateSlidesOffset,\n updateSlidesProgress: $6946bfb4689eabba$var$updateSlidesProgress,\n updateProgress: $6946bfb4689eabba$var$updateProgress,\n updateSlidesClasses: $6946bfb4689eabba$var$updateSlidesClasses,\n updateActiveIndex: $6946bfb4689eabba$var$updateActiveIndex,\n updateClickedSlide: $6946bfb4689eabba$var$updateClickedSlide\n};\nfunction $6946bfb4689eabba$var$getSwiperTranslate(axis) {\n if (axis === void 0) axis = this.isHorizontal() ? 'x' : 'y';\n const swiper = this;\n const { params: params, rtlTranslate: rtl, translate: translate, wrapperEl: wrapperEl } = swiper;\n if (params.virtualTranslate) return rtl ? -translate : translate;\n if (params.cssMode) return translate;\n let currentTranslate = (0, $3e0e2b092da8f124$export$342063e11d6c3cad)(wrapperEl, axis);\n currentTranslate += swiper.cssOverflowAdjustment();\n if (rtl) currentTranslate = -currentTranslate;\n return currentTranslate || 0;\n}\nfunction $6946bfb4689eabba$var$setTranslate(translate, byController) {\n const swiper = this;\n const { rtlTranslate: rtl, params: params, wrapperEl: wrapperEl, progress: progress } = swiper;\n let x = 0;\n let y = 0;\n const z = 0;\n if (swiper.isHorizontal()) x = rtl ? -translate : translate;\n else y = translate;\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) wrapperEl[swiper.isHorizontal() ? 'scrollLeft' : 'scrollTop'] = swiper.isHorizontal() ? -x : -y;\n else if (!params.virtualTranslate) {\n if (swiper.isHorizontal()) x -= swiper.cssOverflowAdjustment();\n else y -= swiper.cssOverflowAdjustment();\n wrapperEl.style.transform = `translate3d(${x}px, ${y}px, ${z}px)`;\n }\n // Check if we need to update progress\n let newProgress;\n const translatesDiff = swiper.maxTranslate() - swiper.minTranslate();\n if (translatesDiff === 0) newProgress = 0;\n else newProgress = (translate - swiper.minTranslate()) / translatesDiff;\n if (newProgress !== progress) swiper.updateProgress(translate);\n swiper.emit('setTranslate', swiper.translate, byController);\n}\nfunction $6946bfb4689eabba$var$minTranslate() {\n return -this.snapGrid[0];\n}\nfunction $6946bfb4689eabba$var$maxTranslate() {\n return -this.snapGrid[this.snapGrid.length - 1];\n}\nfunction $6946bfb4689eabba$var$translateTo(translate, speed, runCallbacks, translateBounds, internal) {\n if (translate === void 0) translate = 0;\n if (speed === void 0) speed = this.params.speed;\n if (runCallbacks === void 0) runCallbacks = true;\n if (translateBounds === void 0) translateBounds = true;\n const swiper = this;\n const { params: params, wrapperEl: wrapperEl } = swiper;\n if (swiper.animating && params.preventInteractionOnTransition) return false;\n const minTranslate = swiper.minTranslate();\n const maxTranslate = swiper.maxTranslate();\n let newTranslate;\n if (translateBounds && translate > minTranslate) newTranslate = minTranslate;\n else if (translateBounds && translate < maxTranslate) newTranslate = maxTranslate;\n else newTranslate = translate;\n // Update progress\n swiper.updateProgress(newTranslate);\n if (params.cssMode) {\n const isH = swiper.isHorizontal();\n if (speed === 0) wrapperEl[isH ? 'scrollLeft' : 'scrollTop'] = -newTranslate;\n else {\n if (!swiper.support.smoothScroll) {\n (0, $3e0e2b092da8f124$export$3b14a55fb2447963)({\n swiper: 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) 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 swiper.animating = false;\n if (runCallbacks) swiper.emit('transitionEnd');\n };\n swiper.wrapperEl.addEventListener('transitionend', swiper.onTranslateToWrapperTransitionEnd);\n }\n }\n return true;\n}\nvar $6946bfb4689eabba$var$translate = {\n getTranslate: $6946bfb4689eabba$var$getSwiperTranslate,\n setTranslate: $6946bfb4689eabba$var$setTranslate,\n minTranslate: $6946bfb4689eabba$var$minTranslate,\n maxTranslate: $6946bfb4689eabba$var$maxTranslate,\n translateTo: $6946bfb4689eabba$var$translateTo\n};\nfunction $6946bfb4689eabba$var$setTransition(duration, byController) {\n const swiper = this;\n if (!swiper.params.cssMode) {\n swiper.wrapperEl.style.transitionDuration = `${duration}ms`;\n swiper.wrapperEl.style.transitionDelay = duration === 0 ? `0ms` : '';\n }\n swiper.emit('setTransition', duration, byController);\n}\nfunction $6946bfb4689eabba$var$transitionEmit(_ref) {\n let { swiper: swiper, runCallbacks: runCallbacks, direction: direction, step: step } = _ref;\n const { activeIndex: activeIndex, previousIndex: previousIndex } = swiper;\n let dir = direction;\n if (!dir) {\n if (activeIndex > previousIndex) dir = 'next';\n else if (activeIndex < previousIndex) dir = 'prev';\n else dir = 'reset';\n }\n swiper.emit(`transition${step}`);\n if (runCallbacks && dir === 'reset') swiper.emit(`slideResetTransition${step}`);\n else if (runCallbacks && activeIndex !== previousIndex) {\n swiper.emit(`slideChangeTransition${step}`);\n if (dir === 'next') swiper.emit(`slideNextTransition${step}`);\n else swiper.emit(`slidePrevTransition${step}`);\n }\n}\nfunction $6946bfb4689eabba$var$transitionStart(runCallbacks, direction) {\n if (runCallbacks === void 0) runCallbacks = true;\n const swiper = this;\n const { params: params } = swiper;\n if (params.cssMode) return;\n if (params.autoHeight) swiper.updateAutoHeight();\n $6946bfb4689eabba$var$transitionEmit({\n swiper: swiper,\n runCallbacks: runCallbacks,\n direction: direction,\n step: 'Start'\n });\n}\nfunction $6946bfb4689eabba$var$transitionEnd(runCallbacks, direction) {\n if (runCallbacks === void 0) runCallbacks = true;\n const swiper = this;\n const { params: params } = swiper;\n swiper.animating = false;\n if (params.cssMode) return;\n swiper.setTransition(0);\n $6946bfb4689eabba$var$transitionEmit({\n swiper: swiper,\n runCallbacks: runCallbacks,\n direction: direction,\n step: 'End'\n });\n}\nvar $6946bfb4689eabba$var$transition = {\n setTransition: $6946bfb4689eabba$var$setTransition,\n transitionStart: $6946bfb4689eabba$var$transitionStart,\n transitionEnd: $6946bfb4689eabba$var$transitionEnd\n};\nfunction $6946bfb4689eabba$var$slideTo(index, speed, runCallbacks, internal, initial) {\n if (index === void 0) index = 0;\n if (runCallbacks === void 0) runCallbacks = true;\n if (typeof index === 'string') index = parseInt(index, 10);\n const swiper = this;\n let slideIndex = index;\n if (slideIndex < 0) slideIndex = 0;\n const { params: params, snapGrid: snapGrid, slidesGrid: slidesGrid, previousIndex: previousIndex, activeIndex: activeIndex, rtlTranslate: rtl, wrapperEl: wrapperEl, enabled: enabled } = swiper;\n if (!enabled && !internal && !initial || swiper.destroyed || swiper.animating && params.preventInteractionOnTransition) return false;\n if (typeof speed === 'undefined') speed = swiper.params.speed;\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) 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) slideIndex = i;\n else if (normalizedTranslate >= normalizedGrid && normalizedTranslate < normalizedGridNext) slideIndex = i + 1;\n } else if (normalizedTranslate >= normalizedGrid) slideIndex = i;\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())) return false;\n if (!swiper.allowSlidePrev && translate > swiper.translate && translate > swiper.maxTranslate()) {\n if ((activeIndex || 0) !== slideIndex) return false;\n }\n }\n if (slideIndex !== (previousIndex || 0) && runCallbacks) swiper.emit('beforeSlideChangeStart');\n // Update progress\n swiper.updateProgress(translate);\n let direction;\n if (slideIndex > activeIndex) direction = 'next';\n else if (slideIndex < activeIndex) direction = 'prev';\n else direction = 'reset';\n // initial virtual\n const isVirtual = swiper.virtual && swiper.params.virtual.enabled;\n const isInitialVirtual = isVirtual && initial;\n // Update Index\n if (!isInitialVirtual && (rtl && -translate === swiper.translate || !rtl && translate === swiper.translate)) {\n swiper.updateActiveIndex(slideIndex);\n // Update Height\n if (params.autoHeight) swiper.updateAutoHeight();\n swiper.updateSlidesClasses();\n if (params.effect !== 'slide') swiper.setTranslate(translate);\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 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 wrapperEl[isH ? 'scrollLeft' : 'scrollTop'] = t;\n if (isVirtual) requestAnimationFrame(()=>{\n swiper.wrapperEl.style.scrollSnapType = '';\n swiper._immediateVirtual = false;\n });\n } else {\n if (!swiper.support.smoothScroll) {\n (0, $3e0e2b092da8f124$export$3b14a55fb2447963)({\n swiper: 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 const browser = $6946bfb4689eabba$var$getBrowser();\n const isSafari = browser.isSafari;\n if (isVirtual && !initial && isSafari && swiper.isElement) swiper.virtual.update(false, false, slideIndex);\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) swiper.transitionEnd(runCallbacks, direction);\n else if (!swiper.animating) {\n swiper.animating = true;\n if (!swiper.onSlideToWrapperTransitionEnd) 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 swiper.wrapperEl.addEventListener('transitionend', swiper.onSlideToWrapperTransitionEnd);\n }\n return true;\n}\nfunction $6946bfb4689eabba$var$slideToLoop(index, speed, runCallbacks, internal) {\n if (index === void 0) index = 0;\n if (runCallbacks === void 0) runCallbacks = true;\n if (typeof index === 'string') {\n const indexAsNumber = parseInt(index, 10);\n index = indexAsNumber;\n }\n const swiper = this;\n if (swiper.destroyed) return;\n if (typeof speed === 'undefined') speed = swiper.params.speed;\n const gridEnabled = swiper.grid && swiper.params.grid && swiper.params.grid.rows > 1;\n let newIndex = index;\n if (swiper.params.loop) {\n if (swiper.virtual && swiper.params.virtual.enabled) // eslint-disable-next-line\n newIndex = newIndex + swiper.virtual.slidesBefore;\n else {\n let targetSlideIndex;\n if (gridEnabled) {\n const slideIndex = newIndex * swiper.params.grid.rows;\n targetSlideIndex = swiper.slides.find((slideEl)=>slideEl.getAttribute('data-swiper-slide-index') * 1 === slideIndex).column;\n } else targetSlideIndex = swiper.getSlideIndexByData(newIndex);\n const cols = gridEnabled ? Math.ceil(swiper.slides.length / swiper.params.grid.rows) : swiper.slides.length;\n const { centeredSlides: centeredSlides } = swiper.params;\n let slidesPerView = swiper.params.slidesPerView;\n if (slidesPerView === 'auto') slidesPerView = swiper.slidesPerViewDynamic();\n else {\n slidesPerView = Math.ceil(parseFloat(swiper.params.slidesPerView, 10));\n if (centeredSlides && slidesPerView % 2 === 0) slidesPerView = slidesPerView + 1;\n }\n let needLoopFix = cols - targetSlideIndex < slidesPerView;\n if (centeredSlides) needLoopFix = needLoopFix || targetSlideIndex < Math.ceil(slidesPerView / 2);\n if (internal && centeredSlides && swiper.params.slidesPerView !== 'auto' && !gridEnabled) needLoopFix = false;\n if (needLoopFix) {\n const direction = centeredSlides ? targetSlideIndex < swiper.activeIndex ? 'prev' : 'next' : targetSlideIndex - swiper.activeIndex - 1 < swiper.params.slidesPerView ? 'next' : 'prev';\n swiper.loopFix({\n direction: direction,\n slideTo: true,\n activeSlideIndex: direction === 'next' ? targetSlideIndex + 1 : targetSlideIndex - cols + 1,\n slideRealIndex: direction === 'next' ? swiper.realIndex : undefined\n });\n }\n if (gridEnabled) {\n const slideIndex = newIndex * swiper.params.grid.rows;\n newIndex = swiper.slides.find((slideEl)=>slideEl.getAttribute('data-swiper-slide-index') * 1 === slideIndex).column;\n } else newIndex = swiper.getSlideIndexByData(newIndex);\n }\n }\n requestAnimationFrame(()=>{\n swiper.slideTo(newIndex, speed, runCallbacks, internal);\n });\n return swiper;\n}\n/* eslint no-unused-vars: \"off\" */ function $6946bfb4689eabba$var$slideNext(speed, runCallbacks, internal) {\n if (runCallbacks === void 0) runCallbacks = true;\n const swiper = this;\n const { enabled: enabled, params: params, animating: animating } = swiper;\n if (!enabled || swiper.destroyed) return swiper;\n if (typeof speed === 'undefined') speed = swiper.params.speed;\n let perGroup = params.slidesPerGroup;\n if (params.slidesPerView === 'auto' && params.slidesPerGroup === 1 && params.slidesPerGroupAuto) perGroup = Math.max(swiper.slidesPerViewDynamic('current', true), 1);\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 if (swiper.activeIndex === swiper.slides.length - 1 && params.cssMode) {\n requestAnimationFrame(()=>{\n swiper.slideTo(swiper.activeIndex + increment, speed, runCallbacks, internal);\n });\n return true;\n }\n }\n if (params.rewind && swiper.isEnd) return swiper.slideTo(0, speed, runCallbacks, internal);\n return swiper.slideTo(swiper.activeIndex + increment, speed, runCallbacks, internal);\n}\n/* eslint no-unused-vars: \"off\" */ function $6946bfb4689eabba$var$slidePrev(speed, runCallbacks, internal) {\n if (runCallbacks === void 0) runCallbacks = true;\n const swiper = this;\n const { params: params, snapGrid: snapGrid, slidesGrid: slidesGrid, rtlTranslate: rtlTranslate, enabled: enabled, animating: animating } = swiper;\n if (!enabled || swiper.destroyed) return swiper;\n if (typeof speed === 'undefined') speed = swiper.params.speed;\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 const isFreeMode = params.freeMode && params.freeMode.enabled;\n let prevSnap = snapGrid[normalizedSnapGrid.indexOf(normalizedTranslate) - 1];\n if (typeof prevSnap === 'undefined' && (params.cssMode || isFreeMode)) {\n let prevSnapIndex;\n snapGrid.forEach((snap, snapIndex)=>{\n if (normalizedTranslate >= snap) // prevSnap = snap;\n prevSnapIndex = snapIndex;\n });\n if (typeof prevSnapIndex !== 'undefined') prevSnap = isFreeMode ? snapGrid[prevSnapIndex] : snapGrid[prevSnapIndex > 0 ? prevSnapIndex - 1 : prevSnapIndex];\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 } else if (params.loop && swiper.activeIndex === 0 && params.cssMode) {\n requestAnimationFrame(()=>{\n swiper.slideTo(prevIndex, speed, runCallbacks, internal);\n });\n return true;\n }\n return swiper.slideTo(prevIndex, speed, runCallbacks, internal);\n}\n/* eslint no-unused-vars: \"off\" */ function $6946bfb4689eabba$var$slideReset(speed, runCallbacks, internal) {\n if (runCallbacks === void 0) runCallbacks = true;\n const swiper = this;\n if (swiper.destroyed) return;\n if (typeof speed === 'undefined') speed = swiper.params.speed;\n return swiper.slideTo(swiper.activeIndex, speed, runCallbacks, internal);\n}\n/* eslint no-unused-vars: \"off\" */ function $6946bfb4689eabba$var$slideToClosest(speed, runCallbacks, internal, threshold) {\n if (runCallbacks === void 0) runCallbacks = true;\n if (threshold === void 0) threshold = 0.5;\n const swiper = this;\n if (swiper.destroyed) return;\n if (typeof speed === 'undefined') speed = swiper.params.speed;\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) index += swiper.params.slidesPerGroup;\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) index -= swiper.params.slidesPerGroup;\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}\nfunction $6946bfb4689eabba$var$slideToClickedSlide() {\n const swiper = this;\n if (swiper.destroyed) return;\n const { params: params, slidesEl: slidesEl } = 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((0, $3e0e2b092da8f124$export$f1e1789686576879)(slidesEl, `${slideSelector}[data-swiper-slide-index=\"${realIndex}\"]`)[0]);\n (0, $3e0e2b092da8f124$export$7ccc53e8f1e7dfc5)(()=>{\n swiper.slideTo(slideToIndex);\n });\n } else swiper.slideTo(slideToIndex);\n } else if (slideToIndex > swiper.slides.length - slidesPerView) {\n swiper.loopFix();\n slideToIndex = swiper.getSlideIndex((0, $3e0e2b092da8f124$export$f1e1789686576879)(slidesEl, `${slideSelector}[data-swiper-slide-index=\"${realIndex}\"]`)[0]);\n (0, $3e0e2b092da8f124$export$7ccc53e8f1e7dfc5)(()=>{\n swiper.slideTo(slideToIndex);\n });\n } else swiper.slideTo(slideToIndex);\n } else swiper.slideTo(slideToIndex);\n}\nvar $6946bfb4689eabba$var$slide = {\n slideTo: $6946bfb4689eabba$var$slideTo,\n slideToLoop: $6946bfb4689eabba$var$slideToLoop,\n slideNext: $6946bfb4689eabba$var$slideNext,\n slidePrev: $6946bfb4689eabba$var$slidePrev,\n slideReset: $6946bfb4689eabba$var$slideReset,\n slideToClosest: $6946bfb4689eabba$var$slideToClosest,\n slideToClickedSlide: $6946bfb4689eabba$var$slideToClickedSlide\n};\nfunction $6946bfb4689eabba$var$loopCreate(slideRealIndex, initial) {\n const swiper = this;\n const { params: params, slidesEl: slidesEl } = swiper;\n if (!params.loop || swiper.virtual && swiper.params.virtual.enabled) return;\n const initSlides = ()=>{\n const slides = (0, $3e0e2b092da8f124$export$f1e1789686576879)(slidesEl, `.${params.slideClass}, swiper-slide`);\n slides.forEach((el, index)=>{\n el.setAttribute('data-swiper-slide-index', index);\n });\n };\n const gridEnabled = swiper.grid && params.grid && params.grid.rows > 1;\n const slidesPerGroup = params.slidesPerGroup * (gridEnabled ? params.grid.rows : 1);\n const shouldFillGroup = swiper.slides.length % slidesPerGroup !== 0;\n const shouldFillGrid = gridEnabled && swiper.slides.length % params.grid.rows !== 0;\n const addBlankSlides = (amountOfSlides)=>{\n for(let i = 0; i < amountOfSlides; i += 1){\n const slideEl = swiper.isElement ? (0, $3e0e2b092da8f124$export$db3b6bfb95261072)('swiper-slide', [\n params.slideBlankClass\n ]) : (0, $3e0e2b092da8f124$export$db3b6bfb95261072)('div', [\n params.slideClass,\n params.slideBlankClass\n ]);\n swiper.slidesEl.append(slideEl);\n }\n };\n if (shouldFillGroup) {\n if (params.loopAddBlankSlides) {\n const slidesToAdd = slidesPerGroup - swiper.slides.length % slidesPerGroup;\n addBlankSlides(slidesToAdd);\n swiper.recalcSlides();\n swiper.updateSlides();\n } else (0, $3e0e2b092da8f124$export$90a7f3efeed30595)('Swiper Loop Warning: The number of slides is not even to slidesPerGroup, loop mode may not function properly. You need to add more slides (or make duplicates, or empty slides)');\n initSlides();\n } else if (shouldFillGrid) {\n if (params.loopAddBlankSlides) {\n const slidesToAdd = params.grid.rows - swiper.slides.length % params.grid.rows;\n addBlankSlides(slidesToAdd);\n swiper.recalcSlides();\n swiper.updateSlides();\n } else (0, $3e0e2b092da8f124$export$90a7f3efeed30595)('Swiper Loop Warning: The number of slides is not even to grid.rows, loop mode may not function properly. You need to add more slides (or make duplicates, or empty slides)');\n initSlides();\n } else initSlides();\n swiper.loopFix({\n slideRealIndex: slideRealIndex,\n direction: params.centeredSlides ? undefined : 'next',\n initial: initial\n });\n}\nfunction $6946bfb4689eabba$var$loopFix(_temp) {\n let { slideRealIndex: slideRealIndex, slideTo: slideTo = true, direction: direction, setTranslate: setTranslate, activeSlideIndex: activeSlideIndex, initial: initial, byController: byController, byMousewheel: byMousewheel } = _temp === void 0 ? {} : _temp;\n const swiper = this;\n if (!swiper.params.loop) return;\n swiper.emit('beforeLoopFix');\n const { slides: slides, allowSlidePrev: allowSlidePrev, allowSlideNext: allowSlideNext, slidesEl: slidesEl, params: params } = swiper;\n const { centeredSlides: centeredSlides, initialSlide: initialSlide } = params;\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) swiper.slideTo(swiper.virtual.slides.length, 0, false, true);\n else if (params.centeredSlides && swiper.snapIndex < params.slidesPerView) swiper.slideTo(swiper.virtual.slides.length + swiper.snapIndex, 0, false, true);\n else if (swiper.snapIndex === swiper.snapGrid.length - 1) swiper.slideTo(swiper.virtual.slidesBefore, 0, false, true);\n }\n swiper.allowSlidePrev = allowSlidePrev;\n swiper.allowSlideNext = allowSlideNext;\n swiper.emit('loopFix');\n return;\n }\n let slidesPerView = params.slidesPerView;\n if (slidesPerView === 'auto') slidesPerView = swiper.slidesPerViewDynamic();\n else {\n slidesPerView = Math.ceil(parseFloat(params.slidesPerView, 10));\n if (centeredSlides && slidesPerView % 2 === 0) slidesPerView = slidesPerView + 1;\n }\n const slidesPerGroup = params.slidesPerGroupAuto ? slidesPerView : params.slidesPerGroup;\n let loopedSlides = slidesPerGroup;\n if (loopedSlides % slidesPerGroup !== 0) loopedSlides += slidesPerGroup - loopedSlides % slidesPerGroup;\n loopedSlides += params.loopAdditionalSlides;\n swiper.loopedSlides = loopedSlides;\n const gridEnabled = swiper.grid && params.grid && params.grid.rows > 1;\n if (slides.length < slidesPerView + loopedSlides || swiper.params.effect === 'cards' && slides.length < slidesPerView + loopedSlides * 2) (0, $3e0e2b092da8f124$export$90a7f3efeed30595)('Swiper Loop Warning: The number of slides is not enough for loop mode, it will be disabled or not function properly. You need to add more slides (or make duplicates) or lower the values of slidesPerView and slidesPerGroup parameters');\n else if (gridEnabled && params.grid.fill === 'row') (0, $3e0e2b092da8f124$export$90a7f3efeed30595)('Swiper Loop Warning: Loop mode is not compatible with grid.fill = `row`');\n const prependSlidesIndexes = [];\n const appendSlidesIndexes = [];\n const cols = gridEnabled ? Math.ceil(slides.length / params.grid.rows) : slides.length;\n const isInitialOverflow = initial && cols - initialSlide < slidesPerView && !centeredSlides;\n let activeIndex = isInitialOverflow ? initialSlide : swiper.activeIndex;\n if (typeof activeSlideIndex === 'undefined') activeSlideIndex = swiper.getSlideIndex(slides.find((el)=>el.classList.contains(params.slideActiveClass)));\n else activeIndex = activeSlideIndex;\n const isNext = direction === 'next' || !direction;\n const isPrev = direction === 'prev' || !direction;\n let slidesPrepended = 0;\n let slidesAppended = 0;\n const activeColIndex = gridEnabled ? slides[activeSlideIndex].column : activeSlideIndex;\n const activeColIndexWithShift = activeColIndex + (centeredSlides && typeof setTranslate === 'undefined' ? -slidesPerView / 2 + 0.5 : 0);\n // prepend last slides before start\n if (activeColIndexWithShift < loopedSlides) {\n slidesPrepended = Math.max(loopedSlides - activeColIndexWithShift, slidesPerGroup);\n for(let i = 0; i < loopedSlides - activeColIndexWithShift; i += 1){\n const index = i - Math.floor(i / cols) * cols;\n if (gridEnabled) {\n const colIndexToPrepend = cols - index - 1;\n for(let i = slides.length - 1; i >= 0; i -= 1)if (slides[i].column === colIndexToPrepend) prependSlidesIndexes.push(i);\n // slides.forEach((slide, slideIndex) => {\n // if (slide.column === colIndexToPrepend) prependSlidesIndexes.push(slideIndex);\n // });\n } else prependSlidesIndexes.push(cols - index - 1);\n }\n } else if (activeColIndexWithShift + slidesPerView > cols - loopedSlides) {\n slidesAppended = Math.max(activeColIndexWithShift - (cols - loopedSlides * 2), slidesPerGroup);\n if (isInitialOverflow) slidesAppended = Math.max(slidesAppended, slidesPerView - cols + initialSlide + 1);\n for(let i = 0; i < slidesAppended; i += 1){\n const index = i - Math.floor(i / cols) * cols;\n if (gridEnabled) slides.forEach((slide, slideIndex)=>{\n if (slide.column === index) appendSlidesIndexes.push(slideIndex);\n });\n else appendSlidesIndexes.push(index);\n }\n }\n swiper.__preventObserver__ = true;\n requestAnimationFrame(()=>{\n swiper.__preventObserver__ = false;\n });\n if (swiper.params.effect === 'cards' && slides.length < slidesPerView + loopedSlides * 2) {\n if (appendSlidesIndexes.includes(activeSlideIndex)) appendSlidesIndexes.splice(appendSlidesIndexes.indexOf(activeSlideIndex), 1);\n if (prependSlidesIndexes.includes(activeSlideIndex)) prependSlidesIndexes.splice(prependSlidesIndexes.indexOf(activeSlideIndex), 1);\n }\n if (isPrev) prependSlidesIndexes.forEach((index)=>{\n slides[index].swiperLoopMoveDOM = true;\n slidesEl.prepend(slides[index]);\n slides[index].swiperLoopMoveDOM = false;\n });\n if (isNext) appendSlidesIndexes.forEach((index)=>{\n slides[index].swiperLoopMoveDOM = true;\n slidesEl.append(slides[index]);\n slides[index].swiperLoopMoveDOM = false;\n });\n swiper.recalcSlides();\n if (params.slidesPerView === 'auto') swiper.updateSlides();\n else if (gridEnabled && (prependSlidesIndexes.length > 0 && isPrev || appendSlidesIndexes.length > 0 && isNext)) swiper.slides.forEach((slide, slideIndex)=>{\n swiper.grid.updateSlide(slideIndex, slide, swiper.slides);\n });\n if (params.watchSlidesProgress) swiper.updateSlidesOffset();\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) swiper.setTranslate(swiper.translate - diff);\n else {\n swiper.slideTo(activeIndex + Math.ceil(slidesPrepended), 0, false, true);\n if (setTranslate) {\n swiper.touchEventsData.startTranslate = swiper.touchEventsData.startTranslate - diff;\n swiper.touchEventsData.currentTranslate = swiper.touchEventsData.currentTranslate - diff;\n }\n }\n } else if (setTranslate) {\n const shift = gridEnabled ? prependSlidesIndexes.length / params.grid.rows : prependSlidesIndexes.length;\n swiper.slideTo(swiper.activeIndex + shift, 0, false, true);\n swiper.touchEventsData.currentTranslate = swiper.translate;\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) swiper.setTranslate(swiper.translate - diff);\n else {\n swiper.slideTo(activeIndex - slidesAppended, 0, false, true);\n if (setTranslate) {\n swiper.touchEventsData.startTranslate = swiper.touchEventsData.startTranslate - diff;\n swiper.touchEventsData.currentTranslate = swiper.touchEventsData.currentTranslate - diff;\n }\n }\n } else {\n const shift = gridEnabled ? appendSlidesIndexes.length / params.grid.rows : appendSlidesIndexes.length;\n swiper.slideTo(swiper.activeIndex - shift, 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: slideRealIndex,\n direction: direction,\n setTranslate: setTranslate,\n activeSlideIndex: activeSlideIndex,\n byController: true\n };\n if (Array.isArray(swiper.controller.control)) swiper.controller.control.forEach((c)=>{\n if (!c.destroyed && c.params.loop) c.loopFix({\n ...loopParams,\n slideTo: c.params.slidesPerView === params.slidesPerView ? slideTo : false\n });\n });\n else if (swiper.controller.control instanceof swiper.constructor && swiper.controller.control.params.loop) swiper.controller.control.loopFix({\n ...loopParams,\n slideTo: swiper.controller.control.params.slidesPerView === params.slidesPerView ? slideTo : false\n });\n }\n swiper.emit('loopFix');\n}\nfunction $6946bfb4689eabba$var$loopDestroy() {\n const swiper = this;\n const { params: params, slidesEl: slidesEl } = swiper;\n if (!params.loop || !slidesEl || 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}\nvar $6946bfb4689eabba$var$loop = {\n loopCreate: $6946bfb4689eabba$var$loopCreate,\n loopFix: $6946bfb4689eabba$var$loopFix,\n loopDestroy: $6946bfb4689eabba$var$loopDestroy\n};\nfunction $6946bfb4689eabba$var$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) swiper.__preventObserver__ = true;\n el.style.cursor = 'move';\n el.style.cursor = moving ? 'grabbing' : 'grab';\n if (swiper.isElement) requestAnimationFrame(()=>{\n swiper.__preventObserver__ = false;\n });\n}\nfunction $6946bfb4689eabba$var$unsetGrabCursor() {\n const swiper = this;\n if (swiper.params.watchOverflow && swiper.isLocked || swiper.params.cssMode) return;\n if (swiper.isElement) swiper.__preventObserver__ = true;\n swiper[swiper.params.touchEventsTarget === 'container' ? 'el' : 'wrapperEl'].style.cursor = '';\n if (swiper.isElement) requestAnimationFrame(()=>{\n swiper.__preventObserver__ = false;\n });\n}\nvar $6946bfb4689eabba$var$grabCursor = {\n setGrabCursor: $6946bfb4689eabba$var$setGrabCursor,\n unsetGrabCursor: $6946bfb4689eabba$var$unsetGrabCursor\n};\n// Modified from https://stackoverflow.com/questions/54520554/custom-element-getrootnode-closest-function-crossing-multiple-parent-shadowd\nfunction $6946bfb4689eabba$var$closestElement(selector, base) {\n if (base === void 0) base = this;\n function __closestFrom(el) {\n if (!el || el === (0, $768c2f4c151a0363$export$39b482c5e57630a8)() || el === (0, $768c2f4c151a0363$export$407448d2b89b1813)()) return null;\n if (el.assignedSlot) el = el.assignedSlot;\n const found = el.closest(selector);\n if (!found && !el.getRootNode) return null;\n return found || __closestFrom(el.getRootNode().host);\n }\n return __closestFrom(base);\n}\nfunction $6946bfb4689eabba$var$preventEdgeSwipe(swiper, event, startX) {\n const window1 = (0, $768c2f4c151a0363$export$407448d2b89b1813)();\n const { params: params } = swiper;\n const edgeSwipeDetection = params.edgeSwipeDetection;\n const edgeSwipeThreshold = params.edgeSwipeThreshold;\n if (edgeSwipeDetection && (startX <= edgeSwipeThreshold || startX >= window1.innerWidth - edgeSwipeThreshold)) {\n if (edgeSwipeDetection === 'prevent') {\n event.preventDefault();\n return true;\n }\n return false;\n }\n return true;\n}\nfunction $6946bfb4689eabba$var$onTouchStart(event) {\n const swiper = this;\n const document1 = (0, $768c2f4c151a0363$export$39b482c5e57630a8)();\n let e = event;\n if (e.originalEvent) e = e.originalEvent;\n const data = swiper.touchEventsData;\n if (e.type === 'pointerdown') {\n if (data.pointerId !== null && data.pointerId !== e.pointerId) return;\n data.pointerId = e.pointerId;\n } else if (e.type === 'touchstart' && e.targetTouches.length === 1) data.touchId = e.targetTouches[0].identifier;\n if (e.type === 'touchstart') {\n // don't proceed touch event\n $6946bfb4689eabba$var$preventEdgeSwipe(swiper, e, e.targetTouches[0].pageX);\n return;\n }\n const { params: params, touches: touches, enabled: enabled } = swiper;\n if (!enabled) return;\n if (!params.simulateTouch && e.pointerType === 'mouse') return;\n if (swiper.animating && params.preventInteractionOnTransition) return;\n if (!swiper.animating && params.cssMode && params.loop) swiper.loopFix();\n let targetEl = e.target;\n if (params.touchEventsTarget === 'wrapper') {\n if (!(0, $3e0e2b092da8f124$export$efccba1c4a2ef57b)(targetEl, swiper.wrapperEl)) 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 // change target el for shadow root component\n const swipingClassHasValue = !!params.noSwipingClass && params.noSwipingClass !== '';\n // eslint-disable-next-line\n const eventPath = e.composedPath ? e.composedPath() : e.path;\n if (swipingClassHasValue && e.target && e.target.shadowRoot && eventPath) targetEl = eventPath[0];\n const noSwipingSelector = params.noSwipingSelector ? params.noSwipingSelector : `.${params.noSwipingClass}`;\n const isTargetShadow = !!(e.target && e.target.shadowRoot);\n // use closestElement for shadow root element to get the actual closest for nested shadow root element\n if (params.noSwiping && (isTargetShadow ? $6946bfb4689eabba$var$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 // Do NOT start if iOS edge swipe is detected. Otherwise iOS app cannot swipe-to-go-back anymore\n if (!$6946bfb4689eabba$var$preventEdgeSwipe(swiper, e, startX)) return;\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 = (0, $3e0e2b092da8f124$export$2d1720544b23b823)();\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') data.isTouched = false;\n }\n if (document1.activeElement && document1.activeElement.matches(data.focusableElements) && document1.activeElement !== targetEl && (e.pointerType === 'mouse' || e.pointerType !== 'mouse' && !targetEl.matches(data.focusableElements))) document1.activeElement.blur();\n const shouldPreventDefault = preventDefault && swiper.allowTouchMove && params.touchStartPreventDefault;\n if ((params.touchStartForcePreventDefault || shouldPreventDefault) && !targetEl.isContentEditable) e.preventDefault();\n if (params.freeMode && params.freeMode.enabled && swiper.freeMode && swiper.animating && !params.cssMode) swiper.freeMode.onTouchStart();\n swiper.emit('touchStart', e);\n}\nfunction $6946bfb4689eabba$var$onTouchMove(event) {\n const document1 = (0, $768c2f4c151a0363$export$39b482c5e57630a8)();\n const swiper = this;\n const data = swiper.touchEventsData;\n const { params: params, touches: touches, rtlTranslate: rtl, enabled: enabled } = 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 (e.type === 'pointermove') {\n if (data.touchId !== null) return; // return from pointer if we use touch\n const id = e.pointerId;\n if (id !== data.pointerId) return;\n }\n let targetTouch;\n if (e.type === 'touchmove') {\n targetTouch = [\n ...e.changedTouches\n ].find((t)=>t.identifier === data.touchId);\n if (!targetTouch || targetTouch.identifier !== data.touchId) return;\n } else targetTouch = e;\n if (!data.isTouched) {\n if (data.startMoving && data.isScrolling) swiper.emit('touchMoveOpposite', e);\n return;\n }\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)) swiper.allowClick = false;\n if (data.isTouched) {\n Object.assign(touches, {\n startX: pageX,\n startY: pageY,\n currentX: pageX,\n currentY: pageY\n });\n data.touchStartTime = (0, $3e0e2b092da8f124$export$2d1720544b23b823)();\n }\n return;\n }\n if (params.touchReleaseOnEdges && !params.loop) {\n if (swiper.isVertical()) // Vertical\n {\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 (rtl && (pageX > touches.startX && -swiper.translate <= swiper.maxTranslate() || pageX < touches.startX && -swiper.translate >= swiper.minTranslate())) return;\n else if (!rtl && (pageX < touches.startX && swiper.translate <= swiper.maxTranslate() || pageX > touches.startX && swiper.translate >= swiper.minTranslate())) return;\n }\n if (document1.activeElement && document1.activeElement.matches(data.focusableElements) && document1.activeElement !== e.target && e.pointerType !== 'mouse') document1.activeElement.blur();\n if (document1.activeElement) {\n if (e.target === document1.activeElement && e.target.matches(data.focusableElements)) {\n data.isMoved = true;\n swiper.allowClick = false;\n return;\n }\n }\n if (data.allowTouchCallbacks) swiper.emit('touchMove', e);\n touches.previousX = touches.currentX;\n touches.previousY = touches.currentY;\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) data.isScrolling = false;\n else // 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 if (data.isScrolling) swiper.emit('touchMoveOpposite', e);\n if (typeof data.startMoving === 'undefined') {\n if (touches.currentX !== touches.startX || touches.currentY !== touches.startY) data.startMoving = true;\n }\n if (data.isScrolling || e.type === 'touchmove' && data.preventTouchMoveFromPointerMove) {\n data.isTouched = false;\n return;\n }\n if (!data.startMoving) return;\n swiper.allowClick = false;\n if (!params.cssMode && e.cancelable) e.preventDefault();\n if (params.touchMoveStopPropagation && !params.nested) e.stopPropagation();\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 const allowLoopFix = swiper.touchesDirection === 'next' && swiper.allowSlideNext || swiper.touchesDirection === 'prev' && swiper.allowSlidePrev;\n if (!data.isMoved) {\n if (isLoop && allowLoopFix) swiper.loopFix({\n direction: swiper.swipeDirection\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 detail: {\n bySwiperTouchMove: true\n }\n });\n swiper.wrapperEl.dispatchEvent(evt);\n }\n data.allowMomentumBounce = false;\n // Grab Cursor\n if (params.grabCursor && (swiper.allowSlideNext === true || swiper.allowSlidePrev === true)) swiper.setGrabCursor(true);\n swiper.emit('sliderFirstMove', e);\n }\n let loopFixed;\n new Date().getTime();\n if (params._loopSwapReset !== false && data.isMoved && data.allowThresholdMove && prevTouchesDirection !== swiper.touchesDirection && isLoop && allowLoopFix && Math.abs(diff) >= 1) {\n Object.assign(touches, {\n startX: pageX,\n startY: pageY,\n currentX: pageX,\n currentY: pageY,\n startTranslate: data.currentTranslate\n });\n data.loopSwapReset = true;\n data.startTranslate = data.currentTranslate;\n return;\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) resistanceRatio = 0;\n if (diff > 0) {\n if (isLoop && allowLoopFix && !loopFixed && data.allowThresholdMove && data.currentTranslate > (params.centeredSlides ? swiper.minTranslate() - swiper.slidesSizesGrid[swiper.activeIndex + 1] - (params.slidesPerView !== 'auto' && swiper.slides.length - params.slidesPerView >= 2 ? swiper.slidesSizesGrid[swiper.activeIndex + 1] + swiper.params.spaceBetween : 0) - swiper.params.spaceBetween : swiper.minTranslate())) swiper.loopFix({\n direction: 'prev',\n setTranslate: true,\n activeSlideIndex: 0\n });\n if (data.currentTranslate > swiper.minTranslate()) {\n disableParentSwiper = false;\n if (params.resistance) data.currentTranslate = swiper.minTranslate() - 1 + (-swiper.minTranslate() + data.startTranslate + diff) ** resistanceRatio;\n }\n } else if (diff < 0) {\n if (isLoop && allowLoopFix && !loopFixed && data.allowThresholdMove && data.currentTranslate < (params.centeredSlides ? swiper.maxTranslate() + swiper.slidesSizesGrid[swiper.slidesSizesGrid.length - 1] + swiper.params.spaceBetween + (params.slidesPerView !== 'auto' && swiper.slides.length - params.slidesPerView >= 2 ? swiper.slidesSizesGrid[swiper.slidesSizesGrid.length - 1] + swiper.params.spaceBetween : 0) : swiper.maxTranslate())) 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 if (data.currentTranslate < swiper.maxTranslate()) {\n disableParentSwiper = false;\n if (params.resistance) data.currentTranslate = swiper.maxTranslate() + 1 - (swiper.maxTranslate() - data.startTranslate - diff) ** resistanceRatio;\n }\n }\n if (disableParentSwiper) e.preventedByNestedSwiper = true;\n // Directions locks\n if (!swiper.allowSlideNext && swiper.swipeDirection === 'next' && data.currentTranslate < data.startTranslate) data.currentTranslate = data.startTranslate;\n if (!swiper.allowSlidePrev && swiper.swipeDirection === 'prev' && data.currentTranslate > data.startTranslate) data.currentTranslate = data.startTranslate;\n if (!swiper.allowSlidePrev && !swiper.allowSlideNext) data.currentTranslate = data.startTranslate;\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 // 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) swiper.freeMode.onTouchMove();\n // Update progress\n swiper.updateProgress(data.currentTranslate);\n // Update translate\n swiper.setTranslate(data.currentTranslate);\n}\nfunction $6946bfb4689eabba$var$onTouchEnd(event) {\n const swiper = this;\n const data = swiper.touchEventsData;\n let e = event;\n if (e.originalEvent) e = e.originalEvent;\n let targetTouch;\n const isTouchEvent = e.type === 'touchend' || e.type === 'touchcancel';\n if (!isTouchEvent) {\n if (data.touchId !== null) return; // return from pointer if we use touch\n if (e.pointerId !== data.pointerId) return;\n targetTouch = e;\n } else {\n targetTouch = [\n ...e.changedTouches\n ].find((t)=>t.identifier === data.touchId);\n if (!targetTouch || targetTouch.identifier !== data.touchId) return;\n }\n if ([\n 'pointercancel',\n 'pointerout',\n 'pointerleave',\n 'contextmenu'\n ].includes(e.type)) {\n const proceed = [\n 'pointercancel',\n 'contextmenu'\n ].includes(e.type) && (swiper.browser.isSafari || swiper.browser.isWebView);\n if (!proceed) return;\n }\n data.pointerId = null;\n data.touchId = null;\n const { params: params, touches: touches, rtlTranslate: rtl, slidesGrid: slidesGrid, enabled: enabled } = swiper;\n if (!enabled) return;\n if (!params.simulateTouch && e.pointerType === 'mouse') return;\n if (data.allowTouchCallbacks) swiper.emit('touchEnd', e);\n data.allowTouchCallbacks = false;\n if (!data.isTouched) {\n if (data.isMoved && params.grabCursor) swiper.setGrabCursor(false);\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)) swiper.setGrabCursor(false);\n // Time diff\n const touchEndTime = (0, $3e0e2b092da8f124$export$2d1720544b23b823)();\n const timeDiff = touchEndTime - data.touchStartTime;\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, pathTree);\n swiper.emit('tap click', e);\n if (timeDiff < 300 && touchEndTime - data.lastClickTime < 300) swiper.emit('doubleTap doubleClick', e);\n }\n data.lastClickTime = (0, $3e0e2b092da8f124$export$2d1720544b23b823)();\n (0, $3e0e2b092da8f124$export$7ccc53e8f1e7dfc5)(()=>{\n if (!swiper.destroyed) swiper.allowClick = true;\n });\n if (!data.isTouched || !data.isMoved || !swiper.swipeDirection || touches.diff === 0 && !data.loopSwapReset || data.currentTranslate === data.startTranslate && !data.loopSwapReset) {\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) currentPos = rtl ? swiper.translate : -swiper.translate;\n else currentPos = -data.currentTranslate;\n if (params.cssMode) return;\n if (params.freeMode && params.freeMode.enabled) {\n swiper.freeMode.onTouchEnd({\n currentPos: currentPos\n });\n return;\n }\n // Find current slide\n const swipeToLast = currentPos >= -swiper.maxTranslate() && !swiper.params.loop;\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 (swipeToLast || currentPos >= slidesGrid[i] && currentPos < slidesGrid[i + increment]) {\n stopIndex = i;\n groupSize = slidesGrid[i + increment] - slidesGrid[i];\n }\n } else if (swipeToLast || 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) rewindLastIndex = params.virtual && params.virtual.enabled && swiper.virtual ? swiper.virtual.slides.length - 1 : swiper.slides.length - 1;\n else if (swiper.isEnd) rewindFirstIndex = 0;\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);\n else swiper.slideTo(stopIndex);\n }\n if (swiper.swipeDirection === 'prev') {\n if (ratio > 1 - params.longSwipesRatio) swiper.slideTo(stopIndex + increment);\n else if (rewindLastIndex !== null && ratio < 0 && Math.abs(ratio) > params.longSwipesRatio) swiper.slideTo(rewindLastIndex);\n else swiper.slideTo(stopIndex);\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') swiper.slideTo(rewindFirstIndex !== null ? rewindFirstIndex : stopIndex + increment);\n if (swiper.swipeDirection === 'prev') swiper.slideTo(rewindLastIndex !== null ? rewindLastIndex : stopIndex);\n } else if (e.target === swiper.navigation.nextEl) swiper.slideTo(stopIndex + increment);\n else swiper.slideTo(stopIndex);\n }\n}\nfunction $6946bfb4689eabba$var$onResize() {\n const swiper = this;\n const { params: params, el: el } = swiper;\n if (el && el.offsetWidth === 0) return;\n // Breakpoints\n if (params.breakpoints) swiper.setBreakpoint();\n // Save locks\n const { allowSlideNext: allowSlideNext, allowSlidePrev: allowSlidePrev, snapGrid: snapGrid } = swiper;\n const isVirtual = swiper.virtual && swiper.params.virtual.enabled;\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) swiper.slideTo(swiper.slides.length - 1, 0, false, true);\n else if (swiper.params.loop && !isVirtual) swiper.slideToLoop(swiper.realIndex, 0, false, true);\n else swiper.slideTo(swiper.activeIndex, 0, false, true);\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) swiper.autoplay.resume();\n }, 500);\n }\n // Return locks after resize\n swiper.allowSlidePrev = allowSlidePrev;\n swiper.allowSlideNext = allowSlideNext;\n if (swiper.params.watchOverflow && snapGrid !== swiper.snapGrid) swiper.checkOverflow();\n}\nfunction $6946bfb4689eabba$var$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}\nfunction $6946bfb4689eabba$var$onScroll() {\n const swiper = this;\n const { wrapperEl: wrapperEl, rtlTranslate: rtlTranslate, enabled: enabled } = swiper;\n if (!enabled) return;\n swiper.previousTranslate = swiper.translate;\n if (swiper.isHorizontal()) swiper.translate = -wrapperEl.scrollLeft;\n else swiper.translate = -wrapperEl.scrollTop;\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) newProgress = 0;\n else newProgress = (swiper.translate - swiper.minTranslate()) / translatesDiff;\n if (newProgress !== swiper.progress) swiper.updateProgress(rtlTranslate ? -swiper.translate : swiper.translate);\n swiper.emit('setTranslate', swiper.translate, false);\n}\nfunction $6946bfb4689eabba$var$onLoad(e) {\n const swiper = this;\n $6946bfb4689eabba$var$processLazyPreloader(swiper, e.target);\n if (swiper.params.cssMode || swiper.params.slidesPerView !== 'auto' && !swiper.params.autoHeight) return;\n swiper.update();\n}\nfunction $6946bfb4689eabba$var$onDocumentTouchStart() {\n const swiper = this;\n if (swiper.documentTouchHandlerProceeded) return;\n swiper.documentTouchHandlerProceeded = true;\n if (swiper.params.touchReleaseOnEdges) swiper.el.style.touchAction = 'auto';\n}\nconst $6946bfb4689eabba$var$events = (swiper, method)=>{\n const document1 = (0, $768c2f4c151a0363$export$39b482c5e57630a8)();\n const { params: params, el: el, wrapperEl: wrapperEl, device: device } = swiper;\n const capture = !!params.nested;\n const domMethod = method === 'on' ? 'addEventListener' : 'removeEventListener';\n const swiperMethod = method;\n if (!el || typeof el === 'string') return;\n // Touch Events\n document1[domMethod]('touchstart', swiper.onDocumentTouchStart, {\n passive: false,\n capture: capture\n });\n el[domMethod]('touchstart', swiper.onTouchStart, {\n passive: false\n });\n el[domMethod]('pointerdown', swiper.onTouchStart, {\n passive: false\n });\n document1[domMethod]('touchmove', swiper.onTouchMove, {\n passive: false,\n capture: capture\n });\n document1[domMethod]('pointermove', swiper.onTouchMove, {\n passive: false,\n capture: capture\n });\n document1[domMethod]('touchend', swiper.onTouchEnd, {\n passive: true\n });\n document1[domMethod]('pointerup', swiper.onTouchEnd, {\n passive: true\n });\n document1[domMethod]('pointercancel', swiper.onTouchEnd, {\n passive: true\n });\n document1[domMethod]('touchcancel', swiper.onTouchEnd, {\n passive: true\n });\n document1[domMethod]('pointerout', swiper.onTouchEnd, {\n passive: true\n });\n document1[domMethod]('pointerleave', swiper.onTouchEnd, {\n passive: true\n });\n document1[domMethod]('contextmenu', swiper.onTouchEnd, {\n passive: true\n });\n // Prevent Links Clicks\n if (params.preventClicks || params.preventClicksPropagation) el[domMethod]('click', swiper.onClick, true);\n if (params.cssMode) wrapperEl[domMethod]('scroll', swiper.onScroll);\n // Resize handler\n if (params.updateOnWindowResize) swiper[swiperMethod](device.ios || device.android ? 'resize orientationchange observerUpdate' : 'resize observerUpdate', $6946bfb4689eabba$var$onResize, true);\n else swiper[swiperMethod]('observerUpdate', $6946bfb4689eabba$var$onResize, true);\n // Images loader\n el[domMethod]('load', swiper.onLoad, {\n capture: true\n });\n};\nfunction $6946bfb4689eabba$var$attachEvents() {\n const swiper = this;\n const { params: params } = swiper;\n swiper.onTouchStart = $6946bfb4689eabba$var$onTouchStart.bind(swiper);\n swiper.onTouchMove = $6946bfb4689eabba$var$onTouchMove.bind(swiper);\n swiper.onTouchEnd = $6946bfb4689eabba$var$onTouchEnd.bind(swiper);\n swiper.onDocumentTouchStart = $6946bfb4689eabba$var$onDocumentTouchStart.bind(swiper);\n if (params.cssMode) swiper.onScroll = $6946bfb4689eabba$var$onScroll.bind(swiper);\n swiper.onClick = $6946bfb4689eabba$var$onClick.bind(swiper);\n swiper.onLoad = $6946bfb4689eabba$var$onLoad.bind(swiper);\n $6946bfb4689eabba$var$events(swiper, 'on');\n}\nfunction $6946bfb4689eabba$var$detachEvents() {\n const swiper = this;\n $6946bfb4689eabba$var$events(swiper, 'off');\n}\nvar $6946bfb4689eabba$var$events$1 = {\n attachEvents: $6946bfb4689eabba$var$attachEvents,\n detachEvents: $6946bfb4689eabba$var$detachEvents\n};\nconst $6946bfb4689eabba$var$isGridEnabled = (swiper, params)=>{\n return swiper.grid && params.grid && params.grid.rows > 1;\n};\nfunction $6946bfb4689eabba$var$setBreakpoint() {\n const swiper = this;\n const { realIndex: realIndex, initialized: initialized, params: params, el: el } = swiper;\n const breakpoints = params.breakpoints;\n if (!breakpoints || breakpoints && Object.keys(breakpoints).length === 0) return;\n const document1 = (0, $768c2f4c151a0363$export$39b482c5e57630a8)();\n // Get breakpoint for window/container width and update parameters\n const breakpointsBase = params.breakpointsBase === 'window' || !params.breakpointsBase ? params.breakpointsBase : 'container';\n const breakpointContainer = [\n 'window',\n 'container'\n ].includes(params.breakpointsBase) || !params.breakpointsBase ? swiper.el : document1.querySelector(params.breakpointsBase);\n const breakpoint = swiper.getBreakpoint(breakpoints, breakpointsBase, breakpointContainer);\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 = $6946bfb4689eabba$var$isGridEnabled(swiper, params);\n const isMultiRow = $6946bfb4689eabba$var$isGridEnabled(swiper, breakpointParams);\n const wasGrabCursor = swiper.params.grabCursor;\n const isGrabCursor = breakpointParams.grabCursor;\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') el.classList.add(`${params.containerModifierClass}grid-column`);\n swiper.emitContainerClasses();\n }\n if (wasGrabCursor && !isGrabCursor) swiper.unsetGrabCursor();\n else if (!wasGrabCursor && isGrabCursor) swiper.setGrabCursor();\n // Toggle navigation, pagination, scrollbar\n [\n 'navigation',\n 'pagination',\n 'scrollbar'\n ].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) swiper[prop].disable();\n if (!wasModuleEnabled && isModuleEnabled) swiper[prop].enable();\n });\n const directionChanged = breakpointParams.direction && breakpointParams.direction !== params.direction;\n const needsReLoop = params.loop && (breakpointParams.slidesPerView !== params.slidesPerView || directionChanged);\n const wasLoop = params.loop;\n if (directionChanged && initialized) swiper.changeDirection();\n (0, $3e0e2b092da8f124$export$d141bba7fdc215a3)(swiper.params, breakpointParams);\n const isEnabled = swiper.params.enabled;\n const hasLoop = swiper.params.loop;\n Object.assign(swiper, {\n allowTouchMove: swiper.params.allowTouchMove,\n allowSlideNext: swiper.params.allowSlideNext,\n allowSlidePrev: swiper.params.allowSlidePrev\n });\n if (wasEnabled && !isEnabled) swiper.disable();\n else if (!wasEnabled && isEnabled) swiper.enable();\n swiper.currentBreakpoint = breakpoint;\n swiper.emit('_beforeBreakpoint', breakpointParams);\n if (initialized) {\n if (needsReLoop) {\n swiper.loopDestroy();\n swiper.loopCreate(realIndex);\n swiper.updateSlides();\n } else if (!wasLoop && hasLoop) {\n swiper.loopCreate(realIndex);\n swiper.updateSlides();\n } else if (wasLoop && !hasLoop) swiper.loopDestroy();\n }\n swiper.emit('breakpoint', breakpointParams);\n}\nfunction $6946bfb4689eabba$var$getBreakpoint(breakpoints, base, containerEl) {\n if (base === void 0) base = 'window';\n if (!breakpoints || base === 'container' && !containerEl) return undefined;\n let breakpoint = false;\n const window1 = (0, $768c2f4c151a0363$export$407448d2b89b1813)();\n const currentHeight = base === 'window' ? window1.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: value,\n point: point\n };\n }\n return {\n value: point,\n point: 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 { point: point, value: value } = points[i];\n if (base === 'window') {\n if (window1.matchMedia(`(min-width: ${value}px)`).matches) breakpoint = point;\n } else if (value <= containerEl.clientWidth) breakpoint = point;\n }\n return breakpoint || 'max';\n}\nvar $6946bfb4689eabba$var$breakpoints = {\n setBreakpoint: $6946bfb4689eabba$var$setBreakpoint,\n getBreakpoint: $6946bfb4689eabba$var$getBreakpoint\n};\nfunction $6946bfb4689eabba$var$prepareClasses(entries, prefix) {\n const resultClasses = [];\n entries.forEach((item)=>{\n if (typeof item === 'object') Object.keys(item).forEach((classNames)=>{\n if (item[classNames]) resultClasses.push(prefix + classNames);\n });\n else if (typeof item === 'string') resultClasses.push(prefix + item);\n });\n return resultClasses;\n}\nfunction $6946bfb4689eabba$var$addClasses() {\n const swiper = this;\n const { classNames: classNames, params: params, rtl: rtl, el: el, device: device } = swiper;\n // prettier-ignore\n const suffixes = $6946bfb4689eabba$var$prepareClasses([\n 'initialized',\n params.direction,\n {\n 'free-mode': swiper.params.freeMode && params.freeMode.enabled\n },\n {\n 'autoheight': params.autoHeight\n },\n {\n 'rtl': rtl\n },\n {\n 'grid': params.grid && params.grid.rows > 1\n },\n {\n 'grid-column': params.grid && params.grid.rows > 1 && params.grid.fill === 'column'\n },\n {\n 'android': device.android\n },\n {\n 'ios': device.ios\n },\n {\n 'css-mode': params.cssMode\n },\n {\n 'centered': params.cssMode && params.centeredSlides\n },\n {\n 'watch-progress': params.watchSlidesProgress\n }\n ], params.containerModifierClass);\n classNames.push(...suffixes);\n el.classList.add(...classNames);\n swiper.emitContainerClasses();\n}\nfunction $6946bfb4689eabba$var$removeClasses() {\n const swiper = this;\n const { el: el, classNames: classNames } = swiper;\n if (!el || typeof el === 'string') return;\n el.classList.remove(...classNames);\n swiper.emitContainerClasses();\n}\nvar $6946bfb4689eabba$var$classes = {\n addClasses: $6946bfb4689eabba$var$addClasses,\n removeClasses: $6946bfb4689eabba$var$removeClasses\n};\nfunction $6946bfb4689eabba$var$checkOverflow() {\n const swiper = this;\n const { isLocked: wasLocked, params: params } = swiper;\n const { slidesOffsetBefore: slidesOffsetBefore } = 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 swiper.isLocked = swiper.snapGrid.length === 1;\n if (params.allowSlideNext === true) swiper.allowSlideNext = !swiper.isLocked;\n if (params.allowSlidePrev === true) swiper.allowSlidePrev = !swiper.isLocked;\n if (wasLocked && wasLocked !== swiper.isLocked) swiper.isEnd = false;\n if (wasLocked !== swiper.isLocked) swiper.emit(swiper.isLocked ? 'lock' : 'unlock');\n}\nvar $6946bfb4689eabba$var$checkOverflow$1 = {\n checkOverflow: $6946bfb4689eabba$var$checkOverflow\n};\nvar $6946bfb4689eabba$export$4368d992c4eafac0 = {\n init: true,\n direction: 'horizontal',\n oneWayMovement: false,\n swiperElementNodeName: 'SWIPER-CONTAINER',\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 eventsPrefix: 'swiper',\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 // 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 loopAddBlankSlides: true,\n loopAdditionalSlides: 0,\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 slideBlankClass: 'swiper-slide-blank',\n slideActiveClass: 'swiper-slide-active',\n slideVisibleClass: 'swiper-slide-visible',\n slideFullyVisibleClass: 'swiper-slide-fully-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};\nfunction $6946bfb4689eabba$var$moduleExtendParams(params, allModulesParams) {\n return function extendParams(obj) {\n if (obj === void 0) obj = {};\n const moduleParamName = Object.keys(obj)[0];\n const moduleParams = obj[moduleParamName];\n if (typeof moduleParams !== 'object' || moduleParams === null) {\n (0, $3e0e2b092da8f124$export$d141bba7fdc215a3)(allModulesParams, obj);\n return;\n }\n if (params[moduleParamName] === true) params[moduleParamName] = {\n enabled: true\n };\n if (moduleParamName === 'navigation' && params[moduleParamName] && params[moduleParamName].enabled && !params[moduleParamName].prevEl && !params[moduleParamName].nextEl) params[moduleParamName].auto = true;\n if ([\n 'pagination',\n 'scrollbar'\n ].indexOf(moduleParamName) >= 0 && params[moduleParamName] && params[moduleParamName].enabled && !params[moduleParamName].el) params[moduleParamName].auto = true;\n if (!(moduleParamName in params && 'enabled' in moduleParams)) {\n (0, $3e0e2b092da8f124$export$d141bba7fdc215a3)(allModulesParams, obj);\n return;\n }\n if (typeof params[moduleParamName] === 'object' && !('enabled' in params[moduleParamName])) params[moduleParamName].enabled = true;\n if (!params[moduleParamName]) params[moduleParamName] = {\n enabled: false\n };\n (0, $3e0e2b092da8f124$export$d141bba7fdc215a3)(allModulesParams, obj);\n };\n}\n/* eslint no-param-reassign: \"off\" */ const $6946bfb4689eabba$var$prototypes = {\n eventsEmitter: $6946bfb4689eabba$var$eventsEmitter,\n update: $6946bfb4689eabba$var$update,\n translate: $6946bfb4689eabba$var$translate,\n transition: $6946bfb4689eabba$var$transition,\n slide: $6946bfb4689eabba$var$slide,\n loop: $6946bfb4689eabba$var$loop,\n grabCursor: $6946bfb4689eabba$var$grabCursor,\n events: $6946bfb4689eabba$var$events$1,\n breakpoints: $6946bfb4689eabba$var$breakpoints,\n checkOverflow: $6946bfb4689eabba$var$checkOverflow$1,\n classes: $6946bfb4689eabba$var$classes\n};\nconst $6946bfb4689eabba$var$extendedDefaults = {};\nclass $6946bfb4689eabba$export$25ce5a424b770e84 {\n constructor(){\n let el;\n let params;\n for(var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++)args[_key] = arguments[_key];\n if (args.length === 1 && args[0].constructor && Object.prototype.toString.call(args[0]).slice(8, -1) === 'Object') params = args[0];\n else [el, params] = args;\n if (!params) params = {};\n params = (0, $3e0e2b092da8f124$export$d141bba7fdc215a3)({}, params);\n if (el && !params.el) params.el = el;\n const document1 = (0, $768c2f4c151a0363$export$39b482c5e57630a8)();\n if (params.el && typeof params.el === 'string' && document1.querySelectorAll(params.el).length > 1) {\n const swipers = [];\n document1.querySelectorAll(params.el).forEach((containerEl)=>{\n const newParams = (0, $3e0e2b092da8f124$export$d141bba7fdc215a3)({}, params, {\n el: containerEl\n });\n swipers.push(new $6946bfb4689eabba$export$25ce5a424b770e84(newParams));\n });\n // eslint-disable-next-line no-constructor-return\n return swipers;\n }\n // Swiper Instance\n const swiper = this;\n swiper.__swiper__ = true;\n swiper.support = $6946bfb4689eabba$var$getSupport();\n swiper.device = $6946bfb4689eabba$var$getDevice({\n userAgent: params.userAgent\n });\n swiper.browser = $6946bfb4689eabba$var$getBrowser();\n swiper.eventsListeners = {};\n swiper.eventsAnyListeners = [];\n swiper.modules = [\n ...swiper.__modules__\n ];\n if (params.modules && Array.isArray(params.modules)) swiper.modules.push(...params.modules);\n const allModulesParams = {};\n swiper.modules.forEach((mod)=>{\n mod({\n params: params,\n swiper: swiper,\n extendParams: $6946bfb4689eabba$var$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 // Extend defaults with modules params\n const swiperParams = (0, $3e0e2b092da8f124$export$d141bba7fdc215a3)({}, $6946bfb4689eabba$export$4368d992c4eafac0, allModulesParams);\n // Extend defaults with passed params\n swiper.params = (0, $3e0e2b092da8f124$export$d141bba7fdc215a3)({}, swiperParams, $6946bfb4689eabba$var$extendedDefaults, params);\n swiper.originalParams = (0, $3e0e2b092da8f124$export$d141bba7fdc215a3)({}, swiper.params);\n swiper.passedParams = (0, $3e0e2b092da8f124$export$d141bba7fdc215a3)({}, params);\n // add event listeners\n if (swiper.params && swiper.params.on) Object.keys(swiper.params.on).forEach((eventName)=>{\n swiper.on(eventName, swiper.params.on[eventName]);\n });\n if (swiper.params && swiper.params.onAny) swiper.onAny(swiper.params.onAny);\n // Extend Swiper\n Object.assign(swiper, {\n enabled: swiper.params.enabled,\n el: 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 pointerId: null,\n touchId: null\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 // Init\n if (swiper.params.init) swiper.init();\n // Return app instance\n // eslint-disable-next-line no-constructor-return\n return swiper;\n }\n getDirectionLabel(property) {\n if (this.isHorizontal()) return property;\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 getSlideIndex(slideEl) {\n const { slidesEl: slidesEl, params: params } = this;\n const slides = (0, $3e0e2b092da8f124$export$f1e1789686576879)(slidesEl, `.${params.slideClass}, swiper-slide`);\n const firstSlideIndex = (0, $3e0e2b092da8f124$export$23f2a1d2818174ef)(slides[0]);\n return (0, $3e0e2b092da8f124$export$23f2a1d2818174ef)(slideEl) - firstSlideIndex;\n }\n getSlideIndexByData(index) {\n return this.getSlideIndex(this.slides.find((slideEl)=>slideEl.getAttribute('data-swiper-slide-index') * 1 === index));\n }\n recalcSlides() {\n const swiper = this;\n const { slidesEl: slidesEl, params: params } = swiper;\n swiper.slides = (0, $3e0e2b092da8f124$export$f1e1789686576879)(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) swiper.setGrabCursor();\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) swiper.unsetGrabCursor();\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: slideEl,\n classNames: classNames\n });\n swiper.emit('_slideClass', slideEl, classNames);\n });\n swiper.emit('_slideClasses', updates);\n }\n slidesPerViewDynamic(view, exact) {\n if (view === void 0) view = 'current';\n if (exact === void 0) exact = false;\n const swiper = this;\n const { params: params, slides: slides, slidesGrid: slidesGrid, slidesSizesGrid: slidesSizesGrid, size: swiperSize, activeIndex: activeIndex } = swiper;\n let spv = 1;\n if (typeof params.slidesPerView === 'number') return params.slidesPerView;\n if (params.centeredSlides) {\n let slideSize = slides[activeIndex] ? Math.ceil(slides[activeIndex].swiperSlideSize) : 0;\n let breakLoop;\n for(let i = activeIndex + 1; i < slides.length; i += 1)if (slides[i] && !breakLoop) {\n slideSize += Math.ceil(slides[i].swiperSlideSize);\n spv += 1;\n if (slideSize > swiperSize) breakLoop = true;\n }\n for(let i = activeIndex - 1; i >= 0; i -= 1)if (slides[i] && !breakLoop) {\n slideSize += slides[i].swiperSlideSize;\n spv += 1;\n if (slideSize > swiperSize) breakLoop = true;\n }\n } else {\n // eslint-disable-next-line\n if (view === 'current') 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) spv += 1;\n }\n else // previous\n for(let i = activeIndex - 1; i >= 0; i -= 1){\n const slideInView = slidesGrid[activeIndex] - slidesGrid[i] < swiperSize;\n if (slideInView) spv += 1;\n }\n }\n return spv;\n }\n update() {\n const swiper = this;\n if (!swiper || swiper.destroyed) return;\n const { snapGrid: snapGrid, params: params } = swiper;\n // Breakpoints\n if (params.breakpoints) swiper.setBreakpoint();\n [\n ...swiper.el.querySelectorAll('[loading=\"lazy\"]')\n ].forEach((imageEl)=>{\n if (imageEl.complete) $6946bfb4689eabba$var$processLazyPreloader(swiper, imageEl);\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) swiper.updateAutoHeight();\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 translated = swiper.slideTo(swiper.activeIndex, 0, false, true);\n if (!translated) setTranslate();\n }\n if (params.watchOverflow && snapGrid !== swiper.snapGrid) swiper.checkOverflow();\n swiper.emit('update');\n }\n changeDirection(newDirection, needUpdate) {\n if (needUpdate === void 0) needUpdate = true;\n const swiper = this;\n const currentDirection = swiper.params.direction;\n if (!newDirection) // eslint-disable-next-line\n newDirection = currentDirection === 'horizontal' ? 'vertical' : 'horizontal';\n if (newDirection === currentDirection || newDirection !== 'horizontal' && newDirection !== 'vertical') return swiper;\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') slideEl.style.width = '';\n else slideEl.style.height = '';\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 // Find el\n let el = element || swiper.params.el;\n if (typeof el === 'string') el = document.querySelector(el);\n if (!el) return false;\n el.swiper = swiper;\n if (el.parentNode && el.parentNode.host && el.parentNode.host.nodeName === swiper.params.swiperElementNodeName.toUpperCase()) swiper.isElement = true;\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 (0, $3e0e2b092da8f124$export$f1e1789686576879)(el, getWrapperSelector())[0];\n };\n // Find Wrapper\n let wrapperEl = getWrapper();\n if (!wrapperEl && swiper.params.createElements) {\n wrapperEl = (0, $3e0e2b092da8f124$export$db3b6bfb95261072)('div', swiper.params.wrapperClass);\n el.append(wrapperEl);\n (0, $3e0e2b092da8f124$export$f1e1789686576879)(el, `.${swiper.params.slideClass}`).forEach((slideEl)=>{\n wrapperEl.append(slideEl);\n });\n }\n Object.assign(swiper, {\n el: el,\n wrapperEl: wrapperEl,\n slidesEl: swiper.isElement && !el.parentNode.host.slideSlots ? el.parentNode.host : wrapperEl,\n hostEl: swiper.isElement ? el.parentNode.host : el,\n mounted: true,\n // RTL\n rtl: el.dir.toLowerCase() === 'rtl' || (0, $3e0e2b092da8f124$export$9e5f44173e64f162)(el, 'direction') === 'rtl',\n rtlTranslate: swiper.params.direction === 'horizontal' && (el.dir.toLowerCase() === 'rtl' || (0, $3e0e2b092da8f124$export$9e5f44173e64f162)(el, 'direction') === 'rtl'),\n wrongRTL: (0, $3e0e2b092da8f124$export$9e5f44173e64f162)(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 // Set breakpoint\n if (swiper.params.breakpoints) swiper.setBreakpoint();\n // Add Classes\n swiper.addClasses();\n // Update size\n swiper.updateSize();\n // Update slides\n swiper.updateSlides();\n if (swiper.params.watchOverflow) swiper.checkOverflow();\n // Set Grab Cursor\n if (swiper.params.grabCursor && swiper.enabled) swiper.setGrabCursor();\n // Slide To Initial Slide\n if (swiper.params.loop && swiper.virtual && swiper.params.virtual.enabled) swiper.slideTo(swiper.params.initialSlide + swiper.virtual.slidesBefore, 0, swiper.params.runCallbacksOnInit, false, true);\n else swiper.slideTo(swiper.params.initialSlide, 0, swiper.params.runCallbacksOnInit, false, true);\n // Create loop\n if (swiper.params.loop) swiper.loopCreate(undefined, true);\n // Attach events\n swiper.attachEvents();\n const lazyElements = [\n ...swiper.el.querySelectorAll('[loading=\"lazy\"]')\n ];\n if (swiper.isElement) lazyElements.push(...swiper.hostEl.querySelectorAll('[loading=\"lazy\"]'));\n lazyElements.forEach((imageEl)=>{\n if (imageEl.complete) $6946bfb4689eabba$var$processLazyPreloader(swiper, imageEl);\n else imageEl.addEventListener('load', (e)=>{\n $6946bfb4689eabba$var$processLazyPreloader(swiper, e.target);\n });\n });\n $6946bfb4689eabba$var$preload(swiper);\n // Init Flag\n swiper.initialized = true;\n $6946bfb4689eabba$var$preload(swiper);\n // Emit\n swiper.emit('init');\n swiper.emit('afterInit');\n return swiper;\n }\n destroy(deleteInstance, cleanStyles) {\n if (deleteInstance === void 0) deleteInstance = true;\n if (cleanStyles === void 0) cleanStyles = true;\n const swiper = this;\n const { params: params, el: el, wrapperEl: wrapperEl, slides: slides } = swiper;\n if (typeof swiper.params === 'undefined' || swiper.destroyed) return null;\n swiper.emit('beforeDestroy');\n // Init Flag\n swiper.initialized = false;\n // Detach events\n swiper.detachEvents();\n // Destroy loop\n if (params.loop) swiper.loopDestroy();\n // Cleanup styles\n if (cleanStyles) {\n swiper.removeClasses();\n if (el && typeof el !== 'string') el.removeAttribute('style');\n if (wrapperEl) wrapperEl.removeAttribute('style');\n if (slides && slides.length) slides.forEach((slideEl)=>{\n slideEl.classList.remove(params.slideVisibleClass, params.slideFullyVisibleClass, params.slideActiveClass, params.slideNextClass, params.slidePrevClass);\n slideEl.removeAttribute('style');\n slideEl.removeAttribute('data-swiper-slide-index');\n });\n }\n swiper.emit('destroy');\n // Detach emitter events\n Object.keys(swiper.eventsListeners).forEach((eventName)=>{\n swiper.off(eventName);\n });\n if (deleteInstance !== false) {\n if (swiper.el && typeof swiper.el !== 'string') swiper.el.swiper = null;\n (0, $3e0e2b092da8f124$export$4a5767248b18ef41)(swiper);\n }\n swiper.destroyed = true;\n return null;\n }\n static extendDefaults(newDefaults) {\n (0, $3e0e2b092da8f124$export$d141bba7fdc215a3)($6946bfb4689eabba$var$extendedDefaults, newDefaults);\n }\n static get extendedDefaults() {\n return $6946bfb4689eabba$var$extendedDefaults;\n }\n static get defaults() {\n return $6946bfb4689eabba$export$4368d992c4eafac0;\n }\n static installModule(mod) {\n if (!$6946bfb4689eabba$export$25ce5a424b770e84.prototype.__modules__) $6946bfb4689eabba$export$25ce5a424b770e84.prototype.__modules__ = [];\n const modules = $6946bfb4689eabba$export$25ce5a424b770e84.prototype.__modules__;\n if (typeof mod === 'function' && modules.indexOf(mod) < 0) modules.push(mod);\n }\n static use(module) {\n if (Array.isArray(module)) {\n module.forEach((m)=>$6946bfb4689eabba$export$25ce5a424b770e84.installModule(m));\n return $6946bfb4689eabba$export$25ce5a424b770e84;\n }\n $6946bfb4689eabba$export$25ce5a424b770e84.installModule(module);\n return $6946bfb4689eabba$export$25ce5a424b770e84;\n }\n}\nObject.keys($6946bfb4689eabba$var$prototypes).forEach((prototypeGroup)=>{\n Object.keys($6946bfb4689eabba$var$prototypes[prototypeGroup]).forEach((protoMethod)=>{\n $6946bfb4689eabba$export$25ce5a424b770e84.prototype[protoMethod] = $6946bfb4689eabba$var$prototypes[prototypeGroup][protoMethod];\n });\n});\n$6946bfb4689eabba$export$25ce5a424b770e84.use([\n $6946bfb4689eabba$var$Resize,\n $6946bfb4689eabba$var$Observer\n]);\n\n\n\n\nclass $0eb5dd2823b8d4ee$export$2e2bcd8739ae039 extends (0, $1e1b4d625d583414$export$bd0bf19f25da8474) {\n static{\n this.values = {\n options: Object\n };\n }\n connect() {\n // @ts-expect-error\n this.swiper = new (0, $6946bfb4689eabba$export$25ce5a424b770e84)(this.element, {\n ...this.defaultOptions,\n ...this.optionsValue\n });\n }\n disconnect() {\n this.swiper.destroy();\n this.swiper = undefined;\n }\n get defaultOptions() {\n return {\n modules: [\n (0, $ad56a2ca63fb5863$export$2e2bcd8739ae039)\n ],\n navigation: {\n nextEl: \".swiper-button-next\",\n prevEl: \".swiper-button-prev\"\n },\n slidesPerView: 1.2,\n spaceBetween: 20,\n centerInsufficientSlides: true,\n centeredSlidesBounds: true,\n // Responsive breakpoints\n breakpoints: {\n // when window width is >= 320px\n // when window width is >= 480px\n 768: {\n slidesPerView: 2.2\n },\n 1280: {\n slidesPerView: 3.2\n }\n }\n };\n }\n}\n\n\n\nclass $60c0124de0654852$export$2e2bcd8739ae039 extends (0, $1e1b4d625d583414$export$bd0bf19f25da8474) {\n static{\n this.targets = [\n \"top\",\n \"bottom\"\n ];\n }\n connect() {}\n toggle() {\n if (this.element.ariaExpanded === \"true\") this.element.setAttribute(\"aria-expanded\", \"false\");\n else this.element.setAttribute(\"aria-expanded\", \"true\");\n }\n}\n\n\n\nclass $b92e0ee301f7fe69$export$2e2bcd8739ae039 extends (0, $1e1b4d625d583414$export$bd0bf19f25da8474) {\n static{\n this.targets = [\n \"accordion\",\n \"form\"\n ];\n }\n formTargetConnected() {\n // We call it here instead of in initialize or connect so that\n // the events are attached after each turbo-frame load.\n for (const element of this.element.querySelectorAll(\"td\"))element.addEventListener(\"click\", this.#setDate.bind(this));\n }\n #setDate(event) {\n this.formTarget.querySelector(\"input[name=date]\").value = event.target.dataset.value;\n this.formTarget.requestSubmit();\n }\n setQuantity(event) {\n this.formTarget.querySelector(\"input[name=quantity]\").value = event.target.dataset.value;\n this.formTarget.requestSubmit();\n }\n setFormula(event) {\n this.formTarget.querySelector(\"input[name=formula]\").value = event.target.dataset.value;\n this.formTarget.requestSubmit();\n }\n show() {\n this.element.ariaExpanded = true;\n }\n}\n\n\nconst $a6c79d0de6fd3d03$var$application = (0, $1e1b4d625d583414$export$16975c34e60e1e61).start();\n$a6c79d0de6fd3d03$var$application.debug = true;\n$a6c79d0de6fd3d03$var$application.register(\"book\", (0, $b92e0ee301f7fe69$export$2e2bcd8739ae039));\n$a6c79d0de6fd3d03$var$application.register('carousel', (0, $0eb5dd2823b8d4ee$export$2e2bcd8739ae039));\n$a6c79d0de6fd3d03$var$application.register('menu', (0, $60c0124de0654852$export$2e2bcd8739ae039));\nfunction $a6c79d0de6fd3d03$var$initComponent(ComponentClass) {\n const items = document.querySelectorAll(ComponentClass.selector());\n items.forEach((item)=>new ComponentClass(item));\n}\ndocument.addEventListener('DOMContentLoaded', ()=>{\n $a6c79d0de6fd3d03$var$initComponent((0, $8b78d3c676514ebb$export$2e2bcd8739ae039));\n});\n\n})();\n//# sourceMappingURL=main.js.map\n","// import Turbo from \"@hotwired/turbo\"\nimport \"./main.css\"\nimport Payment from \"./js/components/payment\"\nimport { Application } from \"@hotwired/stimulus\"\nimport Carousel from './controllers/carousel'\nimport Menu from \"./controllers/menu\"\nimport BookingController from \"./controllers/booking\"\n\nconst application = Application.start()\n\napplication.debug = true\napplication.register(\"book\", BookingController)\napplication.register('carousel', Carousel)\napplication.register('menu', Menu)\n\nfunction initComponent(ComponentClass) {\n const items = document.querySelectorAll(ComponentClass.selector());\n items.forEach((item) => new ComponentClass(item));\n}\n\ndocument.addEventListener('DOMContentLoaded', () => {\n initComponent(Payment);\n});\n","class Payment {\n static selector() {\n return \"[data-payment]\";\n }\n\n constructor(node) {\n const mollie = Mollie(\n \"pfl_qCasbusi7m\",\n {\n locale: \"fr_FR\", // Optional. If not provided, we will determine the users' language by looking at the document and/or userAgent.\n testmode: true,\n },\n );\n\n const options = {};\n\n /**\n * Get elements\n */\n const form = document.getElementById(\"mcForm\");\n const formError = document.getElementById(\"form-error\");\n const submitButton = document.getElementById(\"submit-button\");\n\n /**\n * Create card holder input\n */\n const cardHolder = mollie.createComponent(\"cardHolder\", options);\n cardHolder.mount(\"#card-holder\");\n\n const cardHolderError = document.getElementById(\"card-holder-error\");\n\n cardHolder.addEventListener(\"change\", function (event) {\n if (event.error && event.touched) {\n cardHolderError.textContent = event.error;\n } else {\n cardHolderError.textContent = \"\";\n }\n });\n\n /**\n * Create card number input\n */\n const cardNumber = mollie.createComponent(\"cardNumber\", options);\n cardNumber.mount(\"#card-number\");\n\n const cardNumberError = document.getElementById(\"card-number-error\");\n\n cardNumber.addEventListener(\"change\", function (event) {\n if (event.error && event.touched) {\n cardNumberError.textContent = event.error;\n } else {\n cardNumberError.textContent = \"\";\n }\n });\n\n /**\n * Create expiry date input\n */\n const expiryDate = mollie.createComponent(\"expiryDate\", options);\n expiryDate.mount(\"#expiry-date\");\n\n const expiryDateError = document.getElementById(\"expiry-date-error\");\n\n expiryDate.addEventListener(\"change\", function (event) {\n if (event.error && event.touched) {\n expiryDateError.textContent = event.error;\n } else {\n expiryDateError.textContent = \"\";\n }\n });\n\n /**\n * Create verification code input\n */\n const verificationCode = mollie.createComponent(\n \"verificationCode\",\n options,\n );\n verificationCode.mount(\"#verification-code\");\n\n const verificationCodeError = document.getElementById(\n \"verification-code-error\",\n );\n\n verificationCode.addEventListener(\"change\", function (event) {\n if (event.error && event.touched) {\n verificationCodeError.textContent = event.error;\n } else {\n verificationCodeError.textContent = \"\";\n }\n });\n\n /**\n * Disables the form inputs and submit button\n */\n function disableForm() {\n submitButton.disabled = true;\n }\n\n /**\n * Enables the form inputs and submit button\n */\n function enableForm() {\n submitButton.disabled = false;\n }\n\n /**\n * Submit handler\n */\n form.addEventListener(\"submit\", function (event) {\n console.log(\"SUBMIT FORM\")\n event.preventDefault();\n disableForm();\n\n // Reset possible form error\n formError.textContent = \"\";\n\n // Get a payment token\n mollie.createToken().then(function (result) {\n const token = result.token;\n const error = result.error;\n\n if (error) {\n enableForm();\n formError.textContent = error.message;\n return;\n }\n\n // Add token to the form\n const tokenInput = document.createElement(\"input\");\n tokenInput.setAttribute(\"name\", \"token\");\n tokenInput.setAttribute(\"type\", \"hidden\");\n tokenInput.setAttribute(\"value\", token);\n\n form.appendChild(tokenInput);\n\n console.error({ token })\n\n form.submit();\n });\n });\n }\n}\n\nexport default Payment;\n","/*\nStimulus 3.2.1\nCopyright © 2023 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 hasBindings() {\n return this.unorderedBindings.size > 0;\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()).reduce((listeners, map) => listeners.concat(Array.from(map.values())), []);\n }\n bindingConnected(binding) {\n this.fetchEventListenerForBinding(binding).bindingConnected(binding);\n }\n bindingDisconnected(binding, clearEventListeners = false) {\n this.fetchEventListenerForBinding(binding).bindingDisconnected(binding);\n if (clearEventListeners)\n this.clearEventListenersForBinding(binding);\n }\n handleError(error, message, detail = {}) {\n this.application.handleError(error, `Error ${message}`, detail);\n }\n clearEventListenersForBinding(binding) {\n const eventListener = this.fetchEventListenerForBinding(binding);\n if (!eventListener.hasBindings()) {\n eventListener.disconnect();\n this.removeMappedEventListenerFor(binding);\n }\n }\n removeMappedEventListenerFor(binding) {\n const { eventTarget, eventName, eventOptions } = binding;\n const eventListenerMap = this.fetchEventListenerMapForEventTarget(eventTarget);\n const cacheKey = this.cacheKey(eventName, eventOptions);\n eventListenerMap.delete(cacheKey);\n if (eventListenerMap.size == 0)\n this.eventListenerMaps.delete(eventTarget);\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)\n .sort()\n .forEach((key) => {\n parts.push(`${eventOptions[key] ? \"\" : \"!\"}${key}`);\n });\n return parts.join(\":\");\n }\n}\n\nconst defaultActionDescriptorFilters = {\n stop({ event, value }) {\n if (value)\n event.stopPropagation();\n return true;\n },\n prevent({ event, value }) {\n if (value)\n event.preventDefault();\n return true;\n },\n self({ event, value, element }) {\n if (value) {\n return element === event.target;\n }\n else {\n return true;\n }\n },\n};\nconst descriptorPattern = /^(?:(?:([^.]+?)\\+)?(.+?)(?:\\.(.+?))?(?:@(window|document))?->)?(.+?)(?:#([^:]+?))(?::(.+))?$/;\nfunction parseActionDescriptorString(descriptorString) {\n const source = descriptorString.trim();\n const matches = source.match(descriptorPattern) || [];\n let eventName = matches[2];\n let keyFilter = matches[3];\n if (keyFilter && ![\"keydown\", \"keyup\", \"keypress\"].includes(eventName)) {\n eventName += `.${keyFilter}`;\n keyFilter = \"\";\n }\n return {\n eventTarget: parseEventTarget(matches[4]),\n eventName,\n eventOptions: matches[7] ? parseEventOptions(matches[7]) : {},\n identifier: matches[5],\n methodName: matches[6],\n keyFilter: matches[1] || keyFilter,\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\n .split(\":\")\n .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 namespaceCamelize(value) {\n return camelize(value.replace(/--/g, \"-\").replace(/__/g, \"_\"));\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\nfunction isSomething(object) {\n return object !== null && object !== undefined;\n}\nfunction hasProperty(object, property) {\n return Object.prototype.hasOwnProperty.call(object, property);\n}\n\nconst allModifiers = [\"meta\", \"ctrl\", \"alt\", \"shift\"];\nclass Action {\n constructor(element, index, descriptor, schema) {\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 this.keyFilter = descriptor.keyFilter || \"\";\n this.schema = schema;\n }\n static forToken(token, schema) {\n return new this(token.element, token.index, parseActionDescriptorString(token.content), schema);\n }\n toString() {\n const eventFilter = this.keyFilter ? `.${this.keyFilter}` : \"\";\n const eventTarget = this.eventTargetName ? `@${this.eventTargetName}` : \"\";\n return `${this.eventName}${eventFilter}${eventTarget}->${this.identifier}#${this.methodName}`;\n }\n shouldIgnoreKeyboardEvent(event) {\n if (!this.keyFilter) {\n return false;\n }\n const filters = this.keyFilter.split(\"+\");\n if (this.keyFilterDissatisfied(event, filters)) {\n return true;\n }\n const standardFilter = filters.filter((key) => !allModifiers.includes(key))[0];\n if (!standardFilter) {\n return false;\n }\n if (!hasProperty(this.keyMappings, standardFilter)) {\n error(`contains unknown key filter: ${this.keyFilter}`);\n }\n return this.keyMappings[standardFilter].toLowerCase() !== event.key.toLowerCase();\n }\n shouldIgnoreMouseEvent(event) {\n if (!this.keyFilter) {\n return false;\n }\n const filters = [this.keyFilter];\n if (this.keyFilterDissatisfied(event, filters)) {\n return true;\n }\n return false;\n }\n get params() {\n const params = {};\n const pattern = new RegExp(`^data-${this.identifier}-(.+)-param$`, \"i\");\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 get keyMappings() {\n return this.schema.keyMappings;\n }\n keyFilterDissatisfied(event, filters) {\n const [meta, ctrl, alt, shift] = allModifiers.map((modifier) => filters.includes(modifier));\n return event.metaKey !== meta || event.ctrlKey !== ctrl || event.altKey !== alt || event.shiftKey !== shift;\n }\n}\nconst defaultEventNames = {\n a: () => \"click\",\n button: () => \"click\",\n form: () => \"submit\",\n details: () => \"toggle\",\n input: (e) => (e.getAttribute(\"type\") == \"submit\" ? \"click\" : \"input\"),\n select: () => \"change\",\n textarea: () => \"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 const actionEvent = this.prepareActionEvent(event);\n if (this.willBeInvokedByEvent(event) && this.applyEventModifiers(actionEvent)) {\n this.invokeWithEvent(actionEvent);\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 applyEventModifiers(event) {\n const { element } = this.action;\n const { actionDescriptorFilters } = this.context.application;\n const { controller } = this.context;\n let passes = true;\n for (const [name, value] of Object.entries(this.eventOptions)) {\n if (name in actionDescriptorFilters) {\n const filter = actionDescriptorFilters[name];\n passes = passes && filter({ name, value, event, element, controller });\n }\n else {\n continue;\n }\n }\n return passes;\n }\n prepareActionEvent(event) {\n return Object.assign(event, { params: this.action.params });\n }\n invokeWithEvent(event) {\n const { target, currentTarget } = event;\n try {\n this.method.call(this.controller, event);\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 willBeInvokedByEvent(event) {\n const eventTarget = event.target;\n if (event instanceof KeyboardEvent && this.action.shouldIgnoreKeyboardEvent(event)) {\n return false;\n }\n if (event instanceof MouseEvent && this.action.shouldIgnoreMouseEvent(event)) {\n return false;\n }\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(element, attributeName) {\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\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 SelectorObserver {\n constructor(element, selector, delegate, details) {\n this._selector = selector;\n this.details = details;\n this.elementObserver = new ElementObserver(element, this);\n this.delegate = delegate;\n this.matchesByElement = new Multimap();\n }\n get started() {\n return this.elementObserver.started;\n }\n get selector() {\n return this._selector;\n }\n set selector(selector) {\n this._selector = selector;\n this.refresh();\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 element() {\n return this.elementObserver.element;\n }\n matchElement(element) {\n const { selector } = this;\n if (selector) {\n const matches = element.matches(selector);\n if (this.delegate.selectorMatchElement) {\n return matches && this.delegate.selectorMatchElement(element, this.details);\n }\n return matches;\n }\n else {\n return false;\n }\n }\n matchElementsInTree(tree) {\n const { selector } = this;\n if (selector) {\n const match = this.matchElement(tree) ? [tree] : [];\n const matches = Array.from(tree.querySelectorAll(selector)).filter((match) => this.matchElement(match));\n return match.concat(matches);\n }\n else {\n return [];\n }\n }\n elementMatched(element) {\n const { selector } = this;\n if (selector) {\n this.selectorMatched(element, selector);\n }\n }\n elementUnmatched(element) {\n const selectors = this.matchesByElement.getKeysForValue(element);\n for (const selector of selectors) {\n this.selectorUnmatched(element, selector);\n }\n }\n elementAttributeChanged(element, _attributeName) {\n const { selector } = this;\n if (selector) {\n const matches = this.matchElement(element);\n const matchedBefore = this.matchesByElement.has(selector, element);\n if (matches && !matchedBefore) {\n this.selectorMatched(element, selector);\n }\n else if (!matches && matchedBefore) {\n this.selectorUnmatched(element, selector);\n }\n }\n }\n selectorMatched(element, selector) {\n this.delegate.selectorMatched(element, selector, this.details);\n this.matchesByElement.add(selector, element);\n }\n selectorUnmatched(element, selector) {\n this.delegate.selectorUnmatched(element, selector, this.details);\n this.matchesByElement.delete(selector, element);\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\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).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\n .trim()\n .split(/\\s+/)\n .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, true));\n this.bindingsByAction.clear();\n }\n parseValueForToken(token) {\n const action = Action.forToken(token, this.schema);\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 error.message = `Stimulus Value \"${this.context.identifier}.${descriptor.name}\" - ${error.message}`;\n }\n throw error;\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\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\nclass OutletObserver {\n constructor(context, delegate) {\n this.started = false;\n this.context = context;\n this.delegate = delegate;\n this.outletsByName = new Multimap();\n this.outletElementsByName = new Multimap();\n this.selectorObserverMap = new Map();\n this.attributeObserverMap = new Map();\n }\n start() {\n if (!this.started) {\n this.outletDefinitions.forEach((outletName) => {\n this.setupSelectorObserverForOutlet(outletName);\n this.setupAttributeObserverForOutlet(outletName);\n });\n this.started = true;\n this.dependentContexts.forEach((context) => context.refresh());\n }\n }\n refresh() {\n this.selectorObserverMap.forEach((observer) => observer.refresh());\n this.attributeObserverMap.forEach((observer) => observer.refresh());\n }\n stop() {\n if (this.started) {\n this.started = false;\n this.disconnectAllOutlets();\n this.stopSelectorObservers();\n this.stopAttributeObservers();\n }\n }\n stopSelectorObservers() {\n if (this.selectorObserverMap.size > 0) {\n this.selectorObserverMap.forEach((observer) => observer.stop());\n this.selectorObserverMap.clear();\n }\n }\n stopAttributeObservers() {\n if (this.attributeObserverMap.size > 0) {\n this.attributeObserverMap.forEach((observer) => observer.stop());\n this.attributeObserverMap.clear();\n }\n }\n selectorMatched(element, _selector, { outletName }) {\n const outlet = this.getOutlet(element, outletName);\n if (outlet) {\n this.connectOutlet(outlet, element, outletName);\n }\n }\n selectorUnmatched(element, _selector, { outletName }) {\n const outlet = this.getOutletFromMap(element, outletName);\n if (outlet) {\n this.disconnectOutlet(outlet, element, outletName);\n }\n }\n selectorMatchElement(element, { outletName }) {\n const selector = this.selector(outletName);\n const hasOutlet = this.hasOutlet(element, outletName);\n const hasOutletController = element.matches(`[${this.schema.controllerAttribute}~=${outletName}]`);\n if (selector) {\n return hasOutlet && hasOutletController && element.matches(selector);\n }\n else {\n return false;\n }\n }\n elementMatchedAttribute(_element, attributeName) {\n const outletName = this.getOutletNameFromOutletAttributeName(attributeName);\n if (outletName) {\n this.updateSelectorObserverForOutlet(outletName);\n }\n }\n elementAttributeValueChanged(_element, attributeName) {\n const outletName = this.getOutletNameFromOutletAttributeName(attributeName);\n if (outletName) {\n this.updateSelectorObserverForOutlet(outletName);\n }\n }\n elementUnmatchedAttribute(_element, attributeName) {\n const outletName = this.getOutletNameFromOutletAttributeName(attributeName);\n if (outletName) {\n this.updateSelectorObserverForOutlet(outletName);\n }\n }\n connectOutlet(outlet, element, outletName) {\n var _a;\n if (!this.outletElementsByName.has(outletName, element)) {\n this.outletsByName.add(outletName, outlet);\n this.outletElementsByName.add(outletName, element);\n (_a = this.selectorObserverMap.get(outletName)) === null || _a === void 0 ? void 0 : _a.pause(() => this.delegate.outletConnected(outlet, element, outletName));\n }\n }\n disconnectOutlet(outlet, element, outletName) {\n var _a;\n if (this.outletElementsByName.has(outletName, element)) {\n this.outletsByName.delete(outletName, outlet);\n this.outletElementsByName.delete(outletName, element);\n (_a = this.selectorObserverMap\n .get(outletName)) === null || _a === void 0 ? void 0 : _a.pause(() => this.delegate.outletDisconnected(outlet, element, outletName));\n }\n }\n disconnectAllOutlets() {\n for (const outletName of this.outletElementsByName.keys) {\n for (const element of this.outletElementsByName.getValuesForKey(outletName)) {\n for (const outlet of this.outletsByName.getValuesForKey(outletName)) {\n this.disconnectOutlet(outlet, element, outletName);\n }\n }\n }\n }\n updateSelectorObserverForOutlet(outletName) {\n const observer = this.selectorObserverMap.get(outletName);\n if (observer) {\n observer.selector = this.selector(outletName);\n }\n }\n setupSelectorObserverForOutlet(outletName) {\n const selector = this.selector(outletName);\n const selectorObserver = new SelectorObserver(document.body, selector, this, { outletName });\n this.selectorObserverMap.set(outletName, selectorObserver);\n selectorObserver.start();\n }\n setupAttributeObserverForOutlet(outletName) {\n const attributeName = this.attributeNameForOutletName(outletName);\n const attributeObserver = new AttributeObserver(this.scope.element, attributeName, this);\n this.attributeObserverMap.set(outletName, attributeObserver);\n attributeObserver.start();\n }\n selector(outletName) {\n return this.scope.outlets.getSelectorForOutletName(outletName);\n }\n attributeNameForOutletName(outletName) {\n return this.scope.schema.outletAttributeForScope(this.identifier, outletName);\n }\n getOutletNameFromOutletAttributeName(attributeName) {\n return this.outletDefinitions.find((outletName) => this.attributeNameForOutletName(outletName) === attributeName);\n }\n get outletDependencies() {\n const dependencies = new Multimap();\n this.router.modules.forEach((module) => {\n const constructor = module.definition.controllerConstructor;\n const outlets = readInheritableStaticArrayValues(constructor, \"outlets\");\n outlets.forEach((outlet) => dependencies.add(outlet, module.identifier));\n });\n return dependencies;\n }\n get outletDefinitions() {\n return this.outletDependencies.getKeysForValue(this.identifier);\n }\n get dependentControllerIdentifiers() {\n return this.outletDependencies.getValuesForKey(this.identifier);\n }\n get dependentContexts() {\n const identifiers = this.dependentControllerIdentifiers;\n return this.router.contexts.filter((context) => identifiers.includes(context.identifier));\n }\n hasOutlet(element, outletName) {\n return !!this.getOutlet(element, outletName) || !!this.getOutletFromMap(element, outletName);\n }\n getOutlet(element, outletName) {\n return this.application.getControllerForElementAndIdentifier(element, outletName);\n }\n getOutletFromMap(element, outletName) {\n return this.outletsByName.getValuesForKey(outletName).find((outlet) => outlet.element === element);\n }\n get scope() {\n return this.context.scope;\n }\n get schema() {\n return this.context.schema;\n }\n get identifier() {\n return this.context.identifier;\n }\n get application() {\n return this.context.application;\n }\n get router() {\n return this.application.router;\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 this.outletObserver = new OutletObserver(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 this.outletObserver.start();\n try {\n this.controller.connect();\n this.logDebugActivity(\"connect\");\n }\n catch (error) {\n this.handleError(error, \"connecting controller\");\n }\n }\n refresh() {\n this.outletObserver.refresh();\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.outletObserver.stop();\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 outletConnected(outlet, element, name) {\n this.invokeControllerMethod(`${namespaceCamelize(name)}OutletConnected`, outlet, element);\n }\n outletDisconnected(outlet, element, name) {\n this.invokeControllerMethod(`${namespaceCamelize(name)}OutletDisconnected`, outlet, 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 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) => [...Object.getOwnPropertyNames(object), ...Object.getOwnPropertySymbols(object)];\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 () {\n this.a.call(this);\n };\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 || this.findTarget(targetName) || 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 OutletSet {\n constructor(scope, controllerElement) {\n this.scope = scope;\n this.controllerElement = controllerElement;\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(outletName) {\n return this.find(outletName) != null;\n }\n find(...outletNames) {\n return outletNames.reduce((outlet, outletName) => outlet || this.findOutlet(outletName), undefined);\n }\n findAll(...outletNames) {\n return outletNames.reduce((outlets, outletName) => [...outlets, ...this.findAllOutlets(outletName)], []);\n }\n getSelectorForOutletName(outletName) {\n const attributeName = this.schema.outletAttributeForScope(this.identifier, outletName);\n return this.controllerElement.getAttribute(attributeName);\n }\n findOutlet(outletName) {\n const selector = this.getSelectorForOutletName(outletName);\n if (selector)\n return this.findElement(selector, outletName);\n }\n findAllOutlets(outletName) {\n const selector = this.getSelectorForOutletName(outletName);\n return selector ? this.findAllElements(selector, outletName) : [];\n }\n findElement(selector, outletName) {\n const elements = this.scope.queryElements(selector);\n return elements.filter((element) => this.matchesElement(element, selector, outletName))[0];\n }\n findAllElements(selector, outletName) {\n const elements = this.scope.queryElements(selector);\n return elements.filter((element) => this.matchesElement(element, selector, outletName));\n }\n matchesElement(element, selector, outletName) {\n const controllerAttribute = element.getAttribute(this.scope.schema.controllerAttribute) || \"\";\n return element.matches(selector) && controllerAttribute.split(\" \").includes(outletName);\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 this.outlets = new OutletSet(this.documentScope, element);\n }\n findElement(selector) {\n return this.element.matches(selector) ? this.element : 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 get isDocumentScope() {\n return this.element === document.documentElement;\n }\n get documentScope() {\n return this.isDocumentScope\n ? this\n : new Scope(this.schema, document.documentElement, this.identifier, this.guide.logger);\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 return this.parseValueForElementAndIdentifier(element, identifier);\n }\n parseValueForElementAndIdentifier(element, identifier) {\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 const afterLoad = definition.controllerConstructor.afterLoad;\n if (afterLoad) {\n afterLoad.call(definition.controllerConstructor, definition.identifier, this.application);\n }\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 proposeToConnectScopeForElementAndIdentifier(element, identifier) {\n const scope = this.scopeObserver.parseValueForElementAndIdentifier(element, identifier);\n if (scope) {\n this.scopeObserver.elementMatchedValue(scope.element, scope);\n }\n else {\n console.error(`Couldn't find or create scope for identifier: \"${identifier}\" and 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 outletAttributeForScope: (identifier, outlet) => `data-${identifier}-${outlet}-outlet`,\n keyMappings: Object.assign(Object.assign({ enter: \"Enter\", tab: \"Tab\", esc: \"Escape\", space: \" \", up: \"ArrowUp\", down: \"ArrowDown\", left: \"ArrowLeft\", right: \"ArrowRight\", home: \"Home\", end: \"End\", page_up: \"PageUp\", page_down: \"PageDown\" }, objectFromEntries(\"abcdefghijklmnopqrstuvwxyz\".split(\"\").map((c) => [c, c]))), objectFromEntries(\"0123456789\".split(\"\").map((n) => [n, n]))),\n};\nfunction objectFromEntries(array) {\n return array.reduce((memo, [k, v]) => (Object.assign(Object.assign({}, memo), { [k]: v })), {});\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 this.actionDescriptorFilters = Object.assign({}, defaultActionDescriptorFilters);\n }\n static start(element, schema) {\n const application = new this(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 registerActionOption(name, filter) {\n this.actionDescriptorFilters[name] = filter;\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 OutletPropertiesBlessing(constructor) {\n const outlets = readInheritableStaticArrayValues(constructor, \"outlets\");\n return outlets.reduce((properties, outletDefinition) => {\n return Object.assign(properties, propertiesForOutletDefinition(outletDefinition));\n }, {});\n}\nfunction getOutletController(controller, element, identifier) {\n return controller.application.getControllerForElementAndIdentifier(element, identifier);\n}\nfunction getControllerAndEnsureConnectedScope(controller, element, outletName) {\n let outletController = getOutletController(controller, element, outletName);\n if (outletController)\n return outletController;\n controller.application.router.proposeToConnectScopeForElementAndIdentifier(element, outletName);\n outletController = getOutletController(controller, element, outletName);\n if (outletController)\n return outletController;\n}\nfunction propertiesForOutletDefinition(name) {\n const camelizedName = namespaceCamelize(name);\n return {\n [`${camelizedName}Outlet`]: {\n get() {\n const outletElement = this.outlets.find(name);\n const selector = this.outlets.getSelectorForOutletName(name);\n if (outletElement) {\n const outletController = getControllerAndEnsureConnectedScope(this, outletElement, name);\n if (outletController)\n return outletController;\n throw new Error(`The provided outlet element is missing an outlet controller \"${name}\" instance for host controller \"${this.identifier}\"`);\n }\n throw new Error(`Missing outlet element \"${name}\" for host controller \"${this.identifier}\". Stimulus couldn't find a matching outlet element using selector \"${selector}\".`);\n },\n },\n [`${camelizedName}Outlets`]: {\n get() {\n const outlets = this.outlets.findAll(name);\n if (outlets.length > 0) {\n return outlets\n .map((outletElement) => {\n const outletController = getControllerAndEnsureConnectedScope(this, outletElement, name);\n if (outletController)\n return outletController;\n console.warn(`The provided outlet element is missing an outlet controller \"${name}\" instance for host controller \"${this.identifier}\"`, outletElement);\n })\n .filter((controller) => controller);\n }\n return [];\n },\n },\n [`${camelizedName}OutletElement`]: {\n get() {\n const outletElement = this.outlets.find(name);\n const selector = this.outlets.getSelectorForOutletName(name);\n if (outletElement) {\n return outletElement;\n }\n else {\n throw new Error(`Missing outlet element \"${name}\" for host controller \"${this.identifier}\". Stimulus couldn't find a matching outlet element using selector \"${selector}\".`);\n }\n },\n },\n [`${camelizedName}OutletElements`]: {\n get() {\n return this.outlets.findAll(name);\n },\n },\n [`has${capitalize(camelizedName)}Outlet`]: {\n get() {\n return this.outlets.has(name);\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:\n return \"array\";\n case Boolean:\n return \"boolean\";\n case Number:\n return \"number\";\n case Object:\n return \"object\";\n case String:\n return \"string\";\n }\n}\nfunction parseValueTypeDefault(defaultValue) {\n switch (typeof defaultValue) {\n case \"boolean\":\n return \"boolean\";\n case \"number\":\n return \"number\";\n case \"string\":\n 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 { controller, token, typeObject } = payload;\n const hasType = isSomething(typeObject.type);\n const hasDefault = isSomething(typeObject.default);\n const fullObject = hasType && hasDefault;\n const onlyType = hasType && !hasDefault;\n const onlyDefault = !hasType && hasDefault;\n const typeFromObject = parseValueTypeConstant(typeObject.type);\n const typeFromDefaultValue = parseValueTypeDefault(payload.typeObject.default);\n if (onlyType)\n return typeFromObject;\n if (onlyDefault)\n return typeFromDefaultValue;\n if (typeFromObject !== typeFromDefaultValue) {\n const propertyPath = controller ? `${controller}.${token}` : 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 \"${typeObject.default}\" is of type \"${typeFromDefaultValue}\".`);\n }\n if (fullObject)\n return typeFromObject;\n}\nfunction parseValueTypeDefinition(payload) {\n const { controller, token, typeDefinition } = payload;\n const typeObject = { controller, token, typeObject: typeDefinition };\n const typeFromObject = parseValueTypeObject(typeObject);\n const typeFromDefaultValue = parseValueTypeDefault(typeDefinition);\n const typeFromConstant = parseValueTypeConstant(typeDefinition);\n const type = typeFromObject || typeFromDefaultValue || typeFromConstant;\n if (type)\n return type;\n const propertyPath = controller ? `${controller}.${typeDefinition}` : token;\n throw new Error(`Unknown value type \"${propertyPath}\" for \"${token}\" value`);\n}\nfunction defaultValueForDefinition(typeDefinition) {\n const constant = parseValueTypeConstant(typeDefinition);\n if (constant)\n return defaultValuesByType[constant];\n const hasDefault = hasProperty(typeDefinition, \"default\");\n const hasType = hasProperty(typeDefinition, \"type\");\n const typeObject = typeDefinition;\n if (hasDefault)\n return typeObject.default;\n if (hasType) {\n const { type } = typeObject;\n const constantFromType = parseValueTypeConstant(type);\n if (constantFromType)\n return defaultValuesByType[constantFromType];\n }\n return typeDefinition;\n}\nfunction valueDescriptorForTokenAndTypeDefinition(payload) {\n const { token, typeDefinition } = payload;\n const key = `${dasherize(token)}-value`;\n const type = parseValueTypeDefinition(payload);\n return {\n type,\n key,\n name: camelize(key),\n get defaultValue() {\n return defaultValueForDefinition(typeDefinition);\n },\n get hasCustomDefaultValue() {\n return parseValueTypeDefault(typeDefinition) !== undefined;\n },\n reader: readers[type],\n writer: writers[type] || writers.default,\n };\n}\nconst defaultValuesByType = {\n get array() {\n return [];\n },\n boolean: false,\n number: 0,\n get object() {\n return {};\n },\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.replace(/_/g, \"\"));\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 static afterLoad(_identifier, _application) {\n return;\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 outlets() {\n return this.scope.outlets;\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 = [\n ClassPropertiesBlessing,\n TargetPropertiesBlessing,\n ValuePropertiesBlessing,\n OutletPropertiesBlessing,\n];\nController.targets = [];\nController.outlets = [];\nController.values = {};\n\nexport { Application, AttributeObserver, Context, Controller, ElementObserver, IndexedMultimap, Multimap, SelectorObserver, StringMapObserver, TokenListObserver, ValueListObserver, add, defaultSchema, del, fetch, prune };\n","import { Controller } from \"@hotwired/stimulus\"\nimport SwiperOptions from \"swiper\"\nimport { Navigation } from 'swiper/modules';\nimport Swiper from 'swiper';\n\nexport default class Carousel extends Controller {\n declare swiper: Swiper\n declare optionsValue: SwiperOptions\n\n static values = {\n options: Object,\n }\n\n connect(): void {\n // @ts-expect-error\n this.swiper = new Swiper(this.element, {\n ...this.defaultOptions,\n ...this.optionsValue,\n })\n }\n\n disconnect(): void {\n this.swiper.destroy()\n this.swiper = undefined\n }\n\n get defaultOptions(): SwiperOptions {\n return {\n modules: [Navigation],\n navigation: {\n\n nextEl: \".swiper-button-next\",\n prevEl: \".swiper-button-prev\",\n },\n slidesPerView: 1.2,\n spaceBetween: 20,\n centerInsufficientSlides: true,\n centeredSlidesBounds: true,\n\n // Responsive breakpoints\n breakpoints: {\n // when window width is >= 320px\n // when window width is >= 480px\n 768: {\n slidesPerView: 2.2,\n },\n 1280: {\n slidesPerView: 3.2,\n }\n }\n }\n }\n}\n","export {default as Virtual} from './virtual.mjs';\nexport {default as Keyboard} from './keyboard.mjs';\nexport {default as Mousewheel} from './mousewheel.mjs';\nexport {default as Navigation} from './navigation.mjs';\nexport {default as Pagination} from './pagination.mjs';\nexport {default as Scrollbar} from './scrollbar.mjs';\nexport {default as Parallax} from './parallax.mjs';\nexport {default as Zoom} from './zoom.mjs';\nexport {default as Controller} from './controller.mjs';\nexport {default as A11y} from './a11y.mjs';\nexport {default as History} from './history.mjs';\nexport {default as HashNavigation} from './hash-navigation.mjs';\nexport {default as Autoplay} from './autoplay.mjs';\nexport {default as Thumbs} from './thumbs.mjs';\nexport {default as FreeMode} from './free-mode.mjs';\nexport {default as Grid} from './grid.mjs';\nexport {default as Manipulation} from './manipulation.mjs';\nexport {default as EffectFade} from './effect-fade.mjs';\nexport {default as EffectCube} from './effect-cube.mjs';\nexport {default as EffectFlip} from './effect-flip.mjs';\nexport {default as EffectCoverflow} from './effect-coverflow.mjs';\nexport {default as EffectCreative} from './effect-creative.mjs';\nexport {default as EffectCards} from './effect-cards.mjs';","import { g as getDocument } from '../shared/ssr-window.esm.mjs';\nimport { a as setCSSProperty, e as elementChildren, c as createElement } from '../shared/utils.mjs';\n\nfunction Virtual(_ref) {\n let {\n swiper,\n extendParams,\n on,\n emit\n } = _ref;\n extendParams({\n virtual: {\n enabled: false,\n slides: [],\n cache: true,\n renderSlide: null,\n renderExternal: null,\n renderExternalUpdate: true,\n addSlidesBefore: 0,\n addSlidesAfter: 0\n }\n });\n let cssModeTimeout;\n const document = getDocument();\n swiper.virtual = {\n cache: {},\n from: undefined,\n to: undefined,\n slides: [],\n offset: 0,\n slidesGrid: []\n };\n const tempDOM = document.createElement('div');\n function renderSlide(slide, index) {\n const params = swiper.params.virtual;\n if (params.cache && swiper.virtual.cache[index]) {\n return swiper.virtual.cache[index];\n }\n // eslint-disable-next-line\n let slideEl;\n if (params.renderSlide) {\n slideEl = params.renderSlide.call(swiper, slide, index);\n if (typeof slideEl === 'string') {\n setInnerHTML(tempDOM, slideEl);\n slideEl = tempDOM.children[0];\n }\n } else if (swiper.isElement) {\n slideEl = createElement('swiper-slide');\n } else {\n slideEl = createElement('div', swiper.params.slideClass);\n }\n slideEl.setAttribute('data-swiper-slide-index', index);\n if (!params.renderSlide) {\n setInnerHTML(slideEl, slide);\n }\n if (params.cache) {\n swiper.virtual.cache[index] = slideEl;\n }\n return slideEl;\n }\n function update(force, beforeInit, forceActiveIndex) {\n const {\n slidesPerView,\n slidesPerGroup,\n centeredSlides,\n loop: isLoop,\n initialSlide\n } = swiper.params;\n if (beforeInit && !isLoop && initialSlide > 0) {\n return;\n }\n const {\n addSlidesBefore,\n addSlidesAfter\n } = swiper.params.virtual;\n const {\n from: previousFrom,\n to: previousTo,\n slides,\n slidesGrid: previousSlidesGrid,\n offset: previousOffset\n } = swiper.virtual;\n if (!swiper.params.cssMode) {\n swiper.updateActiveIndex();\n }\n const activeIndex = typeof forceActiveIndex === 'undefined' ? swiper.activeIndex || 0 : forceActiveIndex;\n let offsetProp;\n if (swiper.rtlTranslate) offsetProp = 'right';else offsetProp = swiper.isHorizontal() ? 'left' : 'top';\n let slidesAfter;\n let slidesBefore;\n if (centeredSlides) {\n slidesAfter = Math.floor(slidesPerView / 2) + slidesPerGroup + addSlidesAfter;\n slidesBefore = Math.floor(slidesPerView / 2) + slidesPerGroup + addSlidesBefore;\n } else {\n slidesAfter = slidesPerView + (slidesPerGroup - 1) + addSlidesAfter;\n slidesBefore = (isLoop ? slidesPerView : slidesPerGroup) + addSlidesBefore;\n }\n let from = activeIndex - slidesBefore;\n let to = activeIndex + slidesAfter;\n if (!isLoop) {\n from = Math.max(from, 0);\n to = Math.min(to, slides.length - 1);\n }\n let offset = (swiper.slidesGrid[from] || 0) - (swiper.slidesGrid[0] || 0);\n if (isLoop && activeIndex >= slidesBefore) {\n from -= slidesBefore;\n if (!centeredSlides) offset += swiper.slidesGrid[0];\n } else if (isLoop && activeIndex < slidesBefore) {\n from = -slidesBefore;\n if (centeredSlides) offset += swiper.slidesGrid[0];\n }\n Object.assign(swiper.virtual, {\n from,\n to,\n offset,\n slidesGrid: swiper.slidesGrid,\n slidesBefore,\n slidesAfter\n });\n function onRendered() {\n swiper.updateSlides();\n swiper.updateProgress();\n swiper.updateSlidesClasses();\n emit('virtualUpdate');\n }\n if (previousFrom === from && previousTo === to && !force) {\n if (swiper.slidesGrid !== previousSlidesGrid && offset !== previousOffset) {\n swiper.slides.forEach(slideEl => {\n slideEl.style[offsetProp] = `${offset - Math.abs(swiper.cssOverflowAdjustment())}px`;\n });\n }\n swiper.updateProgress();\n emit('virtualUpdate');\n return;\n }\n if (swiper.params.virtual.renderExternal) {\n swiper.params.virtual.renderExternal.call(swiper, {\n offset,\n from,\n to,\n slides: function getSlides() {\n const slidesToRender = [];\n for (let i = from; i <= to; i += 1) {\n slidesToRender.push(slides[i]);\n }\n return slidesToRender;\n }()\n });\n if (swiper.params.virtual.renderExternalUpdate) {\n onRendered();\n } else {\n emit('virtualUpdate');\n }\n return;\n }\n const prependIndexes = [];\n const appendIndexes = [];\n const getSlideIndex = index => {\n let slideIndex = index;\n if (index < 0) {\n slideIndex = slides.length + index;\n } else if (slideIndex >= slides.length) {\n // eslint-disable-next-line\n slideIndex = slideIndex - slides.length;\n }\n return slideIndex;\n };\n if (force) {\n swiper.slides.filter(el => el.matches(`.${swiper.params.slideClass}, swiper-slide`)).forEach(slideEl => {\n slideEl.remove();\n });\n } else {\n for (let i = previousFrom; i <= previousTo; i += 1) {\n if (i < from || i > to) {\n const slideIndex = getSlideIndex(i);\n swiper.slides.filter(el => el.matches(`.${swiper.params.slideClass}[data-swiper-slide-index=\"${slideIndex}\"], swiper-slide[data-swiper-slide-index=\"${slideIndex}\"]`)).forEach(slideEl => {\n slideEl.remove();\n });\n }\n }\n }\n const loopFrom = isLoop ? -slides.length : 0;\n const loopTo = isLoop ? slides.length * 2 : slides.length;\n for (let i = loopFrom; i < loopTo; i += 1) {\n if (i >= from && i <= to) {\n const slideIndex = getSlideIndex(i);\n if (typeof previousTo === 'undefined' || force) {\n appendIndexes.push(slideIndex);\n } else {\n if (i > previousTo) appendIndexes.push(slideIndex);\n if (i < previousFrom) prependIndexes.push(slideIndex);\n }\n }\n }\n appendIndexes.forEach(index => {\n swiper.slidesEl.append(renderSlide(slides[index], index));\n });\n if (isLoop) {\n for (let i = prependIndexes.length - 1; i >= 0; i -= 1) {\n const index = prependIndexes[i];\n swiper.slidesEl.prepend(renderSlide(slides[index], index));\n }\n } else {\n prependIndexes.sort((a, b) => b - a);\n prependIndexes.forEach(index => {\n swiper.slidesEl.prepend(renderSlide(slides[index], index));\n });\n }\n elementChildren(swiper.slidesEl, '.swiper-slide, swiper-slide').forEach(slideEl => {\n slideEl.style[offsetProp] = `${offset - Math.abs(swiper.cssOverflowAdjustment())}px`;\n });\n onRendered();\n }\n function appendSlide(slides) {\n if (typeof slides === 'object' && 'length' in slides) {\n for (let i = 0; i < slides.length; i += 1) {\n if (slides[i]) swiper.virtual.slides.push(slides[i]);\n }\n } else {\n swiper.virtual.slides.push(slides);\n }\n update(true);\n }\n function prependSlide(slides) {\n const activeIndex = swiper.activeIndex;\n let newActiveIndex = activeIndex + 1;\n let numberOfNewSlides = 1;\n if (Array.isArray(slides)) {\n for (let i = 0; i < slides.length; i += 1) {\n if (slides[i]) swiper.virtual.slides.unshift(slides[i]);\n }\n newActiveIndex = activeIndex + slides.length;\n numberOfNewSlides = slides.length;\n } else {\n swiper.virtual.slides.unshift(slides);\n }\n if (swiper.params.virtual.cache) {\n const cache = swiper.virtual.cache;\n const newCache = {};\n Object.keys(cache).forEach(cachedIndex => {\n const cachedEl = cache[cachedIndex];\n const cachedElIndex = cachedEl.getAttribute('data-swiper-slide-index');\n if (cachedElIndex) {\n cachedEl.setAttribute('data-swiper-slide-index', parseInt(cachedElIndex, 10) + numberOfNewSlides);\n }\n newCache[parseInt(cachedIndex, 10) + numberOfNewSlides] = cachedEl;\n });\n swiper.virtual.cache = newCache;\n }\n update(true);\n swiper.slideTo(newActiveIndex, 0);\n }\n function removeSlide(slidesIndexes) {\n if (typeof slidesIndexes === 'undefined' || slidesIndexes === null) return;\n let activeIndex = swiper.activeIndex;\n if (Array.isArray(slidesIndexes)) {\n for (let i = slidesIndexes.length - 1; i >= 0; i -= 1) {\n if (swiper.params.virtual.cache) {\n delete swiper.virtual.cache[slidesIndexes[i]];\n // shift cache indexes\n Object.keys(swiper.virtual.cache).forEach(key => {\n if (key > slidesIndexes) {\n swiper.virtual.cache[key - 1] = swiper.virtual.cache[key];\n swiper.virtual.cache[key - 1].setAttribute('data-swiper-slide-index', key - 1);\n delete swiper.virtual.cache[key];\n }\n });\n }\n swiper.virtual.slides.splice(slidesIndexes[i], 1);\n if (slidesIndexes[i] < activeIndex) activeIndex -= 1;\n activeIndex = Math.max(activeIndex, 0);\n }\n } else {\n if (swiper.params.virtual.cache) {\n delete swiper.virtual.cache[slidesIndexes];\n // shift cache indexes\n Object.keys(swiper.virtual.cache).forEach(key => {\n if (key > slidesIndexes) {\n swiper.virtual.cache[key - 1] = swiper.virtual.cache[key];\n swiper.virtual.cache[key - 1].setAttribute('data-swiper-slide-index', key - 1);\n delete swiper.virtual.cache[key];\n }\n });\n }\n swiper.virtual.slides.splice(slidesIndexes, 1);\n if (slidesIndexes < activeIndex) activeIndex -= 1;\n activeIndex = Math.max(activeIndex, 0);\n }\n update(true);\n swiper.slideTo(activeIndex, 0);\n }\n function removeAllSlides() {\n swiper.virtual.slides = [];\n if (swiper.params.virtual.cache) {\n swiper.virtual.cache = {};\n }\n update(true);\n swiper.slideTo(0, 0);\n }\n on('beforeInit', () => {\n if (!swiper.params.virtual.enabled) return;\n let domSlidesAssigned;\n if (typeof swiper.passedParams.virtual.slides === 'undefined') {\n const slides = [...swiper.slidesEl.children].filter(el => el.matches(`.${swiper.params.slideClass}, swiper-slide`));\n if (slides && slides.length) {\n swiper.virtual.slides = [...slides];\n domSlidesAssigned = true;\n slides.forEach((slideEl, slideIndex) => {\n slideEl.setAttribute('data-swiper-slide-index', slideIndex);\n swiper.virtual.cache[slideIndex] = slideEl;\n slideEl.remove();\n });\n }\n }\n if (!domSlidesAssigned) {\n swiper.virtual.slides = swiper.params.virtual.slides;\n }\n swiper.classNames.push(`${swiper.params.containerModifierClass}virtual`);\n swiper.params.watchSlidesProgress = true;\n swiper.originalParams.watchSlidesProgress = true;\n update(false, true);\n });\n on('setTranslate', () => {\n if (!swiper.params.virtual.enabled) return;\n if (swiper.params.cssMode && !swiper._immediateVirtual) {\n clearTimeout(cssModeTimeout);\n cssModeTimeout = setTimeout(() => {\n update();\n }, 100);\n } else {\n update();\n }\n });\n on('init update resize', () => {\n if (!swiper.params.virtual.enabled) return;\n if (swiper.params.cssMode) {\n setCSSProperty(swiper.wrapperEl, '--swiper-virtual-size', `${swiper.virtualSize}px`);\n }\n });\n Object.assign(swiper.virtual, {\n appendSlide,\n prependSlide,\n removeSlide,\n removeAllSlides,\n update\n });\n}\n\nexport { Virtual as default };\n","/**\n * SSR Window 5.0.0\n * Better handling for window object in SSR environment\n * https://github.com/nolimits4web/ssr-window\n *\n * Copyright 2025, Vladimir Kharlampidi\n *\n * Licensed under MIT\n *\n * Released on: February 12, 2025\n */\n/* eslint-disable no-param-reassign */\nfunction isObject(obj) {\n return obj !== null && typeof obj === 'object' && 'constructor' in obj && obj.constructor === Object;\n}\nfunction extend(target, src) {\n if (target === void 0) {\n target = {};\n }\n if (src === void 0) {\n src = {};\n }\n const noExtend = ['__proto__', 'constructor', 'prototype'];\n Object.keys(src).filter(key => noExtend.indexOf(key) < 0).forEach(key => {\n if (typeof target[key] === 'undefined') target[key] = src[key];else if (isObject(src[key]) && isObject(target[key]) && Object.keys(src[key]).length > 0) {\n extend(target[key], src[key]);\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}\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 { getWindow as a, getDocument as g };\n","import { a as getWindow, g as getDocument } from './ssr-window.esm.mjs';\n\nfunction classesToTokens(classes) {\n if (classes === void 0) {\n classes = '';\n }\n return classes.trim().split(' ').filter(c => !!c.trim());\n}\n\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) {\n if (delay === void 0) {\n delay = 0;\n }\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) {\n if (axis === void 0) {\n axis = 'x';\n }\n const window = getWindow();\n let matrix;\n let curTransform;\n let transformMatrix;\n const curStyle = getComputedStyle(el);\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() {\n const to = Object(arguments.length <= 0 ? undefined : arguments[0]);\n const noExtend = ['__proto__', 'constructor', 'prototype'];\n for (let i = 1; i < arguments.length; i += 1) {\n const nextSource = i < 0 || arguments.length <= i ? undefined : arguments[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(_ref) {\n let {\n swiper,\n targetPosition,\n side\n } = _ref;\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.shadowRoot && slideEl.shadowRoot.querySelector('.swiper-slide-transform') || slideEl;\n}\nfunction elementChildren(element, selector) {\n if (selector === void 0) {\n selector = '';\n }\n const window = getWindow();\n const children = [...element.children];\n if (window.HTMLSlotElement && element instanceof HTMLSlotElement) {\n children.push(...element.assignedElements());\n }\n if (!selector) {\n return children;\n }\n return children.filter(el => el.matches(selector));\n}\nfunction elementIsChildOfSlot(el, slot) {\n // Breadth-first search through all parent's children and assigned elements\n const elementsQueue = [slot];\n while (elementsQueue.length > 0) {\n const elementToCheck = elementsQueue.shift();\n if (el === elementToCheck) {\n return true;\n }\n elementsQueue.push(...elementToCheck.children, ...(elementToCheck.shadowRoot ? elementToCheck.shadowRoot.children : []), ...(elementToCheck.assignedElements ? elementToCheck.assignedElements() : []));\n }\n}\nfunction elementIsChildOf(el, parent) {\n const window = getWindow();\n let isChild = parent.contains(el);\n if (!isChild && window.HTMLSlotElement && parent instanceof HTMLSlotElement) {\n const children = [...parent.assignedElements()];\n isChild = children.includes(el);\n if (!isChild) {\n isChild = elementIsChildOfSlot(el, parent);\n }\n }\n return isChild;\n}\nfunction showWarning(text) {\n try {\n console.warn(text);\n return;\n } catch (err) {\n // err\n }\n}\nfunction createElement(tag, classes) {\n if (classes === void 0) {\n classes = [];\n }\n const el = document.createElement(tag);\n el.classList.add(...(Array.isArray(classes) ? classes : classesToTokens(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}\nfunction makeElementsArray(el) {\n return (Array.isArray(el) ? el : [el]).filter(e => !!e);\n}\nfunction getRotateFix(swiper) {\n return v => {\n if (Math.abs(v) > 0 && swiper.browser && swiper.browser.need3dFix && Math.abs(v) % 90 === 0) {\n return v + 0.001;\n }\n return v;\n };\n}\nfunction setInnerHTML(el, html) {\n if (html === void 0) {\n html = '';\n }\n if (typeof trustedTypes !== 'undefined') {\n el.innerHTML = trustedTypes.createPolicy('html', {\n createHTML: s => s\n }).createHTML(html);\n } else {\n el.innerHTML = html;\n }\n}\n\nexport { setCSSProperty as a, elementParents as b, createElement as c, elementOffset as d, elementChildren as e, now as f, getSlideTransformEl as g, elementOuterSize as h, elementIndex as i, classesToTokens as j, getTranslate as k, elementTransitionEnd as l, makeElementsArray as m, nextTick as n, isObject as o, getRotateFix as p, elementStyle as q, elementNextAll as r, setInnerHTML as s, elementPrevAll as t, animateCSSModeScroll as u, showWarning as v, elementIsChildOf as w, extend as x, deleteProps as y };\n","import { g as getDocument, a as getWindow } from '../shared/ssr-window.esm.mjs';\nimport { b as elementParents, d as elementOffset } from '../shared/utils.mjs';\n\n/* eslint-disable consistent-return */\nfunction Keyboard(_ref) {\n let {\n swiper,\n extendParams,\n on,\n emit\n } = _ref;\n const document = getDocument();\n const window = getWindow();\n swiper.keyboard = {\n enabled: false\n };\n extendParams({\n keyboard: {\n enabled: false,\n onlyInViewport: true,\n pageUpDown: true\n }\n });\n function handle(event) {\n if (!swiper.enabled) return;\n const {\n rtlTranslate: rtl\n } = swiper;\n let e = event;\n if (e.originalEvent) e = e.originalEvent; // jquery fix\n const kc = e.keyCode || e.charCode;\n const pageUpDown = swiper.params.keyboard.pageUpDown;\n const isPageUp = pageUpDown && kc === 33;\n const isPageDown = pageUpDown && kc === 34;\n const isArrowLeft = kc === 37;\n const isArrowRight = kc === 39;\n const isArrowUp = kc === 38;\n const isArrowDown = kc === 40;\n // Directions locks\n if (!swiper.allowSlideNext && (swiper.isHorizontal() && isArrowRight || swiper.isVertical() && isArrowDown || isPageDown)) {\n return false;\n }\n if (!swiper.allowSlidePrev && (swiper.isHorizontal() && isArrowLeft || swiper.isVertical() && isArrowUp || isPageUp)) {\n return false;\n }\n if (e.shiftKey || e.altKey || e.ctrlKey || e.metaKey) {\n return undefined;\n }\n if (document.activeElement && document.activeElement.nodeName && (document.activeElement.nodeName.toLowerCase() === 'input' || document.activeElement.nodeName.toLowerCase() === 'textarea')) {\n return undefined;\n }\n if (swiper.params.keyboard.onlyInViewport && (isPageUp || isPageDown || isArrowLeft || isArrowRight || isArrowUp || isArrowDown)) {\n let inView = false;\n // Check that swiper should be inside of visible area of window\n if (elementParents(swiper.el, `.${swiper.params.slideClass}, swiper-slide`).length > 0 && elementParents(swiper.el, `.${swiper.params.slideActiveClass}`).length === 0) {\n return undefined;\n }\n const el = swiper.el;\n const swiperWidth = el.clientWidth;\n const swiperHeight = el.clientHeight;\n const windowWidth = window.innerWidth;\n const windowHeight = window.innerHeight;\n const swiperOffset = elementOffset(el);\n if (rtl) swiperOffset.left -= el.scrollLeft;\n const swiperCoord = [[swiperOffset.left, swiperOffset.top], [swiperOffset.left + swiperWidth, swiperOffset.top], [swiperOffset.left, swiperOffset.top + swiperHeight], [swiperOffset.left + swiperWidth, swiperOffset.top + swiperHeight]];\n for (let i = 0; i < swiperCoord.length; i += 1) {\n const point = swiperCoord[i];\n if (point[0] >= 0 && point[0] <= windowWidth && point[1] >= 0 && point[1] <= windowHeight) {\n if (point[0] === 0 && point[1] === 0) continue; // eslint-disable-line\n inView = true;\n }\n }\n if (!inView) return undefined;\n }\n if (swiper.isHorizontal()) {\n if (isPageUp || isPageDown || isArrowLeft || isArrowRight) {\n if (e.preventDefault) e.preventDefault();else e.returnValue = false;\n }\n if ((isPageDown || isArrowRight) && !rtl || (isPageUp || isArrowLeft) && rtl) swiper.slideNext();\n if ((isPageUp || isArrowLeft) && !rtl || (isPageDown || isArrowRight) && rtl) swiper.slidePrev();\n } else {\n if (isPageUp || isPageDown || isArrowUp || isArrowDown) {\n if (e.preventDefault) e.preventDefault();else e.returnValue = false;\n }\n if (isPageDown || isArrowDown) swiper.slideNext();\n if (isPageUp || isArrowUp) swiper.slidePrev();\n }\n emit('keyPress', kc);\n return undefined;\n }\n function enable() {\n if (swiper.keyboard.enabled) return;\n document.addEventListener('keydown', handle);\n swiper.keyboard.enabled = true;\n }\n function disable() {\n if (!swiper.keyboard.enabled) return;\n document.removeEventListener('keydown', handle);\n swiper.keyboard.enabled = false;\n }\n on('init', () => {\n if (swiper.params.keyboard.enabled) {\n enable();\n }\n });\n on('destroy', () => {\n if (swiper.keyboard.enabled) {\n disable();\n }\n });\n Object.assign(swiper.keyboard, {\n enable,\n disable\n });\n}\n\nexport { Keyboard as default };\n","import { a as getWindow } from '../shared/ssr-window.esm.mjs';\nimport { n as nextTick, f as now } from '../shared/utils.mjs';\n\n/* eslint-disable consistent-return */\nfunction Mousewheel(_ref) {\n let {\n swiper,\n extendParams,\n on,\n emit\n } = _ref;\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 if (swiper.destroyed || !swiper.params) return;\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 if (swiper.destroyed || !swiper.params) return;\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.autoplay.disableOnInteraction) swiper.autoplay.stop();\n // Return page scroll on edge positions\n if (params.releaseOnEdges && (position === swiper.minTranslate() || position === swiper.maxTranslate())) {\n return true;\n }\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}\n\nexport { Mousewheel as default };\n","import { c as createElementIfNotDefined } from '../shared/create-element-if-not-defined.mjs';\nimport { m as makeElementsArray } from '../shared/utils.mjs';\n\nfunction Navigation(_ref) {\n let {\n swiper,\n extendParams,\n on,\n emit\n } = _ref;\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 function getEl(el) {\n let res;\n if (el && typeof el === 'string' && swiper.isElement) {\n res = swiper.el.querySelector(el) || swiper.hostEl.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 && res.length > 1 && swiper.el.querySelectorAll(el).length === 1) {\n res = swiper.el.querySelector(el);\n } else if (res && res.length === 1) {\n res = res[0];\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 if (swiper.enabled) {\n update();\n return;\n }\n [...nextEl, ...prevEl].filter(el => !!el).forEach(el => el.classList.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 let targetIsButton = prevEl.includes(targetEl) || nextEl.includes(targetEl);\n if (swiper.isElement && !targetIsButton) {\n const path = e.path || e.composedPath && e.composedPath();\n if (path) {\n targetIsButton = path.find(pathEl => nextEl.includes(pathEl) || prevEl.includes(pathEl));\n }\n }\n if (swiper.params.navigation.hideOnClick && !targetIsButton) {\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}\n\nexport { Navigation as default };\n","import { e as elementChildren, c as createElement } from './utils.mjs';\n\nfunction 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}\n\nexport { createElementIfNotDefined as c };\n","import { c as classesToSelector } from '../shared/classes-to-selector.mjs';\nimport { c as createElementIfNotDefined } from '../shared/create-element-if-not-defined.mjs';\nimport { m as makeElementsArray, h as elementOuterSize, i as elementIndex, s as setInnerHTML, b as elementParents } from '../shared/utils.mjs';\n\nfunction Pagination(_ref) {\n let {\n swiper,\n extendParams,\n on,\n emit\n } = _ref;\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 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 getMoveDirection(prevIndex, nextIndex, length) {\n prevIndex = prevIndex % length;\n nextIndex = nextIndex % length;\n if (nextIndex === prevIndex + 1) {\n return 'next';\n } else if (nextIndex === prevIndex - 1) {\n return 'previous';\n }\n return;\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 moveDirection = getMoveDirection(swiper.realIndex, index, swiper.slides.length);\n if (moveDirection === 'next') {\n swiper.slideNext();\n } else if (moveDirection === 'previous') {\n swiper.slidePrev();\n } else {\n swiper.slideToLoop(index);\n }\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 setInnerHTML(subEl, 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.grid && swiper.params.grid.rows > 1 ? swiper.slides.length / Math.ceil(swiper.params.grid.rows) : 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 setInnerHTML(subEl, 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.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.find(subEl => {\n if (elementParents(subEl, '.swiper')[0] !== swiper.el) return false;\n return true;\n });\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 || '').split(' '));\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.classList.remove(...(params.clickableClass || '').split(' '));\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 const el = makeElementsArray(swiper.pagination.el);\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}\n\nexport { Pagination as default };\n","function classesToSelector(classes) {\n if (classes === void 0) {\n classes = '';\n }\n return `.${classes.trim().replace(/([\\.:!+\\/])/g, '\\\\$1') // eslint-disable-line\n .replace(/ /g, '.')}`;\n}\n\nexport { classesToSelector as c };\n","import { g as getDocument } from '../shared/ssr-window.esm.mjs';\nimport { m as makeElementsArray, j as classesToTokens, c as createElement, n as nextTick, d as elementOffset } from '../shared/utils.mjs';\nimport { c as createElementIfNotDefined } from '../shared/create-element-if-not-defined.mjs';\nimport { c as classesToSelector } from '../shared/classes-to-selector.mjs';\n\nfunction Scrollbar(_ref) {\n let {\n swiper,\n extendParams,\n on,\n emit\n } = _ref;\n const document = getDocument();\n let isTouched = false;\n let timeout = null;\n let dragTimeout = null;\n let dragStartPos;\n let dragSize;\n let trackSize;\n let divider;\n extendParams({\n scrollbar: {\n el: null,\n dragSize: 'auto',\n hide: false,\n draggable: false,\n snapOnRelease: true,\n lockClass: 'swiper-scrollbar-lock',\n dragClass: 'swiper-scrollbar-drag',\n scrollbarDisabledClass: 'swiper-scrollbar-disabled',\n horizontalClass: `swiper-scrollbar-horizontal`,\n verticalClass: `swiper-scrollbar-vertical`\n }\n });\n swiper.scrollbar = {\n el: null,\n dragEl: null\n };\n function setTranslate() {\n if (!swiper.params.scrollbar.el || !swiper.scrollbar.el) return;\n const {\n scrollbar,\n rtlTranslate: rtl\n } = swiper;\n const {\n dragEl,\n el\n } = scrollbar;\n const params = swiper.params.scrollbar;\n const progress = swiper.params.loop ? swiper.progressLoop : swiper.progress;\n let newSize = dragSize;\n let newPos = (trackSize - dragSize) * progress;\n if (rtl) {\n newPos = -newPos;\n if (newPos > 0) {\n newSize = dragSize - newPos;\n newPos = 0;\n } else if (-newPos + dragSize > trackSize) {\n newSize = trackSize + newPos;\n }\n } else if (newPos < 0) {\n newSize = dragSize + newPos;\n newPos = 0;\n } else if (newPos + dragSize > trackSize) {\n newSize = trackSize - newPos;\n }\n if (swiper.isHorizontal()) {\n dragEl.style.transform = `translate3d(${newPos}px, 0, 0)`;\n dragEl.style.width = `${newSize}px`;\n } else {\n dragEl.style.transform = `translate3d(0px, ${newPos}px, 0)`;\n dragEl.style.height = `${newSize}px`;\n }\n if (params.hide) {\n clearTimeout(timeout);\n el.style.opacity = 1;\n timeout = setTimeout(() => {\n el.style.opacity = 0;\n el.style.transitionDuration = '400ms';\n }, 1000);\n }\n }\n function setTransition(duration) {\n if (!swiper.params.scrollbar.el || !swiper.scrollbar.el) return;\n swiper.scrollbar.dragEl.style.transitionDuration = `${duration}ms`;\n }\n function updateSize() {\n if (!swiper.params.scrollbar.el || !swiper.scrollbar.el) return;\n const {\n scrollbar\n } = swiper;\n const {\n dragEl,\n el\n } = scrollbar;\n dragEl.style.width = '';\n dragEl.style.height = '';\n trackSize = swiper.isHorizontal() ? el.offsetWidth : el.offsetHeight;\n divider = swiper.size / (swiper.virtualSize + swiper.params.slidesOffsetBefore - (swiper.params.centeredSlides ? swiper.snapGrid[0] : 0));\n if (swiper.params.scrollbar.dragSize === 'auto') {\n dragSize = trackSize * divider;\n } else {\n dragSize = parseInt(swiper.params.scrollbar.dragSize, 10);\n }\n if (swiper.isHorizontal()) {\n dragEl.style.width = `${dragSize}px`;\n } else {\n dragEl.style.height = `${dragSize}px`;\n }\n if (divider >= 1) {\n el.style.display = 'none';\n } else {\n el.style.display = '';\n }\n if (swiper.params.scrollbar.hide) {\n el.style.opacity = 0;\n }\n if (swiper.params.watchOverflow && swiper.enabled) {\n scrollbar.el.classList[swiper.isLocked ? 'add' : 'remove'](swiper.params.scrollbar.lockClass);\n }\n }\n function getPointerPosition(e) {\n return swiper.isHorizontal() ? e.clientX : e.clientY;\n }\n function setDragPosition(e) {\n const {\n scrollbar,\n rtlTranslate: rtl\n } = swiper;\n const {\n el\n } = scrollbar;\n let positionRatio;\n positionRatio = (getPointerPosition(e) - elementOffset(el)[swiper.isHorizontal() ? 'left' : 'top'] - (dragStartPos !== null ? dragStartPos : dragSize / 2)) / (trackSize - dragSize);\n positionRatio = Math.max(Math.min(positionRatio, 1), 0);\n if (rtl) {\n positionRatio = 1 - positionRatio;\n }\n const position = swiper.minTranslate() + (swiper.maxTranslate() - swiper.minTranslate()) * positionRatio;\n swiper.updateProgress(position);\n swiper.setTranslate(position);\n swiper.updateActiveIndex();\n swiper.updateSlidesClasses();\n }\n function onDragStart(e) {\n const params = swiper.params.scrollbar;\n const {\n scrollbar,\n wrapperEl\n } = swiper;\n const {\n el,\n dragEl\n } = scrollbar;\n isTouched = true;\n dragStartPos = e.target === dragEl ? getPointerPosition(e) - e.target.getBoundingClientRect()[swiper.isHorizontal() ? 'left' : 'top'] : null;\n e.preventDefault();\n e.stopPropagation();\n wrapperEl.style.transitionDuration = '100ms';\n dragEl.style.transitionDuration = '100ms';\n setDragPosition(e);\n clearTimeout(dragTimeout);\n el.style.transitionDuration = '0ms';\n if (params.hide) {\n el.style.opacity = 1;\n }\n if (swiper.params.cssMode) {\n swiper.wrapperEl.style['scroll-snap-type'] = 'none';\n }\n emit('scrollbarDragStart', e);\n }\n function onDragMove(e) {\n const {\n scrollbar,\n wrapperEl\n } = swiper;\n const {\n el,\n dragEl\n } = scrollbar;\n if (!isTouched) return;\n if (e.preventDefault && e.cancelable) e.preventDefault();else e.returnValue = false;\n setDragPosition(e);\n wrapperEl.style.transitionDuration = '0ms';\n el.style.transitionDuration = '0ms';\n dragEl.style.transitionDuration = '0ms';\n emit('scrollbarDragMove', e);\n }\n function onDragEnd(e) {\n const params = swiper.params.scrollbar;\n const {\n scrollbar,\n wrapperEl\n } = swiper;\n const {\n el\n } = scrollbar;\n if (!isTouched) return;\n isTouched = false;\n if (swiper.params.cssMode) {\n swiper.wrapperEl.style['scroll-snap-type'] = '';\n wrapperEl.style.transitionDuration = '';\n }\n if (params.hide) {\n clearTimeout(dragTimeout);\n dragTimeout = nextTick(() => {\n el.style.opacity = 0;\n el.style.transitionDuration = '400ms';\n }, 1000);\n }\n emit('scrollbarDragEnd', e);\n if (params.snapOnRelease) {\n swiper.slideToClosest();\n }\n }\n function events(method) {\n const {\n scrollbar,\n params\n } = swiper;\n const el = scrollbar.el;\n if (!el) return;\n const target = el;\n const activeListener = params.passiveListeners ? {\n passive: false,\n capture: false\n } : false;\n const passiveListener = params.passiveListeners ? {\n passive: true,\n capture: false\n } : false;\n if (!target) return;\n const eventMethod = method === 'on' ? 'addEventListener' : 'removeEventListener';\n target[eventMethod]('pointerdown', onDragStart, activeListener);\n document[eventMethod]('pointermove', onDragMove, activeListener);\n document[eventMethod]('pointerup', onDragEnd, passiveListener);\n }\n function enableDraggable() {\n if (!swiper.params.scrollbar.el || !swiper.scrollbar.el) return;\n events('on');\n }\n function disableDraggable() {\n if (!swiper.params.scrollbar.el || !swiper.scrollbar.el) return;\n events('off');\n }\n function init() {\n const {\n scrollbar,\n el: swiperEl\n } = swiper;\n swiper.params.scrollbar = createElementIfNotDefined(swiper, swiper.originalParams.scrollbar, swiper.params.scrollbar, {\n el: 'swiper-scrollbar'\n });\n const params = swiper.params.scrollbar;\n if (!params.el) return;\n let el;\n if (typeof params.el === 'string' && swiper.isElement) {\n el = swiper.el.querySelector(params.el);\n }\n if (!el && typeof params.el === 'string') {\n el = document.querySelectorAll(params.el);\n if (!el.length) return;\n } else if (!el) {\n el = params.el;\n }\n if (swiper.params.uniqueNavElements && typeof params.el === 'string' && el.length > 1 && swiperEl.querySelectorAll(params.el).length === 1) {\n el = swiperEl.querySelector(params.el);\n }\n if (el.length > 0) el = el[0];\n el.classList.add(swiper.isHorizontal() ? params.horizontalClass : params.verticalClass);\n let dragEl;\n if (el) {\n dragEl = el.querySelector(classesToSelector(swiper.params.scrollbar.dragClass));\n if (!dragEl) {\n dragEl = createElement('div', swiper.params.scrollbar.dragClass);\n el.append(dragEl);\n }\n }\n Object.assign(scrollbar, {\n el,\n dragEl\n });\n if (params.draggable) {\n enableDraggable();\n }\n if (el) {\n el.classList[swiper.enabled ? 'remove' : 'add'](...classesToTokens(swiper.params.scrollbar.lockClass));\n }\n }\n function destroy() {\n const params = swiper.params.scrollbar;\n const el = swiper.scrollbar.el;\n if (el) {\n el.classList.remove(...classesToTokens(swiper.isHorizontal() ? params.horizontalClass : params.verticalClass));\n }\n disableDraggable();\n }\n on('changeDirection', () => {\n if (!swiper.scrollbar || !swiper.scrollbar.el) return;\n const params = swiper.params.scrollbar;\n let {\n el\n } = swiper.scrollbar;\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.scrollbar.enabled === false) {\n // eslint-disable-next-line\n disable();\n } else {\n init();\n updateSize();\n setTranslate();\n }\n });\n on('update resize observerUpdate lock unlock changeDirection', () => {\n updateSize();\n });\n on('setTranslate', () => {\n setTranslate();\n });\n on('setTransition', (_s, duration) => {\n setTransition(duration);\n });\n on('enable disable', () => {\n const {\n el\n } = swiper.scrollbar;\n if (el) {\n el.classList[swiper.enabled ? 'remove' : 'add'](...classesToTokens(swiper.params.scrollbar.lockClass));\n }\n });\n on('destroy', () => {\n destroy();\n });\n const enable = () => {\n swiper.el.classList.remove(...classesToTokens(swiper.params.scrollbar.scrollbarDisabledClass));\n if (swiper.scrollbar.el) {\n swiper.scrollbar.el.classList.remove(...classesToTokens(swiper.params.scrollbar.scrollbarDisabledClass));\n }\n init();\n updateSize();\n setTranslate();\n };\n const disable = () => {\n swiper.el.classList.add(...classesToTokens(swiper.params.scrollbar.scrollbarDisabledClass));\n if (swiper.scrollbar.el) {\n swiper.scrollbar.el.classList.add(...classesToTokens(swiper.params.scrollbar.scrollbarDisabledClass));\n }\n destroy();\n };\n Object.assign(swiper.scrollbar, {\n enable,\n disable,\n updateSize,\n setTranslate,\n init,\n destroy\n });\n}\n\nexport { Scrollbar as default };\n","import { e as elementChildren } from '../shared/utils.mjs';\n\nfunction Parallax(_ref) {\n let {\n swiper,\n extendParams,\n on\n } = _ref;\n extendParams({\n parallax: {\n enabled: false\n }\n });\n const elementsSelector = '[data-swiper-parallax], [data-swiper-parallax-x], [data-swiper-parallax-y], [data-swiper-parallax-opacity], [data-swiper-parallax-scale]';\n const setTransform = (el, progress) => {\n const {\n rtl\n } = swiper;\n const rtlFactor = rtl ? -1 : 1;\n const p = el.getAttribute('data-swiper-parallax') || '0';\n let x = el.getAttribute('data-swiper-parallax-x');\n let y = el.getAttribute('data-swiper-parallax-y');\n const scale = el.getAttribute('data-swiper-parallax-scale');\n const opacity = el.getAttribute('data-swiper-parallax-opacity');\n const rotate = el.getAttribute('data-swiper-parallax-rotate');\n if (x || y) {\n x = x || '0';\n y = y || '0';\n } else if (swiper.isHorizontal()) {\n x = p;\n y = '0';\n } else {\n y = p;\n x = '0';\n }\n if (x.indexOf('%') >= 0) {\n x = `${parseInt(x, 10) * progress * rtlFactor}%`;\n } else {\n x = `${x * progress * rtlFactor}px`;\n }\n if (y.indexOf('%') >= 0) {\n y = `${parseInt(y, 10) * progress}%`;\n } else {\n y = `${y * progress}px`;\n }\n if (typeof opacity !== 'undefined' && opacity !== null) {\n const currentOpacity = opacity - (opacity - 1) * (1 - Math.abs(progress));\n el.style.opacity = currentOpacity;\n }\n let transform = `translate3d(${x}, ${y}, 0px)`;\n if (typeof scale !== 'undefined' && scale !== null) {\n const currentScale = scale - (scale - 1) * (1 - Math.abs(progress));\n transform += ` scale(${currentScale})`;\n }\n if (rotate && typeof rotate !== 'undefined' && rotate !== null) {\n const currentRotate = rotate * progress * -1;\n transform += ` rotate(${currentRotate}deg)`;\n }\n el.style.transform = transform;\n };\n const setTranslate = () => {\n const {\n el,\n slides,\n progress,\n snapGrid,\n isElement\n } = swiper;\n const elements = elementChildren(el, elementsSelector);\n if (swiper.isElement) {\n elements.push(...elementChildren(swiper.hostEl, elementsSelector));\n }\n elements.forEach(subEl => {\n setTransform(subEl, progress);\n });\n slides.forEach((slideEl, slideIndex) => {\n let slideProgress = slideEl.progress;\n if (swiper.params.slidesPerGroup > 1 && swiper.params.slidesPerView !== 'auto') {\n slideProgress += Math.ceil(slideIndex / 2) - progress * (snapGrid.length - 1);\n }\n slideProgress = Math.min(Math.max(slideProgress, -1), 1);\n slideEl.querySelectorAll(`${elementsSelector}, [data-swiper-parallax-rotate]`).forEach(subEl => {\n setTransform(subEl, slideProgress);\n });\n });\n };\n const setTransition = function (duration) {\n if (duration === void 0) {\n duration = swiper.params.speed;\n }\n const {\n el,\n hostEl\n } = swiper;\n const elements = [...el.querySelectorAll(elementsSelector)];\n if (swiper.isElement) {\n elements.push(...hostEl.querySelectorAll(elementsSelector));\n }\n elements.forEach(parallaxEl => {\n let parallaxDuration = parseInt(parallaxEl.getAttribute('data-swiper-parallax-duration'), 10) || duration;\n if (duration === 0) parallaxDuration = 0;\n parallaxEl.style.transitionDuration = `${parallaxDuration}ms`;\n });\n };\n on('beforeInit', () => {\n if (!swiper.params.parallax.enabled) return;\n swiper.params.watchSlidesProgress = true;\n swiper.originalParams.watchSlidesProgress = true;\n });\n on('init', () => {\n if (!swiper.params.parallax.enabled) return;\n setTranslate();\n });\n on('setTranslate', () => {\n if (!swiper.params.parallax.enabled) return;\n setTranslate();\n });\n on('setTransition', (_swiper, duration) => {\n if (!swiper.params.parallax.enabled) return;\n setTransition(duration);\n });\n}\n\nexport { Parallax as default };\n","import { a as getWindow } from '../shared/ssr-window.esm.mjs';\nimport { e as elementChildren, b as elementParents, d as elementOffset, k as getTranslate } from '../shared/utils.mjs';\n\nfunction Zoom(_ref) {\n let {\n swiper,\n extendParams,\n on,\n emit\n } = _ref;\n const window = getWindow();\n extendParams({\n zoom: {\n enabled: false,\n limitToOriginalSize: false,\n maxRatio: 3,\n minRatio: 1,\n panOnMouseMove: false,\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 isPanningWithMouse = false;\n let mousePanStart = {\n x: 0,\n y: 0\n };\n const mousePanSensitivity = -3; // Negative to invert pan direction\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 getMaxRatio() {\n const params = swiper.params.zoom;\n const maxRatio = gesture.imageWrapEl.getAttribute('data-swiper-zoom') || params.maxRatio;\n if (params.limitToOriginalSize && gesture.imageEl && gesture.imageEl.naturalWidth) {\n const imageMaxRatio = gesture.imageEl.naturalWidth / gesture.imageEl.offsetWidth;\n return Math.min(imageMaxRatio, maxRatio);\n }\n return maxRatio;\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 - window.scrollX) / currentScale, (evCache[0].pageY + (evCache[1].pageY - evCache[0].pageY) / 2 - box.y - window.scrollY) / 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.hostEl.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 = getMaxRatio();\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 let allowTouchMoveTimeout;\n function allowTouchMove() {\n swiper.touchEventsData.preventTouchMoveFromPointerMove = false;\n }\n function preventTouchMove() {\n clearTimeout(allowTouchMoveTimeout);\n swiper.touchEventsData.preventTouchMoveFromPointerMove = true;\n allowTouchMoveTimeout = setTimeout(() => {\n if (swiper.destroyed) return;\n allowTouchMove();\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 const isMouseEvent = e.pointerType === 'mouse';\n const isMousePan = isMouseEvent && swiper.params.zoom.panOnMouseMove;\n if (!eventWithinSlide(e) || !eventWithinZoomContainer(e)) {\n return;\n }\n const zoom = swiper.zoom;\n if (!gesture.imageEl) {\n return;\n }\n if (!image.isTouched || !gesture.slideEl) {\n if (isMousePan) onMouseMove(e);\n return;\n }\n if (isMousePan) {\n onMouseMove(e);\n return;\n }\n if (!image.isMoved) {\n image.width = gesture.imageEl.offsetWidth || gesture.imageEl.clientWidth;\n image.height = gesture.imageEl.offsetHeight || gesture.imageEl.clientHeight;\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 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 allowTouchMove();\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 allowTouchMove();\n return;\n }\n }\n if (e.cancelable) {\n e.preventDefault();\n }\n e.stopPropagation();\n preventTouchMove();\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 evCache.length = 0;\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 onMouseMove(e) {\n // Only pan if zoomed in and mouse panning is enabled\n if (currentScale <= 1 || !gesture.imageWrapEl) return;\n if (!eventWithinSlide(e) || !eventWithinZoomContainer(e)) return;\n const currentTransform = window.getComputedStyle(gesture.imageWrapEl).transform;\n const matrix = new window.DOMMatrix(currentTransform);\n if (!isPanningWithMouse) {\n isPanningWithMouse = true;\n mousePanStart.x = e.clientX;\n mousePanStart.y = e.clientY;\n image.startX = matrix.e;\n image.startY = matrix.f;\n image.width = gesture.imageEl.offsetWidth || gesture.imageEl.clientWidth;\n image.height = gesture.imageEl.offsetHeight || gesture.imageEl.clientHeight;\n gesture.slideWidth = gesture.slideEl.offsetWidth;\n gesture.slideHeight = gesture.slideEl.offsetHeight;\n return;\n }\n const deltaX = (e.clientX - mousePanStart.x) * mousePanSensitivity;\n const deltaY = (e.clientY - mousePanStart.y) * mousePanSensitivity;\n const scaledWidth = image.width * currentScale;\n const scaledHeight = image.height * currentScale;\n const slideWidth = gesture.slideWidth;\n const slideHeight = gesture.slideHeight;\n const minX = Math.min(slideWidth / 2 - scaledWidth / 2, 0);\n const maxX = -minX;\n const minY = Math.min(slideHeight / 2 - scaledHeight / 2, 0);\n const maxY = -minY;\n const newX = Math.max(Math.min(image.startX + deltaX, maxX), minX);\n const newY = Math.max(Math.min(image.startY + deltaY, maxY), minY);\n gesture.imageWrapEl.style.transitionDuration = '0ms';\n gesture.imageWrapEl.style.transform = `translate3d(${newX}px, ${newY}px, 0)`;\n mousePanStart.x = e.clientX;\n mousePanStart.y = e.clientY;\n image.startX = newX;\n image.startY = newY;\n image.currentX = newX;\n image.currentY = newY;\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 prevScale = currentScale;\n const forceZoomRatio = typeof e === 'number' ? e : null;\n if (currentScale === 1 && forceZoomRatio) {\n touchX = undefined;\n touchY = undefined;\n image.touchesStart.x = undefined;\n image.touchesStart.y = undefined;\n }\n const maxRatio = getMaxRatio();\n zoom.scale = forceZoomRatio || maxRatio;\n currentScale = forceZoomRatio || 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 || gesture.imageEl.clientWidth;\n imageHeight = gesture.imageEl.offsetHeight || gesture.imageEl.clientHeight;\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 if (prevScale > 0 && forceZoomRatio && typeof image.currentX === 'number' && typeof image.currentY === 'number') {\n translateX = image.currentX * zoom.scale / prevScale;\n translateY = image.currentY * zoom.scale / prevScale;\n } else {\n translateX = diffX * zoom.scale;\n translateY = diffY * zoom.scale;\n }\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 image.currentX = translateX;\n image.currentY = translateY;\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 image.currentX = undefined;\n image.currentY = undefined;\n image.touchesStart.x = undefined;\n image.touchesStart.y = undefined;\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 if (swiper.params.zoom.panOnMouseMove) {\n mousePanStart = {\n x: 0,\n y: 0\n };\n if (isPanningWithMouse) {\n isPanningWithMouse = false;\n image.startX = 0;\n image.startY = 0;\n }\n }\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();\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}\n\nexport { Zoom as default };\n","import { n as nextTick, l as elementTransitionEnd } from '../shared/utils.mjs';\n\n/* eslint no-bitwise: [\"error\", { \"allow\": [\">>\"] }] */\nfunction Controller(_ref) {\n let {\n swiper,\n extendParams,\n on\n } = _ref;\n extendParams({\n controller: {\n control: undefined,\n inverse: false,\n by: 'slide' // or 'container'\n }\n });\n\n swiper.controller = {\n control: undefined\n };\n function LinearSpline(x, y) {\n const binarySearch = function search() {\n let maxIndex;\n let minIndex;\n let guess;\n return (array, val) => {\n minIndex = -1;\n maxIndex = array.length;\n while (maxIndex - minIndex > 1) {\n guess = maxIndex + minIndex >> 1;\n if (array[guess] <= val) {\n minIndex = guess;\n } else {\n maxIndex = guess;\n }\n }\n return maxIndex;\n };\n }();\n this.x = x;\n this.y = y;\n this.lastIndex = x.length - 1;\n // Given an x value (x2), return the expected y2 value:\n // (x1,y1) is the known point before given value,\n // (x3,y3) is the known point after given value.\n let i1;\n let i3;\n this.interpolate = function interpolate(x2) {\n if (!x2) return 0;\n\n // Get the indexes of x1 and x3 (the array indexes before and after given x2):\n i3 = binarySearch(this.x, x2);\n i1 = i3 - 1;\n\n // We have our indexes i1 & i3, so we can calculate already:\n // y2 := ((x2−x1) × (y3−y1)) ÷ (x3−x1) + y1\n return (x2 - this.x[i1]) * (this.y[i3] - this.y[i1]) / (this.x[i3] - this.x[i1]) + this.y[i1];\n };\n return this;\n }\n function getInterpolateFunction(c) {\n swiper.controller.spline = swiper.params.loop ? new LinearSpline(swiper.slidesGrid, c.slidesGrid) : new LinearSpline(swiper.snapGrid, c.snapGrid);\n }\n function setTranslate(_t, byController) {\n const controlled = swiper.controller.control;\n let multiplier;\n let controlledTranslate;\n const Swiper = swiper.constructor;\n function setControlledTranslate(c) {\n if (c.destroyed) return;\n\n // this will create an Interpolate function based on the snapGrids\n // x is the Grid of the scrolled scroller and y will be the controlled scroller\n // it makes sense to create this only once and recall it for the interpolation\n // the function does a lot of value caching for performance\n const translate = swiper.rtlTranslate ? -swiper.translate : swiper.translate;\n if (swiper.params.controller.by === 'slide') {\n getInterpolateFunction(c);\n // i am not sure why the values have to be multiplicated this way, tried to invert the snapGrid\n // but it did not work out\n controlledTranslate = -swiper.controller.spline.interpolate(-translate);\n }\n if (!controlledTranslate || swiper.params.controller.by === 'container') {\n multiplier = (c.maxTranslate() - c.minTranslate()) / (swiper.maxTranslate() - swiper.minTranslate());\n if (Number.isNaN(multiplier) || !Number.isFinite(multiplier)) {\n multiplier = 1;\n }\n controlledTranslate = (translate - swiper.minTranslate()) * multiplier + c.minTranslate();\n }\n if (swiper.params.controller.inverse) {\n controlledTranslate = c.maxTranslate() - controlledTranslate;\n }\n c.updateProgress(controlledTranslate);\n c.setTranslate(controlledTranslate, swiper);\n c.updateActiveIndex();\n c.updateSlidesClasses();\n }\n if (Array.isArray(controlled)) {\n for (let i = 0; i < controlled.length; i += 1) {\n if (controlled[i] !== byController && controlled[i] instanceof Swiper) {\n setControlledTranslate(controlled[i]);\n }\n }\n } else if (controlled instanceof Swiper && byController !== controlled) {\n setControlledTranslate(controlled);\n }\n }\n function setTransition(duration, byController) {\n const Swiper = swiper.constructor;\n const controlled = swiper.controller.control;\n let i;\n function setControlledTransition(c) {\n if (c.destroyed) return;\n c.setTransition(duration, swiper);\n if (duration !== 0) {\n c.transitionStart();\n if (c.params.autoHeight) {\n nextTick(() => {\n c.updateAutoHeight();\n });\n }\n elementTransitionEnd(c.wrapperEl, () => {\n if (!controlled) return;\n c.transitionEnd();\n });\n }\n }\n if (Array.isArray(controlled)) {\n for (i = 0; i < controlled.length; i += 1) {\n if (controlled[i] !== byController && controlled[i] instanceof Swiper) {\n setControlledTransition(controlled[i]);\n }\n }\n } else if (controlled instanceof Swiper && byController !== controlled) {\n setControlledTransition(controlled);\n }\n }\n function removeSpline() {\n if (!swiper.controller.control) return;\n if (swiper.controller.spline) {\n swiper.controller.spline = undefined;\n delete swiper.controller.spline;\n }\n }\n on('beforeInit', () => {\n if (typeof window !== 'undefined' && (\n // eslint-disable-line\n typeof swiper.params.controller.control === 'string' || swiper.params.controller.control instanceof HTMLElement)) {\n const controlElements = typeof swiper.params.controller.control === 'string' ? [...document.querySelectorAll(swiper.params.controller.control)] : [swiper.params.controller.control];\n controlElements.forEach(controlElement => {\n if (!swiper.controller.control) swiper.controller.control = [];\n if (controlElement && controlElement.swiper) {\n swiper.controller.control.push(controlElement.swiper);\n } else if (controlElement) {\n const eventName = `${swiper.params.eventsPrefix}init`;\n const onControllerSwiper = e => {\n swiper.controller.control.push(e.detail[0]);\n swiper.update();\n controlElement.removeEventListener(eventName, onControllerSwiper);\n };\n controlElement.addEventListener(eventName, onControllerSwiper);\n }\n });\n return;\n }\n swiper.controller.control = swiper.params.controller.control;\n });\n on('update', () => {\n removeSpline();\n });\n on('resize', () => {\n removeSpline();\n });\n on('observerUpdate', () => {\n removeSpline();\n });\n on('setTranslate', (_s, translate, byController) => {\n if (!swiper.controller.control || swiper.controller.control.destroyed) return;\n swiper.controller.setTranslate(translate, byController);\n });\n on('setTransition', (_s, duration, byController) => {\n if (!swiper.controller.control || swiper.controller.control.destroyed) return;\n swiper.controller.setTransition(duration, byController);\n });\n Object.assign(swiper.controller, {\n setTranslate,\n setTransition\n });\n}\n\nexport { Controller as default };\n","import { g as getDocument } from '../shared/ssr-window.esm.mjs';\nimport { c as classesToSelector } from '../shared/classes-to-selector.mjs';\nimport { c as createElement, i as elementIndex, m as makeElementsArray, s as setInnerHTML } from '../shared/utils.mjs';\n\nfunction A11y(_ref) {\n let {\n swiper,\n extendParams,\n on\n } = _ref;\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 containerRole: null,\n itemRoleDescriptionMessage: null,\n slideRole: 'group',\n id: null,\n scrollOnFocus: true\n }\n });\n swiper.a11y = {\n clicked: false\n };\n let liveRegion = null;\n let preventFocusHandler;\n let focusTargetSlideEl;\n let visibilityChangedTimestamp = new Date().getTime();\n function notify(message) {\n const notification = liveRegion;\n if (notification.length === 0) return;\n setInnerHTML(notification, message);\n }\n function getRandomNumber(size) {\n if (size === void 0) {\n size = 16;\n }\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.prevEl && swiper.navigation.nextEl) {\n const prevEls = makeElementsArray(swiper.navigation.prevEl);\n const nextEls = makeElementsArray(swiper.navigation.nextEl);\n if (nextEls.includes(targetEl)) {\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 (prevEls.includes(targetEl)) {\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 }\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 = e => {\n if (focusTargetSlideEl && focusTargetSlideEl !== e.target && !focusTargetSlideEl.contains(e.target)) {\n preventFocusHandler = true;\n }\n swiper.a11y.clicked = true;\n };\n const handlePointerUp = () => {\n preventFocusHandler = false;\n requestAnimationFrame(() => {\n requestAnimationFrame(() => {\n if (!swiper.destroyed) {\n swiper.a11y.clicked = false;\n }\n });\n });\n };\n const onVisibilityChange = e => {\n visibilityChangedTimestamp = new Date().getTime();\n };\n const handleFocus = e => {\n if (swiper.a11y.clicked || !swiper.params.a11y.scrollOnFocus) return;\n if (new Date().getTime() - visibilityChangedTimestamp < 100) return;\n const slideEl = e.target.closest(`.${swiper.params.slideClass}, swiper-slide`);\n if (!slideEl || !swiper.slides.includes(slideEl)) return;\n focusTargetSlideEl = slideEl;\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 requestAnimationFrame(() => {\n if (preventFocusHandler) return;\n if (swiper.params.loop) {\n swiper.slideToLoop(parseInt(slideEl.getAttribute('data-swiper-slide-index')), 0);\n } else {\n swiper.slideTo(swiper.slides.indexOf(slideEl), 0);\n }\n preventFocusHandler = false;\n });\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 swiper.el.append(liveRegion);\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 if (params.containerRole) {\n addElRole(containerEl, params.containerRole);\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 = makeElementsArray(swiper.pagination.el);\n paginationEl.forEach(el => {\n el.addEventListener('keydown', onEnterOrSpaceKey);\n });\n }\n\n // Tab focus\n const document = getDocument();\n document.addEventListener('visibilitychange', onVisibilityChange);\n swiper.el.addEventListener('focus', handleFocus, true);\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 = makeElementsArray(swiper.pagination.el);\n paginationEl.forEach(el => {\n el.removeEventListener('keydown', onEnterOrSpaceKey);\n });\n }\n const document = getDocument();\n document.removeEventListener('visibilitychange', onVisibilityChange);\n // Tab focus\n if (swiper.el && typeof swiper.el !== 'string') {\n swiper.el.removeEventListener('focus', handleFocus, true);\n swiper.el.removeEventListener('pointerdown', handlePointerDown, true);\n swiper.el.removeEventListener('pointerup', handlePointerUp, true);\n }\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}\n\nexport { A11y as default };\n","import { a as getWindow } from '../shared/ssr-window.esm.mjs';\n\nfunction History(_ref) {\n let {\n swiper,\n extendParams,\n on\n } = _ref;\n extendParams({\n history: {\n enabled: false,\n root: '',\n replaceState: false,\n key: 'slides',\n keepQuery: false\n }\n });\n let initialized = false;\n let paths = {};\n const slugify = text => {\n return text.toString().replace(/\\s+/g, '-').replace(/[^\\w-]+/g, '').replace(/--+/g, '-').replace(/^-+/, '').replace(/-+$/, '');\n };\n const getPathValues = urlOverride => {\n const window = getWindow();\n let location;\n if (urlOverride) {\n location = new URL(urlOverride);\n } else {\n location = window.location;\n }\n const pathArray = location.pathname.slice(1).split('/').filter(part => part !== '');\n const total = pathArray.length;\n const key = pathArray[total - 2];\n const value = pathArray[total - 1];\n return {\n key,\n value\n };\n };\n const setHistory = (key, index) => {\n const window = getWindow();\n if (!initialized || !swiper.params.history.enabled) return;\n let location;\n if (swiper.params.url) {\n location = new URL(swiper.params.url);\n } else {\n location = window.location;\n }\n const slide = swiper.virtual && swiper.params.virtual.enabled ? swiper.slidesEl.querySelector(`[data-swiper-slide-index=\"${index}\"]`) : swiper.slides[index];\n let value = slugify(slide.getAttribute('data-history'));\n if (swiper.params.history.root.length > 0) {\n let root = swiper.params.history.root;\n if (root[root.length - 1] === '/') root = root.slice(0, root.length - 1);\n value = `${root}/${key ? `${key}/` : ''}${value}`;\n } else if (!location.pathname.includes(key)) {\n value = `${key ? `${key}/` : ''}${value}`;\n }\n if (swiper.params.history.keepQuery) {\n value += location.search;\n }\n const currentState = window.history.state;\n if (currentState && currentState.value === value) {\n return;\n }\n if (swiper.params.history.replaceState) {\n window.history.replaceState({\n value\n }, null, value);\n } else {\n window.history.pushState({\n value\n }, null, value);\n }\n };\n const scrollToSlide = (speed, value, runCallbacks) => {\n if (value) {\n for (let i = 0, length = swiper.slides.length; i < length; i += 1) {\n const slide = swiper.slides[i];\n const slideHistory = slugify(slide.getAttribute('data-history'));\n if (slideHistory === value) {\n const index = swiper.getSlideIndex(slide);\n swiper.slideTo(index, speed, runCallbacks);\n }\n }\n } else {\n swiper.slideTo(0, speed, runCallbacks);\n }\n };\n const setHistoryPopState = () => {\n paths = getPathValues(swiper.params.url);\n scrollToSlide(swiper.params.speed, paths.value, false);\n };\n const init = () => {\n const window = getWindow();\n if (!swiper.params.history) return;\n if (!window.history || !window.history.pushState) {\n swiper.params.history.enabled = false;\n swiper.params.hashNavigation.enabled = true;\n return;\n }\n initialized = true;\n paths = getPathValues(swiper.params.url);\n if (!paths.key && !paths.value) {\n if (!swiper.params.history.replaceState) {\n window.addEventListener('popstate', setHistoryPopState);\n }\n return;\n }\n scrollToSlide(0, paths.value, swiper.params.runCallbacksOnInit);\n if (!swiper.params.history.replaceState) {\n window.addEventListener('popstate', setHistoryPopState);\n }\n };\n const destroy = () => {\n const window = getWindow();\n if (!swiper.params.history.replaceState) {\n window.removeEventListener('popstate', setHistoryPopState);\n }\n };\n on('init', () => {\n if (swiper.params.history.enabled) {\n init();\n }\n });\n on('destroy', () => {\n if (swiper.params.history.enabled) {\n destroy();\n }\n });\n on('transitionEnd _freeModeNoMomentumRelease', () => {\n if (initialized) {\n setHistory(swiper.params.history.key, swiper.activeIndex);\n }\n });\n on('slideChange', () => {\n if (initialized && swiper.params.cssMode) {\n setHistory(swiper.params.history.key, swiper.activeIndex);\n }\n });\n}\n\nexport { History as default };\n","import { g as getDocument, a as getWindow } from '../shared/ssr-window.esm.mjs';\nimport { e as elementChildren } from '../shared/utils.mjs';\n\nfunction HashNavigation(_ref) {\n let {\n swiper,\n extendParams,\n emit,\n on\n } = _ref;\n let initialized = false;\n const document = getDocument();\n const window = getWindow();\n extendParams({\n hashNavigation: {\n enabled: false,\n replaceState: false,\n watchState: false,\n getSlideIndex(_s, hash) {\n if (swiper.virtual && swiper.params.virtual.enabled) {\n const slideWithHash = swiper.slides.find(slideEl => slideEl.getAttribute('data-hash') === hash);\n if (!slideWithHash) return 0;\n const index = parseInt(slideWithHash.getAttribute('data-swiper-slide-index'), 10);\n return index;\n }\n return swiper.getSlideIndex(elementChildren(swiper.slidesEl, `.${swiper.params.slideClass}[data-hash=\"${hash}\"], swiper-slide[data-hash=\"${hash}\"]`)[0]);\n }\n }\n });\n const onHashChange = () => {\n emit('hashChange');\n const newHash = document.location.hash.replace('#', '');\n const activeSlideEl = swiper.virtual && swiper.params.virtual.enabled ? swiper.slidesEl.querySelector(`[data-swiper-slide-index=\"${swiper.activeIndex}\"]`) : swiper.slides[swiper.activeIndex];\n const activeSlideHash = activeSlideEl ? activeSlideEl.getAttribute('data-hash') : '';\n if (newHash !== activeSlideHash) {\n const newIndex = swiper.params.hashNavigation.getSlideIndex(swiper, newHash);\n if (typeof newIndex === 'undefined' || Number.isNaN(newIndex)) return;\n swiper.slideTo(newIndex);\n }\n };\n const setHash = () => {\n if (!initialized || !swiper.params.hashNavigation.enabled) return;\n const activeSlideEl = swiper.virtual && swiper.params.virtual.enabled ? swiper.slidesEl.querySelector(`[data-swiper-slide-index=\"${swiper.activeIndex}\"]`) : swiper.slides[swiper.activeIndex];\n const activeSlideHash = activeSlideEl ? activeSlideEl.getAttribute('data-hash') || activeSlideEl.getAttribute('data-history') : '';\n if (swiper.params.hashNavigation.replaceState && window.history && window.history.replaceState) {\n window.history.replaceState(null, null, `#${activeSlideHash}` || '');\n emit('hashSet');\n } else {\n document.location.hash = activeSlideHash || '';\n emit('hashSet');\n }\n };\n const init = () => {\n if (!swiper.params.hashNavigation.enabled || swiper.params.history && swiper.params.history.enabled) return;\n initialized = true;\n const hash = document.location.hash.replace('#', '');\n if (hash) {\n const speed = 0;\n const index = swiper.params.hashNavigation.getSlideIndex(swiper, hash);\n swiper.slideTo(index || 0, speed, swiper.params.runCallbacksOnInit, true);\n }\n if (swiper.params.hashNavigation.watchState) {\n window.addEventListener('hashchange', onHashChange);\n }\n };\n const destroy = () => {\n if (swiper.params.hashNavigation.watchState) {\n window.removeEventListener('hashchange', onHashChange);\n }\n };\n on('init', () => {\n if (swiper.params.hashNavigation.enabled) {\n init();\n }\n });\n on('destroy', () => {\n if (swiper.params.hashNavigation.enabled) {\n destroy();\n }\n });\n on('transitionEnd _freeModeNoMomentumRelease', () => {\n if (initialized) {\n setHash();\n }\n });\n on('slideChange', () => {\n if (initialized && swiper.params.cssMode) {\n setHash();\n }\n });\n}\n\nexport { HashNavigation as default };\n","import { g as getDocument } from '../shared/ssr-window.esm.mjs';\n\n/* eslint no-underscore-dangle: \"off\" */\n/* eslint no-use-before-define: \"off\" */\nfunction Autoplay(_ref) {\n let {\n swiper,\n extendParams,\n on,\n emit,\n params\n } = _ref;\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: false,\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 let pausedByPointerEnter;\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 if (pausedByPointerEnter || e.detail && e.detail.bySwiperTouchMove) {\n return;\n }\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.find(slideEl => slideEl.classList.contains('swiper-slide-active'));\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 autoplayStartTime = new Date().getTime();\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 pausedByPointerEnter = true;\n if (swiper.animating || swiper.autoplay.paused) return;\n pause(true);\n };\n const onPointerLeave = e => {\n if (e.pointerType !== 'mouse') return;\n pausedByPointerEnter = false;\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 if (swiper.el && typeof swiper.el !== 'string') {\n swiper.el.removeEventListener('pointerenter', onPointerEnter);\n swiper.el.removeEventListener('pointerleave', onPointerLeave);\n }\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 start();\n }\n });\n on('destroy', () => {\n detachMouseEvents();\n detachDocumentEvents();\n if (swiper.autoplay.running) {\n stop();\n }\n });\n on('_freeModeStaticRelease', () => {\n if (pausedByTouch || pausedByInteraction) {\n resume();\n }\n });\n on('_freeModeNoMomentumRelease', () => {\n if (!swiper.params.autoplay.disableOnInteraction) {\n pause(true, true);\n } else {\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}\n\nexport { Autoplay as default };\n","import { g as getDocument } from '../shared/ssr-window.esm.mjs';\nimport { o as isObject, e as elementChildren } from '../shared/utils.mjs';\n\nfunction Thumb(_ref) {\n let {\n swiper,\n extendParams,\n on\n } = _ref;\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 if (thumbsParams.swiper.destroyed) {\n initialized = false;\n return false;\n }\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.find(slideEl => slideEl.getAttribute('data-swiper-slide-index') === `${swiper.realIndex}`);\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 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 eventName = `${swiper.params.eventsPrefix}init`;\n const onThumbsSwiper = e => {\n thumbs.swiper = e.detail[0];\n thumbsElement.removeEventListener(eventName, onThumbsSwiper);\n init();\n update(true);\n thumbs.swiper.update();\n swiper.update();\n };\n thumbsElement.addEventListener(eventName, 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}\n\nexport { Thumb as default };\n","import { f as now, l as elementTransitionEnd } from '../shared/utils.mjs';\n\nfunction freeMode(_ref) {\n let {\n swiper,\n extendParams,\n emit,\n once\n } = _ref;\n extendParams({\n freeMode: {\n enabled: false,\n momentum: true,\n momentumRatio: 1,\n momentumBounce: true,\n momentumBounceRatio: 1,\n momentumVelocityRatio: 1,\n sticky: false,\n minimumVelocity: 0.02\n }\n });\n function onTouchStart() {\n if (swiper.params.cssMode) return;\n const translate = swiper.getTranslate();\n swiper.setTranslate(translate);\n swiper.setTransition(0);\n swiper.touchEventsData.velocities.length = 0;\n swiper.freeMode.onTouchEnd({\n currentPos: swiper.rtl ? swiper.translate : -swiper.translate\n });\n }\n function onTouchMove() {\n if (swiper.params.cssMode) return;\n const {\n touchEventsData: data,\n touches\n } = swiper;\n // Velocity\n if (data.velocities.length === 0) {\n data.velocities.push({\n position: touches[swiper.isHorizontal() ? 'startX' : 'startY'],\n time: data.touchStartTime\n });\n }\n data.velocities.push({\n position: touches[swiper.isHorizontal() ? 'currentX' : 'currentY'],\n time: now()\n });\n }\n function onTouchEnd(_ref2) {\n let {\n currentPos\n } = _ref2;\n if (swiper.params.cssMode) return;\n const {\n params,\n wrapperEl,\n rtlTranslate: rtl,\n snapGrid,\n touchEventsData: data\n } = swiper;\n // Time diff\n const touchEndTime = now();\n const timeDiff = touchEndTime - data.touchStartTime;\n if (currentPos < -swiper.minTranslate()) {\n swiper.slideTo(swiper.activeIndex);\n return;\n }\n if (currentPos > -swiper.maxTranslate()) {\n if (swiper.slides.length < snapGrid.length) {\n swiper.slideTo(snapGrid.length - 1);\n } else {\n swiper.slideTo(swiper.slides.length - 1);\n }\n return;\n }\n if (params.freeMode.momentum) {\n if (data.velocities.length > 1) {\n const lastMoveEvent = data.velocities.pop();\n const velocityEvent = data.velocities.pop();\n const distance = lastMoveEvent.position - velocityEvent.position;\n const time = lastMoveEvent.time - velocityEvent.time;\n swiper.velocity = distance / time;\n swiper.velocity /= 2;\n if (Math.abs(swiper.velocity) < params.freeMode.minimumVelocity) {\n swiper.velocity = 0;\n }\n // this implies that the user stopped moving a finger then released.\n // There would be no events with distance zero, so the last event is stale.\n if (time > 150 || now() - lastMoveEvent.time > 300) {\n swiper.velocity = 0;\n }\n } else {\n swiper.velocity = 0;\n }\n swiper.velocity *= params.freeMode.momentumVelocityRatio;\n data.velocities.length = 0;\n let momentumDuration = 1000 * params.freeMode.momentumRatio;\n const momentumDistance = swiper.velocity * momentumDuration;\n let newPosition = swiper.translate + momentumDistance;\n if (rtl) newPosition = -newPosition;\n let doBounce = false;\n let afterBouncePosition;\n const bounceAmount = Math.abs(swiper.velocity) * 20 * params.freeMode.momentumBounceRatio;\n let needsLoopFix;\n if (newPosition < swiper.maxTranslate()) {\n if (params.freeMode.momentumBounce) {\n if (newPosition + swiper.maxTranslate() < -bounceAmount) {\n newPosition = swiper.maxTranslate() - bounceAmount;\n }\n afterBouncePosition = swiper.maxTranslate();\n doBounce = true;\n data.allowMomentumBounce = true;\n } else {\n newPosition = swiper.maxTranslate();\n }\n if (params.loop && params.centeredSlides) needsLoopFix = true;\n } else if (newPosition > swiper.minTranslate()) {\n if (params.freeMode.momentumBounce) {\n if (newPosition - swiper.minTranslate() > bounceAmount) {\n newPosition = swiper.minTranslate() + bounceAmount;\n }\n afterBouncePosition = swiper.minTranslate();\n doBounce = true;\n data.allowMomentumBounce = true;\n } else {\n newPosition = swiper.minTranslate();\n }\n if (params.loop && params.centeredSlides) needsLoopFix = true;\n } else if (params.freeMode.sticky) {\n let nextSlide;\n for (let j = 0; j < snapGrid.length; j += 1) {\n if (snapGrid[j] > -newPosition) {\n nextSlide = j;\n break;\n }\n }\n if (Math.abs(snapGrid[nextSlide] - newPosition) < Math.abs(snapGrid[nextSlide - 1] - newPosition) || swiper.swipeDirection === 'next') {\n newPosition = snapGrid[nextSlide];\n } else {\n newPosition = snapGrid[nextSlide - 1];\n }\n newPosition = -newPosition;\n }\n if (needsLoopFix) {\n once('transitionEnd', () => {\n swiper.loopFix();\n });\n }\n // Fix duration\n if (swiper.velocity !== 0) {\n if (rtl) {\n momentumDuration = Math.abs((-newPosition - swiper.translate) / swiper.velocity);\n } else {\n momentumDuration = Math.abs((newPosition - swiper.translate) / swiper.velocity);\n }\n if (params.freeMode.sticky) {\n // If freeMode.sticky is active and the user ends a swipe with a slow-velocity\n // event, then durations can be 20+ seconds to slide one (or zero!) slides.\n // It's easy to see this when simulating touch with mouse events. To fix this,\n // limit single-slide swipes to the default slide duration. This also has the\n // nice side effect of matching slide speed if the user stopped moving before\n // lifting finger or mouse vs. moving slowly before lifting the finger/mouse.\n // For faster swipes, also apply limits (albeit higher ones).\n const moveDistance = Math.abs((rtl ? -newPosition : newPosition) - swiper.translate);\n const currentSlideSize = swiper.slidesSizesGrid[swiper.activeIndex];\n if (moveDistance < currentSlideSize) {\n momentumDuration = params.speed;\n } else if (moveDistance < 2 * currentSlideSize) {\n momentumDuration = params.speed * 1.5;\n } else {\n momentumDuration = params.speed * 2.5;\n }\n }\n } else if (params.freeMode.sticky) {\n swiper.slideToClosest();\n return;\n }\n if (params.freeMode.momentumBounce && doBounce) {\n swiper.updateProgress(afterBouncePosition);\n swiper.setTransition(momentumDuration);\n swiper.setTranslate(newPosition);\n swiper.transitionStart(true, swiper.swipeDirection);\n swiper.animating = true;\n elementTransitionEnd(wrapperEl, () => {\n if (!swiper || swiper.destroyed || !data.allowMomentumBounce) return;\n emit('momentumBounce');\n swiper.setTransition(params.speed);\n setTimeout(() => {\n swiper.setTranslate(afterBouncePosition);\n elementTransitionEnd(wrapperEl, () => {\n if (!swiper || swiper.destroyed) return;\n swiper.transitionEnd();\n });\n }, 0);\n });\n } else if (swiper.velocity) {\n emit('_freeModeNoMomentumRelease');\n swiper.updateProgress(newPosition);\n swiper.setTransition(momentumDuration);\n swiper.setTranslate(newPosition);\n swiper.transitionStart(true, swiper.swipeDirection);\n if (!swiper.animating) {\n swiper.animating = true;\n elementTransitionEnd(wrapperEl, () => {\n if (!swiper || swiper.destroyed) return;\n swiper.transitionEnd();\n });\n }\n } else {\n swiper.updateProgress(newPosition);\n }\n swiper.updateActiveIndex();\n swiper.updateSlidesClasses();\n } else if (params.freeMode.sticky) {\n swiper.slideToClosest();\n return;\n } else if (params.freeMode) {\n emit('_freeModeNoMomentumRelease');\n }\n if (!params.freeMode.momentum || timeDiff >= params.longSwipesMs) {\n emit('_freeModeStaticRelease');\n swiper.updateProgress();\n swiper.updateActiveIndex();\n swiper.updateSlidesClasses();\n }\n }\n Object.assign(swiper, {\n freeMode: {\n onTouchStart,\n onTouchMove,\n onTouchEnd\n }\n });\n}\n\nexport { freeMode as default };\n","function Grid(_ref) {\n let {\n swiper,\n extendParams,\n on\n } = _ref;\n extendParams({\n grid: {\n rows: 1,\n fill: 'column'\n }\n });\n let slidesNumberEvenToRows;\n let slidesPerRow;\n let numFullColumns;\n let wasMultiRow;\n const getSpaceBetween = () => {\n let spaceBetween = swiper.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 return spaceBetween;\n };\n const initSlides = slides => {\n const {\n slidesPerView\n } = swiper.params;\n const {\n rows,\n fill\n } = swiper.params.grid;\n const slidesLength = swiper.virtual && swiper.params.virtual.enabled ? swiper.virtual.slides.length : slides.length;\n numFullColumns = Math.floor(slidesLength / rows);\n if (Math.floor(slidesLength / rows) === slidesLength / rows) {\n slidesNumberEvenToRows = slidesLength;\n } else {\n slidesNumberEvenToRows = Math.ceil(slidesLength / rows) * rows;\n }\n if (slidesPerView !== 'auto' && fill === 'row') {\n slidesNumberEvenToRows = Math.max(slidesNumberEvenToRows, slidesPerView * rows);\n }\n slidesPerRow = slidesNumberEvenToRows / rows;\n };\n const unsetSlides = () => {\n if (swiper.slides) {\n swiper.slides.forEach(slide => {\n if (slide.swiperSlideGridSet) {\n slide.style.height = '';\n slide.style[swiper.getDirectionLabel('margin-top')] = '';\n }\n });\n }\n };\n const updateSlide = (i, slide, slides) => {\n const {\n slidesPerGroup\n } = swiper.params;\n const spaceBetween = getSpaceBetween();\n const {\n rows,\n fill\n } = swiper.params.grid;\n const slidesLength = swiper.virtual && swiper.params.virtual.enabled ? swiper.virtual.slides.length : slides.length;\n // Set slides order\n let newSlideOrderIndex;\n let column;\n let row;\n if (fill === 'row' && slidesPerGroup > 1) {\n const groupIndex = Math.floor(i / (slidesPerGroup * rows));\n const slideIndexInGroup = i - rows * slidesPerGroup * groupIndex;\n const columnsInGroup = groupIndex === 0 ? slidesPerGroup : Math.min(Math.ceil((slidesLength - groupIndex * rows * slidesPerGroup) / rows), slidesPerGroup);\n row = Math.floor(slideIndexInGroup / columnsInGroup);\n column = slideIndexInGroup - row * columnsInGroup + groupIndex * slidesPerGroup;\n newSlideOrderIndex = column + row * slidesNumberEvenToRows / rows;\n slide.style.order = newSlideOrderIndex;\n } else if (fill === 'column') {\n column = Math.floor(i / rows);\n row = i - column * rows;\n if (column > numFullColumns || column === numFullColumns && row === rows - 1) {\n row += 1;\n if (row >= rows) {\n row = 0;\n column += 1;\n }\n }\n } else {\n row = Math.floor(i / slidesPerRow);\n column = i - row * slidesPerRow;\n }\n slide.row = row;\n slide.column = column;\n slide.style.height = `calc((100% - ${(rows - 1) * spaceBetween}px) / ${rows})`;\n slide.style[swiper.getDirectionLabel('margin-top')] = row !== 0 ? spaceBetween && `${spaceBetween}px` : '';\n slide.swiperSlideGridSet = true;\n };\n const updateWrapperSize = (slideSize, snapGrid) => {\n const {\n centeredSlides,\n roundLengths\n } = swiper.params;\n const spaceBetween = getSpaceBetween();\n const {\n rows\n } = swiper.params.grid;\n swiper.virtualSize = (slideSize + spaceBetween) * slidesNumberEvenToRows;\n swiper.virtualSize = Math.ceil(swiper.virtualSize / rows) - spaceBetween;\n if (!swiper.params.cssMode) {\n swiper.wrapperEl.style[swiper.getDirectionLabel('width')] = `${swiper.virtualSize + spaceBetween}px`;\n }\n if (centeredSlides) {\n const newSlidesGrid = [];\n for (let i = 0; i < snapGrid.length; i += 1) {\n let slidesGridItem = snapGrid[i];\n if (roundLengths) slidesGridItem = Math.floor(slidesGridItem);\n if (snapGrid[i] < swiper.virtualSize + snapGrid[0]) newSlidesGrid.push(slidesGridItem);\n }\n snapGrid.splice(0, snapGrid.length);\n snapGrid.push(...newSlidesGrid);\n }\n };\n const onInit = () => {\n wasMultiRow = swiper.params.grid && swiper.params.grid.rows > 1;\n };\n const onUpdate = () => {\n const {\n params,\n el\n } = swiper;\n const isMultiRow = params.grid && params.grid.rows > 1;\n if (wasMultiRow && !isMultiRow) {\n el.classList.remove(`${params.containerModifierClass}grid`, `${params.containerModifierClass}grid-column`);\n numFullColumns = 1;\n swiper.emitContainerClasses();\n } else if (!wasMultiRow && isMultiRow) {\n el.classList.add(`${params.containerModifierClass}grid`);\n if (params.grid.fill === 'column') {\n el.classList.add(`${params.containerModifierClass}grid-column`);\n }\n swiper.emitContainerClasses();\n }\n wasMultiRow = isMultiRow;\n };\n on('init', onInit);\n on('update', onUpdate);\n swiper.grid = {\n initSlides,\n unsetSlides,\n updateSlide,\n updateWrapperSize\n };\n}\n\nexport { Grid as default };\n","import { s as setInnerHTML } from '../shared/utils.mjs';\n\nfunction appendSlide(slides) {\n const swiper = this;\n const {\n params,\n slidesEl\n } = swiper;\n if (params.loop) {\n swiper.loopDestroy();\n }\n const appendElement = slideEl => {\n if (typeof slideEl === 'string') {\n const tempDOM = document.createElement('div');\n setInnerHTML(tempDOM, slideEl);\n slidesEl.append(tempDOM.children[0]);\n setInnerHTML(tempDOM, '');\n } else {\n slidesEl.append(slideEl);\n }\n };\n if (typeof slides === 'object' && 'length' in slides) {\n for (let i = 0; i < slides.length; i += 1) {\n if (slides[i]) appendElement(slides[i]);\n }\n } else {\n appendElement(slides);\n }\n swiper.recalcSlides();\n if (params.loop) {\n swiper.loopCreate();\n }\n if (!params.observer || swiper.isElement) {\n swiper.update();\n }\n}\n\nfunction prependSlide(slides) {\n const swiper = this;\n const {\n params,\n activeIndex,\n slidesEl\n } = swiper;\n if (params.loop) {\n swiper.loopDestroy();\n }\n let newActiveIndex = activeIndex + 1;\n const prependElement = slideEl => {\n if (typeof slideEl === 'string') {\n const tempDOM = document.createElement('div');\n setInnerHTML(tempDOM, slideEl);\n slidesEl.prepend(tempDOM.children[0]);\n setInnerHTML(tempDOM, '');\n } else {\n slidesEl.prepend(slideEl);\n }\n };\n if (typeof slides === 'object' && 'length' in slides) {\n for (let i = 0; i < slides.length; i += 1) {\n if (slides[i]) prependElement(slides[i]);\n }\n newActiveIndex = activeIndex + slides.length;\n } else {\n prependElement(slides);\n }\n swiper.recalcSlides();\n if (params.loop) {\n swiper.loopCreate();\n }\n if (!params.observer || swiper.isElement) {\n swiper.update();\n }\n swiper.slideTo(newActiveIndex, 0, false);\n}\n\nfunction addSlide(index, slides) {\n const swiper = this;\n const {\n params,\n activeIndex,\n slidesEl\n } = swiper;\n let activeIndexBuffer = activeIndex;\n if (params.loop) {\n activeIndexBuffer -= swiper.loopedSlides;\n swiper.loopDestroy();\n swiper.recalcSlides();\n }\n const baseLength = swiper.slides.length;\n if (index <= 0) {\n swiper.prependSlide(slides);\n return;\n }\n if (index >= baseLength) {\n swiper.appendSlide(slides);\n return;\n }\n let newActiveIndex = activeIndexBuffer > index ? activeIndexBuffer + 1 : activeIndexBuffer;\n const slidesBuffer = [];\n for (let i = baseLength - 1; i >= index; i -= 1) {\n const currentSlide = swiper.slides[i];\n currentSlide.remove();\n slidesBuffer.unshift(currentSlide);\n }\n if (typeof slides === 'object' && 'length' in slides) {\n for (let i = 0; i < slides.length; i += 1) {\n if (slides[i]) slidesEl.append(slides[i]);\n }\n newActiveIndex = activeIndexBuffer > index ? activeIndexBuffer + slides.length : activeIndexBuffer;\n } else {\n slidesEl.append(slides);\n }\n for (let i = 0; i < slidesBuffer.length; i += 1) {\n slidesEl.append(slidesBuffer[i]);\n }\n swiper.recalcSlides();\n if (params.loop) {\n swiper.loopCreate();\n }\n if (!params.observer || swiper.isElement) {\n swiper.update();\n }\n if (params.loop) {\n swiper.slideTo(newActiveIndex + swiper.loopedSlides, 0, false);\n } else {\n swiper.slideTo(newActiveIndex, 0, false);\n }\n}\n\nfunction removeSlide(slidesIndexes) {\n const swiper = this;\n const {\n params,\n activeIndex\n } = swiper;\n let activeIndexBuffer = activeIndex;\n if (params.loop) {\n activeIndexBuffer -= swiper.loopedSlides;\n swiper.loopDestroy();\n }\n let newActiveIndex = activeIndexBuffer;\n let indexToRemove;\n if (typeof slidesIndexes === 'object' && 'length' in slidesIndexes) {\n for (let i = 0; i < slidesIndexes.length; i += 1) {\n indexToRemove = slidesIndexes[i];\n if (swiper.slides[indexToRemove]) swiper.slides[indexToRemove].remove();\n if (indexToRemove < newActiveIndex) newActiveIndex -= 1;\n }\n newActiveIndex = Math.max(newActiveIndex, 0);\n } else {\n indexToRemove = slidesIndexes;\n if (swiper.slides[indexToRemove]) swiper.slides[indexToRemove].remove();\n if (indexToRemove < newActiveIndex) newActiveIndex -= 1;\n newActiveIndex = Math.max(newActiveIndex, 0);\n }\n swiper.recalcSlides();\n if (params.loop) {\n swiper.loopCreate();\n }\n if (!params.observer || swiper.isElement) {\n swiper.update();\n }\n if (params.loop) {\n swiper.slideTo(newActiveIndex + swiper.loopedSlides, 0, false);\n } else {\n swiper.slideTo(newActiveIndex, 0, false);\n }\n}\n\nfunction removeAllSlides() {\n const swiper = this;\n const slidesIndexes = [];\n for (let i = 0; i < swiper.slides.length; i += 1) {\n slidesIndexes.push(i);\n }\n swiper.removeSlide(slidesIndexes);\n}\n\nfunction Manipulation(_ref) {\n let {\n swiper\n } = _ref;\n Object.assign(swiper, {\n appendSlide: appendSlide.bind(swiper),\n prependSlide: prependSlide.bind(swiper),\n addSlide: addSlide.bind(swiper),\n removeSlide: removeSlide.bind(swiper),\n removeAllSlides: removeAllSlides.bind(swiper)\n });\n}\n\nexport { Manipulation as default };\n","import { e as effectInit } from '../shared/effect-init.mjs';\nimport { e as effectTarget } from '../shared/effect-target.mjs';\nimport { e as effectVirtualTransitionEnd } from '../shared/effect-virtual-transition-end.mjs';\nimport { g as getSlideTransformEl } from '../shared/utils.mjs';\n\nfunction EffectFade(_ref) {\n let {\n swiper,\n extendParams,\n on\n } = _ref;\n extendParams({\n fadeEffect: {\n crossFade: false\n }\n });\n const setTranslate = () => {\n const {\n slides\n } = swiper;\n const params = swiper.params.fadeEffect;\n for (let i = 0; i < slides.length; i += 1) {\n const slideEl = swiper.slides[i];\n const offset = slideEl.swiperSlideOffset;\n let tx = -offset;\n if (!swiper.params.virtualTranslate) tx -= swiper.translate;\n let ty = 0;\n if (!swiper.isHorizontal()) {\n ty = tx;\n tx = 0;\n }\n const slideOpacity = swiper.params.fadeEffect.crossFade ? Math.max(1 - Math.abs(slideEl.progress), 0) : 1 + Math.min(Math.max(slideEl.progress, -1), 0);\n const targetEl = effectTarget(params, slideEl);\n targetEl.style.opacity = slideOpacity;\n targetEl.style.transform = `translate3d(${tx}px, ${ty}px, 0px)`;\n }\n };\n const setTransition = duration => {\n const transformElements = swiper.slides.map(slideEl => getSlideTransformEl(slideEl));\n transformElements.forEach(el => {\n el.style.transitionDuration = `${duration}ms`;\n });\n effectVirtualTransitionEnd({\n swiper,\n duration,\n transformElements,\n allSlides: true\n });\n };\n effectInit({\n effect: 'fade',\n swiper,\n on,\n setTranslate,\n setTransition,\n overwriteParams: () => ({\n slidesPerView: 1,\n slidesPerGroup: 1,\n watchSlidesProgress: true,\n spaceBetween: 0,\n virtualTranslate: !swiper.params.cssMode\n })\n });\n}\n\nexport { EffectFade as default };\n","function effectInit(params) {\n const {\n effect,\n swiper,\n on,\n setTranslate,\n setTransition,\n overwriteParams,\n perspective,\n recreateShadows,\n getEffectParams\n } = params;\n on('beforeInit', () => {\n if (swiper.params.effect !== effect) return;\n swiper.classNames.push(`${swiper.params.containerModifierClass}${effect}`);\n if (perspective && perspective()) {\n swiper.classNames.push(`${swiper.params.containerModifierClass}3d`);\n }\n const overwriteParamsResult = overwriteParams ? overwriteParams() : {};\n Object.assign(swiper.params, overwriteParamsResult);\n Object.assign(swiper.originalParams, overwriteParamsResult);\n });\n on('setTranslate _virtualUpdated', () => {\n if (swiper.params.effect !== effect) return;\n setTranslate();\n });\n on('setTransition', (_s, duration) => {\n if (swiper.params.effect !== effect) return;\n setTransition(duration);\n });\n on('transitionEnd', () => {\n if (swiper.params.effect !== effect) return;\n if (recreateShadows) {\n if (!getEffectParams || !getEffectParams().slideShadows) return;\n // remove shadows\n swiper.slides.forEach(slideEl => {\n slideEl.querySelectorAll('.swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left').forEach(shadowEl => shadowEl.remove());\n });\n // create new one\n recreateShadows();\n }\n });\n let requireUpdateOnVirtual;\n on('virtualUpdate', () => {\n if (swiper.params.effect !== effect) return;\n if (!swiper.slides.length) {\n requireUpdateOnVirtual = true;\n }\n requestAnimationFrame(() => {\n if (requireUpdateOnVirtual && swiper.slides && swiper.slides.length) {\n setTranslate();\n requireUpdateOnVirtual = false;\n }\n });\n });\n}\n\nexport { effectInit as e };\n","import { g as getSlideTransformEl } from './utils.mjs';\n\nfunction effectTarget(effectParams, slideEl) {\n const transformEl = getSlideTransformEl(slideEl);\n if (transformEl !== slideEl) {\n transformEl.style.backfaceVisibility = 'hidden';\n transformEl.style['-webkit-backface-visibility'] = 'hidden';\n }\n return transformEl;\n}\n\nexport { effectTarget as e };\n","import { l as elementTransitionEnd } from './utils.mjs';\n\nfunction effectVirtualTransitionEnd(_ref) {\n let {\n swiper,\n duration,\n transformElements,\n allSlides\n } = _ref;\n const {\n activeIndex\n } = swiper;\n const getSlide = el => {\n if (!el.parentElement) {\n // assume shadow root\n const slide = swiper.slides.find(slideEl => slideEl.shadowRoot && slideEl.shadowRoot === el.parentNode);\n return slide;\n }\n return el.parentElement;\n };\n if (swiper.params.virtualTranslate && duration !== 0) {\n let eventTriggered = false;\n let transitionEndTarget;\n if (allSlides) {\n transitionEndTarget = transformElements;\n } else {\n transitionEndTarget = transformElements.filter(transformEl => {\n const el = transformEl.classList.contains('swiper-slide-transform') ? getSlide(transformEl) : transformEl;\n return swiper.getSlideIndex(el) === activeIndex;\n });\n }\n transitionEndTarget.forEach(el => {\n elementTransitionEnd(el, () => {\n if (eventTriggered) return;\n if (!swiper || swiper.destroyed) return;\n eventTriggered = true;\n swiper.animating = false;\n const evt = new window.CustomEvent('transitionend', {\n bubbles: true,\n cancelable: true\n });\n swiper.wrapperEl.dispatchEvent(evt);\n });\n });\n }\n}\n\nexport { effectVirtualTransitionEnd as e };\n","import { e as effectInit } from '../shared/effect-init.mjs';\nimport { c as createElement, p as getRotateFix } from '../shared/utils.mjs';\n\nfunction EffectCube(_ref) {\n let {\n swiper,\n extendParams,\n on\n } = _ref;\n extendParams({\n cubeEffect: {\n slideShadows: true,\n shadow: true,\n shadowOffset: 20,\n shadowScale: 0.94\n }\n });\n const createSlideShadows = (slideEl, progress, isHorizontal) => {\n let shadowBefore = isHorizontal ? slideEl.querySelector('.swiper-slide-shadow-left') : slideEl.querySelector('.swiper-slide-shadow-top');\n let shadowAfter = isHorizontal ? slideEl.querySelector('.swiper-slide-shadow-right') : slideEl.querySelector('.swiper-slide-shadow-bottom');\n if (!shadowBefore) {\n shadowBefore = createElement('div', `swiper-slide-shadow-cube swiper-slide-shadow-${isHorizontal ? 'left' : 'top'}`.split(' '));\n slideEl.append(shadowBefore);\n }\n if (!shadowAfter) {\n shadowAfter = createElement('div', `swiper-slide-shadow-cube swiper-slide-shadow-${isHorizontal ? 'right' : 'bottom'}`.split(' '));\n slideEl.append(shadowAfter);\n }\n if (shadowBefore) shadowBefore.style.opacity = Math.max(-progress, 0);\n if (shadowAfter) shadowAfter.style.opacity = Math.max(progress, 0);\n };\n const recreateShadows = () => {\n // create new ones\n const isHorizontal = swiper.isHorizontal();\n swiper.slides.forEach(slideEl => {\n const progress = Math.max(Math.min(slideEl.progress, 1), -1);\n createSlideShadows(slideEl, progress, isHorizontal);\n });\n };\n const setTranslate = () => {\n const {\n el,\n wrapperEl,\n slides,\n width: swiperWidth,\n height: swiperHeight,\n rtlTranslate: rtl,\n size: swiperSize,\n browser\n } = swiper;\n const r = getRotateFix(swiper);\n const params = swiper.params.cubeEffect;\n const isHorizontal = swiper.isHorizontal();\n const isVirtual = swiper.virtual && swiper.params.virtual.enabled;\n let wrapperRotate = 0;\n let cubeShadowEl;\n if (params.shadow) {\n if (isHorizontal) {\n cubeShadowEl = swiper.wrapperEl.querySelector('.swiper-cube-shadow');\n if (!cubeShadowEl) {\n cubeShadowEl = createElement('div', 'swiper-cube-shadow');\n swiper.wrapperEl.append(cubeShadowEl);\n }\n cubeShadowEl.style.height = `${swiperWidth}px`;\n } else {\n cubeShadowEl = el.querySelector('.swiper-cube-shadow');\n if (!cubeShadowEl) {\n cubeShadowEl = createElement('div', 'swiper-cube-shadow');\n el.append(cubeShadowEl);\n }\n }\n }\n for (let i = 0; i < slides.length; i += 1) {\n const slideEl = slides[i];\n let slideIndex = i;\n if (isVirtual) {\n slideIndex = parseInt(slideEl.getAttribute('data-swiper-slide-index'), 10);\n }\n let slideAngle = slideIndex * 90;\n let round = Math.floor(slideAngle / 360);\n if (rtl) {\n slideAngle = -slideAngle;\n round = Math.floor(-slideAngle / 360);\n }\n const progress = Math.max(Math.min(slideEl.progress, 1), -1);\n let tx = 0;\n let ty = 0;\n let tz = 0;\n if (slideIndex % 4 === 0) {\n tx = -round * 4 * swiperSize;\n tz = 0;\n } else if ((slideIndex - 1) % 4 === 0) {\n tx = 0;\n tz = -round * 4 * swiperSize;\n } else if ((slideIndex - 2) % 4 === 0) {\n tx = swiperSize + round * 4 * swiperSize;\n tz = swiperSize;\n } else if ((slideIndex - 3) % 4 === 0) {\n tx = -swiperSize;\n tz = 3 * swiperSize + swiperSize * 4 * round;\n }\n if (rtl) {\n tx = -tx;\n }\n if (!isHorizontal) {\n ty = tx;\n tx = 0;\n }\n const transform = `rotateX(${r(isHorizontal ? 0 : -slideAngle)}deg) rotateY(${r(isHorizontal ? slideAngle : 0)}deg) translate3d(${tx}px, ${ty}px, ${tz}px)`;\n if (progress <= 1 && progress > -1) {\n wrapperRotate = slideIndex * 90 + progress * 90;\n if (rtl) wrapperRotate = -slideIndex * 90 - progress * 90;\n }\n slideEl.style.transform = transform;\n if (params.slideShadows) {\n createSlideShadows(slideEl, progress, isHorizontal);\n }\n }\n wrapperEl.style.transformOrigin = `50% 50% -${swiperSize / 2}px`;\n wrapperEl.style['-webkit-transform-origin'] = `50% 50% -${swiperSize / 2}px`;\n if (params.shadow) {\n if (isHorizontal) {\n cubeShadowEl.style.transform = `translate3d(0px, ${swiperWidth / 2 + params.shadowOffset}px, ${-swiperWidth / 2}px) rotateX(89.99deg) rotateZ(0deg) scale(${params.shadowScale})`;\n } else {\n const shadowAngle = Math.abs(wrapperRotate) - Math.floor(Math.abs(wrapperRotate) / 90) * 90;\n const multiplier = 1.5 - (Math.sin(shadowAngle * 2 * Math.PI / 360) / 2 + Math.cos(shadowAngle * 2 * Math.PI / 360) / 2);\n const scale1 = params.shadowScale;\n const scale2 = params.shadowScale / multiplier;\n const offset = params.shadowOffset;\n cubeShadowEl.style.transform = `scale3d(${scale1}, 1, ${scale2}) translate3d(0px, ${swiperHeight / 2 + offset}px, ${-swiperHeight / 2 / scale2}px) rotateX(-89.99deg)`;\n }\n }\n const zFactor = (browser.isSafari || browser.isWebView) && browser.needPerspectiveFix ? -swiperSize / 2 : 0;\n wrapperEl.style.transform = `translate3d(0px,0,${zFactor}px) rotateX(${r(swiper.isHorizontal() ? 0 : wrapperRotate)}deg) rotateY(${r(swiper.isHorizontal() ? -wrapperRotate : 0)}deg)`;\n wrapperEl.style.setProperty('--swiper-cube-translate-z', `${zFactor}px`);\n };\n const setTransition = duration => {\n const {\n el,\n slides\n } = swiper;\n slides.forEach(slideEl => {\n slideEl.style.transitionDuration = `${duration}ms`;\n slideEl.querySelectorAll('.swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left').forEach(subEl => {\n subEl.style.transitionDuration = `${duration}ms`;\n });\n });\n if (swiper.params.cubeEffect.shadow && !swiper.isHorizontal()) {\n const shadowEl = el.querySelector('.swiper-cube-shadow');\n if (shadowEl) shadowEl.style.transitionDuration = `${duration}ms`;\n }\n };\n effectInit({\n effect: 'cube',\n swiper,\n on,\n setTranslate,\n setTransition,\n recreateShadows,\n getEffectParams: () => swiper.params.cubeEffect,\n perspective: () => true,\n overwriteParams: () => ({\n slidesPerView: 1,\n slidesPerGroup: 1,\n watchSlidesProgress: true,\n resistanceRatio: 0,\n spaceBetween: 0,\n centeredSlides: false,\n virtualTranslate: true\n })\n });\n}\n\nexport { EffectCube as default };\n","import { c as createShadow } from '../shared/create-shadow.mjs';\nimport { e as effectInit } from '../shared/effect-init.mjs';\nimport { e as effectTarget } from '../shared/effect-target.mjs';\nimport { e as effectVirtualTransitionEnd } from '../shared/effect-virtual-transition-end.mjs';\nimport { g as getSlideTransformEl, p as getRotateFix } from '../shared/utils.mjs';\n\nfunction EffectFlip(_ref) {\n let {\n swiper,\n extendParams,\n on\n } = _ref;\n extendParams({\n flipEffect: {\n slideShadows: true,\n limitRotation: true\n }\n });\n const createSlideShadows = (slideEl, progress) => {\n let shadowBefore = swiper.isHorizontal() ? slideEl.querySelector('.swiper-slide-shadow-left') : slideEl.querySelector('.swiper-slide-shadow-top');\n let shadowAfter = swiper.isHorizontal() ? slideEl.querySelector('.swiper-slide-shadow-right') : slideEl.querySelector('.swiper-slide-shadow-bottom');\n if (!shadowBefore) {\n shadowBefore = createShadow('flip', slideEl, swiper.isHorizontal() ? 'left' : 'top');\n }\n if (!shadowAfter) {\n shadowAfter = createShadow('flip', slideEl, swiper.isHorizontal() ? 'right' : 'bottom');\n }\n if (shadowBefore) shadowBefore.style.opacity = Math.max(-progress, 0);\n if (shadowAfter) shadowAfter.style.opacity = Math.max(progress, 0);\n };\n const recreateShadows = () => {\n // Set shadows\n swiper.params.flipEffect;\n swiper.slides.forEach(slideEl => {\n let progress = slideEl.progress;\n if (swiper.params.flipEffect.limitRotation) {\n progress = Math.max(Math.min(slideEl.progress, 1), -1);\n }\n createSlideShadows(slideEl, progress);\n });\n };\n const setTranslate = () => {\n const {\n slides,\n rtlTranslate: rtl\n } = swiper;\n const params = swiper.params.flipEffect;\n const rotateFix = getRotateFix(swiper);\n for (let i = 0; i < slides.length; i += 1) {\n const slideEl = slides[i];\n let progress = slideEl.progress;\n if (swiper.params.flipEffect.limitRotation) {\n progress = Math.max(Math.min(slideEl.progress, 1), -1);\n }\n const offset = slideEl.swiperSlideOffset;\n const rotate = -180 * progress;\n let rotateY = rotate;\n let rotateX = 0;\n let tx = swiper.params.cssMode ? -offset - swiper.translate : -offset;\n let ty = 0;\n if (!swiper.isHorizontal()) {\n ty = tx;\n tx = 0;\n rotateX = -rotateY;\n rotateY = 0;\n } else if (rtl) {\n rotateY = -rotateY;\n }\n slideEl.style.zIndex = -Math.abs(Math.round(progress)) + slides.length;\n if (params.slideShadows) {\n createSlideShadows(slideEl, progress);\n }\n const transform = `translate3d(${tx}px, ${ty}px, 0px) rotateX(${rotateFix(rotateX)}deg) rotateY(${rotateFix(rotateY)}deg)`;\n const targetEl = effectTarget(params, slideEl);\n targetEl.style.transform = transform;\n }\n };\n const setTransition = duration => {\n const transformElements = swiper.slides.map(slideEl => getSlideTransformEl(slideEl));\n transformElements.forEach(el => {\n el.style.transitionDuration = `${duration}ms`;\n el.querySelectorAll('.swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left').forEach(shadowEl => {\n shadowEl.style.transitionDuration = `${duration}ms`;\n });\n });\n effectVirtualTransitionEnd({\n swiper,\n duration,\n transformElements\n });\n };\n effectInit({\n effect: 'flip',\n swiper,\n on,\n setTranslate,\n setTransition,\n recreateShadows,\n getEffectParams: () => swiper.params.flipEffect,\n perspective: () => true,\n overwriteParams: () => ({\n slidesPerView: 1,\n slidesPerGroup: 1,\n watchSlidesProgress: true,\n spaceBetween: 0,\n virtualTranslate: !swiper.params.cssMode\n })\n });\n}\n\nexport { EffectFlip as default };\n","import { g as getSlideTransformEl, c as createElement } from './utils.mjs';\n\nfunction createShadow(suffix, slideEl, side) {\n const shadowClass = `swiper-slide-shadow${side ? `-${side}` : ''}${suffix ? ` swiper-slide-shadow-${suffix}` : ''}`;\n const shadowContainer = getSlideTransformEl(slideEl);\n let shadowEl = shadowContainer.querySelector(`.${shadowClass.split(' ').join('.')}`);\n if (!shadowEl) {\n shadowEl = createElement('div', shadowClass.split(' '));\n shadowContainer.append(shadowEl);\n }\n return shadowEl;\n}\n\nexport { createShadow as c };\n","import { c as createShadow } from '../shared/create-shadow.mjs';\nimport { e as effectInit } from '../shared/effect-init.mjs';\nimport { e as effectTarget } from '../shared/effect-target.mjs';\nimport { g as getSlideTransformEl, p as getRotateFix } from '../shared/utils.mjs';\n\nfunction EffectCoverflow(_ref) {\n let {\n swiper,\n extendParams,\n on\n } = _ref;\n extendParams({\n coverflowEffect: {\n rotate: 50,\n stretch: 0,\n depth: 100,\n scale: 1,\n modifier: 1,\n slideShadows: true\n }\n });\n const setTranslate = () => {\n const {\n width: swiperWidth,\n height: swiperHeight,\n slides,\n slidesSizesGrid\n } = swiper;\n const params = swiper.params.coverflowEffect;\n const isHorizontal = swiper.isHorizontal();\n const transform = swiper.translate;\n const center = isHorizontal ? -transform + swiperWidth / 2 : -transform + swiperHeight / 2;\n const rotate = isHorizontal ? params.rotate : -params.rotate;\n const translate = params.depth;\n const r = getRotateFix(swiper);\n // Each slide offset from center\n for (let i = 0, length = slides.length; i < length; i += 1) {\n const slideEl = slides[i];\n const slideSize = slidesSizesGrid[i];\n const slideOffset = slideEl.swiperSlideOffset;\n const centerOffset = (center - slideOffset - slideSize / 2) / slideSize;\n const offsetMultiplier = typeof params.modifier === 'function' ? params.modifier(centerOffset) : centerOffset * params.modifier;\n let rotateY = isHorizontal ? rotate * offsetMultiplier : 0;\n let rotateX = isHorizontal ? 0 : rotate * offsetMultiplier;\n // var rotateZ = 0\n let translateZ = -translate * Math.abs(offsetMultiplier);\n let stretch = params.stretch;\n // Allow percentage to make a relative stretch for responsive sliders\n if (typeof stretch === 'string' && stretch.indexOf('%') !== -1) {\n stretch = parseFloat(params.stretch) / 100 * slideSize;\n }\n let translateY = isHorizontal ? 0 : stretch * offsetMultiplier;\n let translateX = isHorizontal ? stretch * offsetMultiplier : 0;\n let scale = 1 - (1 - params.scale) * Math.abs(offsetMultiplier);\n\n // Fix for ultra small values\n if (Math.abs(translateX) < 0.001) translateX = 0;\n if (Math.abs(translateY) < 0.001) translateY = 0;\n if (Math.abs(translateZ) < 0.001) translateZ = 0;\n if (Math.abs(rotateY) < 0.001) rotateY = 0;\n if (Math.abs(rotateX) < 0.001) rotateX = 0;\n if (Math.abs(scale) < 0.001) scale = 0;\n const slideTransform = `translate3d(${translateX}px,${translateY}px,${translateZ}px) rotateX(${r(rotateX)}deg) rotateY(${r(rotateY)}deg) scale(${scale})`;\n const targetEl = effectTarget(params, slideEl);\n targetEl.style.transform = slideTransform;\n slideEl.style.zIndex = -Math.abs(Math.round(offsetMultiplier)) + 1;\n if (params.slideShadows) {\n // Set shadows\n let shadowBeforeEl = isHorizontal ? slideEl.querySelector('.swiper-slide-shadow-left') : slideEl.querySelector('.swiper-slide-shadow-top');\n let shadowAfterEl = isHorizontal ? slideEl.querySelector('.swiper-slide-shadow-right') : slideEl.querySelector('.swiper-slide-shadow-bottom');\n if (!shadowBeforeEl) {\n shadowBeforeEl = createShadow('coverflow', slideEl, isHorizontal ? 'left' : 'top');\n }\n if (!shadowAfterEl) {\n shadowAfterEl = createShadow('coverflow', slideEl, isHorizontal ? 'right' : 'bottom');\n }\n if (shadowBeforeEl) shadowBeforeEl.style.opacity = offsetMultiplier > 0 ? offsetMultiplier : 0;\n if (shadowAfterEl) shadowAfterEl.style.opacity = -offsetMultiplier > 0 ? -offsetMultiplier : 0;\n }\n }\n };\n const setTransition = duration => {\n const transformElements = swiper.slides.map(slideEl => getSlideTransformEl(slideEl));\n transformElements.forEach(el => {\n el.style.transitionDuration = `${duration}ms`;\n el.querySelectorAll('.swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left').forEach(shadowEl => {\n shadowEl.style.transitionDuration = `${duration}ms`;\n });\n });\n };\n effectInit({\n effect: 'coverflow',\n swiper,\n on,\n setTranslate,\n setTransition,\n perspective: () => true,\n overwriteParams: () => ({\n watchSlidesProgress: true\n })\n });\n}\n\nexport { EffectCoverflow as default };\n","import { c as createShadow } from '../shared/create-shadow.mjs';\nimport { e as effectInit } from '../shared/effect-init.mjs';\nimport { e as effectTarget } from '../shared/effect-target.mjs';\nimport { e as effectVirtualTransitionEnd } from '../shared/effect-virtual-transition-end.mjs';\nimport { g as getSlideTransformEl, p as getRotateFix } from '../shared/utils.mjs';\n\nfunction EffectCreative(_ref) {\n let {\n swiper,\n extendParams,\n on\n } = _ref;\n extendParams({\n creativeEffect: {\n limitProgress: 1,\n shadowPerProgress: false,\n progressMultiplier: 1,\n perspective: true,\n prev: {\n translate: [0, 0, 0],\n rotate: [0, 0, 0],\n opacity: 1,\n scale: 1\n },\n next: {\n translate: [0, 0, 0],\n rotate: [0, 0, 0],\n opacity: 1,\n scale: 1\n }\n }\n });\n const getTranslateValue = value => {\n if (typeof value === 'string') return value;\n return `${value}px`;\n };\n const setTranslate = () => {\n const {\n slides,\n wrapperEl,\n slidesSizesGrid\n } = swiper;\n const params = swiper.params.creativeEffect;\n const {\n progressMultiplier: multiplier\n } = params;\n const isCenteredSlides = swiper.params.centeredSlides;\n const rotateFix = getRotateFix(swiper);\n if (isCenteredSlides) {\n const margin = slidesSizesGrid[0] / 2 - swiper.params.slidesOffsetBefore || 0;\n wrapperEl.style.transform = `translateX(calc(50% - ${margin}px))`;\n }\n for (let i = 0; i < slides.length; i += 1) {\n const slideEl = slides[i];\n const slideProgress = slideEl.progress;\n const progress = Math.min(Math.max(slideEl.progress, -params.limitProgress), params.limitProgress);\n let originalProgress = progress;\n if (!isCenteredSlides) {\n originalProgress = Math.min(Math.max(slideEl.originalProgress, -params.limitProgress), params.limitProgress);\n }\n const offset = slideEl.swiperSlideOffset;\n const t = [swiper.params.cssMode ? -offset - swiper.translate : -offset, 0, 0];\n const r = [0, 0, 0];\n let custom = false;\n if (!swiper.isHorizontal()) {\n t[1] = t[0];\n t[0] = 0;\n }\n let data = {\n translate: [0, 0, 0],\n rotate: [0, 0, 0],\n scale: 1,\n opacity: 1\n };\n if (progress < 0) {\n data = params.next;\n custom = true;\n } else if (progress > 0) {\n data = params.prev;\n custom = true;\n }\n // set translate\n t.forEach((value, index) => {\n t[index] = `calc(${value}px + (${getTranslateValue(data.translate[index])} * ${Math.abs(progress * multiplier)}))`;\n });\n // set rotates\n r.forEach((value, index) => {\n let val = data.rotate[index] * Math.abs(progress * multiplier);\n r[index] = val;\n });\n slideEl.style.zIndex = -Math.abs(Math.round(slideProgress)) + slides.length;\n const translateString = t.join(', ');\n const rotateString = `rotateX(${rotateFix(r[0])}deg) rotateY(${rotateFix(r[1])}deg) rotateZ(${rotateFix(r[2])}deg)`;\n const scaleString = originalProgress < 0 ? `scale(${1 + (1 - data.scale) * originalProgress * multiplier})` : `scale(${1 - (1 - data.scale) * originalProgress * multiplier})`;\n const opacityString = originalProgress < 0 ? 1 + (1 - data.opacity) * originalProgress * multiplier : 1 - (1 - data.opacity) * originalProgress * multiplier;\n const transform = `translate3d(${translateString}) ${rotateString} ${scaleString}`;\n\n // Set shadows\n if (custom && data.shadow || !custom) {\n let shadowEl = slideEl.querySelector('.swiper-slide-shadow');\n if (!shadowEl && data.shadow) {\n shadowEl = createShadow('creative', slideEl);\n }\n if (shadowEl) {\n const shadowOpacity = params.shadowPerProgress ? progress * (1 / params.limitProgress) : progress;\n shadowEl.style.opacity = Math.min(Math.max(Math.abs(shadowOpacity), 0), 1);\n }\n }\n const targetEl = effectTarget(params, slideEl);\n targetEl.style.transform = transform;\n targetEl.style.opacity = opacityString;\n if (data.origin) {\n targetEl.style.transformOrigin = data.origin;\n }\n }\n };\n const setTransition = duration => {\n const transformElements = swiper.slides.map(slideEl => getSlideTransformEl(slideEl));\n transformElements.forEach(el => {\n el.style.transitionDuration = `${duration}ms`;\n el.querySelectorAll('.swiper-slide-shadow').forEach(shadowEl => {\n shadowEl.style.transitionDuration = `${duration}ms`;\n });\n });\n effectVirtualTransitionEnd({\n swiper,\n duration,\n transformElements,\n allSlides: true\n });\n };\n effectInit({\n effect: 'creative',\n swiper,\n on,\n setTranslate,\n setTransition,\n perspective: () => swiper.params.creativeEffect.perspective,\n overwriteParams: () => ({\n watchSlidesProgress: true,\n virtualTranslate: !swiper.params.cssMode\n })\n });\n}\n\nexport { EffectCreative as default };\n","import { c as createShadow } from '../shared/create-shadow.mjs';\nimport { e as effectInit } from '../shared/effect-init.mjs';\nimport { e as effectTarget } from '../shared/effect-target.mjs';\nimport { e as effectVirtualTransitionEnd } from '../shared/effect-virtual-transition-end.mjs';\nimport { g as getSlideTransformEl } from '../shared/utils.mjs';\n\nfunction EffectCards(_ref) {\n let {\n swiper,\n extendParams,\n on\n } = _ref;\n extendParams({\n cardsEffect: {\n slideShadows: true,\n rotate: true,\n perSlideRotate: 2,\n perSlideOffset: 8\n }\n });\n const setTranslate = () => {\n const {\n slides,\n activeIndex,\n rtlTranslate: rtl\n } = swiper;\n const params = swiper.params.cardsEffect;\n const {\n startTranslate,\n isTouched\n } = swiper.touchEventsData;\n const currentTranslate = rtl ? -swiper.translate : swiper.translate;\n for (let i = 0; i < slides.length; i += 1) {\n const slideEl = slides[i];\n const slideProgress = slideEl.progress;\n const progress = Math.min(Math.max(slideProgress, -4), 4);\n let offset = slideEl.swiperSlideOffset;\n if (swiper.params.centeredSlides && !swiper.params.cssMode) {\n swiper.wrapperEl.style.transform = `translateX(${swiper.minTranslate()}px)`;\n }\n if (swiper.params.centeredSlides && swiper.params.cssMode) {\n offset -= slides[0].swiperSlideOffset;\n }\n let tX = swiper.params.cssMode ? -offset - swiper.translate : -offset;\n let tY = 0;\n const tZ = -100 * Math.abs(progress);\n let scale = 1;\n let rotate = -params.perSlideRotate * progress;\n let tXAdd = params.perSlideOffset - Math.abs(progress) * 0.75;\n const slideIndex = swiper.virtual && swiper.params.virtual.enabled ? swiper.virtual.from + i : i;\n const isSwipeToNext = (slideIndex === activeIndex || slideIndex === activeIndex - 1) && progress > 0 && progress < 1 && (isTouched || swiper.params.cssMode) && currentTranslate < startTranslate;\n const isSwipeToPrev = (slideIndex === activeIndex || slideIndex === activeIndex + 1) && progress < 0 && progress > -1 && (isTouched || swiper.params.cssMode) && currentTranslate > startTranslate;\n if (isSwipeToNext || isSwipeToPrev) {\n const subProgress = (1 - Math.abs((Math.abs(progress) - 0.5) / 0.5)) ** 0.5;\n rotate += -28 * progress * subProgress;\n scale += -0.5 * subProgress;\n tXAdd += 96 * subProgress;\n tY = `${-25 * subProgress * Math.abs(progress)}%`;\n }\n if (progress < 0) {\n // next\n tX = `calc(${tX}px ${rtl ? '-' : '+'} (${tXAdd * Math.abs(progress)}%))`;\n } else if (progress > 0) {\n // prev\n tX = `calc(${tX}px ${rtl ? '-' : '+'} (-${tXAdd * Math.abs(progress)}%))`;\n } else {\n tX = `${tX}px`;\n }\n if (!swiper.isHorizontal()) {\n const prevY = tY;\n tY = tX;\n tX = prevY;\n }\n const scaleString = progress < 0 ? `${1 + (1 - scale) * progress}` : `${1 - (1 - scale) * progress}`;\n\n /* eslint-disable */\n const transform = `\n translate3d(${tX}, ${tY}, ${tZ}px)\n rotateZ(${params.rotate ? rtl ? -rotate : rotate : 0}deg)\n scale(${scaleString})\n `;\n /* eslint-enable */\n\n if (params.slideShadows) {\n // Set shadows\n let shadowEl = slideEl.querySelector('.swiper-slide-shadow');\n if (!shadowEl) {\n shadowEl = createShadow('cards', slideEl);\n }\n if (shadowEl) shadowEl.style.opacity = Math.min(Math.max((Math.abs(progress) - 0.5) / 0.5, 0), 1);\n }\n slideEl.style.zIndex = -Math.abs(Math.round(slideProgress)) + slides.length;\n const targetEl = effectTarget(params, slideEl);\n targetEl.style.transform = transform;\n }\n };\n const setTransition = duration => {\n const transformElements = swiper.slides.map(slideEl => getSlideTransformEl(slideEl));\n transformElements.forEach(el => {\n el.style.transitionDuration = `${duration}ms`;\n el.querySelectorAll('.swiper-slide-shadow').forEach(shadowEl => {\n shadowEl.style.transitionDuration = `${duration}ms`;\n });\n });\n effectVirtualTransitionEnd({\n swiper,\n duration,\n transformElements\n });\n };\n effectInit({\n effect: 'cards',\n swiper,\n on,\n setTranslate,\n setTransition,\n perspective: () => true,\n overwriteParams: () => ({\n _loopSwapReset: false,\n watchSlidesProgress: true,\n loopAdditionalSlides: swiper.params.cardsEffect.rotate ? 3 : 2,\n centeredSlides: true,\n virtualTranslate: !swiper.params.cssMode\n })\n });\n}\n\nexport { EffectCards as default };\n","/**\n * Swiper 11.2.7\n * Most modern mobile touch slider and framework with hardware accelerated transitions\n * https://swiperjs.com\n *\n * Copyright 2014-2025 Vladimir Kharlampidi\n *\n * Released under the MIT License\n *\n * Released on: May 19, 2025\n */\n\nexport { S as Swiper, S as default } from './shared/swiper-core.mjs';\n","import { a as getWindow, g as getDocument } from './ssr-window.esm.mjs';\nimport { b as elementParents, q as elementStyle, e as elementChildren, a as setCSSProperty, h as elementOuterSize, r as elementNextAll, t as elementPrevAll, k as getTranslate, u as animateCSSModeScroll, n as nextTick, v as showWarning, c as createElement, w as elementIsChildOf, f as now, x as extend, i as elementIndex, y as deleteProps } from './utils.mjs';\n\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}\n\nlet deviceCached;\nfunction calcDevice(_temp) {\n let {\n userAgent\n } = _temp === void 0 ? {} : _temp;\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 (overrides === void 0) {\n overrides = {};\n }\n if (!deviceCached) {\n deviceCached = calcDevice(overrides);\n }\n return deviceCached;\n}\n\nlet browser;\nfunction calcBrowser() {\n const window = getWindow();\n const device = getDevice();\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 const isWebView = /(iPhone|iPod|iPad).*AppleWebKit(?!.*Safari)/i.test(window.navigator.userAgent);\n const isSafariBrowser = isSafari();\n const need3dFix = isSafariBrowser || isWebView && device.ios;\n return {\n isSafari: needPerspectiveFix || isSafariBrowser,\n needPerspectiveFix,\n need3dFix,\n isWebView\n };\n}\nfunction getBrowser() {\n if (!browser) {\n browser = calcBrowser();\n }\n return browser;\n}\n\nfunction Resize(_ref) {\n let {\n swiper,\n on,\n emit\n } = _ref;\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(_ref2 => {\n let {\n contentBoxSize,\n contentRect,\n target\n } = _ref2;\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}\n\nfunction Observer(_ref) {\n let {\n swiper,\n extendParams,\n on,\n emit\n } = _ref;\n const observers = [];\n const window = getWindow();\n const attach = function (target, options) {\n if (options === void 0) {\n options = {};\n }\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: swiper.isElement || (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.hostEl);\n for (let i = 0; i < containerParents.length; i += 1) {\n attach(containerParents[i]);\n }\n }\n // Observe container\n attach(swiper.hostEl, {\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}\n\n/* eslint-disable no-underscore-dangle */\n\nvar eventsEmitter = {\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() {\n self.off(events, onceHandler);\n if (onceHandler.__emitterProxy) {\n delete onceHandler.__emitterProxy;\n }\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\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() {\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 for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n args[_key2] = arguments[_key2];\n }\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};\n\nfunction 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}\n\nfunction updateSlides() {\n const swiper = this;\n function getDirectionPropertyValue(node, label) {\n return parseFloat(node.getPropertyValue(swiper.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(slides);\n } else if (swiper.grid) {\n swiper.grid.unsetSlides();\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, slides);\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[swiper.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[swiper.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[swiper.getDirectionLabel('width')] = `${swiper.virtualSize + spaceBetween}px`;\n }\n if (gridEnabled) {\n swiper.grid.updateWrapperSize(slideSize, snapGrid);\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' : swiper.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 ? allSlidesSize - swiperSize : 0;\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 const offsetSize = (params.slidesOffsetBefore || 0) + (params.slidesOffsetAfter || 0);\n if (allSlidesSize + offsetSize < swiperSize) {\n const allSlidesOffset = (swiperSize - allSlidesSize - offsetSize) / 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 swiper.emit('slidesUpdated');\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}\n\nfunction 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}\n\nfunction 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}\n\nconst toggleSlideClasses$1 = (slideEl, condition, className) => {\n if (condition && !slideEl.classList.contains(className)) {\n slideEl.classList.add(className);\n } else if (!condition && slideEl.classList.contains(className)) {\n slideEl.classList.remove(className);\n }\n};\nfunction updateSlidesProgress(translate) {\n if (translate === void 0) {\n translate = this && this.translate || 0;\n }\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 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 isFullyVisible = slideBefore >= 0 && slideBefore <= swiper.size - 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 }\n toggleSlideClasses$1(slide, isVisible, params.slideVisibleClass);\n toggleSlideClasses$1(slide, isFullyVisible, params.slideFullyVisibleClass);\n slide.progress = rtl ? -slideProgress : slideProgress;\n slide.originalProgress = rtl ? -originalSlideProgress : originalSlideProgress;\n }\n}\n\nfunction 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}\n\nconst toggleSlideClasses = (slideEl, condition, className) => {\n if (condition && !slideEl.classList.contains(className)) {\n slideEl.classList.add(className);\n } else if (!condition && slideEl.classList.contains(className)) {\n slideEl.classList.remove(className);\n }\n};\nfunction 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 gridEnabled = swiper.grid && params.grid && params.grid.rows > 1;\n const getFilteredSlide = selector => {\n return elementChildren(slidesEl, `.${params.slideClass}${selector}, swiper-slide${selector}`)[0];\n };\n let activeSlide;\n let prevSlide;\n let nextSlide;\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 if (gridEnabled) {\n activeSlide = slides.find(slideEl => slideEl.column === activeIndex);\n nextSlide = slides.find(slideEl => slideEl.column === activeIndex + 1);\n prevSlide = slides.find(slideEl => slideEl.column === activeIndex - 1);\n } else {\n activeSlide = slides[activeIndex];\n }\n }\n if (activeSlide) {\n if (!gridEnabled) {\n // Next Slide\n nextSlide = elementNextAll(activeSlide, `.${params.slideClass}, swiper-slide`)[0];\n if (params.loop && !nextSlide) {\n nextSlide = slides[0];\n }\n\n // Prev Slide\n prevSlide = elementPrevAll(activeSlide, `.${params.slideClass}, swiper-slide`)[0];\n if (params.loop && !prevSlide === 0) {\n prevSlide = slides[slides.length - 1];\n }\n }\n }\n slides.forEach(slideEl => {\n toggleSlideClasses(slideEl, slideEl === activeSlide, params.slideActiveClass);\n toggleSlideClasses(slideEl, slideEl === nextSlide, params.slideNextClass);\n toggleSlideClasses(slideEl, slideEl === prevSlide, params.slidePrevClass);\n });\n swiper.emitSlidesClasses();\n}\n\nconst 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 let lazyEl = slideEl.querySelector(`.${swiper.params.lazyPreloaderClass}`);\n if (!lazyEl && swiper.isElement) {\n if (slideEl.shadowRoot) {\n lazyEl = slideEl.shadowRoot.querySelector(`.${swiper.params.lazyPreloaderClass}`);\n } else {\n // init later\n requestAnimationFrame(() => {\n if (slideEl.shadowRoot) {\n lazyEl = slideEl.shadowRoot.querySelector(`.${swiper.params.lazyPreloaderClass}`);\n if (lazyEl) lazyEl.remove();\n }\n });\n }\n }\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};\nconst 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};\n\nfunction 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}\nfunction 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 && !swiper.params.loop) {\n if (snapIndex !== previousSnapIndex) {\n swiper.snapIndex = snapIndex;\n swiper.emit('snapIndexChange');\n }\n return;\n }\n if (activeIndex === previousIndex && swiper.params.loop && swiper.virtual && swiper.params.virtual.enabled) {\n swiper.realIndex = getVirtualRealIndex(activeIndex);\n return;\n }\n const gridEnabled = swiper.grid && params.grid && params.grid.rows > 1;\n\n // Get real index\n let realIndex;\n if (swiper.virtual && params.virtual.enabled && params.loop) {\n realIndex = getVirtualRealIndex(activeIndex);\n } else if (gridEnabled) {\n const firstSlideInColumn = swiper.slides.find(slideEl => slideEl.column === activeIndex);\n let activeSlideIndex = parseInt(firstSlideInColumn.getAttribute('data-swiper-slide-index'), 10);\n if (Number.isNaN(activeSlideIndex)) {\n activeSlideIndex = Math.max(swiper.slides.indexOf(firstSlideInColumn), 0);\n }\n realIndex = Math.floor(activeSlideIndex / params.grid.rows);\n } else if (swiper.slides[activeIndex]) {\n const slideIndex = swiper.slides[activeIndex].getAttribute('data-swiper-slide-index');\n if (slideIndex) {\n realIndex = parseInt(slideIndex, 10);\n } else {\n realIndex = activeIndex;\n }\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 (swiper.initialized || swiper.params.runCallbacksOnInit) {\n if (previousRealIndex !== realIndex) {\n swiper.emit('realIndexChange');\n }\n swiper.emit('slideChange');\n }\n}\n\nfunction updateClickedSlide(el, path) {\n const swiper = this;\n const params = swiper.params;\n let slide = el.closest(`.${params.slideClass}, swiper-slide`);\n if (!slide && swiper.isElement && path && path.length > 1 && path.includes(el)) {\n [...path.slice(path.indexOf(el) + 1, path.length)].forEach(pathEl => {\n if (!slide && pathEl.matches && pathEl.matches(`.${params.slideClass}, swiper-slide`)) {\n slide = pathEl;\n }\n });\n }\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}\n\nvar update = {\n updateSize,\n updateSlides,\n updateAutoHeight,\n updateSlidesOffset,\n updateSlidesProgress,\n updateProgress,\n updateSlidesClasses,\n updateActiveIndex,\n updateClickedSlide\n};\n\nfunction getSwiperTranslate(axis) {\n if (axis === void 0) {\n axis = this.isHorizontal() ? 'x' : 'y';\n }\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}\n\nfunction 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}\n\nfunction minTranslate() {\n return -this.snapGrid[0];\n}\n\nfunction maxTranslate() {\n return -this.snapGrid[this.snapGrid.length - 1];\n}\n\nfunction translateTo(translate, speed, runCallbacks, translateBounds, internal) {\n if (translate === void 0) {\n translate = 0;\n }\n if (speed === void 0) {\n speed = this.params.speed;\n }\n if (runCallbacks === void 0) {\n runCallbacks = true;\n }\n if (translateBounds === void 0) {\n translateBounds = true;\n }\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 swiper.animating = false;\n if (runCallbacks) {\n swiper.emit('transitionEnd');\n }\n };\n }\n swiper.wrapperEl.addEventListener('transitionend', swiper.onTranslateToWrapperTransitionEnd);\n }\n }\n return true;\n}\n\nvar translate = {\n getTranslate: getSwiperTranslate,\n setTranslate,\n minTranslate,\n maxTranslate,\n translateTo\n};\n\nfunction setTransition(duration, byController) {\n const swiper = this;\n if (!swiper.params.cssMode) {\n swiper.wrapperEl.style.transitionDuration = `${duration}ms`;\n swiper.wrapperEl.style.transitionDelay = duration === 0 ? `0ms` : '';\n }\n swiper.emit('setTransition', duration, byController);\n}\n\nfunction transitionEmit(_ref) {\n let {\n swiper,\n runCallbacks,\n direction,\n step\n } = _ref;\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 && dir === 'reset') {\n swiper.emit(`slideResetTransition${step}`);\n } else if (runCallbacks && activeIndex !== previousIndex) {\n swiper.emit(`slideChangeTransition${step}`);\n if (dir === 'next') {\n swiper.emit(`slideNextTransition${step}`);\n } else {\n swiper.emit(`slidePrevTransition${step}`);\n }\n }\n}\n\nfunction transitionStart(runCallbacks, direction) {\n if (runCallbacks === void 0) {\n runCallbacks = true;\n }\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}\n\nfunction transitionEnd(runCallbacks, direction) {\n if (runCallbacks === void 0) {\n runCallbacks = true;\n }\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}\n\nvar transition = {\n setTransition,\n transitionStart,\n transitionEnd\n};\n\nfunction slideTo(index, speed, runCallbacks, internal, initial) {\n if (index === void 0) {\n index = 0;\n }\n if (runCallbacks === void 0) {\n runCallbacks = true;\n }\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 (!enabled && !internal && !initial || swiper.destroyed || swiper.animating && params.preventInteractionOnTransition) {\n return false;\n }\n if (typeof speed === 'undefined') {\n speed = swiper.params.speed;\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 // initial virtual\n const isVirtual = swiper.virtual && swiper.params.virtual.enabled;\n const isInitialVirtual = isVirtual && initial;\n // Update Index\n if (!isInitialVirtual && (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 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 const browser = getBrowser();\n const isSafari = browser.isSafari;\n if (isVirtual && !initial && isSafari && swiper.isElement) {\n swiper.virtual.update(false, false, slideIndex);\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}\n\nfunction slideToLoop(index, speed, runCallbacks, internal) {\n if (index === void 0) {\n index = 0;\n }\n if (runCallbacks === void 0) {\n runCallbacks = true;\n }\n if (typeof index === 'string') {\n const indexAsNumber = parseInt(index, 10);\n index = indexAsNumber;\n }\n const swiper = this;\n if (swiper.destroyed) return;\n if (typeof speed === 'undefined') {\n speed = swiper.params.speed;\n }\n const gridEnabled = swiper.grid && swiper.params.grid && swiper.params.grid.rows > 1;\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 let targetSlideIndex;\n if (gridEnabled) {\n const slideIndex = newIndex * swiper.params.grid.rows;\n targetSlideIndex = swiper.slides.find(slideEl => slideEl.getAttribute('data-swiper-slide-index') * 1 === slideIndex).column;\n } else {\n targetSlideIndex = swiper.getSlideIndexByData(newIndex);\n }\n const cols = gridEnabled ? Math.ceil(swiper.slides.length / swiper.params.grid.rows) : swiper.slides.length;\n const {\n centeredSlides\n } = swiper.params;\n let slidesPerView = swiper.params.slidesPerView;\n if (slidesPerView === 'auto') {\n slidesPerView = swiper.slidesPerViewDynamic();\n } else {\n slidesPerView = Math.ceil(parseFloat(swiper.params.slidesPerView, 10));\n if (centeredSlides && slidesPerView % 2 === 0) {\n slidesPerView = slidesPerView + 1;\n }\n }\n let needLoopFix = cols - targetSlideIndex < slidesPerView;\n if (centeredSlides) {\n needLoopFix = needLoopFix || targetSlideIndex < Math.ceil(slidesPerView / 2);\n }\n if (internal && centeredSlides && swiper.params.slidesPerView !== 'auto' && !gridEnabled) {\n needLoopFix = false;\n }\n if (needLoopFix) {\n const direction = centeredSlides ? targetSlideIndex < swiper.activeIndex ? 'prev' : 'next' : targetSlideIndex - swiper.activeIndex - 1 < swiper.params.slidesPerView ? 'next' : 'prev';\n swiper.loopFix({\n direction,\n slideTo: true,\n activeSlideIndex: direction === 'next' ? targetSlideIndex + 1 : targetSlideIndex - cols + 1,\n slideRealIndex: direction === 'next' ? swiper.realIndex : undefined\n });\n }\n if (gridEnabled) {\n const slideIndex = newIndex * swiper.params.grid.rows;\n newIndex = swiper.slides.find(slideEl => slideEl.getAttribute('data-swiper-slide-index') * 1 === slideIndex).column;\n } else {\n newIndex = swiper.getSlideIndexByData(newIndex);\n }\n }\n }\n requestAnimationFrame(() => {\n swiper.slideTo(newIndex, speed, runCallbacks, internal);\n });\n return swiper;\n}\n\n/* eslint no-unused-vars: \"off\" */\nfunction slideNext(speed, runCallbacks, internal) {\n if (runCallbacks === void 0) {\n runCallbacks = true;\n }\n const swiper = this;\n const {\n enabled,\n params,\n animating\n } = swiper;\n if (!enabled || swiper.destroyed) return swiper;\n if (typeof speed === 'undefined') {\n speed = swiper.params.speed;\n }\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 if (swiper.activeIndex === swiper.slides.length - 1 && params.cssMode) {\n requestAnimationFrame(() => {\n swiper.slideTo(swiper.activeIndex + increment, speed, runCallbacks, internal);\n });\n return true;\n }\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}\n\n/* eslint no-unused-vars: \"off\" */\nfunction slidePrev(speed, runCallbacks, internal) {\n if (runCallbacks === void 0) {\n runCallbacks = true;\n }\n const swiper = this;\n const {\n params,\n snapGrid,\n slidesGrid,\n rtlTranslate,\n enabled,\n animating\n } = swiper;\n if (!enabled || swiper.destroyed) return swiper;\n if (typeof speed === 'undefined') {\n speed = swiper.params.speed;\n }\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 const isFreeMode = params.freeMode && params.freeMode.enabled;\n let prevSnap = snapGrid[normalizedSnapGrid.indexOf(normalizedTranslate) - 1];\n if (typeof prevSnap === 'undefined' && (params.cssMode || isFreeMode)) {\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 = isFreeMode ? snapGrid[prevSnapIndex] : 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 } else if (params.loop && swiper.activeIndex === 0 && params.cssMode) {\n requestAnimationFrame(() => {\n swiper.slideTo(prevIndex, speed, runCallbacks, internal);\n });\n return true;\n }\n return swiper.slideTo(prevIndex, speed, runCallbacks, internal);\n}\n\n/* eslint no-unused-vars: \"off\" */\nfunction slideReset(speed, runCallbacks, internal) {\n if (runCallbacks === void 0) {\n runCallbacks = true;\n }\n const swiper = this;\n if (swiper.destroyed) return;\n if (typeof speed === 'undefined') {\n speed = swiper.params.speed;\n }\n return swiper.slideTo(swiper.activeIndex, speed, runCallbacks, internal);\n}\n\n/* eslint no-unused-vars: \"off\" */\nfunction slideToClosest(speed, runCallbacks, internal, threshold) {\n if (runCallbacks === void 0) {\n runCallbacks = true;\n }\n if (threshold === void 0) {\n threshold = 0.5;\n }\n const swiper = this;\n if (swiper.destroyed) return;\n if (typeof speed === 'undefined') {\n speed = swiper.params.speed;\n }\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}\n\nfunction slideToClickedSlide() {\n const swiper = this;\n if (swiper.destroyed) return;\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}\n\nvar slide = {\n slideTo,\n slideToLoop,\n slideNext,\n slidePrev,\n slideReset,\n slideToClosest,\n slideToClickedSlide\n};\n\nfunction loopCreate(slideRealIndex, initial) {\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 initSlides = () => {\n const slides = elementChildren(slidesEl, `.${params.slideClass}, swiper-slide`);\n slides.forEach((el, index) => {\n el.setAttribute('data-swiper-slide-index', index);\n });\n };\n const gridEnabled = swiper.grid && params.grid && params.grid.rows > 1;\n const slidesPerGroup = params.slidesPerGroup * (gridEnabled ? params.grid.rows : 1);\n const shouldFillGroup = swiper.slides.length % slidesPerGroup !== 0;\n const shouldFillGrid = gridEnabled && swiper.slides.length % params.grid.rows !== 0;\n const addBlankSlides = amountOfSlides => {\n for (let i = 0; i < amountOfSlides; i += 1) {\n const slideEl = swiper.isElement ? createElement('swiper-slide', [params.slideBlankClass]) : createElement('div', [params.slideClass, params.slideBlankClass]);\n swiper.slidesEl.append(slideEl);\n }\n };\n if (shouldFillGroup) {\n if (params.loopAddBlankSlides) {\n const slidesToAdd = slidesPerGroup - swiper.slides.length % slidesPerGroup;\n addBlankSlides(slidesToAdd);\n swiper.recalcSlides();\n swiper.updateSlides();\n } else {\n showWarning('Swiper Loop Warning: The number of slides is not even to slidesPerGroup, loop mode may not function properly. You need to add more slides (or make duplicates, or empty slides)');\n }\n initSlides();\n } else if (shouldFillGrid) {\n if (params.loopAddBlankSlides) {\n const slidesToAdd = params.grid.rows - swiper.slides.length % params.grid.rows;\n addBlankSlides(slidesToAdd);\n swiper.recalcSlides();\n swiper.updateSlides();\n } else {\n showWarning('Swiper Loop Warning: The number of slides is not even to grid.rows, loop mode may not function properly. You need to add more slides (or make duplicates, or empty slides)');\n }\n initSlides();\n } else {\n initSlides();\n }\n swiper.loopFix({\n slideRealIndex,\n direction: params.centeredSlides ? undefined : 'next',\n initial\n });\n}\n\nfunction loopFix(_temp) {\n let {\n slideRealIndex,\n slideTo = true,\n direction,\n setTranslate,\n activeSlideIndex,\n initial,\n byController,\n byMousewheel\n } = _temp === void 0 ? {} : _temp;\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 const {\n centeredSlides,\n initialSlide\n } = params;\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 let slidesPerView = params.slidesPerView;\n if (slidesPerView === 'auto') {\n slidesPerView = swiper.slidesPerViewDynamic();\n } else {\n slidesPerView = Math.ceil(parseFloat(params.slidesPerView, 10));\n if (centeredSlides && slidesPerView % 2 === 0) {\n slidesPerView = slidesPerView + 1;\n }\n }\n const slidesPerGroup = params.slidesPerGroupAuto ? slidesPerView : params.slidesPerGroup;\n let loopedSlides = slidesPerGroup;\n if (loopedSlides % slidesPerGroup !== 0) {\n loopedSlides += slidesPerGroup - loopedSlides % slidesPerGroup;\n }\n loopedSlides += params.loopAdditionalSlides;\n swiper.loopedSlides = loopedSlides;\n const gridEnabled = swiper.grid && params.grid && params.grid.rows > 1;\n if (slides.length < slidesPerView + loopedSlides || swiper.params.effect === 'cards' && slides.length < slidesPerView + loopedSlides * 2) {\n showWarning('Swiper Loop Warning: The number of slides is not enough for loop mode, it will be disabled or not function properly. You need to add more slides (or make duplicates) or lower the values of slidesPerView and slidesPerGroup parameters');\n } else if (gridEnabled && params.grid.fill === 'row') {\n showWarning('Swiper Loop Warning: Loop mode is not compatible with grid.fill = `row`');\n }\n const prependSlidesIndexes = [];\n const appendSlidesIndexes = [];\n const cols = gridEnabled ? Math.ceil(slides.length / params.grid.rows) : slides.length;\n const isInitialOverflow = initial && cols - initialSlide < slidesPerView && !centeredSlides;\n let activeIndex = isInitialOverflow ? initialSlide : swiper.activeIndex;\n if (typeof activeSlideIndex === 'undefined') {\n activeSlideIndex = swiper.getSlideIndex(slides.find(el => el.classList.contains(params.slideActiveClass)));\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 const activeColIndex = gridEnabled ? slides[activeSlideIndex].column : activeSlideIndex;\n const activeColIndexWithShift = activeColIndex + (centeredSlides && typeof setTranslate === 'undefined' ? -slidesPerView / 2 + 0.5 : 0);\n // prepend last slides before start\n if (activeColIndexWithShift < loopedSlides) {\n slidesPrepended = Math.max(loopedSlides - activeColIndexWithShift, slidesPerGroup);\n for (let i = 0; i < loopedSlides - activeColIndexWithShift; i += 1) {\n const index = i - Math.floor(i / cols) * cols;\n if (gridEnabled) {\n const colIndexToPrepend = cols - index - 1;\n for (let i = slides.length - 1; i >= 0; i -= 1) {\n if (slides[i].column === colIndexToPrepend) prependSlidesIndexes.push(i);\n }\n // slides.forEach((slide, slideIndex) => {\n // if (slide.column === colIndexToPrepend) prependSlidesIndexes.push(slideIndex);\n // });\n } else {\n prependSlidesIndexes.push(cols - index - 1);\n }\n }\n } else if (activeColIndexWithShift + slidesPerView > cols - loopedSlides) {\n slidesAppended = Math.max(activeColIndexWithShift - (cols - loopedSlides * 2), slidesPerGroup);\n if (isInitialOverflow) {\n slidesAppended = Math.max(slidesAppended, slidesPerView - cols + initialSlide + 1);\n }\n for (let i = 0; i < slidesAppended; i += 1) {\n const index = i - Math.floor(i / cols) * cols;\n if (gridEnabled) {\n slides.forEach((slide, slideIndex) => {\n if (slide.column === index) appendSlidesIndexes.push(slideIndex);\n });\n } else {\n appendSlidesIndexes.push(index);\n }\n }\n }\n swiper.__preventObserver__ = true;\n requestAnimationFrame(() => {\n swiper.__preventObserver__ = false;\n });\n if (swiper.params.effect === 'cards' && slides.length < slidesPerView + loopedSlides * 2) {\n if (appendSlidesIndexes.includes(activeSlideIndex)) {\n appendSlidesIndexes.splice(appendSlidesIndexes.indexOf(activeSlideIndex), 1);\n }\n if (prependSlidesIndexes.includes(activeSlideIndex)) {\n prependSlidesIndexes.splice(prependSlidesIndexes.indexOf(activeSlideIndex), 1);\n }\n }\n if (isPrev) {\n prependSlidesIndexes.forEach(index => {\n slides[index].swiperLoopMoveDOM = true;\n slidesEl.prepend(slides[index]);\n slides[index].swiperLoopMoveDOM = false;\n });\n }\n if (isNext) {\n appendSlidesIndexes.forEach(index => {\n slides[index].swiperLoopMoveDOM = true;\n slidesEl.append(slides[index]);\n slides[index].swiperLoopMoveDOM = false;\n });\n }\n swiper.recalcSlides();\n if (params.slidesPerView === 'auto') {\n swiper.updateSlides();\n } else if (gridEnabled && (prependSlidesIndexes.length > 0 && isPrev || appendSlidesIndexes.length > 0 && isNext)) {\n swiper.slides.forEach((slide, slideIndex) => {\n swiper.grid.updateSlide(slideIndex, slide, swiper.slides);\n });\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 + Math.ceil(slidesPrepended), 0, false, true);\n if (setTranslate) {\n swiper.touchEventsData.startTranslate = swiper.touchEventsData.startTranslate - diff;\n swiper.touchEventsData.currentTranslate = swiper.touchEventsData.currentTranslate - diff;\n }\n }\n } else {\n if (setTranslate) {\n const shift = gridEnabled ? prependSlidesIndexes.length / params.grid.rows : prependSlidesIndexes.length;\n swiper.slideTo(swiper.activeIndex + shift, 0, false, true);\n swiper.touchEventsData.currentTranslate = swiper.translate;\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.touchEventsData.startTranslate = swiper.touchEventsData.startTranslate - diff;\n swiper.touchEventsData.currentTranslate = swiper.touchEventsData.currentTranslate - diff;\n }\n }\n } else {\n const shift = gridEnabled ? appendSlidesIndexes.length / params.grid.rows : appendSlidesIndexes.length;\n swiper.slideTo(swiper.activeIndex - shift, 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 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({\n ...loopParams,\n slideTo: c.params.slidesPerView === params.slidesPerView ? slideTo : false\n });\n });\n } else if (swiper.controller.control instanceof swiper.constructor && swiper.controller.control.params.loop) {\n swiper.controller.control.loopFix({\n ...loopParams,\n slideTo: swiper.controller.control.params.slidesPerView === params.slidesPerView ? slideTo : false\n });\n }\n }\n swiper.emit('loopFix');\n}\n\nfunction loopDestroy() {\n const swiper = this;\n const {\n params,\n slidesEl\n } = swiper;\n if (!params.loop || !slidesEl || 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}\n\nvar loop = {\n loopCreate,\n loopFix,\n loopDestroy\n};\n\nfunction 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}\n\nfunction 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}\n\nvar grabCursor = {\n setGrabCursor,\n unsetGrabCursor\n};\n\n// Modified from https://stackoverflow.com/questions/54520554/custom-element-getrootnode-closest-function-crossing-multiple-parent-shadowd\nfunction closestElement(selector, base) {\n if (base === void 0) {\n base = this;\n }\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}\nfunction preventEdgeSwipe(swiper, event, startX) {\n const window = getWindow();\n const {\n params\n } = swiper;\n const edgeSwipeDetection = params.edgeSwipeDetection;\n const edgeSwipeThreshold = params.edgeSwipeThreshold;\n if (edgeSwipeDetection && (startX <= edgeSwipeThreshold || startX >= window.innerWidth - edgeSwipeThreshold)) {\n if (edgeSwipeDetection === 'prevent') {\n event.preventDefault();\n return true;\n }\n return false;\n }\n return true;\n}\nfunction onTouchStart(event) {\n const swiper = this;\n const document = getDocument();\n let e = event;\n if (e.originalEvent) e = e.originalEvent;\n const data = swiper.touchEventsData;\n if (e.type === 'pointerdown') {\n if (data.pointerId !== null && data.pointerId !== e.pointerId) {\n return;\n }\n data.pointerId = e.pointerId;\n } else if (e.type === 'touchstart' && e.targetTouches.length === 1) {\n data.touchId = e.targetTouches[0].identifier;\n }\n if (e.type === 'touchstart') {\n // don't proceed touch event\n preventEdgeSwipe(swiper, e, e.targetTouches[0].pageX);\n return;\n }\n const {\n params,\n touches,\n enabled\n } = swiper;\n if (!enabled) return;\n if (!params.simulateTouch && e.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 targetEl = e.target;\n if (params.touchEventsTarget === 'wrapper') {\n if (!elementIsChildOf(targetEl, swiper.wrapperEl)) 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 = e.composedPath ? e.composedPath() : e.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 if (!preventEdgeSwipe(swiper, e, startX)) {\n return;\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 && (e.pointerType === 'mouse' || e.pointerType !== 'mouse' && !targetEl.matches(data.focusableElements))) {\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}\n\nfunction 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 (e.type === 'pointermove') {\n if (data.touchId !== null) return; // return from pointer if we use touch\n const id = e.pointerId;\n if (id !== data.pointerId) return;\n }\n let targetTouch;\n if (e.type === 'touchmove') {\n targetTouch = [...e.changedTouches].find(t => t.identifier === data.touchId);\n if (!targetTouch || targetTouch.identifier !== data.touchId) return;\n } else {\n targetTouch = e;\n }\n if (!data.isTouched) {\n if (data.startMoving && data.isScrolling) {\n swiper.emit('touchMoveOpposite', e);\n }\n return;\n }\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 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 (rtl && (pageX > touches.startX && -swiper.translate <= swiper.maxTranslate() || pageX < touches.startX && -swiper.translate >= swiper.minTranslate())) {\n return;\n } else if (!rtl && (pageX < touches.startX && swiper.translate <= swiper.maxTranslate() || pageX > touches.startX && swiper.translate >= swiper.minTranslate())) {\n return;\n }\n }\n if (document.activeElement && document.activeElement.matches(data.focusableElements) && document.activeElement !== e.target && e.pointerType !== 'mouse') {\n document.activeElement.blur();\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 touches.previousX = touches.currentX;\n touches.previousY = touches.currentY;\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 || e.type === 'touchmove' && data.preventTouchMoveFromPointerMove) {\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 const allowLoopFix = swiper.touchesDirection === 'next' && swiper.allowSlideNext || swiper.touchesDirection === 'prev' && swiper.allowSlidePrev;\n if (!data.isMoved) {\n if (isLoop && allowLoopFix) {\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 detail: {\n bySwiperTouchMove: true\n }\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 new Date().getTime();\n if (params._loopSwapReset !== false && data.isMoved && data.allowThresholdMove && prevTouchesDirection !== swiper.touchesDirection && isLoop && allowLoopFix && Math.abs(diff) >= 1) {\n Object.assign(touches, {\n startX: pageX,\n startY: pageY,\n currentX: pageX,\n currentY: pageY,\n startTranslate: data.currentTranslate\n });\n data.loopSwapReset = true;\n data.startTranslate = data.currentTranslate;\n return;\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 && allowLoopFix && !loopFixed && data.allowThresholdMove && data.currentTranslate > (params.centeredSlides ? swiper.minTranslate() - swiper.slidesSizesGrid[swiper.activeIndex + 1] - (params.slidesPerView !== 'auto' && swiper.slides.length - params.slidesPerView >= 2 ? swiper.slidesSizesGrid[swiper.activeIndex + 1] + swiper.params.spaceBetween : 0) - swiper.params.spaceBetween : 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 && allowLoopFix && !loopFixed && data.allowThresholdMove && data.currentTranslate < (params.centeredSlides ? swiper.maxTranslate() + swiper.slidesSizesGrid[swiper.slidesSizesGrid.length - 1] + swiper.params.spaceBetween + (params.slidesPerView !== 'auto' && swiper.slides.length - params.slidesPerView >= 2 ? swiper.slidesSizesGrid[swiper.slidesSizesGrid.length - 1] + swiper.params.spaceBetween : 0) : 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}\n\nfunction onTouchEnd(event) {\n const swiper = this;\n const data = swiper.touchEventsData;\n let e = event;\n if (e.originalEvent) e = e.originalEvent;\n let targetTouch;\n const isTouchEvent = e.type === 'touchend' || e.type === 'touchcancel';\n if (!isTouchEvent) {\n if (data.touchId !== null) return; // return from pointer if we use touch\n if (e.pointerId !== data.pointerId) return;\n targetTouch = e;\n } else {\n targetTouch = [...e.changedTouches].find(t => t.identifier === data.touchId);\n if (!targetTouch || targetTouch.identifier !== data.touchId) return;\n }\n if (['pointercancel', 'pointerout', 'pointerleave', 'contextmenu'].includes(e.type)) {\n const proceed = ['pointercancel', 'contextmenu'].includes(e.type) && (swiper.browser.isSafari || swiper.browser.isWebView);\n if (!proceed) {\n return;\n }\n }\n data.pointerId = null;\n data.touchId = null;\n const {\n params,\n touches,\n rtlTranslate: rtl,\n slidesGrid,\n enabled\n } = swiper;\n if (!enabled) return;\n if (!params.simulateTouch && e.pointerType === 'mouse') return;\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\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, pathTree);\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.loopSwapReset || data.currentTranslate === data.startTranslate && !data.loopSwapReset) {\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 const swipeToLast = currentPos >= -swiper.maxTranslate() && !swiper.params.loop;\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 (swipeToLast || currentPos >= slidesGrid[i] && currentPos < slidesGrid[i + increment]) {\n stopIndex = i;\n groupSize = slidesGrid[i + increment] - slidesGrid[i];\n }\n } else if (swipeToLast || 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}\n\nfunction 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}\n\nfunction 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}\n\nfunction 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}\n\nfunction 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}\n\nfunction onDocumentTouchStart() {\n const swiper = this;\n if (swiper.documentTouchHandlerProceeded) return;\n swiper.documentTouchHandlerProceeded = true;\n if (swiper.params.touchReleaseOnEdges) {\n swiper.el.style.touchAction = 'auto';\n }\n}\n\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 if (!el || typeof el === 'string') return;\n\n // Touch Events\n document[domMethod]('touchstart', swiper.onDocumentTouchStart, {\n passive: false,\n capture\n });\n el[domMethod]('touchstart', swiper.onTouchStart, {\n passive: false\n });\n el[domMethod]('pointerdown', swiper.onTouchStart, {\n passive: false\n });\n document[domMethod]('touchmove', swiper.onTouchMove, {\n passive: false,\n capture\n });\n document[domMethod]('pointermove', swiper.onTouchMove, {\n passive: false,\n capture\n });\n document[domMethod]('touchend', swiper.onTouchEnd, {\n passive: true\n });\n document[domMethod]('pointerup', swiper.onTouchEnd, {\n passive: true\n });\n document[domMethod]('pointercancel', swiper.onTouchEnd, {\n passive: true\n });\n document[domMethod]('touchcancel', 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 document[domMethod]('contextmenu', 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 {\n params\n } = swiper;\n swiper.onTouchStart = onTouchStart.bind(swiper);\n swiper.onTouchMove = onTouchMove.bind(swiper);\n swiper.onTouchEnd = onTouchEnd.bind(swiper);\n swiper.onDocumentTouchStart = onDocumentTouchStart.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 events(swiper, 'on');\n}\nfunction detachEvents() {\n const swiper = this;\n events(swiper, 'off');\n}\nvar events$1 = {\n attachEvents,\n detachEvents\n};\n\nconst isGridEnabled = (swiper, params) => {\n return swiper.grid && params.grid && params.grid.rows > 1;\n};\nfunction 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 const document = getDocument();\n\n // Get breakpoint for window/container width and update parameters\n const breakpointsBase = params.breakpointsBase === 'window' || !params.breakpointsBase ? params.breakpointsBase : 'container';\n const breakpointContainer = ['window', 'container'].includes(params.breakpointsBase) || !params.breakpointsBase ? swiper.el : document.querySelector(params.breakpointsBase);\n const breakpoint = swiper.getBreakpoint(breakpoints, breakpointsBase, breakpointContainer);\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 wasGrabCursor = swiper.params.grabCursor;\n const isGrabCursor = breakpointParams.grabCursor;\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 if (wasGrabCursor && !isGrabCursor) {\n swiper.unsetGrabCursor();\n } else if (!wasGrabCursor && isGrabCursor) {\n swiper.setGrabCursor();\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 const wasLoop = params.loop;\n if (directionChanged && initialized) {\n swiper.changeDirection();\n }\n extend(swiper.params, breakpointParams);\n const isEnabled = swiper.params.enabled;\n const hasLoop = swiper.params.loop;\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 (initialized) {\n if (needsReLoop) {\n swiper.loopDestroy();\n swiper.loopCreate(realIndex);\n swiper.updateSlides();\n } else if (!wasLoop && hasLoop) {\n swiper.loopCreate(realIndex);\n swiper.updateSlides();\n } else if (wasLoop && !hasLoop) {\n swiper.loopDestroy();\n }\n }\n swiper.emit('breakpoint', breakpointParams);\n}\n\nfunction getBreakpoint(breakpoints, base, containerEl) {\n if (base === void 0) {\n base = 'window';\n }\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}\n\nvar breakpoints = {\n setBreakpoint,\n getBreakpoint\n};\n\nfunction 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}\nfunction 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}\n\nfunction removeClasses() {\n const swiper = this;\n const {\n el,\n classNames\n } = swiper;\n if (!el || typeof el === 'string') return;\n el.classList.remove(...classNames);\n swiper.emitContainerClasses();\n}\n\nvar classes = {\n addClasses,\n removeClasses\n};\n\nfunction 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}\nvar checkOverflow$1 = {\n checkOverflow\n};\n\nvar defaults = {\n init: true,\n direction: 'horizontal',\n oneWayMovement: false,\n swiperElementNodeName: 'SWIPER-CONTAINER',\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 eventsPrefix: 'swiper',\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 loopAddBlankSlides: true,\n loopAdditionalSlides: 0,\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 slideBlankClass: 'swiper-slide-blank',\n slideActiveClass: 'swiper-slide-active',\n slideVisibleClass: 'swiper-slide-visible',\n slideFullyVisibleClass: 'swiper-slide-fully-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};\n\nfunction moduleExtendParams(params, allModulesParams) {\n return function extendParams(obj) {\n if (obj === void 0) {\n obj = {};\n }\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 (params[moduleParamName] === true) {\n params[moduleParamName] = {\n enabled: true\n };\n }\n if (moduleParamName === 'navigation' && params[moduleParamName] && params[moduleParamName].enabled && !params[moduleParamName].prevEl && !params[moduleParamName].nextEl) {\n params[moduleParamName].auto = true;\n }\n if (['pagination', 'scrollbar'].indexOf(moduleParamName) >= 0 && params[moduleParamName] && params[moduleParamName].enabled && !params[moduleParamName].el) {\n params[moduleParamName].auto = true;\n }\n if (!(moduleParamName in params && 'enabled' in moduleParams)) {\n extend(allModulesParams, obj);\n return;\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}\n\n/* eslint no-param-reassign: \"off\" */\nconst prototypes = {\n eventsEmitter,\n update,\n translate,\n transition,\n slide,\n loop,\n grabCursor,\n events: events$1,\n breakpoints,\n checkOverflow: checkOverflow$1,\n classes\n};\nconst extendedDefaults = {};\nclass Swiper {\n constructor() {\n let el;\n let params;\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\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 pointerId: null,\n touchId: null\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 getDirectionLabel(property) {\n if (this.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 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.find(slideEl => slideEl.getAttribute('data-swiper-slide-index') * 1 === index));\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, exact) {\n if (view === void 0) {\n view = 'current';\n }\n if (exact === void 0) {\n exact = false;\n }\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 (typeof params.slidesPerView === 'number') return params.slidesPerView;\n if (params.centeredSlides) {\n let slideSize = slides[activeIndex] ? Math.ceil(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 += Math.ceil(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) {\n if (needUpdate === void 0) {\n needUpdate = true;\n }\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.parentNode && el.parentNode.host && el.parentNode.host.nodeName === swiper.params.swiperElementNodeName.toUpperCase()) {\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.parentNode.host.slideSlots ? el.parentNode.host : wrapperEl,\n hostEl: swiper.isElement ? el.parentNode.host : el,\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(undefined, true);\n }\n\n // Attach events\n swiper.attachEvents();\n const lazyElements = [...swiper.el.querySelectorAll('[loading=\"lazy\"]')];\n if (swiper.isElement) {\n lazyElements.push(...swiper.hostEl.querySelectorAll('[loading=\"lazy\"]'));\n }\n lazyElements.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, cleanStyles) {\n if (deleteInstance === void 0) {\n deleteInstance = true;\n }\n if (cleanStyles === void 0) {\n cleanStyles = true;\n }\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 if (el && typeof el !== 'string') {\n el.removeAttribute('style');\n }\n if (wrapperEl) {\n wrapperEl.removeAttribute('style');\n }\n if (slides && slides.length) {\n slides.forEach(slideEl => {\n slideEl.classList.remove(params.slideVisibleClass, params.slideFullyVisibleClass, 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 if (swiper.el && typeof swiper.el !== 'string') {\n swiper.el.swiper = null;\n }\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]);\n\nexport { Swiper as S, defaults as d };\n","import { Controller } from \"@hotwired/stimulus\";\n\nexport default class Menu extends Controller {\n static targets = [\"top\", \"bottom\"]\n connect() {}\n\n toggle() {\n if (this.element.ariaExpanded === \"true\") {\n this.element.setAttribute(\"aria-expanded\", \"false\")\n }\n else {\n this.element.setAttribute(\"aria-expanded\", \"true\")\n }\n }\n}\n","import { Controller } from \"@hotwired/stimulus\";\n\nexport default class extends Controller {\n static targets = [\"accordion\", \"form\"]\n\n declare readonly accordionTarget: HTMLDivElement\n declare readonly formTarget: HTMLFormElement\n\n formTargetConnected(): void {\n // We call it here instead of in initialize or connect so that\n // the events are attached after each turbo-frame load.\n for (const element of this.element.querySelectorAll(\"td\")) {\n element.addEventListener(\"click\", this.#setDate.bind(this))\n }\n }\n\n #setDate(event) {\n this.formTarget.querySelector(\"input[name=date]\").value = event.target.dataset.value\n this.formTarget.requestSubmit()\n }\n\n setQuantity(event) {\n this.formTarget.querySelector(\"input[name=quantity]\").value = event.target.dataset.value\n this.formTarget.requestSubmit()\n }\n\n setFormula(event) {\n this.formTarget.querySelector(\"input[name=formula]\").value = event.target.dataset.value\n this.formTarget.requestSubmit()\n }\n\n show() {\n this.element.ariaExpanded = true\n }\n}\n"],"names":["$6946bfb4689eabba$var$support","$6946bfb4689eabba$var$deviceCached","$6946bfb4689eabba$var$browser","$8b78d3c676514ebb$export$2e2bcd8739ae039","selector","constructor","node","mollie","Mollie","locale","testmode","options","form","document","getElementById","formError","submitButton","cardHolder","createComponent","mount","cardHolderError","addEventListener","event","error","touched","textContent","cardNumber","cardNumberError","expiryDate","expiryDateError","verificationCode","verificationCodeError","console","log","preventDefault","disabled","createToken","then","result","token","message","tokenInput","createElement","setAttribute","appendChild","submit","$1e1b4d625d583414$var$EventListener","eventTarget","eventName","eventOptions","unorderedBindings","Set","connect","disconnect","removeEventListener","bindingConnected","binding","add","bindingDisconnected","delete","handleEvent","extendedEvent","$1e1b4d625d583414$var$extendEvent","stopImmediatePropagation","Object","assign","immediatePropagationStopped","call","bindings","hasBindings","size","Array","from","sort","left","right","leftIndex","index","rightIndex","$1e1b4d625d583414$var$Dispatcher","application","eventListenerMaps","Map","started","start","eventListeners","forEach","eventListener","stop","values","reduce","listeners","map","concat","fetchEventListenerForBinding","clearEventListeners","clearEventListenersForBinding","handleError","detail","removeMappedEventListenerFor","eventListenerMap","fetchEventListenerMapForEventTarget","cacheKey","fetchEventListener","get","createEventListener","set","parts","keys","key","push","join","$1e1b4d625d583414$var$defaultActionDescriptorFilters","value","stopPropagation","prevent","self","element","target","$1e1b4d625d583414$var$descriptorPattern","$1e1b4d625d583414$var$camelize","replace","_","char","toUpperCase","$1e1b4d625d583414$var$namespaceCamelize","$1e1b4d625d583414$var$capitalize","charAt","slice","$1e1b4d625d583414$var$dasherize","toLowerCase","$1e1b4d625d583414$var$hasProperty","object","property","prototype","hasOwnProperty","$1e1b4d625d583414$var$allModifiers","$1e1b4d625d583414$var$Action","descriptor","schema","$1e1b4d625d583414$var$getDefaultEventNameForElement","tagName","$1e1b4d625d583414$var$defaultEventNames","$1e1b4d625d583414$var$error","identifier","methodName","keyFilter","forToken","$1e1b4d625d583414$var$parseActionDescriptorString","descriptorString","eventTargetName","matches","source","trim","match","includes","window","split","test","content","toString","eventFilter","shouldIgnoreKeyboardEvent","filters","keyFilterDissatisfied","standardFilter","filter","keyMappings","shouldIgnoreMouseEvent","params","pattern","RegExp","name","attributes","$1e1b4d625d583414$var$typecast","JSON","parse","o_O","meta","ctrl","alt","shift","modifier","metaKey","ctrlKey","altKey","shiftKey","a","button","details","input","e","getAttribute","select","textarea","Error","$1e1b4d625d583414$var$Binding","context","action","actionEvent","prepareActionEvent","willBeInvokedByEvent","applyEventModifiers","invokeWithEvent","method","controller","actionDescriptorFilters","passes","entries","currentTarget","logDebugActivity","KeyboardEvent","MouseEvent","Element","contains","scope","containsElement","$1e1b4d625d583414$export$12e07a2a9f87578a","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","elementAttributeChanged","matchElement","nodes","elementFromNode","processTree","elementIsActive","tree","processor","nodeType","Node","ELEMENT_NODE","isConnected","elementMatched","elementUnmatched","$1e1b4d625d583414$export$fe68319d413d05cb","elementObserver","hasAttribute","querySelectorAll","elementMatchedAttribute","elementUnmatchedAttribute","elementAttributeValueChanged","$1e1b4d625d583414$export$e7aa7bc5c1b3cfb3","$1e1b4d625d583414$export$8bd4ad37b76db6ba","valuesByKey","sets","$1e1b4d625d583414$export$d6cf75919f12ca5a","hasKey","hasValue","some","getValuesForKey","getKeysForValue","_key","_values","$1e1b4d625d583414$export$116e0b48509995b","_selector","matchesByElement","selectorMatchElement","selectorMatched","selectorUnmatched","_attributeName","matchedBefore","$1e1b4d625d583414$export$da226bebbf7f6caa","stringMap","attributeOldValue","knownAttributeNames","refreshAttribute","oldValue","getStringMapKeyForAttribute","stringMapKeyAdded","stringMapValueChanged","stringMapKeyRemoved","currentAttributeNames","recordedAttributeNames","attribute","$1e1b4d625d583414$export$3aa21c2f03ef6b3b","attributeObserver","tokensByElement","tokensMatched","readTokensForElement","unmatchedTokens","matchedTokens","refreshTokensForElement","tokensUnmatched","tokens","tokenMatched","tokenUnmatched","previousTokens","currentTokens","firstDifferingIndex","$1e1b4d625d583414$var$zip","length","Math","max","findIndex","previousToken","currentToken","tokenString","$1e1b4d625d583414$export$d27fa4c7330a452e","tokenListObserver","parseResultsByToken","WeakMap","valuesByTokenByElement","fetchParseResultForToken","fetchValuesByTokenForElement","elementMatchedValue","elementUnmatchedValue","parseResult","parseToken","valuesByToken","parseValueForToken","$1e1b4d625d583414$var$BindingObserver","bindingsByAction","valueListObserver","actionAttribute","disconnectAllActions","connectAction","disconnectAction","clear","$1e1b4d625d583414$var$ValueObserver","receiver","stringMapObserver","valueDescriptorMap","invokeChangedCallbacksForDefaultValues","invokeChangedCallback","writer","defaultValue","valueDescriptorNameMap","valueDescriptors","undefined","data","rawValue","rawOldValue","changedMethodName","changedMethod","reader","TypeError","descriptors","hasMethodName","$1e1b4d625d583414$var$TargetObserver","targetsByName","disconnectAllTargets","connectTarget","disconnectTarget","_a","targetConnected","targetDisconnected","$1e1b4d625d583414$var$readInheritableStaticArrayValues","propertyName","ancestors","$1e1b4d625d583414$var$getAncestorsForConstructor","$1e1b4d625d583414$var$getOwnStaticArrayValues","definition","isArray","getPrototypeOf","reverse","$1e1b4d625d583414$var$OutletObserver","outletsByName","outletElementsByName","selectorObserverMap","attributeObserverMap","outletDefinitions","outletName","setupSelectorObserverForOutlet","setupAttributeObserverForOutlet","dependentContexts","observer","disconnectAllOutlets","stopSelectorObservers","stopAttributeObservers","outlet","getOutlet","connectOutlet","getOutletFromMap","disconnectOutlet","hasOutlet","hasOutletController","controllerAttribute","_element","getOutletNameFromOutletAttributeName","updateSelectorObserverForOutlet","outletConnected","outletDisconnected","selectorObserver","body","attributeNameForOutletName","outlets","getSelectorForOutletName","outletAttributeForScope","find","outletDependencies","dependencies","router","modules","module","controllerConstructor","dependentControllerIdentifiers","identifiers","contexts","getControllerForElementAndIdentifier","$1e1b4d625d583414$export$841858b892ce1f4c","functionName","bindingObserver","dispatcher","valueObserver","targetObserver","outletObserver","initialize","parentElement","invokeControllerMethod","args","$1e1b4d625d583414$var$getOwnKeys","getOwnPropertySymbols","getOwnPropertyNames","$1e1b4d625d583414$var$extend","extendWithReflect","extended","Reflect","construct","arguments","create","setPrototypeOf","testReflectExtension","b","$1e1b4d625d583414$var$Module","$1e1b4d625d583414$var$blessDefinition","$1e1b4d625d583414$var$shadow","properties","shadowConstructor","shadowProperties","$1e1b4d625d583414$var$getShadowedDescriptor","shadowingDescriptor","getOwnPropertyDescriptor","defineProperties","blessings","blessedProperties","blessing","contextsByScope","connectedContexts","connectContextForScope","fetchContextForScope","disconnectContextForScope","$1e1b4d625d583414$var$ClassMap","getDataKey","getAll","getAttributeName","getAttributeNameForKey","$1e1b4d625d583414$var$DataMap","removeAttribute","$1e1b4d625d583414$var$Guide","logger","warnedKeysByObject","warn","warnedKeys","$1e1b4d625d583414$var$attributeValueContainsToken","$1e1b4d625d583414$var$TargetSet","targetName","targetNames","findTarget","findLegacyTarget","findAll","targets","findAllTargets","findAllLegacyTargets","getSelectorForTargetName","findElement","findAllElements","targetAttributeForScope","getLegacySelectorForTargetName","deprecate","targetDescriptor","targetAttribute","revisedAttributeName","guide","$1e1b4d625d583414$var$OutletSet","controllerElement","outletNames","findOutlet","findAllOutlets","queryElements","matchesElement","$1e1b4d625d583414$var$Scope","classes","closest","controllerSelector","documentScope","isDocumentScope","documentElement","$1e1b4d625d583414$var$ScopeObserver","scopesByIdentifierByElement","scopeReferenceCounts","parseValueForElementAndIdentifier","scopesByIdentifier","fetchScopesByIdentifierForElement","createScopeForElementAndIdentifier","referenceCount","scopeConnected","scopeDisconnected","$1e1b4d625d583414$var$Router","scopeObserver","modulesByIdentifier","loadDefinition","unloadIdentifier","connectModule","afterLoad","disconnectModule","getContextForElementAndIdentifier","proposeToConnectScopeForElementAndIdentifier","scopes","$1e1b4d625d583414$export$1db618b7b2275ea1","enter","tab","esc","space","up","down","home","end","page_up","page_down","$1e1b4d625d583414$var$objectFromEntries","c","n","array","memo","k","v","$1e1b4d625d583414$var$getOutletController","$1e1b4d625d583414$var$getControllerAndEnsureConnectedScope","outletController","$1e1b4d625d583414$var$parseValueDefinitionPair","typeDefinition","$1e1b4d625d583414$var$valueDescriptorForTokenAndTypeDefinition","payload","$1e1b4d625d583414$var$parseValueTypeDefinition","typeFromObject","$1e1b4d625d583414$var$parseValueTypeObject","typeObject","hasType","hasDefault","default","$1e1b4d625d583414$var$parseValueTypeConstant","typeFromDefaultValue","$1e1b4d625d583414$var$parseValueTypeDefault","propertyPath","typeFromConstant","$1e1b4d625d583414$var$defaultValueForDefinition","constant","$1e1b4d625d583414$var$defaultValuesByType","constantFromType","hasCustomDefaultValue","$1e1b4d625d583414$var$readers","$1e1b4d625d583414$var$writers","Boolean","Number","String","boolean","number","string","$1e1b4d625d583414$var$writeJSON","stringify","$1e1b4d625d583414$export$bd0bf19f25da8474","shouldLoad","_identifier","_application","dispatch","prefix","bubbles","cancelable","CustomEvent","dispatchEvent","$768c2f4c151a0363$var$isObject","obj","$768c2f4c151a0363$var$extend","src","noExtend","indexOf","classDefinition","targetDefinition","valueDefinitionPairs","pairs","$1e1b4d625d583414$var$getOwnStaticObjectPairs","valueDefinitionPair","$1e1b4d625d583414$var$propertiesForValueDefinitionPair","read","write","valueDescriptor","outletDefinition","$1e1b4d625d583414$var$propertiesForOutletDefinition","camelizedName","outletElement","$768c2f4c151a0363$var$ssrDocument","activeElement","blur","nodeName","querySelector","createEvent","initEvent","children","childNodes","style","getElementsByTagName","createElementNS","importNode","location","hash","host","hostname","href","origin","pathname","protocol","search","$768c2f4c151a0363$export$39b482c5e57630a8","doc","$768c2f4c151a0363$var$ssrWindow","navigator","userAgent","history","replaceState","pushState","go","back","getComputedStyle","getPropertyValue","Image","Date","screen","setTimeout","clearTimeout","matchMedia","requestAnimationFrame","cancelAnimationFrame","id","$768c2f4c151a0363$export$407448d2b89b1813","win","$3e0e2b092da8f124$export$7ccc53e8f1e7dfc5","delay","$3e0e2b092da8f124$export$2d1720544b23b823","now","$3e0e2b092da8f124$export$ae1af26003f05816","o","$3e0e2b092da8f124$export$d141bba7fdc215a3","to","i","nextSource","HTMLElement","keysArray","nextIndex","len","nextKey","desc","enumerable","__swiper__","$3e0e2b092da8f124$export$407448d2b89b1813","el","varName","varValue","setProperty","$3e0e2b092da8f124$export$3b14a55fb2447963","_ref","time","swiper","targetPosition","side","window1","startPosition","translate","startTime","duration","speed","wrapperEl","scrollSnapType","cssModeFrameID","dir","isOutOfBound","current","animate","getTime","currentPosition","easeProgress","cos","progress","min","PI","scrollTo","overflow","$3e0e2b092da8f124$export$39b482c5e57630a8","slideEl","shadowRoot","$3e0e2b092da8f124$export$f1e1789686576879","HTMLSlotElement","assignedElements","$3e0e2b092da8f124$export$90a7f3efeed30595","text","err","$3e0e2b092da8f124$export$db3b6bfb95261072","tag","classList","$3e0e2b092da8f124$export$9e5f44173e64f162","prop","$3e0e2b092da8f124$export$23f2a1d2818174ef","child","previousSibling","$3e0e2b092da8f124$export$dda1d9f60106f0e9","includeMargins","parseFloat","offsetWidth","$3e0e2b092da8f124$export$953cecd6e717a553","$3e0e2b092da8f124$export$2408f22a0fab9ae5","html","trustedTypes","innerHTML","createPolicy","createHTML","s","$ad56a2ca63fb5863$export$2e2bcd8739ae039","extendParams","on","emit","getEl","res","isElement","hostEl","uniqueNavElements","toggleEl","navigation","subEl","disabledClass","watchOverflow","enabled","isLocked","lockClass","update","nextEl","prevEl","loop","isBeginning","rewind","isEnd","onPrevClick","slidePrev","onNextClick","slideNext","init","originalParams","checkProps","createElements","auto","className","append","initButton","destroy","destroyButton","remove","hideOnClick","hiddenClass","navigationDisabledClass","disable","_s","targetEl","targetIsButton","path","composedPath","pathEl","isHidden","pagination","clickable","toggle","enable","$6946bfb4689eabba$var$getSupport","$6946bfb4689eabba$var$calcSupport","document1","smoothScroll","touch","DocumentTouch","$6946bfb4689eabba$var$getDevice","overrides","$6946bfb4689eabba$var$calcDevice","_temp","support","platform","ua","device","ios","android","screenWidth","width","screenHeight","height","ipad","ipod","iphone","macos","iPadScreens","os","$6946bfb4689eabba$var$getBrowser","$6946bfb4689eabba$var$calcBrowser","needPerspectiveFix","isSafari","major","minor","num","isWebView","isSafariBrowser","need3dFix","$6946bfb4689eabba$var$toggleSlideClasses$1","condition","$6946bfb4689eabba$var$toggleSlideClasses","$6946bfb4689eabba$var$processLazyPreloader","imageEl","destroyed","slideClass","lazyEl","lazyPreloaderClass","$6946bfb4689eabba$var$unlazy","slides","$6946bfb4689eabba$var$preload","amount","lazyPreloadPrevNext","slidesPerView","slidesPerViewDynamic","ceil","activeIndex","grid","rows","preloadColumns","activeColumn","column","slideIndexLastInView","realIndex","$6946bfb4689eabba$var$transitionEmit","runCallbacks","direction","step","previousIndex","$6946bfb4689eabba$var$preventEdgeSwipe","startX","edgeSwipeDetection","edgeSwipeThreshold","innerWidth","$6946bfb4689eabba$var$onTouchStart","originalEvent","touchEventsData","pointerId","targetTouches","touchId","pageX","touches","simulateTouch","pointerType","animating","preventInteractionOnTransition","cssMode","loopFix","touchEventsTarget","parent","isChild","$3e0e2b092da8f124$var$elementIsChildOfSlot","slot","elementsQueue","elementToCheck","which","isTouched","isMoved","swipingClassHasValue","noSwipingClass","eventPath","noSwipingSelector","isTargetShadow","noSwiping","$6946bfb4689eabba$var$closestElement","base","__closestFrom","assignedSlot","found","getRootNode","allowClick","swipeHandler","currentX","currentY","pageY","startY","allowTouchCallbacks","isScrolling","startMoving","touchStartTime","updateSize","swipeDirection","threshold","allowThresholdMove","focusableElements","shouldPreventDefault","allowTouchMove","touchStartPreventDefault","touchStartForcePreventDefault","isContentEditable","freeMode","onTouchStart","$6946bfb4689eabba$var$onTouchMove","targetTouch","loopFixed","rtlTranslate","rtl","changedTouches","t","preventedByNestedSwiper","touchReleaseOnEdges","isVertical","maxTranslate","minTranslate","previousX","previousY","diffX","diffY","sqrt","touchAngle","isHorizontal","atan2","abs","preventTouchMoveFromPointerMove","touchMoveStopPropagation","nested","diff","touchesDiff","oneWayMovement","touchRatio","prevTouchesDirection","touchesDirection","isLoop","allowLoopFix","allowSlideNext","allowSlidePrev","startTranslate","getTranslate","setTransition","evt","bySwiperTouchMove","allowMomentumBounce","grabCursor","setGrabCursor","_loopSwapReset","currentTranslate","loopSwapReset","disableParentSwiper","resistanceRatio","centeredSlides","slidesSizesGrid","spaceBetween","setTranslate","activeSlideIndex","resistance","followFinger","watchSlidesProgress","updateActiveIndex","updateSlidesClasses","onTouchMove","updateProgress","$6946bfb4689eabba$var$onTouchEnd","currentPos","browser","slidesGrid","touchEndTime","timeDiff","pathTree","updateClickedSlide","lastClickTime","onTouchEnd","swipeToLast","stopIndex","groupSize","slidesPerGroupSkip","slidesPerGroup","increment","rewindFirstIndex","rewindLastIndex","virtual","ratio","longSwipesMs","longSwipes","slideTo","longSwipesRatio","shortSwipes","$6946bfb4689eabba$var$onResize","breakpoints","setBreakpoint","snapGrid","isVirtual","updateSlides","isVirtualLoop","slideToLoop","autoplay","running","paused","resizeTimeout","resume","checkOverflow","$6946bfb4689eabba$var$onClick","preventClicks","preventClicksPropagation","$6946bfb4689eabba$var$onScroll","newProgress","previousTranslate","scrollLeft","scrollTop","translatesDiff","$6946bfb4689eabba$var$onLoad","autoHeight","$6946bfb4689eabba$var$onDocumentTouchStart","documentTouchHandlerProceeded","touchAction","$6946bfb4689eabba$var$events","capture","domMethod","onDocumentTouchStart","passive","onClick","onScroll","updateOnWindowResize","onLoad","$6946bfb4689eabba$var$isGridEnabled","$6946bfb4689eabba$export$4368d992c4eafac0","swiperElementNodeName","initialSlide","resizeObserver","eventsPrefix","url","setWrapperSize","virtualTranslate","effect","breakpointsBase","slidesPerGroupAuto","centeredSlidesBounds","slidesOffsetBefore","slidesOffsetAfter","normalizeSlideIndex","centerInsufficientSlides","roundLengths","slideToClickedSlide","loopAddBlankSlides","loopAdditionalSlides","loopPreventsSliding","passiveListeners","maxBackfaceHiddenSlides","containerModifierClass","slideBlankClass","slideActiveClass","slideVisibleClass","slideFullyVisibleClass","slideNextClass","slidePrevClass","wrapperClass","runCallbacksOnInit","_emitClasses","$6946bfb4689eabba$var$prototypes","eventsEmitter","events","handler","priority","eventsListeners","once","onceHandler","off","__emitterProxy","_len","apply","onAny","eventsAnyListeners","offAny","splice","eventHandler","_len2","_key2","unshift","eventsArray","clientWidth","clientHeight","parseInt","isNaN","slideSize","getDirectionPropertyValue","label","getDirectionLabel","slidesEl","swiperSize","wrongRTL","previousSlidesLength","slidesLength","offsetBefore","offsetAfter","previousSnapGridLength","previousSlidesGridLength","slidePosition","prevSlideSize","virtualSize","marginLeft","marginRight","marginBottom","marginTop","gridEnabled","initSlides","unsetSlides","shouldResetSlideSize","slide","updateSlide","slideStyles","currentTransform","transform","currentWebKitTransform","webkitTransform","paddingLeft","paddingRight","boxSizing","floor","swiperSlideSize","updateWrapperSize","newSlidesGrid","slidesGridItem","groups","slidesBefore","slidesAfter","slideIndex","allSlidesSize","slideSizeValue","maxSnap","snap","offsetSize","allSlidesOffset","snapIndex","addToSnapGrid","addToSlidesGrid","updateSlidesOffset","backFaceHiddenClass","hasClassBackfaceClassAdded","updateAutoHeight","activeSlides","newHeight","getSlideByIndex","getSlideIndexByData","visibleSlides","offsetHeight","minusOffset","offsetLeft","offsetTop","swiperSlideOffset","cssOverflowAdjustment","updateSlidesProgress","offsetCenter","visibleSlidesIndexes","slideOffset","slideProgress","originalSlideProgress","slideBefore","slideAfter","isFullyVisible","isVisible","originalProgress","multiplier","progressLoop","wasBeginning","wasEnd","isBeginningRounded","isEndRounded","firstSlideIndex","lastSlideIndex","firstSlideTranslate","lastSlideTranslate","translateMax","translateAbs","activeSlide","prevSlide","nextSlide","getFilteredSlide","nextEls","nextElementSibling","next","prevEls","previousElementSibling","prev","emitSlidesClasses","newActiveIndex","previousRealIndex","previousSnapIndex","getVirtualRealIndex","aIndex","$6946bfb4689eabba$var$getActiveIndexByTranslate","skip","firstSlideInColumn","initialized","slideFound","clickedSlide","clickedIndex","axis","matrix","curTransform","transformMatrix","curStyle","$3e0e2b092da8f124$var$getComputedStyle","currentStyle","WebKitCSSMatrix","MozTransform","OTransform","MsTransform","msTransform","m41","m42","byController","x","y","translateTo","translateBounds","internal","newTranslate","isH","behavior","onTranslateToWrapperTransitionEnd","transition","transitionDuration","transitionDelay","transitionStart","transitionEnd","initial","normalizedTranslate","normalizedGrid","normalizedGridNext","_immediateVirtual","_cssModeVirtualInitialSet","onSlideToWrapperTransitionEnd","newIndex","targetSlideIndex","cols","needLoopFix","slideRealIndex","perGroup","_clientLeft","clientLeft","normalize","val","normalizedSnapGrid","isFreeMode","prevSnap","prevSnapIndex","prevIndex","lastIndex","slideReset","slideToClosest","currentSnap","nextSnap","slideToIndex","slideSelector","loopedSlides","getSlideIndex","loopCreate","shouldFillGroup","shouldFillGrid","addBlankSlides","amountOfSlides","recalcSlides","byMousewheel","fill","prependSlidesIndexes","appendSlidesIndexes","isInitialOverflow","isNext","isPrev","slidesPrepended","slidesAppended","activeColIndexWithShift","activeColIndex","colIndexToPrepend","__preventObserver__","swiperLoopMoveDOM","prepend","currentSlideTranslate","newSlideTranslate","control","loopParams","loopDestroy","newSlidesOrder","swiperSlideIndex","moving","cursor","unsetGrabCursor","attachEvents","bind","detachEvents","breakpointContainer","breakpoint","getBreakpoint","currentBreakpoint","breakpointParams","breakpointOnlyParams","wasMultiRow","isMultiRow","wasGrabCursor","isGrabCursor","wasEnabled","emitContainerClasses","wasModuleEnabled","isModuleEnabled","directionChanged","needsReLoop","wasLoop","changeDirection","isEnabled","hasLoop","containerEl","currentHeight","innerHeight","points","point","substr","wasLocked","lastSlideRightEdge","addClasses","classNames","suffixes","$6946bfb4689eabba$var$prepareClasses","resultClasses","item","removeClasses","$6946bfb4689eabba$var$extendedDefaults","$6946bfb4689eabba$export$25ce5a424b770e84","swipers","newParams","__modules__","allModulesParams","mod","$6946bfb4689eabba$var$moduleExtendParams","moduleParamName","moduleParams","swiperParams","passedParams","velocity","trunc","clickTimeout","velocities","imagesToLoad","imagesLoaded","setProgress","cls","getSlideClasses","updates","view","exact","spv","breakLoop","slideInView","translated","complete","newDirection","needUpdate","currentDirection","changeLanguageDirection","mounted","parentNode","getWrapperSelector","slideSlots","lazyElements","deleteInstance","cleanStyles","extendDefaults","newDefaults","extendedDefaults","defaults","installModule","use","m","prototypeGroup","protoMethod","animationFrame","resizeHandler","createObserver","ResizeObserver","newWidth","_ref2","contentBoxSize","contentRect","inlineSize","blockSize","removeObserver","unobserve","orientationChangeHandler","observers","attach","WebkitMutationObserver","observerUpdate","characterData","observeParents","observeSlideChildren","containerParents","parents","$0eb5dd2823b8d4ee$export$2e2bcd8739ae039","defaultOptions","optionsValue","$60c0124de0654852$export$2e2bcd8739ae039","ariaExpanded","$b92e0ee301f7fe69$export$2e2bcd8739ae039","formTargetConnected","formTarget","dataset","requestSubmit","setQuantity","setFormula","show","$a6c79d0de6fd3d03$var$application","debug","logFormattedMessage","Promise","resolve","readyState","register","load","registerActionOption","head","rest","definitions","unload","controllers","onerror","groupCollapsed","groupEnd","$a6c79d0de6fd3d03$var$initComponent","ComponentClass","items"],"version":3,"file":"main.js.map"}