@ix_waterford/lib 1.0.18 → 1.0.20

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/node_modules/@rspack/core/dist/cssExtractHmr.js","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/node_modules/swiper/modules/effect-coverflow.css","webpack://@ix_waterford/lib/./node_modules/swiper/modules/pagination.css?d760","webpack://@ix_waterford/lib/./node_modules/swiper/swiper.css?b4eb","webpack://@ix_waterford/lib/./src/components/textEditor/lexicalStyles.css?83f1","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/node_modules/dayjs/plugin/customParseFormat.js","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/node_modules/dayjs/plugin/utc.js","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/node_modules/react-refresh/cjs/react-refresh-runtime.development.js","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/node_modules/react-refresh/runtime.js","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/node_modules/react/cjs/react-jsx-dev-runtime.development.js","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/node_modules/react/jsx-dev-runtime.js","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/src/assets/editIcon.tsx","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/src/assets/searchIcon.tsx","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/src/assets/svg/addIcon.tsx","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/src/assets/svg/clearFilterIcon.tsx","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/src/assets/svg/closeIcon.tsx","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/src/assets/svg/columSettingsIcon.tsx","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/src/assets/svg/doubleArrow.tsx","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/src/assets/svg/downloadIcon.tsx","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/src/assets/svg/expandMoreIcon.tsx","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/src/assets/svg/listIcon.tsx","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/src/assets/svg/moreIcon.tsx","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/src/assets/svg/pagination/backwardIcon.tsx","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/src/assets/svg/pagination/forwardIcon.tsx","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/src/assets/svg/pagination/nextIcon.tsx","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/src/assets/svg/pagination/prevIcon.tsx","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/src/assets/svg/searchIcon.tsx","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/src/assets/svg/sorting/ascending.tsx","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/src/assets/svg/sorting/descending.tsx","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/src/assets/svg/tileIcon.tsx","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/src/components/accordion/accordion.tsx","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/src/components/avatar/avatar.tsx","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/src/components/avatar/avatarGroup.tsx","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/src/components/avatarStatusDot/avatar.tsx","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/src/components/avatarStatusDot/style.tsx","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/src/components/avatarTitle/avatarTitle.tsx","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/src/components/badge/badge.tsx","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/src/components/breadCrumb/breadCrumb.tsx","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/src/components/breadCrumb/style.tsx","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/src/components/button/button.tsx","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/src/components/button/style.tsx","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/src/components/carousal/carousal.tsx","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/src/components/checkBox/checkBox.tsx","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/src/components/chip/chip.tsx","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/src/components/colorPicker/colorPicker.tsx","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/src/components/datePicker/datePicker.tsx","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/src/components/dateRangePicker/dateRangePicker.tsx","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/src/components/dateRangePicker/style.tsx","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/src/components/dialog/dialog.tsx","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/src/components/dialog/style.tsx","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/src/components/drawer/drawer.tsx","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/src/components/errorBoundary/errorBoundary.tsx","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/src/components/iconButton/iconButton.tsx","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/src/components/link/link.tsx","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/src/components/loader/circularLoader.tsx","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/src/components/loader/linearLoader.tsx","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/src/components/loader/style.tsx","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/src/components/mediaPlayer/mediaPlayer.tsx","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/src/components/menu/menu.tsx","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/src/components/menu/style.tsx","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/src/components/modal/modal.tsx","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/src/components/popOver/popOver.tsx","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/src/components/radio/radio.tsx","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/src/components/searchBar/searchBar.tsx","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/src/components/select/multiSelect.tsx","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/src/components/select/select.tsx","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/src/components/select/style.tsx","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/src/components/slider/slider.tsx","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/src/components/snackBar/snackBar.tsx","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/src/components/switch/switch.tsx","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/src/components/table/body/defaultMappings.tsx","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/src/components/table/body/tableActions.tsx","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/src/components/table/body/tblBody.tsx","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/src/components/table/dndWrapper.tsx","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/src/components/table/header/headerContent.tsx","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/src/components/table/header/searchBar.tsx","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/src/components/table/header/searchFields/DateSearchField.tsx","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/src/components/table/header/searchFields/SelectSearchField.tsx","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/src/components/table/header/searchFields/TextSearchField.tsx","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/src/components/table/header/tblHeader.tsx","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/src/components/table/pagination.tsx","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/src/components/table/styles.tsx","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/src/components/table/table.tsx","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/src/components/tabs/style.tsx","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/src/components/tabs/tabPanel.tsx","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/src/components/tabs/tabPanelStyle.tsx","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/src/components/tabs/tabs.tsx","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/src/components/textEditor/config.ts","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/src/components/textEditor/plugins/alignmentDropdown.tsx","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/src/components/textEditor/plugins/blockquoteButton.tsx","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/src/components/textEditor/plugins/colorPicker.tsx","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/src/components/textEditor/plugins/formatButton.tsx","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/src/components/textEditor/plugins/listButton.tsx","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/src/components/textEditor/plugins/textStyleDropdown.tsx","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/src/components/textEditor/plugins/toolbar.tsx","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/src/components/textEditor/plugins/undoButton.tsx","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/src/components/textEditor/plugins/useToolbarState.ts","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/src/components/textEditor/style.tsx","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/src/components/textEditor/textEditor.tsx","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/src/components/textEditor/theme.ts","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/src/components/textField/style.tsx","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/src/components/textField/textField.tsx","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/src/components/theme/ThemeProvider.tsx","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/src/components/timePicker/timePicker.tsx","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/src/components/timeline/style.tsx","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/src/components/timeline/timeline.tsx","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/src/components/toolTip/toolTip.tsx","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/src/components/typography/typography.tsx","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/src/components/viewHeader/DefaultViewPopover.tsx","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/src/components/viewHeader/columnSettingsPopover.tsx","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/src/components/viewHeader/constants.ts","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/src/components/viewHeader/defaultActions/add.tsx","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/src/components/viewHeader/defaultActions/columnSettings.tsx","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/src/components/viewHeader/defaultActions/dateRangePicker.tsx","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/src/components/viewHeader/defaultActions/defaultView.tsx","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/src/components/viewHeader/defaultActions/download.tsx","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/src/components/viewHeader/defaultActions/index.ts","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/src/components/viewHeader/defaultActions/listSearch.tsx","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/src/components/viewHeader/defaultActions/tileSearch.tsx","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/src/components/viewHeader/defaultActions/viewSwitch.tsx","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/src/components/viewHeader/popoverStyle.tsx","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/src/components/viewHeader/style.tsx","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/src/components/viewHeader/viewHeader.tsx","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/src/constants/dateConstants.ts","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/src/constants/viewHeaderConstants.ts","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/src/hooks/debounce.ts","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/src/index.ts","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/src/utils/date.ts","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/src/utils/email.ts","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/src/utils/global.ts","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/src/utils/localStorage.ts","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/src/utils/sessionStorage.ts","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/node_modules/@rspack/plugin-react-refresh/client/reactRefresh.js","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/node_modules/@rspack/plugin-react-refresh/client/reactRefreshEntry.js","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/node_modules/@rspack/plugin-react-refresh/client/refreshUtils.js","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/node_modules/@swc/helpers/esm/_define_property.js","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/node_modules/swiper/modules/a11y.mjs","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/node_modules/swiper/modules/autoplay.mjs","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/node_modules/swiper/modules/controller.mjs","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/node_modules/swiper/modules/effect-cards.mjs","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/node_modules/swiper/modules/effect-coverflow.mjs","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/node_modules/swiper/modules/effect-creative.mjs","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/node_modules/swiper/modules/effect-cube.mjs","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/node_modules/swiper/modules/effect-fade.mjs","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/node_modules/swiper/modules/effect-flip.mjs","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/node_modules/swiper/modules/free-mode.mjs","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/node_modules/swiper/modules/grid.mjs","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/node_modules/swiper/modules/hash-navigation.mjs","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/node_modules/swiper/modules/history.mjs","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/node_modules/swiper/modules/index.mjs","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/node_modules/swiper/modules/keyboard.mjs","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/node_modules/swiper/modules/manipulation.mjs","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/node_modules/swiper/modules/mousewheel.mjs","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/node_modules/swiper/modules/navigation.mjs","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/node_modules/swiper/modules/pagination.mjs","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/node_modules/swiper/modules/parallax.mjs","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/node_modules/swiper/modules/scrollbar.mjs","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/node_modules/swiper/modules/thumbs.mjs","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/node_modules/swiper/modules/virtual.mjs","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/node_modules/swiper/modules/zoom.mjs","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/node_modules/swiper/shared/classes-to-selector.mjs","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/node_modules/swiper/shared/create-element-if-not-defined.mjs","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/node_modules/swiper/shared/create-shadow.mjs","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/node_modules/swiper/shared/effect-init.mjs","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/node_modules/swiper/shared/effect-target.mjs","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/node_modules/swiper/shared/effect-virtual-transition-end.mjs","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/node_modules/swiper/shared/ssr-window.esm.mjs","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/node_modules/swiper/shared/swiper-core.mjs","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/node_modules/swiper/shared/update-on-virtual-data.mjs","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/node_modules/swiper/shared/update-swiper.mjs","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/node_modules/swiper/shared/utils.mjs","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/node_modules/swiper/swiper-react.mjs","webpack/runtime/compat_get_default_export","webpack/runtime/define_property_getters","webpack/runtime/get mini-css chunk filename","webpack/runtime/has_own_property","webpack/runtime/hot_module_replacement","webpack/runtime/make_namespace_object","webpack/runtime/public_path","webpack/runtime/css loading"],"sourcesContent":["\"use strict\";\nvar __webpack_require__ = {};\n__webpack_require__.d = (exports1, definition)=>{\n for(var key in definition)__webpack_require__.o(definition, key) && !__webpack_require__.o(exports1, key) && Object.defineProperty(exports1, key, {\n enumerable: !0,\n get: definition[key]\n });\n}, __webpack_require__.o = (obj, prop)=>Object.prototype.hasOwnProperty.call(obj, prop), __webpack_require__.r = (exports1)=>{\n 'undefined' != typeof Symbol && Symbol.toStringTag && Object.defineProperty(exports1, Symbol.toStringTag, {\n value: 'Module'\n }), Object.defineProperty(exports1, '__esModule', {\n value: !0\n });\n};\nvar __webpack_exports__ = {};\nfunction normalizeUrl(url) {\n let urlString = url.trim();\n if (/^data:/i.test(urlString)) return urlString;\n let protocol = -1 !== urlString.indexOf(\"//\") ? `${urlString.split(\"//\")[0]}//` : \"\", components = urlString.replace(RegExp(protocol, \"i\"), \"\").split(\"/\"), host = components[0].toLowerCase().replace(/\\.$/, \"\");\n return components[0] = \"\", protocol + host + components.reduce((accumulator, item)=>{\n switch(item){\n case \"..\":\n accumulator.pop();\n break;\n case \".\":\n break;\n default:\n accumulator.push(item);\n }\n return accumulator;\n }, []).join(\"/\");\n}\n__webpack_require__.r(__webpack_exports__), __webpack_require__.d(__webpack_exports__, {\n cssReload: ()=>cssReload,\n normalizeUrl: ()=>normalizeUrl\n});\nconst srcByModuleId = Object.create(null), noDocument = \"undefined\" == typeof document, { forEach } = Array.prototype;\nfunction noop() {}\nfunction updateCss(el, url) {\n let normalizedUrl;\n if (url) normalizedUrl = url;\n else {\n let href = el.getAttribute(\"href\");\n if (!href) return;\n normalizedUrl = href.split(\"?\")[0];\n }\n if (!isUrlRequest(el.href) || !1 === el.isLoaded || !normalizedUrl || !(normalizedUrl.indexOf(\".css\") > -1)) return;\n el.visited = !0;\n let newEl = el.cloneNode();\n newEl.isLoaded = !1, newEl.addEventListener(\"load\", ()=>{\n !newEl.isLoaded && (newEl.isLoaded = !0, el.parentNode && el.parentNode.removeChild(el));\n }), newEl.addEventListener(\"error\", ()=>{\n !newEl.isLoaded && (newEl.isLoaded = !0, el.parentNode && el.parentNode.removeChild(el));\n }), newEl.href = `${normalizedUrl}?${Date.now()}`;\n let parent = el.parentNode;\n parent && (el.nextSibling ? parent.insertBefore(newEl, el.nextSibling) : parent.appendChild(newEl));\n}\nfunction reloadAll() {\n let elements = document.querySelectorAll(\"link\");\n forEach.call(elements, (el)=>{\n !0 !== el.visited && updateCss(el);\n });\n}\nfunction isUrlRequest(url) {\n return !!/^[a-zA-Z][a-zA-Z\\d+\\-.]*:/.test(url);\n}\nfunction cssReload(moduleId, options) {\n var fn;\n let timeout;\n if (noDocument) return console.log(\"[HMR] No `window.document` found, CSS HMR disabled\"), noop;\n let getScriptSrc = function(moduleId) {\n let src = srcByModuleId[moduleId];\n if (!src) {\n if (document.currentScript) ({ src } = document.currentScript);\n else {\n let scripts = document.getElementsByTagName(\"script\"), lastScriptTag = scripts[scripts.length - 1];\n lastScriptTag && ({ src } = lastScriptTag);\n }\n srcByModuleId[moduleId] = src;\n }\n return (fileMap)=>{\n if (!src) return null;\n let splitResult = src.match(/([^\\\\/]+)\\.js$/), filename = splitResult && splitResult[1];\n return filename && fileMap ? fileMap.split(\",\").map((mapRule)=>{\n let reg = RegExp(`${filename}\\\\.js$`, \"g\");\n return normalizeUrl(src.replace(reg, `${mapRule.replace(/{fileName}/g, filename)}.css`));\n }) : [\n src.replace(\".js\", \".css\")\n ];\n };\n }(moduleId);\n return fn = function() {\n let src = getScriptSrc(options.filename), reloaded = function(src) {\n if (!src) return !1;\n let elements = document.querySelectorAll(\"link\"), loaded = !1;\n return forEach.call(elements, (el)=>{\n var href;\n let ret, normalizedHref;\n if (!el.href) return;\n let url = (href = el.href, ret = \"\", normalizedHref = normalizeUrl(href), src.some((url)=>{\n normalizedHref.indexOf(src) > -1 && (ret = url);\n }), ret);\n !isUrlRequest(url) || !0 !== el.visited && url && (updateCss(el, url), loaded = !0);\n }), loaded;\n }(src);\n if (options.locals) {\n console.log(\"[HMR] Detected local CSS Modules. Reload all CSS\"), reloadAll();\n return;\n }\n reloaded ? console.log(\"[HMR] CSS reload %s\", src && src.join(\" \")) : (console.log(\"[HMR] Reload all CSS\"), reloadAll());\n }, timeout = 0, function(...args) {\n let self = this;\n clearTimeout(timeout), timeout = setTimeout(function() {\n return fn.apply(self, args);\n }, 50);\n };\n}\nfor(var __webpack_i__ in exports.cssReload = __webpack_exports__.cssReload, exports.normalizeUrl = __webpack_exports__.normalizeUrl, __webpack_exports__)-1 === [\n \"cssReload\",\n \"normalizeUrl\"\n].indexOf(__webpack_i__) && (exports[__webpack_i__] = __webpack_exports__[__webpack_i__]);\nObject.defineProperty(exports, '__esModule', {\n value: !0\n});\n","// extracted by css-extract-rspack-plugin\nexport {};\n if(module.hot) {\n (function() {\n var localsJsonString = undefined;\n // 1765977235826\n var cssReload = require(\"../../@rspack/core/dist/cssExtractHmr.js\").cssReload(module.id, {});\n // only invalidate when locals change\n if (\n module.hot.data &&\n module.hot.data.value &&\n module.hot.data.value !== localsJsonString\n ) {\n module.hot.invalidate();\n } else {\n module.hot.accept();\n }\n module.hot.dispose(function(data) {\n data.value = localsJsonString;\n cssReload();\n });\n })();\n }\n ","// extracted by css-extract-rspack-plugin\nexport {};\n if(module.hot) {\n (function() {\n var localsJsonString = undefined;\n // 1765977235828\n var cssReload = require(\"../../@rspack/core/dist/cssExtractHmr.js\").cssReload(module.id, {});\n // only invalidate when locals change\n if (\n module.hot.data &&\n module.hot.data.value &&\n module.hot.data.value !== localsJsonString\n ) {\n module.hot.invalidate();\n } else {\n module.hot.accept();\n }\n module.hot.dispose(function(data) {\n data.value = localsJsonString;\n cssReload();\n });\n })();\n }\n ","// extracted by css-extract-rspack-plugin\nexport {};\n if(module.hot) {\n (function() {\n var localsJsonString = undefined;\n // 1765977235828\n var cssReload = require(\"../@rspack/core/dist/cssExtractHmr.js\").cssReload(module.id, {});\n // only invalidate when locals change\n if (\n module.hot.data &&\n module.hot.data.value &&\n module.hot.data.value !== localsJsonString\n ) {\n module.hot.invalidate();\n } else {\n module.hot.accept();\n }\n module.hot.dispose(function(data) {\n data.value = localsJsonString;\n cssReload();\n });\n })();\n }\n ","// extracted by css-extract-rspack-plugin\nexport {};\n if(module.hot) {\n (function() {\n var localsJsonString = undefined;\n // 1765977235829\n var cssReload = require(\"../../../node_modules/@rspack/core/dist/cssExtractHmr.js\").cssReload(module.id, {});\n // only invalidate when locals change\n if (\n module.hot.data &&\n module.hot.data.value &&\n module.hot.data.value !== localsJsonString\n ) {\n module.hot.invalidate();\n } else {\n module.hot.accept();\n }\n module.hot.dispose(function(data) {\n data.value = localsJsonString;\n cssReload();\n });\n })();\n }\n ","!function(e,t){\"object\"==typeof exports&&\"undefined\"!=typeof module?module.exports=t():\"function\"==typeof define&&define.amd?define(t):(e=\"undefined\"!=typeof globalThis?globalThis:e||self).dayjs_plugin_customParseFormat=t()}(this,(function(){\"use strict\";var e={LTS:\"h:mm:ss A\",LT:\"h:mm A\",L:\"MM/DD/YYYY\",LL:\"MMMM D, YYYY\",LLL:\"MMMM D, YYYY h:mm A\",LLLL:\"dddd, MMMM D, YYYY h:mm A\"},t=/(\\[[^[]*\\])|([-_:/.,()\\s]+)|(A|a|Q|YYYY|YY?|ww?|MM?M?M?|Do|DD?|hh?|HH?|mm?|ss?|S{1,3}|z|ZZ?)/g,n=/\\d/,r=/\\d\\d/,i=/\\d\\d?/,o=/\\d*[^-_:/,()\\s\\d]+/,s={},a=function(e){return(e=+e)+(e>68?1900:2e3)};var f=function(e){return function(t){this[e]=+t}},h=[/[+-]\\d\\d:?(\\d\\d)?|Z/,function(e){(this.zone||(this.zone={})).offset=function(e){if(!e)return 0;if(\"Z\"===e)return 0;var t=e.match(/([+-]|\\d\\d)/g),n=60*t[1]+(+t[2]||0);return 0===n?0:\"+\"===t[0]?-n:n}(e)}],u=function(e){var t=s[e];return t&&(t.indexOf?t:t.s.concat(t.f))},d=function(e,t){var n,r=s.meridiem;if(r){for(var i=1;i<=24;i+=1)if(e.indexOf(r(i,0,t))>-1){n=i>12;break}}else n=e===(t?\"pm\":\"PM\");return n},c={A:[o,function(e){this.afternoon=d(e,!1)}],a:[o,function(e){this.afternoon=d(e,!0)}],Q:[n,function(e){this.month=3*(e-1)+1}],S:[n,function(e){this.milliseconds=100*+e}],SS:[r,function(e){this.milliseconds=10*+e}],SSS:[/\\d{3}/,function(e){this.milliseconds=+e}],s:[i,f(\"seconds\")],ss:[i,f(\"seconds\")],m:[i,f(\"minutes\")],mm:[i,f(\"minutes\")],H:[i,f(\"hours\")],h:[i,f(\"hours\")],HH:[i,f(\"hours\")],hh:[i,f(\"hours\")],D:[i,f(\"day\")],DD:[r,f(\"day\")],Do:[o,function(e){var t=s.ordinal,n=e.match(/\\d+/);if(this.day=n[0],t)for(var r=1;r<=31;r+=1)t(r).replace(/\\[|\\]/g,\"\")===e&&(this.day=r)}],w:[i,f(\"week\")],ww:[r,f(\"week\")],M:[i,f(\"month\")],MM:[r,f(\"month\")],MMM:[o,function(e){var t=u(\"months\"),n=(u(\"monthsShort\")||t.map((function(e){return e.slice(0,3)}))).indexOf(e)+1;if(n<1)throw new Error;this.month=n%12||n}],MMMM:[o,function(e){var t=u(\"months\").indexOf(e)+1;if(t<1)throw new Error;this.month=t%12||t}],Y:[/[+-]?\\d+/,f(\"year\")],YY:[r,function(e){this.year=a(e)}],YYYY:[/\\d{4}/,f(\"year\")],Z:h,ZZ:h};function l(n){var r,i;r=n,i=s&&s.formats;for(var o=(n=r.replace(/(\\[[^\\]]+])|(LTS?|l{1,4}|L{1,4})/g,(function(t,n,r){var o=r&&r.toUpperCase();return n||i[r]||e[r]||i[o].replace(/(\\[[^\\]]+])|(MMMM|MM|DD|dddd)/g,(function(e,t,n){return t||n.slice(1)}))}))).match(t),a=o.length,f=0;f<a;f+=1){var h=o[f],u=c[h],d=u&&u[0],l=u&&u[1];o[f]=l?{regex:d,parser:l}:h.replace(/^\\[|\\]$/g,\"\")}return function(e){for(var t={},n=0,r=0;n<a;n+=1){var i=o[n];if(\"string\"==typeof i)r+=i.length;else{var s=i.regex,f=i.parser,h=e.slice(r),u=s.exec(h)[0];f.call(t,u),e=e.replace(u,\"\")}}return function(e){var t=e.afternoon;if(void 0!==t){var n=e.hours;t?n<12&&(e.hours+=12):12===n&&(e.hours=0),delete e.afternoon}}(t),t}}return function(e,t,n){n.p.customParseFormat=!0,e&&e.parseTwoDigitYear&&(a=e.parseTwoDigitYear);var r=t.prototype,i=r.parse;r.parse=function(e){var t=e.date,r=e.utc,o=e.args;this.$u=r;var a=o[1];if(\"string\"==typeof a){var f=!0===o[2],h=!0===o[3],u=f||h,d=o[2];h&&(d=o[2]),s=this.$locale(),!f&&d&&(s=n.Ls[d]),this.$d=function(e,t,n,r){try{if([\"x\",\"X\"].indexOf(t)>-1)return new Date((\"X\"===t?1e3:1)*e);var i=l(t)(e),o=i.year,s=i.month,a=i.day,f=i.hours,h=i.minutes,u=i.seconds,d=i.milliseconds,c=i.zone,m=i.week,M=new Date,Y=a||(o||s?1:M.getDate()),p=o||M.getFullYear(),v=0;o&&!s||(v=s>0?s-1:M.getMonth());var D,w=f||0,g=h||0,y=u||0,L=d||0;return c?new Date(Date.UTC(p,v,Y,w,g,y,L+60*c.offset*1e3)):n?new Date(Date.UTC(p,v,Y,w,g,y,L)):(D=new Date(p,v,Y,w,g,y,L),m&&(D=r(D).week(m).toDate()),D)}catch(e){return new Date(\"\")}}(t,a,r,n),this.init(),d&&!0!==d&&(this.$L=this.locale(d).$L),u&&t!=this.format(a)&&(this.$d=new Date(\"\")),s={}}else if(a instanceof Array)for(var c=a.length,m=1;m<=c;m+=1){o[1]=a[m-1];var M=n.apply(this,o);if(M.isValid()){this.$d=M.$d,this.$L=M.$L,this.init();break}m===c&&(this.$d=new Date(\"\"))}else i.call(this,e)}}}));","!function(t,i){\"object\"==typeof exports&&\"undefined\"!=typeof module?module.exports=i():\"function\"==typeof define&&define.amd?define(i):(t=\"undefined\"!=typeof globalThis?globalThis:t||self).dayjs_plugin_utc=i()}(this,(function(){\"use strict\";var t=\"minute\",i=/[+-]\\d\\d(?::?\\d\\d)?/g,e=/([+-]|\\d\\d)/g;return function(s,f,n){var u=f.prototype;n.utc=function(t){var i={date:t,utc:!0,args:arguments};return new f(i)},u.utc=function(i){var e=n(this.toDate(),{locale:this.$L,utc:!0});return i?e.add(this.utcOffset(),t):e},u.local=function(){return n(this.toDate(),{locale:this.$L,utc:!1})};var r=u.parse;u.parse=function(t){t.utc&&(this.$u=!0),this.$utils().u(t.$offset)||(this.$offset=t.$offset),r.call(this,t)};var o=u.init;u.init=function(){if(this.$u){var t=this.$d;this.$y=t.getUTCFullYear(),this.$M=t.getUTCMonth(),this.$D=t.getUTCDate(),this.$W=t.getUTCDay(),this.$H=t.getUTCHours(),this.$m=t.getUTCMinutes(),this.$s=t.getUTCSeconds(),this.$ms=t.getUTCMilliseconds()}else o.call(this)};var a=u.utcOffset;u.utcOffset=function(s,f){var n=this.$utils().u;if(n(s))return this.$u?0:n(this.$offset)?a.call(this):this.$offset;if(\"string\"==typeof s&&(s=function(t){void 0===t&&(t=\"\");var s=t.match(i);if(!s)return null;var f=(\"\"+s[0]).match(e)||[\"-\",0,0],n=f[0],u=60*+f[1]+ +f[2];return 0===u?0:\"+\"===n?u:-u}(s),null===s))return this;var u=Math.abs(s)<=16?60*s:s;if(0===u)return this.utc(f);var r=this.clone();if(f)return r.$offset=u,r.$u=!1,r;var o=this.$u?this.toDate().getTimezoneOffset():-1*this.utcOffset();return(r=this.local().add(u+o,t)).$offset=u,r.$x.$localOffset=o,r};var h=u.format;u.format=function(t){var i=t||(this.$u?\"YYYY-MM-DDTHH:mm:ss[Z]\":\"\");return h.call(this,i)},u.valueOf=function(){var t=this.$utils().u(this.$offset)?0:this.$offset+(this.$x.$localOffset||this.$d.getTimezoneOffset());return this.$d.valueOf()-6e4*t},u.isUTC=function(){return!!this.$u},u.toISOString=function(){return this.toDate().toISOString()},u.toString=function(){return this.toDate().toUTCString()};var l=u.toDate;u.toDate=function(t){return\"s\"===t&&this.$offset?n(this.format(\"YYYY-MM-DD HH:mm:ss:SSS\")).toDate():l.call(this)};var c=u.diff;u.diff=function(t,i,e){if(t&&this.$u===t.$u)return c.call(this,t,i,e);var s=this.local(),f=n(t).local();return c.call(s,f,i,e)}}}));","/**\n * @license React\n * react-refresh-runtime.development.js\n *\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\"use strict\";\n\"production\" !== process.env.NODE_ENV &&\n (function () {\n function computeFullKey(signature) {\n if (null !== signature.fullKey) return signature.fullKey;\n var fullKey = signature.ownKey;\n try {\n var hooks = signature.getCustomHooks();\n } catch (err) {\n return (signature.forceReset = !0), (signature.fullKey = fullKey);\n }\n for (var i = 0; i < hooks.length; i++) {\n var hook = hooks[i];\n if (\"function\" !== typeof hook)\n return (signature.forceReset = !0), (signature.fullKey = fullKey);\n hook = allSignaturesByType.get(hook);\n if (void 0 !== hook) {\n var nestedHookKey = computeFullKey(hook);\n hook.forceReset && (signature.forceReset = !0);\n fullKey += \"\\n---\\n\" + nestedHookKey;\n }\n }\n return (signature.fullKey = fullKey);\n }\n function resolveFamily(type) {\n return updatedFamiliesByType.get(type);\n }\n function cloneMap(map) {\n var clone = new Map();\n map.forEach(function (value, key) {\n clone.set(key, value);\n });\n return clone;\n }\n function cloneSet(set) {\n var clone = new Set();\n set.forEach(function (value) {\n clone.add(value);\n });\n return clone;\n }\n function getProperty(object, property) {\n try {\n return object[property];\n } catch (err) {}\n }\n function register(type, id) {\n if (\n !(\n null === type ||\n (\"function\" !== typeof type && \"object\" !== typeof type) ||\n allFamiliesByType.has(type)\n )\n ) {\n var family = allFamiliesByID.get(id);\n void 0 === family\n ? ((family = { current: type }), allFamiliesByID.set(id, family))\n : pendingUpdates.push([family, type]);\n allFamiliesByType.set(type, family);\n if (\"object\" === typeof type && null !== type)\n switch (getProperty(type, \"$$typeof\")) {\n case REACT_FORWARD_REF_TYPE:\n register(type.render, id + \"$render\");\n break;\n case REACT_MEMO_TYPE:\n register(type.type, id + \"$type\");\n }\n }\n }\n function setSignature(type, key) {\n var forceReset =\n 2 < arguments.length && void 0 !== arguments[2] ? arguments[2] : !1,\n getCustomHooks = 3 < arguments.length ? arguments[3] : void 0;\n allSignaturesByType.has(type) ||\n allSignaturesByType.set(type, {\n forceReset: forceReset,\n ownKey: key,\n fullKey: null,\n getCustomHooks:\n getCustomHooks ||\n function () {\n return [];\n }\n });\n if (\"object\" === typeof type && null !== type)\n switch (getProperty(type, \"$$typeof\")) {\n case REACT_FORWARD_REF_TYPE:\n setSignature(type.render, key, forceReset, getCustomHooks);\n break;\n case REACT_MEMO_TYPE:\n setSignature(type.type, key, forceReset, getCustomHooks);\n }\n }\n function collectCustomHooksForSignature(type) {\n type = allSignaturesByType.get(type);\n void 0 !== type && computeFullKey(type);\n }\n var REACT_FORWARD_REF_TYPE = Symbol.for(\"react.forward_ref\"),\n REACT_MEMO_TYPE = Symbol.for(\"react.memo\"),\n PossiblyWeakMap = \"function\" === typeof WeakMap ? WeakMap : Map,\n allFamiliesByID = new Map(),\n allFamiliesByType = new PossiblyWeakMap(),\n allSignaturesByType = new PossiblyWeakMap(),\n updatedFamiliesByType = new PossiblyWeakMap(),\n pendingUpdates = [],\n helpersByRendererID = new Map(),\n helpersByRoot = new Map(),\n mountedRoots = new Set(),\n failedRoots = new Set(),\n rootElements = \"function\" === typeof WeakMap ? new WeakMap() : null,\n isPerformingRefresh = !1;\n exports._getMountedRootCount = function () {\n return mountedRoots.size;\n };\n exports.collectCustomHooksForSignature = collectCustomHooksForSignature;\n exports.createSignatureFunctionForTransform = function () {\n var savedType,\n hasCustomHooks,\n didCollectHooks = !1;\n return function (type, key, forceReset, getCustomHooks) {\n if (\"string\" === typeof key)\n return (\n savedType ||\n ((savedType = type),\n (hasCustomHooks = \"function\" === typeof getCustomHooks)),\n null == type ||\n (\"function\" !== typeof type && \"object\" !== typeof type) ||\n setSignature(type, key, forceReset, getCustomHooks),\n type\n );\n !didCollectHooks &&\n hasCustomHooks &&\n ((didCollectHooks = !0), collectCustomHooksForSignature(savedType));\n };\n };\n exports.getFamilyByID = function (id) {\n return allFamiliesByID.get(id);\n };\n exports.getFamilyByType = function (type) {\n return allFamiliesByType.get(type);\n };\n exports.hasUnrecoverableErrors = function () {\n return !1;\n };\n exports.injectIntoGlobalHook = function (globalObject) {\n var hook = globalObject.__REACT_DEVTOOLS_GLOBAL_HOOK__;\n if (void 0 === hook) {\n var nextID = 0;\n globalObject.__REACT_DEVTOOLS_GLOBAL_HOOK__ = hook = {\n renderers: new Map(),\n supportsFiber: !0,\n inject: function () {\n return nextID++;\n },\n onScheduleFiberRoot: function () {},\n onCommitFiberRoot: function () {},\n onCommitFiberUnmount: function () {}\n };\n }\n if (hook.isDisabled)\n console.warn(\n \"Something has shimmed the React DevTools global hook (__REACT_DEVTOOLS_GLOBAL_HOOK__). Fast Refresh is not compatible with this shim and will be disabled.\"\n );\n else {\n var oldInject = hook.inject;\n hook.inject = function (injected) {\n var id = oldInject.apply(this, arguments);\n \"function\" === typeof injected.scheduleRefresh &&\n \"function\" === typeof injected.setRefreshHandler &&\n helpersByRendererID.set(id, injected);\n return id;\n };\n hook.renderers.forEach(function (injected, id) {\n \"function\" === typeof injected.scheduleRefresh &&\n \"function\" === typeof injected.setRefreshHandler &&\n helpersByRendererID.set(id, injected);\n });\n var oldOnCommitFiberRoot = hook.onCommitFiberRoot,\n oldOnScheduleFiberRoot = hook.onScheduleFiberRoot || function () {};\n hook.onScheduleFiberRoot = function (id, root, children) {\n isPerformingRefresh ||\n (failedRoots.delete(root),\n null !== rootElements && rootElements.set(root, children));\n return oldOnScheduleFiberRoot.apply(this, arguments);\n };\n hook.onCommitFiberRoot = function (\n id,\n root,\n maybePriorityLevel,\n didError\n ) {\n var helpers = helpersByRendererID.get(id);\n if (void 0 !== helpers) {\n helpersByRoot.set(root, helpers);\n helpers = root.current;\n var alternate = helpers.alternate;\n null !== alternate\n ? ((alternate =\n null != alternate.memoizedState &&\n null != alternate.memoizedState.element &&\n mountedRoots.has(root)),\n (helpers =\n null != helpers.memoizedState &&\n null != helpers.memoizedState.element),\n !alternate && helpers\n ? (mountedRoots.add(root), failedRoots.delete(root))\n : (alternate && helpers) ||\n (alternate && !helpers\n ? (mountedRoots.delete(root),\n didError\n ? failedRoots.add(root)\n : helpersByRoot.delete(root))\n : alternate ||\n helpers ||\n (didError && failedRoots.add(root))))\n : mountedRoots.add(root);\n }\n return oldOnCommitFiberRoot.apply(this, arguments);\n };\n }\n };\n exports.isLikelyComponentType = function (type) {\n switch (typeof type) {\n case \"function\":\n if (null != type.prototype) {\n if (type.prototype.isReactComponent) return !0;\n var ownNames = Object.getOwnPropertyNames(type.prototype);\n if (\n 1 < ownNames.length ||\n \"constructor\" !== ownNames[0] ||\n type.prototype.__proto__ !== Object.prototype\n )\n return !1;\n }\n type = type.name || type.displayName;\n return \"string\" === typeof type && /^[A-Z]/.test(type);\n case \"object\":\n if (null != type)\n switch (getProperty(type, \"$$typeof\")) {\n case REACT_FORWARD_REF_TYPE:\n case REACT_MEMO_TYPE:\n return !0;\n }\n return !1;\n default:\n return !1;\n }\n };\n exports.performReactRefresh = function () {\n if (0 === pendingUpdates.length || isPerformingRefresh) return null;\n isPerformingRefresh = !0;\n try {\n var staleFamilies = new Set(),\n updatedFamilies = new Set(),\n updates = pendingUpdates;\n pendingUpdates = [];\n updates.forEach(function (_ref) {\n var family = _ref[0];\n _ref = _ref[1];\n var prevType = family.current;\n updatedFamiliesByType.set(prevType, family);\n updatedFamiliesByType.set(_ref, family);\n family.current = _ref;\n (prevType.prototype && prevType.prototype.isReactComponent) ||\n (_ref.prototype && _ref.prototype.isReactComponent)\n ? (_ref = !1)\n : ((prevType = allSignaturesByType.get(prevType)),\n (_ref = allSignaturesByType.get(_ref)),\n (_ref =\n (void 0 === prevType && void 0 === _ref) ||\n (void 0 !== prevType &&\n void 0 !== _ref &&\n computeFullKey(prevType) === computeFullKey(_ref) &&\n !_ref.forceReset)\n ? !0\n : !1));\n _ref ? updatedFamilies.add(family) : staleFamilies.add(family);\n });\n var update = {\n updatedFamilies: updatedFamilies,\n staleFamilies: staleFamilies\n };\n helpersByRendererID.forEach(function (helpers) {\n helpers.setRefreshHandler(resolveFamily);\n });\n var didError = !1,\n firstError = null,\n failedRootsSnapshot = cloneSet(failedRoots),\n mountedRootsSnapshot = cloneSet(mountedRoots),\n helpersByRootSnapshot = cloneMap(helpersByRoot);\n failedRootsSnapshot.forEach(function (root) {\n var helpers = helpersByRootSnapshot.get(root);\n if (void 0 === helpers)\n throw Error(\n \"Could not find helpers for a root. This is a bug in React Refresh.\"\n );\n failedRoots.has(root);\n if (null !== rootElements && rootElements.has(root)) {\n var element = rootElements.get(root);\n try {\n helpers.scheduleRoot(root, element);\n } catch (err) {\n didError || ((didError = !0), (firstError = err));\n }\n }\n });\n mountedRootsSnapshot.forEach(function (root) {\n var helpers = helpersByRootSnapshot.get(root);\n if (void 0 === helpers)\n throw Error(\n \"Could not find helpers for a root. This is a bug in React Refresh.\"\n );\n mountedRoots.has(root);\n try {\n helpers.scheduleRefresh(root, update);\n } catch (err) {\n didError || ((didError = !0), (firstError = err));\n }\n });\n if (didError) throw firstError;\n return update;\n } finally {\n isPerformingRefresh = !1;\n }\n };\n exports.register = register;\n exports.setSignature = setSignature;\n })();\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('./cjs/react-refresh-runtime.production.js');\n} else {\n module.exports = require('./cjs/react-refresh-runtime.development.js');\n}\n","/**\n * @license React\n * react-jsx-dev-runtime.development.js\n *\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\"use strict\";\n\"production\" !== process.env.NODE_ENV &&\n (function () {\n function getComponentNameFromType(type) {\n if (null == type) return null;\n if (\"function\" === typeof type)\n return type.$$typeof === REACT_CLIENT_REFERENCE\n ? null\n : type.displayName || type.name || null;\n if (\"string\" === typeof type) return type;\n switch (type) {\n case REACT_FRAGMENT_TYPE:\n return \"Fragment\";\n case REACT_PROFILER_TYPE:\n return \"Profiler\";\n case REACT_STRICT_MODE_TYPE:\n return \"StrictMode\";\n case REACT_SUSPENSE_TYPE:\n return \"Suspense\";\n case REACT_SUSPENSE_LIST_TYPE:\n return \"SuspenseList\";\n case REACT_ACTIVITY_TYPE:\n return \"Activity\";\n }\n if (\"object\" === typeof type)\n switch (\n (\"number\" === typeof type.tag &&\n console.error(\n \"Received an unexpected object in getComponentNameFromType(). This is likely a bug in React. Please file an issue.\"\n ),\n type.$$typeof)\n ) {\n case REACT_PORTAL_TYPE:\n return \"Portal\";\n case REACT_CONTEXT_TYPE:\n return type.displayName || \"Context\";\n case REACT_CONSUMER_TYPE:\n return (type._context.displayName || \"Context\") + \".Consumer\";\n case REACT_FORWARD_REF_TYPE:\n var innerType = type.render;\n type = type.displayName;\n type ||\n ((type = innerType.displayName || innerType.name || \"\"),\n (type = \"\" !== type ? \"ForwardRef(\" + type + \")\" : \"ForwardRef\"));\n return type;\n case REACT_MEMO_TYPE:\n return (\n (innerType = type.displayName || null),\n null !== innerType\n ? innerType\n : getComponentNameFromType(type.type) || \"Memo\"\n );\n case REACT_LAZY_TYPE:\n innerType = type._payload;\n type = type._init;\n try {\n return getComponentNameFromType(type(innerType));\n } catch (x) {}\n }\n return null;\n }\n function testStringCoercion(value) {\n return \"\" + value;\n }\n function checkKeyStringCoercion(value) {\n try {\n testStringCoercion(value);\n var JSCompiler_inline_result = !1;\n } catch (e) {\n JSCompiler_inline_result = !0;\n }\n if (JSCompiler_inline_result) {\n JSCompiler_inline_result = console;\n var JSCompiler_temp_const = JSCompiler_inline_result.error;\n var JSCompiler_inline_result$jscomp$0 =\n (\"function\" === typeof Symbol &&\n Symbol.toStringTag &&\n value[Symbol.toStringTag]) ||\n value.constructor.name ||\n \"Object\";\n JSCompiler_temp_const.call(\n JSCompiler_inline_result,\n \"The provided key is an unsupported type %s. This value must be coerced to a string before using it here.\",\n JSCompiler_inline_result$jscomp$0\n );\n return testStringCoercion(value);\n }\n }\n function getTaskName(type) {\n if (type === REACT_FRAGMENT_TYPE) return \"<>\";\n if (\n \"object\" === typeof type &&\n null !== type &&\n type.$$typeof === REACT_LAZY_TYPE\n )\n return \"<...>\";\n try {\n var name = getComponentNameFromType(type);\n return name ? \"<\" + name + \">\" : \"<...>\";\n } catch (x) {\n return \"<...>\";\n }\n }\n function getOwner() {\n var dispatcher = ReactSharedInternals.A;\n return null === dispatcher ? null : dispatcher.getOwner();\n }\n function UnknownOwner() {\n return Error(\"react-stack-top-frame\");\n }\n function hasValidKey(config) {\n if (hasOwnProperty.call(config, \"key\")) {\n var getter = Object.getOwnPropertyDescriptor(config, \"key\").get;\n if (getter && getter.isReactWarning) return !1;\n }\n return void 0 !== config.key;\n }\n function defineKeyPropWarningGetter(props, displayName) {\n function warnAboutAccessingKey() {\n specialPropKeyWarningShown ||\n ((specialPropKeyWarningShown = !0),\n console.error(\n \"%s: `key` is not a prop. Trying to access it will result in `undefined` being returned. If you need to access the same value within the child component, you should pass it as a different prop. (https://react.dev/link/special-props)\",\n displayName\n ));\n }\n warnAboutAccessingKey.isReactWarning = !0;\n Object.defineProperty(props, \"key\", {\n get: warnAboutAccessingKey,\n configurable: !0\n });\n }\n function elementRefGetterWithDeprecationWarning() {\n var componentName = getComponentNameFromType(this.type);\n didWarnAboutElementRef[componentName] ||\n ((didWarnAboutElementRef[componentName] = !0),\n console.error(\n \"Accessing element.ref was removed in React 19. ref is now a regular prop. It will be removed from the JSX Element type in a future release.\"\n ));\n componentName = this.props.ref;\n return void 0 !== componentName ? componentName : null;\n }\n function ReactElement(type, key, props, owner, debugStack, debugTask) {\n var refProp = props.ref;\n type = {\n $$typeof: REACT_ELEMENT_TYPE,\n type: type,\n key: key,\n props: props,\n _owner: owner\n };\n null !== (void 0 !== refProp ? refProp : null)\n ? Object.defineProperty(type, \"ref\", {\n enumerable: !1,\n get: elementRefGetterWithDeprecationWarning\n })\n : Object.defineProperty(type, \"ref\", { enumerable: !1, value: null });\n type._store = {};\n Object.defineProperty(type._store, \"validated\", {\n configurable: !1,\n enumerable: !1,\n writable: !0,\n value: 0\n });\n Object.defineProperty(type, \"_debugInfo\", {\n configurable: !1,\n enumerable: !1,\n writable: !0,\n value: null\n });\n Object.defineProperty(type, \"_debugStack\", {\n configurable: !1,\n enumerable: !1,\n writable: !0,\n value: debugStack\n });\n Object.defineProperty(type, \"_debugTask\", {\n configurable: !1,\n enumerable: !1,\n writable: !0,\n value: debugTask\n });\n Object.freeze && (Object.freeze(type.props), Object.freeze(type));\n return type;\n }\n function jsxDEVImpl(\n type,\n config,\n maybeKey,\n isStaticChildren,\n debugStack,\n debugTask\n ) {\n var children = config.children;\n if (void 0 !== children)\n if (isStaticChildren)\n if (isArrayImpl(children)) {\n for (\n isStaticChildren = 0;\n isStaticChildren < children.length;\n isStaticChildren++\n )\n validateChildKeys(children[isStaticChildren]);\n Object.freeze && Object.freeze(children);\n } else\n console.error(\n \"React.jsx: Static children should always be an array. You are likely explicitly calling React.jsxs or React.jsxDEV. Use the Babel transform instead.\"\n );\n else validateChildKeys(children);\n if (hasOwnProperty.call(config, \"key\")) {\n children = getComponentNameFromType(type);\n var keys = Object.keys(config).filter(function (k) {\n return \"key\" !== k;\n });\n isStaticChildren =\n 0 < keys.length\n ? \"{key: someKey, \" + keys.join(\": ..., \") + \": ...}\"\n : \"{key: someKey}\";\n didWarnAboutKeySpread[children + isStaticChildren] ||\n ((keys =\n 0 < keys.length ? \"{\" + keys.join(\": ..., \") + \": ...}\" : \"{}\"),\n console.error(\n 'A props object containing a \"key\" prop is being spread into JSX:\\n let props = %s;\\n <%s {...props} />\\nReact keys must be passed directly to JSX without using spread:\\n let props = %s;\\n <%s key={someKey} {...props} />',\n isStaticChildren,\n children,\n keys,\n children\n ),\n (didWarnAboutKeySpread[children + isStaticChildren] = !0));\n }\n children = null;\n void 0 !== maybeKey &&\n (checkKeyStringCoercion(maybeKey), (children = \"\" + maybeKey));\n hasValidKey(config) &&\n (checkKeyStringCoercion(config.key), (children = \"\" + config.key));\n if (\"key\" in config) {\n maybeKey = {};\n for (var propName in config)\n \"key\" !== propName && (maybeKey[propName] = config[propName]);\n } else maybeKey = config;\n children &&\n defineKeyPropWarningGetter(\n maybeKey,\n \"function\" === typeof type\n ? type.displayName || type.name || \"Unknown\"\n : type\n );\n return ReactElement(\n type,\n children,\n maybeKey,\n getOwner(),\n debugStack,\n debugTask\n );\n }\n function validateChildKeys(node) {\n isValidElement(node)\n ? node._store && (node._store.validated = 1)\n : \"object\" === typeof node &&\n null !== node &&\n node.$$typeof === REACT_LAZY_TYPE &&\n (\"fulfilled\" === node._payload.status\n ? isValidElement(node._payload.value) &&\n node._payload.value._store &&\n (node._payload.value._store.validated = 1)\n : node._store && (node._store.validated = 1));\n }\n function isValidElement(object) {\n return (\n \"object\" === typeof object &&\n null !== object &&\n object.$$typeof === REACT_ELEMENT_TYPE\n );\n }\n var React = require(\"react\"),\n REACT_ELEMENT_TYPE = Symbol.for(\"react.transitional.element\"),\n REACT_PORTAL_TYPE = Symbol.for(\"react.portal\"),\n REACT_FRAGMENT_TYPE = Symbol.for(\"react.fragment\"),\n REACT_STRICT_MODE_TYPE = Symbol.for(\"react.strict_mode\"),\n REACT_PROFILER_TYPE = Symbol.for(\"react.profiler\"),\n REACT_CONSUMER_TYPE = Symbol.for(\"react.consumer\"),\n REACT_CONTEXT_TYPE = Symbol.for(\"react.context\"),\n REACT_FORWARD_REF_TYPE = Symbol.for(\"react.forward_ref\"),\n REACT_SUSPENSE_TYPE = Symbol.for(\"react.suspense\"),\n REACT_SUSPENSE_LIST_TYPE = Symbol.for(\"react.suspense_list\"),\n REACT_MEMO_TYPE = Symbol.for(\"react.memo\"),\n REACT_LAZY_TYPE = Symbol.for(\"react.lazy\"),\n REACT_ACTIVITY_TYPE = Symbol.for(\"react.activity\"),\n REACT_CLIENT_REFERENCE = Symbol.for(\"react.client.reference\"),\n ReactSharedInternals =\n React.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE,\n hasOwnProperty = Object.prototype.hasOwnProperty,\n isArrayImpl = Array.isArray,\n createTask = console.createTask\n ? console.createTask\n : function () {\n return null;\n };\n React = {\n react_stack_bottom_frame: function (callStackForError) {\n return callStackForError();\n }\n };\n var specialPropKeyWarningShown;\n var didWarnAboutElementRef = {};\n var unknownOwnerDebugStack = React.react_stack_bottom_frame.bind(\n React,\n UnknownOwner\n )();\n var unknownOwnerDebugTask = createTask(getTaskName(UnknownOwner));\n var didWarnAboutKeySpread = {};\n exports.Fragment = REACT_FRAGMENT_TYPE;\n exports.jsxDEV = function (type, config, maybeKey, isStaticChildren) {\n var trackActualOwner =\n 1e4 > ReactSharedInternals.recentlyCreatedOwnerStacks++;\n return jsxDEVImpl(\n type,\n config,\n maybeKey,\n isStaticChildren,\n trackActualOwner\n ? Error(\"react-stack-top-frame\")\n : unknownOwnerDebugStack,\n trackActualOwner ? createTask(getTaskName(type)) : unknownOwnerDebugTask\n );\n };\n })();\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('./cjs/react-jsx-dev-runtime.production.js');\n} else {\n module.exports = require('./cjs/react-jsx-dev-runtime.development.js');\n}\n","import type React from 'react';\n\nexport const EditIcon: React.FC = () => {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"14.327\"\n height=\"14.323\"\n viewBox=\"0 0 14.327 14.323\"\n >\n <g\n id=\"pencil_2_\"\n data-name=\"pencil (2)\"\n transform=\"translate(0.254 0.25)\"\n >\n <path\n id=\"Path_6088\"\n data-name=\"Path 6088\"\n d=\"M.5,13.822a.439.439,0,0,1-.426-.546L.9,9.964a.44.44,0,0,1,.115-.2L10.307.47a1.614,1.614,0,0,1,2.279,0l.829.829a1.614,1.614,0,0,1,0,2.279l-9.29,9.29a.437.437,0,0,1-.2.115l-3.312.825a.406.406,0,0,1-.106.014ZM1.725,10.3l-.619,2.484L3.59,12.16l9.2-9.2a.734.734,0,0,0,0-1.036l-.829-.829a.734.734,0,0,0-1.036,0Zm2.09,2.263h0Zm0,0\"\n transform=\"translate(-0.063 0.001)\"\n fill=\"#9644F3\"\n stroke=\"#9644F3\"\n strokeWidth=\"0.5\"\n />\n <path\n id=\"Path_6089\"\n data-name=\"Path 6089\"\n d=\"M319.1,67.862a.437.437,0,0,1-.311-.129L316.3,65.247a.44.44,0,1,1,.622-.622l2.487,2.487a.439.439,0,0,1-.311.75Zm0,0\"\n transform=\"translate(-307.488 -62.724)\"\n fill=\"#9644F3\"\n stroke=\"#9644F3\"\n strokeWidth=\"0.5\"\n />\n <path\n id=\"Path_6090\"\n data-name=\"Path 6090\"\n d=\"M33.02,353.922a.436.436,0,0,1-.311-.129l-2.487-2.487a.44.44,0,0,1,.622-.622l2.487,2.487a.44.44,0,0,1-.311.751Zm0,0\"\n transform=\"translate(-29.268 -340.923)\"\n fill=\"#9644F3\"\n stroke=\"#9644F3\"\n strokeWidth=\"0.5\"\n />\n </g>\n </svg>\n );\n};","import type React from 'react';\n\nexport const SearchIcon: React.FC = () => (\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"11.002\" height=\"11.363\" viewBox=\"0 0 11.002 11.363\">\n <g id=\"Group_160786\" data-name=\"Group 160786\" transform=\"translate(0.25 0.25)\">\n <path id=\"search_9_\" data-name=\"search (9)\" d=\"M10.9,9.5,8.421,6.92A4.211,4.211,0,1,0,5.2,8.425,4.167,4.167,0,0,0,7.61,7.663l2.5,2.6A.549.549,0,1,0,10.9,9.5ZM5.2,1.1A3.114,3.114,0,1,1,2.083,4.212,3.117,3.117,0,0,1,5.2,1.1Z\" transform=\"translate(-0.769 0.215)\" fill=\"#9fa5d3\" />\n <path id=\"search_9_-_Outline\" data-name=\"search (9) - Outline\" d=\"M10.508,10.683a.793.793,0,0,1-.576-.245L7.574,7.987A4.423,4.423,0,0,1,5.2,8.675a4.467,4.467,0,1,1,3.556-1.77L11.084,9.33a.8.8,0,0,1-.576,1.353ZM7.641,7.335l2.651,2.757a.293.293,0,0,0,.216.092.3.3,0,0,0,.216-.507L8.084,6.932l.145-.172a3.969,3.969,0,1,0-.763.7ZM5.2,7.576A3.364,3.364,0,1,1,8.56,4.212,3.367,3.367,0,0,1,5.2,7.576Zm0-6.227A2.864,2.864,0,1,0,8.06,4.212,2.867,2.867,0,0,0,5.2,1.349Z\" transform=\"translate(-0.769 0.215)\" fill=\"#9fa5d3\" />\n <path id=\"search_9_-_Outline-2\" data-name=\"search (9) - Outline\" d=\"M10.223,10.363a.758.758,0,0,1-.551-.234L7.295,7.656a4.388,4.388,0,0,1-2.383.7,4.432,4.432,0,1,1,3.51-1.732l2.352,2.446a.764.764,0,0,1-.551,1.294ZM7.352,7.1l2.63,2.735a.335.335,0,1,0,.482-.464L7.847,6.645,7.971,6.5a4,4,0,1,0-.77.7Zm-2.441.16A3.328,3.328,0,1,1,8.24,3.927,3.332,3.332,0,0,1,4.911,7.256Zm0-6.227a2.9,2.9,0,1,0,2.9,2.9A2.9,2.9,0,0,0,4.911,1.029Z\" transform=\"translate(-0.484 0.5)\" fill=\"#9fa5d3\" />\n <path id=\"search_9_-_Outline_-_Outline\" data-name=\"search (9) - Outline - Outline\" d=\"M10.223,10.613a1.006,1.006,0,0,1-.731-.311L7.254,7.974A4.676,4.676,0,1,1,9.588,3.927,4.7,4.7,0,0,1,8.747,6.6L10.954,8.9a1.014,1.014,0,0,1-.731,1.717ZM7.383,6.768l2.778,2.889a.085.085,0,1,0,.122-.117L7.51,6.656l.269-.32A3.754,3.754,0,1,0,7.057,7Zm-2.472.738A3.578,3.578,0,1,1,8.49,3.927,3.582,3.582,0,0,1,4.911,7.506Zm0-6.227A2.649,2.649,0,1,0,7.56,3.927,2.652,2.652,0,0,0,4.911,1.279Z\" transform=\"translate(-0.484 0.5)\" fill=\"#9fa5d3\" />\n </g>\n </svg>\n);","export const AddIcon = () => (\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"10\" height=\"10\" viewBox=\"0 0 10 10\" fill=\"none\">\n <path d=\"M9.66667 5.66668H5.66667V9.66668H4.33333V5.66668H0.333333V4.33334H4.33333V0.333344H5.66667V4.33334H9.66667V5.66668Z\" fill=\"white\" />\n </svg>\n);","import { default as MuiFilterAltOffOutlinedIcon } from '@mui/icons-material/FilterAltOffOutlined';\nimport type { SvgIconProps } from '@mui/material';\n\nexport const ClearFilterIcon = (props: SvgIconProps) => {\n return <MuiFilterAltOffOutlinedIcon {...props} />;\n};","export const CloseIcon = () => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"12\"\n height=\"12\"\n viewBox=\"0 0 12 12\"\n fill=\"none\"\n >\n <path\n className=\"fillPath\"\n d=\"M11.6667 1.175L10.4917 0L5.83333 4.65833L1.175 0L0 1.175L4.65833 5.83333L0 10.4917L1.175 11.6667L5.83333 7.00833L10.4917 11.6667L11.6667 10.4917L7.00833 5.83333L11.6667 1.175Z\"\n fill=\"#9FA5D3\"\n />\n </svg>\n);\n","export const ColumnSettingsIcon = () => (\n <svg xmlns=\"http://www.w3.org/2000/svg\" id=\"edit-table_1_\" data-name=\"edit-table (1)\" width=\"14.501\" height=\"14.501\" viewBox=\"0 0 14.501 14.501\">\n <path id=\"Path_6032\" data-name=\"Path 6032\" d=\"M179.7,259.5a.3.3,0,0,0-.08.145l-.659,2.8a.3.3,0,0,0,.294.371.277.277,0,0,0,.069-.008l2.794-.659a.3.3,0,0,0,.144-.08l3.952-3.952-2.564-2.564Zm0,0\" transform=\"translate(-173.888 -248.313)\" fill=\"#9fa5d3\" />\n <path id=\"Path_6033\" data-name=\"Path 6033\" d=\"M371.246,180.568l-.854-.854a1.237,1.237,0,0,0-1.709,0l-1.175,1.175,2.564,2.564,1.175-1.175a1.209,1.209,0,0,0,0-1.709Zm0,0\" transform=\"translate(-357.099 -174.291)\" fill=\"#9fa5d3\" />\n <path id=\"Path_6034\" data-name=\"Path 6034\" d=\"M4.133,11.48H1.511a.3.3,0,0,1-.3-.3V9.667H5.74a.6.6,0,0,0,.6-.6V6.646H8.8a.6.6,0,0,0,0-1.208H6.344V3.625h3.927v.6a.6.6,0,1,0,1.208,0V1.36A1.361,1.361,0,0,0,10.12,0H1.36A1.361,1.361,0,0,0,0,1.36v9.818a1.513,1.513,0,0,0,1.51,1.51H4.133a.6.6,0,0,0,0-1.208Zm1-3.021H1.209V6.646H5.136Zm0-3.021H1.209V3.625H5.136Zm0,0\" transform=\"translate(0 0)\" fill=\"#9fa5d3\" />\n </svg>\n);","export const DoubleArrow = () => (\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"9.519\" height=\"9.751\" viewBox=\"0 0 9.519 9.751\">\n <path id=\"fast-forward\" d=\"M32.59,97.751a.7.7,0,0,1-.493-1.189l3.687-3.687L32.1,89.188a.7.7,0,0,1,.985-.985l4.179,4.179a.7.7,0,0,1,0,.985l-4.179,4.179A.694.694,0,0,1,32.59,97.751Zm-3.454-.2,4.179-4.179a.7.7,0,0,0,0-.985L29.135,88.2a.7.7,0,0,0-.985.985l3.687,3.687L28.15,96.562a.7.7,0,0,0,.985.985Z\" transform=\"translate(-27.946 -87.999)\" fill=\"#9fa5d3\" />\n </svg>\n);","export const DownloadIcon = () => (\n <svg xmlns=\"http://www.w3.org/2000/svg\" id=\"direct-download\" width=\"14.154\" height=\"11.795\" viewBox=\"0 0 14.154 11.795\">\n <path className=\"fillPath\" id=\"Path_6246\" data-name=\"Path 6246\" d=\"M9.538,10.257a.442.442,0,0,1-.32-.137l-3.1-3.244a.443.443,0,0,1,.32-.748H8.064V2.737A.738.738,0,0,1,8.8,2h1.474a.738.738,0,0,1,.737.737V6.128h1.622a.443.443,0,0,1,.32.748l-3.1,3.244A.442.442,0,0,1,9.538,10.257Z\" transform=\"translate(-2.461 -2)\" fill=\"#9fa5d3\" />\n <path className=\"fillPath\" id=\"Path_6247\" data-name=\"Path 6247\" d=\"M13.122,20.359H1.032A1.033,1.033,0,0,1,0,19.327v-.295A1.033,1.033,0,0,1,1.032,18h12.09a1.033,1.033,0,0,1,1.032,1.032v.295A1.033,1.033,0,0,1,13.122,20.359Z\" transform=\"translate(0 -8.564)\" fill=\"#9fa5d3\" />\n </svg>\n);","import { default as MuiExpandMoreIcon } from '@mui/icons-material/ExpandMore';\nimport type { SvgIconProps } from '@mui/material';\n\nexport const ExpandMoreIcon = (props: SvgIconProps) => {\n return <MuiExpandMoreIcon {...props} />;\n};","export const ListViewIcon = () => (\n <svg xmlns=\"http://www.w3.org/2000/svg\" id=\"list-text\" width=\"17.127\" height=\"11.777\" viewBox=\"0 0 17.127 11.777\">\n <g id=\"Group_160857\" data-name=\"Group 160857\" transform=\"translate(3.216 0)\">\n <g id=\"Group_160856\" data-name=\"Group 160856\" transform=\"translate(0 0)\">\n <path className=\"fillPath\" id=\"Path_2823\" data-name=\"Path 2823\" d=\"M107.951,80H97.25a1.07,1.07,0,0,0,0,2.14h10.7a1.07,1.07,0,0,0,0-2.14Z\" transform=\"translate(-96.18 -80)\" fill=\"#fff\" />\n </g>\n </g>\n <g id=\"Group_160859\" data-name=\"Group 160859\" transform=\"translate(0 0.005)\">\n <g id=\"Group_160858\" data-name=\"Group 160858\" transform=\"translate(0 0)\">\n <path className=\"fillPath\" id=\"Path_2824\" data-name=\"Path 2824\" d=\"M2.147,81.2a1.07,1.07,0,0,0-2.14,0,.911.911,0,0,0,0,.209.965.965,0,0,0,.059.2,1.242,1.242,0,0,0,.1.182A.979.979,0,0,0,.3,81.96a.947.947,0,0,0,.161.128.871.871,0,0,0,.182.1.883.883,0,0,0,.225.08.939.939,0,0,0,.209,0,1.07,1.07,0,0,0,.754-.31.979.979,0,0,0,.134-.166,1.242,1.242,0,0,0,.1-.182.993.993,0,0,0,.08-.2A.911.911,0,0,0,2.147,81.2Z\" transform=\"translate(-0.001 -80.135)\" fill=\"#fff\" />\n </g>\n </g>\n <g id=\"Group_160861\" data-name=\"Group 160861\" transform=\"translate(0.006 4.82)\">\n <g id=\"Group_160860\" data-name=\"Group 160860\" transform=\"translate(0 0)\">\n <path className=\"fillPath\" id=\"Path_2825\" data-name=\"Path 2825\" d=\"M2.32,225.2a.915.915,0,0,0,0-.209.866.866,0,0,0-.08-.2,1.071,1.071,0,0,0-.1-.187A.771.771,0,0,0,2,224.446,1.07,1.07,0,0,0,.18,225.2a1.067,1.067,0,0,0,.177.594,1.029,1.029,0,0,0,.139.16.781.781,0,0,0,.161.134.868.868,0,0,0,.182.1.909.909,0,0,0,.2.059.89.89,0,0,0,.209.021.912.912,0,0,0,.209,0,.869.869,0,0,0,.2-.059.894.894,0,0,0,.187-.1A.781.781,0,0,0,2,225.976a.782.782,0,0,0,.134-.16.861.861,0,0,0,.1-.182.906.906,0,0,0,.08-.225A.885.885,0,0,0,2.32,225.2Z\" transform=\"translate(-0.18 -224.135)\" fill=\"#fff\" />\n </g>\n </g>\n <g id=\"Group_160863\" data-name=\"Group 160863\" transform=\"translate(0.006 9.635)\">\n <g id=\"Group_160862\" data-name=\"Group 160862\">\n <path className=\"fillPath\" id=\"Path_2826\" data-name=\"Path 2826\" d=\"M2.318,369.2a.919.919,0,0,0,0-.209.909.909,0,0,0-.08-.2,1.24,1.24,0,0,0-.1-.182.78.78,0,0,0-.134-.16,1.07,1.07,0,0,0-1.509,0,.78.78,0,0,0-.134.16,1.24,1.24,0,0,0-.1.182.875.875,0,0,0-.059.2.92.92,0,0,0-.021.209,1.07,1.07,0,0,0,.316.754.784.784,0,0,0,.161.134.869.869,0,0,0,.182.1.907.907,0,0,0,.2.059.885.885,0,0,0,.209.021.907.907,0,0,0,.209,0,.865.865,0,0,0,.2-.059.892.892,0,0,0,.187-.1A.778.778,0,0,0,2,369.976a.782.782,0,0,0,.134-.161.855.855,0,0,0,.1-.182.909.909,0,0,0,.08-.225A.885.885,0,0,0,2.318,369.2Z\" transform=\"translate(-0.178 -368.135)\" fill=\"#fff\" />\n </g>\n </g>\n <g id=\"Group_160865\" data-name=\"Group 160865\" transform=\"translate(3.216 4.815)\">\n <g id=\"Group_160864\" data-name=\"Group 160864\">\n <path className=\"fillPath\" id=\"Path_2827\" data-name=\"Path 2827\" d=\"M109.021,224H97.25a1.07,1.07,0,0,0,0,2.14h11.771a1.07,1.07,0,0,0,0-2.14Z\" transform=\"translate(-96.18 -224)\" fill=\"#fff\" />\n </g>\n </g>\n <g id=\"Group_160867\" data-name=\"Group 160867\" transform=\"translate(3.216 9.631)\">\n <g id=\"Group_160866\" data-name=\"Group 160866\" transform=\"translate(0 0)\">\n <path className=\"fillPath\" id=\"Path_2828\" data-name=\"Path 2828\" d=\"M104.206,368H97.25a1.07,1.07,0,0,0,0,2.14h6.956a1.07,1.07,0,0,0,0-2.14Z\" transform=\"translate(-96.18 -368)\" fill=\"#fff\" />\n </g>\n </g>\n </svg>\n);","export const MoreIcon = () => (\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"4\" height=\"16\" viewBox=\"0 0 4 16\" fill=\"none\">\n <path d=\"M2 4C3.1 4 4 3.1 4 2C4 0.9 3.1 0 2 0C0.9 0 0 0.9 0 2C0 3.1 0.9 4 2 4ZM2 6C0.9 6 0 6.9 0 8C0 9.1 0.9 10 2 10C3.1 10 4 9.1 4 8C4 6.9 3.1 6 2 6ZM2 12C0.9 12 0 12.9 0 14C0 15.1 0.9 16 2 16C3.1 16 4 15.1 4 14C4 12.9 3.1 12 2 12Z\" fill=\"#9FA5D3\" />\n </svg>\n);","import type React from 'react';\n\nconst PaginationBackwardIcon: React.FC = (): React.JSX.Element => (\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"13\" height=\"12\" viewBox=\"0 0 13 12\" fill=\"none\">\n <path d=\"M12.41 10.59L7.82 6L12.41 1.41L11 0L5 6L11 12L12.41 10.59ZM0 0H2V12H0V0Z\" fill=\"#9FA5D3\" />\n </svg>\n);\n\nPaginationBackwardIcon.displayName = 'PaginationBackwardIcon';\n\nexport { PaginationBackwardIcon };","import type React from 'react';\n\nconst PaginationForwardIcon: React.FC = (): React.JSX.Element => (\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"13\" height=\"12\" viewBox=\"0 0 13 12\" fill=\"none\">\n <path d=\"M0.500004 1.41L5.09 6L0.500004 10.59L1.91 12L7.91 6L1.91 0L0.500004 1.41ZM12.91 12H10.91L10.91 0H12.91L12.91 12Z\" fill=\"#9FA5D3\" />\n </svg>\n);\n\nPaginationForwardIcon.displayName = 'PaginationForwardIcon';\n\nexport { PaginationForwardIcon };","import type React from 'react';\n\nconst PaginationNextIcon: React.FC = (): React.JSX.Element => (\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"8\" height=\"12\" viewBox=\"0 0 8 12\" fill=\"none\">\n <path d=\"M1.91 0L0.5 1.41L5.08 6L0.5 10.59L1.91 12L7.91 6L1.91 0Z\" fill=\"#9FA5D3\" />\n </svg>\n);\n\nPaginationNextIcon.displayName = 'PaginationNextIcon';\n\nexport { PaginationNextIcon };","import type React from 'react';\n\nconst PaginationPrevIcon: React.FC = (): React.JSX.Element => (\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"8\" height=\"12\" viewBox=\"0 0 8 12\" fill=\"none\">\n <path d=\"M6 12L7.41 10.59L2.83 6L7.41 1.41L6 0L0 6L6 12Z\" fill=\"#9FA5D3\" />\n </svg>\n);\n\nPaginationPrevIcon.displayName = 'PaginationPrevIcon';\n\nexport { PaginationPrevIcon };","export const SearchIcon = () => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"11.002\"\n height=\"11.363\"\n viewBox=\"0 0 11.002 11.363\"\n >\n <g\n id=\"Group_160786\"\n data-name=\"Group 160786\"\n transform=\"translate(0.25 0.25)\"\n >\n <path\n id=\"search_9_\"\n data-name=\"search (9)\"\n d=\"M10.9,9.5,8.421,6.92A4.211,4.211,0,1,0,5.2,8.425,4.167,4.167,0,0,0,7.61,7.663l2.5,2.6A.549.549,0,1,0,10.9,9.5ZM5.2,1.1A3.114,3.114,0,1,1,2.083,4.212,3.117,3.117,0,0,1,5.2,1.1Z\"\n transform=\"translate(-0.769 0.215)\"\n fill=\"#9fa5d3\"\n />\n <path\n id=\"search_9_-_Outline\"\n data-name=\"search (9) - Outline\"\n d=\"M10.508,10.683a.793.793,0,0,1-.576-.245L7.574,7.987A4.423,4.423,0,0,1,5.2,8.675a4.467,4.467,0,1,1,3.556-1.77L11.084,9.33a.8.8,0,0,1-.576,1.353ZM7.641,7.335l2.651,2.757a.293.293,0,0,0,.216.092.3.3,0,0,0,.216-.507L8.084,6.932l.145-.172a3.969,3.969,0,1,0-.763.7ZM5.2,7.576A3.364,3.364,0,1,1,8.56,4.212,3.367,3.367,0,0,1,5.2,7.576Zm0-6.227A2.864,2.864,0,1,0,8.06,4.212,2.867,2.867,0,0,0,5.2,1.349Z\"\n transform=\"translate(-0.769 0.215)\"\n fill=\"#9fa5d3\"\n />\n <path\n id=\"search_9_-_Outline-2\"\n data-name=\"search (9) - Outline\"\n d=\"M10.223,10.363a.758.758,0,0,1-.551-.234L7.295,7.656a4.388,4.388,0,0,1-2.383.7,4.432,4.432,0,1,1,3.51-1.732l2.352,2.446a.764.764,0,0,1-.551,1.294ZM7.352,7.1l2.63,2.735a.335.335,0,1,0,.482-.464L7.847,6.645,7.971,6.5a4,4,0,1,0-.77.7Zm-2.441.16A3.328,3.328,0,1,1,8.24,3.927,3.332,3.332,0,0,1,4.911,7.256Zm0-6.227a2.9,2.9,0,1,0,2.9,2.9A2.9,2.9,0,0,0,4.911,1.029Z\"\n transform=\"translate(-0.484 0.5)\"\n fill=\"#9fa5d3\"\n />\n <path\n id=\"search_9_-_Outline_-_Outline\"\n data-name=\"search (9) - Outline - Outline\"\n d=\"M10.223,10.613a1.006,1.006,0,0,1-.731-.311L7.254,7.974A4.676,4.676,0,1,1,9.588,3.927,4.7,4.7,0,0,1,8.747,6.6L10.954,8.9a1.014,1.014,0,0,1-.731,1.717ZM7.383,6.768l2.778,2.889a.085.085,0,1,0,.122-.117L7.51,6.656l.269-.32A3.754,3.754,0,1,0,7.057,7Zm-2.472.738A3.578,3.578,0,1,1,8.49,3.927,3.582,3.582,0,0,1,4.911,7.506Zm0-6.227A2.649,2.649,0,1,0,7.56,3.927,2.652,2.652,0,0,0,4.911,1.279Z\"\n transform=\"translate(-0.484 0.5)\"\n fill=\"#9fa5d3\"\n />\n </g>\n </svg>\n);\n","import type React from 'react';\n\nconst SortAscIcon: React.FC = (): React.JSX.Element => (\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"11.239\" height=\"10.416\" viewBox=\"0 0 11.239 10.416\">\n <g id=\"sort_1_\" data-name=\"sort (1)\" opacity=\"0.6\">\n <g id=\"Group_162906\" data-name=\"Group 162906\" transform=\"translate(4.66 9.046)\">\n <path id=\"Path_6298\" data-name=\"Path 6298\" d=\"M16.33,3H10.848a.518.518,0,0,0-.548.548.518.518,0,0,0,.548.548H16.33a.518.518,0,0,0,.548-.548A.549.549,0,0,0,16.33,3Z\" transform=\"translate(-10.3 -3)\" />\n </g>\n <g id=\"Group_162907\" data-name=\"Group 162907\" transform=\"translate(0 0)\">\n <path id=\"Path_6299\" data-name=\"Path 6299\" d=\"M4.541,15.5a.5.5,0,0,0-.384.164L1.964,17.857a.543.543,0,0,0,.768.768l2.193-2.193a.53.53,0,0,0,0-.768A.592.592,0,0,0,4.541,15.5Z\" transform=\"translate(-1.8 -15.5)\" />\n </g>\n <g id=\"Group_162908\" data-name=\"Group 162908\" transform=\"translate(2.193 0)\">\n <path id=\"Path_6300\" data-name=\"Path 6300\" d=\"M6.348,2.5a.518.518,0,0,0-.548.548v9.32a.548.548,0,1,0,1.1,0V3.048A.549.549,0,0,0,6.348,2.5Z\" transform=\"translate(-5.8 -2.5)\" />\n </g>\n <g id=\"Group_162909\" data-name=\"Group 162909\" transform=\"translate(4.66 6.305)\">\n <path id=\"Path_6301\" data-name=\"Path 6301\" d=\"M15.234,8H10.848a.548.548,0,0,0,0,1.1h4.386a.518.518,0,0,0,.548-.548A.549.549,0,0,0,15.234,8Z\" transform=\"translate(-10.3 -8)\" />\n </g>\n <g id=\"Group_162910\" data-name=\"Group 162910\" transform=\"translate(4.66 3.563)\">\n <path id=\"Path_6302\" data-name=\"Path 6302\" d=\"M14.138,13H10.848a.548.548,0,0,0,0,1.1h3.289a.518.518,0,0,0,.548-.548A.549.549,0,0,0,14.138,13Z\" transform=\"translate(-10.3 -13)\" />\n </g>\n <g id=\"Group_162911\" data-name=\"Group 162911\" transform=\"translate(4.66 0.822)\">\n <path id=\"Path_6303\" data-name=\"Path 6303\" d=\"M13.041,18H10.848a.548.548,0,0,0,0,1.1h2.193a.518.518,0,0,0,.548-.548A.549.549,0,0,0,13.041,18Z\" transform=\"translate(-10.3 -18)\" />\n </g>\n </g>\n </svg>\n);\n\nSortAscIcon.displayName = 'SortAscIcon';\n\nexport { SortAscIcon };","import type React from 'react';\n\nconst SortDescIcon: React.FC = (): React.JSX.Element => (\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"11.239\" height=\"10.416\" viewBox=\"0 0 11.239 10.416\">\n <g id=\"sort_1_\" data-name=\"sort (1)\" opacity=\"0.6\">\n <g id=\"Group_162906\" data-name=\"Group 162906\" transform=\"translate(4.66 0.274)\">\n <path id=\"Path_6298\" data-name=\"Path 6298\" d=\"M16.33,4.1H10.848a.518.518,0,0,1-.548-.548A.518.518,0,0,1,10.848,3H16.33a.518.518,0,0,1,.548.548A.549.549,0,0,1,16.33,4.1Z\" transform=\"translate(-10.3 -3)\" />\n </g>\n <g id=\"Group_162907\" data-name=\"Group 162907\" transform=\"translate(0 7.127)\">\n <path id=\"Path_6299\" data-name=\"Path 6299\" d=\"M4.541,18.789a.5.5,0,0,1-.384-.164L1.964,16.432a.543.543,0,0,1,.768-.768l2.193,2.193a.53.53,0,0,1,0,.768A.592.592,0,0,1,4.541,18.789Z\" transform=\"translate(-1.8 -15.5)\" />\n </g>\n <g id=\"Group_162908\" data-name=\"Group 162908\" transform=\"translate(2.193 0)\">\n <path id=\"Path_6300\" data-name=\"Path 6300\" d=\"M6.348,12.916a.518.518,0,0,1-.548-.548V3.048a.548.548,0,1,1,1.1,0v9.32A.549.549,0,0,1,6.348,12.916Z\" transform=\"translate(-5.8 -2.5)\" />\n </g>\n <g id=\"Group_162909\" data-name=\"Group 162909\" transform=\"translate(4.66 3.015)\">\n <path id=\"Path_6301\" data-name=\"Path 6301\" d=\"M15.234,9.1H10.848a.548.548,0,0,1,0-1.1h4.386a.518.518,0,0,1,.548.548A.549.549,0,0,1,15.234,9.1Z\" transform=\"translate(-10.3 -8)\" />\n </g>\n <g id=\"Group_162910\" data-name=\"Group 162910\" transform=\"translate(4.66 5.756)\">\n <path id=\"Path_6302\" data-name=\"Path 6302\" d=\"M14.138,14.1H10.848a.548.548,0,0,1,0-1.1h3.289a.518.518,0,0,1,.548.548A.549.549,0,0,1,14.138,14.1Z\" transform=\"translate(-10.3 -13)\" />\n </g>\n <g id=\"Group_162911\" data-name=\"Group 162911\" transform=\"translate(4.66 8.498)\">\n <path id=\"Path_6303\" data-name=\"Path 6303\" d=\"M13.041,19.1H10.848a.548.548,0,0,1,0-1.1h2.193a.518.518,0,0,1,.548.548A.549.549,0,0,1,13.041,19.1Z\" transform=\"translate(-10.3 -18)\" />\n </g>\n </g>\n </svg>\n);\n\nSortDescIcon.displayName = 'SortDescIcon';\n\nexport { SortDescIcon };","export const TileViewIcon = () => (\n <svg xmlns=\"http://www.w3.org/2000/svg\" id=\"visualization\" width=\"11.777\" height=\"11.777\" viewBox=\"0 0 11.777 11.777\">\n <g id=\"Group_160869\" data-name=\"Group 160869\">\n <g id=\"Group_160868\" data-name=\"Group 160868\">\n <path className=\"fillPath\" id=\"Path_2829\" data-name=\"Path 2829\" d=\"M4.316,0H1.005A1.006,1.006,0,0,0,0,1.005v3.31A1.006,1.006,0,0,0,1.005,5.321h3.31A1.006,1.006,0,0,0,5.321,4.316V1.005A1.006,1.006,0,0,0,4.316,0Z\" fill=\"#9fa5d3\" />\n <path className=\"fillPath\" id=\"Path_2830\" data-name=\"Path 2830\" d=\"M284.981,0h-3.31a1.006,1.006,0,0,0-1.005,1.005v3.31a1.006,1.006,0,0,0,1.005,1.005h3.31a1.006,1.006,0,0,0,1.005-1.005V1.005A1.006,1.006,0,0,0,284.981,0Z\" transform=\"translate(-274.209)\" fill=\"#9fa5d3\" />\n <path className=\"fillPath\" id=\"Path_2831\" data-name=\"Path 2831\" d=\"M4.316,280.665H1.005A1.006,1.006,0,0,0,0,281.67v3.31a1.006,1.006,0,0,0,1.005,1.005h3.31a1.006,1.006,0,0,0,1.005-1.005v-3.31A1.006,1.006,0,0,0,4.316,280.665Z\" transform=\"translate(0 -274.209)\" fill=\"#9fa5d3\" />\n <path className=\"fillPath\" id=\"Path_2832\" data-name=\"Path 2832\" d=\"M284.981,280.665h-3.31a1.006,1.006,0,0,0-1.005,1.005v3.31a1.006,1.006,0,0,0,1.005,1.005h3.31a1.006,1.006,0,0,0,1.005-1.005v-3.31A1.006,1.006,0,0,0,284.981,280.665Z\" transform=\"translate(-274.209 -274.209)\" fill=\"#9fa5d3\" />\n </g>\n </g>\n </svg>\n);","import type React from 'react';\nimport { useState } from 'react';\n\nimport {\n Accordion as MuiAccordion,\n AccordionSummary as MuiAccordionSummary,\n AccordionDetails as MuiAccordionDetails,\n type AccordionProps as MuiAccordionProps,\n} from '@mui/material';\n\nimport { ExpandMoreIcon } from '../../assets/svg';\n\nexport interface AccordionProps extends Omit<MuiAccordionProps, 'children' | 'content'> {\n summaryContent: React.ReactNode;\n content: React.ReactNode;\n defaultExpanded?: boolean;\n disabled?: boolean;\n}\n\nconst Accordion: React.FC<AccordionProps> = ({\n summaryContent,\n content,\n defaultExpanded = false,\n disabled = false,\n ...restProps\n}) => {\n const [expanded, setExpanded] = useState<boolean>(defaultExpanded);\n\n return (\n <MuiAccordion\n expanded={expanded}\n onChange={(_, isExpanded) => setExpanded(isExpanded)}\n disabled={disabled}\n {...restProps}\n >\n <MuiAccordionSummary expandIcon={<ExpandMoreIcon />}>\n {summaryContent}\n </MuiAccordionSummary>\n <MuiAccordionDetails>{content}</MuiAccordionDetails>\n </MuiAccordion>\n );\n};\n\nAccordion.displayName = 'Accordion';\n\nexport default Accordion;\n","import type React from 'react';\n\nimport { Avatar as MuiAvatar, type AvatarProps as MuiAvatarProps } from '@mui/material';\n\nconst Avatar: React.FC<MuiAvatarProps> = ({\n children,\n ...restProps\n}) => {\n return (\n <MuiAvatar {...restProps}>\n {children}\n </MuiAvatar>\n );\n};\n\nAvatar.displayName = 'Avatar';\n\nexport default Avatar;\n","import type React from 'react';\n\nimport { AvatarGroup as MuiAvatarGroup, type AvatarGroupProps as MuiAvatarGroupProps } from '@mui/material';\nexport interface AvatarGroupProps extends MuiAvatarGroupProps {\n children: React.ReactNode;\n}\n\nconst AvatarGroup: React.FC<AvatarGroupProps> = ({\n children,\n ...restProps\n}) => {\n return (\n <MuiAvatarGroup {...restProps}>\n {children}\n </MuiAvatarGroup>\n );\n};\n\nAvatarGroup.displayName = 'AvatarGroup';\n\nexport default AvatarGroup;\n","import type React from 'react';\nimport type { CSSProperties } from 'react';\n\nimport {\n Avatar as MuiAvatar,\n type AvatarProps as MuiAvatarProps,\n styled,\n Box\n} from '@mui/material';\n\nimport { Style } from './style';\n\nimport { Tooltip } from '../toolTip';\n\nexport interface CustomAvatarProps extends MuiAvatarProps {\n className?: string;\n tooltipTitle?: string;\n background?: string;\n sx?: CSSProperties;\n statusDotColor: string;\n}\n\nconst Avatar: React.FC<CustomAvatarProps> = ({\n className = '',\n tooltipTitle = '',\n background = '',\n statusDotColor = '',\n children,\n sx = {},\n ...restProps\n}) => {\n return (\n <Box className={`avatarContainer ${className}`}>\n <MuiAvatar {...restProps} sx={{ ...sx, background }}>\n {children}\n </MuiAvatar>\n\n <Box className={`statusDotContainer ${className}`}>\n <Tooltip title={tooltipTitle} arrow>\n <Box\n className=\"statusDot\"\n sx={{ background: statusDotColor }}\n />\n </Tooltip>\n </Box>\n </Box>\n );\n};\n\nAvatar.displayName = 'Avatar';\n\nexport default styled(Avatar)(Style);\n","export const Style = () => ({\n '.avatarContainer': {\n position: 'relative',\n },\n '.statusDot': {\n width: '7px',\n height: '7px',\n borderRadius: '50%',\n },\n '.statusDotContainer': {\n width: '5px',\n height: '5px',\n borderRadius: '5px',\n position: 'relative',\n bottom: '3px',\n '&.user': {\n left: '16px',\n },\n '&.group': {\n left: '19px',\n },\n }\n});\n","import type React from 'react';\nimport type { CSSProperties } from 'react';\n\nimport { Avatar as MuiAvatar, Typography } from '@mui/material';\n\nimport { getFormattedName } from '../../utils/global';\nexport interface AvatarTitleProps {\n img?: string;\n background?: string;\n name: string;\n color?: string;\n onClick?: (event: React.MouseEvent<HTMLDivElement>) => void;\n className?: string;\n sx?: CSSProperties;\n}\n\nconst AvatarTitle: React.FC<AvatarTitleProps> = ({\n img = '',\n background = '',\n name = '',\n color = '',\n onClick = () => { },\n className = '',\n sx = {},\n}) => {\n const NAME = getFormattedName(name)\n return (\n <MuiAvatar\n src={img}\n className={`avatar-title-wrapper ${className}`}\n alt={NAME}\n sx={{ ...sx, background: background }}\n onClick={onClick}\n >\n <Typography\n variant=\"body1\"\n className=\"avatar-title-typography\"\n sx={{ color: color }}\n noWrap\n >\n {NAME}\n </Typography>\n </MuiAvatar>\n );\n};\n\nAvatarTitle.displayName = 'AvatarTitle';\n\nexport default AvatarTitle;\n","import type React from 'react';\n\nimport { Badge as MuiBadge } from '@mui/material';\nimport type { BadgeProps as MuiBadgeProps } from '@mui/material/Badge';\n\nexport interface BadgeProps extends Omit<MuiBadgeProps, 'color' | 'variant'> {\n color?: 'default' | 'primary' | 'secondary' | 'error' | 'info' | 'success' | 'warning';\n badgeContent?: React.ReactNode;\n variant?: MuiBadgeProps['variant'];\n showZero?: boolean;\n invisible?: boolean;\n overlap?: MuiBadgeProps['overlap'];\n anchorOrigin?: {\n vertical: 'top' | 'bottom';\n horizontal: 'left' | 'right';\n };\n className?: string;\n children?: React.ReactNode;\n}\n\nconst Badge: React.FC<BadgeProps> = ({\n color = 'secondary',\n badgeContent = 0,\n variant = 'dot',\n showZero = true,\n invisible = false,\n overlap = 'circular',\n anchorOrigin = { vertical: 'top', horizontal: 'right' },\n className = '',\n children,\n}) => {\n return (\n <MuiBadge\n color={color}\n badgeContent={badgeContent}\n variant={variant}\n showZero={showZero}\n invisible={invisible}\n overlap={overlap}\n anchorOrigin={anchorOrigin}\n className={className}\n >\n {children}\n </MuiBadge>\n );\n};\n\nBadge.displayName = 'Badge';\n\nexport default Badge;\n","import type React from 'react';\n\nimport { Breadcrumbs, styled } from '@mui/material';\n\nimport { Style } from './style';\n\nimport { DoubleArrow } from '../../assets/svg/doubleArrow';\nimport { Link } from '../link';\nimport { Typography } from '../typography';\nexport interface BreadcrumbItem {\n label: string;\n path?: string;\n}\nexport interface BreadcrumbProps {\n headers: BreadcrumbItem[];\n onHeaderClick: (item: BreadcrumbItem) => void;\n className?: string;\n ariaLabel?: string;\n}\n\nconst Breadcrumb: React.FC<BreadcrumbProps> = ({\n headers = [],\n onHeaderClick = () => { },\n className = '',\n ariaLabel = '',\n}) => {\n return (\n <Breadcrumbs separator={<DoubleArrow />} aria-label={ariaLabel} className={className}>\n {headers.map((item, index) => {\n const key = `${item.label}-${index}`;\n if (item.path) {\n // Clickable item\n return (\n <Link\n key={key}\n color=\"inherit\"\n onClick={() => onHeaderClick(item)}\n underline=\"none\"\n >\n <Typography\n variant=\"body1\"\n className=\"breadcrumb-link\"\n >\n {item.label}\n </Typography>\n </Link>\n );\n }\n\n // Non-clickable item\n return (\n <Typography\n key={key}\n variant=\"body1\"\n className=\"breadcrumb-text\"\n >\n {item.label}\n </Typography>\n );\n })}\n </Breadcrumbs>\n );\n};\n\nBreadcrumb.displayName = 'BreadCrumb';\n\nexport default styled(Breadcrumb)(Style);\n","import type { Theme } from '@mui/material';\n\nexport const Style = ({ theme }: { theme: Theme }) => ({\n // Clickable link text\n '& .breadcrumb-link': {\n color: theme.palette.primary.main,\n fontSize: '14px',\n cursor: 'pointer',\n },\n\n // Non-clickable text\n '& .breadcrumb-text': {\n color: theme.palette.text.secondary,\n fontSize: '14px',\n cursor: 'default',\n },\n});\n","import type React from 'react';\n\nimport { Button as MuiButton, styled, type ButtonProps as MuiButtonProps } from '@mui/material';\n\nimport { Style } from './style';\nexport interface ButtonProps extends Omit<MuiButtonProps, 'variant'> {\n children: React.ReactNode;\n onClick?: () => void;\n variant?: 'contained' | 'outlined' | 'text';\n}\n\nconst Button: React.FC<ButtonProps> = ({\n children,\n onClick = () => { },\n variant = 'contained',\n size = 'medium',\n color = 'primary',\n disabled = false,\n fullWidth = false,\n className = '',\n ...restProps\n}) => {\n return (\n <MuiButton\n variant={variant}\n className={className}\n size={size}\n color={color}\n disabled={disabled}\n fullWidth={fullWidth}\n onClick={onClick}\n {...restProps}\n >\n {children}\n </MuiButton>\n );\n};\n\nButton.displayName = 'Button';\n\nexport default styled(Button)(Style);\n","import type { Theme } from '@mui/material';\n\nexport const Style = ({ theme }: { theme: Theme }) => {\n return {\n borderRadius: '20px !important',\n '&.MuiButton-contained.MuiButton-colorPrimary': {\n background: `linear-gradient(90deg, ${theme.palette.primary.main} 0%, ${theme.palette.primary.main !== `${theme.palette.primary.light}` ? theme.palette.primary.light : '#44C9E9'} 100%) !important`\n },\n }\n};","import type React from 'react';\n\nimport { EffectCoverflow, Pagination } from 'swiper/modules';\nimport { Swiper, SwiperSlide, type SwiperSlideProps } from 'swiper/react';\n\nimport 'swiper/css';\nimport 'swiper/css/effect-coverflow';\nimport 'swiper/css/pagination';\ninterface Option {\n value: string;\n label: string;\n image?: string;\n children?: React.ReactNode;\n}\ninterface CarousalProps {\n options: Option[];\n sliderProps?: Omit<SwiperSlideProps, 'key' | 'children'>;\n}\n\nconst Carousal: React.FC<CarousalProps> = (props: CarousalProps): React.JSX.Element => {\n const { options = [], sliderProps = {}, ...restProps } = props;\n\n return (\n <Swiper\n modules={[EffectCoverflow, Pagination]}\n {...restProps}\n >\n {options.map((option: Option) => (\n <SwiperSlide key={option.value} {...sliderProps}>\n {option.children && option.children}\n </SwiperSlide>\n ))}\n </Swiper>\n );\n};\n\nCarousal.displayName = 'Carousal';\n\nexport default Carousal;\n","import type React from 'react';\n\nimport {\n Checkbox as MuiCheckbox,\n FormControlLabel,\n type CheckboxProps as MuiCheckboxProps,\n type FormControlLabelProps\n} from '@mui/material';\nexport interface CheckboxProps extends Omit<MuiCheckboxProps, 'onChange'> {\n label?: string;\n onChange?: (event: React.ChangeEvent<HTMLInputElement>, checked: boolean) => void;\n formControlLabelProps?: Omit<FormControlLabelProps, 'control' | 'label'>;\n color?: 'default' | 'primary' | 'secondary' | 'error' | 'info' | 'success' | 'warning';\n size?: 'small' | 'medium' | 'large';\n}\n\nconst CheckBox: React.FC<CheckboxProps> = ({\n label,\n checked = false,\n onChange,\n disabled = false,\n indeterminate = false,\n color = 'primary',\n size = 'medium',\n formControlLabelProps,\n ...restProps\n}) => {\n const checkbox = (\n <MuiCheckbox\n checked={checked}\n onChange={onChange}\n disabled={disabled}\n indeterminate={indeterminate}\n color={color}\n size={size}\n {...restProps}\n />\n );\n\n if (label) {\n return (\n <FormControlLabel\n control={checkbox}\n label={label}\n disabled={disabled}\n {...formControlLabelProps}\n />\n );\n }\n\n return checkbox;\n};\n\nCheckBox.displayName = 'CheckBox';\n\nexport default CheckBox;\n","import React from 'react';\n\nimport { Chip as MuiChip, type ChipProps as MuiChipProps } from '@mui/material';\nexport interface ChipProps extends MuiChipProps {\n label: React.ReactNode;\n color?:\n | 'default'\n | 'primary'\n | 'secondary'\n | 'error'\n | 'success'\n | 'info'\n | 'warning';\n icon?: React.ReactElement;\n onClick?: () => void;\n onDelete?: () => void;\n variant?: 'filled' | 'outlined';\n size?: 'small' | 'medium';\n className?: string;\n}\n\nexport const Chip: React.FC<ChipProps> = ({\n label = '',\n color = 'default',\n icon,\n onClick = () => { },\n onDelete = () => { },\n variant = 'filled',\n size = 'medium',\n className = '',\n ...restProps\n}) => (\n <MuiChip\n className={className}\n label={label}\n color={color}\n icon={icon}\n onClick={onClick}\n onDelete={onDelete}\n variant={variant}\n size={size}\n {...restProps}\n />\n);\n\nexport default Chip;\n","import type React from 'react';\n\nimport { ChromePicker } from 'react-color';\n\nimport type { ColorResult } from 'react-color';\n\nexport interface ColorPickerProps {\n color: string;\n onChangeComplete: (color: ColorResult) => void;\n disableAlpha?: boolean;\n}\n\nconst ColorPicker: React.FC<ColorPickerProps> = ({\n color = '',\n onChangeComplete = () => { },\n disableAlpha = true,\n}) => {\n return (\n <ChromePicker\n color={color}\n onChangeComplete={onChangeComplete}\n disableAlpha={disableAlpha}\n />\n );\n};\n\nColorPicker.displayName = 'ColorPicker';\n\nexport default ColorPicker;\n","import type React from 'react';\n\nimport dayjs from 'dayjs';\n\nimport type { TextFieldProps } from '@mui/material/TextField';\nimport { DatePicker as MuiDatePicker, LocalizationProvider } from '@mui/x-date-pickers';\nimport { AdapterDayjs } from '@mui/x-date-pickers/AdapterDayjs';\nimport type { FieldChangeHandlerContext } from '@mui/x-date-pickers/internals';\nimport type { DateValidationError } from '@mui/x-date-pickers/models';\n\nimport { CloseIcon } from '../../assets/svg';\nimport { IconButton } from '../iconButton';\nimport { TextField } from '../textField';\n\nimport type { Dayjs } from 'dayjs';\nexport interface DatePickerProps {\n value: string;\n handleDateChange: (date: Dayjs | null, _context?: FieldChangeHandlerContext<DateValidationError>) => void;\n format: string;\n ariaLabel?: string;\n enableAccessibleFieldDOMStructure?: boolean;\n className?: string;\n slotProps?: React.ComponentProps<typeof MuiDatePicker>['slotProps'];\n slots?: React.ComponentProps<typeof MuiDatePicker>['slots'];\n}\n\nconst DatePicker: React.FC<DatePickerProps> = ({\n value = null,\n handleDateChange = () => { },\n format = 'DD/MM/YYYY',\n ariaLabel = '',\n enableAccessibleFieldDOMStructure = false,\n className = '',\n slotProps = {}, // slotProps let you customize props passed to those internal components\n slots = {}, // slots let you override which components are rendered internally\n}) => {\n\n return (\n <LocalizationProvider dateAdapter={AdapterDayjs}>\n <MuiDatePicker\n className={className}\n aria-label={ariaLabel}\n value={value ? dayjs(value) : undefined}\n onChange={handleDateChange}\n format={format}\n slotProps={slotProps}\n enableAccessibleFieldDOMStructure={enableAccessibleFieldDOMStructure}\n slots={{\n ...slots, // spread other slots props\n textField: (params: TextFieldProps) => {\n const { label, helperText, ...restParams } = params;\n const labelString = typeof label === 'string' ? label : undefined;\n const helperTextString = typeof helperText === 'string' ? helperText : undefined;\n\n return (\n <TextField\n {...restParams}\n label={labelString}\n helperText={helperTextString}\n fullWidth\n size='small'\n slotProps={{\n input: {\n ...(params.InputProps as Record<string, unknown>),\n endAdornment: value ? (\n <IconButton size='small' onClick={() => handleDateChange(null)}>\n <CloseIcon />\n </IconButton>\n ) : (\n (params.InputProps as { endAdornment?: React.ReactNode }).endAdornment\n ),\n },\n }}\n />\n );\n },\n }}\n />\n </LocalizationProvider>\n );\n};\n\nDatePicker.displayName = 'DatePicker';\n\nexport default DatePicker;","import React, { useEffect, useRef, useState } from 'react';\n\nimport dayjs from 'dayjs';\nimport customParseFormat from 'dayjs/plugin/customParseFormat';\n\nimport CalendarMonthIcon from '@mui/icons-material/CalendarMonth';\nimport ChevronLeftIcon from '@mui/icons-material/ChevronLeft';\nimport ChevronRightIcon from '@mui/icons-material/ChevronRight';\nimport KeyboardDoubleArrowLeftIcon from '@mui/icons-material/KeyboardDoubleArrowLeft';\nimport KeyboardDoubleArrowRightIcon from '@mui/icons-material/KeyboardDoubleArrowRight';\nimport {\n Box,\n Paper,\n List,\n ListItemButton,\n Popper,\n styled,\n} from '@mui/material';\nimport Fade from '@mui/material/Fade';\n\nimport { Style } from './style';\n\nimport { months, weekDays } from '../../constants/dateConstants';\nimport { Button } from '../button';\nimport { IconButton } from '../iconButton';\nimport { TextField } from '../textField';\nimport { Typography } from '../typography';\n\nimport type { Dayjs } from 'dayjs';\n\ndayjs.extend(customParseFormat);\n\ninterface DateRangePickerProps {\n value?: [Dayjs | null, Dayjs | null];\n onChange?: (dates: [Dayjs | null, Dayjs | null] | null) => void;\n presets?: Array<{ label: string; value: [Dayjs, Dayjs] }>;\n format?: string;\n placeholder?: [string, string];\n primaryColor?: string;\n className?: string;\n}\n\nconst DateRangePicker: React.FC<DateRangePickerProps> = ({\n value = [null, null],\n onChange,\n presets = [],\n format = 'DD/MM/YYYY',\n placeholder = ['From Date', 'To Date'],\n className = '',\n}) => {\n const [isOpen, setIsOpen] = useState(false);\n const [selectedDates, setSelectedDates] =\n useState<[Dayjs | null, Dayjs | null]>(value);\n const [inputValues, setInputValues] = useState<[string, string]>(['', '']);\n const [hoverDate, setHoverDate] = useState<Dayjs | null>(null);\n const [currentMonth, setCurrentMonth] = useState(dayjs());\n const [selectingStartDate, setSelectingStartDate] = useState(true);\n const [viewMode, setViewMode] = useState<'date' | 'month' | 'year'>('date');\n const [yearRangeStart, setYearRangeStart] = useState(\n Math.floor(dayjs().year() / 10) * 10\n );\n const [activeCalendar, setActiveCalendar] = useState<0 | 1>(0);\n const [anchorEl, setAnchorEl] = useState<HTMLDivElement | null>(null);\n const pickerRef = useRef<HTMLDivElement | null>(null);\n const popperRef = useRef<HTMLElement | null>(null);\n\n useEffect(() => {\n const valueChanged =\n value[0]?.valueOf() !== selectedDates[0]?.valueOf() ||\n value[1]?.valueOf() !== selectedDates[1]?.valueOf();\n\n if (valueChanged) {\n setSelectedDates(value);\n setInputValues([\n value[0] ? value[0].format(format) : '',\n value[1] ? value[1].format(format) : '',\n ]);\n if (value[0]) {\n setCurrentMonth(value[0]);\n }\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [value, format]);\n\n useEffect(() => {\n const handleClickOutside = (e: MouseEvent) => {\n const target = e.target as Node | null;\n const clickedInsidePicker = pickerRef.current?.contains(target);\n const clickedInsidePopper = popperRef.current?.contains(target);\n if (!clickedInsidePicker && !clickedInsidePopper) setIsOpen(false);\n };\n\n document.addEventListener('mousedown', handleClickOutside);\n return () => document.removeEventListener('mousedown', handleClickOutside);\n }, []);\n\n useEffect(() => {\n if (isOpen && selectedDates[0]) setCurrentMonth(selectedDates[0]);\n if (isOpen) setViewMode('date');\n }, [isOpen, selectedDates]);\n\n const handleInputChange = (index: 0 | 1, value: string) => {\n const newInputValues: [string, string] = [...inputValues] as [\n string,\n string\n ];\n newInputValues[index] = value;\n setInputValues(newInputValues);\n\n const parsedDate = dayjs(value, format, true);\n if (parsedDate.isValid()) {\n const newDates: [Dayjs | null, Dayjs | null] = [...selectedDates];\n newDates[index] = parsedDate;\n\n if (newDates[0] && newDates[1] && newDates[0].isAfter(newDates[1])) {\n const swapped: [Dayjs, Dayjs] = [newDates[1], newDates[0]];\n setSelectedDates(swapped);\n setInputValues([swapped[0].format(format), swapped[1].format(format)]);\n onChange?.(swapped);\n } else {\n setSelectedDates(newDates);\n if (newDates[0] && newDates[1]) {\n onChange?.(newDates as [Dayjs, Dayjs]);\n }\n }\n\n if (newDates[0]) {\n setCurrentMonth(newDates[0]);\n }\n }\n };\n\n const handleInputBlur = (index: 0 | 1) => {\n const newInputValues: [string, string] = [...inputValues] as [\n string,\n string\n ];\n if (selectedDates[index]) {\n newInputValues[index] = selectedDates[index].format(format);\n } else {\n newInputValues[index] = '';\n }\n setInputValues(newInputValues);\n };\n\n const daysInMonth = (date: Dayjs) => date.daysInMonth();\n const firstDayOfMonth = (date: Dayjs) => date.startOf('month').day();\n\n const generateCalendarDays = (month: Dayjs) => {\n const days: Dayjs[] = [];\n const firstDay = firstDayOfMonth(month);\n const totalDays = daysInMonth(month);\n const prevMonthDays = month.subtract(1, 'month').daysInMonth();\n for (let i = firstDay - 1; i >= 0; i--)\n days.push(month.subtract(1, 'month').date(prevMonthDays - i));\n for (let i = 1; i <= totalDays; i++) days.push(month.date(i));\n const remainingDays = 42 - days.length;\n for (let i = 1; i <= remainingDays; i++)\n days.push(month.add(1, 'month').date(i));\n return days;\n };\n\n const handleDateClick = (date: Dayjs) => {\n if (selectingStartDate || !selectedDates[0]) {\n setSelectedDates([date, null]);\n setInputValues([date.format(format), '']);\n setSelectingStartDate(false);\n } else {\n const [start] = selectedDates;\n const newDates: [Dayjs, Dayjs] = date.isBefore(start)\n ? [date, start]\n : [start, date];\n setSelectedDates(newDates);\n setInputValues([newDates[0].format(format), newDates[1].format(format)]);\n setSelectingStartDate(true);\n onChange?.(newDates);\n setIsOpen(false);\n }\n };\n\n const handlePresetClick = (presetDates: [Dayjs, Dayjs]) => {\n setSelectedDates(presetDates);\n setInputValues([\n presetDates[0].format(format),\n presetDates[1].format(format),\n ]);\n setSelectingStartDate(true);\n onChange?.(presetDates);\n setIsOpen(false);\n };\n\n const handleMonthClick = (monthIndex: number) => {\n const newMonth =\n activeCalendar === 0\n ? currentMonth.month(monthIndex)\n : currentMonth.add(1, 'month').month(monthIndex);\n setCurrentMonth(newMonth);\n setViewMode('date');\n };\n\n const handleYearClick = (year: number) => {\n const newMonth =\n activeCalendar === 0\n ? currentMonth.year(year)\n : currentMonth.add(1, 'month').year(year);\n setCurrentMonth(newMonth);\n setViewMode('month');\n };\n\n const handleMonthYearClick = (calendarIndex: 0 | 1) => {\n setActiveCalendar(calendarIndex);\n if (viewMode === 'date') setViewMode('month');\n else if (viewMode === 'month') {\n setViewMode('year');\n const targetMonth =\n calendarIndex === 0 ? currentMonth : currentMonth.add(1, 'month');\n setYearRangeStart(Math.floor(targetMonth.year() / 10) * 10);\n }\n };\n\n const isDateInRange = (date: Dayjs) => {\n const [start, end] = selectedDates;\n if (!start || !end) return false;\n return date.isAfter(start, 'day') && date.isBefore(end, 'day');\n };\n\n const isDateSelected = (date: Dayjs) => {\n const [start, end] = selectedDates;\n return !!(\n (start && date.isSame(start, 'day')) ||\n (end && date.isSame(end, 'day'))\n );\n };\n\n const isDateHovered = (date: Dayjs) => {\n if (!hoverDate || !selectedDates[0] || selectedDates[1]) return false;\n const start = selectedDates[0];\n return date.isAfter(start, 'day') && date.isBefore(hoverDate, 'day');\n };\n\n const renderMonthPicker = (calendarIndex: 0 | 1) => {\n const targetMonth =\n calendarIndex === 0 ? currentMonth : currentMonth.add(1, 'month');\n return (\n <Box className='gridBox'>\n {months.map((month, index) => {\n const isCurrentMonth =\n index === targetMonth.month() && activeCalendar === calendarIndex;\n return (\n <Button\n key={month}\n onClick={() => handleMonthClick(index)}\n className={`calendarYearButton ${isCurrentMonth ? 'currentMonth' : ''\n }`}\n >\n {month}\n </Button>\n );\n })}\n </Box>\n );\n };\n\n const renderYearPicker = (calendarIndex: 0 | 1) => {\n const years: number[] = [];\n const start = yearRangeStart;\n const end = start + 9;\n const targetMonth =\n calendarIndex === 0 ? currentMonth : currentMonth.add(1, 'month');\n years.push(start - 1);\n for (let y = start; y <= end; y++) years.push(y);\n years.push(end + 1);\n return (\n <Box className='gridBox'>\n {years.map((y) => {\n const isOther = y === start - 1 || y === end + 1;\n const isCurrentYear =\n y === targetMonth.year() && activeCalendar === calendarIndex;\n return (\n <Button\n key={y}\n onClick={() => handleYearClick(y)}\n disabled={isOther}\n className={`calendarYearButton \n ${isCurrentYear ? 'currentYear' : ''} \n ${isOther ? 'otherYear' : ''}`}\n >\n {y}\n </Button>\n );\n })}\n </Box>\n );\n };\n\n const renderCalendar = (month: Dayjs, offset: number = 0) => {\n const displayMonth = month.add(offset, 'month');\n const calendarIndex = offset as 0 | 1;\n const handleNavigation = (\n dir: 'prev-year' | 'prev-month' | 'next-month' | 'next-year'\n ) => {\n if (viewMode === 'date') {\n if (dir === 'prev-year')\n setCurrentMonth(currentMonth.subtract(1, 'year'));\n else if (dir === 'prev-month')\n setCurrentMonth(currentMonth.subtract(1, 'month'));\n else if (dir === 'next-month')\n setCurrentMonth(currentMonth.add(1, 'month'));\n else setCurrentMonth(currentMonth.add(1, 'year'));\n } else if (viewMode === 'month') {\n if (dir === 'prev-year')\n setCurrentMonth(currentMonth.subtract(1, 'year'));\n else if (dir === 'next-year')\n setCurrentMonth(currentMonth.add(1, 'year'));\n } else {\n if (dir === 'prev-year') setYearRangeStart((s) => s - 10);\n else if (dir === 'next-year') setYearRangeStart((s) => s + 10);\n }\n };\n const getHeaderLabel = () =>\n viewMode === 'date'\n ? displayMonth.format('MMM YYYY')\n : viewMode === 'month'\n ? displayMonth.format('YYYY')\n : `${yearRangeStart}-${yearRangeStart + 9}`;\n const days = viewMode === 'date' ? generateCalendarDays(displayMonth) : [];\n\n\n return (\n <Paper elevation={0} className='paperContainer'>\n <Box\n className={`calendarHeader \n ${viewMode === 'date'\n ? offset === 0\n ? 'startAlign'\n : 'endAlign'\n : 'centerAlign'\n }`}\n >\n {((viewMode === 'date' && offset === 0) || viewMode !== 'date') && (\n <>\n <IconButton\n size='small'\n onClick={() => handleNavigation('prev-year')}\n >\n <KeyboardDoubleArrowLeftIcon fontSize='small' />\n </IconButton>\n {viewMode === 'date' && (\n <IconButton\n size='small'\n onClick={() => handleNavigation('prev-month')}\n >\n <ChevronLeftIcon fontSize='small' />\n </IconButton>\n )}\n </>\n )}\n\n <Typography\n variant='body2'\n onClick={() => handleMonthYearClick(calendarIndex)}\n className='monthLabel'\n >\n {getHeaderLabel()}\n </Typography>\n\n {((viewMode === 'date' && offset === 1) || viewMode !== 'date') && (\n <>\n {viewMode === 'date' && (\n <IconButton\n size='small'\n onClick={() => handleNavigation('next-month')}\n >\n <ChevronRightIcon fontSize='small' />\n </IconButton>\n )}\n <IconButton\n size='small'\n onClick={() => handleNavigation('next-year')}\n >\n <KeyboardDoubleArrowRightIcon fontSize='small' />\n </IconButton>\n </>\n )}\n </Box>\n\n {viewMode === 'date' && (\n <Box className='weekGrid'>\n {weekDays.map((d) => (\n <Typography key={d} className='weekDayLabel'>\n {d}\n </Typography>\n ))}\n {days.map((day) => {\n const isCurrentMonth = day.month() === displayMonth.month();\n const isToday = day.isSame(dayjs(), 'day');\n let isInRange = false;\n let isSelected = false;\n let isHovered = false;\n\n if (isCurrentMonth) {\n isInRange = isDateInRange(day);\n isSelected = isDateSelected(day);\n isHovered = isDateHovered(day);\n }\n return (\n <Box\n key={day.valueOf()}\n component='button'\n onClick={() => isCurrentMonth && handleDateClick(day)}\n onMouseEnter={() => isCurrentMonth && setHoverDate(day)}\n onMouseLeave={() => setHoverDate(null)}\n className={`calendarDayButton\n ${!isCurrentMonth ? 'notCurrentMonth' : ''}\n ${isToday ? 'today' : ''}\n ${isSelected ? 'selected' : ''}\n ${isInRange ? 'inRange' : ''}\n ${isHovered ? 'hovered' : ''}\n `}\n >\n {day.date()}\n </Box>\n );\n })}\n </Box>\n )}\n\n {viewMode === 'month' && renderMonthPicker(calendarIndex)}\n {viewMode === 'year' && renderYearPicker(calendarIndex)}\n </Paper>\n );\n };\n\n return (\n <Box\n ref={(el: HTMLDivElement | null) => {\n pickerRef.current = el;\n setAnchorEl(el);\n }}\n className={`${className} pickerContainer`}\n >\n <Box className='inputBox'>\n <TextField\n value={inputValues[0]}\n onChange={(e) => handleInputChange(0, e.target.value)}\n onBlur={() => handleInputBlur(0)}\n onClick={() => setIsOpen((s) => !s)}\n placeholder={placeholder[0]}\n variant='standard'\n size='small'\n className='styledTextField'\n slotProps={{\n input: {\n disableUnderline: true,\n },\n }}\n />\n <Typography>→</Typography>\n <TextField\n value={inputValues[1]}\n onChange={(e) => handleInputChange(1, e.target.value)}\n onBlur={() => handleInputBlur(1)}\n onClick={() => setIsOpen((s) => !s)}\n placeholder={placeholder[1]}\n variant='standard'\n size='small'\n slotProps={{\n input: {\n disableUnderline: true,\n },\n }}\n className='styledTextField'\n />\n <CalendarMonthIcon\n fontSize='small'\n color='primary'\n onClick={() => setIsOpen((s) => !s)}\n />\n </Box>\n\n <Popper\n open={isOpen}\n anchorEl={anchorEl}\n placement='bottom-start'\n transition\n modifiers={[{ name: 'offset', options: { offset: [0, 8] } }]}\n className={className}\n >\n {({ TransitionProps }) => (\n <Fade {...TransitionProps} timeout={200}>\n <Paper\n ref={(el) => {\n popperRef.current = el;\n }}\n elevation={3}\n className='popperPaper'\n >\n {presets.length > 0 && (\n <Box className='presetListContainer'>\n <List disablePadding>\n {presets.map((preset) => {\n const isSelected =\n selectedDates[0]?.isSame(preset.value[0], 'day') &&\n selectedDates[1]?.isSame(preset.value[1], 'day');\n return (\n <ListItemButton\n key={preset.label}\n onClick={() => handlePresetClick(preset.value)}\n selected={isSelected}\n className='presetListItem'\n >\n <Typography variant='body1'>\n {preset.label}\n </Typography>\n </ListItemButton>\n );\n })}\n </List>\n </Box>\n )}\n\n <Box className='calendarWrapper'>\n <Box>{renderCalendar(currentMonth, 0)}</Box>\n {viewMode === 'date' && (\n <Box>{renderCalendar(currentMonth, 1)}</Box>\n )}\n </Box>\n </Paper>\n </Fade>\n )}\n </Popper>\n </Box>\n );\n};\n\nexport default styled(DateRangePicker)(Style);\n","import type { Theme } from '@mui/material';\n\nexport const Style = ({ theme }: { theme: Theme }) => {\n return {\n '&.pickerContainer': {\n position: 'relative',\n display: 'inline-block',\n fontFamily: 'inherit',\n },\n '.dateFormat': {\n flex: 1,\n textAlign: 'center',\n fontSize: 14,\n },\n '.inputBox': {\n display: 'flex',\n alignItems: 'center',\n gap: 8,\n padding: '8px 12px',\n border: `1.5px solid ${theme.palette.primary.main}`,\n borderRadius: 8,\n backgroundColor: '#fff',\n cursor: 'pointer',\n minWidth: 275,\n height:35,\n transition: 'all 0.2s ease',\n '&:hover': {\n boxShadow: `0 0 0 2px ${theme.palette.primary.light}25`\n },\n },\n '.popperPaper': {\n height:'300px',\n marginTop: 8,\n display: 'flex',\n borderRadius: 8,\n overflow: 'hidden',\n boxShadow: '0 4px 20px rgba(0,0,0,0.12)',\n backgroundColor: '#fff',\n },\n '.presetListContainer': {\n minWidth: 160,\n borderRight: '1px solid #e0e0e0',\n },\n '.presetListItem': {\n '& .MuiTypography-root': {\n fontWeight: 500,\n fontSize:'15px'\n },\n padding: '6px 16px',\n '&.Mui-selected': {\n color: theme.palette.primary.main,\n background: 'transparent',\n },\n },\n '.calendarWrapper': {\n display: 'flex',\n gap: 24,\n padding: '6px 16px',\n backgroundColor: '#fff',\n },\n '.paperContainer': {\n width: 280,\n padding: 2,\n borderRadius: 2,\n boxShadow: 'none',\n background: 'transparent',\n },\n '.calendarHeader': {\n display: 'flex',\n alignItems: 'center',\n gap: 8,\n marginBottom: 8,\n },\n '.calendarHeader.startAlign': {\n justifyContent: 'flex-start',\n },\n '.calendarHeader.endAlign': {\n justifyContent: 'flex-end',\n },\n '.calendarHeader.centerAlign': {\n justifyContent: 'center',\n },\n '.calendarDayButton': {\n margin: '4px -0.25px',\n padding: '4px',\n transition: 'all 0.12s',\n cursor: 'pointer',\n textAlign: 'center',\n fontSize: 14,\n border: '1px solid transparent',\n backgroundColor: 'transparent',\n color: 'inherit',\n '&:hover': {\n backgroundColor: 'rgba(0,0,0,0.04)',\n },\n },\n '.calendarDayButton.notCurrentMonth': {\n cursor: 'default',\n color: 'rgba(0,0,0,0.38)',\n '&:hover': {\n backgroundColor: 'transparent',\n },\n },\n '.calendarDayButton.today': {\n border: `1px solid ${theme.palette.primary.main}`,\n },\n '.calendarDayButton.selected': {\n backgroundColor: theme.palette.primary.main,\n color: '#fff',\n fontWeight: 600,\n '&:hover': {\n backgroundColor: theme.palette.primary.main,\n },\n },\n '.calendarDayButton.inRange': {\n backgroundColor: `${theme.palette.primary.main}20`,\n },\n '.calendarDayButton.hovered': {\n backgroundColor: `${theme.palette.primary.main}20`,\n },\n '.calendarYearButton': {\n textTransform: 'none',\n padding: 0,\n borderRadius: 8,\n fontSize: 14,\n marginTop: 25,\n marginBottom: 10,\n boxShadow: 'none',\n color: 'inherit',\n backgroundColor: 'transparent',\n transition: 'all 0.2s ease',\n '&:hover': {\n backgroundColor: 'rgba(0,0,0,0.04)',\n boxShadow: 'none',\n },\n },\n '& .calendarYearButton.currentMonth': {\n backgroundColor: theme.palette.primary.main,\n color: '#fff',\n\n '&:hover': {\n backgroundColor: theme.palette.primary.main,\n },\n },\n '& .calendarYearButton.otherYear': {\n color: theme.palette.text.disabled,\n\n '&:hover': {\n backgroundColor: 'transparent',\n },\n },\n '& .calendarYearButton.currentYear': {\n backgroundColor: theme.palette.primary.main,\n color: '#fff',\n\n '&:hover': {\n backgroundColor: theme.palette.primary.main,\n },\n },\n '.weekGrid': {\n display: 'grid',\n gridTemplateColumns: 'repeat(7, 1fr)',\n gap: 0.5,\n },\n '.gridBox': {\n display: 'grid',\n gridTemplateColumns: 'repeat(3, 1fr)',\n gap: 1,\n p: 1,\n },\n '.monthLabel': {\n fontSize: 14,\n fontWeight: 600,\n minWidth: 120,\n textAlign: 'center',\n cursor: 'pointer',\n '&:hover': {\n color: theme.palette.primary.main,\n },\n },\n '.weekDayLabel': {\n textAlign: 'center',\n fontSize: 13,\n fontWeight: 600,\n color: '#555',\n padding: '4px 0',\n },\n '.styledTextField': {\n width: 90,\n '& input': {\n fontSize: 14,\n padding: 0,\n cursor: 'pointer',\n },\n }\n };\n};\n","import type React from 'react';\n\nimport {\n Dialog as MuiDialog,\n DialogTitle as MuiDialogTitle,\n DialogContent as MuiDialogContent,\n DialogActions as MuiDialogActions,\n IconButton,\n styled,\n type DialogProps as MuiDialogProps,\n} from '@mui/material';\n\nimport { Style } from './style';\n\nimport { CloseIcon } from '../../assets/svg';\nexport interface DialogProps extends Omit<MuiDialogProps, 'title' | 'content'> {\n open: boolean;\n onClose?: (event?: object, reason?: 'backdropClick' | 'escapeKeyDown') => void;\n title?: React.ReactNode;\n children?: React.ReactNode;\n actions?: React.ReactNode;\n showCloseButton?: boolean;\n disableBackdropClick?: boolean;\n disableEscapeKeyDown?: boolean;\n}\n\nconst Dialog: React.FC<DialogProps> = ({\n open = false,\n onClose = () => { },\n title = '',\n actions,\n children,\n showCloseButton = true,\n maxWidth = 'sm',\n fullWidth = true,\n fullScreen = false,\n scroll = 'paper',\n disableBackdropClick = false,\n disableEscapeKeyDown = false,\n ...restProps\n}) => {\n const handleClose = (\n event: object,\n reason: 'backdropClick' | 'escapeKeyDown'\n ) => {\n if (disableBackdropClick && reason === 'backdropClick') return;\n if (disableEscapeKeyDown && reason === 'escapeKeyDown') return;\n onClose(event, reason);\n };\n\n return (\n <MuiDialog\n open={open}\n onClose={handleClose}\n maxWidth={maxWidth}\n fullWidth={fullWidth}\n fullScreen={fullScreen}\n scroll={scroll}\n {...restProps}\n >\n {title && (\n <MuiDialogTitle className='dialog-title'>\n {title}\n {showCloseButton && (\n <IconButton\n aria-label='close'\n onClick={(e) => onClose(e, 'escapeKeyDown')}\n >\n <CloseIcon />\n </IconButton>\n )}\n </MuiDialogTitle>\n )}\n {children && <MuiDialogContent>{children}</MuiDialogContent>}\n {actions && <MuiDialogActions>{actions}</MuiDialogActions>}\n </MuiDialog>\n );\n};\n\nDialog.displayName = 'Dialog';\n\nexport default styled(Dialog)(Style);\n","export const Style = () => {\n return {\n '.dialog-title': {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n paddingRight: 5,\n },\n };\n};\n","import type React from 'react';\n\nimport { Drawer as MuiDrawer, type Theme } from '@mui/material';\nimport type { DrawerProps as MuiDrawerProps } from '@mui/material/Drawer';\nimport type { SxProps } from '@mui/system';\n\nexport interface DrawerProps {\n anchor?: MuiDrawerProps['anchor'];\n open?: boolean;\n onClose?: MuiDrawerProps['onClose'];\n children?: React.ReactNode;\n className?: string;\n sx?: SxProps<Theme>;\n}\n\nconst Drawer: React.FC<DrawerProps> = ({\n anchor = 'left',\n open = false,\n onClose = () => { },\n children,\n className = '',\n sx = {},\n}) => {\n return (\n <MuiDrawer\n anchor={anchor}\n open={open}\n onClose={onClose}\n className={className}\n sx={sx}\n >\n {children}\n </MuiDrawer>\n );\n};\n\nDrawer.displayName = 'Drawer';\n\nexport default Drawer;\n","import { Component, type ErrorInfo, type ReactNode } from 'react';\n\nimport { Paper, Box, Typography, Button as MuiButton } from '@mui/material';\n\ninterface Props {\n children: ReactNode;\n fallback?: ReactNode;\n}\n\ninterface State {\n hasError: boolean;\n error: Error | null;\n}\n\nclass ErrorBoundary extends Component<Props, State> {\n constructor(props: Props) {\n super(props);\n this.state = { hasError: false, error: null };\n }\n\n static getDerivedStateFromError(error: Error): State {\n return { hasError: true, error };\n }\n\n override componentDidCatch(_error: Error, _errorInfo: ErrorInfo): void {\n // Error logged for debugging\n }\n\n handleReset = (): void => {\n this.setState({ hasError: false, error: null });\n };\n\n override render(): ReactNode {\n if (this.state.hasError) {\n if (this.props.fallback) {\n return this.props.fallback;\n }\n\n return (\n <Paper elevation={3}>\n <Box>\n <Typography variant=\"h6\" color=\"error\">\n Something went wrong\n </Typography>\n <Typography variant=\"body2\" color=\"text.secondary\">\n {this.state.error?.message || 'An unknown error occurred'}\n </Typography>\n <MuiButton variant=\"outlined\" onClick={this.handleReset}>\n Try again\n </MuiButton>\n </Box>\n </Paper>\n );\n }\n\n return this.props.children;\n }\n}\n\nexport default ErrorBoundary;\n","import type React from 'react';\n\nimport { IconButton as MuiIconButton } from '@mui/material';\nimport type { IconButtonProps as MuiIconButtonProps } from '@mui/material';\n\nexport interface IconButtonProps extends Omit<MuiIconButtonProps, 'color'> {\n color?: 'inherit' | 'default' | 'primary' | 'secondary' | 'error' | 'info' | 'success' | 'warning';\n size?: 'small' | 'medium' | 'large';\n disabled?: boolean;\n edge?: 'start' | 'end' | false;\n disableRipple?: boolean;\n ariaLabel?: string;\n onClick?: React.MouseEventHandler<HTMLButtonElement>;\n}\n\nconst IconButton: React.FC<IconButtonProps> = ({\n color = 'default',\n size = 'medium',\n disabled = false,\n edge = false,\n disableRipple = false,\n ariaLabel = '',\n className = '',\n children, // Icon passed between tags will be rendered as children\n onClick = () => { },\n ...props\n}) => {\n\n return (\n <MuiIconButton\n className={className}\n color={color}\n size={size}\n aria-label={ariaLabel}\n disabled={disabled}\n disableRipple={disableRipple}\n edge={edge}\n onClick={onClick}\n {...props}\n >\n {children}\n </MuiIconButton>\n );\n};\n\nIconButton.displayName = 'IconButton';\n\nexport default IconButton;","import type React from 'react';\n\nimport {\n Link as MuiLink,\n type LinkProps as MuiLinkProps,\n} from '@mui/material';\n\nexport interface LinkProps extends MuiLinkProps {\n underline?: 'none' | 'hover' | 'always';\n colorVariant?: 'primary' | 'secondary' | 'inherit' | 'textPrimary' | 'textSecondary';\n onClick?: (event: React.MouseEvent<HTMLAnchorElement>) => void;\n children: React.ReactNode;\n className?: string;\n}\n\nconst Link: React.FC<LinkProps> = ({\n underline = 'none',\n colorVariant = 'primary',\n onClick = () => { },\n children,\n className = '',\n ...props\n}) => {\n return (\n <MuiLink\n underline={underline}\n color={colorVariant}\n onClick={onClick}\n className={className}\n {...props}\n >\n {children}\n </MuiLink>\n );\n};\n\nLink.displayName = 'Link';\n\nexport default Link;\n","import type React from 'react';\n\nimport {\n CircularProgress,\n Box,\n styled,\n type CircularProgressProps as MuiCircularProgressProps,\n} from '@mui/material';\n\nimport { Style } from './style';\nexport interface CircularLoaderProps extends MuiCircularProgressProps {\n size?: number | string;\n thickness?: number;\n color?:\n | 'primary'\n | 'secondary'\n | 'error'\n | 'info'\n | 'success'\n | 'warning'\n | 'inherit';\n value?: number;\n determinate?: boolean;\n fullScreen?: boolean;\n overlay?: boolean;\n overlayColor?: string;\n className?: string;\n}\n\nconst CircularLoader: React.FC<CircularLoaderProps> = ({\n size = 40,\n thickness = 3.6,\n color = 'primary',\n value,\n determinate = false,\n fullScreen = false,\n overlay = false,\n overlayColor = 'rgba(255, 255, 255, 0.9)',\n className = '',\n ...restProps\n}) => {\n const wrapperClass = `${className} ${fullScreen || overlay\n ? `loader-overlay ${fullScreen ? 'fullscreen' : ''}`\n : 'loader-container'\n }`;\n\n return (\n <Box\n className={wrapperClass}\n {...(overlay && { sx: { bgcolor: overlayColor } })}\n >\n <CircularProgress\n size={size}\n thickness={thickness}\n color={color}\n variant={\n determinate && value !== undefined ? 'determinate' : 'indeterminate'\n }\n value={value}\n {...restProps}\n />\n </Box>\n );\n};\n\nexport default styled(CircularLoader)(Style);\n","import type React from 'react';\n\nimport {\n LinearProgress,\n Box,\n styled,\n type LinearProgressProps as MuiLinearProgressProps,\n} from '@mui/material';\n\nimport { Style } from './style';\nexport interface LinearLoaderProps extends MuiLinearProgressProps {\n color?:\n | 'primary'\n | 'secondary'\n | 'error'\n | 'info'\n | 'success'\n | 'warning'\n | 'inherit';\n value?: number;\n determinate?: boolean;\n fullScreen?: boolean;\n overlay?: boolean;\n overlayColor?: string;\n className?: string;\n}\n\nconst LinearLoader: React.FC<LinearLoaderProps> = ({\n color = 'primary',\n value,\n determinate = false,\n fullScreen = false,\n overlay = false,\n overlayColor = 'rgba(255, 255, 255, 0.9)',\n className = '',\n ...restProps\n}) => {\n const wrapperClass = `${className} ${fullScreen || overlay\n ? `loader-overlay ${fullScreen ? 'fullscreen' : ''}`\n : 'loader-container'\n }`;\n\n return (\n <Box\n className={wrapperClass}\n {...(overlay && { sx: { bgcolor: overlayColor } })}\n >\n <LinearProgress\n color={color}\n variant={\n determinate && value !== undefined ? 'determinate' : 'indeterminate'\n }\n value={value}\n {...restProps}\n />\n </Box>\n );\n};\n\nexport default styled(LinearLoader)(Style);\n","import type { Theme } from '@mui/material';\n\nexport const Style = ({ theme }: { theme: Theme }) => {\n return {\n '&.loader-container': {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n },\n '&.loader-overlay': {\n position: 'absolute',\n top: 0,\n left: 0,\n right: 0,\n bottom: 0,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n zIndex: theme.zIndex.modal + 1,\n },\n '&.loader-overlay.fullscreen': {\n position: 'fixed',\n },\n '& .MuiLinearProgress-root': {\n width: '100%',\n },\n };\n};\n","import React, { useEffect } from 'react';\n\nimport ReactPlayer from 'react-player';\n\nimport type { ReactPlayerProps } from 'react-player/types';\n\nexport interface MediaPlayerProps extends ReactPlayerProps {\n src?: string;\n width?: string | number;\n height?: string | number;\n controls?: boolean;\n playing?: boolean;\n hideOptions?: boolean;\n}\n\nconst MediaPlayer: React.FC<MediaPlayerProps> = ({\n src = '',\n width = '100%',\n height = '400px',\n controls = true,\n playing = false,\n hideOptions = true,\n ...restProps\n}) => {\n useEffect(() => {\n const mediaElements = document.querySelectorAll('video, audio');\n mediaElements.forEach((media) => {\n if (hideOptions) {\n media.setAttribute('controlsList', 'nodownload');\n media.setAttribute('disablePictureInPicture', 'true');\n } else {\n media.removeAttribute('controlsList');\n media.removeAttribute('disablePictureInPicture');\n }\n });\n }, [hideOptions]);\n\n return (\n <ReactPlayer\n src={src}\n width={width}\n height={height}\n controls={controls}\n playing={playing}\n {...restProps}\n />\n );\n};\n\nexport default MediaPlayer;\n","import React from 'react';\n\nimport {\n Menu as MuiMenu,\n MenuItem as MuiMenuItem,\n Box,\n type MenuProps as MuiMenuProps,\n styled,\n} from '@mui/material';\n\nimport { Style } from './style';\nexport interface MenuOption {\n id: string | number;\n label: string;\n icon?: React.ReactNode;\n disabled?: boolean;\n}\n\nexport interface MenuProps extends MuiMenuProps {\n options: MenuOption[];\n anchorEl: HTMLElement | null;\n open: boolean;\n onClose: () => void;\n onOptionClick: (option: MenuOption) => void;\n}\n\nconst Menu: React.FC<MenuProps> = ({\n options = [],\n anchorEl = null,\n open = false,\n onClose = () => { },\n onOptionClick = () => { },\n ...restProps\n}) => {\n return (\n <MuiMenu\n anchorEl={anchorEl}\n open={open}\n onClose={onClose}\n anchorOrigin={{ vertical: 'bottom', horizontal: 'right' }}\n transformOrigin={{ vertical: 'top', horizontal: 'right' }}\n {...restProps}\n >\n {options.map((option) => (\n <MuiMenuItem\n key={option.id}\n disabled={option.disabled}\n onClick={() => {\n onClose();\n onOptionClick(option);\n }}\n >\n {option.icon && <Box className=\"icon-style\">{option.icon}</Box>}\n {option.label}\n </MuiMenuItem>\n ))}\n </MuiMenu>\n );\n};\n\nexport default styled(Menu)(Style);\n","import type { Theme } from '@mui/material';\n\nexport const Style = ({ theme }: { theme: Theme }) => {\n return {\n '.icon-style': {\n marginRight: '8px',\n display: 'flex',\n alignItems: 'center',\n color: theme.palette.primary.main,\n },\n };\n};\n","import type React from 'react';\n\nimport {\n Modal as MuiModal,\n Backdrop,\n type ModalProps as MuiModalProps,\n} from '@mui/material';\n\nexport interface ModalProps {\n open?: boolean;\n onClose?: () => void;\n children: React.ReactElement<unknown>;\n className?: string;\n slots?: MuiModalProps['slots'];\n slotProps?: MuiModalProps['slotProps'];\n}\n\nconst Modal: React.FC<ModalProps> = ({\n open = false,\n onClose = () => { },\n children,\n className = '',\n slots = { backdrop: Backdrop },\n slotProps = { backdrop: { timeout: 300 } },\n}) => {\n return (\n <MuiModal\n open={open}\n onClose={onClose}\n closeAfterTransition\n slots={{\n backdrop: slots.backdrop,\n ...slots,\n }}\n slotProps={{\n backdrop: slotProps.backdrop,\n ...slotProps,\n }}\n className={className}\n >\n {children}\n </MuiModal>\n );\n};\n\nModal.displayName = 'Modal';\n\nexport default Modal;\n","import type React from 'react';\n\nimport { Popover as MuiPopover, type PopoverProps as MuiPopoverProps } from '@mui/material';\n\nexport interface PopoverProps {\n open: boolean;\n anchorEl: HTMLElement | null;\n onClose: () => void;\n className?: string;\n children?: React.ReactNode;\n anchorOrigin?: {\n vertical: 'top' | 'bottom' | 'center';\n horizontal: 'left' | 'center' | 'right';\n };\n transformOrigin?: {\n vertical: 'top' | 'bottom' | 'center';\n horizontal: 'left' | 'center' | 'right';\n };\n slotProps?: MuiPopoverProps['slotProps'];\n}\n\nconst Popover: React.FC<PopoverProps> = ({\n open = false,\n anchorEl = null,\n onClose = () => { },\n className = '',\n children,\n anchorOrigin = {\n vertical: 'bottom',\n horizontal: 'center',\n },\n transformOrigin = {\n vertical: 'top',\n horizontal: 'right',\n },\n slotProps = {},\n}) => {\n return (\n <MuiPopover\n open={open}\n anchorEl={anchorEl}\n onClose={onClose}\n anchorOrigin={anchorOrigin}\n transformOrigin={transformOrigin}\n className={className}\n slotProps={slotProps}\n >\n {children}\n </MuiPopover>\n );\n};\n\nPopover.displayName = 'Popover';\n\nexport default Popover;\n","import type React from 'react';\n\nimport {\n Radio as MuiRadio, RadioGroup, FormControlLabel,\n type RadioGroupProps, type RadioProps as MuiRadioProps\n} from '@mui/material';\n\nexport interface RadioOption {\n value: string;\n label: string;\n disabled?: boolean;\n}\n\nexport interface RadioProps extends Omit<RadioGroupProps, 'onChange'> {\n options: RadioOption[];\n onChange?: (event: React.ChangeEvent<HTMLInputElement>, value: string) => void;\n radioProps?: Omit<MuiRadioProps, 'checked' | 'value' | 'onChange'>;\n}\n\nconst Radio: React.FC<RadioProps> = ({\n options = [],\n value = '',\n onChange = () => { },\n name = 'radio-group',\n row = false,\n radioProps = {},\n ...restProps\n}) => {\n return (\n <RadioGroup\n aria-labelledby={`${name}-label`}\n name={name}\n value={value as string}\n onChange={onChange}\n row={row}\n {...restProps}\n >\n {options.map((option) => (\n <FormControlLabel\n key={option.value}\n value={option.value}\n control={\n <MuiRadio\n color={radioProps.color ?? 'primary'}\n size={radioProps.size ?? 'medium'}\n {...radioProps}\n />\n }\n label={option.label}\n disabled={option.disabled}\n />\n ))}\n </RadioGroup>\n );\n};\n\nRadio.displayName = 'Radio';\n\nexport default Radio;\n","import type React from 'react';\nimport { useState } from 'react';\n\nimport { Box, Collapse, InputAdornment } from '@mui/material';\n\nimport { CloseIcon, SearchIcon } from '../../assets/svg';\nimport { isEmptyString } from '../../utils';\nimport { IconButton } from '../iconButton';\nimport { TextField } from '../textField';\nimport { Tooltip } from '../toolTip';\n\nimport type { HandleClick } from '../viewHeader/defaultActions/types';\n\nexport interface SearchBarProps {\n search?: string;\n handleClick?: HandleClick;\n setSearch?: (search: string) => void;\n actionType?: string;\n placeholder?: string;\n}\n\nconst SearchBar: React.FC<SearchBarProps> = ({\n placeholder = 'Search here...',\n search = '',\n handleClick = () => { },\n setSearch = () => { },\n actionType = ''\n}) => {\n const [openSearch, setOpenSearch] = useState(false);\n\n const handleSearchChange = (value: string) => {\n setSearch(value);\n if (!isEmptyString(value)) {\n handleClick(actionType, { search: value });\n }\n };\n\n const handleClose = () => {\n setOpenSearch(false);\n setSearch('');\n handleClick(actionType, { search: '' });\n };\n\n return (\n <Box display=\"flex\">\n <Collapse in={openSearch} orientation=\"horizontal\">\n <TextField\n size=\"small\"\n placeholder={placeholder}\n aria-label=\"Search here\"\n value={search}\n onChange={(event) => {\n handleSearchChange(event.target.value);\n }}\n slotProps={{\n input: {\n startAdornment: <InputAdornment position=\"start\"><SearchIcon /></InputAdornment>,\n endAdornment: <InputAdornment position=\"end\">\n <IconButton onClick={handleClose}><CloseIcon /></IconButton>\n </InputAdornment>,\n },\n }}\n />\n </Collapse>\n {!openSearch && <Tooltip arrow title=\"Search\">\n <IconButton className=\"roundIcon\" onClick={() => { setOpenSearch(true); }}>\n <SearchIcon />\n </IconButton>\n </Tooltip>}\n </Box>\n );\n};\n\nSearchBar.displayName = 'SearchBar';\n\nexport default SearchBar;","import React from 'react';\n\nimport {\n Select as MuiSelect,\n MenuItem as MuiMenuItem,\n ListItemText,\n OutlinedInput,\n type SelectProps as MuiSelectProps,\n type SelectChangeEvent,\n styled,\n} from '@mui/material';\n\nimport { Style } from './style';\n\nimport { CheckBox } from '../checkBox';\n\ninterface SelectOption {\n value: string | number;\n label: string;\n disabled?: boolean;\n}\n\nexport interface MultiSelectProps extends Omit<MuiSelectProps<(string | number)[]>, 'onChange'> {\n options: SelectOption[];\n value: (string | number)[];\n placeholder?: string;\n size?: 'small' | 'medium';\n variant?: 'outlined' | 'filled' | 'standard';\n onChange?: (value: (string | number)[], event: SelectChangeEvent<(string | number)[]>) => void;\n className?: string;\n}\n\nconst MultiSelect: React.FC<MultiSelectProps> = ({\n options = [],\n value = [],\n placeholder = '',\n onChange = () => { },\n size = 'medium',\n variant = 'outlined',\n className = '',\n}) => {\n const getLabel = (v: string | number) =>\n options.find(opt => opt.value === v)?.label ?? v;\n\n const renderValue = (selected: (string | number)[]) =>\n selected.length === 0 ? <em>{placeholder}</em> : selected.map(getLabel).join(', ');\n\n return (\n <MuiSelect<(string | number)[]>\n multiple\n input={<OutlinedInput notched={false} />}\n value={value}\n onChange={(event) => onChange(event.target.value as (string | number)[], event)}\n displayEmpty={!!placeholder}\n renderValue={renderValue}\n size={size}\n variant={variant}\n className={className}\n >\n {options.map((option) => (\n <MuiMenuItem key={option.value} value={option.value} disabled={option.disabled}>\n <CheckBox checked={value.includes(option.value)} />\n <ListItemText primary={option.label} />\n </MuiMenuItem>\n ))}\n </MuiSelect>\n );\n};\n\nMultiSelect.displayName = 'MultiSelect';\n\nexport default styled(MultiSelect)(Style);\n","import React from 'react';\n\nimport {\n Select as MuiSelect,\n MenuItem as MuiMenuItem,\n type SelectProps as MuiSelectProps,\n type SelectChangeEvent,\n ListItemText,\n OutlinedInput,\n styled,\n} from '@mui/material';\n\nimport { Style } from './style';\n\ninterface SelectOption {\n value: string | number;\n label: string;\n disabled?: boolean;\n}\nexport interface SelectProps extends Omit<MuiSelectProps<string | number>, 'onChange'> {\n options: SelectOption[];\n value: string | number;\n placeholder?: string;\n onChange?: (\n value: string | number,\n event: SelectChangeEvent<string | number>\n ) => void;\n size?: 'small' | 'medium';\n variant?: 'outlined' | 'filled' | 'standard';\n className?: string;\n}\n\nconst Select: React.FC<SelectProps> = ({\n options = [],\n size = 'medium',\n variant = 'outlined',\n onChange = () => { },\n value = '',\n placeholder = '',\n className = '',\n ...restProps\n}) => {\n const renderValue = (selected: string | number) => {\n if (!selected) return <em>{placeholder}</em>;\n return options.find((opt) => opt.value === selected)?.label ?? selected;\n };\n\n return (\n <MuiSelect<string | number>\n input={<OutlinedInput notched={false} />}\n value={value}\n onChange={(event) => onChange(event.target.value, event)}\n displayEmpty={!!placeholder}\n renderValue={renderValue}\n variant={variant}\n size={size}\n className={className}\n {...restProps}\n >\n {options.map((option) => (\n <MuiMenuItem\n key={option.value}\n value={option.value}\n disabled={option.disabled}\n >\n <ListItemText primary={option.label} />\n </MuiMenuItem>\n ))}\n </MuiSelect>\n );\n};\n\nSelect.displayName = 'Select';\n\nexport default styled(Select)(Style);\n","export const Style = () => {\n return {\n width: '100%',\n borderRadius: '20px !important',\n };\n};\n","import type React from 'react';\n\nimport { Slider as MuiSlider, type SliderProps as MuiSliderProps } from '@mui/material';\nexport interface SliderProps extends MuiSliderProps {\n value?: number | number[];\n defaultValue?: number | number[];\n onChange?: (event: Event, value: number | number[]) => void;\n min?: number;\n max?: number;\n step?: number;\n marks?: boolean | Array<{ value: number; label?: string }>;\n valueLabelDisplay?: 'on' | 'auto' | 'off';\n color?: 'primary' | 'secondary' | 'error' | 'info' | 'success' | 'warning';\n size?: 'small' | 'medium';\n disabled?: boolean;\n orientation?: 'horizontal' | 'vertical';\n track?: 'normal' | 'inverted' | false;\n className?: string;\n}\n\nconst Slider: React.FC<SliderProps> = ({\n value = 0,\n defaultValue = 0,\n onChange = () => { },\n min = 0,\n max = 100,\n step = 1,\n marks = false,\n valueLabelDisplay = 'auto',\n color = 'primary',\n size = 'medium',\n disabled = false,\n orientation = 'horizontal',\n track = 'normal',\n className = '',\n ...restProps\n}) => {\n return (\n <MuiSlider\n value={value}\n defaultValue={defaultValue}\n onChange={onChange}\n min={min}\n max={max}\n step={step}\n marks={marks}\n valueLabelDisplay={valueLabelDisplay}\n color={color}\n size={size}\n disabled={disabled}\n orientation={orientation}\n track={track}\n className={className}\n {...restProps}\n />\n );\n};\n\nexport default Slider;","import type React from 'react';\n\nimport { Snackbar, Alert, Slide } from '@mui/material';\n\nexport interface SnackBarProps {\n message?: string;\n type?: 'success' | 'info' | 'warning' | 'error';\n autoHideDuration?: number;\n onClose: () => void;\n anchorOrigin?: {\n vertical: 'top' | 'bottom';\n horizontal: 'left' | 'center' | 'right';\n };\n slots?: Record<string, React.ElementType>;\n slotProps?: React.ComponentProps<typeof Snackbar>['slotProps'];\n snackbarKey?: string;\n}\n\nconst SnackBar: React.FC<SnackBarProps> = ({\n message = '',\n type = 'info',\n autoHideDuration = 2000,\n onClose = () => { },\n anchorOrigin = { vertical: 'top', horizontal: 'right' },\n slots = { transition: Slide },\n slotProps = { transition: { direction: 'left' } },\n snackbarKey = 'topright',\n}) => {\n const open = Boolean(message); //snackbar opens when message is not empty\n\n return open ? (\n <Snackbar\n open={open}\n autoHideDuration={autoHideDuration}\n onClose={onClose}\n anchorOrigin={anchorOrigin}\n slots={slots}\n slotProps={slotProps}\n key={snackbarKey}\n >\n <Alert\n onClose={onClose}\n severity={type}\n variant=\"filled\"\n >\n {message}\n </Alert>\n </Snackbar>\n ) : null;\n};\n\nSnackBar.displayName = 'SnackBar';\n\nexport default SnackBar;\n\n","import type React from 'react';\n\nimport {\n FormControlLabel,\n Switch as MuiSwitch,\n type SwitchProps as MuiSwitchProps,\n} from '@mui/material';\nexport interface SwitchProps extends MuiSwitchProps {\n checked?: boolean;\n defaultChecked?: boolean;\n onChange?: (\n event: React.ChangeEvent<HTMLInputElement>,\n checked: boolean\n ) => void;\n name?: string;\n label?: string;\n color?:\n | 'primary'\n | 'secondary'\n | 'error'\n | 'info'\n | 'success'\n | 'warning'\n | 'default';\n size?: 'small' | 'medium';\n disabled?: boolean;\n className?: string;\n}\n\nconst Switch: React.FC<SwitchProps> = ({\n checked = false,\n defaultChecked = false,\n onChange = () => { },\n name = '',\n label = '',\n color = 'primary',\n size = 'medium',\n disabled = false,\n className = '',\n ...restProps\n}) => {\n return (\n <FormControlLabel\n control={\n <MuiSwitch\n checked={checked}\n defaultChecked={defaultChecked}\n onChange={onChange}\n name={name}\n color={color}\n size={size}\n disabled={disabled}\n className={className}\n {...restProps}\n />\n }\n label={label}\n />\n );\n};\n\nexport default Switch;\n","import React from 'react';\n\n// udpate switch to use the new switch component - TO-DO\nimport { Box, Grid, Switch } from '@mui/material';\n\nimport { Typography, Tooltip, Link } from '../../';\nimport { formatDate } from '../../../utils/date';\nimport { getColorFromId, strEllipsis } from '../../../utils/global';\nimport { AvatarTitle } from '../../avatarTitle';\n\nimport type { FieldMappingParams } from '../types';\n\nexport const defaultFieldMappings = {\n 'DEFAULT': ({ data = {}, col, nullFieldText = '' }: FieldMappingParams) => {\n return (\n <Tooltip title={strEllipsis(data[col?.field || ''])} arrow>\n <Typography textAlign=\"left\">{strEllipsis(data[col?.field || '']) || nullFieldText || ''}</Typography>\n </Tooltip>\n );\n },\n\n 'AVATAR_LABEL': ({ handleRowDataClick = () => { }, data = {}, col }: FieldMappingParams) => {\n const fieldValue = data[col?.field || ''];\n const isActive = data.is_active;\n\n return (\n <Grid container alignItems=\"center\" wrap=\"nowrap\" onClick={col ? () => { handleRowDataClick(data, col) } : () => { }}>\n {typeof isActive === 'boolean' && (<Box className={`activeDot ${isActive ? 'active' : 'inactive'}`} />)}\n <AvatarTitle\n background={`${getColorFromId(fieldValue || null)}50`}\n color={`${getColorFromId(fieldValue || null)}`}\n name={`${fieldValue}`}\n />\n <Box ml={1}>\n <Tooltip title={typeof fieldValue === 'string' && fieldValue.length > 10 ? fieldValue : ''} arrow>\n <span>{strEllipsis(fieldValue)}</span>\n </Tooltip>\n </Box>\n </Grid>);\n },\n\n 'LINK': ({ handleRowDataClick = () => { }, data = {}, col }: FieldMappingParams) => {\n return (\n <Link onClick={col ? () => { handleRowDataClick(data, col) } : () => { }}>\n <Typography color=\"primary\" textAlign=\"left\">{data[col?.field || '']}</Typography>\n </Link>\n );\n },\n\n 'SWITCH': ({ data = {}, col, handleRowDataClick = () => { } }: FieldMappingParams) => {\n return (\n <Switch\n checked={Boolean(data[col?.field || ''])}\n onChange={col ? (e: React.ChangeEvent<HTMLInputElement>) => handleRowDataClick(data, col, e) : () => { }}\n color=\"primary\"\n size=\"small\"\n />\n );\n },\n\n 'DATE_TIME': ({ data = {}, col, nullFieldText = '' }: FieldMappingParams) => {\n return (\n <Typography textAlign=\"left\" className=\"bodyField\">\n {formatDate(data[col?.field || ''], 'MMMM D, YYYY [at] hh:mm A') || nullFieldText || ''}\n </Typography>\n );\n },\n\n 'DATE': ({ data = {}, col, nullFieldText = '' }: FieldMappingParams) => {\n return (\n <Typography textAlign=\"left\" className=\"bodyField\">\n {formatDate(data[col?.field || ''], 'MMMM D, YYYY') || nullFieldText || ''}\n </Typography>\n );\n }\n}","import React from 'react';\n\nimport { Box } from '@mui/material';\n\nimport { EditIcon } from '../../../assets/editIcon';\nimport { SearchIcon } from '../../../assets/searchIcon';\nimport { IconButton } from '../../../components/iconButton';\nimport { Tooltip } from '../../../components/toolTip';\nimport { getFormattedName } from '../../../utils/global';\n\nimport type { TableActionsProps } from '../types';\n\nconst TableActions: React.FC<TableActionsProps> = (props) => {\n\n const { actions = [], handleAction = () => { }, rowData = {}, customActions = {} } = props;\n\n const actionIcon: Record<string, React.ReactElement | ((rowData: Record<string, string | number | boolean | null>, action: string) => React.ReactElement)> = {\n 'EDIT': <EditIcon />,\n 'VIEW': <SearchIcon />,\n ...customActions\n }\n\n return (\n <Box className=\"tableActions\">\n {actions.length > 0 && actions.map((item) => {\n // eslint-disable-next-line\n if (actionIcon[item]) {\n return (\n <Tooltip key={item} title={getFormattedName(item)} arrow >\n <IconButton\n size=\"small\"\n className='actionIconBtn'\n onClick={(e) => { handleAction(item, rowData, e) }}\n >\n {typeof actionIcon[item] === 'function' ? actionIcon[item](rowData, item) : actionIcon[item]}\n </IconButton>\n </Tooltip>\n )\n } else {\n return null\n }\n })}\n </Box>\n );\n};\n\nexport default TableActions;","import React, { useMemo } from 'react';\n\nimport { TableCell, TableRow, TableBody } from '@mui/material';\n\nimport { defaultFieldMappings } from './defaultMappings';\nimport TableActions from './tableActions';\n\nimport type { BodyProps, HeaderArray } from '../types';\n\nconst TblBody: React.FC<BodyProps> = (props) => {\n\n const { dataRows = [], headers = [], headerStyles = {}, nullFieldText = '', fieldMappings = {}, actions = [], handleAction = () => { }, handleRowDataClick = () => { }, customActions = {}, lazyLoad = null } = props;\n\n const dataheaders = useMemo((): HeaderArray[] => {\n return headers.filter((item) => item.visible && item.field !== 'actions')\n }, [headers])\n\n const allFieldMappings = useMemo(() => {\n return { ...defaultFieldMappings, ...fieldMappings };\n }, [fieldMappings]);\n\n return (\n <TableBody>\n {dataRows.map((data, index) => (\n // eslint-disable-next-line\n <TableRow className=\"tableRowCls\" key={`data-col-${index}`}>\n {dataheaders.map((col, indx) => {\n // eslint-disable-next-line\n const styles = { sx: headerStyles[col.field] || headerStyles[\"*\"] || {} };\n const mappingKey = col.mapping as keyof typeof allFieldMappings | undefined;\n const mappingFunction = mappingKey && mappingKey in allFieldMappings ? allFieldMappings[mappingKey] : allFieldMappings['DEFAULT'];\n return (\n <TableCell\n {...styles}\n className={`tableColCls tableColCls-${col.field}`}\n // eslint-disable-next-line\n key={`data-col-${index}-${indx}`}\n data-field={col.field}\n >\n {mappingFunction({ data, col, handleRowDataClick, nullFieldText })}\n </TableCell>\n )\n })}\n {actions.length > 0 && (\n <TableCell className=\"tableColCls\" data-field=\"actions\">\n <TableActions rowData={data} actions={actions} handleAction={handleAction} customActions={customActions} />\n </TableCell>\n )}\n </TableRow>\n ))}\n {lazyLoad}\n </TableBody>\n )\n}\n\nexport default TblBody;","import type { ReactNode } from 'react';\nimport React, { useState, useMemo } from 'react';\n\nimport { DndContext, closestCenter, PointerSensor, useSensor, useSensors, DragOverlay } from '@dnd-kit/core';\nimport { arrayMove, SortableContext, verticalListSortingStrategy } from '@dnd-kit/sortable';\n\nimport { Table, Paper, styled } from '@mui/material';\n\nimport TblBody from './body/tblBody';\nimport TblHeader from './header/tblHeader';\nimport { Style } from './styles';\nimport type { DndWrapperProps } from './types';\n\nimport type { DragStartEvent, DragEndEvent, DragOverEvent } from '@dnd-kit/core';\n\nconst DndWrapper: React.FC<DndWrapperProps> = (props) => {\n\n const { headers, children, dataRows, headerStyles, fieldMappings, handleHeaderChange = () => { } } = props;\n\n const [draggedHeader, setDraggedHeader] = useState<string | null>(null);\n\n const sensors = useSensors(useSensor(PointerSensor, { activationConstraint: { distance: 5 } }));\n\n const handleReorder = (activeId: string, overId: string) => {\n if (activeId !== overId) {\n const headerMap = new Map<string, number>();\n headers.forEach((header, index) => {\n headerMap.set(header.field, index);\n });\n\n const oldIndex = headerMap.get(activeId);\n const newIndex = headerMap.get(overId);\n if (oldIndex !== undefined && newIndex !== undefined) {\n // Check if the target item is draggable\n const targetHeader = headers[newIndex];\n // eslint-disable-next-line\n if (targetHeader && targetHeader.draggable !== false) {\n const newHeaders = arrayMove(headers, Number(oldIndex), Number(newIndex));\n handleHeaderChange(newHeaders);\n }\n }\n }\n }\n\n const handleDragStart = (event: DragStartEvent) => {\n setDraggedHeader(event.active.id as string);\n };\n\n const handleDragEnd = (event: DragEndEvent) => {\n setDraggedHeader(null);\n if (event.over) handleReorder(event.active.id as string, event.over.id as string);\n };\n\n const handleDragOver = (event: DragOverEvent) => {\n if (event.over) handleReorder(event.active.id as string, event.over.id as string);\n };\n\n const sortableItems = useMemo((): string[] => {\n return headers.map((header, index) => {\n return header.field || `header-${index}`;\n });\n }, [headers]);\n\n const dragOverlayContent = useMemo((): ReactNode => {\n if (!draggedHeader) return null;\n\n const draggedHeaderItem = headers.filter((header) => header.field === draggedHeader);\n return (\n <Table>\n <TblHeader headers={draggedHeaderItem} headerStyles={headerStyles} sortObj={{ sortField: '', sortBy: '' }} handleSort={() => { }} />\n <TblBody dataRows={dataRows.slice(0, 10)} headers={draggedHeaderItem} headerStyles={headerStyles} fieldMappings={fieldMappings} nullFieldText=\"\" handleAction={() => { }} actions={[]} customActions={{}} handleRowDataClick={() => { }} />\n </Table>\n );\n }, [draggedHeader, headers, dataRows, headerStyles, fieldMappings]);\n\n return (\n <DndContext\n sensors={sensors}\n collisionDetection={closestCenter}\n onDragStart={handleDragStart}\n onDragEnd={handleDragEnd}\n onDragOver={handleDragOver}\n >\n <SortableContext items={sortableItems} strategy={verticalListSortingStrategy}>\n {children}\n </SortableContext>\n <DragOverlay>\n <Paper\n className=\"custom-paper\"\n elevation={4}\n >\n {dragOverlayContent}\n </Paper>\n </DragOverlay>\n </DndContext>\n )\n}\n\nexport default styled(DndWrapper)(Style);","import type { ReactNode } from 'react';\nimport React from 'react';\n\nimport { Box } from '@mui/material';\n\nimport { SortAscIcon } from '../../../assets/svg/sorting/ascending';\nimport { SortDescIcon } from '../../../assets/svg/sorting/descending';\nimport { IconButton } from '../../../components/iconButton';\nimport { Typography } from '../../../components/typography';\n\nimport type { HeaderContentProps } from '../types';\n\nconst HeaderContent: React.FC<HeaderContentProps> = ({\n label,\n sortable = false,\n handleSort = () => { },\n sortObj = { sortField: '', sortBy: '' },\n field = '',\n}) => {\n\n const onSort = (): void => {\n if (sortObj.sortBy === 'desc') {\n handleSort({ sortField: field, sortBy: 'asc' });\n } else {\n handleSort({ sortField: field, sortBy: 'desc' });\n }\n };\n\n const getSortIcon = (): ReactNode => {\n switch (sortObj.sortBy) {\n case 'asc':\n return <SortAscIcon />;\n case 'desc':\n return <SortDescIcon />;\n default:\n return <SortAscIcon />;\n }\n };\n\n return (\n <Box className=\"headerContent\">\n <Typography className=\"headerContentTxt\" variant=\"body1\">{label}</Typography>\n {sortable && (\n <IconButton\n size=\"small\"\n className={`sortIconButton ${sortObj.sortField === field ? 'sort-active' : 'sort-hover'}`}\n onClick={(e) => {\n e.stopPropagation();\n onSort();\n }}\n >\n {getSortIcon()}\n </IconButton>\n )}\n </Box>\n );\n};\n\nexport default HeaderContent;","import type { ReactNode } from 'react';\nimport React from 'react';\n\nimport { TableCell, TableRow, TableBody } from '@mui/material';\n\nimport { TextSearchField, SelectSearchField, DateSearchField } from './searchFields';\n\nimport type { SearchBarProps, HeaderArray } from '../types';\n\nconst SearchBar: React.FC<SearchBarProps> = React.memo((props) => {\n const {\n headers = [],\n searchObj = {},\n handleSearch = () => { }\n } = props;\n\n const renderSearchField = (item: HeaderArray): ReactNode => {\n if (item.searchable) {\n return (\n <TextSearchField\n field={item.field}\n value={searchObj[item.field] || ''}\n onSearch={(value) => handleSearch({ ...searchObj, [item.field]: value })}\n onClear={() => handleSearch({ ...searchObj, [item.field]: '' })}\n />\n );\n }\n\n if (item.customSearch?.field === 'SELECT') {\n return (\n <SelectSearchField\n field={item.field}\n value={searchObj[item.field] || ''}\n options={item.customSearch.options || []}\n onSearch={(value) => handleSearch({ ...searchObj, [item.field]: value })}\n />\n );\n }\n\n if (item.customSearch?.field === 'DATE_RANGE') {\n return (\n <DateSearchField\n field={item.field}\n value={searchObj[item.field] || null}\n onSearch={(value) => handleSearch({ ...searchObj, [item.field]: value })}\n />\n );\n }\n\n return null;\n };\n\n return (\n <TableBody>\n <TableRow>\n {headers.map((item) => (\n <TableCell\n key={`search-${item.field}`}\n className=\"searchBox\"\n data-field={item.field}\n >\n {renderSearchField(item)}\n </TableCell>\n ))}\n </TableRow>\n </TableBody>\n );\n});\n\nSearchBar.displayName = 'SearchBar';\n\nexport default SearchBar;","import React from 'react';\n\nimport dayjs from 'dayjs';\n\nimport type { FieldChangeHandlerContext } from '@mui/x-date-pickers/internals';\nimport type { DateValidationError } from '@mui/x-date-pickers/models';\n\nimport { DatePicker } from '../../../../components/datePicker';\n\nimport type { Dayjs } from 'dayjs';\n\ninterface DateSearchFieldProps {\n field: string;\n value: string | null;\n onSearch: (value: string | null) => void;\n}\n\nconst DateSearchFieldComponent: React.FC<DateSearchFieldProps> = ({\n field,\n value,\n onSearch,\n}) => {\n const handleDateChange = (date: Dayjs | null, _context?: FieldChangeHandlerContext<DateValidationError>) => {\n let newValue: string | null = null;\n try {\n newValue = date ? dayjs(date).format('YYYY-MM-DD') : null;\n } catch (_err) {\n // Invalid date handled silently\n }\n onSearch(newValue);\n };\n\n return (\n <DatePicker\n value={value || ''}\n handleDateChange={handleDateChange}\n format=\"DD/MM/YYYY\"\n ariaLabel={`Select ${field} date`}\n />\n );\n};\n\nDateSearchFieldComponent.displayName = 'DateSearchField';\n\nexport const DateSearchField = React.memo(DateSearchFieldComponent);","import React from 'react';\n\n// TO-DO: Update to use the new select component\nimport { Select, MenuItem } from '@mui/material';\n\ninterface SelectOption {\n value: string | number;\n label: string;\n}\n\ninterface SelectSearchFieldProps {\n field: string;\n value: string;\n options: SelectOption[];\n onSearch: (value: string) => void;\n}\n\nexport const SelectSearchField: React.FC<SelectSearchFieldProps> = React.memo(({\n field,\n value,\n options,\n onSearch\n}) => {\n return (\n <Select\n onChange={(e) => onSearch(e.target.value)}\n value={value}\n displayEmpty\n defaultValue=\"\"\n size=\"small\"\n aria-label={`Select ${field}`}\n >\n {options.map((option) => (\n <MenuItem key={option.value} value={option.value}>\n {option.label}\n </MenuItem>\n ))}\n </Select>\n );\n});\n\nSelectSearchField.displayName = 'SelectSearchField';","import React from 'react';\n\nimport { InputAdornment } from '@mui/material';\n\nimport { SearchIcon } from '../../../../assets/searchIcon';\nimport { CloseIcon } from '../../../../assets/svg/closeIcon';\nimport { IconButton } from '../../../../components/iconButton';\nimport { TextField } from '../../../../components/textField';\n\ninterface TextSearchFieldProps {\n field: string;\n value: string;\n onSearch: (value: string) => void;\n onClear: () => void;\n}\n\nconst TextSearchFieldComponent: React.FC<TextSearchFieldProps> = ({\n field,\n value,\n onSearch,\n onClear\n}) => {\n\n return (\n <TextField\n onChange={(e) => onSearch(e.target.value)}\n value={value}\n size=\"small\"\n placeholder=\"Search\"\n aria-label={`Search ${field}`}\n slotProps={{\n input: {\n startAdornment: (\n <InputAdornment position=\"start\">\n <SearchIcon />\n </InputAdornment>\n ),\n endAdornment: (\n <InputAdornment\n position=\"end\"\n className=\"text-search-adornment\"\n >\n {value ? (\n <IconButton\n className=\"text-search-icon-button\"\n onClick={onClear}\n ariaLabel={`Clear search for ${field}`}\n size=\"small\"\n >\n <CloseIcon />\n </IconButton>\n ) : null}\n </InputAdornment>\n ),\n },\n }}\n />\n );\n};\n\nTextSearchFieldComponent.displayName = 'TextSearchField';\n\nexport const TextSearchField = React.memo(TextSearchFieldComponent);","import React from 'react';\n\nimport { useSortable } from '@dnd-kit/sortable';\nimport { CSS } from '@dnd-kit/utilities';\n\nimport { TableCell, TableHead, TableRow } from '@mui/material';\n\nimport HeaderContent from './headerContent';\n\nimport type { HeaderProps, SortableTableCellProps } from '../types';\n\nconst SortableTableCell: React.FC<SortableTableCellProps> = ({ id, children, className, disabled = false, customSx = {}, ...props }) => {\n const { attributes, listeners, setNodeRef, transform, transition, isDragging } = useSortable({\n id: id,\n disabled: disabled,\n data: {\n type: 'header',\n id: id\n }\n });\n\n const classNameWithState = `${className} ${disabled ? 'sortable-disabled' : 'sortable-enabled'} ${isDragging ? 'sortable-dragging' : ''}`;\n\n return (\n <TableCell\n ref={setNodeRef}\n sx={{\n transform: CSS.Transform.toString(transform),\n transition,\n opacity: isDragging ? 0.5 : 1,\n ...customSx,\n }}\n {...(disabled ? {} : attributes)}\n {...(disabled ? {} : listeners)}\n className={classNameWithState}\n {...props}\n >\n {children}\n </TableCell>\n );\n};\n\nconst TblHeader: React.FC<HeaderProps> = (props) => {\n const { headers = [], sortObj = { sortField: '', sortBy: '' }, handleSort = () => { }, headerStyles = {} } = props;\n\n return (\n <TableHead>\n <TableRow>\n {headers\n .filter(col => col.visible)\n .map((col, index) => {\n const isDisabled = col.draggable === false;\n // eslint-disable-next-line\n const styles = headerStyles[col.field] || headerStyles['*'] || {};\n return (\n <SortableTableCell\n key={col.field || index}\n id={col.field || `header-${index}`}\n className=\"tableHeaderCls\"\n disabled={isDisabled}\n customSx={styles}\n data-field={col.field}\n >\n <HeaderContent {...col} sortObj={sortObj} handleSort={handleSort} />\n </SortableTableCell>\n );\n })}\n </TableRow>\n </TableHead>\n )\n}\n\nexport default TblHeader;","import React, { useMemo } from 'react';\n\nimport type { SelectChangeEvent } from '@mui/material';\nimport { Grid, Typography, Select, MenuItem, IconButton } from '@mui/material';\n\nimport type { PaginationProps } from './types';\n\nimport { PaginationBackwardIcon } from '../../assets/svg/pagination/backwardIcon';\nimport { PaginationForwardIcon } from '../../assets/svg/pagination/forwardIcon';\nimport { PaginationNextIcon } from '../../assets/svg/pagination/nextIcon';\nimport { PaginationPrevIcon } from '../../assets/svg/pagination/prevIcon';\n\nconst menuOptions = [\n { value: 20, label: '20' },\n { value: 50, label: '50' },\n { value: 100, label: '100' },\n];\n\nconst Pagination: React.FC<PaginationProps> = (props) => {\n\n const { totalCount = 0, skip = 0, limit = 10, handlePaginationChange = () => { } } = props;\n\n const { currentPage, maxPage } = useMemo((): { currentPage: number; maxPage: number } => {\n const maxPagee = Math.ceil(totalCount / limit);\n const currentPagee = skip === 0 ? 1 : skip + 1;\n return { currentPage: Math.min(currentPagee, maxPagee), maxPage: maxPagee };\n }, [totalCount, skip, limit])\n\n const pageDisplay = useMemo((): string => {\n return `Displaying ${skip * limit + 1}-${(skip + 1) * limit < totalCount ? (skip + 1) * limit : totalCount} of ${totalCount} results`\n }, [skip, limit, totalCount])\n\n return (\n <Grid\n container\n className=\"pagination\"\n justifyContent=\"space-between\"\n >\n <Grid className=\"flexAlign pagination-left\">\n <Typography variant=\"body2\" className=\"pagination-show-label\">Show</Typography>\n <Select\n className=\"pagination-select\"\n labelId=\"simple-select-label\"\n id=\"simple-select\"\n fullWidth\n name=\"isActive\"\n value={limit}\n onChange={(e: SelectChangeEvent<number>) => { handlePaginationChange({ page: 1, pageSize: Number(e.target.value) }); }}\n >\n {menuOptions.map((option) => (\n <MenuItem key={option.value} value={option.value}>\n {option.label}\n </MenuItem>\n ))}\n </Select>\n <Typography variant=\"body2\" className=\"pagination-display\">{pageDisplay}</Typography>\n </Grid>\n <Grid className=\"flexAlign\">\n <IconButton onClick={() => { handlePaginationChange({ page: 1, pageSize: limit }) }} disabled={currentPage === 1}>\n <PaginationBackwardIcon />\n </IconButton>\n <IconButton onClick={() => { handlePaginationChange({ page: skip, pageSize: limit }) }} disabled={currentPage === 1}>\n <PaginationPrevIcon />\n </IconButton>\n <Typography variant=\"body2\" className=\"pagination-page-info\">\n {currentPage} of {maxPage}\n </Typography>\n <IconButton onClick={() => { handlePaginationChange({ page: skip + 2, pageSize: limit }) }} disabled={currentPage === maxPage}>\n <PaginationNextIcon />\n </IconButton>\n <IconButton onClick={() => { handlePaginationChange({ page: maxPage, pageSize: limit }) }} disabled={currentPage === maxPage}>\n <PaginationForwardIcon />\n </IconButton>\n </Grid>\n </Grid>\n );\n};\n\nexport default Pagination;\n","import type { Theme } from '@mui/material/styles';\n\nexport const Style = ({ theme }: { theme: Theme }) => ({\n '&.MuiTableContainer-root ': {\n height: 'calc(100% - 30px)',\n },\n '.tableHeaderCls': {\n backgroundColor: theme.palette.view?.table || '#d4b0fd',\n fontWeight: 'bold',\n textAlign: 'left',\n padding: '0 10px',\n '&:hover .sortIconButton.sort-hover': {\n opacity: 1\n }\n },\n '.sortable-enabled': {\n cursor: 'grab',\n userSelect: 'none',\n position: 'relative',\n },\n '.sortable-disabled': {\n cursor: 'default',\n userSelect: 'auto',\n },\n '.sortable-dragging': {\n opacity: 0.5,\n },\n '.tableColCls': {\n '.activeDot': {\n width: '5px',\n height: '5px',\n borderRadius: '50%',\n marginRight: '10px',\n backgroundColor: 'transparent',\n },\n '.activeDot.active': {\n backgroundColor: '#54d38c',\n },\n\n '.activeDot.inactive': {\n backgroundColor: 'red',\n },\n },\n '& .pagination': {\n height: '30px',\n marginTop: theme.spacing(1),\n '& .flexAlign': {\n display: 'flex !important',\n alignItems: 'center',\n },\n '.MuiOutlinedInput-root': {\n borderRadius: '7px',\n height: '25px',\n background: theme.palette.bg?.iconBg\n },\n '.MuiOutlinedInput-notchedOutline': {\n border: `1px solid ${theme.palette.border?.toggle}`\n },\n '.MuiIconButton-root': {\n width: '28px',\n height: '28px'\n },\n '.pagination-left': {\n flex: 1,\n paddingLeft: theme.spacing(1),\n },\n '.pagination-show-label': {\n marginRight: theme.spacing(2),\n },\n '.pagination-select': {\n maxWidth: '70px',\n },\n '.pagination-display': {\n marginLeft: theme.spacing(2),\n },\n '.pagination-page-info': {\n marginRight: theme.spacing(1),\n marginLeft: theme.spacing(1),\n },\n },\n '.sortIconButton': {\n padding: '8px',\n marginLeft: '4px',\n '&:hover': {\n backgroundColor: 'rgba(0, 0, 0, 0.04)',\n }\n },\n '.sortIconButton.sort-hover': {\n opacity: 0,\n transition: 'opacity 0.2s ease-in-out'\n },\n '.sortIconButton.sort-active': {\n opacity: 1\n },\n '.searchBox': {\n background: '#fff',\n borderBottom: `1px solid ${theme.palette.border?.table}`,\n top: '44px',\n '.MuiOutlinedInput-root': {\n height: '26px',\n borderRadius: '0px',\n border: `1px solid ${theme.palette.border?.table}`,\n fontSize: '12px',\n },\n '.MuiSvgIcon-root': {\n fontSize: '1rem'\n }\n },\n\n '.MuiTableCell-head': {\n borderBottom: 'none',\n background: theme.palette.bg?.lightBg,\n padding: '0px 16px',\n height: '44px',\n whiteSpace: 'nowrap',\n '&:first-of-type': {\n borderTopLeftRadius: '4px'\n },\n '&:last-of-type': {\n borderTopRightRadius: '4px'\n }\n },\n '.MuiTableCell-head[data-field=\"actions\"]': {\n position: 'sticky !important',\n right: 0,\n top: 0,\n backgroundColor: theme.palette.view?.table,\n zIndex: 4,\n },\n '.headerContent': {\n display: 'flex',\n alignItems: 'center',\n },\n '.MuiTableCell-head[data-field=\"actions\"] .headerContent': {\n display: 'flex',\n alignItems: 'center',\n marginLeft: '8px',\n },\n '.headerContentTxt': {\n fontWeight: '550',\n textAlign: 'left',\n },\n '.MuiTableCell-body': {\n padding: '0px 16px',\n height: '48.5px',\n fontSize: '13px',\n fontFamily: theme.typography.body2.fontFamily,\n borderBottom: `1px solid ${theme.palette.border?.table} !important`,\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap',\n '&:first-of-type': {\n borderLeft: `1px solid ${theme.palette.border?.table}`\n },\n '&:last-child': {\n borderRight: `1px solid ${theme.palette.border?.table}`\n },\n '.MuiTypography-root': {\n fontSize: '13px',\n }\n },\n '.MuiTableCell-body[data-field=\"actions\"]': {\n position: 'sticky',\n right: 0,\n backgroundColor: '#fff',\n zIndex: 1,\n },\n '.actionIconBtn': {\n padding: '8px'\n },\n '.tableActions': {\n display: 'flex',\n justifyContent: 'flex-start',\n },\n '.bodyField': {\n whiteSpace: 'nowrap'\n },\n '.custom-paper': {\n borderRadius: '8px',\n overflowY: 'auto',\n },\n\n // Sticky header specific styles\n '&.sticky-header-table': {\n '.MuiTableCell-head[data-field=\"actions\"]': {\n position: 'sticky !important',\n right: 0,\n top: 0,\n backgroundColor: theme.palette.view?.table,\n zIndex: 4,\n },\n '.MuiTableHead-root': {\n position: 'sticky',\n top: 0,\n zIndex: 3,\n backgroundColor: theme.palette.view?.table,\n },\n },\n\n // Date search field styles\n '.iconButton': {\n padding: '4px',\n },\n '.closeIcon': {\n fontSize: '16px',\n },\n '.calendarIconWrapper': {\n transform: 'scale(0.85)',\n },\n\n // Text search field styles\n '.text-search-adornment': {\n width: '26px',\n height: '26px',\n },\n '.text-search-icon-button': {\n width: '26px',\n height: '26px',\n },\n\n})","import React, { useMemo } from 'react';\n\nimport { Table, TableContainer, Paper, styled, Grid, Box } from '@mui/material';\n\nimport TblBody from './body/tblBody';\nimport DndWrapper from './dndWrapper';\nimport SearchBar from './header/searchBar';\nimport TblHeader from './header/tblHeader';\nimport Pagination from './pagination';\nimport { Style } from './styles';\nimport type { HeaderArray, HeaderProps, BodyProps, TableProps } from './types';\n\nconst TableComponent: React.FC<TableProps> = (props) => {\n\n const {\n className = '', headers = [], dataRows = [], stickyHeader = true, fieldMappings = {},\n headerStyles = {}, showPagination = true, totalCount = 0, skip = 0, limit = 5,\n nullFieldText = '', handlePagination = () => { }, handleHeaderChange = () => { },\n sortObj = { sortField: '', sortBy: '' }, handleSort = () => { }, searchObj = {}, noRecordsFound = false,\n openSearch = false, handleSearch = () => { }, handleAction = () => { }, actions = [], handleRowDataClick = () => { },\n customActions = {}, lazyLoad = null\n } = props;\n\n const visibleHeaders = useMemo((): HeaderArray[] => {\n return headers.filter(f => (f.visible));\n }, [headers]);\n\n const headerProps = useMemo((): HeaderProps => ({\n headers: headers,\n headerStyles: headerStyles,\n sortObj: sortObj,\n handleSort: handleSort,\n }), [headers, headerStyles, sortObj, handleSort]);\n\n const bodyProps = useMemo((): BodyProps => ({\n dataRows: dataRows,\n headers: headers,\n headerStyles: headerStyles,\n fieldMappings: fieldMappings,\n nullFieldText: nullFieldText,\n handleAction: handleAction,\n actions: actions,\n customActions: customActions,\n handleRowDataClick: handleRowDataClick,\n lazyLoad: lazyLoad\n }), [dataRows, headers, headerStyles, fieldMappings, handleAction, nullFieldText, actions, handleRowDataClick, customActions, lazyLoad]);\n\n return (\n <>\n <TableContainer\n component={Paper}\n className={`${className} ${stickyHeader ? 'sticky-header-table' : ''}`}\n >\n <DndWrapper {...bodyProps} handleHeaderChange={handleHeaderChange}>\n <Table stickyHeader={stickyHeader}>\n <TblHeader {...headerProps} />\n {openSearch && (\n <SearchBar\n headers={visibleHeaders}\n searchObj={searchObj}\n handleSearch={handleSearch}\n />\n )}\n <TblBody {...bodyProps} />\n\n </Table>\n </DndWrapper>\n {/* TO-DO: Add no records found component */}\n {noRecordsFound && <Box>No records found</Box>}\n </TableContainer>\n {\n showPagination && (\n <Grid className={className}>\n <Pagination\n totalCount={totalCount}\n skip={skip}\n limit={limit}\n handlePaginationChange={(e: { page: number; pageSize: number }) => { handlePagination(e) }}\n />\n </Grid>\n )\n }\n </>\n );\n};\n\nexport default styled(TableComponent)(Style);\n","import type { Theme } from '@mui/material';\n\nexport const Style = ({ theme }: { theme: Theme }) => {\n return {\n width: '100%',\n '& .tab-item': {\n textTransform: 'none',\n minHeight: 'auto',\n border: '1px solid #E6E7F6',\n background: '#FCFCFE',\n borderRadius: '10px 10px 0px 0px',\n padding: '15px',\n marginRight: '10px',\n },\n '& .tab-badge': {\n background: theme.palette.secondary.main,\n color: '#fff',\n fontSize: '12px',\n fontFamily: theme.typography.h1.fontFamily,\n padding: '5px 12px',\n height: '20px',\n display: 'flex',\n alignItems: 'center',\n borderRadius: '30px'\n },\n '& .MuiTabs-indicator': {\n display: 'none',\n },\n '& .tab-label': {\n fontWeight: 600,\n },\n '& .fillPath': {\n fill: theme.palette.secondary.main,\n },\n '& .Mui-selected': {\n '& .fillPath': {\n fill: theme.palette.primary.main,\n },\n }\n\n };\n};\n\n","import type React from 'react';\n\nimport { TabPanel } from '@mui/lab';\nimport { styled } from '@mui/material';\n\nimport { TabPanelStyle } from './tabPanelStyle';\n\nexport interface TabPanelProps {\n className?: string;\n children: React.ReactNode;\n tabValue: string | number;\n currentTabValue: string | number;\n}\n\nconst TabPanelComponent: React.FC<TabPanelProps> = ({\n className = '',\n children,\n tabValue = '',\n currentTabValue = '',\n}) => {\n\n return (<TabPanel className={className} value={tabValue} hidden={currentTabValue !== tabValue}>{children}</TabPanel>);\n};\n\nTabPanelComponent.displayName = 'TabPanel';\n\nexport default styled(TabPanelComponent)(TabPanelStyle);\n\n","import type { Theme } from '@mui/material';\n\nexport const TabPanelStyle = ({ theme }: { theme: Theme }) => {\n return {\n padding: theme.spacing(3),\n width: '100%',\n };\n};\n\n","import type React from 'react';\n\nimport { Grid, Tabs as MuiTabs, Tab, styled, type TabsProps as MuiTabsProps } from '@mui/material';\n\nimport { Style } from './style';\n\nimport { Typography } from '../typography';\n\nexport interface TabItem {\n label: string;\n content?: React.ReactNode;\n value?: string | number;\n disabled?: boolean;\n icon?: React.ReactElement;\n count?: number;\n}\n\nexport interface TabsProps extends Omit<MuiTabsProps, 'onChange' | 'value' | 'children'> {\n tabs: TabItem[];\n handleTabChange: (event: React.SyntheticEvent, newValue: string | number) => void;\n orientation?: 'horizontal' | 'vertical';\n variant?: 'standard' | 'scrollable' | 'fullWidth';\n scrollButtons?: boolean | 'auto';\n className?: string;\n tabValue: string | number;\n}\n\nconst TabsComponent: React.FC<TabsProps> = ({\n tabs = [],\n tabValue = 0,\n handleTabChange = () => { },\n orientation = 'horizontal',\n variant = 'standard',\n scrollButtons = 'auto',\n className = '',\n ...restProps\n}) => {\n\n const handleChange = (event: React.SyntheticEvent, newValue: string | number) => {\n handleTabChange(event, newValue);\n };\n\n const getTabValue = (tab: TabItem, index: number): string | number => {\n return tab.value ?? index;\n };\n\n return (\n <MuiTabs\n value={tabValue}\n onChange={handleChange}\n orientation={orientation}\n className={`${className} tabs-container`}\n variant={variant}\n scrollButtons={scrollButtons}\n {...restProps}\n >\n {tabs.map((tab, index) => {\n const tabValue = getTabValue(tab, index);\n return (\n <Tab\n key={tabValue}\n label={\n <Grid container alignItems=\"center\" spacing={1}>\n {tab.icon && <Grid>{tab.icon}</Grid>}\n <Grid><Typography variant=\"body1\" className=\"tab-label\">{tab.label}</Typography></Grid>\n {tab.count && <Grid className=\"tab-badge\">{tab.count}</Grid>}\n </Grid>\n }\n value={tabValue}\n disabled={tab.disabled}\n className=\"tab-item\"\n />\n );\n })}\n </MuiTabs >\n );\n};\n\nTabsComponent.displayName = 'Tabs';\n\nexport default styled(TabsComponent)(Style);\n\n","import { LinkNode, AutoLinkNode } from '@lexical/link';\nimport { ListNode, ListItemNode } from '@lexical/list';\nimport { HeadingNode, QuoteNode } from '@lexical/rich-text';\n\nimport { theme } from './theme';\n\nimport type { InitialConfigType } from '@lexical/react/LexicalComposer';\nimport type { LexicalEditor } from 'lexical';\n\nexport const editorConfig: InitialConfigType = {\n namespace: 'MyLexicalEditor',\n theme: theme,\n onError(error: Error, _editor: LexicalEditor) {\n // eslint-disable-next-line no-console\n console.error(error);\n },\n nodes: [\n HeadingNode,\n QuoteNode,\n ListNode,\n ListItemNode,\n LinkNode,\n AutoLinkNode,\n ],\n};","import type React from 'react';\nimport { useState, useCallback, useRef, useEffect, memo } from 'react';\n\nimport { useLexicalComposerContext } from '@lexical/react/LexicalComposerContext';\nimport { FORMAT_ELEMENT_COMMAND } from 'lexical';\n\nimport { Box } from '@mui/material';\n\nimport { Button } from '../../button';\n\nexport type AlignmentType = 'left' | 'center' | 'right' | 'justify';\n\nexport interface AlignmentOption {\n value: AlignmentType;\n label: string;\n icon: React.ReactNode;\n}\n\nconst alignmentOptions: AlignmentOption[] = [\n {\n value: 'left',\n label: 'Align Left',\n icon: (\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M2 4h12M2 8h8M2 12h12\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" />\n </svg>\n ),\n },\n {\n value: 'center',\n label: 'Align Center',\n icon: (\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M4 4h8M2 8h12M4 12h8\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" />\n </svg>\n ),\n },\n {\n value: 'right',\n label: 'Align Right',\n icon: (\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M2 4h12M6 8h10M2 12h12\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" />\n </svg>\n ),\n },\n {\n value: 'justify',\n label: 'Justify',\n icon: (\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M2 4h12M2 8h12M2 12h12\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" />\n </svg>\n ),\n },\n];\n\nexport interface AlignmentDropdownProps {\n currentAlignment: AlignmentType;\n className?: string;\n}\n\nexport const AlignmentDropdown: React.FC<AlignmentDropdownProps> = memo(({ currentAlignment, className = '' }) => {\n const [editor] = useLexicalComposerContext();\n const [isOpen, setIsOpen] = useState(false);\n const dropdownRef = useRef<HTMLDivElement>(null);\n\n const currentAlignmentOption = alignmentOptions.find(option => option.value === currentAlignment) || alignmentOptions[0];\n\n const handleAlignmentChange = useCallback((alignment: AlignmentType): void => {\n editor.dispatchCommand(FORMAT_ELEMENT_COMMAND, alignment);\n setIsOpen(false);\n }, [editor]);\n\n useEffect(() => {\n const handleClickOutside = (event: MouseEvent): void => {\n if (dropdownRef.current && !dropdownRef.current.contains(event.target as Node)) {\n setIsOpen(false);\n }\n };\n\n if (isOpen) {\n document.addEventListener('mousedown', handleClickOutside);\n }\n\n return () => {\n document.removeEventListener('mousedown', handleClickOutside);\n };\n }, [isOpen]);\n\n return (\n <Box className={`alignment-dropdown ${className}`.trim()} ref={dropdownRef}>\n <Button\n variant=\"text\"\n color=\"inherit\"\n className=\"alignment-button\"\n onClick={() => setIsOpen(!isOpen)}\n >\n <span className=\"alignment-icon\">{currentAlignmentOption.icon}</span>\n <span className=\"alignment-arrow\">▼</span>\n </Button>\n {isOpen && (\n <Box className=\"alignment-menu\">\n {alignmentOptions.map((option) => (\n <Button\n key={option.value}\n variant=\"text\"\n color=\"inherit\"\n className={`alignment-option ${currentAlignment === option.value ? 'active' : ''}`.trim()}\n onClick={() => handleAlignmentChange(option.value)}\n >\n <span className=\"alignment-option-icon\">{option.icon}</span>\n <span className=\"alignment-option-label\">{option.label}</span>\n </Button>\n ))}\n </Box>\n )}\n </Box>\n );\n});\n\nAlignmentDropdown.displayName = 'AlignmentDropdown';\n\n","import type React from 'react';\nimport { memo, useCallback } from 'react';\n\nimport { useLexicalComposerContext } from '@lexical/react/LexicalComposerContext';\nimport { $createQuoteNode, $isQuoteNode } from '@lexical/rich-text';\nimport { $setBlocksType } from '@lexical/selection';\nimport { $getSelection, $isRangeSelection, $createParagraphNode } from 'lexical';\n\nimport { Button } from '../../button';\nexport interface BlockquoteButtonProps {\n isActive: boolean;\n children: React.ReactNode;\n className?: string;\n}\n\nexport const BlockquoteButton: React.FC<BlockquoteButtonProps> = memo(({ isActive, children, className = '' }) => {\n const [editor] = useLexicalComposerContext();\n\n const handleClick = useCallback((): void => {\n editor.update(() => {\n const selection = $getSelection();\n if ($isRangeSelection(selection)) {\n const anchorNode = selection.anchor.getNode();\n const topLevelElement = anchorNode.getTopLevelElement();\n\n if (topLevelElement && $isQuoteNode(topLevelElement)) {\n $setBlocksType(selection, () => $createParagraphNode());\n } else if (topLevelElement) {\n $setBlocksType(selection, () => $createQuoteNode());\n }\n }\n });\n }, [editor]);\n\n return (\n <Button\n variant=\"text\"\n color=\"inherit\"\n className={`${isActive ? 'active' : ''} ${className}`.trim()}\n onClick={handleClick}\n >\n {children}\n </Button>\n );\n});\n\nBlockquoteButton.displayName = 'BlockquoteButton';\n\n","import type React from 'react';\nimport { useState, useCallback, useRef, useEffect, memo } from 'react';\n\nimport { useLexicalComposerContext } from '@lexical/react/LexicalComposerContext';\nimport { $patchStyleText } from '@lexical/selection';\nimport { $getSelection, $isRangeSelection } from 'lexical';\n\nimport { Box } from '@mui/material';\n\nimport { Button } from '../../button';\n\nexport interface ColorOption {\n value: string;\n label: string;\n}\n\n// 36 colors arranged in 6x6 grid matching the image\nconst colorOptions: ColorOption[] = [\n // Row 1: Primary/Secondary colors\n { value: '#000000', label: 'Black' },\n { value: '#FF0000', label: 'Red' },\n { value: '#FF8C00', label: 'Orange' },\n { value: '#FFD700', label: 'Yellow' },\n { value: '#008000', label: 'Dark Green' },\n { value: '#0000FF', label: 'Blue' },\n // Row 2: Pastel colors\n { value: '#FFB6C1', label: 'Light Pink' },\n { value: '#F5DEB3', label: 'Cream' },\n { value: '#FFFFE0', label: 'Pale Yellow' },\n { value: '#98FB98', label: 'Light Sage Green' },\n { value: '#87CEEB', label: 'Light Sky Blue' },\n { value: '#E6E6FA', label: 'Lavender' },\n // Row 3: Muted tones\n { value: '#808080', label: 'Grey' },\n { value: '#FA8072', label: 'Coral' },\n { value: '#D2B48C', label: 'Tan' },\n { value: '#FFFF99', label: 'Pale Yellow 2' },\n { value: '#90EE90', label: 'Muted Green' },\n { value: '#4169E1', label: 'Medium Blue' },\n // Row 4: Darker tones\n { value: '#696969', label: 'Dark Grey' },\n { value: '#8B0000', label: 'Dark Red' },\n { value: '#A52A2A', label: 'Brown' },\n { value: '#6B8E23', label: 'Olive Green' },\n { value: '#228B22', label: 'Forest Green' },\n { value: '#00008B', label: 'Dark Royal Blue' },\n // Row 5: Very dark tones\n { value: '#2F2F2F', label: 'Very Dark Grey' },\n { value: '#654321', label: 'Darker Brown' },\n { value: '#556B2F', label: 'Darker Olive Green' },\n { value: '#006400', label: 'Darker Forest Green' },\n { value: '#000080', label: 'Darker Blue' },\n { value: '#191970', label: 'Darker Indigo' },\n // Row 6: Deep dark tones\n { value: '#1C1C1C', label: 'Deep Dark Grey' },\n { value: '#4B0000', label: 'Deep Dark Red' },\n { value: '#3D2817', label: 'Deep Brown' },\n { value: '#2F4F2F', label: 'Deep Olive' },\n { value: '#003300', label: 'Deep Forest Green' },\n { value: '#000033', label: 'Deep Indigo' },\n];\n\nexport interface ColorPickerProps {\n currentColor: string | null;\n className?: string;\n}\n\nexport const ColorPicker: React.FC<ColorPickerProps> = memo(({ currentColor, className = '' }) => {\n const [editor] = useLexicalComposerContext();\n const [isOpen, setIsOpen] = useState(false);\n const dropdownRef = useRef<HTMLDivElement>(null);\n\n const handleColorChange = useCallback((color: string): void => {\n editor.update(() => {\n const selection = $getSelection();\n if ($isRangeSelection(selection)) {\n $patchStyleText(selection, { color });\n }\n });\n setIsOpen(false);\n }, [editor]);\n\n useEffect(() => {\n const handleClickOutside = (event: MouseEvent): void => {\n if (dropdownRef.current && !dropdownRef.current.contains(event.target as Node)) {\n setIsOpen(false);\n }\n };\n\n if (isOpen) {\n document.addEventListener('mousedown', handleClickOutside);\n }\n\n return () => {\n document.removeEventListener('mousedown', handleClickOutside);\n };\n }, [isOpen]);\n\n const displayColor = currentColor || '#000000';\n\n return (\n <Box className={`color-picker ${className}`.trim()} ref={dropdownRef}>\n <Button\n variant=\"text\"\n color=\"inherit\"\n className={`color-picker-button ${isOpen ? 'active' : ''}`}\n onClick={() => setIsOpen(!isOpen)}\n >\n <span className=\"color-picker-icon\">\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path\n d=\"M8 2C8 2 6 4 6 6C6 7.10457 6.89543 8 8 8C9.10457 8 10 7.10457 10 6C10 4 8 2 8 2Z\"\n fill={displayColor}\n stroke={displayColor}\n strokeWidth=\"1\"\n />\n <path d=\"M3 12H13\" stroke={displayColor} strokeWidth=\"1.5\" strokeLinecap=\"round\" />\n </svg>\n </span>\n <span className=\"color-picker-arrow\">▼</span>\n </Button>\n {isOpen && (\n <Box className=\"color-picker-menu\">\n <Box className=\"color-picker-grid\">\n {colorOptions.map((color) => (\n <Button\n key={color.value}\n variant=\"text\"\n color=\"inherit\"\n className={`color-swatch ${currentColor === color.value ? 'active' : ''}`}\n onClick={() => handleColorChange(color.value)}\n style={{ backgroundColor: color.value }}\n title={color.label}\n >\n {currentColor === color.value && (\n <span className=\"color-swatch-check\">✓</span>\n )}\n </Button>\n ))}\n </Box>\n </Box>\n )}\n </Box>\n );\n});\n\nColorPicker.displayName = 'ColorPicker';\n\n","import type React from 'react';\nimport { memo, useCallback } from 'react';\n\nimport { useLexicalComposerContext } from '@lexical/react/LexicalComposerContext';\nimport { FORMAT_TEXT_COMMAND, type TextFormatType } from 'lexical';\n\nimport { Button } from '../../button';\n\nexport interface FormatButtonProps {\n format: TextFormatType;\n isActive: boolean;\n children: React.ReactNode;\n className?: string;\n}\n\nexport const FormatButton: React.FC<FormatButtonProps> = memo(({ format, isActive, children, className = '' }) => {\n const [editor] = useLexicalComposerContext();\n\n const handleClick = useCallback((): void => {\n editor.dispatchCommand(FORMAT_TEXT_COMMAND, format);\n }, [editor, format]);\n\n return (\n <Button\n variant=\"text\"\n color=\"inherit\"\n className={`${isActive ? 'active' : ''} ${className}`.trim()}\n onClick={handleClick}\n >\n {children}\n </Button>\n );\n});\n\nFormatButton.displayName = 'FormatButton';\n\n","import type React from 'react';\nimport { memo, useCallback } from 'react';\n\n\nimport { INSERT_UNORDERED_LIST_COMMAND, INSERT_ORDERED_LIST_COMMAND, $isListNode, $removeList } from '@lexical/list';\nimport { useLexicalComposerContext } from '@lexical/react/LexicalComposerContext';\nimport { $getSelection, $isRangeSelection } from 'lexical';\n\nimport { Button } from '../../button';\n\nexport interface ListButtonProps {\n listType: 'bullet' | 'number';\n isActive: boolean;\n children: React.ReactNode;\n className?: string;\n}\n\nexport const ListButton: React.FC<ListButtonProps> = memo(({ listType, isActive, children, className = '' }) => {\n const [editor] = useLexicalComposerContext();\n\n const handleClick = useCallback((): void => {\n editor.update(() => {\n const selection = $getSelection();\n if ($isRangeSelection(selection)) {\n const anchorNode = selection.anchor.getNode();\n const topLevelElement = anchorNode.getTopLevelElement();\n\n if (topLevelElement && $isListNode(topLevelElement)) {\n const currentListTag = topLevelElement.getTag();\n const targetListTag = listType === 'bullet' ? 'ul' : 'ol';\n\n // If clicking the same list type, remove the list\n if (currentListTag === targetListTag) {\n $removeList();\n } else {\n // If clicking different list type, convert to that type\n if (listType === 'bullet') {\n editor.dispatchCommand(INSERT_UNORDERED_LIST_COMMAND, undefined);\n } else {\n editor.dispatchCommand(INSERT_ORDERED_LIST_COMMAND, undefined);\n }\n }\n } else {\n // Not in a list, insert new list\n if (listType === 'bullet') {\n editor.dispatchCommand(INSERT_UNORDERED_LIST_COMMAND, undefined);\n } else {\n editor.dispatchCommand(INSERT_ORDERED_LIST_COMMAND, undefined);\n }\n }\n }\n });\n }, [editor, listType]);\n\n return (\n <Button\n variant=\"text\"\n color=\"inherit\"\n className={`${isActive ? 'active' : ''} ${className}`.trim()}\n onClick={handleClick}\n >\n {children}\n </Button>\n );\n});\n\nListButton.displayName = 'ListButton';\n\n","import type React from 'react';\nimport { useState, useCallback, useRef, useEffect, memo } from 'react';\n\n\nimport { useLexicalComposerContext } from '@lexical/react/LexicalComposerContext';\nimport { $createHeadingNode, type HeadingTagType } from '@lexical/rich-text';\nimport { $setBlocksType } from '@lexical/selection';\nimport { $getSelection, $isRangeSelection, $createParagraphNode } from 'lexical';\n\nimport { Box } from '@mui/material';\n\nimport { Button } from '../../button';\n\nexport type TextStyleType = 'paragraph' | HeadingTagType;\n\nexport interface TextStyleOption {\n value: TextStyleType;\n label: string;\n fontSize: string;\n fontWeight: string;\n}\n\nconst textStyles: TextStyleOption[] = [\n { value: 'h1', label: 'Heading 1', fontSize: '2em', fontWeight: 'bold' },\n { value: 'h2', label: 'Heading 2', fontSize: '1.75em', fontWeight: 'bold' },\n { value: 'h3', label: 'Heading 3', fontSize: '1.5em', fontWeight: 'bold' },\n { value: 'h4', label: 'Heading 4', fontSize: '1.25em', fontWeight: 'bold' },\n { value: 'h5', label: 'Heading 5', fontSize: '1.1em', fontWeight: 'bold' },\n { value: 'h6', label: 'Heading 6', fontSize: '1em', fontWeight: 'bold' },\n { value: 'paragraph', label: 'Normal', fontSize: '1em', fontWeight: 'normal' },\n];\n\nexport interface TextStyleDropdownProps {\n currentStyle: TextStyleType;\n className?: string;\n}\n\nexport const TextStyleDropdown: React.FC<TextStyleDropdownProps> = memo(({ currentStyle, className = '' }) => {\n const [editor] = useLexicalComposerContext();\n const [isOpen, setIsOpen] = useState(false);\n const dropdownRef = useRef<HTMLDivElement>(null);\n\n const currentStyleOption = textStyles.find(style => style.value === currentStyle) || textStyles[textStyles.length - 1];\n\n const handleStyleChange = useCallback((styleType: TextStyleType): void => {\n editor.update(() => {\n const selection = $getSelection();\n if ($isRangeSelection(selection)) {\n if (styleType === 'paragraph') {\n $setBlocksType(selection, () => $createParagraphNode());\n } else {\n $setBlocksType(selection, () => $createHeadingNode(styleType));\n }\n }\n });\n setIsOpen(false);\n }, [editor]);\n\n useEffect(() => {\n const handleClickOutside = (event: MouseEvent): void => {\n if (dropdownRef.current && !dropdownRef.current.contains(event.target as Node)) {\n setIsOpen(false);\n }\n };\n\n if (isOpen) {\n document.addEventListener('mousedown', handleClickOutside);\n }\n\n return () => {\n document.removeEventListener('mousedown', handleClickOutside);\n };\n }, [isOpen]);\n\n return (\n <Box className={`text-style-dropdown ${className}`.trim()} ref={dropdownRef}>\n <Button\n variant=\"text\"\n color=\"inherit\"\n className=\"text-style-button\"\n onClick={() => setIsOpen(!isOpen)}\n >\n <span\n className=\"text-style-label\"\n style={{\n fontSize: currentStyleOption.fontSize,\n fontWeight: currentStyleOption.fontWeight,\n }}\n >\n {currentStyleOption.label}\n </span>\n <span className=\"text-style-arrow\">▼</span>\n </Button>\n {isOpen && (\n <Box className=\"text-style-menu\">\n {textStyles.map((style) => (\n <Button\n key={style.value}\n variant=\"text\"\n color=\"inherit\"\n className={`text-style-option ${currentStyle === style.value ? 'active' : ''}`.trim()}\n onClick={() => handleStyleChange(style.value)}\n >\n <span\n className=\"text-style-option-label\"\n style={{\n fontSize: style.fontSize,\n fontWeight: style.fontWeight,\n }}\n >\n {style.label}\n </span>\n </Button>\n ))}\n </Box>\n )}\n </Box>\n );\n});\n\nTextStyleDropdown.displayName = 'TextStyleDropdown';\n\n","import type React from 'react';\n\nimport { Box } from '@mui/material';\n\nimport { AlignmentDropdown } from './alignmentDropdown';\nimport { BlockquoteButton } from './blockquoteButton';\nimport { ColorPicker } from './colorPicker';\nimport { FormatButton } from './formatButton';\nimport { ListButton } from './listButton';\nimport { TextStyleDropdown } from './textStyleDropdown';\nimport { UndoButton } from './undoButton';\nimport { useToolbarState } from './useToolbarState';\n\nexport const Toolbar: React.FC = () => {\n const state = useToolbarState();\n\n return (\n <Box className=\"toolbar\">\n <FormatButton format=\"bold\" isActive={state.bold}>\n B\n </FormatButton>\n <FormatButton format=\"italic\" isActive={state.italic}>\n I\n </FormatButton>\n <FormatButton format=\"underline\" isActive={state.underline}>\n U\n </FormatButton>\n <FormatButton format=\"strikethrough\" isActive={state.strikethrough}>\n S\n </FormatButton>\n <FormatButton format=\"subscript\" isActive={state.subscript}>\n x₂\n </FormatButton>\n <FormatButton format=\"superscript\" isActive={state.superscript}>\n x²\n </FormatButton>\n <ListButton listType=\"bullet\" isActive={state.bulletList}>\n •\n </ListButton>\n <ListButton listType=\"number\" isActive={state.numberList}>\n 123\n </ListButton>\n <BlockquoteButton isActive={state.blockquote}>\n Quote\n </BlockquoteButton>\n <ColorPicker currentColor={state.textColor} />\n <AlignmentDropdown currentAlignment={state.alignment} />\n <TextStyleDropdown currentStyle={state.textStyle} />\n <UndoButton />\n </Box>\n );\n};\n\nToolbar.displayName = 'Toolbar';\n","import type React from 'react';\nimport { memo, useCallback } from 'react';\n\n\nimport { useLexicalComposerContext } from '@lexical/react/LexicalComposerContext';\nimport { UNDO_COMMAND } from 'lexical';\n\nimport { Button } from '../../button';\n\nexport interface UndoButtonProps {\n className?: string;\n}\n\nexport const UndoButton: React.FC<UndoButtonProps> = memo(({ className = '' }) => {\n const [editor] = useLexicalComposerContext();\n\n const handleClick = useCallback((): void => {\n editor.dispatchCommand(UNDO_COMMAND, undefined);\n }, [editor]);\n\n return (\n <Button\n variant=\"text\"\n className={`undo-button ${className}`.trim()}\n onClick={handleClick}\n color=\"inherit\"\n title=\"Undo\"\n >\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path\n d=\"M3 8C3 5.23858 5.23858 3 8 3C10.7614 3 13 5.23858 13 8C13 10.7614 10.7614 13 8 13\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M5 5L3 3L5 1\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n </Button>\n );\n});\n\nUndoButton.displayName = 'UndoButton';\n\n","import { useState, useEffect, useRef } from 'react';\n\nimport { $isListNode } from '@lexical/list';\nimport { useLexicalComposerContext } from '@lexical/react/LexicalComposerContext';\nimport { $isQuoteNode, $isHeadingNode } from '@lexical/rich-text';\nimport { $getSelectionStyleValueForProperty } from '@lexical/selection';\nimport { $getNearestBlockElementAncestorOrThrow } from '@lexical/utils';\nimport { FORMAT_TEXT_COMMAND, FORMAT_ELEMENT_COMMAND, $getSelection, $isRangeSelection } from 'lexical';\n\nimport type { AlignmentType } from './alignmentDropdown';\nimport type { TextStyleType } from './textStyleDropdown';\n\nexport interface ToolbarState {\n bold: boolean;\n italic: boolean;\n underline: boolean;\n strikethrough: boolean;\n subscript: boolean;\n superscript: boolean;\n blockquote: boolean;\n bulletList: boolean;\n numberList: boolean;\n textStyle: TextStyleType;\n alignment: AlignmentType;\n textColor: string | null;\n}\n\nconst getToolbarState = (editor: ReturnType<typeof useLexicalComposerContext>[0]): ToolbarState => {\n const state: ToolbarState = {\n bold: false,\n italic: false,\n underline: false,\n strikethrough: false,\n subscript: false,\n superscript: false,\n blockquote: false,\n bulletList: false,\n numberList: false,\n textStyle: 'paragraph',\n alignment: 'left',\n textColor: null,\n };\n\n editor.getEditorState().read(() => {\n const selection = $getSelection();\n if ($isRangeSelection(selection)) {\n state.bold = selection.hasFormat('bold');\n state.italic = selection.hasFormat('italic');\n state.underline = selection.hasFormat('underline');\n state.strikethrough = selection.hasFormat('strikethrough');\n state.subscript = selection.hasFormat('subscript');\n state.superscript = selection.hasFormat('superscript');\n\n const textColor = $getSelectionStyleValueForProperty(selection, 'color', '');\n state.textColor = textColor || null;\n\n const anchorNode = selection.anchor.getNode();\n const topLevelElement = anchorNode.getTopLevelElement();\n\n try {\n const blockElement = $getNearestBlockElementAncestorOrThrow(anchorNode);\n if (typeof blockElement.getFormatType === 'function') {\n const formatType = blockElement.getFormatType();\n if (formatType === 'left' || formatType === 'center' || formatType === 'right' || formatType === 'justify') {\n state.alignment = formatType;\n }\n }\n } catch {\n state.alignment = 'left';\n }\n\n if (topLevelElement) {\n if ($isQuoteNode(topLevelElement)) {\n state.blockquote = true;\n } else if ($isHeadingNode(topLevelElement)) {\n state.textStyle = topLevelElement.getTag();\n } else if ($isListNode(topLevelElement)) {\n const listTag = topLevelElement.getTag();\n state.bulletList = listTag === 'ul';\n state.numberList = listTag === 'ol';\n } else {\n state.textStyle = 'paragraph';\n }\n }\n }\n });\n\n return state;\n};\n\nexport const useToolbarState = (): ToolbarState => {\n const [editor] = useLexicalComposerContext();\n const [state, setState] = useState<ToolbarState>(() => getToolbarState(editor));\n const editorRef = useRef(editor);\n\n useEffect(() => {\n editorRef.current = editor;\n }, [editor]);\n\n useEffect(() => {\n const updateState = (): void => {\n setState(getToolbarState(editorRef.current));\n };\n\n const updateListener = editor.registerUpdateListener(() => {\n updateState();\n });\n\n const formatTextListener = editor.registerCommand(\n FORMAT_TEXT_COMMAND,\n () => {\n updateState();\n return false;\n },\n 1\n );\n\n const formatElementListener = editor.registerCommand(\n FORMAT_ELEMENT_COMMAND,\n () => {\n updateState();\n return false;\n },\n 1\n );\n\n return () => {\n updateListener();\n formatTextListener();\n formatElementListener();\n };\n }, [editor]);\n\n return state;\n};\n","import type { Theme } from '@mui/material';\n\nexport const Style = ({ theme }: { theme: Theme }) => {\n return {\n '& .text-editor-wrapper': {\n width: '100%',\n },\n '& .editor-container': {\n width: '100%',\n border: `1px solid ${theme.palette.divider}`,\n borderRadius: theme.shape.borderRadius,\n maxWidth: '800px',\n margin: '40px auto',\n padding: theme.spacing(1.25),\n backgroundColor: theme.palette.background.paper,\n },\n '& .toolbar': {\n display: 'flex',\n gap: theme.spacing(1),\n padding: theme.spacing(0.75),\n borderBottom: `1px solid ${theme.palette.divider}`,\n },\n '& .toolbar button': {\n borderRadius: theme.shape.borderRadius,\n cursor: 'pointer',\n fontWeight: 'bold',\n minWidth: '35px',\n color: '#9fa5d3',\n background: '#0000',\n },\n '& .text-style-dropdown': {\n position: 'relative',\n display: 'inline-block',\n },\n '& .text-style-button': {\n padding: `${theme.spacing(0.5)} ${theme.spacing(1)}`,\n border: 'none',\n background: theme.palette.action.hover,\n borderRadius: theme.shape.borderRadius,\n cursor: 'pointer',\n display: 'flex',\n alignItems: 'center',\n gap: theme.spacing(0.75),\n minWidth: '100px',\n justifyContent: 'space-between',\n },\n '& .text-style-button:hover': {\n background: theme.palette.action.selected,\n },\n '& .text-style-label': {\n color: theme.palette.primary.main,\n flex: 1,\n textAlign: 'left',\n },\n '& .text-style-arrow': {\n fontSize: '10px',\n color: theme.palette.text.secondary,\n },\n '& .text-style-menu': {\n position: 'absolute',\n top: '100%',\n left: 0,\n marginTop: theme.spacing(0.5),\n background: theme.palette.background.paper,\n border: `1px solid ${theme.palette.divider}`,\n borderRadius: theme.shape.borderRadius,\n boxShadow: theme.shadows[2],\n zIndex: 1000,\n minWidth: '200px',\n padding: `${theme.spacing(0.5)} 0`,\n },\n '& .text-style-option': {\n width: '100%',\n padding: `${theme.spacing(1)} ${theme.spacing(2)}`,\n border: 'none',\n background: 'transparent',\n cursor: 'pointer',\n textAlign: 'left',\n display: 'flex',\n alignItems: 'center',\n transition: 'background-color 0.15s ease',\n },\n '& .text-style-option:hover': {\n background: theme.palette.action.hover,\n },\n '& .text-style-option.active': {\n background: theme.palette.action.selected,\n },\n '& .text-style-option-label': {\n color: theme.palette.text.primary,\n lineHeight: 1.5,\n },\n '& .text-style-option.active .text-style-option-label': {\n color: theme.palette.primary.main,\n },\n '& .alignment-dropdown': {\n position: 'relative',\n display: 'inline-block',\n },\n '& .alignment-button': {\n padding: `${theme.spacing(0.5)} ${theme.spacing(1)}`,\n border: 'none',\n background: theme.palette.action.hover,\n borderRadius: theme.shape.borderRadius,\n cursor: 'pointer',\n display: 'flex',\n alignItems: 'center',\n gap: theme.spacing(0.75),\n minWidth: '40px',\n justifyContent: 'space-between',\n },\n '& .alignment-button:hover': {\n background: theme.palette.action.selected,\n },\n '& .alignment-icon': {\n display: 'flex',\n alignItems: 'center',\n color: theme.palette.primary.main,\n },\n '& .alignment-arrow': {\n fontSize: '10px',\n color: theme.palette.text.secondary,\n },\n '& .alignment-menu': {\n position: 'absolute',\n top: '100%',\n left: 0,\n marginTop: theme.spacing(0.5),\n background: theme.palette.background.paper,\n border: `1px solid ${theme.palette.divider}`,\n borderRadius: theme.shape.borderRadius,\n boxShadow: theme.shadows[2],\n zIndex: 1000,\n minWidth: '150px',\n padding: `${theme.spacing(0.5)} 0`,\n },\n '& .alignment-option': {\n width: '100%',\n padding: `${theme.spacing(1)} ${theme.spacing(2)}`,\n border: 'none',\n background: 'transparent',\n cursor: 'pointer',\n textAlign: 'left',\n display: 'flex',\n alignItems: 'center',\n gap: theme.spacing(1.5),\n transition: 'background-color 0.15s ease',\n },\n '& .alignment-option:hover': {\n background: theme.palette.action.hover,\n },\n '& .alignment-option.active': {\n background: theme.palette.action.selected,\n },\n '& .alignment-option-icon': {\n display: 'flex',\n alignItems: 'center',\n color: theme.palette.text.secondary,\n minWidth: '20px',\n },\n '& .alignment-option.active .alignment-option-icon': {\n color: theme.palette.primary.main,\n },\n '& .alignment-option-label': {\n color: theme.palette.text.primary,\n lineHeight: 1.5,\n },\n '& .alignment-option.active .alignment-option-label': {\n color: theme.palette.primary.main,\n },\n '& .color-picker': {\n position: 'relative',\n display: 'inline-block',\n },\n '& .color-picker-button': {\n padding: `${theme.spacing(0.5)} ${theme.spacing(1)}`,\n border: 'none',\n background: theme.palette.action.hover,\n borderRadius: theme.shape.borderRadius,\n cursor: 'pointer',\n display: 'flex',\n alignItems: 'center',\n gap: theme.spacing(0.75),\n minWidth: '40px',\n justifyContent: 'space-between',\n transition: 'all 0.2s ease',\n },\n '& .color-picker-button:hover': {\n background: theme.palette.action.selected,\n },\n '& .color-picker-button.active': {\n background: theme.palette.action.selected,\n border: `2px solid ${theme.palette.primary.main}`,\n },\n '& .color-picker-icon': {\n display: 'flex',\n alignItems: 'center',\n },\n '& .color-picker-arrow': {\n fontSize: '10px',\n color: theme.palette.text.secondary,\n },\n '& .color-picker-menu': {\n position: 'absolute',\n top: '100%',\n left: 0,\n marginTop: theme.spacing(0.5),\n background: theme.palette.background.paper,\n border: `1px solid ${theme.palette.divider}`,\n borderRadius: theme.shape.borderRadius,\n boxShadow: theme.shadows[2],\n zIndex: 1000,\n padding: theme.spacing(1),\n },\n '& .color-picker-grid': {\n display: 'grid',\n gridTemplateColumns: 'repeat(6, 1fr)',\n gap: theme.spacing(0.5),\n width: '180px',\n },\n '& .color-swatch': {\n width: '24px',\n height: '24px',\n border: `1px solid ${theme.palette.divider}`,\n borderRadius: theme.shape.borderRadius,\n cursor: 'pointer',\n position: 'relative',\n padding: 0,\n transition: 'transform 0.1s ease, box-shadow 0.1s ease',\n },\n '& .color-swatch:hover': {\n transform: 'scale(1.1)',\n boxShadow: theme.shadows[2],\n zIndex: 1,\n },\n '& .color-swatch.active': {\n border: `2px solid ${theme.palette.primary.main}`,\n boxShadow: `0 0 0 1px ${theme.palette.background.paper}, 0 0 0 3px ${theme.palette.primary.main}`,\n },\n '& .color-swatch-check': {\n position: 'absolute',\n top: '50%',\n left: '50%',\n transform: 'translate(-50%, -50%)',\n color: theme.palette.common.white,\n fontSize: '12px',\n fontWeight: 'bold',\n textShadow: '0 0 2px rgba(0, 0, 0, 0.5)',\n },\n };\n};\n\n","import type React from 'react';\n\nimport { $generateHtmlFromNodes } from '@lexical/html';\nimport { LexicalComposer } from '@lexical/react/LexicalComposer';\nimport { ContentEditable } from '@lexical/react/LexicalContentEditable';\nimport { LexicalErrorBoundary } from '@lexical/react/LexicalErrorBoundary';\nimport { HistoryPlugin } from '@lexical/react/LexicalHistoryPlugin';\nimport { ListPlugin } from '@lexical/react/LexicalListPlugin';\nimport { OnChangePlugin } from '@lexical/react/LexicalOnChangePlugin';\nimport { RichTextPlugin } from '@lexical/react/LexicalRichTextPlugin';\n\nimport { Box, styled } from '@mui/material';\n\nimport './lexicalStyles.css';\nimport { editorConfig } from './config';\nimport { Toolbar } from './plugins/toolbar';\nimport { Style } from './style';\n\nimport type { EditorState, LexicalEditor } from 'lexical';\n\nexport interface TextEditorProps {\n value?: string;\n onChange?: (data: string) => void;\n onReady?: (editor: LexicalEditor) => void;\n onBlur?: (event: unknown, editor: LexicalEditor) => void;\n onFocus?: (event: unknown, editor: LexicalEditor) => void;\n disabled?: boolean;\n placeholder?: string;\n className?: string;\n}\n\nconst TextEditor: React.FC<TextEditorProps> = ({\n onChange = () => { },\n placeholder = 'Start typing...',\n className = '',\n}) => {\n const handleChange = (editorState: EditorState, editor: LexicalEditor) => {\n editorState.read(() => {\n const htmlString = $generateHtmlFromNodes(editor, null);\n onChange(htmlString);\n });\n };\n\n return (\n <Box className={`text-editor-wrapper ${className}`}>\n <Box className=\"editor-container\">\n <LexicalComposer initialConfig={editorConfig}>\n <Toolbar />\n <RichTextPlugin\n contentEditable={<ContentEditable className=\"editor-input\" />}\n placeholder={<Box className=\"editor-placeholder\">{placeholder}</Box>}\n ErrorBoundary={LexicalErrorBoundary}\n />\n <ListPlugin />\n <HistoryPlugin />\n <OnChangePlugin onChange={handleChange} />\n </LexicalComposer>\n </Box>\n </Box>\n );\n};\n\nTextEditor.displayName = 'TextEditor';\n\nexport default styled(TextEditor)(Style);\n","export interface LexicalTheme {\n paragraph?: string;\n text?: {\n bold?: string;\n italic?: string;\n underline?: string;\n strikethrough?: string;\n underlineStrikethrough?: string;\n subscript?: string;\n superscript?: string;\n code?: string;\n };\n heading?: {\n h1?: string;\n h2?: string;\n h3?: string;\n h4?: string;\n h5?: string;\n h6?: string;\n };\n list?: {\n nested?: {\n listitem?: string;\n };\n ol?: string;\n ul?: string;\n listitem?: string;\n };\n quote?: string;\n code?: string;\n codeHighlight?: {\n [key: string]: string;\n };\n}\n\nexport const theme: LexicalTheme = {\n paragraph: 'editor-paragraph',\n text: {\n bold: 'editor-textBold',\n italic: 'editor-textItalic',\n underline: 'editor-textUnderline',\n strikethrough: 'editor-textStrikethrough',\n subscript: 'editor-textSubscript',\n superscript: 'editor-textSuperscript',\n },\n heading: {\n h1: 'editor-heading-h1',\n h2: 'editor-heading-h2',\n h3: 'editor-heading-h3',\n h4: 'editor-heading-h4',\n h5: 'editor-heading-h5',\n h6: 'editor-heading-h6',\n },\n list: {\n ol: 'editor-list-ol',\n ul: 'editor-list-ul',\n listitem: 'editor-list-item',\n },\n quote: 'editor-quote',\n};","export const Style = () => ({\n '.MuiOutlinedInput-root': {\n borderRadius: '50px !important',\n },\n '.MuiInputBase-multiline': {\n borderRadius: '8px !important',\n }\n});","import { forwardRef } from 'react'\n\nimport { TextField, styled } from '@mui/material'\nimport type { TextFieldProps } from '@mui/material'\n\nimport { Style } from './style'\ninterface TextInputProps extends Omit<TextFieldProps, 'variant'> {\n variant?: 'outlined' | 'filled' | 'standard';\n size?: 'small' | 'medium';\n error?: boolean;\n helperText?: string;\n fullWidth?: boolean;\n label?: string;\n placeholder?: string;\n type?: string;\n required?: boolean;\n disabled?: boolean;\n}\n\nconst TextInput = forwardRef<HTMLDivElement, TextInputProps>(({\n variant = 'outlined',\n size = 'small',\n error = false,\n helperText,\n fullWidth = true,\n label,\n placeholder = 'Enter text here...',\n type = 'text',\n required = false,\n disabled = false,\n className = '',\n ...props\n}, ref) => {\n\n return (\n <TextField\n className={className}\n ref={ref}\n variant={variant}\n size={size}\n fullWidth={fullWidth}\n label={label}\n placeholder={placeholder}\n type={type}\n required={required}\n disabled={disabled}\n error={error}\n helperText={helperText}\n {...props}\n />\n )\n})\n\nTextInput.displayName = 'TextInput'\n\nexport default styled(TextInput)(Style)","import type React from 'react';\n\nimport CssBaseline from '@mui/material/CssBaseline';\nimport { createTheme, ThemeProvider as MuiThemeProvider, type Theme } from '@mui/material/styles';\n\ninterface ThemeProviderProps {\n theme?: Theme;\n children: React.ReactNode;\n enableCssBaseline?: boolean;\n}\n\nconst ThemeProvider: React.FC<ThemeProviderProps> = ({\n theme = createTheme({}),\n children,\n enableCssBaseline = true,\n}) => {\n return (\n <MuiThemeProvider theme={theme}>\n {enableCssBaseline && <CssBaseline />}\n {children}\n </MuiThemeProvider>\n );\n};\n\nexport default ThemeProvider;\n","import type React from 'react';\n\nimport type { PickerChangeHandlerContext, TimeValidationError } from '@mui/x-date-pickers';\nimport { LocalizationProvider, TimePicker as MuiTimePicker } from '@mui/x-date-pickers';\nimport { AdapterDayjs } from '@mui/x-date-pickers/AdapterDayjs';\nimport type { PickerValue } from '@mui/x-date-pickers/internals';\nimport type { TimePickerProps as MuiTimePickerProps } from '@mui/x-date-pickers/TimePicker';\n\nexport interface TimePickerProps {\n value?: PickerValue | undefined;\n onChange?: (value: PickerValue, context: PickerChangeHandlerContext<TimeValidationError>) => void;\n className?: string;\n disabled?: boolean;\n slotProps?: MuiTimePickerProps['slotProps'];\n viewRenderers?: MuiTimePickerProps['viewRenderers'];\n onOpen?: () => void;\n onClose?: () => void;\n}\n\nconst TimePicker: React.FC<TimePickerProps> = ({\n value = null,\n onChange = () => { },\n className = '',\n disabled = false,\n slotProps = {},\n viewRenderers = {},\n onOpen = () => { },\n onClose = () => { },\n ...props\n}) => {\n return (\n <LocalizationProvider dateAdapter={AdapterDayjs}>\n <MuiTimePicker\n value={value}\n onChange={onChange}\n disabled={disabled}\n className={className}\n slotProps={slotProps}\n viewRenderers={viewRenderers}\n onOpen={onOpen}\n onClose={onClose}\n {...props}\n />\n </LocalizationProvider>\n );\n};\n\nTimePicker.displayName = 'TimePicker';\n\nexport default TimePicker;","export const Style = () => {\n return {\n '.timeline-title': {\n fontWeight: '600',\n marginBottom: '4px',\n },\n };\n};","import type React from 'react';\n\nimport {\n Timeline as MuiTimeline,\n TimelineItem as MuiTimelineItem,\n TimelineSeparator as MuiTimelineSeparator,\n TimelineConnector as MuiTimelineConnector,\n TimelineContent as MuiTimelineContent,\n TimelineDot as MuiTimelineDot,\n TimelineOppositeContent as MuiTimelineOppositeContent,\n type TimelineProps as MuiTimelineProps,\n} from '@mui/lab';\nimport { Box, styled } from '@mui/material';\n\nimport { Style } from './style';\nexport interface TimelineItemConfig {\n id: string | number;\n title?: React.ReactNode;\n content: React.ReactNode;\n oppositeContent?: React.ReactNode;\n dotColor?:\n | 'primary'\n | 'secondary'\n | 'error'\n | 'info'\n | 'success'\n | 'warning'\n | 'grey'\n | 'inherit';\n dotVariant?: 'filled' | 'outlined';\n icon?: React.ReactNode;\n showConnector?: boolean;\n}\n\nexport interface TimelineProps extends MuiTimelineProps {\n items: TimelineItemConfig[];\n position?: 'left' | 'right' | 'alternate' | 'alternate-reverse';\n showConnectors?: boolean;\n}\n\nconst Timeline: React.FC<TimelineProps> = ({\n items = [],\n position = 'right',\n showConnectors = true,\n ...restProps\n}) => {\n return (\n <MuiTimeline position={position} {...restProps}>\n {items.map((item, index) => {\n const isLastItem = index === items.length - 1;\n const showItemConnector = showConnectors && (item.showConnector ?? !isLastItem);\n\n return (\n <MuiTimelineItem key={item.id}>\n {item.oppositeContent && (\n <MuiTimelineOppositeContent>\n {item.oppositeContent}\n </MuiTimelineOppositeContent>\n )}\n\n <MuiTimelineSeparator>\n <MuiTimelineDot\n color={item.dotColor || 'primary'}\n variant={item.dotVariant || 'filled'}\n >\n {item.icon}\n </MuiTimelineDot>\n {showItemConnector && (\n <MuiTimelineConnector />\n )}\n </MuiTimelineSeparator>\n\n <MuiTimelineContent>\n {item.title && (\n <Box className='timeline-title'>\n {item.title}\n </Box>\n )}\n {item.content}\n </MuiTimelineContent>\n </MuiTimelineItem>\n );\n })}\n </MuiTimeline>\n );\n};\n\nexport default styled(Timeline)(Style);\n","import type React from 'react';\n\nimport {\n Tooltip as MuiTooltip,\n type TooltipProps as MuiTooltipProps,\n} from '@mui/material';\n\nexport interface TooltipProps extends Omit<MuiTooltipProps, 'title'> {\n title: React.ReactNode;\n children: React.ReactElement;\n arrow: boolean;\n placement?:\n | 'bottom-end'\n | 'bottom-start'\n | 'bottom'\n | 'left-end'\n | 'left-start'\n | 'left'\n | 'right-end'\n | 'right-start'\n | 'right'\n | 'top-end'\n | 'top-start'\n | 'top';\n className?: string;\n}\n\nconst Tooltip: React.FC<TooltipProps> = ({\n title = '',\n children,\n arrow = true,\n placement = 'bottom',\n className = '',\n ...props\n}) => {\n return (\n <MuiTooltip\n title={title}\n arrow={arrow}\n placement={placement}\n className={className}\n {...props}\n >\n {children}\n </MuiTooltip>\n );\n};\n\nTooltip.displayName = 'Tooltip';\n\nexport default Tooltip;\n","import type React from 'react';\n\nimport { Typography as MuiTypography } from '@mui/material';\nimport type { TypographyProps as MuiTypographyProps } from '@mui/material';\nexport interface TypographyProps extends Omit<MuiTypographyProps, 'variant'> {\n variant?: 'h1' | 'h2' | 'h3' | 'h4' | 'h5' | 'h6' | 'body1' | 'body2' | 'caption' | 'button';\n className?: string;\n children: React.ReactNode;\n}\n\nconst Typography: React.FC<TypographyProps> = ({\n className = '',\n variant = 'body1',\n children,\n ...props\n}) => {\n return (\n <MuiTypography\n variant={variant}\n className={className}\n {...props}\n >\n {children}\n </MuiTypography>\n );\n};\n\nTypography.displayName = 'Typography';\n\nexport default Typography;","import type React from 'react';\nimport { memo, useCallback } from 'react';\n\nimport { Checkbox, FormControlLabel, FormGroup, Grid, styled } from '@mui/material';\n\nimport { ACTION_TYPES, getViewOptions } from './constants';\nimport { PopoverStyle } from './popoverStyle';\n\nimport { POPOVER_ANCHOR_ORIGIN, POPOVER_TRANSFORM_ORIGIN } from '../../constants/viewHeaderConstants';\nimport { Popover } from '../popOver';\nimport { Typography } from '../typography';\n\nexport interface DefaultViewPopoverProps {\n open: HTMLElement | null;\n setOpen: (element: HTMLElement | null) => void;\n viewType: string;\n handleClick: (item: string, data?: { [key: string]: unknown }) => void;\n className?: string;\n}\n\nconst DefaultViewPopover: React.FC<DefaultViewPopoverProps> = memo(({\n open = null,\n setOpen = () => { },\n viewType = '',\n handleClick = () => { },\n className = ''\n}) => {\n const VIEW_OPTIONS = getViewOptions(viewType);\n\n const handleClose = useCallback(() => {\n setOpen(null);\n }, [setOpen]);\n\n const handleOptionChange = useCallback((value: string) => {\n handleClick(ACTION_TYPES.DEFAULT_VIEW, { value });\n handleClose();\n }, [handleClick, handleClose]);\n\n return (\n <Popover\n open={Boolean(open)}\n anchorEl={open}\n onClose={handleClose}\n anchorOrigin={POPOVER_ANCHOR_ORIGIN}\n transformOrigin={POPOVER_TRANSFORM_ORIGIN}\n className={className}\n >\n <Grid className=\"default-view-grid\">\n <FormGroup>\n {VIEW_OPTIONS.map((option) => (\n <FormControlLabel\n key={option.value || 'none'}\n className=\"default-view-label\"\n control={\n <Checkbox\n checked={option.checked}\n onChange={() => { handleOptionChange(option.value); }}\n />\n }\n label={\n <Typography fontSize={15}>\n {option.label}\n </Typography>\n }\n />\n ))}\n </FormGroup>\n </Grid>\n </Popover>\n );\n});\n\nDefaultViewPopover.displayName = 'DefaultViewPopover';\n\nexport default styled(DefaultViewPopover)(PopoverStyle);","import type React from 'react';\nimport { memo, useCallback } from 'react';\n\nimport { Checkbox, FormControlLabel, FormGroup, Grid, styled } from '@mui/material';\n\nimport { ACTION_TYPES } from './constants';\nimport { PopoverStyle } from './popoverStyle';\n\nimport { POPOVER_ANCHOR_ORIGIN, POPOVER_TRANSFORM_ORIGIN } from '../../constants/viewHeaderConstants';\nimport { Popover } from '../popOver';\nimport { Typography } from '../typography';\n\nexport interface ColumnHeader {\n field: string;\n label: string;\n visible?: boolean;\n disabled?: boolean;\n}\n\nexport interface ColumnSettingsPopoverProps {\n open: HTMLElement | null;\n setOpen: (element: HTMLElement | null) => void;\n handleClick: (item: string, data?: { [key: string]: unknown }) => void;\n headers: ColumnHeader[];\n className?: string;\n}\n\nconst ColumnSettingsPopover: React.FC<ColumnSettingsPopoverProps> = memo(({\n open = null,\n setOpen = () => { },\n headers = [],\n handleClick = () => { },\n className = ''\n}) => {\n const handleClose = useCallback(() => {\n setOpen(null);\n }, [setOpen]);\n\n const handleOptionChange = useCallback((tmpHeaders: ColumnHeader[]) => {\n handleClick(ACTION_TYPES.COLUMN_SETTINGS, { headers: tmpHeaders });\n }, [handleClick]);\n\n const allChecked = headers.every((column) => column.visible);\n\n return (\n <Popover\n open={Boolean(open)}\n anchorEl={open}\n onClose={handleClose}\n anchorOrigin={POPOVER_ANCHOR_ORIGIN}\n transformOrigin={POPOVER_TRANSFORM_ORIGIN}\n className={className}\n >\n <Grid className=\"column-settings-grid\">\n <Typography variant=\"body1\" className=\"column-settings-title\">COLUMN SETTINGS</Typography>\n <FormGroup>\n <FormControlLabel\n key=\"select-all\"\n className=\"column-settings-label\"\n control={\n <Checkbox\n checked={allChecked}\n onChange={() => {\n const tmpHeaders = [...headers];\n const updatedHeaders = tmpHeaders.map((m) => ({ ...m, visible: m.disabled ? true : !allChecked }));\n handleOptionChange(updatedHeaders);\n }}\n />\n }\n label=\"Select All\"\n />\n {headers.map((item) => (\n <FormControlLabel\n key={item.field}\n className=\"column-settings-label\"\n control={\n <Checkbox\n checked={item.visible || false}\n onChange={() => {\n const tmpHeaders = [...headers];\n const curIndex = tmpHeaders.findIndex((header) => header.field === item.field);\n if (curIndex !== -1) {\n tmpHeaders[curIndex].visible = !tmpHeaders[curIndex].visible;\n handleOptionChange(tmpHeaders);\n }\n }}\n disabled={item.disabled === true}\n />\n }\n label={item.label}\n />\n ))}\n </FormGroup>\n </Grid>\n </Popover>\n );\n});\n\nColumnSettingsPopover.displayName = 'ColumnSettingsPopover';\n\nexport default styled(ColumnSettingsPopover)(PopoverStyle);","export const ACTION_TYPES = {\n ADD: 'ADD',\n CLEAR_FILTERS: 'CLEAR_FILTERS',\n COLUMN_SETTINGS: 'COLUMN_SETTINGS',\n DATE_RANGE_PICKER: 'DATE_RANGE_PICKER',\n DEFAULT_VIEW: 'DEFAULT_VIEW',\n DOWNLOAD: 'DOWNLOAD',\n LIST_SEARCH: 'LIST_SEARCH',\n TILE_SEARCH: 'TILE_SEARCH',\n VIEW_SWITCH: 'VIEW_SWITCH',\n} as const;\n\nexport interface ViewOption {\n value: string;\n label: string;\n checked: boolean;\n}\n\nexport const getViewOptions = (viewType: string): ViewOption[] => [\n {\n value: 'list',\n label: 'Set as default : List View',\n checked: viewType === 'list',\n },\n {\n value: 'tile',\n label: 'Set as default : Card View',\n checked: viewType === 'tile',\n },\n {\n value: '',\n label: 'None',\n checked: !viewType,\n }\n];\n\n","import type React from 'react';\n\nimport type { HandleClick } from './types';\n\nimport { AddIcon } from '../../../assets/svg';\nimport { Button } from '../../button';\nimport { ACTION_TYPES } from '../constants';\n\nexport interface AddProps {\n title?: string;\n handleClick?: HandleClick;\n}\n\nexport const Add: React.FC<AddProps> = ({\n title = '',\n handleClick = () => { }\n}) => {\n return (\n <Button\n size=\"small\"\n variant=\"contained\"\n onClick={() => handleClick(ACTION_TYPES.ADD)}\n startIcon={<AddIcon />}\n aria-label={title}\n className=\"addButton\"\n >\n {title}\n </Button>\n );\n};\n\n","import type React from 'react';\nimport { useState, useCallback } from 'react';\n\nimport type { HandleClick } from './types';\n\nimport { ColumnSettingsIcon } from '../../../assets/svg';\nimport { IconButton } from '../../iconButton';\nimport { Tooltip } from '../../toolTip';\nimport ColumnSettingsPopover from '../columnSettingsPopover';\n\nexport interface ColumnHeader {\n field: string;\n label: string;\n visible?: boolean;\n disabled?: boolean;\n}\n\nexport interface ColumnSettingsProps {\n headers?: ColumnHeader[];\n handleClick?: HandleClick;\n}\n\nexport const ColumnSettings: React.FC<ColumnSettingsProps> = ({\n headers = [],\n handleClick = () => { }\n}) => {\n const [open, setOpen] = useState<HTMLElement | null>(null);\n\n const handleIconClick = useCallback((event: React.MouseEvent<HTMLButtonElement>) => {\n setOpen(event.currentTarget);\n }, []);\n\n return (\n <>\n <Tooltip arrow title=\"Column Settings\">\n <IconButton className=\"roundIcon columnSettings\" onClick={handleIconClick}>\n <ColumnSettingsIcon />\n </IconButton>\n </Tooltip>\n <ColumnSettingsPopover\n open={open}\n setOpen={setOpen}\n headers={headers}\n handleClick={handleClick}\n />\n </>\n );\n};\n\n","import type React from 'react';\n\nimport type { HandleClick } from './types';\n\nimport { DateRangePicker } from '../../dateRangePicker';\nimport { ACTION_TYPES } from '../constants';\n\nimport type { Dayjs } from 'dayjs';\n\nexport interface DateRangePickerActionProps {\n handleClick?: HandleClick;\n handleDateChange?: (dates: [Dayjs | null, Dayjs | null] | null) => void;\n}\n\nexport const DateRangePickerAction: React.FC<DateRangePickerActionProps> = ({\n handleClick = () => { },\n handleDateChange = () => { }\n}) => {\n return (\n <DateRangePicker\n onChange={(dates) => {\n handleDateChange(dates);\n handleClick(ACTION_TYPES.DATE_RANGE_PICKER, { dates });\n }}\n />\n );\n};\n","import type React from 'react';\nimport { useState, useCallback } from 'react';\n\nimport type { HandleClick } from './types';\n\nimport { MoreIcon } from '../../../assets/svg';\nimport { IconButton } from '../../iconButton';\nimport { Tooltip } from '../../toolTip';\nimport DefaultViewPopover from '../DefaultViewPopover';\n\nexport interface DefaultViewProps {\n viewType?: string;\n handleClick?: HandleClick;\n}\n\nexport const DefaultView: React.FC<DefaultViewProps> = ({\n viewType = '',\n handleClick = () => { }\n}) => {\n const [open, setOpen] = useState<HTMLElement | null>(null);\n\n const handleIconClick = useCallback((event: React.MouseEvent<HTMLButtonElement>) => {\n setOpen(event.currentTarget);\n }, []);\n\n return (\n <>\n <Tooltip arrow title=\"Default view\">\n <IconButton onClick={handleIconClick}>\n <MoreIcon />\n </IconButton>\n </Tooltip>\n <DefaultViewPopover\n open={open}\n setOpen={setOpen}\n viewType={viewType}\n handleClick={handleClick}\n />\n </>\n );\n};\n\n","import type React from 'react';\n\nimport type { HandleClick } from './types';\n\nimport { DownloadIcon } from '../../../assets/svg';\nimport { IconButton } from '../../iconButton';\nimport { Tooltip } from '../../toolTip';\nimport { ACTION_TYPES } from '../constants';\n\nexport interface DownloadProps {\n handleClick?: HandleClick;\n}\n\nexport const Download: React.FC<DownloadProps> = ({\n handleClick = () => { }\n}) => {\n return (\n <Tooltip arrow title=\"Download\">\n <IconButton className=\"roundIcon\" onClick={() => handleClick(ACTION_TYPES.DOWNLOAD)}>\n <DownloadIcon />\n </IconButton>\n </Tooltip>\n );\n};\n\n","import { Add } from './add';\nimport { ColumnSettings } from './columnSettings';\nimport { DateRangePickerAction } from './dateRangePicker';\nimport { DefaultView } from './defaultView';\nimport { Download } from './download';\nimport { ListSearch } from './listSearch';\nimport { TileSearch } from './tileSearch';\nimport { ViewSwitch } from './viewSwitch';\n\nexport const defaultActions = {\n LIST_SEARCH: ListSearch,\n TILE_SEARCH: TileSearch,\n DOWNLOAD: Download,\n COLUMN_SETTINGS: ColumnSettings,\n VIEW_SWITCH: ViewSwitch,\n DEFAULT_VIEW: DefaultView,\n ADD: Add,\n DATE_RANGE_PICKER: DateRangePickerAction,\n};\n\n","import type React from 'react';\n\nimport { Box } from '@mui/material';\n\nimport type { HandleClick } from './types';\n\nimport { ClearFilterIcon, SearchIcon } from '../../../assets/svg';\nimport { IconButton } from '../../iconButton';\nimport { Tooltip } from '../../toolTip';\nimport { ACTION_TYPES } from '../constants';\n\nexport interface ListSearchProps {\n hasSearchValue?: boolean;\n handleClick?: HandleClick;\n}\n\nexport const ListSearch: React.FC<ListSearchProps> = ({\n hasSearchValue = false,\n handleClick = () => { }\n}) => {\n return (\n <Box display=\"flex\" alignItems=\"center\">\n {hasSearchValue && (\n <Tooltip arrow title=\"Clear Filter\">\n <IconButton\n className=\"closeRoundIcon\"\n onClick={() => handleClick(ACTION_TYPES.CLEAR_FILTERS)}\n >\n <ClearFilterIcon />\n </IconButton>\n </Tooltip>\n )}\n\n <Tooltip arrow title=\"Search\">\n <IconButton\n className=\"roundIcon\"\n onClick={() => handleClick(ACTION_TYPES.LIST_SEARCH)}\n >\n <SearchIcon />\n </IconButton>\n </Tooltip>\n </Box>\n );\n};\n\n","import type React from 'react';\n\nimport type { HandleClick } from './types';\n\nimport { SearchBar } from '../../searchBar';\nimport { ACTION_TYPES } from '../constants';\n\nexport interface TileSearchProps {\n tileSearch?: string;\n handleClick?: HandleClick;\n setTileSearch?: (search: string) => void;\n}\n\nexport const TileSearch: React.FC<TileSearchProps> = ({\n tileSearch = '',\n handleClick = () => { },\n setTileSearch = () => { }\n}) => {\n return (\n <SearchBar\n search={tileSearch}\n handleClick={handleClick}\n setSearch={setTileSearch}\n actionType={ACTION_TYPES.TILE_SEARCH}\n />\n );\n};\n\n","import type React from 'react';\nimport { useCallback } from 'react';\n\nimport { ToggleButton, ToggleButtonGroup } from '@mui/material';\n\nimport type { HandleClick } from './types';\n\nimport { ListViewIcon, TileViewIcon } from '../../../assets/svg';\nimport { Tooltip } from '../../toolTip';\nimport { ACTION_TYPES } from '../constants';\n\nexport interface ViewSwitchProps {\n viewType?: string;\n handleClick?: HandleClick;\n}\n\nexport const ViewSwitch = ({ viewType = 'TILE', handleClick = () => { } }: ViewSwitchProps) => {\n const handleViewSwitch = useCallback((_: React.MouseEvent<HTMLElement>, value: string) => {\n if (value) {\n handleClick(ACTION_TYPES.VIEW_SWITCH, { value });\n }\n }, [handleClick]);\n\n return (\n <ToggleButtonGroup\n className=\"toggleBtns\"\n value={viewType}\n exclusive\n onChange={handleViewSwitch}\n aria-label=\"view type selection\"\n >\n <Tooltip title=\"List\" placement=\"top\" arrow>\n <ToggleButton value=\"LIST\" aria-label=\"List View\">\n <ListViewIcon />\n </ToggleButton>\n </Tooltip>\n <Tooltip title=\"Card\" placement=\"top\" arrow>\n <ToggleButton value=\"TILE\" aria-label=\"Tile View\">\n <TileViewIcon />\n </ToggleButton>\n </Tooltip>\n </ToggleButtonGroup>\n );\n};\n\n","import type { Theme } from '@mui/material';\n\nexport const PopoverStyle = ({ theme }: { theme: Theme }) => ({\n '& .column-settings-grid': {\n width: '215px',\n maxHeight: '475px',\n padding: theme.spacing(2),\n },\n '& .column-settings-title': {\n fontSize: '14px',\n fontWeight: 600,\n paddingBottom: theme.spacing(1),\n },\n '& .column-settings-label': {\n marginRight: 0,\n },\n '& .default-view-grid': {\n width: '300px',\n padding: theme.spacing(5),\n },\n '& .default-view-label': {\n marginRight: 0,\n },\n});\n\n","import type { Theme } from '@mui/material';\n\nexport const Style = ({ theme }: { theme: Theme }) => ({\n paddingBottom: '16px',\n justifyContent: 'flex-end',\n '& .roundIcon': {\n border: `1px solid ${theme.palette.border?.icon || '#E7E8F7'}`,\n background: theme.palette.bg?.iconBg || '#FAFAFD',\n width: '34px',\n height: '34px',\n '& svg': {\n width: '13px',\n height: '13px'\n },\n '&.columnSettings': {\n '& svg': {\n width: '17px',\n height: '17px'\n },\n }\n },\n '& .toggleBtns': {\n height: '34px',\n '& .MuiToggleButtonGroup-grouped': {\n padding: '5px 10px',\n '& .fillPath': {\n fill: theme.palette.secondary.main\n },\n '&:first-of-type': {\n borderTopLeftRadius: '30px',\n borderBottomLeftRadius: '30px'\n },\n '&:last-child': {\n borderTopRightRadius: '30px',\n borderBottomRightRadius: '30px'\n },\n '&.Mui-selected': {\n background: theme.palette.primary.main,\n '& .fillPath': {\n fill: '#fff'\n },\n }\n }\n },\n '& .addButton': {\n paddingLeft: '24px',\n paddingRight: '24px',\n '& .MuiButton-startIcon': {\n marginRight: '6px !important'\n }\n },\n '& .closeRoundIcon': {\n border: '1px solid #E7E8F7',\n background: '#FAFAFD',\n width: '34px',\n height: '34px',\n marginRight: '8px',\n '& .MuiSvgIcon-root': {\n width: '18px',\n height: '18px',\n fill: theme.palette.secondary.main\n }\n },\n '& .view-header-container': {\n display: 'flex',\n justifyContent: 'flex-end',\n gap: theme.spacing(1),\n flexWrap: 'wrap',\n paddingBottom: '16px',\n },\n '& .actionItem': {\n display: 'inline-flex',\n }\n});","import type React from 'react';\nimport { memo } from 'react';\n\nimport { Grid, styled } from '@mui/material';\n\nimport type { ColumnHeader } from './columnSettingsPopover';\nimport { defaultActions } from './defaultActions/index';\nimport { Style } from './style';\n\ninterface HeaderItemValue {\n disabled?: boolean;\n tooltip?: string;\n className?: string;\n viewType?: string;\n title?: string;\n headers?: ColumnHeader[];\n visible?: boolean;\n [key: string]: unknown;\n}\n\ninterface HeaderItem {\n [key: string]: HeaderItemValue | null;\n}\n\ninterface ActionProps {\n handleClick: (item: string, data?: { [key: string]: unknown }) => void;\n [key: string]: unknown;\n}\n\ntype ActionKey = keyof typeof defaultActions;\n\ninterface ViewHeaderProps {\n headerItems?: HeaderItem;\n customActions?: Partial<Record<ActionKey, (props: ActionProps) => React.ReactNode>>;\n handleClick?: (item: string, data?: { [key: string]: unknown }) => void;\n className?: string;\n}\n\nconst ViewHeader: React.FC<ViewHeaderProps> = memo((props) => {\n const {\n className = '',\n customActions = {},\n headerItems = {},\n handleClick = () => { },\n } = props;\n\n return (\n <Grid container spacing={1} className={`view-header-container ${className}`}>\n {Object.keys(headerItems).map((item: string) => {\n const itemProps = headerItems[item] || {};\n const actionProps = { handleClick, ...itemProps } as ActionProps;\n const allActions = { ...defaultActions, ...customActions };\n const actionKey = item as ActionKey;\n\n const CurrentAction = actionKey in allActions ? (allActions[actionKey] as (props: ActionProps) => React.ReactNode)(actionProps) : null;\n\n if (itemProps.visible === false) return null;\n return (\n <Grid key={item} className=\"actionItem\">\n {CurrentAction}\n </Grid>\n );\n })}\n </Grid>\n );\n});\n\nViewHeader.displayName = 'ViewHeader';\n\nexport default styled(ViewHeader)(Style);\n","export const months = [\n 'Jan',\n 'Feb',\n 'Mar',\n 'Apr',\n 'May',\n 'Jun',\n 'Jul',\n 'Aug',\n 'Sep',\n 'Oct',\n 'Nov',\n 'Dec',\n];\n\nexport const weekDays = ['Su', 'Mo', 'Tu', 'We', 'Th', 'Fr', 'Sa'];","export const POPOVER_ANCHOR_ORIGIN = {\n vertical: 'bottom' as const,\n horizontal: 'right' as const,\n};\n\nexport const POPOVER_TRANSFORM_ORIGIN = {\n vertical: 'top' as const,\n horizontal: 'right' as const,\n};\n\n","import { useEffect, useState } from 'react';\n\n/**\n * Custom hook for debouncing a value.\n * @param value The value to debounce.\n * @param delay Delay in milliseconds before updating the debounced value.\n */\nexport const useDebounce = <T>(value: T, delay = 1000): T => {\n const [debouncedValue, setDebouncedValue] = useState(value);\n\n useEffect(() => {\n const timer = setTimeout(() => setDebouncedValue(value), delay);\n return () => clearTimeout(timer);\n }, [value, delay]);\n\n return debouncedValue;\n};\n","\n// Components\nexport {\n Button, Badge, BreadCrumb, ColorPicker, Drawer, SnackBar, Modal, Link,\n Tooltip, Popover, TimePicker, DatePicker, IconButton, Dialog, Timeline,\n LinearLoader, CircularLoader, MediaPlayer, Radio, Accordion, Slider, Switch,\n Menu, Chip, Select, MultiSelect, SearchBar, Typography, TextField, Tabs,\n TabPanel, TabContext, Avatar, AvatarGroup, AvatarStatus, AvatarTitle, ThemeProvider,\n TextEditor, ErrorBoundary, Carousal, CheckBox, Table, ViewHeader,\n type Theme, type Dayjs\n} from './components';\n\n// Hooks\nexport { useDebounce } from './hooks';\n\n// Utils\nexport {\n formatDate,\n isValidEmail,\n isEmpty,\n isEmptyString,\n isEmptyArray,\n isEmptyObject,\n\n getLocalStorageItem,\n setLocalStorageItem,\n removeLocalStorageItem,\n\n getSessionStorageItem,\n setSessionStorageItem,\n removeSessionStorageItem,\n\n getColorFromId,\n strEllipsis,\n getFormattedName,\n\n} from './utils';\n\n// Assets/Icons\nexport {\n EditIcon,\n SearchIcon,\n CloseIcon,\n DoubleArrow,\n ExpandMoreIcon,\n MoreIcon,\n} from './assets';\n","import dayjs, { type Dayjs } from 'dayjs';\nimport utc from 'dayjs/plugin/utc';\n\ndayjs.extend(utc);\n\n/**\n * Formats a date to a specific format string\n * @param date - The date to format (Date, string, number, Dayjs object, or boolean)\n * @param format - The format string (e.g., 'YYYY-MM-DD', 'MM/DD/YYYY', 'DD-MMM-YYYY')\n * @param utc - Whether to format the date in UTC (default: false)\n * @returns Formatted date string, or null if date is invalid\n */\nexport const formatDate = (date: Date | string | number | Dayjs | boolean | null | undefined, format: string, utc: boolean = false): string | null => {\n try {\n if (!date || typeof date === 'boolean') {\n return null;\n }\n const dayjsDate = utc ? dayjs.utc(date) : dayjs(date);\n if (!dayjsDate.isValid()) {\n return null;\n }\n return dayjsDate.format(format);\n } catch (_error) {\n return null;\n }\n};\n","/**\n * Validates whether a given string is a valid email address\n * @param email - The email string to validate\n * @returns true if the email is valid, false otherwise\n */\nexport const isValidEmail = (email: string): boolean => {\n if (!email || typeof email !== 'string') {\n return false;\n }\n\n const emailRegex = /^(?!\\.)(?!.*\\.\\.)[A-Za-z0-9.!#$%&'*+/=?^_`{|}~-]+(?<!\\.)@[A-Za-z0-9-]+(?:\\.[A-Za-z0-9-]+)*\\.[A-Za-z]{2,}$/;\n return emailRegex.test(email.trim());\n};\n\n","/**\n * Helper function to check if a value is null or undefined\n */\nconst isNullOrUndefined = (value: unknown): value is null | undefined => {\n return value === null || value === undefined;\n};\n\n/**\n * Checks if a string is empty (after trimming whitespace)\n * @param value - The string to check\n * @returns true if the string is empty or only whitespace, false otherwise\n */\nexport const isEmptyString = (value: string | null | undefined): boolean => {\n if (isNullOrUndefined(value)) {\n return true;\n }\n if (typeof value !== 'string') {\n return false;\n }\n return value.trim().length === 0;\n};\n\n/**\n * Checks if an array is empty\n * @param value - The array to check\n * @returns true if the array is empty, false otherwise\n */\nexport const isEmptyArray = (value: unknown[] | null | undefined): boolean => {\n if (isNullOrUndefined(value)) {\n return true;\n }\n if (!Array.isArray(value)) {\n return false;\n }\n return value.length === 0;\n};\n\n/**\n * Checks if an object is empty (has no keys)\n * @param value - The object to check\n * @returns true if the object is empty, false otherwise\n */\nexport const isEmptyObject = (value: Record<string, unknown> | null | undefined): boolean => {\n if (isNullOrUndefined(value)) {\n return true;\n }\n if (Array.isArray(value) || value.constructor !== Object) {\n return false;\n }\n return Object.keys(value).length === 0;\n};\n\n/**\n * Checks if a value is empty\n * @param value - The value to check (string, array, or object)\n * @returns true if the value is empty, false otherwise\n */\nexport const isEmpty = (value: string | unknown[] | Record<string, unknown> | null | undefined): boolean => {\n if (isNullOrUndefined(value)) {\n return true;\n }\n\n // Handle strings\n if (typeof value === 'string') {\n return isEmptyString(value);\n }\n\n // Handle arrays\n if (Array.isArray(value)) {\n return isEmptyArray(value);\n }\n\n // Handle objects\n if (typeof value === 'object') {\n return isEmptyObject(value);\n }\n\n // For other types, consider them as not empty\n return false;\n};\n\nconst colors = [\n '#e57373', '#f06292', '#ba68c8', '#9575cd', '#c5cae9',\n '#7986cb', '#4fc3f7', '#4dd0e1', '#4db6ac', '#81c784',\n '#aed581', '#dce775', '#ffee58', '#ffca28', '#ff7043',\n '#8d6e63', '#bdbdbd'\n];\nexport const getColorFromId = (id?: string | number | null | true): string => {\n if (!id && id !== 0) return colors[0];\n const str = String(id);\n const code = str.split('').reduce((acc, ch) => acc + ch.charCodeAt(0), 0);\n return colors[code % colors.length];\n};\n\n/**\n * Extracts initials from a name string\n * @param nameValue - The name string to extract initials from\n * @returns A string containing up to 2 uppercase initials\n */\nexport const getFormattedName = (nameValue?: string): string => {\n if (!nameValue) return '';\n return nameValue\n .slice()\n .split(' ')\n .map((word: string) => word[0] || '')\n .join('')\n .slice(0, 2)\n .toUpperCase();\n};\n\n/**\n * Truncates a string to a specified length and adds ellipsis if needed\n * @param str - The value to truncate (string, number, boolean, null, or undefined)\n * @param length - Maximum length before truncation (default: 25)\n * @returns Truncated string with ellipsis if needed, or the original string if shorter\n */\nexport const strEllipsis = (str: string | number | boolean | null | undefined, length: number = 25): string => {\n const stringValue = typeof str === 'string' ? str.trim() : String(str ?? '');\n return stringValue.length > length ? `${stringValue.substring(0, length)}...` : stringValue;\n};\n\n","/**\n * Retrieves an item from localStorage and parses it as JSON\n * @param key - The localStorage key to retrieve\n * @returns The parsed value if found and valid, null otherwise\n */\nexport const getLocalStorageItem = (key: string): unknown => {\n try {\n const item = window.localStorage.getItem(key);\n return item ? JSON.parse(item) : null;\n } catch (_error) {\n return null;\n }\n};\n\n/**\n * Sets an item in localStorage with JSON stringification\n * @param key - The localStorage key to set\n * @param value - The value to store (will be stringified as JSON)\n * @returns true if successful, false if an error occurred\n */\nexport const setLocalStorageItem = (key: string, value: unknown): boolean => {\n try {\n window.localStorage.setItem(key, JSON.stringify(value));\n return true;\n } catch (_error) {\n return false;\n }\n};\n\n/**\n * Removes an item from localStorage\n * @param key - The localStorage key to remove\n * @returns true if successful, false if an error occurred\n */\nexport const removeLocalStorageItem = (key: string): boolean => {\n try {\n window.localStorage.removeItem(key);\n return true;\n } catch {\n return false;\n }\n};","/**\n * Retrieves an item from sessionStorage and parses it as JSON\n * @param key - The sessionStorage key to retrieve\n * @returns The parsed value if found and valid, null otherwise\n */\nexport const getSessionStorageItem = (key: string): unknown => {\n try {\n const item = window.sessionStorage.getItem(key);\n return item ? JSON.parse(item) : null;\n } catch {\n return null;\n }\n};\n\n/**\n * Sets an item in sessionStorage with JSON stringification\n * @param key - The sessionStorage key to set\n * @param value - The value to store (will be stringified as JSON)\n * @returns true if successful, false if an error occurred\n */\nexport const setSessionStorageItem = (key: string, value: unknown): boolean => {\n try {\n window.sessionStorage.setItem(key, JSON.stringify(value));\n return true;\n } catch {\n return false;\n }\n};\n\n/**\n * Removes an item from sessionStorage\n * @param key - The sessionStorage key to remove\n * @returns true if successful, false if an error occurred\n */\nexport const removeSessionStorageItem = (key: string): boolean => {\n try {\n window.sessionStorage.removeItem(key);\n return true;\n } catch {\n return false;\n }\n};\n","const RefreshUtils = require('./refreshUtils');\nconst RefreshRuntime = require('react-refresh/runtime');\n\nfunction refresh(moduleId, webpackHot) {\n const currentExports = RefreshUtils.getModuleExports(moduleId);\n const fn = (exports) => {\n var errorOverlay;\n if (typeof __react_refresh_error_overlay__ !== 'undefined') {\n errorOverlay = __react_refresh_error_overlay__;\n }\n var testMode;\n if (typeof __react_refresh_test__ !== 'undefined') {\n testMode = __react_refresh_test__;\n }\n RefreshUtils.executeRuntime(\n exports,\n moduleId,\n webpackHot,\n errorOverlay,\n testMode,\n );\n };\n if (typeof Promise !== 'undefined' && currentExports instanceof Promise) {\n currentExports.then(fn);\n } else {\n fn(currentExports);\n }\n}\n\nmodule.exports = {\n refresh,\n register: RefreshRuntime.register,\n createSignatureFunctionForTransform:\n RefreshRuntime.createSignatureFunctionForTransform,\n};\n","var RefreshRuntime = require('react-refresh/runtime');\nvar safeThis = (function () {\n // copied from core-js-pure/features/global-this\n 'use strict';\n\n var check = function (it) {\n return it && it.Math == Math && it;\n };\n\n // https://github.com/zloirock/core-js/issues/86#issuecomment-115759028\n // eslint-disable-next-line es/no-global-this -- safe\n return (\n check(typeof globalThis == 'object' && globalThis) ||\n check(typeof window == 'object' && window) ||\n // eslint-disable-next-line no-restricted-globals -- safe\n check(typeof self == 'object' && self) ||\n check(typeof __webpack_require__.g == 'object' && __webpack_require__.g) ||\n // eslint-disable-next-line no-new-func -- fallback\n (function () {\n return this;\n })() ||\n this ||\n Function('return this')()\n );\n})();\n\nif (process.env.NODE_ENV !== 'production') {\n if (typeof safeThis !== 'undefined') {\n var $RefreshInjected$ = '__reactRefreshInjected';\n // Namespace the injected flag (if necessary) for monorepo compatibility\n if (\n typeof __react_refresh_library__ !== 'undefined' &&\n __react_refresh_library__\n ) {\n $RefreshInjected$ += '_' + __react_refresh_library__;\n }\n\n // Only inject the runtime if it hasn't been injected\n if (!safeThis[$RefreshInjected$]) {\n RefreshRuntime.injectIntoGlobalHook(safeThis);\n\n // Empty implementation to avoid \"ReferenceError: variable is not defined\" in module which didn't pass builtin:react-refresh-loader\n safeThis.$RefreshSig$ = () => (type) => type;\n safeThis.$RefreshReg$ = () => {};\n\n // Mark the runtime as injected to prevent double-injection\n safeThis[$RefreshInjected$] = true;\n }\n }\n}\n","/* global __webpack_require__ */\nvar Refresh = require('react-refresh/runtime');\n\n/**\n * Extracts exports from a webpack module object.\n * @param {string} moduleId A Webpack module ID.\n * @returns {*} An exports object from the module.\n */\nfunction getModuleExports(moduleId) {\n if (typeof moduleId === 'undefined') {\n // `moduleId` is unavailable, which indicates that this module is not in the cache,\n // which means we won't be able to capture any exports,\n // and thus they cannot be refreshed safely.\n // These are likely runtime or dynamically generated modules.\n return {};\n }\n\n var maybeModule = __webpack_require__.c[moduleId];\n if (typeof maybeModule === 'undefined') {\n // `moduleId` is available but the module in cache is unavailable,\n // which indicates the module is somehow corrupted (e.g. broken Webpacak `module` globals).\n // We will warn the user (as this is likely a mistake) and assume they cannot be refreshed.\n console.warn(\n '[React Refresh] Failed to get exports for module: ' + moduleId + '.',\n );\n return {};\n }\n\n var exportsOrPromise = maybeModule.exports;\n if (typeof Promise !== 'undefined' && exportsOrPromise instanceof Promise) {\n return exportsOrPromise.then(function (exports) {\n return exports;\n });\n }\n return exportsOrPromise;\n}\n\n/**\n * Calculates the signature of a React refresh boundary.\n * If this signature changes, it's unsafe to accept the boundary.\n *\n * This implementation is based on the one in [Metro](https://github.com/facebook/metro/blob/907d6af22ac6ebe58572be418e9253a90665ecbd/packages/metro/src/lib/polyfills/require.js#L795-L816).\n * @param {*} moduleExports A Webpack module exports object.\n * @returns {string[]} A React refresh boundary signature array.\n */\nfunction getReactRefreshBoundarySignature(moduleExports) {\n var signature = [];\n signature.push(Refresh.getFamilyByType(moduleExports));\n\n if (moduleExports == null || typeof moduleExports !== 'object') {\n // Exit if we can't iterate over exports.\n return signature;\n }\n\n for (var key in moduleExports) {\n if (key === '__esModule') {\n continue;\n }\n\n signature.push(key);\n signature.push(Refresh.getFamilyByType(moduleExports[key]));\n }\n\n return signature;\n}\n\n/**\n * Creates a helper that performs a delayed React refresh.\n * @returns {function(function(): void): void} A debounced React refresh function.\n */\nfunction createDebounceUpdate() {\n /**\n * A cached setTimeout handler.\n * @type {number | undefined}\n */\n var refreshTimeout;\n\n /**\n * Performs react refresh on a delay and clears the error overlay.\n * @param {function(): void} callback\n * @returns {void}\n */\n function enqueueUpdate(callback) {\n if (typeof refreshTimeout === 'undefined') {\n refreshTimeout = setTimeout(function () {\n refreshTimeout = undefined;\n Refresh.performReactRefresh();\n callback();\n }, 30);\n }\n }\n\n return enqueueUpdate;\n}\n\n/**\n * Checks if all exports are likely a React component.\n *\n * This implementation is based on the one in [Metro](https://github.com/facebook/metro/blob/febdba2383113c88296c61e28e4ef6a7f4939fda/packages/metro/src/lib/polyfills/require.js#L748-L774).\n * @param {*} moduleExports A Webpack module exports object.\n * @returns {boolean} Whether the exports are React component like.\n */\nfunction isReactRefreshBoundary(moduleExports) {\n if (Refresh.isLikelyComponentType(moduleExports)) {\n return true;\n }\n if (\n moduleExports === undefined ||\n moduleExports === null ||\n typeof moduleExports !== 'object'\n ) {\n // Exit if we can't iterate over exports.\n return false;\n }\n\n var hasExports = false;\n var areAllExportsComponents = true;\n for (var key in moduleExports) {\n hasExports = true;\n\n // This is the ES Module indicator flag\n if (key === '__esModule') {\n continue;\n }\n\n // We can (and have to) safely execute getters here,\n // as Webpack manually assigns harmony exports to getters,\n // without any side-effects attached.\n // Ref: https://github.com/webpack/webpack/blob/b93048643fe74de2a6931755911da1212df55897/lib/MainTemplate.js#L281\n var exportValue = moduleExports[key];\n if (!Refresh.isLikelyComponentType(exportValue)) {\n areAllExportsComponents = false;\n }\n }\n\n return hasExports && areAllExportsComponents;\n}\n\n/**\n * Checks if exports are likely a React component and registers them.\n *\n * This implementation is based on the one in [Metro](https://github.com/facebook/metro/blob/febdba2383113c88296c61e28e4ef6a7f4939fda/packages/metro/src/lib/polyfills/require.js#L818-L835).\n * @param {*} moduleExports A Webpack module exports object.\n * @param {string} moduleId A Webpack module ID.\n * @returns {void}\n */\nfunction registerExportsForReactRefresh(moduleExports, moduleId) {\n if (Refresh.isLikelyComponentType(moduleExports)) {\n // Register module.exports if it is likely a component\n Refresh.register(moduleExports, moduleId + ' %exports%');\n }\n\n if (\n moduleExports === undefined ||\n moduleExports === null ||\n typeof moduleExports !== 'object'\n ) {\n // Exit if we can't iterate over the exports.\n return;\n }\n\n for (var key in moduleExports) {\n // Skip registering the ES Module indicator\n if (key === '__esModule') {\n continue;\n }\n\n var exportValue = moduleExports[key];\n if (Refresh.isLikelyComponentType(exportValue)) {\n var typeID = moduleId + ' %exports% ' + key;\n Refresh.register(exportValue, typeID);\n }\n }\n}\n\n/**\n * Compares previous and next module objects to check for mutated boundaries.\n *\n * This implementation is based on the one in [Metro](https://github.com/facebook/metro/blob/907d6af22ac6ebe58572be418e9253a90665ecbd/packages/metro/src/lib/polyfills/require.js#L776-L792).\n * @param {*} prevExports The current Webpack module exports object.\n * @param {*} nextExports The next Webpack module exports object.\n * @returns {boolean} Whether the React refresh boundary should be invalidated.\n */\nfunction shouldInvalidateReactRefreshBoundary(prevExports, nextExports) {\n var prevSignature = getReactRefreshBoundarySignature(prevExports);\n var nextSignature = getReactRefreshBoundarySignature(nextExports);\n\n if (prevSignature.length !== nextSignature.length) {\n return true;\n }\n\n for (var i = 0; i < nextSignature.length; i += 1) {\n if (prevSignature[i] !== nextSignature[i]) {\n return true;\n }\n }\n\n return false;\n}\n\nvar enqueueUpdate = createDebounceUpdate();\n\nfunction executeRuntime(\n moduleExports,\n moduleId,\n webpackHot,\n refreshOverlay,\n isTest,\n) {\n registerExportsForReactRefresh(moduleExports, moduleId);\n\n if (webpackHot) {\n var isHotUpdate = !!webpackHot.data;\n var prevExports;\n if (isHotUpdate) {\n prevExports = webpackHot.data.prevExports;\n }\n\n if (isReactRefreshBoundary(moduleExports)) {\n webpackHot.dispose(\n /**\n * A callback to performs a full refresh if React has unrecoverable errors,\n * and also caches the to-be-disposed module.\n * @param {*} data A hot module data object from Webpack HMR.\n * @returns {void}\n */\n function hotDisposeCallback(data) {\n // We have to mutate the data object to get data registered and cached\n data.prevExports = moduleExports;\n },\n );\n webpackHot.accept(\n /**\n * An error handler to allow self-recovering behaviours.\n * @param {Error} error An error occurred during evaluation of a module.\n * @returns {void}\n */\n function hotErrorHandler(error) {\n console.error(error);\n if (\n __reload_on_runtime_errors__ &&\n isUnrecoverableRuntimeError(error)\n ) {\n location.reload();\n return;\n }\n\n if (typeof refreshOverlay !== 'undefined' && refreshOverlay) {\n refreshOverlay.handleRuntimeError(error);\n }\n\n if (typeof isTest !== 'undefined' && isTest) {\n if (window.onHotAcceptError) {\n window.onHotAcceptError(error.message);\n }\n }\n\n __webpack_require__.c[moduleId].hot.accept(hotErrorHandler);\n },\n );\n\n if (isHotUpdate) {\n if (\n isReactRefreshBoundary(prevExports) &&\n shouldInvalidateReactRefreshBoundary(prevExports, moduleExports)\n ) {\n webpackHot.invalidate();\n } else {\n enqueueUpdate(\n /**\n * A function to dismiss the error overlay after performing React refresh.\n * @returns {void}\n */\n function updateCallback() {\n if (typeof refreshOverlay !== 'undefined' && refreshOverlay) {\n refreshOverlay.clearRuntimeErrors();\n }\n },\n );\n }\n }\n } else {\n if (isHotUpdate && typeof prevExports !== 'undefined') {\n webpackHot.invalidate();\n }\n }\n }\n}\n\nfunction isUnrecoverableRuntimeError(error) {\n return error.message.startsWith('RuntimeError: factory is undefined');\n}\n\nmodule.exports = Object.freeze({\n enqueueUpdate: enqueueUpdate,\n executeRuntime: executeRuntime,\n getModuleExports: getModuleExports,\n isReactRefreshBoundary: isReactRefreshBoundary,\n shouldInvalidateReactRefreshBoundary: shouldInvalidateReactRefreshBoundary,\n registerExportsForReactRefresh: registerExportsForReactRefresh,\n});\n","function _define_property(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true });\n } else obj[key] = value;\n\n return obj;\n}\nexport { _define_property as _ };\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, j as elementIndex, m as makeElementsArray, s as setInnerHTML } from '../shared/utils.mjs';\n\nfunction A11y({\n swiper,\n extendParams,\n on\n}) {\n extendParams({\n a11y: {\n enabled: true,\n notificationClass: 'swiper-notification',\n prevSlideMessage: 'Previous slide',\n nextSlideMessage: 'Next slide',\n firstSlideMessage: 'This is the first slide',\n lastSlideMessage: 'This is the last slide',\n paginationBulletMessage: 'Go to slide {{index}}',\n slideLabelMessage: '{{index}} / {{slidesLength}}',\n containerMessage: null,\n containerRoleDescriptionMessage: null,\n containerRole: null,\n itemRoleDescriptionMessage: null,\n slideRole: 'group',\n id: null,\n scrollOnFocus: true,\n wrapperLiveRegion: 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 = 16) {\n const randomChar = () => Math.round(16 * Math.random()).toString(16);\n return 'x'.repeat(size).replace(/x/g, randomChar);\n }\n function makeElFocusable(el) {\n el = makeElementsArray(el);\n el.forEach(subEl => {\n subEl.setAttribute('tabIndex', '0');\n });\n }\n function makeElNotFocusable(el) {\n el = makeElementsArray(el);\n el.forEach(subEl => {\n subEl.setAttribute('tabIndex', '-1');\n });\n }\n function addElRole(el, role) {\n el = makeElementsArray(el);\n el.forEach(subEl => {\n subEl.setAttribute('role', role);\n });\n }\n function addElRoleDescription(el, description) {\n el = makeElementsArray(el);\n el.forEach(subEl => {\n subEl.setAttribute('aria-roledescription', description);\n });\n }\n function addElControls(el, controls) {\n el = makeElementsArray(el);\n el.forEach(subEl => {\n subEl.setAttribute('aria-controls', controls);\n });\n }\n function addElLabel(el, label) {\n el = makeElementsArray(el);\n el.forEach(subEl => {\n subEl.setAttribute('aria-label', label);\n });\n }\n function addElId(el, id) {\n el = makeElementsArray(el);\n el.forEach(subEl => {\n subEl.setAttribute('id', id);\n });\n }\n function addElLive(el, live) {\n el = makeElementsArray(el);\n el.forEach(subEl => {\n subEl.setAttribute('aria-live', live);\n });\n }\n function disableEl(el) {\n el = makeElementsArray(el);\n el.forEach(subEl => {\n subEl.setAttribute('aria-disabled', true);\n });\n }\n function enableEl(el) {\n el = makeElementsArray(el);\n el.forEach(subEl => {\n subEl.setAttribute('aria-disabled', false);\n });\n }\n function onEnterOrSpaceKey(e) {\n if (e.keyCode !== 13 && e.keyCode !== 32) return;\n const params = swiper.params.a11y;\n const targetEl = e.target;\n if (swiper.pagination && swiper.pagination.el && (targetEl === swiper.pagination.el || swiper.pagination.el.contains(e.target))) {\n if (!e.target.matches(classesToSelector(swiper.params.pagination.bulletClass))) return;\n }\n if (swiper.navigation && swiper.navigation.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(swiper.getSlideIndexWhenGrid(parseInt(slideEl.getAttribute('data-swiper-slide-index'))), 0);\n } else {\n swiper.slideTo(swiper.getSlideIndexWhenGrid(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 addElId(wrapperEl, wrapperId);\n if (params.wrapperLiveRegion) {\n const live = swiper.params.autoplay && swiper.params.autoplay.enabled ? 'off' : 'polite';\n addElLive(wrapperEl, live);\n }\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 { 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({\n swiper,\n extendParams,\n on,\n emit,\n params\n}) {\n swiper.autoplay = {\n running: false,\n paused: false,\n timeLeft: 0\n };\n extendParams({\n autoplay: {\n enabled: false,\n delay: 3000,\n waitForTransition: true,\n disableOnInteraction: 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 { n as nextTick, o as elementTransitionEnd } from '../shared/utils.mjs';\n\n/* eslint no-bitwise: [\"error\", { \"allow\": [\">>\"] }] */\nfunction Controller({\n swiper,\n extendParams,\n on\n}) {\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 { 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({\n swiper,\n extendParams,\n on\n}) {\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 = `${(params.rotate || swiper.isHorizontal() ? -25 : 0) * 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","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, a as getRotateFix } from '../shared/utils.mjs';\n\nfunction EffectCoverflow({\n swiper,\n extendParams,\n on\n}) {\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, a as getRotateFix } from '../shared/utils.mjs';\n\nfunction EffectCreative({\n swiper,\n extendParams,\n on\n}) {\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 { e as effectInit } from '../shared/effect-init.mjs';\nimport { c as createElement, a as getRotateFix } from '../shared/utils.mjs';\n\nfunction EffectCube({\n swiper,\n extendParams,\n on\n}) {\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 { 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({\n swiper,\n extendParams,\n on\n}) {\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","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, a as getRotateFix } from '../shared/utils.mjs';\n\nfunction EffectFlip({\n swiper,\n extendParams,\n on\n}) {\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 { h as now, o as elementTransitionEnd } from '../shared/utils.mjs';\n\nfunction freeMode({\n swiper,\n extendParams,\n emit,\n once\n}) {\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({\n currentPos\n }) {\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({\n swiper,\n extendParams,\n on\n}) {\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 { g as getDocument, a as getWindow } from '../shared/ssr-window.esm.mjs';\nimport { e as elementChildren } from '../shared/utils.mjs';\n\nfunction HashNavigation({\n swiper,\n extendParams,\n emit,\n on\n}) {\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 { a as getWindow } from '../shared/ssr-window.esm.mjs';\n\nfunction History({\n swiper,\n extendParams,\n on\n}) {\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","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, a as getWindow } from '../shared/ssr-window.esm.mjs';\nimport { d as elementParents, f as elementOffset } from '../shared/utils.mjs';\n\n/* eslint-disable consistent-return */\nfunction Keyboard({\n swiper,\n extendParams,\n on,\n emit\n}) {\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.isContentEditable || 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 { 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({\n swiper\n}) {\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 { a as getWindow } from '../shared/ssr-window.esm.mjs';\nimport { n as nextTick, h as now } from '../shared/utils.mjs';\n\n/* eslint-disable consistent-return */\nfunction Mousewheel({\n swiper,\n extendParams,\n on,\n emit\n}) {\n const window = getWindow();\n extendParams({\n mousewheel: {\n enabled: false,\n releaseOnEdges: false,\n invert: false,\n forceToAxis: false,\n sensitivity: 1,\n eventsTarget: 'container',\n thresholdDelta: null,\n thresholdTime: null,\n noMousewheelClass: 'swiper-no-mousewheel'\n }\n });\n swiper.mousewheel = {\n enabled: false\n };\n let timeout;\n let lastScrollTime = now();\n let lastEventBeforeSnap;\n const recentWheelEvents = [];\n function normalize(e) {\n // Reasonable defaults\n const PIXEL_STEP = 10;\n const LINE_HEIGHT = 40;\n const PAGE_HEIGHT = 800;\n let sX = 0;\n let sY = 0; // spinX, spinY\n let pX = 0;\n let pY = 0; // pixelX, pixelY\n\n // Legacy\n if ('detail' in e) {\n sY = e.detail;\n }\n if ('wheelDelta' in e) {\n sY = -e.wheelDelta / 120;\n }\n if ('wheelDeltaY' in e) {\n sY = -e.wheelDeltaY / 120;\n }\n if ('wheelDeltaX' in e) {\n sX = -e.wheelDeltaX / 120;\n }\n\n // side scrolling on FF with DOMMouseScroll\n if ('axis' in e && e.axis === e.HORIZONTAL_AXIS) {\n sX = sY;\n sY = 0;\n }\n pX = sX * PIXEL_STEP;\n pY = sY * PIXEL_STEP;\n if ('deltaY' in e) {\n pY = e.deltaY;\n }\n if ('deltaX' in e) {\n pX = e.deltaX;\n }\n if (e.shiftKey && !pX) {\n // if user scrolls with shift he wants horizontal scroll\n pX = pY;\n pY = 0;\n }\n if ((pX || pY) && e.deltaMode) {\n if (e.deltaMode === 1) {\n // delta in LINE units\n pX *= LINE_HEIGHT;\n pY *= LINE_HEIGHT;\n } else {\n // delta in PAGE units\n pX *= PAGE_HEIGHT;\n pY *= PAGE_HEIGHT;\n }\n }\n\n // Fall-back if spin cannot be determined\n if (pX && !sX) {\n sX = pX < 1 ? -1 : 1;\n }\n if (pY && !sY) {\n sY = pY < 1 ? -1 : 1;\n }\n return {\n spinX: sX,\n spinY: sY,\n pixelX: pX,\n pixelY: pY\n };\n }\n function handleMouseEnter() {\n if (!swiper.enabled) return;\n swiper.mouseEntered = true;\n }\n function handleMouseLeave() {\n if (!swiper.enabled) return;\n swiper.mouseEntered = false;\n }\n function animateSlider(newEvent) {\n if (swiper.params.mousewheel.thresholdDelta && newEvent.delta < swiper.params.mousewheel.thresholdDelta) {\n // Prevent if delta of wheel scroll delta is below configured threshold\n return false;\n }\n if (swiper.params.mousewheel.thresholdTime && now() - lastScrollTime < swiper.params.mousewheel.thresholdTime) {\n // Prevent if time between scrolls is below configured threshold\n return false;\n }\n\n // If the movement is NOT big enough and\n // if the last time the user scrolled was too close to the current one (avoid continuously triggering the slider):\n // Don't go any further (avoid insignificant scroll movement).\n if (newEvent.delta >= 6 && now() - lastScrollTime < 60) {\n // Return false as a default\n return true;\n }\n // If user is scrolling towards the end:\n // If the slider hasn't hit the latest slide or\n // if the slider is a loop and\n // if the slider isn't moving right now:\n // Go to next slide and\n // emit a scroll event.\n // Else (the user is scrolling towards the beginning) and\n // if the slider hasn't hit the first slide or\n // if the slider is a loop and\n // if the slider isn't moving right now:\n // Go to prev slide and\n // emit a scroll event.\n if (newEvent.direction < 0) {\n if ((!swiper.isEnd || swiper.params.loop) && !swiper.animating) {\n swiper.slideNext();\n emit('scroll', newEvent.raw);\n }\n } else if ((!swiper.isBeginning || swiper.params.loop) && !swiper.animating) {\n swiper.slidePrev();\n emit('scroll', newEvent.raw);\n }\n // If you got here is because an animation has been triggered so store the current time\n lastScrollTime = new window.Date().getTime();\n // Return false as a default\n return false;\n }\n function releaseScroll(newEvent) {\n const params = swiper.params.mousewheel;\n if (newEvent.direction < 0) {\n if (swiper.isEnd && !swiper.params.loop && params.releaseOnEdges) {\n // Return true to animate scroll on edges\n return true;\n }\n } else if (swiper.isBeginning && !swiper.params.loop && params.releaseOnEdges) {\n // Return true to animate scroll on edges\n return true;\n }\n return false;\n }\n function handle(event) {\n let e = event;\n let disableParentSwiper = true;\n if (!swiper.enabled) return;\n\n // Ignore event if the target or its parents have the swiper-no-mousewheel class\n if (event.target.closest(`.${swiper.params.mousewheel.noMousewheelClass}`)) return;\n const params = swiper.params.mousewheel;\n if (swiper.params.cssMode) {\n e.preventDefault();\n }\n let targetEl = swiper.el;\n if (swiper.params.mousewheel.eventsTarget !== 'container') {\n targetEl = document.querySelector(swiper.params.mousewheel.eventsTarget);\n }\n const targetElContainsTarget = targetEl && targetEl.contains(e.target);\n if (!swiper.mouseEntered && !targetElContainsTarget && !params.releaseOnEdges) return true;\n if (e.originalEvent) e = e.originalEvent; // jquery fix\n let delta = 0;\n const rtlFactor = swiper.rtlTranslate ? -1 : 1;\n const data = normalize(e);\n if (params.forceToAxis) {\n if (swiper.isHorizontal()) {\n if (Math.abs(data.pixelX) > Math.abs(data.pixelY)) delta = -data.pixelX * rtlFactor;else return true;\n } else if (Math.abs(data.pixelY) > Math.abs(data.pixelX)) delta = -data.pixelY;else return true;\n } else {\n delta = Math.abs(data.pixelX) > Math.abs(data.pixelY) ? -data.pixelX * rtlFactor : -data.pixelY;\n }\n if (delta === 0) return true;\n if (params.invert) delta = -delta;\n\n // Get the scroll positions\n let positions = swiper.getTranslate() + delta * params.sensitivity;\n if (positions >= swiper.minTranslate()) positions = swiper.minTranslate();\n if (positions <= swiper.maxTranslate()) positions = swiper.maxTranslate();\n\n // When loop is true:\n // the disableParentSwiper will be true.\n // When loop is false:\n // if the scroll positions is not on edge,\n // then the disableParentSwiper will be true.\n // if the scroll on edge positions,\n // then the disableParentSwiper will be false.\n disableParentSwiper = swiper.params.loop ? true : !(positions === swiper.minTranslate() || positions === swiper.maxTranslate());\n if (disableParentSwiper && swiper.params.nested) e.stopPropagation();\n if (!swiper.params.freeMode || !swiper.params.freeMode.enabled) {\n // Register the new event in a variable which stores the relevant data\n const newEvent = {\n time: now(),\n delta: Math.abs(delta),\n direction: Math.sign(delta),\n raw: event\n };\n\n // Keep the most recent events\n if (recentWheelEvents.length >= 2) {\n recentWheelEvents.shift(); // only store the last N events\n }\n\n const prevEvent = recentWheelEvents.length ? recentWheelEvents[recentWheelEvents.length - 1] : undefined;\n recentWheelEvents.push(newEvent);\n\n // If there is at least one previous recorded event:\n // If direction has changed or\n // if the scroll is quicker than the previous one:\n // Animate the slider.\n // Else (this is the first time the wheel is moved):\n // Animate the slider.\n if (prevEvent) {\n if (newEvent.direction !== prevEvent.direction || newEvent.delta > prevEvent.delta || newEvent.time > prevEvent.time + 150) {\n animateSlider(newEvent);\n }\n } else {\n animateSlider(newEvent);\n }\n\n // If it's time to release the scroll:\n // Return now so you don't hit the preventDefault.\n if (releaseScroll(newEvent)) {\n return true;\n }\n } else {\n // Freemode or scrollContainer:\n\n // If we recently snapped after a momentum scroll, then ignore wheel events\n // to give time for the deceleration to finish. Stop ignoring after 500 msecs\n // or if it's a new scroll (larger delta or inverse sign as last event before\n // an end-of-momentum snap).\n const newEvent = {\n time: now(),\n delta: Math.abs(delta),\n direction: Math.sign(delta)\n };\n const ignoreWheelEvents = lastEventBeforeSnap && newEvent.time < lastEventBeforeSnap.time + 500 && newEvent.delta <= lastEventBeforeSnap.delta && newEvent.direction === lastEventBeforeSnap.direction;\n if (!ignoreWheelEvents) {\n lastEventBeforeSnap = undefined;\n let position = swiper.getTranslate() + delta * params.sensitivity;\n const wasBeginning = swiper.isBeginning;\n const wasEnd = swiper.isEnd;\n if (position >= swiper.minTranslate()) position = swiper.minTranslate();\n if (position <= swiper.maxTranslate()) position = swiper.maxTranslate();\n swiper.setTransition(0);\n swiper.setTranslate(position);\n swiper.updateProgress();\n swiper.updateActiveIndex();\n swiper.updateSlidesClasses();\n if (!wasBeginning && swiper.isBeginning || !wasEnd && swiper.isEnd) {\n swiper.updateSlidesClasses();\n }\n if (swiper.params.loop) {\n swiper.loopFix({\n direction: newEvent.direction < 0 ? 'next' : 'prev',\n byMousewheel: true\n });\n }\n if (swiper.params.freeMode.sticky) {\n // When wheel scrolling starts with sticky (aka snap) enabled, then detect\n // the end of a momentum scroll by storing recent (N=15?) wheel events.\n // 1. do all N events have decreasing or same (absolute value) delta?\n // 2. did all N events arrive in the last M (M=500?) msecs?\n // 3. does the earliest event have an (absolute value) delta that's\n // at least P (P=1?) larger than the most recent event's delta?\n // 4. does the latest event have a delta that's smaller than Q (Q=6?) pixels?\n // If 1-4 are \"yes\" then we're near the end of a momentum scroll deceleration.\n // Snap immediately and ignore remaining wheel events in this scroll.\n // See comment above for \"remaining wheel events in this scroll\" determination.\n // If 1-4 aren't satisfied, then wait to snap until 500ms after the last event.\n clearTimeout(timeout);\n timeout = undefined;\n if (recentWheelEvents.length >= 15) {\n recentWheelEvents.shift(); // only store the last N events\n }\n\n const prevEvent = recentWheelEvents.length ? recentWheelEvents[recentWheelEvents.length - 1] : undefined;\n const firstEvent = recentWheelEvents[0];\n recentWheelEvents.push(newEvent);\n if (prevEvent && (newEvent.delta > prevEvent.delta || newEvent.direction !== prevEvent.direction)) {\n // Increasing or reverse-sign delta means the user started scrolling again. Clear the wheel event log.\n recentWheelEvents.splice(0);\n } else if (recentWheelEvents.length >= 15 && newEvent.time - firstEvent.time < 500 && firstEvent.delta - newEvent.delta >= 1 && newEvent.delta <= 6) {\n // We're at the end of the deceleration of a momentum scroll, so there's no need\n // to wait for more events. Snap ASAP on the next tick.\n // Also, because there's some remaining momentum we'll bias the snap in the\n // direction of the ongoing scroll because it's better UX for the scroll to snap\n // in the same direction as the scroll instead of reversing to snap. Therefore,\n // if it's already scrolled more than 20% in the current direction, keep going.\n const snapToThreshold = delta > 0 ? 0.8 : 0.2;\n lastEventBeforeSnap = newEvent;\n recentWheelEvents.splice(0);\n timeout = nextTick(() => {\n 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, s as setInnerHTML } from '../shared/utils.mjs';\n\nconst arrowSvg = `<svg class=\"swiper-navigation-icon\" width=\"11\" height=\"20\" viewBox=\"0 0 11 20\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M0.38296 20.0762C0.111788 19.805 0.111788 19.3654 0.38296 19.0942L9.19758 10.2796L0.38296 1.46497C0.111788 1.19379 0.111788 0.754138 0.38296 0.482966C0.654131 0.211794 1.09379 0.211794 1.36496 0.482966L10.4341 9.55214C10.8359 9.9539 10.8359 10.6053 10.4341 11.007L1.36496 20.0762C1.09379 20.3474 0.654131 20.3474 0.38296 20.0762Z\" fill=\"currentColor\"/></svg>`;\nfunction Navigation({\n swiper,\n extendParams,\n on,\n emit\n}) {\n extendParams({\n navigation: {\n nextEl: null,\n prevEl: null,\n addIcons: true,\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 arrowSvg\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 if (params.addIcons && el.matches('.swiper-button-next,.swiper-button-prev') && !el.querySelector('svg')) {\n const tempEl = document.createElement('div');\n setInnerHTML(tempEl, arrowSvg);\n el.appendChild(tempEl.querySelector('svg'));\n tempEl.remove();\n }\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 { 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, i as elementOuterSize, j as elementIndex, s as setInnerHTML, d as elementParents } from '../shared/utils.mjs';\n\nfunction Pagination({\n swiper,\n extendParams,\n on,\n emit\n}) {\n const pfx = 'swiper-pagination';\n extendParams({\n pagination: {\n el: null,\n bulletElement: 'span',\n clickable: false,\n hideOnClick: false,\n renderBullet: null,\n renderProgressbar: null,\n renderFraction: null,\n renderCustom: null,\n progressbarOpposite: false,\n type: 'bullets',\n // 'bullets' or 'progressbar' or 'fraction' or 'custom'\n dynamicBullets: false,\n dynamicMainBullets: 1,\n formatFractionCurrent: number => number,\n formatFractionTotal: number => number,\n bulletClass: `${pfx}-bullet`,\n bulletActiveClass: `${pfx}-bullet-active`,\n modifierClass: `${pfx}-`,\n currentClass: `${pfx}-current`,\n totalClass: `${pfx}-total`,\n hiddenClass: `${pfx}-hidden`,\n progressbarFillClass: `${pfx}-progressbar-fill`,\n progressbarOppositeClass: `${pfx}-progressbar-opposite`,\n clickableClass: `${pfx}-clickable`,\n lockClass: `${pfx}-lock`,\n horizontalClass: `${pfx}-horizontal`,\n verticalClass: `${pfx}-vertical`,\n paginationDisabledClass: `${pfx}-disabled`\n }\n });\n swiper.pagination = {\n el: null,\n bullets: []\n };\n let bulletSize;\n let dynamicBulletIndex = 0;\n 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}\"></${params.bulletElement}>`;\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 = `<span class=\"${params.currentClass}\"></span>` + ' / ' + `<span class=\"${params.totalClass}\"></span>`;\n }\n }\n if (params.type === 'progressbar') {\n if (params.renderProgressbar) {\n paginationHTML = params.renderProgressbar.call(swiper, params.progressbarFillClass);\n } else {\n paginationHTML = `<span class=\"${params.progressbarFillClass}\"></span>`;\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","import { e as elementChildren } from '../shared/utils.mjs';\n\nfunction Parallax({\n swiper,\n extendParams,\n on\n}) {\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 = (duration = swiper.params.speed) => {\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 { g as getDocument } from '../shared/ssr-window.esm.mjs';\nimport { m as makeElementsArray, k as classesToTokens, c as createElement, n as nextTick, f 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({\n swiper,\n extendParams,\n on,\n emit\n}) {\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 { g as getDocument } from '../shared/ssr-window.esm.mjs';\nimport { p as isObject, e as elementChildren } from '../shared/utils.mjs';\n\nfunction Thumb({\n swiper,\n extendParams,\n on\n}) {\n extendParams({\n thumbs: {\n swiper: null,\n multipleActiveThumbs: true,\n autoScrollOffset: 0,\n slideThumbActiveClass: 'swiper-slide-thumb-active',\n thumbsContainerClass: 'swiper-thumbs'\n }\n });\n let initialized = false;\n let swiperCreated = false;\n swiper.thumbs = {\n swiper: null\n };\n function onThumbClick() {\n const thumbsSwiper = swiper.thumbs.swiper;\n if (!thumbsSwiper || thumbsSwiper.destroyed) return;\n const clickedIndex = thumbsSwiper.clickedIndex;\n const clickedSlide = thumbsSwiper.clickedSlide;\n if (clickedSlide && clickedSlide.classList.contains(swiper.params.thumbs.slideThumbActiveClass)) return;\n if (typeof clickedIndex === 'undefined' || clickedIndex === null) return;\n let slideToIndex;\n if (thumbsSwiper.params.loop) {\n slideToIndex = parseInt(thumbsSwiper.clickedSlide.getAttribute('data-swiper-slide-index'), 10);\n } else {\n slideToIndex = clickedIndex;\n }\n if (swiper.params.loop) {\n swiper.slideToLoop(slideToIndex);\n } else {\n swiper.slideTo(slideToIndex);\n }\n }\n function init() {\n const {\n thumbs: thumbsParams\n } = swiper.params;\n if (initialized) return false;\n initialized = true;\n const SwiperClass = swiper.constructor;\n if (thumbsParams.swiper instanceof SwiperClass) {\n 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 { g as getDocument } from '../shared/ssr-window.esm.mjs';\nimport { b as setCSSProperty, e as elementChildren, s as setInnerHTML, c as createElement } from '../shared/utils.mjs';\n\nfunction Virtual({\n swiper,\n extendParams,\n on,\n emit\n}) {\n extendParams({\n virtual: {\n enabled: false,\n slides: [],\n cache: true,\n slidesPerViewAutoSlideSize: 320,\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 slidesPerGroup,\n centeredSlides,\n slidesPerView,\n loop: isLoop,\n initialSlide\n } = swiper.params;\n if (beforeInit && !isLoop && initialSlide > 0) {\n return;\n }\n const {\n addSlidesBefore,\n addSlidesAfter,\n slidesPerViewAutoSlideSize\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 slidesPerViewNumeric;\n if (slidesPerView === 'auto') {\n if (slidesPerViewAutoSlideSize) {\n let swiperSize = swiper.size;\n if (!swiperSize) {\n swiperSize = swiper.isHorizontal() ? swiper.el.getBoundingClientRect().width : swiper.el.getBoundingClientRect().height;\n }\n slidesPerViewNumeric = Math.max(1, Math.ceil(swiperSize / slidesPerViewAutoSlideSize));\n } else {\n slidesPerViewNumeric = 1;\n }\n } else {\n slidesPerViewNumeric = slidesPerView;\n }\n let slidesAfter;\n let slidesBefore;\n if (centeredSlides) {\n slidesAfter = Math.floor(slidesPerViewNumeric / 2) + slidesPerGroup + addSlidesAfter;\n slidesBefore = Math.floor(slidesPerViewNumeric / 2) + slidesPerGroup + addSlidesBefore;\n } else {\n slidesAfter = slidesPerViewNumeric + (slidesPerGroup - 1) + addSlidesAfter;\n slidesBefore = (isLoop ? slidesPerViewNumeric : 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","import { a as getWindow } from '../shared/ssr-window.esm.mjs';\nimport { e as elementChildren, d as elementParents, f as elementOffset, l as getTranslate } from '../shared/utils.mjs';\n\nfunction Zoom({\n swiper,\n extendParams,\n on,\n emit\n}) {\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","function classesToSelector(classes = '') {\n return `.${classes.trim().replace(/([\\.:!+\\/()[\\]])/g, '\\\\$1') // eslint-disable-line\n .replace(/ /g, '.')}`;\n}\n\nexport { classesToSelector as c };\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 { 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","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 { o as elementTransitionEnd } from './utils.mjs';\n\nfunction effectVirtualTransitionEnd({\n swiper,\n duration,\n transformElements,\n allSlides\n}) {\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","/**\n * SSR Window 5.0.1\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: June 27, 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 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';\nimport { d as elementParents, q as elementStyle, e as elementChildren, b as setCSSProperty, i as elementOuterSize, r as elementNextAll, t as elementPrevAll, l as getTranslate, u as animateCSSModeScroll, n as nextTick, v as showWarning, c as createElement, w as elementIsChildOf, h as now, x as extend, j 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({\n userAgent\n} = {}) {\n const support = getSupport();\n const window = getWindow();\n const platform = window.navigator.platform;\n const ua = userAgent || window.navigator.userAgent;\n const device = {\n ios: false,\n android: false\n };\n const screenWidth = window.screen.width;\n const screenHeight = window.screen.height;\n const android = ua.match(/(Android);?[\\s\\/]+([\\d.]+)?/); // eslint-disable-line\n let ipad = ua.match(/(iPad)(?!\\1).*OS\\s([\\d_]+)/);\n const ipod = ua.match(/(iPod)(.*OS\\s([\\d_]+))?/);\n const iphone = !ipad && ua.match(/(iPhone\\sOS|iOS)\\s([\\d_]+)/);\n const windows = platform === 'Win32';\n let macos = platform === 'MacIntel';\n\n // iPadOs 13 fix\n const iPadScreens = ['1024x1366', '1366x1024', '834x1194', '1194x834', '834x1112', '1112x834', '768x1024', '1024x768', '820x1180', '1180x820', '810x1080', '1080x810'];\n if (!ipad && macos && support.touch && iPadScreens.indexOf(`${screenWidth}x${screenHeight}`) >= 0) {\n ipad = ua.match(/(Version)\\/([\\d.]+)/);\n if (!ipad) ipad = [0, 1, '13_0_0'];\n macos = false;\n }\n\n // Android\n if (android && !windows) {\n device.os = 'android';\n device.android = true;\n }\n if (ipad || iphone || ipod) {\n device.os = 'ios';\n device.ios = true;\n }\n\n // Export object\n return device;\n}\nfunction getDevice(overrides = {}) {\n if (!deviceCached) {\n deviceCached = calcDevice(overrides);\n }\n return deviceCached;\n}\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({\n swiper,\n on,\n emit\n}) {\n const window = getWindow();\n let observer = null;\n let animationFrame = null;\n const resizeHandler = () => {\n if (!swiper || swiper.destroyed || !swiper.initialized) return;\n emit('beforeResize');\n emit('resize');\n };\n const createObserver = () => {\n if (!swiper || swiper.destroyed || !swiper.initialized) return;\n observer = new ResizeObserver(entries => {\n animationFrame = window.requestAnimationFrame(() => {\n const {\n width,\n height\n } = swiper;\n let newWidth = width;\n let newHeight = height;\n entries.forEach(({\n contentBoxSize,\n contentRect,\n target\n }) => {\n if (target && target !== swiper.el) return;\n newWidth = contentRect ? contentRect.width : (contentBoxSize[0] || contentBoxSize).inlineSize;\n newHeight = contentRect ? contentRect.height : (contentBoxSize[0] || contentBoxSize).blockSize;\n });\n if (newWidth !== width || newHeight !== height) {\n resizeHandler();\n }\n });\n });\n observer.observe(swiper.el);\n };\n const removeObserver = () => {\n if (animationFrame) {\n window.cancelAnimationFrame(animationFrame);\n }\n if (observer && observer.unobserve && swiper.el) {\n observer.unobserve(swiper.el);\n observer = null;\n }\n };\n const orientationChangeHandler = () => {\n if (!swiper || swiper.destroyed || !swiper.initialized) return;\n emit('orientationchange');\n };\n on('init', () => {\n if (swiper.params.resizeObserver && typeof window.ResizeObserver !== 'undefined') {\n createObserver();\n return;\n }\n window.addEventListener('resize', resizeHandler);\n window.addEventListener('orientationchange', orientationChangeHandler);\n });\n on('destroy', () => {\n removeObserver();\n window.removeEventListener('resize', resizeHandler);\n window.removeEventListener('orientationchange', orientationChangeHandler);\n });\n}\n\nfunction Observer({\n swiper,\n extendParams,\n on,\n emit\n}) {\n const observers = [];\n const window = getWindow();\n const attach = (target, options = {}) => {\n const ObserverFunc = window.MutationObserver || window.WebkitMutationObserver;\n const observer = new ObserverFunc(mutations => {\n // The observerUpdate event should only be triggered\n // once despite the number of mutations. Additional\n // triggers are redundant and are very costly\n if (swiper.__preventObserver__) return;\n if (mutations.length === 1) {\n emit('observerUpdate', mutations[0]);\n return;\n }\n const observerUpdate = function observerUpdate() {\n emit('observerUpdate', mutations[0]);\n };\n if (window.requestAnimationFrame) {\n window.requestAnimationFrame(observerUpdate);\n } else {\n window.setTimeout(observerUpdate, 0);\n }\n });\n observer.observe(target, {\n attributes: typeof options.attributes === 'undefined' ? true : options.attributes,\n childList: 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(...args) {\n self.off(events, onceHandler);\n if (onceHandler.__emitterProxy) {\n delete onceHandler.__emitterProxy;\n }\n handler.apply(self, args);\n }\n onceHandler.__emitterProxy = handler;\n return self.on(events, onceHandler, priority);\n },\n onAny(handler, priority) {\n const self = this;\n if (!self.eventsListeners || self.destroyed) return self;\n if (typeof handler !== 'function') return self;\n const method = priority ? 'unshift' : 'push';\n if (self.eventsAnyListeners.indexOf(handler) < 0) {\n self.eventsAnyListeners[method](handler);\n }\n return self;\n },\n offAny(handler) {\n const self = this;\n if (!self.eventsListeners || self.destroyed) return self;\n if (!self.eventsAnyListeners) return self;\n const index = self.eventsAnyListeners.indexOf(handler);\n if (index >= 0) {\n self.eventsAnyListeners.splice(index, 1);\n }\n return self;\n },\n off(events, handler) {\n const self = this;\n if (!self.eventsListeners || self.destroyed) return self;\n if (!self.eventsListeners) return self;\n events.split(' ').forEach(event => {\n if (typeof handler === 'undefined') {\n self.eventsListeners[event] = [];\n } else if (self.eventsListeners[event]) {\n self.eventsListeners[event].forEach((eventHandler, index) => {\n if (eventHandler === handler || eventHandler.__emitterProxy && eventHandler.__emitterProxy === handler) {\n self.eventsListeners[event].splice(index, 1);\n }\n });\n }\n });\n return self;\n },\n emit(...args) {\n const self = this;\n if (!self.eventsListeners || self.destroyed) return self;\n if (!self.eventsListeners) return self;\n let events;\n let data;\n let context;\n if (typeof args[0] === 'string' || Array.isArray(args[0])) {\n events = args[0];\n data = args.slice(1, args.length);\n context = self;\n } else {\n events = args[0].events;\n data = args[0].data;\n context = args[0].context || self;\n }\n data.unshift(context);\n const eventsArray = Array.isArray(events) ? events : events.split(' ');\n eventsArray.forEach(event => {\n if (self.eventsAnyListeners && self.eventsAnyListeners.length) {\n self.eventsAnyListeners.forEach(eventHandler => {\n eventHandler.apply(context, [event, ...data]);\n });\n }\n if (self.eventsListeners && self.eventsListeners[event]) {\n self.eventsListeners[event].forEach(eventHandler => {\n eventHandler.apply(context, data);\n });\n }\n });\n return self;\n }\n};\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 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 const swiperSize = swiper.size - offsetBefore - offsetAfter;\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 - offsetBefore - offsetAfter;\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 const slide = slides[i];\n if (slide) {\n if (gridEnabled) {\n swiper.grid.updateSlide(i, slide, slides);\n }\n if (elementStyle(slide, 'display') === 'none') continue; // eslint-disable-line\n }\n\n if (isVirtual && params.slidesPerView === 'auto') {\n if (params.virtual.slidesPerViewAutoSlideSize) {\n slideSize = params.virtual.slidesPerViewAutoSlideSize;\n }\n if (slideSize && slide) {\n if (params.roundLengths) slideSize = Math.floor(slideSize);\n slide.style[swiper.getDirectionLabel('width')] = `${slideSize}px`;\n }\n } else if (params.slidesPerView === 'auto') {\n if (shouldResetSlideSize) {\n slide.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 (slide) {\n slide.style[swiper.getDirectionLabel('width')] = `${slideSize}px`;\n }\n }\n if (slide) {\n slide.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 = (offsetBefore || 0) + (offsetAfter || 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 = this && this.translate || 0) {\n const swiper = this;\n const params = swiper.params;\n const {\n slides,\n rtlTranslate: rtl,\n snapGrid\n } = swiper;\n if (slides.length === 0) return;\n if (typeof slides[0].swiperSlideOffset === 'undefined') swiper.updateSlidesOffset();\n let offsetCenter = -translate;\n if (rtl) offsetCenter = translate;\n 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 = this.isHorizontal() ? 'x' : 'y') {\n const swiper = this;\n const {\n params,\n rtlTranslate: rtl,\n translate,\n wrapperEl\n } = swiper;\n if (params.virtualTranslate) {\n return rtl ? -translate : translate;\n }\n if (params.cssMode) {\n return translate;\n }\n let currentTranslate = getTranslate(wrapperEl, axis);\n currentTranslate += swiper.cssOverflowAdjustment();\n if (rtl) currentTranslate = -currentTranslate;\n return currentTranslate || 0;\n}\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 = 0, speed = this.params.speed, runCallbacks = true, translateBounds = true, internal) {\n const swiper = this;\n const {\n params,\n wrapperEl\n } = swiper;\n if (swiper.animating && params.preventInteractionOnTransition) {\n return false;\n }\n const minTranslate = swiper.minTranslate();\n const maxTranslate = swiper.maxTranslate();\n let newTranslate;\n if (translateBounds && translate > minTranslate) newTranslate = minTranslate;else if (translateBounds && translate < maxTranslate) newTranslate = maxTranslate;else newTranslate = translate;\n\n // Update progress\n swiper.updateProgress(newTranslate);\n if (params.cssMode) {\n const isH = swiper.isHorizontal();\n if (speed === 0) {\n wrapperEl[isH ? 'scrollLeft' : 'scrollTop'] = -newTranslate;\n } else {\n if (!swiper.support.smoothScroll) {\n animateCSSModeScroll({\n swiper,\n targetPosition: -newTranslate,\n side: isH ? 'left' : 'top'\n });\n return true;\n }\n wrapperEl.scrollTo({\n [isH ? 'left' : 'top']: -newTranslate,\n behavior: 'smooth'\n });\n }\n return true;\n }\n if (speed === 0) {\n swiper.setTransition(0);\n swiper.setTranslate(newTranslate);\n if (runCallbacks) {\n swiper.emit('beforeTransitionStart', speed, internal);\n swiper.emit('transitionEnd');\n }\n } else {\n swiper.setTransition(speed);\n swiper.setTranslate(newTranslate);\n if (runCallbacks) {\n swiper.emit('beforeTransitionStart', speed, internal);\n swiper.emit('transitionStart');\n }\n if (!swiper.animating) {\n swiper.animating = true;\n if (!swiper.onTranslateToWrapperTransitionEnd) {\n swiper.onTranslateToWrapperTransitionEnd = function transitionEnd(e) {\n if (!swiper || swiper.destroyed) return;\n if (e.target !== this) return;\n swiper.wrapperEl.removeEventListener('transitionend', swiper.onTranslateToWrapperTransitionEnd);\n swiper.onTranslateToWrapperTransitionEnd = null;\n delete swiper.onTranslateToWrapperTransitionEnd;\n 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({\n swiper,\n runCallbacks,\n direction,\n step\n}) {\n const {\n activeIndex,\n previousIndex\n } = swiper;\n let dir = direction;\n if (!dir) {\n if (activeIndex > previousIndex) dir = 'next';else if (activeIndex < previousIndex) dir = 'prev';else dir = 'reset';\n }\n swiper.emit(`transition${step}`);\n if (runCallbacks && 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 = true, direction) {\n const swiper = this;\n const {\n params\n } = swiper;\n if (params.cssMode) return;\n if (params.autoHeight) {\n swiper.updateAutoHeight();\n }\n transitionEmit({\n swiper,\n runCallbacks,\n direction,\n step: 'Start'\n });\n}\n\nfunction transitionEnd(runCallbacks = true, direction) {\n const swiper = this;\n const {\n params\n } = swiper;\n swiper.animating = false;\n if (params.cssMode) return;\n swiper.setTransition(0);\n transitionEmit({\n swiper,\n runCallbacks,\n direction,\n step: 'End'\n });\n}\n\nvar transition = {\n setTransition,\n transitionStart,\n transitionEnd\n};\n\nfunction slideTo(index = 0, speed, runCallbacks = true, internal, initial) {\n if (typeof index === 'string') {\n index = parseInt(index, 10);\n }\n const swiper = this;\n let slideIndex = index;\n if (slideIndex < 0) slideIndex = 0;\n const {\n params,\n snapGrid,\n slidesGrid,\n previousIndex,\n activeIndex,\n rtlTranslate: rtl,\n wrapperEl,\n enabled\n } = swiper;\n if (!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 = 0, speed, runCallbacks = true, internal) {\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 slidesOffsetBefore,\n slidesOffsetAfter\n } = swiper.params;\n const bothDirections = centeredSlides || !!slidesOffsetBefore || !!slidesOffsetAfter;\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 (bothDirections && slidesPerView % 2 === 0) {\n slidesPerView = slidesPerView + 1;\n }\n }\n let needLoopFix = cols - targetSlideIndex < slidesPerView;\n if (bothDirections) {\n needLoopFix = needLoopFix || targetSlideIndex < Math.ceil(slidesPerView / 2);\n }\n if (internal && bothDirections && swiper.params.slidesPerView !== 'auto' && !gridEnabled) {\n needLoopFix = false;\n }\n if (needLoopFix) {\n const direction = bothDirections ? 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 = true, internal) {\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 = true, internal) {\n const swiper = this;\n const {\n params,\n snapGrid,\n slidesGrid,\n rtlTranslate,\n enabled,\n animating\n } = swiper;\n if (!enabled || 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 = true, internal) {\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 = true, internal, threshold = 0.5) {\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.getSlideIndexWhenGrid(swiper.clickedIndex);\n let realIndex;\n const slideSelector = swiper.isElement ? `swiper-slide` : `.${params.slideClass}`;\n const isGrid = swiper.grid && swiper.params.grid && swiper.params.grid.rows > 1;\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 swiper.slideToLoop(realIndex);\n } else if (slideToIndex > (isGrid ? (swiper.slides.length - slidesPerView) / 2 - (swiper.params.grid.rows - 1) : 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 clearBlankSlides = () => {\n const slides = elementChildren(slidesEl, `.${params.slideBlankClass}`);\n slides.forEach(el => {\n el.remove();\n });\n if (slides.length > 0) {\n swiper.recalcSlides();\n swiper.updateSlides();\n }\n };\n const gridEnabled = swiper.grid && params.grid && params.grid.rows > 1;\n if (params.loopAddBlankSlides && (params.slidesPerGroup > 1 || gridEnabled)) {\n clearBlankSlides();\n }\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 const bothDirections = params.centeredSlides || !!params.slidesOffsetBefore || !!params.slidesOffsetAfter;\n swiper.loopFix({\n slideRealIndex,\n direction: bothDirections ? undefined : 'next',\n initial\n });\n}\n\nfunction loopFix({\n slideRealIndex,\n slideTo = true,\n direction,\n setTranslate,\n activeSlideIndex,\n initial,\n byController,\n byMousewheel\n} = {}) {\n const swiper = this;\n if (!swiper.params.loop) return;\n swiper.emit('beforeLoopFix');\n const {\n slides,\n allowSlidePrev,\n allowSlideNext,\n slidesEl,\n params\n } = swiper;\n const {\n centeredSlides,\n slidesOffsetBefore,\n slidesOffsetAfter,\n initialSlide\n } = params;\n const bothDirections = centeredSlides || !!slidesOffsetBefore || !!slidesOffsetAfter;\n swiper.allowSlidePrev = true;\n swiper.allowSlideNext = true;\n if (swiper.virtual && params.virtual.enabled) {\n if (slideTo) {\n if (!bothDirections && swiper.snapIndex === 0) {\n swiper.slideTo(swiper.virtual.slides.length, 0, false, true);\n } else if (bothDirections && 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 (bothDirections && slidesPerView % 2 === 0) {\n slidesPerView = slidesPerView + 1;\n }\n }\n const slidesPerGroup = params.slidesPerGroupAuto ? slidesPerView : params.slidesPerGroup;\n let loopedSlides = bothDirections ? Math.max(slidesPerGroup, Math.ceil(slidesPerView / 2)) : 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 && !bothDirections;\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 + (bothDirections && 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 = this) {\n function __closestFrom(el) {\n if (!el || el === getDocument() || el === getWindow()) return null;\n if (el.assignedSlot) el = el.assignedSlot;\n const found = el.closest(selector);\n if (!found && !el.getRootNode) {\n return null;\n }\n return found || __closestFrom(el.getRootNode().host);\n }\n return __closestFrom(base);\n}\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 = 'window', containerEl) {\n if (!breakpoints || base === 'container' && !containerEl) return undefined;\n let breakpoint = false;\n const window = getWindow();\n const currentHeight = base === 'window' ? window.innerHeight : containerEl.clientHeight;\n const points = Object.keys(breakpoints).map(point => {\n if (typeof point === 'string' && point.indexOf('@') === 0) {\n const minRatio = parseFloat(point.substr(1));\n const value = currentHeight * minRatio;\n return {\n value,\n point\n };\n }\n return {\n value: point,\n point\n };\n });\n points.sort((a, b) => parseInt(a.value, 10) - parseInt(b.value, 10));\n for (let i = 0; i < points.length; i += 1) {\n const {\n point,\n value\n } = points[i];\n if (base === 'window') {\n if (window.matchMedia(`(min-width: ${value}px)`).matches) {\n breakpoint = point;\n }\n } else if (value <= containerEl.clientWidth) {\n breakpoint = point;\n }\n }\n return breakpoint || 'max';\n}\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 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(...args) {\n let el;\n let params;\n if (args.length === 1 && args[0].constructor && Object.prototype.toString.call(args[0]).slice(8, -1) === 'Object') {\n params = args[0];\n } else {\n [el, params] = args;\n }\n if (!params) params = {};\n params = extend({}, params);\n if (el && !params.el) params.el = el;\n const document = getDocument();\n if (params.el && typeof params.el === 'string' && document.querySelectorAll(params.el).length > 1) {\n const swipers = [];\n document.querySelectorAll(params.el).forEach(containerEl => {\n const newParams = extend({}, params, {\n el: containerEl\n });\n swipers.push(new Swiper(newParams));\n });\n // eslint-disable-next-line no-constructor-return\n return swipers;\n }\n\n // Swiper Instance\n const swiper = this;\n swiper.__swiper__ = true;\n swiper.support = getSupport();\n swiper.device = getDevice({\n userAgent: params.userAgent\n });\n swiper.browser = getBrowser();\n swiper.eventsListeners = {};\n swiper.eventsAnyListeners = [];\n swiper.modules = [...swiper.__modules__];\n if (params.modules && Array.isArray(params.modules)) {\n swiper.modules.push(...params.modules);\n }\n const allModulesParams = {};\n swiper.modules.forEach(mod => {\n mod({\n params,\n swiper,\n extendParams: moduleExtendParams(params, allModulesParams),\n on: swiper.on.bind(swiper),\n once: swiper.once.bind(swiper),\n off: swiper.off.bind(swiper),\n emit: swiper.emit.bind(swiper)\n });\n });\n\n // Extend defaults with modules params\n const swiperParams = extend({}, defaults, allModulesParams);\n\n // Extend defaults with passed params\n swiper.params = extend({}, swiperParams, extendedDefaults, params);\n swiper.originalParams = extend({}, swiper.params);\n swiper.passedParams = extend({}, params);\n\n // add event listeners\n if (swiper.params && swiper.params.on) {\n Object.keys(swiper.params.on).forEach(eventName => {\n swiper.on(eventName, swiper.params.on[eventName]);\n });\n }\n if (swiper.params && swiper.params.onAny) {\n swiper.onAny(swiper.params.onAny);\n }\n\n // Extend Swiper\n Object.assign(swiper, {\n enabled: swiper.params.enabled,\n el,\n // Classes\n classNames: [],\n // Slides\n slides: [],\n slidesGrid: [],\n snapGrid: [],\n slidesSizesGrid: [],\n // isDirection\n isHorizontal() {\n return swiper.params.direction === 'horizontal';\n },\n isVertical() {\n return swiper.params.direction === 'vertical';\n },\n // Indexes\n activeIndex: 0,\n realIndex: 0,\n //\n isBeginning: true,\n isEnd: false,\n // Props\n translate: 0,\n previousTranslate: 0,\n progress: 0,\n velocity: 0,\n animating: false,\n cssOverflowAdjustment() {\n // Returns 0 unless `translate` is > 2**23\n // Should be subtracted from css values to prevent overflow\n return Math.trunc(this.translate / 2 ** 23) * 2 ** 23;\n },\n // Locks\n allowSlideNext: swiper.params.allowSlideNext,\n allowSlidePrev: swiper.params.allowSlidePrev,\n // Touch Events\n touchEventsData: {\n isTouched: undefined,\n isMoved: undefined,\n allowTouchCallbacks: undefined,\n touchStartTime: undefined,\n isScrolling: undefined,\n currentTranslate: undefined,\n startTranslate: undefined,\n allowThresholdMove: undefined,\n // Form elements to match\n focusableElements: swiper.params.focusableElements,\n // Last click time\n lastClickTime: 0,\n clickTimeout: undefined,\n // Velocities\n velocities: [],\n allowMomentumBounce: undefined,\n startMoving: undefined,\n 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 getSlideIndexWhenGrid(index) {\n if (this.grid && this.params.grid && this.params.grid.rows > 1) {\n if (this.params.grid.fill === 'column') {\n index = Math.floor(index / this.params.grid.rows);\n } else if (this.params.grid.fill === 'row') {\n index = index % Math.ceil(this.slides.length / this.params.grid.rows);\n }\n }\n return 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 = 'current', exact = false) {\n const swiper = this;\n const {\n params,\n slides,\n slidesGrid,\n slidesSizesGrid,\n size: swiperSize,\n activeIndex\n } = swiper;\n let spv = 1;\n if (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 = true) {\n const swiper = this;\n const currentDirection = swiper.params.direction;\n if (!newDirection) {\n // eslint-disable-next-line\n newDirection = currentDirection === 'horizontal' ? 'vertical' : 'horizontal';\n }\n if (newDirection === currentDirection || newDirection !== 'horizontal' && newDirection !== 'vertical') {\n return swiper;\n }\n swiper.el.classList.remove(`${swiper.params.containerModifierClass}${currentDirection}`);\n swiper.el.classList.add(`${swiper.params.containerModifierClass}${newDirection}`);\n swiper.emitContainerClasses();\n swiper.params.direction = newDirection;\n swiper.slides.forEach(slideEl => {\n if (newDirection === 'vertical') {\n slideEl.style.width = '';\n } else {\n slideEl.style.height = '';\n }\n });\n swiper.emit('changeDirection');\n if (needUpdate) swiper.update();\n return swiper;\n }\n changeLanguageDirection(direction) {\n const swiper = this;\n if (swiper.rtl && direction === 'rtl' || !swiper.rtl && direction === 'ltr') return;\n swiper.rtl = direction === 'rtl';\n swiper.rtlTranslate = swiper.params.direction === 'horizontal' && swiper.rtl;\n if (swiper.rtl) {\n swiper.el.classList.add(`${swiper.params.containerModifierClass}rtl`);\n swiper.el.dir = 'rtl';\n } else {\n swiper.el.classList.remove(`${swiper.params.containerModifierClass}rtl`);\n swiper.el.dir = 'ltr';\n }\n swiper.update();\n }\n mount(element) {\n const swiper = this;\n if (swiper.mounted) return true;\n\n // Find el\n let el = element || swiper.params.el;\n if (typeof el === 'string') {\n el = document.querySelector(el);\n }\n if (!el) {\n return false;\n }\n el.swiper = swiper;\n if (el.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 = true, cleanStyles = true) {\n const swiper = this;\n const {\n params,\n el,\n wrapperEl,\n slides\n } = swiper;\n if (typeof swiper.params === 'undefined' || swiper.destroyed) {\n return null;\n }\n swiper.emit('beforeDestroy');\n\n // Init Flag\n swiper.initialized = false;\n\n // Detach events\n swiper.detachEvents();\n\n // Destroy loop\n if (params.loop) {\n swiper.loopDestroy();\n }\n\n // Cleanup styles\n if (cleanStyles) {\n swiper.removeClasses();\n 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 { e as extend, p as paramsList, i as isObject, n as needsNavigation, a as needsPagination, b as needsScrollbar } from './update-swiper.mjs';\nimport { d as defaults } from './swiper-core.mjs';\n\nfunction getParams(obj = {}, splitEvents = true) {\n const params = {\n on: {}\n };\n const events = {};\n const passedParams = {};\n extend(params, defaults);\n params._emitClasses = true;\n params.init = false;\n const rest = {};\n const allowedParams = paramsList.map(key => key.replace(/_/, ''));\n const plainObj = Object.assign({}, obj);\n Object.keys(plainObj).forEach(key => {\n if (typeof obj[key] === 'undefined') return;\n if (allowedParams.indexOf(key) >= 0) {\n if (isObject(obj[key])) {\n params[key] = {};\n passedParams[key] = {};\n extend(params[key], obj[key]);\n extend(passedParams[key], obj[key]);\n } else {\n params[key] = obj[key];\n passedParams[key] = obj[key];\n }\n } else if (key.search(/on[A-Z]/) === 0 && typeof obj[key] === 'function') {\n if (splitEvents) {\n events[`${key[2].toLowerCase()}${key.substr(3)}`] = obj[key];\n } else {\n params.on[`${key[2].toLowerCase()}${key.substr(3)}`] = obj[key];\n }\n } else {\n rest[key] = obj[key];\n }\n });\n ['navigation', 'pagination', 'scrollbar'].forEach(key => {\n if (params[key] === true) params[key] = {};\n if (params[key] === false) delete params[key];\n });\n return {\n params,\n passedParams,\n rest,\n events\n };\n}\n\nfunction mountSwiper({\n el,\n nextEl,\n prevEl,\n paginationEl,\n scrollbarEl,\n swiper\n}, swiperParams) {\n if (needsNavigation(swiperParams) && nextEl && prevEl) {\n swiper.params.navigation.nextEl = nextEl;\n swiper.originalParams.navigation.nextEl = nextEl;\n swiper.params.navigation.prevEl = prevEl;\n swiper.originalParams.navigation.prevEl = prevEl;\n }\n if (needsPagination(swiperParams) && paginationEl) {\n swiper.params.pagination.el = paginationEl;\n swiper.originalParams.pagination.el = paginationEl;\n }\n if (needsScrollbar(swiperParams) && scrollbarEl) {\n swiper.params.scrollbar.el = scrollbarEl;\n swiper.originalParams.scrollbar.el = scrollbarEl;\n }\n swiper.init(el);\n}\n\nfunction getChangedParams(swiperParams, oldParams, children, oldChildren, getKey) {\n const keys = [];\n if (!oldParams) return keys;\n const addKey = key => {\n if (keys.indexOf(key) < 0) keys.push(key);\n };\n if (children && oldChildren) {\n const oldChildrenKeys = oldChildren.map(getKey);\n const childrenKeys = children.map(getKey);\n if (oldChildrenKeys.join('') !== childrenKeys.join('')) addKey('children');\n if (oldChildren.length !== children.length) addKey('children');\n }\n const watchParams = paramsList.filter(key => key[0] === '_').map(key => key.replace(/_/, ''));\n watchParams.forEach(key => {\n if (key in swiperParams && key in oldParams) {\n if (isObject(swiperParams[key]) && isObject(oldParams[key])) {\n const newKeys = Object.keys(swiperParams[key]);\n const oldKeys = Object.keys(oldParams[key]);\n if (newKeys.length !== oldKeys.length) {\n addKey(key);\n } else {\n newKeys.forEach(newKey => {\n if (swiperParams[key][newKey] !== oldParams[key][newKey]) {\n addKey(key);\n }\n });\n oldKeys.forEach(oldKey => {\n if (swiperParams[key][oldKey] !== oldParams[key][oldKey]) addKey(key);\n });\n }\n } else if (swiperParams[key] !== oldParams[key]) {\n addKey(key);\n }\n }\n });\n return keys;\n}\n\nconst updateOnVirtualData = swiper => {\n if (!swiper || swiper.destroyed || !swiper.params.virtual || swiper.params.virtual && !swiper.params.virtual.enabled) return;\n swiper.updateSlides();\n swiper.updateProgress();\n swiper.updateSlidesClasses();\n swiper.emit('_virtualUpdated');\n if (swiper.parallax && swiper.params.parallax && swiper.params.parallax.enabled) {\n swiper.parallax.setTranslate();\n }\n};\n\nexport { getChangedParams as a, getParams as g, mountSwiper as m, updateOnVirtualData as u };\n","import { s as setInnerHTML } from './utils.mjs';\n\n/* underscore in name -> watch for changes */\nconst paramsList = ['eventsPrefix', 'injectStyles', 'injectStylesUrls', 'modules', 'init', '_direction', 'oneWayMovement', 'swiperElementNodeName', 'touchEventsTarget', 'initialSlide', '_speed', 'cssMode', 'updateOnWindowResize', 'resizeObserver', 'nested', 'focusableElements', '_enabled', '_width', '_height', 'preventInteractionOnTransition', 'userAgent', 'url', '_edgeSwipeDetection', '_edgeSwipeThreshold', '_freeMode', '_autoHeight', 'setWrapperSize', 'virtualTranslate', '_effect', 'breakpoints', 'breakpointsBase', '_spaceBetween', '_slidesPerView', 'maxBackfaceHiddenSlides', '_grid', '_slidesPerGroup', '_slidesPerGroupSkip', '_slidesPerGroupAuto', '_centeredSlides', '_centeredSlidesBounds', '_slidesOffsetBefore', '_slidesOffsetAfter', 'normalizeSlideIndex', '_centerInsufficientSlides', '_watchOverflow', 'roundLengths', 'touchRatio', 'touchAngle', 'simulateTouch', '_shortSwipes', '_longSwipes', 'longSwipesRatio', 'longSwipesMs', '_followFinger', 'allowTouchMove', '_threshold', 'touchMoveStopPropagation', 'touchStartPreventDefault', 'touchStartForcePreventDefault', 'touchReleaseOnEdges', 'uniqueNavElements', '_resistance', '_resistanceRatio', '_watchSlidesProgress', '_grabCursor', 'preventClicks', 'preventClicksPropagation', '_slideToClickedSlide', '_loop', 'loopAdditionalSlides', 'loopAddBlankSlides', 'loopPreventsSliding', '_rewind', '_allowSlidePrev', '_allowSlideNext', '_swipeHandler', '_noSwiping', 'noSwipingClass', 'noSwipingSelector', 'passiveListeners', 'containerModifierClass', 'slideClass', 'slideActiveClass', 'slideVisibleClass', 'slideFullyVisibleClass', 'slideNextClass', 'slidePrevClass', 'slideBlankClass', 'wrapperClass', 'lazyPreloaderClass', 'lazyPreloadPrevNext', 'runCallbacksOnInit', 'observer', 'observeParents', 'observeSlideChildren',\n// modules\n'a11y', '_autoplay', '_controller', 'coverflowEffect', 'cubeEffect', 'fadeEffect', 'flipEffect', 'creativeEffect', 'cardsEffect', 'hashNavigation', 'history', 'keyboard', 'mousewheel', '_navigation', '_pagination', 'parallax', '_scrollbar', '_thumbs', 'virtual', 'zoom', 'control'];\n\nfunction isObject(o) {\n return typeof o === 'object' && o !== null && o.constructor && Object.prototype.toString.call(o).slice(8, -1) === 'Object' && !o.__swiper__;\n}\nfunction extend(target, src) {\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 if (src[key].__swiper__) target[key] = src[key];else extend(target[key], src[key]);\n } else {\n target[key] = src[key];\n }\n });\n}\nfunction needsNavigation(params = {}) {\n return params.navigation && typeof params.navigation.nextEl === 'undefined' && typeof params.navigation.prevEl === 'undefined';\n}\nfunction needsPagination(params = {}) {\n return params.pagination && typeof params.pagination.el === 'undefined';\n}\nfunction needsScrollbar(params = {}) {\n return params.scrollbar && typeof params.scrollbar.el === 'undefined';\n}\nfunction uniqueClasses(classNames = '') {\n const classes = classNames.split(' ').map(c => c.trim()).filter(c => !!c);\n const unique = [];\n classes.forEach(c => {\n if (unique.indexOf(c) < 0) unique.push(c);\n });\n return unique.join(' ');\n}\nfunction attrToProp(attrName = '') {\n return attrName.replace(/-[a-z]/g, l => l.toUpperCase().replace('-', ''));\n}\nfunction wrapperClass(className = '') {\n if (!className) return 'swiper-wrapper';\n if (!className.includes('swiper-wrapper')) return `swiper-wrapper ${className}`;\n return className;\n}\n\nfunction updateSwiper({\n swiper,\n slides,\n passedParams,\n changedParams,\n nextEl,\n prevEl,\n scrollbarEl,\n paginationEl\n}) {\n const updateParams = changedParams.filter(key => key !== 'children' && key !== 'direction' && key !== 'wrapperClass');\n const {\n params: currentParams,\n pagination,\n navigation,\n scrollbar,\n virtual,\n thumbs\n } = swiper;\n let needThumbsInit;\n let needControllerInit;\n let needPaginationInit;\n let needScrollbarInit;\n let needNavigationInit;\n let loopNeedDestroy;\n let loopNeedEnable;\n let loopNeedReloop;\n if (changedParams.includes('thumbs') && passedParams.thumbs && passedParams.thumbs.swiper && !passedParams.thumbs.swiper.destroyed && currentParams.thumbs && (!currentParams.thumbs.swiper || currentParams.thumbs.swiper.destroyed)) {\n needThumbsInit = true;\n }\n if (changedParams.includes('controller') && passedParams.controller && passedParams.controller.control && currentParams.controller && !currentParams.controller.control) {\n needControllerInit = true;\n }\n if (changedParams.includes('pagination') && passedParams.pagination && (passedParams.pagination.el || paginationEl) && (currentParams.pagination || currentParams.pagination === false) && pagination && !pagination.el) {\n needPaginationInit = true;\n }\n if (changedParams.includes('scrollbar') && passedParams.scrollbar && (passedParams.scrollbar.el || scrollbarEl) && (currentParams.scrollbar || currentParams.scrollbar === false) && scrollbar && !scrollbar.el) {\n needScrollbarInit = true;\n }\n if (changedParams.includes('navigation') && passedParams.navigation && (passedParams.navigation.prevEl || prevEl) && (passedParams.navigation.nextEl || nextEl) && (currentParams.navigation || currentParams.navigation === false) && navigation && !navigation.prevEl && !navigation.nextEl) {\n needNavigationInit = true;\n }\n const destroyModule = mod => {\n if (!swiper[mod]) return;\n swiper[mod].destroy();\n if (mod === 'navigation') {\n if (swiper.isElement) {\n swiper[mod].prevEl.remove();\n swiper[mod].nextEl.remove();\n }\n currentParams[mod].prevEl = undefined;\n currentParams[mod].nextEl = undefined;\n swiper[mod].prevEl = undefined;\n swiper[mod].nextEl = undefined;\n } else {\n if (swiper.isElement) {\n swiper[mod].el.remove();\n }\n currentParams[mod].el = undefined;\n swiper[mod].el = undefined;\n }\n };\n if (changedParams.includes('loop') && swiper.isElement) {\n if (currentParams.loop && !passedParams.loop) {\n loopNeedDestroy = true;\n } else if (!currentParams.loop && passedParams.loop) {\n loopNeedEnable = true;\n } else {\n loopNeedReloop = true;\n }\n }\n updateParams.forEach(key => {\n if (isObject(currentParams[key]) && isObject(passedParams[key])) {\n Object.assign(currentParams[key], passedParams[key]);\n if ((key === 'navigation' || key === 'pagination' || key === 'scrollbar') && 'enabled' in passedParams[key] && !passedParams[key].enabled) {\n destroyModule(key);\n }\n } else {\n const newValue = passedParams[key];\n if ((newValue === true || newValue === false) && (key === 'navigation' || key === 'pagination' || key === 'scrollbar')) {\n if (newValue === false) {\n destroyModule(key);\n }\n } else {\n currentParams[key] = passedParams[key];\n }\n }\n });\n if (updateParams.includes('controller') && !needControllerInit && swiper.controller && swiper.controller.control && currentParams.controller && currentParams.controller.control) {\n swiper.controller.control = currentParams.controller.control;\n }\n if (changedParams.includes('children') && slides && virtual && currentParams.virtual.enabled) {\n virtual.slides = slides;\n virtual.update(true);\n } else if (changedParams.includes('virtual') && virtual && currentParams.virtual.enabled) {\n if (slides) virtual.slides = slides;\n virtual.update(true);\n }\n if (changedParams.includes('children') && slides && currentParams.loop) {\n loopNeedReloop = true;\n }\n if (needThumbsInit) {\n const initialized = thumbs.init();\n if (initialized) thumbs.update(true);\n }\n if (needControllerInit) {\n swiper.controller.control = currentParams.controller.control;\n }\n if (needPaginationInit) {\n if (swiper.isElement && (!paginationEl || typeof paginationEl === 'string')) {\n paginationEl = document.createElement('div');\n paginationEl.classList.add('swiper-pagination');\n paginationEl.part.add('pagination');\n swiper.el.appendChild(paginationEl);\n }\n if (paginationEl) currentParams.pagination.el = paginationEl;\n pagination.init();\n pagination.render();\n pagination.update();\n }\n if (needScrollbarInit) {\n if (swiper.isElement && (!scrollbarEl || typeof scrollbarEl === 'string')) {\n scrollbarEl = document.createElement('div');\n scrollbarEl.classList.add('swiper-scrollbar');\n scrollbarEl.part.add('scrollbar');\n swiper.el.appendChild(scrollbarEl);\n }\n if (scrollbarEl) currentParams.scrollbar.el = scrollbarEl;\n scrollbar.init();\n scrollbar.updateSize();\n scrollbar.setTranslate();\n }\n if (needNavigationInit) {\n if (swiper.isElement) {\n if (!nextEl || typeof nextEl === 'string') {\n nextEl = document.createElement('div');\n nextEl.classList.add('swiper-button-next');\n setInnerHTML(nextEl, swiper.navigation.arrowSvg);\n nextEl.part.add('button-next');\n swiper.el.appendChild(nextEl);\n }\n if (!prevEl || typeof prevEl === 'string') {\n prevEl = document.createElement('div');\n prevEl.classList.add('swiper-button-prev');\n setInnerHTML(prevEl, swiper.navigation.arrowSvg);\n prevEl.part.add('button-prev');\n swiper.el.appendChild(prevEl);\n }\n }\n if (nextEl) currentParams.navigation.nextEl = nextEl;\n if (prevEl) currentParams.navigation.prevEl = prevEl;\n navigation.init();\n navigation.update();\n }\n if (changedParams.includes('allowSlideNext')) {\n swiper.allowSlideNext = passedParams.allowSlideNext;\n }\n if (changedParams.includes('allowSlidePrev')) {\n swiper.allowSlidePrev = passedParams.allowSlidePrev;\n }\n if (changedParams.includes('direction')) {\n swiper.changeDirection(passedParams.direction, false);\n }\n if (loopNeedDestroy || loopNeedReloop) {\n swiper.loopDestroy();\n }\n if (loopNeedEnable || loopNeedReloop) {\n swiper.loopCreate();\n }\n swiper.update();\n}\n\nexport { needsPagination as a, needsScrollbar as b, attrToProp as c, uniqueClasses as d, extend as e, isObject as i, needsNavigation as n, paramsList as p, updateSwiper as u, wrapperClass as w };\n","import { a as getWindow, g as getDocument } from './ssr-window.esm.mjs';\n\nfunction classesToTokens(classes = '') {\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 = 0) {\n return setTimeout(callback, delay);\n}\nfunction now() {\n return Date.now();\n}\nfunction getComputedStyle(el) {\n const window = getWindow();\n let style;\n if (window.getComputedStyle) {\n style = window.getComputedStyle(el, null);\n }\n if (!style && el.currentStyle) {\n style = el.currentStyle;\n }\n if (!style) {\n style = el.style;\n }\n return style;\n}\nfunction getTranslate(el, axis = 'x') {\n const window = getWindow();\n let matrix;\n let curTransform;\n let transformMatrix;\n const curStyle = getComputedStyle(el);\n if (window.WebKitCSSMatrix) {\n curTransform = curStyle.transform || curStyle.webkitTransform;\n if (curTransform.split(',').length > 6) {\n curTransform = curTransform.split(', ').map(a => a.replace(',', '.')).join(', ');\n }\n // Some old versions of Webkit choke when 'none' is passed; pass\n // empty string instead in this case\n transformMatrix = new window.WebKitCSSMatrix(curTransform === 'none' ? '' : curTransform);\n } else {\n transformMatrix = curStyle.MozTransform || curStyle.OTransform || curStyle.MsTransform || curStyle.msTransform || curStyle.transform || curStyle.getPropertyValue('transform').replace('translate(', 'matrix(1, 0, 0, 1,');\n matrix = transformMatrix.toString().split(',');\n }\n if (axis === 'x') {\n // Latest Chrome and webkits Fix\n if (window.WebKitCSSMatrix) curTransform = transformMatrix.m41;\n // Crazy IE10 Matrix\n else if (matrix.length === 16) curTransform = parseFloat(matrix[12]);\n // Normal Browsers\n else curTransform = parseFloat(matrix[4]);\n }\n if (axis === 'y') {\n // Latest Chrome and webkits Fix\n if (window.WebKitCSSMatrix) curTransform = transformMatrix.m42;\n // Crazy IE10 Matrix\n else if (matrix.length === 16) curTransform = parseFloat(matrix[13]);\n // Normal Browsers\n else curTransform = parseFloat(matrix[5]);\n }\n return curTransform || 0;\n}\nfunction isObject(o) {\n return typeof o === 'object' && o !== null && o.constructor && Object.prototype.toString.call(o).slice(8, -1) === 'Object';\n}\nfunction isNode(node) {\n // eslint-disable-next-line\n if (typeof window !== 'undefined' && typeof window.HTMLElement !== 'undefined') {\n return node instanceof HTMLElement;\n }\n return node && (node.nodeType === 1 || node.nodeType === 11);\n}\nfunction extend(...args) {\n const to = Object(args[0]);\n const noExtend = ['__proto__', 'constructor', 'prototype'];\n for (let i = 1; i < args.length; i += 1) {\n const nextSource = args[i];\n if (nextSource !== undefined && nextSource !== null && !isNode(nextSource)) {\n const keysArray = Object.keys(Object(nextSource)).filter(key => noExtend.indexOf(key) < 0);\n for (let nextIndex = 0, len = keysArray.length; nextIndex < len; nextIndex += 1) {\n const nextKey = keysArray[nextIndex];\n const desc = Object.getOwnPropertyDescriptor(nextSource, nextKey);\n if (desc !== undefined && desc.enumerable) {\n if (isObject(to[nextKey]) && isObject(nextSource[nextKey])) {\n if (nextSource[nextKey].__swiper__) {\n to[nextKey] = nextSource[nextKey];\n } else {\n extend(to[nextKey], nextSource[nextKey]);\n }\n } else if (!isObject(to[nextKey]) && isObject(nextSource[nextKey])) {\n to[nextKey] = {};\n if (nextSource[nextKey].__swiper__) {\n to[nextKey] = nextSource[nextKey];\n } else {\n extend(to[nextKey], nextSource[nextKey]);\n }\n } else {\n to[nextKey] = nextSource[nextKey];\n }\n }\n }\n }\n }\n return to;\n}\nfunction setCSSProperty(el, varName, varValue) {\n el.style.setProperty(varName, varValue);\n}\nfunction animateCSSModeScroll({\n swiper,\n targetPosition,\n side\n}) {\n const window = getWindow();\n const startPosition = -swiper.translate;\n let startTime = null;\n let time;\n const duration = swiper.params.speed;\n swiper.wrapperEl.style.scrollSnapType = 'none';\n window.cancelAnimationFrame(swiper.cssModeFrameID);\n const dir = targetPosition > startPosition ? 'next' : 'prev';\n const isOutOfBound = (current, target) => {\n return dir === 'next' && current >= target || dir === 'prev' && current <= target;\n };\n const animate = () => {\n time = new Date().getTime();\n if (startTime === null) {\n startTime = time;\n }\n const progress = Math.max(Math.min((time - startTime) / duration, 1), 0);\n const easeProgress = 0.5 - Math.cos(progress * Math.PI) / 2;\n let currentPosition = startPosition + easeProgress * (targetPosition - startPosition);\n if (isOutOfBound(currentPosition, targetPosition)) {\n currentPosition = targetPosition;\n }\n swiper.wrapperEl.scrollTo({\n [side]: currentPosition\n });\n if (isOutOfBound(currentPosition, targetPosition)) {\n swiper.wrapperEl.style.overflow = 'hidden';\n swiper.wrapperEl.style.scrollSnapType = '';\n setTimeout(() => {\n swiper.wrapperEl.style.overflow = '';\n swiper.wrapperEl.scrollTo({\n [side]: currentPosition\n });\n });\n window.cancelAnimationFrame(swiper.cssModeFrameID);\n return;\n }\n swiper.cssModeFrameID = window.requestAnimationFrame(animate);\n };\n animate();\n}\nfunction getSlideTransformEl(slideEl) {\n return slideEl.querySelector('.swiper-slide-transform') || slideEl.shadowRoot && slideEl.shadowRoot.querySelector('.swiper-slide-transform') || slideEl;\n}\nfunction elementChildren(element, selector = '') {\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 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 (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 { getRotateFix as a, setCSSProperty as b, createElement as c, elementParents as d, elementChildren as e, elementOffset as f, getSlideTransformEl as g, now as h, elementOuterSize as i, elementIndex as j, classesToTokens as k, getTranslate as l, makeElementsArray as m, nextTick as n, elementTransitionEnd as o, isObject 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","/**\n * Swiper React 12.0.3\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: October 21, 2025\n */\n\nimport React, { useEffect, useLayoutEffect, useContext, createContext, forwardRef, useState, useRef } from 'react';\nimport { S as Swiper$1 } from './shared/swiper-core.mjs';\nimport { g as getParams, m as mountSwiper, a as getChangedParams, u as updateOnVirtualData } from './shared/update-on-virtual-data.mjs';\nimport { d as uniqueClasses, w as wrapperClass, n as needsNavigation, b as needsScrollbar, a as needsPagination, e as extend, u as updateSwiper } from './shared/update-swiper.mjs';\n\nfunction _extends() {\n _extends = Object.assign ? Object.assign.bind() : function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n return target;\n };\n return _extends.apply(this, arguments);\n}\n\nfunction isChildSwiperSlide(child) {\n return child.type && child.type.displayName && child.type.displayName.includes('SwiperSlide');\n}\nfunction processChildren(c) {\n const slides = [];\n React.Children.toArray(c).forEach(child => {\n if (isChildSwiperSlide(child)) {\n slides.push(child);\n } else if (child.props && child.props.children) {\n processChildren(child.props.children).forEach(slide => slides.push(slide));\n }\n });\n return slides;\n}\nfunction getChildren(c) {\n const slides = [];\n const slots = {\n 'container-start': [],\n 'container-end': [],\n 'wrapper-start': [],\n 'wrapper-end': []\n };\n React.Children.toArray(c).forEach(child => {\n if (isChildSwiperSlide(child)) {\n slides.push(child);\n } else if (child.props && child.props.slot && slots[child.props.slot]) {\n slots[child.props.slot].push(child);\n } else if (child.props && child.props.children) {\n const foundSlides = processChildren(child.props.children);\n if (foundSlides.length > 0) {\n foundSlides.forEach(slide => slides.push(slide));\n } else {\n slots['container-end'].push(child);\n }\n } else {\n slots['container-end'].push(child);\n }\n });\n return {\n slides,\n slots\n };\n}\n\nfunction renderVirtual(swiper, slides, virtualData) {\n if (!virtualData) return null;\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 const style = swiper.isHorizontal() ? {\n [swiper.rtlTranslate ? 'right' : 'left']: `${virtualData.offset}px`\n } : {\n top: `${virtualData.offset}px`\n };\n const {\n from,\n to\n } = virtualData;\n const loopFrom = swiper.params.loop ? -slides.length : 0;\n const loopTo = swiper.params.loop ? slides.length * 2 : slides.length;\n const slidesToRender = [];\n for (let i = loopFrom; i < loopTo; i += 1) {\n if (i >= from && i <= to) {\n slidesToRender.push(slides[getSlideIndex(i)]);\n }\n }\n return slidesToRender.map((child, index) => {\n return /*#__PURE__*/React.cloneElement(child, {\n swiper,\n style,\n key: child.props.virtualIndex || child.key || `slide-${index}`\n });\n });\n}\n\nfunction useIsomorphicLayoutEffect(callback, deps) {\n // eslint-disable-next-line\n if (typeof window === 'undefined') return useEffect(callback, deps);\n return useLayoutEffect(callback, deps);\n}\n\nconst SwiperSlideContext = /*#__PURE__*/createContext(null);\nconst useSwiperSlide = () => {\n return useContext(SwiperSlideContext);\n};\nconst SwiperContext = /*#__PURE__*/createContext(null);\nconst useSwiper = () => {\n return useContext(SwiperContext);\n};\n\nconst Swiper = /*#__PURE__*/forwardRef(({\n className,\n tag: Tag = 'div',\n wrapperTag: WrapperTag = 'div',\n children,\n onSwiper,\n ...rest\n} = {}, externalElRef) => {\n let eventsAssigned = false;\n const [containerClasses, setContainerClasses] = useState('swiper');\n const [virtualData, setVirtualData] = useState(null);\n const [breakpointChanged, setBreakpointChanged] = useState(false);\n const initializedRef = useRef(false);\n const swiperElRef = useRef(null);\n const swiperRef = useRef(null);\n const oldPassedParamsRef = useRef(null);\n const oldSlides = useRef(null);\n const nextElRef = useRef(null);\n const prevElRef = useRef(null);\n const paginationElRef = useRef(null);\n const scrollbarElRef = useRef(null);\n const {\n params: swiperParams,\n passedParams,\n rest: restProps,\n events\n } = getParams(rest);\n const {\n slides,\n slots\n } = getChildren(children);\n const onBeforeBreakpoint = () => {\n setBreakpointChanged(!breakpointChanged);\n };\n Object.assign(swiperParams.on, {\n _containerClasses(swiper, classes) {\n setContainerClasses(classes);\n }\n });\n const initSwiper = () => {\n // init swiper\n Object.assign(swiperParams.on, events);\n eventsAssigned = true;\n const passParams = {\n ...swiperParams\n };\n delete passParams.wrapperClass;\n swiperRef.current = new Swiper$1(passParams);\n if (swiperRef.current.virtual && swiperRef.current.params.virtual.enabled) {\n swiperRef.current.virtual.slides = slides;\n const extendWith = {\n cache: false,\n slides,\n renderExternal: setVirtualData,\n renderExternalUpdate: false\n };\n extend(swiperRef.current.params.virtual, extendWith);\n extend(swiperRef.current.originalParams.virtual, extendWith);\n }\n };\n if (!swiperElRef.current) {\n initSwiper();\n }\n\n // Listen for breakpoints change\n if (swiperRef.current) {\n swiperRef.current.on('_beforeBreakpoint', onBeforeBreakpoint);\n }\n const attachEvents = () => {\n if (eventsAssigned || !events || !swiperRef.current) return;\n Object.keys(events).forEach(eventName => {\n swiperRef.current.on(eventName, events[eventName]);\n });\n };\n const detachEvents = () => {\n if (!events || !swiperRef.current) return;\n Object.keys(events).forEach(eventName => {\n swiperRef.current.off(eventName, events[eventName]);\n });\n };\n useEffect(() => {\n return () => {\n if (swiperRef.current) swiperRef.current.off('_beforeBreakpoint', onBeforeBreakpoint);\n };\n });\n\n // set initialized flag\n useEffect(() => {\n if (!initializedRef.current && swiperRef.current) {\n swiperRef.current.emitSlidesClasses();\n initializedRef.current = true;\n }\n });\n\n // mount swiper\n useIsomorphicLayoutEffect(() => {\n if (externalElRef) {\n externalElRef.current = swiperElRef.current;\n }\n if (!swiperElRef.current) return;\n if (swiperRef.current.destroyed) {\n initSwiper();\n }\n mountSwiper({\n el: swiperElRef.current,\n nextEl: nextElRef.current,\n prevEl: prevElRef.current,\n paginationEl: paginationElRef.current,\n scrollbarEl: scrollbarElRef.current,\n swiper: swiperRef.current\n }, swiperParams);\n if (onSwiper && !swiperRef.current.destroyed) onSwiper(swiperRef.current);\n // eslint-disable-next-line\n return () => {\n if (swiperRef.current && !swiperRef.current.destroyed) {\n swiperRef.current.destroy(true, false);\n }\n };\n }, []);\n\n // watch for params change\n useIsomorphicLayoutEffect(() => {\n attachEvents();\n const changedParams = getChangedParams(passedParams, oldPassedParamsRef.current, slides, oldSlides.current, c => c.key);\n oldPassedParamsRef.current = passedParams;\n oldSlides.current = slides;\n if (changedParams.length && swiperRef.current && !swiperRef.current.destroyed) {\n updateSwiper({\n swiper: swiperRef.current,\n slides,\n passedParams,\n changedParams,\n nextEl: nextElRef.current,\n prevEl: prevElRef.current,\n scrollbarEl: scrollbarElRef.current,\n paginationEl: paginationElRef.current\n });\n }\n return () => {\n detachEvents();\n };\n });\n\n // update on virtual update\n useIsomorphicLayoutEffect(() => {\n updateOnVirtualData(swiperRef.current);\n }, [virtualData]);\n\n // bypass swiper instance to slides\n function renderSlides() {\n if (swiperParams.virtual) {\n return renderVirtual(swiperRef.current, slides, virtualData);\n }\n return slides.map((child, index) => {\n return /*#__PURE__*/React.cloneElement(child, {\n swiper: swiperRef.current,\n swiperSlideIndex: index\n });\n });\n }\n return /*#__PURE__*/React.createElement(Tag, _extends({\n ref: swiperElRef,\n className: uniqueClasses(`${containerClasses}${className ? ` ${className}` : ''}`)\n }, restProps), /*#__PURE__*/React.createElement(SwiperContext.Provider, {\n value: swiperRef.current\n }, slots['container-start'], /*#__PURE__*/React.createElement(WrapperTag, {\n className: wrapperClass(swiperParams.wrapperClass)\n }, slots['wrapper-start'], renderSlides(), slots['wrapper-end']), needsNavigation(swiperParams) && /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(\"div\", {\n ref: prevElRef,\n className: \"swiper-button-prev\"\n }), /*#__PURE__*/React.createElement(\"div\", {\n ref: nextElRef,\n className: \"swiper-button-next\"\n })), needsScrollbar(swiperParams) && /*#__PURE__*/React.createElement(\"div\", {\n ref: scrollbarElRef,\n className: \"swiper-scrollbar\"\n }), needsPagination(swiperParams) && /*#__PURE__*/React.createElement(\"div\", {\n ref: paginationElRef,\n className: \"swiper-pagination\"\n }), slots['container-end']));\n});\nSwiper.displayName = 'Swiper';\n\nconst SwiperSlide = /*#__PURE__*/forwardRef(({\n tag: Tag = 'div',\n children,\n className = '',\n swiper,\n zoom,\n lazy,\n virtualIndex,\n swiperSlideIndex,\n ...rest\n} = {}, externalRef) => {\n const slideElRef = useRef(null);\n const [slideClasses, setSlideClasses] = useState('swiper-slide');\n const [lazyLoaded, setLazyLoaded] = useState(false);\n function updateClasses(_s, el, classNames) {\n if (el === slideElRef.current) {\n setSlideClasses(classNames);\n }\n }\n useIsomorphicLayoutEffect(() => {\n if (typeof swiperSlideIndex !== 'undefined') {\n slideElRef.current.swiperSlideIndex = swiperSlideIndex;\n }\n if (externalRef) {\n externalRef.current = slideElRef.current;\n }\n if (!slideElRef.current || !swiper) {\n return;\n }\n if (swiper.destroyed) {\n if (slideClasses !== 'swiper-slide') {\n setSlideClasses('swiper-slide');\n }\n return;\n }\n swiper.on('_slideClass', updateClasses);\n // eslint-disable-next-line\n return () => {\n if (!swiper) return;\n swiper.off('_slideClass', updateClasses);\n };\n });\n useIsomorphicLayoutEffect(() => {\n if (swiper && slideElRef.current && !swiper.destroyed) {\n setSlideClasses(swiper.getSlideClasses(slideElRef.current));\n }\n }, [swiper]);\n const slideData = {\n isActive: slideClasses.indexOf('swiper-slide-active') >= 0,\n isVisible: slideClasses.indexOf('swiper-slide-visible') >= 0,\n isPrev: slideClasses.indexOf('swiper-slide-prev') >= 0,\n isNext: slideClasses.indexOf('swiper-slide-next') >= 0\n };\n const renderChildren = () => {\n return typeof children === 'function' ? children(slideData) : children;\n };\n const onLoad = () => {\n setLazyLoaded(true);\n };\n return /*#__PURE__*/React.createElement(Tag, _extends({\n ref: slideElRef,\n className: uniqueClasses(`${slideClasses}${className ? ` ${className}` : ''}`),\n \"data-swiper-slide-index\": virtualIndex,\n onLoad: onLoad\n }, rest), zoom && /*#__PURE__*/React.createElement(SwiperSlideContext.Provider, {\n value: slideData\n }, /*#__PURE__*/React.createElement(\"div\", {\n className: \"swiper-zoom-container\",\n \"data-swiper-zoom\": typeof zoom === 'number' ? zoom : undefined\n }, renderChildren(), lazy && !lazyLoaded && /*#__PURE__*/React.createElement(\"div\", {\n className: \"swiper-lazy-preloader\"\n }))), !zoom && /*#__PURE__*/React.createElement(SwiperSlideContext.Provider, {\n value: slideData\n }, renderChildren(), lazy && !lazyLoaded && /*#__PURE__*/React.createElement(\"div\", {\n className: \"swiper-lazy-preloader\"\n })));\n});\nSwiperSlide.displayName = 'SwiperSlide';\n\nexport { Swiper, SwiperSlide, useSwiper, useSwiperSlide };\n","// getDefaultExport function for compatibility with non-ESM modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};\n","__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n Object.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n }\n }\n};","// This function allow to reference chunks\n__webpack_require__.miniCssF = (chunkId) => {\n // return url for filenames not based on template\n \n // return url for filenames based on template\n return \"static/css/\" + chunkId + \".css\"\n}","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","var currentModuleData = {};\nvar installedModules = __webpack_require__.c;\n\n// module and require creation\nvar currentChildModule;\nvar currentParents = [];\n\n// status\nvar registeredStatusHandlers = [];\nvar currentStatus = \"idle\";\n\n// while downloading\nvar blockingPromises = 0;\nvar blockingPromisesWaiting = [];\n\n// The update info\nvar currentUpdateApplyHandlers;\nvar queuedInvalidatedModules;\n\n__webpack_require__.hmrD = currentModuleData;\n__webpack_require__.i.push(function (options) {\n\tvar module = options.module;\n\tvar require = createRequire(options.require, options.id);\n\tmodule.hot = createModuleHotObject(options.id, module);\n\tmodule.parents = currentParents;\n\tmodule.children = [];\n\tcurrentParents = [];\n\toptions.require = require;\n});\n\n__webpack_require__.hmrC = {};\n__webpack_require__.hmrI = {};\n\nfunction createRequire(require, moduleId) {\n\tvar me = installedModules[moduleId];\n\tif (!me) return require;\n\tvar fn = function (request) {\n\t\tif (me.hot.active) {\n\t\t\tif (installedModules[request]) {\n\t\t\t\tvar parents = installedModules[request].parents;\n\t\t\t\tif (parents.indexOf(moduleId) === -1) {\n\t\t\t\t\tparents.push(moduleId);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tcurrentParents = [moduleId];\n\t\t\t\tcurrentChildModule = request;\n\t\t\t}\n\t\t\tif (me.children.indexOf(request) === -1) {\n\t\t\t\tme.children.push(request);\n\t\t\t}\n\t\t} else {\n\t\t\tconsole.warn(\n\t\t\t\t\"[HMR] unexpected require(\" +\n\t\t\t\trequest +\n\t\t\t\t\") from disposed module \" +\n\t\t\t\tmoduleId\n\t\t\t);\n\t\t\tcurrentParents = [];\n\t\t}\n\t\treturn require(request);\n\t};\n\tvar createPropertyDescriptor = function (name) {\n\t\treturn {\n\t\t\tconfigurable: true,\n\t\t\tenumerable: true,\n\t\t\tget: function () {\n\t\t\t\treturn require[name];\n\t\t\t},\n\t\t\tset: function (value) {\n\t\t\t\trequire[name] = value;\n\t\t\t}\n\t\t};\n\t};\n\tfor (var name in require) {\n\t\tif (Object.prototype.hasOwnProperty.call(require, name) && name !== \"e\") {\n\t\t\tObject.defineProperty(fn, name, createPropertyDescriptor(name));\n\t\t}\n\t}\n\n\tfn.e = function (chunkId, fetchPriority) {\n\t\treturn trackBlockingPromise(require.e(chunkId, fetchPriority));\n\t};\n\n\treturn fn;\n}\n\nfunction createModuleHotObject(moduleId, me) {\n\tvar _main = currentChildModule !== moduleId;\n\tvar hot = {\n\t\t_acceptedDependencies: {},\n\t\t_acceptedErrorHandlers: {},\n\t\t_declinedDependencies: {},\n\t\t_selfAccepted: false,\n\t\t_selfDeclined: false,\n\t\t_selfInvalidated: false,\n\t\t_disposeHandlers: [],\n\t\t_main: _main,\n\t\t_requireSelf: function () {\n\t\t\tcurrentParents = me.parents.slice();\n\t\t\tcurrentChildModule = _main ? undefined : moduleId;\n\t\t\t__webpack_require__(moduleId);\n\t\t},\n\t\tactive: true,\n\t\taccept: function (dep, callback, errorHandler) {\n\t\t\tif (dep === undefined) hot._selfAccepted = true;\n\t\t\telse if (typeof dep === \"function\") hot._selfAccepted = dep;\n\t\t\telse if (typeof dep === \"object\" && dep !== null) {\n\t\t\t\tfor (var i = 0; i < dep.length; i++) {\n\t\t\t\t\thot._acceptedDependencies[dep[i]] = callback || function () { };\n\t\t\t\t\thot._acceptedErrorHandlers[dep[i]] = errorHandler;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\thot._acceptedDependencies[dep] = callback || function () { };\n\t\t\t\thot._acceptedErrorHandlers[dep] = errorHandler;\n\t\t\t}\n\t\t},\n\t\tdecline: function (dep) {\n\t\t\tif (dep === undefined) hot._selfDeclined = true;\n\t\t\telse if (typeof dep === \"object\" && dep !== null)\n\t\t\t\tfor (var i = 0; i < dep.length; i++)\n\t\t\t\t\thot._declinedDependencies[dep[i]] = true;\n\t\t\telse hot._declinedDependencies[dep] = true;\n\t\t},\n\t\tdispose: function (callback) {\n\t\t\thot._disposeHandlers.push(callback);\n\t\t},\n\t\taddDisposeHandler: function (callback) {\n\t\t\thot._disposeHandlers.push(callback);\n\t\t},\n\t\tremoveDisposeHandler: function (callback) {\n\t\t\tvar idx = hot._disposeHandlers.indexOf(callback);\n\t\t\tif (idx >= 0) hot._disposeHandlers.splice(idx, 1);\n\t\t},\n\t\tinvalidate: function () {\n\t\t\tthis._selfInvalidated = true;\n\t\t\tswitch (currentStatus) {\n\t\t\t\tcase \"idle\":\n\t\t\t\t\tcurrentUpdateApplyHandlers = [];\n\t\t\t\t\tObject.keys(__webpack_require__.hmrI).forEach(function (key) {\n\t\t\t\t\t\t__webpack_require__.hmrI[key](moduleId, currentUpdateApplyHandlers);\n\t\t\t\t\t});\n\t\t\t\t\tsetStatus(\"ready\");\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"ready\":\n\t\t\t\t\tObject.keys(__webpack_require__.hmrI).forEach(function (key) {\n\t\t\t\t\t\t__webpack_require__.hmrI[key](moduleId, currentUpdateApplyHandlers);\n\t\t\t\t\t});\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"prepare\":\n\t\t\t\tcase \"check\":\n\t\t\t\tcase \"dispose\":\n\t\t\t\tcase \"apply\":\n\t\t\t\t\t(queuedInvalidatedModules = queuedInvalidatedModules || []).push(\n\t\t\t\t\t\tmoduleId\n\t\t\t\t\t);\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t},\n\t\tcheck: hotCheck,\n\t\tapply: hotApply,\n\t\tstatus: function (l) {\n\t\t\tif (!l) return currentStatus;\n\t\t\tregisteredStatusHandlers.push(l);\n\t\t},\n\t\taddStatusHandler: function (l) {\n\t\t\tregisteredStatusHandlers.push(l);\n\t\t},\n\t\tremoveStatusHandler: function (l) {\n\t\t\tvar idx = registeredStatusHandlers.indexOf(l);\n\t\t\tif (idx >= 0) registeredStatusHandlers.splice(idx, 1);\n\t\t},\n\t\tdata: currentModuleData[moduleId]\n\t};\n\tcurrentChildModule = undefined;\n\treturn hot;\n}\n\nfunction setStatus(newStatus) {\n\tcurrentStatus = newStatus; \n\tvar results = [];\n\tfor (var i = 0; i < registeredStatusHandlers.length; i++)\n\t\tresults[i] = registeredStatusHandlers[i].call(null, newStatus);\n\n\treturn Promise.all(results).then(function () { });\n}\n\nfunction unblock() {\n\tif (--blockingPromises === 0) {\n\t\tsetStatus(\"ready\").then(function () {\n\t\t\tif (blockingPromises === 0) {\n\t\t\t\tvar list = blockingPromisesWaiting;\n\t\t\t\tblockingPromisesWaiting = [];\n\t\t\t\tfor (var i = 0; i < list.length; i++) {\n\t\t\t\t\tlist[i]();\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n}\n\nfunction trackBlockingPromise(promise) {\n\tswitch (currentStatus) {\n\t\tcase \"ready\":\n\t\t\tsetStatus(\"prepare\");\n\t\tcase \"prepare\":\n\t\t\tblockingPromises++;\n\t\t\tpromise.then(unblock, unblock);\n\t\t\treturn promise;\n\t\tdefault:\n\t\t\treturn promise;\n\t}\n}\n\nfunction waitForBlockingPromises(fn) {\n\tif (blockingPromises === 0) return fn();\n\treturn new Promise(function (resolve) {\n\t\tblockingPromisesWaiting.push(function () {\n\t\t\tresolve(fn());\n\t\t});\n\t});\n}\n\nfunction hotCheck(applyOnUpdate) {\n\tif (currentStatus !== \"idle\") {\n\t\tthrow new Error(\"check() is only allowed in idle status\");\n\t} \n\treturn setStatus(\"check\")\n\t\t.then(__webpack_require__.hmrM)\n\t\t.then(function (update) {\n\t\t\tif (!update) {\n\t\t\t\treturn setStatus(applyInvalidatedModules() ? \"ready\" : \"idle\").then(\n\t\t\t\t\tfunction () {\n\t\t\t\t\t\treturn null;\n\t\t\t\t\t}\n\t\t\t\t);\n\t\t\t}\n\n\t\t\treturn setStatus(\"prepare\").then(function () {\n\t\t\t\tvar updatedModules = [];\n\t\t\t\tcurrentUpdateApplyHandlers = [];\n\n\t\t\t\treturn Promise.all(\n\t\t\t\t\tObject.keys(__webpack_require__.hmrC).reduce(function (\n\t\t\t\t\t\tpromises,\n\t\t\t\t\t\tkey\n\t\t\t\t\t) {\n\t\t\t\t\t\t__webpack_require__.hmrC[key](\n\t\t\t\t\t\t\tupdate.c,\n\t\t\t\t\t\t\tupdate.r,\n\t\t\t\t\t\t\tupdate.m,\n\t\t\t\t\t\t\tpromises,\n\t\t\t\t\t\t\tcurrentUpdateApplyHandlers,\n\t\t\t\t\t\t\tupdatedModules\n\t\t\t\t\t\t);\n\t\t\t\t\t\treturn promises;\n\t\t\t\t\t},\n\t\t\t\t\t\t[])\n\t\t\t\t).then(function () {\n\t\t\t\t\treturn waitForBlockingPromises(function () {\n\t\t\t\t\t\tif (applyOnUpdate) {\n\t\t\t\t\t\t\treturn internalApply(applyOnUpdate);\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn setStatus(\"ready\").then(function () {\n\t\t\t\t\t\t\treturn updatedModules;\n\t\t\t\t\t\t});\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t});\n\t\t});\n}\n\nfunction hotApply(options) {\n\tif (currentStatus !== \"ready\") {\n\t\treturn Promise.resolve().then(function () {\n\t\t\tthrow new Error(\n\t\t\t\t\"apply() is only allowed in ready status (state: \" + currentStatus + \")\"\n\t\t\t);\n\t\t});\n\t}\n\treturn internalApply(options);\n}\n\nfunction internalApply(options) {\n\toptions = options || {};\n\tapplyInvalidatedModules();\n\tvar results = currentUpdateApplyHandlers.map(function (handler) {\n\t\treturn handler(options);\n\t});\n\tcurrentUpdateApplyHandlers = undefined;\n\tvar errors = results\n\t\t.map(function (r) {\n\t\t\treturn r.error;\n\t\t})\n\t\t.filter(Boolean);\n\n\tif (errors.length > 0) {\n\t\treturn setStatus(\"abort\").then(function () {\n\t\t\tthrow errors[0];\n\t\t});\n\t}\n\n\tvar disposePromise = setStatus(\"dispose\");\n\n\tresults.forEach(function (result) {\n\t\tif (result.dispose) result.dispose();\n\t});\n\n\tvar applyPromise = setStatus(\"apply\");\n\n\tvar error;\n\tvar reportError = function (err) {\n\t\tif (!error) error = err;\n\t};\n\n\tvar outdatedModules = [];\n\tresults.forEach(function (result) {\n\t\tif (result.apply) {\n\t\t\tvar modules = result.apply(reportError);\n\t\t\tif (modules) {\n\t\t\t\tfor (var i = 0; i < modules.length; i++) {\n\t\t\t\t\toutdatedModules.push(modules[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t});\n\n\treturn Promise.all([disposePromise, applyPromise]).then(function () {\n\t\tif (error) {\n\t\t\treturn setStatus(\"fail\").then(function () {\n\t\t\t\tthrow error;\n\t\t\t});\n\t\t}\n\n\t\tif (queuedInvalidatedModules) {\n\t\t\treturn internalApply(options).then(function (list) {\n\t\t\t\toutdatedModules.forEach(function (moduleId) {\n\t\t\t\t\tif (list.indexOf(moduleId) < 0) list.push(moduleId);\n\t\t\t\t});\n\t\t\t\treturn list;\n\t\t\t});\n\t\t}\n\n\t\treturn setStatus(\"idle\").then(function () {\n\t\t\treturn outdatedModules;\n\t\t});\n\t});\n}\n\nfunction applyInvalidatedModules() {\n\tif (queuedInvalidatedModules) {\n\t\tif (!currentUpdateApplyHandlers) currentUpdateApplyHandlers = [];\n\t\tObject.keys(__webpack_require__.hmrI).forEach(function (key) {\n\t\t\tqueuedInvalidatedModules.forEach(function (moduleId) {\n\t\t\t\t__webpack_require__.hmrI[key](moduleId, currentUpdateApplyHandlers);\n\t\t\t});\n\t\t});\n\t\tqueuedInvalidatedModules = undefined;\n\t\treturn true;\n\t}\n}\n","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","__webpack_require__.p = \"/\";","if (typeof document === \"undefined\") return;\nvar createStylesheet = function (\n\tchunkId, fullhref, oldTag, resolve, reject\n) {\n\tvar linkTag = document.createElement(\"link\");\n\t\n\tlinkTag.rel = \"stylesheet\";\n\tlinkTag.type=\"text/css\";\n\tif (__webpack_require__.nc) {\n\t\tlinkTag.nonce = __webpack_require__.nc;\n\t}\n\tvar onLinkComplete = function (event) {\n\t\t// avoid mem leaks.\n\t\tlinkTag.onerror = linkTag.onload = null;\n\t\tif (event.type === 'load') {\n\t\t\tresolve();\n\t\t} else {\n\t\t\tvar errorType = event && (event.type === 'load' ? 'missing' : event.type);\n\t\t\tvar realHref = event && event.target && event.target.href || fullhref;\n\t\t\tvar err = new Error(\"Loading CSS chunk \" + chunkId + \" failed.\\\\n(\" + realHref + \")\");\n\t\t\terr.code = \"CSS_CHUNK_LOAD_FAILED\";\n\t\t\terr.type = errorType;\n\t\t\terr.request = realHref;\n\t\t\tif (linkTag.parentNode) linkTag.parentNode.removeChild(linkTag)\n\t\t\treject(err);\n\t\t}\n\t}\n\n\tlinkTag.onerror = linkTag.onload = onLinkComplete;\n\tlinkTag.href = fullhref;\n\t\n\tif (oldTag) {\n oldTag.parentNode.insertBefore(linkTag, oldTag.nextSibling);\n} else {\n document.head.appendChild(linkTag);\n}\n\treturn linkTag;\n}\nvar findStylesheet = function (href, fullhref) {\n\tvar existingLinkTags = document.getElementsByTagName(\"link\");\n\tfor (var i = 0; i < existingLinkTags.length; i++) {\n\t\tvar tag = existingLinkTags[i];\n\t\tvar dataHref = tag.getAttribute(\"data-href\") || tag.getAttribute(\"href\");\n\t\tif (dataHref) {\n\t\t\tdataHref = dataHref.split('?')[0]\n\t\t}\n\t\tif (tag.rel === \"stylesheet\" && (dataHref === href || dataHref === fullhref)) return tag;\n\t}\n\n\tvar existingStyleTags = document.getElementsByTagName(\"style\");\n\tfor (var i = 0; i < existingStyleTags.length; i++) {\n\t\tvar tag = existingStyleTags[i];\n\t\tvar dataHref = tag.getAttribute(\"data-href\");\n\t\tif (dataHref === href || dataHref === fullhref) return tag;\n\t}\n}\n\nvar loadStylesheet = function (chunkId) {\n\treturn new Promise(function (resolve, reject) {\n\t\tvar href = __webpack_require__.miniCssF(chunkId);\n\t\tvar fullhref = __webpack_require__.p + href;\n\t\tif (findStylesheet(href, fullhref)) return resolve();\n\t\tcreateStylesheet(chunkId, fullhref, null, resolve, reject);\n\t})\n}\n\n// no chunk loading\nvar oldTags = [];\nvar newTags = [];\nvar applyHandler = function (options) {\n\treturn {\n\t\tdispose: function () {\n\t\t\tfor (var i = 0; i < oldTags.length; i++) {\n\t\t\t\tvar oldTag = oldTags[i];\n\t\t\t\tif (oldTag.parentNode) oldTag.parentNode.removeChild(oldTag);\n\t\t\t}\n\t\t\toldTags.length = 0;\n\t\t},\n\t\tapply: function () {\n\t\t\tfor (var i = 0; i < newTags.length; i++) newTags[i].rel = \"stylesheet\";\n\t\t\tnewTags.length = 0;\n\t\t}\n\t}\n}\n__webpack_require__.hmrC.miniCss = function (chunkIds, removedChunks, removedModules, promises, applyHandlers, updatedModulesList) {\n\tapplyHandlers.push(applyHandler);\n\tchunkIds.forEach(function (chunkId) {\n\t\tvar href = __webpack_require__.miniCssF(chunkId);\n\t\tvar fullhref = __webpack_require__.p + href;\n\t\tvar oldTag = findStylesheet(href, fullhref);\n\t\tif (!oldTag) return;\n\t\tpromises.push(new Promise(function (resolve, reject) {\n\t\t\tvar tag = createStylesheet(\n\t\t\t\tchunkId,\n\n\t\t\t\t/**\n\t\t\t\t\tIf dynamically add link tag through dom API and there is already a loaded style link, browsers sometimes treats the new link tag as the same link, and won't fetch the new style.\n\t\t\t\t\tUse query to avoid browser cache the link tag, force to re-fetch new style, this is the same strategy as updateCss API, this can happen during lazy compilation\n\t\t\t\t */\n\t\t\t\t`${fullhref}?${Date.now()}`,\n\t\t\t\toldTag,\n\t\t\t\tfunction () {\n\t\t\t\t\ttag.as = \"style\";\n\t\t\t\t\ttag.rel = \"preload\";\n\t\t\t\t\tresolve();\n\t\t\t\t},\n\t\t\t\treject\n\t\t\t);\n\t\t\toldTags.push(oldTag);\n\t\t\tnewTags.push(tag);\n\t\t}))\n\t});\n}\n\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;AC3HA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;ACvBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;ACvBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;ACvBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;ACvBA;;;;ACAA;;;;ACAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;ACjVA;AACA;AACA;AAGA;AACA;;;;;ACNA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;ACjVA;AACA;AACA;AAGA;AACA;;;;;;;;;;;;ACJA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;AAKA;AA3CA;;;;;;;;;;;;;;;;;;ACAA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;;;;;;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;;;;;;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;;;;;;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;;;;;;;;;;;;;;;;AAGA;AATA;;;;;;;;;;;;;;;;;;ACFA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;;;;;;;;;;AAEA;AAJA;;;;;;;;;;;;;;;;;;;ACAA;AAGA;AACA;AAAA;;;;;;AACA;AAFA;;;;;;;;;;;;;;;;;;ACHA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;;;;;;;;;;AAGA;AAdA;;;;;;;;;;;;;;;;;;ACAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;;;;;;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;;;;;;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;;;;;;;;;;;AAEA;AANA;;;;;;;;;;;;;;;;;;ACAA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;;;;;;;;;;AAEA;AAJA;;;;;;;;;;;;;;;;;;ACAA;AACA;AAAA;AAAA;AAAA;AAAA;;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;;;;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;;;;;;;;;AAEA;AALA;;;;;;;;;;;;;;;;;;;ACAA;AAGA;AACA;AAAA;;;;;;AACA;AAFA;;;;;;;;;;;;;;;;;;ACHA;AACA;AAAA;AAAA;AAAA;AAAA;;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;;;;;;;;;;;;;;AAGA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;;;;;;;;;;;;;;AAGA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;;;;;;;;;;;;;;AAGA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;;;;;;;;;;;;;;AAGA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;;;;;;;;;;;;;;AAGA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;;;;;;;;;;;;;;;;;;;AAIA;AAjCA;;;;;;;;;;;;;;;;;;ACAA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;;;;;;;;;;AAEA;AAJA;;;;;;;;;;;;;;;;;;ACEA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;;;;;;;;;;;AAFA;AAMA;AAEA;;;;;;;;;;;;;;;;;;ACRA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;;;;;;;;;;;AAFA;AAMA;AAEA;;;;;;;;;;;;;;;;;;ACRA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;;;;;;;;;;;AAFA;AAMA;AAEA;;;;;;;;;;;;;;;;;;ACRA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;;;;;;;;;;;AAFA;AAMA;AAEA;;;;;;;;;;;;;;;;;;ACVA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;;;;;AAEA;AACA;AACA;AACA;AACA;AACA;;;;;;AAEA;AACA;AACA;AACA;AACA;AACA;;;;;;AAEA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;AAIA;AA1CA;;;;;;;;;;;;;;;;;;ACEA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;;;;;;;;;;;AAEA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;;;;;;;;;;;AAEA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;;;;;;;;;;;AAEA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;;;;;;;;;;;AAEA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;;;;;;;;;;;AAEA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;;;;;;;;;;;;;;;;;;;;;;AAnBA;AAyBA;AAEA;;;;;;;;;;;;;;;;;;AC3BA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;;;;;;;;;;;AAEA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;;;;;;;;;;;AAEA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;;;;;;;;;;;AAEA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;;;;;;;;;;;AAEA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;;;;;;;;;;;AAEA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;;;;;;;;;;;;;;;;;;;;;;AAnBA;AAyBA;AAEA;;;;;;;;;;;;;;;;;;AC7BA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;;;;;;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;;;;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;;;;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;;;;;;;;;;;;;;;;;;;AAIA;AAXA;;;;;;;;;;;;;;;;;;;;;;ACCA;AAEA;AAOA;AASA;AAAA;;AAOA;AAEA;AAEA;AACA;AACA;AACA;;AAEA;AAAA;;;;;AACA;;;;;;AAEA;AAAA;;;;;;;;;;;;AAGA;AAtBA;AAAA;AAwBA;AAEA;;;;;;;;;;;;;;;;;;;AC3CA;AAEA;AAAA;AAIA;AACA;AACA;;;;;;AAGA;AATA;AAWA;AAEA;;;;;;;;;;;;;;;;;;;ACfA;AAKA;AAAA;AAIA;AACA;AACA;;;;;;AAGA;AATA;AAWA;AAEA;;;;;;;;;;;;;;;;;;;;;ACjBA;AAOA;AAEA;AAUA;AAAA;AASA;AACA;;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;;;;;;AAGA;AAAA;AACA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AAAA;;;;;;;;;;;;;;;;;;;;;;AAMA;AAzBA;AA2BA;AAEA;;;;;;;;;;;;;;;;ACnDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAtBA;;;;;;;;;;;;;;;;;;;;ACGA;AAEA;AAWA;AAAA;AASA;AACA;AAEA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AAEA;AACA;AACA;AACA;AAAA;AAAA;AACA;AAEA;;;;;;;;;;;AAIA;AA5BA;AA8BA;AAEA;;;;;;;;;;;;;;;;;;;AC9CA;AAkBA;AAAA;AAOA;AAAA;AAAA;AAIA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;;;;;;AAGA;AAzBA;AA2BA;AAEA;;;;;;;;;;;;;;;;;;;;;;;AC/CA;AAEA;AAEA;AACA;AACA;AAYA;AAAA;AAMA;AACA;;;;;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AAEA;AACA;AACA;AAEA;;;;;;AATA;;;;;AAaA;AAEA;AACA;AAGA;AACA;AAEA;AAJA;;;;;AAOA;;;;;;AAGA;AA1CA;AA4CA;AAEA;;;;;;;;;;;;;;;;AChEA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAdA;;;;;;;;;;;;;;;;;;;;ACAA;AAEA;AAOA;AAAA;AAWA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;;;;;;AAGA;AAzBA;AA2BA;AAEA;;;;;;;;;;;;;;;;ACtCA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAPA;;;;;;;;;;;;;;;;;;;;;;;ACAA;AACA;AAEA;AACA;AACA;AAYA;AACA;AAEA;AAEA;AAAA;AAAA;AAAA;AACA;AAEA;AACA;AACA;AADA;;;;;;;;;;AAMA;AAfA;AAiBA;AAEA;;;;;;;;;;;;;;;;;;;ACpCA;AAcA;AAAA;AAWA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;AAIA;AACA;AAEA;AACA;AACA;AACA;;;;;;AAGA;AAEA;AACA;AAnCA;AAqCA;AAEA;;;;;;;;;;;;;;;;;;;;;ACvDA;AAEA;AAmBA;AAAA;AAWA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;AAEA;AAtBA;AAwBA;;;;;;;;;;;;;;;;;;;AC3CA;AAUA;AAAA;AAKA;AAEA;AACA;AACA;;;;;;AAGA;AAZA;AAcA;AAEA;;;;;;;;;;;;;;;;;;;;;;;;AC1BA;AAGA;AACA;AAIA;AACA;AACA;AAcA;AAAA;AAWA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;;;;;;;;;AAGA;AAEA;AACA;;;;;;AAGA;AACA;;;;;;;;;;;AAIA;AAtDA;AAwDA;AAEA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACpFA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAQA;AAEA;AAEA;AACA;AACA;AACA;AACA;AAIA;AAYA;AAAA;AACA;AAAA;AAAA;AAIA;AAAA;AAAA;;;AAGA;AACA;AAEA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AAEA;AAEA;AADA;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AAEA;AADA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AAIA;AACA;AAEA;AACA;AACA;AAAA;AAAA;AACA;AAEA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAIA;AACA;AACA;AAEA;AACA;AAIA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAIA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AAEA;AAGA;AACA;AAGA;AALA;;;;;AAQA;;;;;;AAGA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAGA;AACA;AACA;AACA;AACA;AAEA;AAPA;;;;;AAUA;;;;;;AAGA;AAEA;AAAA;AACA;AACA;AACA;AAGA;AACA;AAEA;AAEA;AAEA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AAMA;AAGA;AACA;AAAA;;AACA;AACA;AACA;;AAOA;;AAEA;AACA;AACA;AAEA;AAAA;;;;;;;;;;;AAEA;AAEA;AACA;AAEA;AAAA;;;;;;;;;;;;;AAMA;AACA;AACA;AACA;AAEA;;;;;;AAGA;;AAEA;AAEA;AACA;AAEA;AAAA;;;;;;;;;;;AAGA;AACA;AACA;AAEA;AAAA;;;;;;;;;;;;;;;;;;;AAMA;AACA;;AACA;AACA;AACA;AADA;;;;;AAIA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAbA;;;;;AAgBA;;;;;;;AAIA;AACA;;;;;;;AAGA;AAEA;AAEA;AACA;AACA;AACA;AACA;;AAEA;AAAA;;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;AAEA;AAAA;;;;;;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;AAEA;AACA;AACA;AACA;;;;;;;;;;;;AAIA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAEA;AAAA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AAAA;AACA;AAEA;AADA;AAGA;AAGA;AACA;AACA;AAEA;AAAA;AACA;;;;;;AANA;;;;;AAUA;;;;;;;;;;;AAKA;AAAA;;AACA;AAAA;;;;;;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AASA;AA3eA;AAAA;AA6eA;;;;;;;;;;;;;;;;ACrhBA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAlMA;;;;;;;;;;;;;;;;;;;;;ACAA;AAUA;AAEA;AAYA;AAAA;AAeA;AAIA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AACA;AACA;AAEA;AACA;AAEA;;;;;;;;;;;;;;;;AAKA;AAAA;;;;;;AACA;AAAA;;;;;;;;;;;;AAGA;AAnDA;AAqDA;AAEA;;;;;;;;;;;;;;;;ACjFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AATA;;;;;;;;;;;;;;;;;;;ACEA;AAaA;AAAA;AAQA;AAEA;AACA;AACA;AACA;AACA;AAEA;;;;;;AAGA;AAnBA;AAqBA;AAEA;;;;;;;;;;;;;;;;;;;;;;ACtCA;AAEA;AAYA;AAMA;AACA;AAAA;AAAA;AAAA;AACA;AAEA;AACA;AACA;AAMA;AACA;AAYA;AAXA;AACA;AACA;AAEA;AACA;AACA;;AACA;AAAA;AAAA;AAAA;;;;;;AAGA;AAAA;AAAA;AACA;;;;;;AAEA;AAAA;AAAA;AAAA;;;;;;;;;;;;;;;;;AAMA;AAEA;AACA;AAzCA;AACA;AAaA;AAAA;AAAA;AAAA;AACA;AAbA;AAAA;AAAA;AAAA;AACA;AAuCA;AAEA;;;;;;;;;;;;;;;;;ACzDA;AAaA;AAAA;AAaA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;;;;;;AAGA;AA5BA;AA8BA;AAEA;;;;;;;;;;;;;;;;;;;AC7CA;AAaA;AAAA;AAQA;AAEA;AACA;AACA;AACA;AACA;AAEA;;;;;;AAGA;AAnBA;AAqBA;AAEA;;;;;;;;;;;;;;;;;;;;ACpCA;AAOA;AAoBA;AAAA;AAYA;AAKA;AAEA;AACA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AAGA;AACA;;;;;;;;;;;AAIA;AAlCA;AAoCA;;;;;;;;;;;;;;;;;;;;AC/DA;AAOA;AAkBA;AAAA;AAUA;AAKA;AAEA;AACA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AAGA;AACA;;;;;;;;;;;AAIA;AA9BA;AAgCA;;;;;;;;;;;;;;;;ACzDA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAzBA;;;;;;;;;;;;;;;;;;;;;ACFA;AAEA;AAaA;AAAA;;AASA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;;;;;;AAGA;AAhCA;AAAA;AAkCA;;;;;;;;;;;;;;;;;;;;;ACjDA;AAEA;AAQA;AAgBA;AAAA;AAQA;AAEA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAEA;AAGA;AACA;AACA;AACA;AACA;;AAEA;AAAA;AAAA;;;;;;AACA;;AARA;;;;;;;;;;AAaA;AAhCA;AAkCA;;;;;;;;;;;;;;;;AC1DA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AATA;;;;;;;;;;;;;;;;;;;ACAA;AAeA;AAAA;AAKA;AAAA;AACA;AAAA;AAAA;AAAA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;;;;;;AAGA;AA1BA;AA4BA;AAEA;;;;;;;;;;;;;;;;;;;AC7CA;AAmBA;AAAA;AAOA;AACA;AACA;AAEA;AACA;AACA;AAGA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;;;;;;AAGA;AA7BA;AA+BA;AAEA;;;;;;;;;;;;;;;;;;;ACpDA;AAiBA;AAAA;AASA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AAGA;AACA;AAEA;AACA;AACA;;;;;;AAGA;AACA;AAVA;;;;;;;;;;AAeA;AAnCA;AAqCA;AAEA;;;;;;;;;;;;;;;;;;;;;;;;;;;ACzDA;AAEA;AAEA;AACA;AACA;AACA;AACA;AAYA;AAAA;;AAOA;AAEA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AAEA;AACA;AACA;AACA;AAAA;AAAA;AACA;AAEA;AACA;;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;;;;;;;;;;AACA;AAAA;AACA;AAAA;AAAA;;;;;;;;;;;;;;;AAEA;AACA;;;;;;;;;;;AAGA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;;;;;;;;;;;;;;;;;;;;;AAKA;AAlDA;AAAA;AAoDA;AAEA;;;;;;;;;;;;;;;;;;;;;;AC3EA;AAEA;AAUA;AAEA;AAkBA;AAAA;AASA;AACA;AAAA;;AAEA;AACA;;;;;AAAA;AAEA;AAEA;AACA;AAAA;;;;;;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAAA;;AACA;AAAA;;;;;;AACA;AAAA;;;;;;;AAFA;;;;;;;;;;AAOA;AAnCA;AAqCA;AAEA;;;;;;;;;;;;;;;;;;;;;ACvEA;AAEA;AAUA;AAoBA;AAAA;AAUA;AAEA;AADA;AAAA;;;;;;AACA;AACA;AAEA;AAEA;AAAA;;;;;;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAGA;AACA;AAEA;AAAA;;;;;;AAJA;;;;;;;;;;AASA;AAtCA;AAwCA;AAEA;;;;;;;;;;;;;;;;AC1EA;AACA;AACA;AACA;AACA;AACA;AALA;;;;;;;;;;;;;;;;;;;ACEA;AAkBA;AAAA;AAiBA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;AAGA;AApCA;AAsCA;;;;;;;;;;;;;;;;;;;ACxDA;AAgBA;AAAA;AAKA;AAAA;AAAA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAGA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AAEA;;;;;;AAPA;;;;AAUA;AACA;AA/BA;AAiCA;AAEA;;;;;;;;;;;;;;;;;;;ACnDA;AA2BA;AAAA;AAYA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;AAGA;;;;;;AAGA;AA9BA;AAgCA;;;;;;;;;;;;;;;;;;;;;;;;;;AC7DA;AAEA;AACA;AAEA;AACA;AACA;AACA;AAIA;AACA;AAAA;AACA;AACA;AAAA;AACA;AAAA;AAAA;;;;;;;;;;;AAGA;AAEA;AAAA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;;AACA;AAAA;;;;;;AACA;AACA;AACA;AACA;;;;;;AAEA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;;;;;;;;;;;;;;;;;;;;;;AAIA;AAEA;AAAA;AACA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;;;;;;;;;;;AAGA;AAEA;AAAA;AACA;AAEA;AACA;AACA;AACA;;;;;;AAGA;AAEA;AAAA;AACA;AACA;AAAA;AACA;;;;;;AAGA;AAEA;AAAA;AACA;AACA;AAAA;AACA;;;;;;AAGA;AACA;;;;;;;;;;;;;;;;;;;;;;;AC3EA;AAEA;AAEA;AACA;AACA;AACA;AACA;AAIA;AAEA;AAEA;AACA;;;;;AACA;;;;;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAEA;;;;;;AANA;;;;;AAUA;AACA;AACA;AACA;;;;;;AAGA;AAhCA;AAkCA;;;;;;;;;;;;;;;;;;;;;;;;AC9CA;AAEA;AAEA;AACA;AAIA;;AAEA;AAEA;AACA;AACA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAEA;;AAEA;AAEA;AAAA;;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;;;;;;;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;;;;;;;;;;;;AApBA;;;;;AAyBA;;;;;;;AAGA;AA5CA;AAAA;AA8CA;;;;;;;;;;;;;;;;;;;;;;;;;;ACtDA;AAEA;AACA;AAEA;AAEA;AACA;AACA;AAKA;;AAEA;AAEA;AAEA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAEA;AACA;AAEA;AACA;;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;;;;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;;;;;;;;;;AAGA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AAEA;AACA;AACA;AACA;AACA;;AAEA;AAAA;AAAA;AACA;;;;;;AAEA;AACA;AACA;AACA;AAEA;;;;;;;;;;;;;;;;;AAKA;AAjFA;;AAMA;;;AANA;AAmFA;;;;;;;;;;;;;;;;;;;;;;;;ACjGA;AAEA;AAEA;AACA;AACA;AACA;AAIA;AAAA;AAIA;AAAA;AAAA;AAIA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AAEA;AACA;AACA;AACA;;;;;AACA;AACA;;;;;AACA;AACA;;;;;AACA;AACA;AAEA;AACA;;AACA;AAAA;AAAA;AAAA;;;;;;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;;;;;;;;;;;;AAKA;AA5CA;AA8CA;;;;;;;;;;;;;;;;;;;;;;;ACzDA;AAEA;AAEA;AAIA;AACA;AAMA;AAYA;AAXA;AACA;AAEA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;;;;;;AAGA;AAEA;AACA;AAEA;AACA;AACA;AACA;AAAA;AAAA;AAAA;;;;;;AAGA;AAEA;AACA;AAEA;AACA;AACA;AAAA;AAAA;AAAA;;;;;;AAGA;AAEA;AACA;AAEA;AAEA;AACA;AAGA;AACA;AAEA;AAJA;;;;;;;;;;;;;;;AAUA;;AAEA;AAEA;;;;;;;;;;;;;;;;;;;;;;ACvEA;AAEA;AAKA;AAUA;AAAA;AAKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;;;;;;AAGA;AAvBA;AAyBA;AAEA;;;;;;;;;;;;;;;;;;;;;;AC5CA;AAEA;AACA;AAcA;AAAA;AAMA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AADA;;;;;;;;;;AAMA;;AAEA;;;;;;;;;;;;;;;;;;;;;;;;;ACzCA;AAEA;AAEA;AACA;AACA;AACA;AASA;AAAA;AAOA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;AAGA;AAEA;AACA;AAEA;AAEA;AACA;AACA;AACA;AAEA;;;;;;;;;AAEA;;;;;;AAGA;AACA;;;;;;AAGA;AA1CA;AA4CA;AAEA;;;;;;;;;;;;;;;;;;;;;;;;;;AC9DA;AAEA;AACA;AAEA;AAEA;AAIA;AAAA;;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;;;;;;AAGA;AA7BA;;AACA;;;AADA;AA+BA;AACA;AAAA;AAAA;AAAA;AAEA;AAEA;AACA;AAGA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AAAA;;;;;;AAPA;;;;;AAUA;;;;;;;;;;;AAIA;AA5BA;AA8BA;;;;;;;;;;;;;;;;;;;;;;;;;;ACxEA;AAGA;AAIA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAEA;;AAEA;AAEA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAEA;AAEA;AACA;AACA;;AAEA;AAAA;;AACA;AAAA;AAAA;AAAA;;;;;;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AADA;;;;;;;;;;AAKA;AAAA;AAAA;AAAA;;;;;;;;;;;;AAEA;AAAA;;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;;;;;;;;;;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;;;;;;;;;;AAEA;AAAA;AAAA;;AACA;AAAA;AAAA;;;;;;;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;;;;;;;;;;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;;;;;;;;;;;;;;;;;;;;;;AAKA;AA1DA;AAAA;AA4DA;;;;;;;;;;;;;;;;AC5EA;AAAA;AAKA;AALA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AA1NA;;;;;;;;;;;;;;;;;;;;;;;;;;;ACFA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AAGA;;AAEA;AAIA;AAAA;AAAA;AAKA;AACA;AACA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;;AAEA;AACA;AACA;;AAEA;AAAA;AAAA;AACA;AAAA;;AACA;AAAA;;;;;;AACA;AAEA;AACA;AACA;;;;;;AAGA;AAAA;;;;;;;;;;;;;;;;;AAKA;AAAA;;;;;;;;;;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;;;;;;;;;;;;;AAOA;AAxEA;AAAA;AA0EA;;;;;;;;;;;;;;;;ACpFA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAvCA;;;;;;;;;;;;;;;;;;;;;ACAA;AACA;AAEA;AASA;AAAA;AAOA;AAAA;AAAA;AAAA;AAAA;;;;;;AACA;AARA;AAUA;AAEA;;;;;;;;;;;;;;;;ACxBA;AAAA;AACA;AACA;AACA;AACA;AACA;AALA;;;;;;;;;;;;;;;;;;;;;ACAA;AAEA;AAEA;AAqBA;AAAA;AAWA;AACA;AACA;AAEA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAGA;AACA;AAAA;AAAA;;AACA;AAAA;;;;;;AACA;AAAA;AAAA;AAAA;AAAA;;;;;;;;;;;AACA;AAAA;AAAA;;;;;;;;;;;;AAGA;AACA;AACA;AAVA;;;;;AAaA;;;;;;AAGA;AAjDA;AAmDA;AAEA;;;;;;;;;;;;;;;;;;;;AChFA;AACA;AACA;AAEA;AAKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;ACvBA;AAEA;AACA;AAEA;AAEA;AAUA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;;;;;;;;;;;AAGA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;;;;;;;;;;;AAGA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;;;;;;;;;;;AAGA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;;;;;;;;;;;AAGA;AACA;AAOA;AAAA;;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AAAA;AAAA;AAEA;AACA;AAAA;;AACA;AACA;AACA;AACA;AACA;;AAEA;AAAA;AAAA;;;;;;AACA;AAAA;AAAA;;;;;;;;;;;;AAEA;AACA;AACA;AAGA;AACA;AACA;AACA;;AAEA;AAAA;AAAA;;;;;;AACA;AAAA;AAAA;;;;;;;AAPA;;;;;;;;;;;;;;;;AAcA;;AAxDA;;;;AAAA;;AAwDA;;AAEA;;;;;;;;;;;;;;;;;;;;;;;;;;ACxHA;AAEA;AACA;AACA;AACA;AAEA;AAOA;AAAA;;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAEA;AAEA;AACA;AACA;AACA;AAEA;;;;;;AAGA;;AA5BA;;;;AAAA;;AA4BA;;AAEA;;;;;;;;;;;;;;;;;;;;;;;;;;AC7CA;AAEA;AACA;AACA;AAEA;AAEA;AAOA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAOA;AAAA;;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AAAA;AAAA;AAEA;AAEA;AACA;AAAA;;AACA;AACA;AACA;AACA;AACA;;AAEA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;;AACA;AACA;AACA;AACA;AACA;;;;;;AAEA;AAAA;AAAA;AAAA;AAAA;;;;;;;;;;;;;;;;;AAGA;AAAA;AAAA;;;;;;;;;;;;AAEA;AACA;AACA;AAAA;AACA;AAGA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AAEA;AACA;AAAA;;;;;;AATA;;;;;;;;;;;;;;;;;;;;;AAkBA;;AA5EA;;;;AAAA;;AA4EA;;AAEA;;;;;;;;;;;;;;;;;;;;;;;;ACjJA;AAEA;AACA;AAEA;AASA;AAAA;;AACA;AAEA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AAEA;AACA;AACA;AACA;AAEA;;;;;;AAGA;;AAhBA;;;;AAAA;;AAgBA;;AAEA;;;;;;;;;;;;;;;;;;;;;;;;;ACjCA;AAGA;AACA;AACA;AAEA;AASA;AAAA;;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AAEA;AACA;AACA;AACA;AAEA;;;;;;AAGA;;AA9CA;;;;AAAA;;AA8CA;;AAEA;;;;;;;;;;;;;;;;;;;;;;;;;;;ACjEA;AAGA;AACA;AACA;AACA;AAEA;AAEA;AAWA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAOA;AAAA;;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AAAA;AAAA;AAEA;AACA;AAAA;;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;;;;;;AAEA;AAAA;AAAA;;;;;;;;;;;;AAEA;AACA;AACA;AAGA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;;;;;;AAbA;;;;;;;;;;;;;;;;AAqBA;;AAhFA;;;;AAAA;;AAgFA;;AAEA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACtHA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;;AACA;AAEA;AACA;;AACA;AAAA;AAAA;AAAA;;;;;;AAGA;AAAA;AAAA;AAAA;;;;;;AAGA;AAAA;AAAA;AAAA;;;;;;AAGA;AAAA;AAAA;AAAA;;;;;;AAGA;AAAA;AAAA;AAAA;;;;;;AAGA;AAAA;AAAA;AAAA;;;;;;AAGA;AAAA;AAAA;AAAA;;;;;;AAGA;AAAA;AAAA;AAAA;;;;;;AAGA;AAAA;AAAA;;;;;;AAGA;AAAA;;;;;;AACA;AAAA;;;;;;AACA;AAAA;;;;;;AACA;;;;;;;;;;;AAGA;AAtCA;;AACA;;;AADA;AAwCA;;;;;;;;;;;;;;;;;;;;;;;ACpDA;AAGA;AACA;AAEA;AAMA;AAAA;;AACA;AAEA;AACA;AACA;AAAA;AAAA;AAEA;AAEA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;AAEA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;AAKA;;AAhCA;;;;AAAA;;AAgCA;;AAEA;;;;;;;;;;;;;;;;;;;;;;;;AChDA;AAEA;AACA;AACA;AACA;AACA;AACA;AAoBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AAGA;AACA;AACA;AAIA;AAGA;AACA;AACA;AAIA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAEA;AACA;;;;;;;;;;;;;;ACpIA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAxPA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AAeA;AAAA;AAKA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAAA;AACA;AAAA;;AACA;;;;;AACA;AACA;AAAA;;;;;;AACA;AAAA;AAAA;;;;;;AACA;;;;;;AAEA;;;;;AACA;;;;;AACA;AAAA;;;;;;;;;;;;;;;;;;;;;;AAKA;AA7BA;AA+BA;AAEA;;;;;;;;;;;;;;;;AC7BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;AC3DA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAPA;;;;;;;;;;;;;;;;;;;;;ACAA;AAEA;AAGA;AAcA;AAAA;AAeA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;AAGA;;AAEA;AAEA;;;;;;;;;;;;;;;;;;;;;ACrDA;AACA;AAQA;AAAA;AAKA;AACA;;AACA;;;;;AACA;;;;;;;AAGA;AAXA;AAaA;;;;;;;;;;;;;;;;;;;;ACrBA;AACA;AAeA;AAAA;AAWA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;AAIA;AA1BA;AA4BA;AAEA;;;;;;;;;;;;;;;;ACjDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAPA;;;;;;;;;;;;;;;;;;;;;ACEA;AAUA;AAEA;AA0BA;AAAA;AAMA;AACA;AAAA;AACA;AACA;AACA;AAEA;;AAEA;AAEA;;;;;;AAIA;;AACA;AACA;AACA;AAEA;;;;;;AAEA;;;;;;;;;;;AAKA;;AACA;AACA;AACA;;;;;;AAGA;;;;;;;;AAzBA;;;;;AA6BA;;;;;;AAGA;AA7CA;AA+CA;;;;;;;;;;;;;;;;;;;ACrFA;AAyBA;AAAA;AAQA;AAEA;AACA;AACA;AACA;AACA;AAEA;;;;;;AAGA;AAnBA;AAqBA;AAEA;;;;;;;;;;;;;;;;;;;AChDA;AAQA;AAAA;AAMA;AAEA;AACA;AACA;AAEA;;;;;;AAGA;AAfA;AAiBA;AAEA;;;;;;;;;;;;;;;;;;;;;;;;;;AC5BA;AAEA;AAEA;AACA;AAEA;AACA;AACA;AAUA;AAAA;;AAOA;AAEA;AACA;AACA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AACA;AACA;AAGA;AACA;AAEA;AACA;AAAA;AAAA;;;;;;AAGA;AACA;AACA;;;;;;AAVA;;;;;;;;;;;;;;;;;;;;AAmBA;;AAEA;AAEA;;;;;;;;;;;;;;;;;;;;;;;;;;;ACzEA;AAEA;AAEA;AACA;AAEA;AACA;AACA;AAiBA;AAAA;;AAOA;AACA;AACA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AAEA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;;AACA;AAAA;AAAA;AAAA;;;;;;AACA;;AACA;AAEA;AACA;AAEA;AACA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AACA;;;;;;AAGA;AAZA;;;;;AAcA;AAGA;AACA;AAEA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;AAGA;AAhBA;;;;;;;;;;;;;;;;;;;;;;AAuBA;;AAEA;AAEA;;;;;;;;;;;;;;;;;;ACpGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAQA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;AC9BA;AACA;AACA;AAOA;AAAA;AAIA;AAEA;AACA;AACA;AACA;;;;;AACA;AACA;AAEA;;;;;;AAGA;AAhBA;;;;;;;;;;;;;;;;;;;;;;;;ACZA;AAIA;AACA;AACA;AACA;AAcA;AAAA;;AAIA;AAEA;AACA;AACA;AAEA;;AAEA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;;;;;;;;;;;;;;;AAGA;AACA;AACA;AACA;AACA;;;;;;;;AAIA;AAzBA;AAAA;;;;;;;;;;;;;;;;;;;;AClBA;AACA;AASA;AAAA;AAIA;AAEA;AACA;AACA;AAAA;AAAA;AACA;;;;;;AAGA;AAZA;;;;;;;;;;;;;;;;;;;;;;;;ACbA;AAIA;AACA;AACA;AACA;AAOA;AAAA;;AAIA;AAEA;AACA;AACA;AAEA;;AAEA;AAAA;AAAA;AACA;AAAA;AACA;;;;;;;;;;;;;;;AAGA;AACA;AACA;AACA;AACA;;;;;;;;AAIA;AAzBA;AAAA;;;;;;;;;;;;;;;;;;;;;;ACXA;AACA;AACA;AACA;AAMA;AAAA;AAGA;AACA;AAAA;AACA;AAAA;AAAA;AACA;;;;;;;;;;;;;;;AAIA;AAVA;;;;;;;;;;;;;;;;;;;;;;;;ACbA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;AChBA;AAIA;AACA;AACA;AACA;AAOA;AAAA;AAIA;AACA;AAAA;;AACA;AACA;AAAA;AACA;AACA;AACA;AAEA;;;;;;;;;;;;;;;AAKA;AAAA;AAAA;AACA;AACA;AACA;AAEA;;;;;;;;;;;;;;;;;;;;;AAKA;AA3BA;;;;;;;;;;;;;;;;;;;;ACZA;AACA;AAQA;AAAA;AAKA;AAEA;AACA;AACA;AACA;;;;;;AAGA;AAbA;;;;;;;;;;;;;;;;;;;;;;;;;ACZA;AAEA;AAIA;AACA;AACA;AAOA;AAAA;;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AAEA;AAEA;AACA;AACA;AACA;AACA;;AAEA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;;;;;;;;;;;;;;;AAGA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;;;;;;;;;;;;;;;;;;;;;AAKA;AA3BA;AAAA;;;;;;;;;;;;;;;;ACdA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AArBA;;;;;;;;;;;;;;;;ACAA;AAAA;AAIA;AAJA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAvEA;;;;;;;;;;;;;;;;;;;;;;ACDA;AAEA;AAGA;AACA;AA+BA;AACA;AAOA;AACA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAEA;AAEA;AACA;AACA;AACA;AADA;;;;;AAIA;;;;;;AAGA;;AAEA;AAEA;;;;;;;;;;;;;;;;;;ACrEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;;;;;;;;;;;;;ACfA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;;;;;;;;;;;;;;;ACRA;AAEA;;;;AAIA;AACA;AACA;AAEA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACfA;AACA;AAUA;AACA;AAEA;AACA;AAsBA;AACA;;;;;;;;;;;;;;;;;ACvCA;AACA;AAEA;AAEA;;;;;;AAMA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;ACzBA;;;;AAIA;AAEA;AACA;AACA;AAEA;AACA;AACA;;;;;;;;;;;;;;;;;;;;ACZA;;AAEA;AAEA;AACA;AAEA;;;;AAIA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;;;;AAIA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;;;;AAIA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;;;;AAIA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;;;;AAIA;AAEA;AACA;AAOA;AAEA;;;;;AAKA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;ACvHA;;;;AAIA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;;;;;AAKA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;;;;AAIA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;ACzCA;;;;AAIA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;;;;;AAKA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;;;;AAIA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACzCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;AClCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;ACjDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;AC5SA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACPA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;ACvXA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;AC9SA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;AC7LA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;AC9HA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;ACtGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;AChJA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;AC5KA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;AChEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;AC7GA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;AC1OA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;ACzJA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;AC3FA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC5IA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;ACrBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;ACnHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;AC/LA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;ACzYA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;AC/MA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;AC1cA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;ACvHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;AC5WA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;ACnMA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;AC3WA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;AC3rBA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;ACLA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;ACpBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;ACbA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;ACzDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;ACXA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;AC9CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;AC3IA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;AC/xHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;AC3HA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC1NA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;ACnUA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACvYA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;ACPA;AACA;AACA;AACA;AACA;AACA;AACA;;;;ACNA;AACA;AACA;AACA;AACA;AACA;AACA;;;;ACNA;;;;ACAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;ACzWA;AACA;AACA;AACA;AACA;AACA;AACA;;;;ACNA;;;;ACAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA"}
1
+ {"version":3,"file":"index.js","sources":["/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/node_modules/@rspack/core/dist/cssExtractHmr.js","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/node_modules/swiper/modules/effect-coverflow.css","webpack://@ix_waterford/lib/./node_modules/swiper/modules/pagination.css?d760","webpack://@ix_waterford/lib/./node_modules/swiper/swiper.css?b4eb","webpack://@ix_waterford/lib/./src/components/textEditor/lexicalStyles.css?83f1","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/node_modules/dayjs/plugin/customParseFormat.js","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/node_modules/dayjs/plugin/utc.js","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/node_modules/react-refresh/cjs/react-refresh-runtime.development.js","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/node_modules/react-refresh/runtime.js","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/node_modules/react/cjs/react-jsx-dev-runtime.development.js","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/node_modules/react/jsx-dev-runtime.js","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/src/assets/editIcon.tsx","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/src/assets/searchIcon.tsx","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/src/assets/svg/addIcon.tsx","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/src/assets/svg/clearFilterIcon.tsx","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/src/assets/svg/closeIcon.tsx","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/src/assets/svg/columSettingsIcon.tsx","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/src/assets/svg/doubleArrow.tsx","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/src/assets/svg/downloadIcon.tsx","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/src/assets/svg/expandMoreIcon.tsx","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/src/assets/svg/listIcon.tsx","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/src/assets/svg/moreIcon.tsx","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/src/assets/svg/pagination/backwardIcon.tsx","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/src/assets/svg/pagination/forwardIcon.tsx","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/src/assets/svg/pagination/nextIcon.tsx","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/src/assets/svg/pagination/prevIcon.tsx","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/src/assets/svg/searchIcon.tsx","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/src/assets/svg/sorting/ascending.tsx","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/src/assets/svg/sorting/descending.tsx","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/src/assets/svg/tileIcon.tsx","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/src/components/accordion/accordion.tsx","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/src/components/avatar/avatar.tsx","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/src/components/avatar/avatarGroup.tsx","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/src/components/avatarStatusDot/avatar.tsx","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/src/components/avatarStatusDot/style.tsx","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/src/components/avatarTitle/avatarTitle.tsx","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/src/components/badge/badge.tsx","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/src/components/breadCrumb/breadCrumb.tsx","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/src/components/breadCrumb/style.tsx","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/src/components/button/button.tsx","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/src/components/button/style.tsx","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/src/components/carousal/carousal.tsx","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/src/components/checkBox/checkBox.tsx","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/src/components/chip/chip.tsx","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/src/components/colorPicker/colorPicker.tsx","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/src/components/datePicker/datePicker.tsx","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/src/components/dateRangePicker/dateRangePicker.tsx","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/src/components/dateRangePicker/style.tsx","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/src/components/dialog/dialog.tsx","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/src/components/dialog/style.tsx","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/src/components/drawer/drawer.tsx","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/src/components/errorBoundary/errorBoundary.tsx","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/src/components/iconButton/iconButton.tsx","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/src/components/link/link.tsx","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/src/components/loader/circularLoader.tsx","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/src/components/loader/linearLoader.tsx","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/src/components/loader/style.tsx","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/src/components/mediaPlayer/mediaPlayer.tsx","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/src/components/menu/menu.tsx","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/src/components/menu/style.tsx","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/src/components/modal/modal.tsx","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/src/components/popOver/popOver.tsx","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/src/components/radio/radio.tsx","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/src/components/searchBar/searchBar.tsx","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/src/components/select/multiSelect.tsx","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/src/components/select/select.tsx","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/src/components/select/style.tsx","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/src/components/slider/slider.tsx","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/src/components/snackBar/snackBar.tsx","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/src/components/switch/switch.tsx","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/src/components/table/body/defaultMappings.tsx","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/src/components/table/body/tableActions.tsx","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/src/components/table/body/tblBody.tsx","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/src/components/table/dndWrapper.tsx","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/src/components/table/header/headerContent.tsx","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/src/components/table/header/searchBar.tsx","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/src/components/table/header/searchFields/DateSearchField.tsx","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/src/components/table/header/searchFields/SelectSearchField.tsx","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/src/components/table/header/searchFields/TextSearchField.tsx","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/src/components/table/header/tblHeader.tsx","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/src/components/table/pagination.tsx","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/src/components/table/styles.tsx","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/src/components/table/table.tsx","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/src/components/tabs/style.tsx","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/src/components/tabs/tabPanel.tsx","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/src/components/tabs/tabPanelStyle.tsx","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/src/components/tabs/tabs.tsx","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/src/components/textEditor/config.ts","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/src/components/textEditor/plugins/alignmentDropdown.tsx","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/src/components/textEditor/plugins/blockquoteButton.tsx","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/src/components/textEditor/plugins/colorPicker.tsx","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/src/components/textEditor/plugins/formatButton.tsx","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/src/components/textEditor/plugins/listButton.tsx","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/src/components/textEditor/plugins/textStyleDropdown.tsx","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/src/components/textEditor/plugins/toolbar.tsx","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/src/components/textEditor/plugins/undoButton.tsx","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/src/components/textEditor/plugins/useToolbarState.ts","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/src/components/textEditor/style.tsx","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/src/components/textEditor/textEditor.tsx","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/src/components/textEditor/theme.ts","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/src/components/textField/style.tsx","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/src/components/textField/textField.tsx","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/src/components/theme/ThemeProvider.tsx","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/src/components/timePicker/timePicker.tsx","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/src/components/timeline/style.tsx","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/src/components/timeline/timeline.tsx","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/src/components/toolTip/toolTip.tsx","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/src/components/typography/typography.tsx","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/src/components/viewHeader/DefaultViewPopover.tsx","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/src/components/viewHeader/columnSettingsPopover.tsx","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/src/components/viewHeader/constants.ts","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/src/components/viewHeader/defaultActions/add.tsx","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/src/components/viewHeader/defaultActions/columnSettings.tsx","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/src/components/viewHeader/defaultActions/dateRangePicker.tsx","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/src/components/viewHeader/defaultActions/defaultView.tsx","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/src/components/viewHeader/defaultActions/download.tsx","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/src/components/viewHeader/defaultActions/index.ts","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/src/components/viewHeader/defaultActions/listSearch.tsx","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/src/components/viewHeader/defaultActions/tileSearch.tsx","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/src/components/viewHeader/defaultActions/viewSwitch.tsx","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/src/components/viewHeader/popoverStyle.tsx","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/src/components/viewHeader/style.tsx","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/src/components/viewHeader/viewHeader.tsx","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/src/constants/dateConstants.ts","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/src/constants/viewHeaderConstants.ts","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/src/hooks/debounce.ts","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/src/index.ts","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/src/utils/date.ts","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/src/utils/email.ts","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/src/utils/global.ts","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/src/utils/localStorage.ts","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/src/utils/sessionStorage.ts","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/node_modules/@rspack/plugin-react-refresh/client/reactRefresh.js","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/node_modules/@rspack/plugin-react-refresh/client/reactRefreshEntry.js","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/node_modules/@rspack/plugin-react-refresh/client/refreshUtils.js","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/node_modules/@swc/helpers/esm/_define_property.js","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/node_modules/swiper/modules/a11y.mjs","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/node_modules/swiper/modules/autoplay.mjs","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/node_modules/swiper/modules/controller.mjs","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/node_modules/swiper/modules/effect-cards.mjs","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/node_modules/swiper/modules/effect-coverflow.mjs","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/node_modules/swiper/modules/effect-creative.mjs","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/node_modules/swiper/modules/effect-cube.mjs","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/node_modules/swiper/modules/effect-fade.mjs","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/node_modules/swiper/modules/effect-flip.mjs","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/node_modules/swiper/modules/free-mode.mjs","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/node_modules/swiper/modules/grid.mjs","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/node_modules/swiper/modules/hash-navigation.mjs","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/node_modules/swiper/modules/history.mjs","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/node_modules/swiper/modules/index.mjs","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/node_modules/swiper/modules/keyboard.mjs","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/node_modules/swiper/modules/manipulation.mjs","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/node_modules/swiper/modules/mousewheel.mjs","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/node_modules/swiper/modules/navigation.mjs","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/node_modules/swiper/modules/pagination.mjs","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/node_modules/swiper/modules/parallax.mjs","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/node_modules/swiper/modules/scrollbar.mjs","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/node_modules/swiper/modules/thumbs.mjs","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/node_modules/swiper/modules/virtual.mjs","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/node_modules/swiper/modules/zoom.mjs","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/node_modules/swiper/shared/classes-to-selector.mjs","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/node_modules/swiper/shared/create-element-if-not-defined.mjs","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/node_modules/swiper/shared/create-shadow.mjs","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/node_modules/swiper/shared/effect-init.mjs","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/node_modules/swiper/shared/effect-target.mjs","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/node_modules/swiper/shared/effect-virtual-transition-end.mjs","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/node_modules/swiper/shared/ssr-window.esm.mjs","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/node_modules/swiper/shared/swiper-core.mjs","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/node_modules/swiper/shared/update-on-virtual-data.mjs","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/node_modules/swiper/shared/update-swiper.mjs","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/node_modules/swiper/shared/utils.mjs","/Users/kirubakaran.r/Documents/projects/hub/components/waterford_library/node_modules/swiper/swiper-react.mjs","webpack/runtime/compat_get_default_export","webpack/runtime/define_property_getters","webpack/runtime/get mini-css chunk filename","webpack/runtime/has_own_property","webpack/runtime/hot_module_replacement","webpack/runtime/make_namespace_object","webpack/runtime/public_path","webpack/runtime/css loading"],"sourcesContent":["\"use strict\";\nvar __webpack_require__ = {};\n__webpack_require__.d = (exports1, definition)=>{\n for(var key in definition)__webpack_require__.o(definition, key) && !__webpack_require__.o(exports1, key) && Object.defineProperty(exports1, key, {\n enumerable: !0,\n get: definition[key]\n });\n}, __webpack_require__.o = (obj, prop)=>Object.prototype.hasOwnProperty.call(obj, prop), __webpack_require__.r = (exports1)=>{\n 'undefined' != typeof Symbol && Symbol.toStringTag && Object.defineProperty(exports1, Symbol.toStringTag, {\n value: 'Module'\n }), Object.defineProperty(exports1, '__esModule', {\n value: !0\n });\n};\nvar __webpack_exports__ = {};\nfunction normalizeUrl(url) {\n let urlString = url.trim();\n if (/^data:/i.test(urlString)) return urlString;\n let protocol = -1 !== urlString.indexOf(\"//\") ? `${urlString.split(\"//\")[0]}//` : \"\", components = urlString.replace(RegExp(protocol, \"i\"), \"\").split(\"/\"), host = components[0].toLowerCase().replace(/\\.$/, \"\");\n return components[0] = \"\", protocol + host + components.reduce((accumulator, item)=>{\n switch(item){\n case \"..\":\n accumulator.pop();\n break;\n case \".\":\n break;\n default:\n accumulator.push(item);\n }\n return accumulator;\n }, []).join(\"/\");\n}\n__webpack_require__.r(__webpack_exports__), __webpack_require__.d(__webpack_exports__, {\n cssReload: ()=>cssReload,\n normalizeUrl: ()=>normalizeUrl\n});\nconst srcByModuleId = Object.create(null), noDocument = \"undefined\" == typeof document, { forEach } = Array.prototype;\nfunction noop() {}\nfunction updateCss(el, url) {\n let normalizedUrl;\n if (url) normalizedUrl = url;\n else {\n let href = el.getAttribute(\"href\");\n if (!href) return;\n normalizedUrl = href.split(\"?\")[0];\n }\n if (!isUrlRequest(el.href) || !1 === el.isLoaded || !normalizedUrl || !(normalizedUrl.indexOf(\".css\") > -1)) return;\n el.visited = !0;\n let newEl = el.cloneNode();\n newEl.isLoaded = !1, newEl.addEventListener(\"load\", ()=>{\n !newEl.isLoaded && (newEl.isLoaded = !0, el.parentNode && el.parentNode.removeChild(el));\n }), newEl.addEventListener(\"error\", ()=>{\n !newEl.isLoaded && (newEl.isLoaded = !0, el.parentNode && el.parentNode.removeChild(el));\n }), newEl.href = `${normalizedUrl}?${Date.now()}`;\n let parent = el.parentNode;\n parent && (el.nextSibling ? parent.insertBefore(newEl, el.nextSibling) : parent.appendChild(newEl));\n}\nfunction reloadAll() {\n let elements = document.querySelectorAll(\"link\");\n forEach.call(elements, (el)=>{\n !0 !== el.visited && updateCss(el);\n });\n}\nfunction isUrlRequest(url) {\n return !!/^[a-zA-Z][a-zA-Z\\d+\\-.]*:/.test(url);\n}\nfunction cssReload(moduleId, options) {\n var fn;\n let timeout;\n if (noDocument) return console.log(\"[HMR] No `window.document` found, CSS HMR disabled\"), noop;\n let getScriptSrc = function(moduleId) {\n let src = srcByModuleId[moduleId];\n if (!src) {\n if (document.currentScript) ({ src } = document.currentScript);\n else {\n let scripts = document.getElementsByTagName(\"script\"), lastScriptTag = scripts[scripts.length - 1];\n lastScriptTag && ({ src } = lastScriptTag);\n }\n srcByModuleId[moduleId] = src;\n }\n return (fileMap)=>{\n if (!src) return null;\n let splitResult = src.match(/([^\\\\/]+)\\.js$/), filename = splitResult && splitResult[1];\n return filename && fileMap ? fileMap.split(\",\").map((mapRule)=>{\n let reg = RegExp(`${filename}\\\\.js$`, \"g\");\n return normalizeUrl(src.replace(reg, `${mapRule.replace(/{fileName}/g, filename)}.css`));\n }) : [\n src.replace(\".js\", \".css\")\n ];\n };\n }(moduleId);\n return fn = function() {\n let src = getScriptSrc(options.filename), reloaded = function(src) {\n if (!src) return !1;\n let elements = document.querySelectorAll(\"link\"), loaded = !1;\n return forEach.call(elements, (el)=>{\n var href;\n let ret, normalizedHref;\n if (!el.href) return;\n let url = (href = el.href, ret = \"\", normalizedHref = normalizeUrl(href), src.some((url)=>{\n normalizedHref.indexOf(src) > -1 && (ret = url);\n }), ret);\n !isUrlRequest(url) || !0 !== el.visited && url && (updateCss(el, url), loaded = !0);\n }), loaded;\n }(src);\n if (options.locals) {\n console.log(\"[HMR] Detected local CSS Modules. Reload all CSS\"), reloadAll();\n return;\n }\n reloaded ? console.log(\"[HMR] CSS reload %s\", src && src.join(\" \")) : (console.log(\"[HMR] Reload all CSS\"), reloadAll());\n }, timeout = 0, function(...args) {\n let self = this;\n clearTimeout(timeout), timeout = setTimeout(function() {\n return fn.apply(self, args);\n }, 50);\n };\n}\nfor(var __webpack_i__ in exports.cssReload = __webpack_exports__.cssReload, exports.normalizeUrl = __webpack_exports__.normalizeUrl, __webpack_exports__)-1 === [\n \"cssReload\",\n \"normalizeUrl\"\n].indexOf(__webpack_i__) && (exports[__webpack_i__] = __webpack_exports__[__webpack_i__]);\nObject.defineProperty(exports, '__esModule', {\n value: !0\n});\n","// extracted by css-extract-rspack-plugin\nexport {};\n if(module.hot) {\n (function() {\n var localsJsonString = undefined;\n // 1765978552140\n var cssReload = require(\"../../@rspack/core/dist/cssExtractHmr.js\").cssReload(module.id, {});\n // only invalidate when locals change\n if (\n module.hot.data &&\n module.hot.data.value &&\n module.hot.data.value !== localsJsonString\n ) {\n module.hot.invalidate();\n } else {\n module.hot.accept();\n }\n module.hot.dispose(function(data) {\n data.value = localsJsonString;\n cssReload();\n });\n })();\n }\n ","// extracted by css-extract-rspack-plugin\nexport {};\n if(module.hot) {\n (function() {\n var localsJsonString = undefined;\n // 1765978552140\n var cssReload = require(\"../../@rspack/core/dist/cssExtractHmr.js\").cssReload(module.id, {});\n // only invalidate when locals change\n if (\n module.hot.data &&\n module.hot.data.value &&\n module.hot.data.value !== localsJsonString\n ) {\n module.hot.invalidate();\n } else {\n module.hot.accept();\n }\n module.hot.dispose(function(data) {\n data.value = localsJsonString;\n cssReload();\n });\n })();\n }\n ","// extracted by css-extract-rspack-plugin\nexport {};\n if(module.hot) {\n (function() {\n var localsJsonString = undefined;\n // 1765978552142\n var cssReload = require(\"../@rspack/core/dist/cssExtractHmr.js\").cssReload(module.id, {});\n // only invalidate when locals change\n if (\n module.hot.data &&\n module.hot.data.value &&\n module.hot.data.value !== localsJsonString\n ) {\n module.hot.invalidate();\n } else {\n module.hot.accept();\n }\n module.hot.dispose(function(data) {\n data.value = localsJsonString;\n cssReload();\n });\n })();\n }\n ","// extracted by css-extract-rspack-plugin\nexport {};\n if(module.hot) {\n (function() {\n var localsJsonString = undefined;\n // 1765978552142\n var cssReload = require(\"../../../node_modules/@rspack/core/dist/cssExtractHmr.js\").cssReload(module.id, {});\n // only invalidate when locals change\n if (\n module.hot.data &&\n module.hot.data.value &&\n module.hot.data.value !== localsJsonString\n ) {\n module.hot.invalidate();\n } else {\n module.hot.accept();\n }\n module.hot.dispose(function(data) {\n data.value = localsJsonString;\n cssReload();\n });\n })();\n }\n ","!function(e,t){\"object\"==typeof exports&&\"undefined\"!=typeof module?module.exports=t():\"function\"==typeof define&&define.amd?define(t):(e=\"undefined\"!=typeof globalThis?globalThis:e||self).dayjs_plugin_customParseFormat=t()}(this,(function(){\"use strict\";var e={LTS:\"h:mm:ss A\",LT:\"h:mm A\",L:\"MM/DD/YYYY\",LL:\"MMMM D, YYYY\",LLL:\"MMMM D, YYYY h:mm A\",LLLL:\"dddd, MMMM D, YYYY h:mm A\"},t=/(\\[[^[]*\\])|([-_:/.,()\\s]+)|(A|a|Q|YYYY|YY?|ww?|MM?M?M?|Do|DD?|hh?|HH?|mm?|ss?|S{1,3}|z|ZZ?)/g,n=/\\d/,r=/\\d\\d/,i=/\\d\\d?/,o=/\\d*[^-_:/,()\\s\\d]+/,s={},a=function(e){return(e=+e)+(e>68?1900:2e3)};var f=function(e){return function(t){this[e]=+t}},h=[/[+-]\\d\\d:?(\\d\\d)?|Z/,function(e){(this.zone||(this.zone={})).offset=function(e){if(!e)return 0;if(\"Z\"===e)return 0;var t=e.match(/([+-]|\\d\\d)/g),n=60*t[1]+(+t[2]||0);return 0===n?0:\"+\"===t[0]?-n:n}(e)}],u=function(e){var t=s[e];return t&&(t.indexOf?t:t.s.concat(t.f))},d=function(e,t){var n,r=s.meridiem;if(r){for(var i=1;i<=24;i+=1)if(e.indexOf(r(i,0,t))>-1){n=i>12;break}}else n=e===(t?\"pm\":\"PM\");return n},c={A:[o,function(e){this.afternoon=d(e,!1)}],a:[o,function(e){this.afternoon=d(e,!0)}],Q:[n,function(e){this.month=3*(e-1)+1}],S:[n,function(e){this.milliseconds=100*+e}],SS:[r,function(e){this.milliseconds=10*+e}],SSS:[/\\d{3}/,function(e){this.milliseconds=+e}],s:[i,f(\"seconds\")],ss:[i,f(\"seconds\")],m:[i,f(\"minutes\")],mm:[i,f(\"minutes\")],H:[i,f(\"hours\")],h:[i,f(\"hours\")],HH:[i,f(\"hours\")],hh:[i,f(\"hours\")],D:[i,f(\"day\")],DD:[r,f(\"day\")],Do:[o,function(e){var t=s.ordinal,n=e.match(/\\d+/);if(this.day=n[0],t)for(var r=1;r<=31;r+=1)t(r).replace(/\\[|\\]/g,\"\")===e&&(this.day=r)}],w:[i,f(\"week\")],ww:[r,f(\"week\")],M:[i,f(\"month\")],MM:[r,f(\"month\")],MMM:[o,function(e){var t=u(\"months\"),n=(u(\"monthsShort\")||t.map((function(e){return e.slice(0,3)}))).indexOf(e)+1;if(n<1)throw new Error;this.month=n%12||n}],MMMM:[o,function(e){var t=u(\"months\").indexOf(e)+1;if(t<1)throw new Error;this.month=t%12||t}],Y:[/[+-]?\\d+/,f(\"year\")],YY:[r,function(e){this.year=a(e)}],YYYY:[/\\d{4}/,f(\"year\")],Z:h,ZZ:h};function l(n){var r,i;r=n,i=s&&s.formats;for(var o=(n=r.replace(/(\\[[^\\]]+])|(LTS?|l{1,4}|L{1,4})/g,(function(t,n,r){var o=r&&r.toUpperCase();return n||i[r]||e[r]||i[o].replace(/(\\[[^\\]]+])|(MMMM|MM|DD|dddd)/g,(function(e,t,n){return t||n.slice(1)}))}))).match(t),a=o.length,f=0;f<a;f+=1){var h=o[f],u=c[h],d=u&&u[0],l=u&&u[1];o[f]=l?{regex:d,parser:l}:h.replace(/^\\[|\\]$/g,\"\")}return function(e){for(var t={},n=0,r=0;n<a;n+=1){var i=o[n];if(\"string\"==typeof i)r+=i.length;else{var s=i.regex,f=i.parser,h=e.slice(r),u=s.exec(h)[0];f.call(t,u),e=e.replace(u,\"\")}}return function(e){var t=e.afternoon;if(void 0!==t){var n=e.hours;t?n<12&&(e.hours+=12):12===n&&(e.hours=0),delete e.afternoon}}(t),t}}return function(e,t,n){n.p.customParseFormat=!0,e&&e.parseTwoDigitYear&&(a=e.parseTwoDigitYear);var r=t.prototype,i=r.parse;r.parse=function(e){var t=e.date,r=e.utc,o=e.args;this.$u=r;var a=o[1];if(\"string\"==typeof a){var f=!0===o[2],h=!0===o[3],u=f||h,d=o[2];h&&(d=o[2]),s=this.$locale(),!f&&d&&(s=n.Ls[d]),this.$d=function(e,t,n,r){try{if([\"x\",\"X\"].indexOf(t)>-1)return new Date((\"X\"===t?1e3:1)*e);var i=l(t)(e),o=i.year,s=i.month,a=i.day,f=i.hours,h=i.minutes,u=i.seconds,d=i.milliseconds,c=i.zone,m=i.week,M=new Date,Y=a||(o||s?1:M.getDate()),p=o||M.getFullYear(),v=0;o&&!s||(v=s>0?s-1:M.getMonth());var D,w=f||0,g=h||0,y=u||0,L=d||0;return c?new Date(Date.UTC(p,v,Y,w,g,y,L+60*c.offset*1e3)):n?new Date(Date.UTC(p,v,Y,w,g,y,L)):(D=new Date(p,v,Y,w,g,y,L),m&&(D=r(D).week(m).toDate()),D)}catch(e){return new Date(\"\")}}(t,a,r,n),this.init(),d&&!0!==d&&(this.$L=this.locale(d).$L),u&&t!=this.format(a)&&(this.$d=new Date(\"\")),s={}}else if(a instanceof Array)for(var c=a.length,m=1;m<=c;m+=1){o[1]=a[m-1];var M=n.apply(this,o);if(M.isValid()){this.$d=M.$d,this.$L=M.$L,this.init();break}m===c&&(this.$d=new Date(\"\"))}else i.call(this,e)}}}));","!function(t,i){\"object\"==typeof exports&&\"undefined\"!=typeof module?module.exports=i():\"function\"==typeof define&&define.amd?define(i):(t=\"undefined\"!=typeof globalThis?globalThis:t||self).dayjs_plugin_utc=i()}(this,(function(){\"use strict\";var t=\"minute\",i=/[+-]\\d\\d(?::?\\d\\d)?/g,e=/([+-]|\\d\\d)/g;return function(s,f,n){var u=f.prototype;n.utc=function(t){var i={date:t,utc:!0,args:arguments};return new f(i)},u.utc=function(i){var e=n(this.toDate(),{locale:this.$L,utc:!0});return i?e.add(this.utcOffset(),t):e},u.local=function(){return n(this.toDate(),{locale:this.$L,utc:!1})};var r=u.parse;u.parse=function(t){t.utc&&(this.$u=!0),this.$utils().u(t.$offset)||(this.$offset=t.$offset),r.call(this,t)};var o=u.init;u.init=function(){if(this.$u){var t=this.$d;this.$y=t.getUTCFullYear(),this.$M=t.getUTCMonth(),this.$D=t.getUTCDate(),this.$W=t.getUTCDay(),this.$H=t.getUTCHours(),this.$m=t.getUTCMinutes(),this.$s=t.getUTCSeconds(),this.$ms=t.getUTCMilliseconds()}else o.call(this)};var a=u.utcOffset;u.utcOffset=function(s,f){var n=this.$utils().u;if(n(s))return this.$u?0:n(this.$offset)?a.call(this):this.$offset;if(\"string\"==typeof s&&(s=function(t){void 0===t&&(t=\"\");var s=t.match(i);if(!s)return null;var f=(\"\"+s[0]).match(e)||[\"-\",0,0],n=f[0],u=60*+f[1]+ +f[2];return 0===u?0:\"+\"===n?u:-u}(s),null===s))return this;var u=Math.abs(s)<=16?60*s:s;if(0===u)return this.utc(f);var r=this.clone();if(f)return r.$offset=u,r.$u=!1,r;var o=this.$u?this.toDate().getTimezoneOffset():-1*this.utcOffset();return(r=this.local().add(u+o,t)).$offset=u,r.$x.$localOffset=o,r};var h=u.format;u.format=function(t){var i=t||(this.$u?\"YYYY-MM-DDTHH:mm:ss[Z]\":\"\");return h.call(this,i)},u.valueOf=function(){var t=this.$utils().u(this.$offset)?0:this.$offset+(this.$x.$localOffset||this.$d.getTimezoneOffset());return this.$d.valueOf()-6e4*t},u.isUTC=function(){return!!this.$u},u.toISOString=function(){return this.toDate().toISOString()},u.toString=function(){return this.toDate().toUTCString()};var l=u.toDate;u.toDate=function(t){return\"s\"===t&&this.$offset?n(this.format(\"YYYY-MM-DD HH:mm:ss:SSS\")).toDate():l.call(this)};var c=u.diff;u.diff=function(t,i,e){if(t&&this.$u===t.$u)return c.call(this,t,i,e);var s=this.local(),f=n(t).local();return c.call(s,f,i,e)}}}));","/**\n * @license React\n * react-refresh-runtime.development.js\n *\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\"use strict\";\n\"production\" !== process.env.NODE_ENV &&\n (function () {\n function computeFullKey(signature) {\n if (null !== signature.fullKey) return signature.fullKey;\n var fullKey = signature.ownKey;\n try {\n var hooks = signature.getCustomHooks();\n } catch (err) {\n return (signature.forceReset = !0), (signature.fullKey = fullKey);\n }\n for (var i = 0; i < hooks.length; i++) {\n var hook = hooks[i];\n if (\"function\" !== typeof hook)\n return (signature.forceReset = !0), (signature.fullKey = fullKey);\n hook = allSignaturesByType.get(hook);\n if (void 0 !== hook) {\n var nestedHookKey = computeFullKey(hook);\n hook.forceReset && (signature.forceReset = !0);\n fullKey += \"\\n---\\n\" + nestedHookKey;\n }\n }\n return (signature.fullKey = fullKey);\n }\n function resolveFamily(type) {\n return updatedFamiliesByType.get(type);\n }\n function cloneMap(map) {\n var clone = new Map();\n map.forEach(function (value, key) {\n clone.set(key, value);\n });\n return clone;\n }\n function cloneSet(set) {\n var clone = new Set();\n set.forEach(function (value) {\n clone.add(value);\n });\n return clone;\n }\n function getProperty(object, property) {\n try {\n return object[property];\n } catch (err) {}\n }\n function register(type, id) {\n if (\n !(\n null === type ||\n (\"function\" !== typeof type && \"object\" !== typeof type) ||\n allFamiliesByType.has(type)\n )\n ) {\n var family = allFamiliesByID.get(id);\n void 0 === family\n ? ((family = { current: type }), allFamiliesByID.set(id, family))\n : pendingUpdates.push([family, type]);\n allFamiliesByType.set(type, family);\n if (\"object\" === typeof type && null !== type)\n switch (getProperty(type, \"$$typeof\")) {\n case REACT_FORWARD_REF_TYPE:\n register(type.render, id + \"$render\");\n break;\n case REACT_MEMO_TYPE:\n register(type.type, id + \"$type\");\n }\n }\n }\n function setSignature(type, key) {\n var forceReset =\n 2 < arguments.length && void 0 !== arguments[2] ? arguments[2] : !1,\n getCustomHooks = 3 < arguments.length ? arguments[3] : void 0;\n allSignaturesByType.has(type) ||\n allSignaturesByType.set(type, {\n forceReset: forceReset,\n ownKey: key,\n fullKey: null,\n getCustomHooks:\n getCustomHooks ||\n function () {\n return [];\n }\n });\n if (\"object\" === typeof type && null !== type)\n switch (getProperty(type, \"$$typeof\")) {\n case REACT_FORWARD_REF_TYPE:\n setSignature(type.render, key, forceReset, getCustomHooks);\n break;\n case REACT_MEMO_TYPE:\n setSignature(type.type, key, forceReset, getCustomHooks);\n }\n }\n function collectCustomHooksForSignature(type) {\n type = allSignaturesByType.get(type);\n void 0 !== type && computeFullKey(type);\n }\n var REACT_FORWARD_REF_TYPE = Symbol.for(\"react.forward_ref\"),\n REACT_MEMO_TYPE = Symbol.for(\"react.memo\"),\n PossiblyWeakMap = \"function\" === typeof WeakMap ? WeakMap : Map,\n allFamiliesByID = new Map(),\n allFamiliesByType = new PossiblyWeakMap(),\n allSignaturesByType = new PossiblyWeakMap(),\n updatedFamiliesByType = new PossiblyWeakMap(),\n pendingUpdates = [],\n helpersByRendererID = new Map(),\n helpersByRoot = new Map(),\n mountedRoots = new Set(),\n failedRoots = new Set(),\n rootElements = \"function\" === typeof WeakMap ? new WeakMap() : null,\n isPerformingRefresh = !1;\n exports._getMountedRootCount = function () {\n return mountedRoots.size;\n };\n exports.collectCustomHooksForSignature = collectCustomHooksForSignature;\n exports.createSignatureFunctionForTransform = function () {\n var savedType,\n hasCustomHooks,\n didCollectHooks = !1;\n return function (type, key, forceReset, getCustomHooks) {\n if (\"string\" === typeof key)\n return (\n savedType ||\n ((savedType = type),\n (hasCustomHooks = \"function\" === typeof getCustomHooks)),\n null == type ||\n (\"function\" !== typeof type && \"object\" !== typeof type) ||\n setSignature(type, key, forceReset, getCustomHooks),\n type\n );\n !didCollectHooks &&\n hasCustomHooks &&\n ((didCollectHooks = !0), collectCustomHooksForSignature(savedType));\n };\n };\n exports.getFamilyByID = function (id) {\n return allFamiliesByID.get(id);\n };\n exports.getFamilyByType = function (type) {\n return allFamiliesByType.get(type);\n };\n exports.hasUnrecoverableErrors = function () {\n return !1;\n };\n exports.injectIntoGlobalHook = function (globalObject) {\n var hook = globalObject.__REACT_DEVTOOLS_GLOBAL_HOOK__;\n if (void 0 === hook) {\n var nextID = 0;\n globalObject.__REACT_DEVTOOLS_GLOBAL_HOOK__ = hook = {\n renderers: new Map(),\n supportsFiber: !0,\n inject: function () {\n return nextID++;\n },\n onScheduleFiberRoot: function () {},\n onCommitFiberRoot: function () {},\n onCommitFiberUnmount: function () {}\n };\n }\n if (hook.isDisabled)\n console.warn(\n \"Something has shimmed the React DevTools global hook (__REACT_DEVTOOLS_GLOBAL_HOOK__). Fast Refresh is not compatible with this shim and will be disabled.\"\n );\n else {\n var oldInject = hook.inject;\n hook.inject = function (injected) {\n var id = oldInject.apply(this, arguments);\n \"function\" === typeof injected.scheduleRefresh &&\n \"function\" === typeof injected.setRefreshHandler &&\n helpersByRendererID.set(id, injected);\n return id;\n };\n hook.renderers.forEach(function (injected, id) {\n \"function\" === typeof injected.scheduleRefresh &&\n \"function\" === typeof injected.setRefreshHandler &&\n helpersByRendererID.set(id, injected);\n });\n var oldOnCommitFiberRoot = hook.onCommitFiberRoot,\n oldOnScheduleFiberRoot = hook.onScheduleFiberRoot || function () {};\n hook.onScheduleFiberRoot = function (id, root, children) {\n isPerformingRefresh ||\n (failedRoots.delete(root),\n null !== rootElements && rootElements.set(root, children));\n return oldOnScheduleFiberRoot.apply(this, arguments);\n };\n hook.onCommitFiberRoot = function (\n id,\n root,\n maybePriorityLevel,\n didError\n ) {\n var helpers = helpersByRendererID.get(id);\n if (void 0 !== helpers) {\n helpersByRoot.set(root, helpers);\n helpers = root.current;\n var alternate = helpers.alternate;\n null !== alternate\n ? ((alternate =\n null != alternate.memoizedState &&\n null != alternate.memoizedState.element &&\n mountedRoots.has(root)),\n (helpers =\n null != helpers.memoizedState &&\n null != helpers.memoizedState.element),\n !alternate && helpers\n ? (mountedRoots.add(root), failedRoots.delete(root))\n : (alternate && helpers) ||\n (alternate && !helpers\n ? (mountedRoots.delete(root),\n didError\n ? failedRoots.add(root)\n : helpersByRoot.delete(root))\n : alternate ||\n helpers ||\n (didError && failedRoots.add(root))))\n : mountedRoots.add(root);\n }\n return oldOnCommitFiberRoot.apply(this, arguments);\n };\n }\n };\n exports.isLikelyComponentType = function (type) {\n switch (typeof type) {\n case \"function\":\n if (null != type.prototype) {\n if (type.prototype.isReactComponent) return !0;\n var ownNames = Object.getOwnPropertyNames(type.prototype);\n if (\n 1 < ownNames.length ||\n \"constructor\" !== ownNames[0] ||\n type.prototype.__proto__ !== Object.prototype\n )\n return !1;\n }\n type = type.name || type.displayName;\n return \"string\" === typeof type && /^[A-Z]/.test(type);\n case \"object\":\n if (null != type)\n switch (getProperty(type, \"$$typeof\")) {\n case REACT_FORWARD_REF_TYPE:\n case REACT_MEMO_TYPE:\n return !0;\n }\n return !1;\n default:\n return !1;\n }\n };\n exports.performReactRefresh = function () {\n if (0 === pendingUpdates.length || isPerformingRefresh) return null;\n isPerformingRefresh = !0;\n try {\n var staleFamilies = new Set(),\n updatedFamilies = new Set(),\n updates = pendingUpdates;\n pendingUpdates = [];\n updates.forEach(function (_ref) {\n var family = _ref[0];\n _ref = _ref[1];\n var prevType = family.current;\n updatedFamiliesByType.set(prevType, family);\n updatedFamiliesByType.set(_ref, family);\n family.current = _ref;\n (prevType.prototype && prevType.prototype.isReactComponent) ||\n (_ref.prototype && _ref.prototype.isReactComponent)\n ? (_ref = !1)\n : ((prevType = allSignaturesByType.get(prevType)),\n (_ref = allSignaturesByType.get(_ref)),\n (_ref =\n (void 0 === prevType && void 0 === _ref) ||\n (void 0 !== prevType &&\n void 0 !== _ref &&\n computeFullKey(prevType) === computeFullKey(_ref) &&\n !_ref.forceReset)\n ? !0\n : !1));\n _ref ? updatedFamilies.add(family) : staleFamilies.add(family);\n });\n var update = {\n updatedFamilies: updatedFamilies,\n staleFamilies: staleFamilies\n };\n helpersByRendererID.forEach(function (helpers) {\n helpers.setRefreshHandler(resolveFamily);\n });\n var didError = !1,\n firstError = null,\n failedRootsSnapshot = cloneSet(failedRoots),\n mountedRootsSnapshot = cloneSet(mountedRoots),\n helpersByRootSnapshot = cloneMap(helpersByRoot);\n failedRootsSnapshot.forEach(function (root) {\n var helpers = helpersByRootSnapshot.get(root);\n if (void 0 === helpers)\n throw Error(\n \"Could not find helpers for a root. This is a bug in React Refresh.\"\n );\n failedRoots.has(root);\n if (null !== rootElements && rootElements.has(root)) {\n var element = rootElements.get(root);\n try {\n helpers.scheduleRoot(root, element);\n } catch (err) {\n didError || ((didError = !0), (firstError = err));\n }\n }\n });\n mountedRootsSnapshot.forEach(function (root) {\n var helpers = helpersByRootSnapshot.get(root);\n if (void 0 === helpers)\n throw Error(\n \"Could not find helpers for a root. This is a bug in React Refresh.\"\n );\n mountedRoots.has(root);\n try {\n helpers.scheduleRefresh(root, update);\n } catch (err) {\n didError || ((didError = !0), (firstError = err));\n }\n });\n if (didError) throw firstError;\n return update;\n } finally {\n isPerformingRefresh = !1;\n }\n };\n exports.register = register;\n exports.setSignature = setSignature;\n })();\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('./cjs/react-refresh-runtime.production.js');\n} else {\n module.exports = require('./cjs/react-refresh-runtime.development.js');\n}\n","/**\n * @license React\n * react-jsx-dev-runtime.development.js\n *\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\"use strict\";\n\"production\" !== process.env.NODE_ENV &&\n (function () {\n function getComponentNameFromType(type) {\n if (null == type) return null;\n if (\"function\" === typeof type)\n return type.$$typeof === REACT_CLIENT_REFERENCE\n ? null\n : type.displayName || type.name || null;\n if (\"string\" === typeof type) return type;\n switch (type) {\n case REACT_FRAGMENT_TYPE:\n return \"Fragment\";\n case REACT_PROFILER_TYPE:\n return \"Profiler\";\n case REACT_STRICT_MODE_TYPE:\n return \"StrictMode\";\n case REACT_SUSPENSE_TYPE:\n return \"Suspense\";\n case REACT_SUSPENSE_LIST_TYPE:\n return \"SuspenseList\";\n case REACT_ACTIVITY_TYPE:\n return \"Activity\";\n }\n if (\"object\" === typeof type)\n switch (\n (\"number\" === typeof type.tag &&\n console.error(\n \"Received an unexpected object in getComponentNameFromType(). This is likely a bug in React. Please file an issue.\"\n ),\n type.$$typeof)\n ) {\n case REACT_PORTAL_TYPE:\n return \"Portal\";\n case REACT_CONTEXT_TYPE:\n return type.displayName || \"Context\";\n case REACT_CONSUMER_TYPE:\n return (type._context.displayName || \"Context\") + \".Consumer\";\n case REACT_FORWARD_REF_TYPE:\n var innerType = type.render;\n type = type.displayName;\n type ||\n ((type = innerType.displayName || innerType.name || \"\"),\n (type = \"\" !== type ? \"ForwardRef(\" + type + \")\" : \"ForwardRef\"));\n return type;\n case REACT_MEMO_TYPE:\n return (\n (innerType = type.displayName || null),\n null !== innerType\n ? innerType\n : getComponentNameFromType(type.type) || \"Memo\"\n );\n case REACT_LAZY_TYPE:\n innerType = type._payload;\n type = type._init;\n try {\n return getComponentNameFromType(type(innerType));\n } catch (x) {}\n }\n return null;\n }\n function testStringCoercion(value) {\n return \"\" + value;\n }\n function checkKeyStringCoercion(value) {\n try {\n testStringCoercion(value);\n var JSCompiler_inline_result = !1;\n } catch (e) {\n JSCompiler_inline_result = !0;\n }\n if (JSCompiler_inline_result) {\n JSCompiler_inline_result = console;\n var JSCompiler_temp_const = JSCompiler_inline_result.error;\n var JSCompiler_inline_result$jscomp$0 =\n (\"function\" === typeof Symbol &&\n Symbol.toStringTag &&\n value[Symbol.toStringTag]) ||\n value.constructor.name ||\n \"Object\";\n JSCompiler_temp_const.call(\n JSCompiler_inline_result,\n \"The provided key is an unsupported type %s. This value must be coerced to a string before using it here.\",\n JSCompiler_inline_result$jscomp$0\n );\n return testStringCoercion(value);\n }\n }\n function getTaskName(type) {\n if (type === REACT_FRAGMENT_TYPE) return \"<>\";\n if (\n \"object\" === typeof type &&\n null !== type &&\n type.$$typeof === REACT_LAZY_TYPE\n )\n return \"<...>\";\n try {\n var name = getComponentNameFromType(type);\n return name ? \"<\" + name + \">\" : \"<...>\";\n } catch (x) {\n return \"<...>\";\n }\n }\n function getOwner() {\n var dispatcher = ReactSharedInternals.A;\n return null === dispatcher ? null : dispatcher.getOwner();\n }\n function UnknownOwner() {\n return Error(\"react-stack-top-frame\");\n }\n function hasValidKey(config) {\n if (hasOwnProperty.call(config, \"key\")) {\n var getter = Object.getOwnPropertyDescriptor(config, \"key\").get;\n if (getter && getter.isReactWarning) return !1;\n }\n return void 0 !== config.key;\n }\n function defineKeyPropWarningGetter(props, displayName) {\n function warnAboutAccessingKey() {\n specialPropKeyWarningShown ||\n ((specialPropKeyWarningShown = !0),\n console.error(\n \"%s: `key` is not a prop. Trying to access it will result in `undefined` being returned. If you need to access the same value within the child component, you should pass it as a different prop. (https://react.dev/link/special-props)\",\n displayName\n ));\n }\n warnAboutAccessingKey.isReactWarning = !0;\n Object.defineProperty(props, \"key\", {\n get: warnAboutAccessingKey,\n configurable: !0\n });\n }\n function elementRefGetterWithDeprecationWarning() {\n var componentName = getComponentNameFromType(this.type);\n didWarnAboutElementRef[componentName] ||\n ((didWarnAboutElementRef[componentName] = !0),\n console.error(\n \"Accessing element.ref was removed in React 19. ref is now a regular prop. It will be removed from the JSX Element type in a future release.\"\n ));\n componentName = this.props.ref;\n return void 0 !== componentName ? componentName : null;\n }\n function ReactElement(type, key, props, owner, debugStack, debugTask) {\n var refProp = props.ref;\n type = {\n $$typeof: REACT_ELEMENT_TYPE,\n type: type,\n key: key,\n props: props,\n _owner: owner\n };\n null !== (void 0 !== refProp ? refProp : null)\n ? Object.defineProperty(type, \"ref\", {\n enumerable: !1,\n get: elementRefGetterWithDeprecationWarning\n })\n : Object.defineProperty(type, \"ref\", { enumerable: !1, value: null });\n type._store = {};\n Object.defineProperty(type._store, \"validated\", {\n configurable: !1,\n enumerable: !1,\n writable: !0,\n value: 0\n });\n Object.defineProperty(type, \"_debugInfo\", {\n configurable: !1,\n enumerable: !1,\n writable: !0,\n value: null\n });\n Object.defineProperty(type, \"_debugStack\", {\n configurable: !1,\n enumerable: !1,\n writable: !0,\n value: debugStack\n });\n Object.defineProperty(type, \"_debugTask\", {\n configurable: !1,\n enumerable: !1,\n writable: !0,\n value: debugTask\n });\n Object.freeze && (Object.freeze(type.props), Object.freeze(type));\n return type;\n }\n function jsxDEVImpl(\n type,\n config,\n maybeKey,\n isStaticChildren,\n debugStack,\n debugTask\n ) {\n var children = config.children;\n if (void 0 !== children)\n if (isStaticChildren)\n if (isArrayImpl(children)) {\n for (\n isStaticChildren = 0;\n isStaticChildren < children.length;\n isStaticChildren++\n )\n validateChildKeys(children[isStaticChildren]);\n Object.freeze && Object.freeze(children);\n } else\n console.error(\n \"React.jsx: Static children should always be an array. You are likely explicitly calling React.jsxs or React.jsxDEV. Use the Babel transform instead.\"\n );\n else validateChildKeys(children);\n if (hasOwnProperty.call(config, \"key\")) {\n children = getComponentNameFromType(type);\n var keys = Object.keys(config).filter(function (k) {\n return \"key\" !== k;\n });\n isStaticChildren =\n 0 < keys.length\n ? \"{key: someKey, \" + keys.join(\": ..., \") + \": ...}\"\n : \"{key: someKey}\";\n didWarnAboutKeySpread[children + isStaticChildren] ||\n ((keys =\n 0 < keys.length ? \"{\" + keys.join(\": ..., \") + \": ...}\" : \"{}\"),\n console.error(\n 'A props object containing a \"key\" prop is being spread into JSX:\\n let props = %s;\\n <%s {...props} />\\nReact keys must be passed directly to JSX without using spread:\\n let props = %s;\\n <%s key={someKey} {...props} />',\n isStaticChildren,\n children,\n keys,\n children\n ),\n (didWarnAboutKeySpread[children + isStaticChildren] = !0));\n }\n children = null;\n void 0 !== maybeKey &&\n (checkKeyStringCoercion(maybeKey), (children = \"\" + maybeKey));\n hasValidKey(config) &&\n (checkKeyStringCoercion(config.key), (children = \"\" + config.key));\n if (\"key\" in config) {\n maybeKey = {};\n for (var propName in config)\n \"key\" !== propName && (maybeKey[propName] = config[propName]);\n } else maybeKey = config;\n children &&\n defineKeyPropWarningGetter(\n maybeKey,\n \"function\" === typeof type\n ? type.displayName || type.name || \"Unknown\"\n : type\n );\n return ReactElement(\n type,\n children,\n maybeKey,\n getOwner(),\n debugStack,\n debugTask\n );\n }\n function validateChildKeys(node) {\n isValidElement(node)\n ? node._store && (node._store.validated = 1)\n : \"object\" === typeof node &&\n null !== node &&\n node.$$typeof === REACT_LAZY_TYPE &&\n (\"fulfilled\" === node._payload.status\n ? isValidElement(node._payload.value) &&\n node._payload.value._store &&\n (node._payload.value._store.validated = 1)\n : node._store && (node._store.validated = 1));\n }\n function isValidElement(object) {\n return (\n \"object\" === typeof object &&\n null !== object &&\n object.$$typeof === REACT_ELEMENT_TYPE\n );\n }\n var React = require(\"react\"),\n REACT_ELEMENT_TYPE = Symbol.for(\"react.transitional.element\"),\n REACT_PORTAL_TYPE = Symbol.for(\"react.portal\"),\n REACT_FRAGMENT_TYPE = Symbol.for(\"react.fragment\"),\n REACT_STRICT_MODE_TYPE = Symbol.for(\"react.strict_mode\"),\n REACT_PROFILER_TYPE = Symbol.for(\"react.profiler\"),\n REACT_CONSUMER_TYPE = Symbol.for(\"react.consumer\"),\n REACT_CONTEXT_TYPE = Symbol.for(\"react.context\"),\n REACT_FORWARD_REF_TYPE = Symbol.for(\"react.forward_ref\"),\n REACT_SUSPENSE_TYPE = Symbol.for(\"react.suspense\"),\n REACT_SUSPENSE_LIST_TYPE = Symbol.for(\"react.suspense_list\"),\n REACT_MEMO_TYPE = Symbol.for(\"react.memo\"),\n REACT_LAZY_TYPE = Symbol.for(\"react.lazy\"),\n REACT_ACTIVITY_TYPE = Symbol.for(\"react.activity\"),\n REACT_CLIENT_REFERENCE = Symbol.for(\"react.client.reference\"),\n ReactSharedInternals =\n React.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE,\n hasOwnProperty = Object.prototype.hasOwnProperty,\n isArrayImpl = Array.isArray,\n createTask = console.createTask\n ? console.createTask\n : function () {\n return null;\n };\n React = {\n react_stack_bottom_frame: function (callStackForError) {\n return callStackForError();\n }\n };\n var specialPropKeyWarningShown;\n var didWarnAboutElementRef = {};\n var unknownOwnerDebugStack = React.react_stack_bottom_frame.bind(\n React,\n UnknownOwner\n )();\n var unknownOwnerDebugTask = createTask(getTaskName(UnknownOwner));\n var didWarnAboutKeySpread = {};\n exports.Fragment = REACT_FRAGMENT_TYPE;\n exports.jsxDEV = function (type, config, maybeKey, isStaticChildren) {\n var trackActualOwner =\n 1e4 > ReactSharedInternals.recentlyCreatedOwnerStacks++;\n return jsxDEVImpl(\n type,\n config,\n maybeKey,\n isStaticChildren,\n trackActualOwner\n ? Error(\"react-stack-top-frame\")\n : unknownOwnerDebugStack,\n trackActualOwner ? createTask(getTaskName(type)) : unknownOwnerDebugTask\n );\n };\n })();\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('./cjs/react-jsx-dev-runtime.production.js');\n} else {\n module.exports = require('./cjs/react-jsx-dev-runtime.development.js');\n}\n","import type React from 'react';\n\nexport const EditIcon: React.FC = () => {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"14.327\"\n height=\"14.323\"\n viewBox=\"0 0 14.327 14.323\"\n >\n <g\n id=\"pencil_2_\"\n data-name=\"pencil (2)\"\n transform=\"translate(0.254 0.25)\"\n >\n <path\n id=\"Path_6088\"\n data-name=\"Path 6088\"\n d=\"M.5,13.822a.439.439,0,0,1-.426-.546L.9,9.964a.44.44,0,0,1,.115-.2L10.307.47a1.614,1.614,0,0,1,2.279,0l.829.829a1.614,1.614,0,0,1,0,2.279l-9.29,9.29a.437.437,0,0,1-.2.115l-3.312.825a.406.406,0,0,1-.106.014ZM1.725,10.3l-.619,2.484L3.59,12.16l9.2-9.2a.734.734,0,0,0,0-1.036l-.829-.829a.734.734,0,0,0-1.036,0Zm2.09,2.263h0Zm0,0\"\n transform=\"translate(-0.063 0.001)\"\n fill=\"#9644F3\"\n stroke=\"#9644F3\"\n strokeWidth=\"0.5\"\n />\n <path\n id=\"Path_6089\"\n data-name=\"Path 6089\"\n d=\"M319.1,67.862a.437.437,0,0,1-.311-.129L316.3,65.247a.44.44,0,1,1,.622-.622l2.487,2.487a.439.439,0,0,1-.311.75Zm0,0\"\n transform=\"translate(-307.488 -62.724)\"\n fill=\"#9644F3\"\n stroke=\"#9644F3\"\n strokeWidth=\"0.5\"\n />\n <path\n id=\"Path_6090\"\n data-name=\"Path 6090\"\n d=\"M33.02,353.922a.436.436,0,0,1-.311-.129l-2.487-2.487a.44.44,0,0,1,.622-.622l2.487,2.487a.44.44,0,0,1-.311.751Zm0,0\"\n transform=\"translate(-29.268 -340.923)\"\n fill=\"#9644F3\"\n stroke=\"#9644F3\"\n strokeWidth=\"0.5\"\n />\n </g>\n </svg>\n );\n};","import type React from 'react';\n\nexport const SearchIcon: React.FC = () => (\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"11.002\" height=\"11.363\" viewBox=\"0 0 11.002 11.363\">\n <g id=\"Group_160786\" data-name=\"Group 160786\" transform=\"translate(0.25 0.25)\">\n <path id=\"search_9_\" data-name=\"search (9)\" d=\"M10.9,9.5,8.421,6.92A4.211,4.211,0,1,0,5.2,8.425,4.167,4.167,0,0,0,7.61,7.663l2.5,2.6A.549.549,0,1,0,10.9,9.5ZM5.2,1.1A3.114,3.114,0,1,1,2.083,4.212,3.117,3.117,0,0,1,5.2,1.1Z\" transform=\"translate(-0.769 0.215)\" fill=\"#9fa5d3\" />\n <path id=\"search_9_-_Outline\" data-name=\"search (9) - Outline\" d=\"M10.508,10.683a.793.793,0,0,1-.576-.245L7.574,7.987A4.423,4.423,0,0,1,5.2,8.675a4.467,4.467,0,1,1,3.556-1.77L11.084,9.33a.8.8,0,0,1-.576,1.353ZM7.641,7.335l2.651,2.757a.293.293,0,0,0,.216.092.3.3,0,0,0,.216-.507L8.084,6.932l.145-.172a3.969,3.969,0,1,0-.763.7ZM5.2,7.576A3.364,3.364,0,1,1,8.56,4.212,3.367,3.367,0,0,1,5.2,7.576Zm0-6.227A2.864,2.864,0,1,0,8.06,4.212,2.867,2.867,0,0,0,5.2,1.349Z\" transform=\"translate(-0.769 0.215)\" fill=\"#9fa5d3\" />\n <path id=\"search_9_-_Outline-2\" data-name=\"search (9) - Outline\" d=\"M10.223,10.363a.758.758,0,0,1-.551-.234L7.295,7.656a4.388,4.388,0,0,1-2.383.7,4.432,4.432,0,1,1,3.51-1.732l2.352,2.446a.764.764,0,0,1-.551,1.294ZM7.352,7.1l2.63,2.735a.335.335,0,1,0,.482-.464L7.847,6.645,7.971,6.5a4,4,0,1,0-.77.7Zm-2.441.16A3.328,3.328,0,1,1,8.24,3.927,3.332,3.332,0,0,1,4.911,7.256Zm0-6.227a2.9,2.9,0,1,0,2.9,2.9A2.9,2.9,0,0,0,4.911,1.029Z\" transform=\"translate(-0.484 0.5)\" fill=\"#9fa5d3\" />\n <path id=\"search_9_-_Outline_-_Outline\" data-name=\"search (9) - Outline - Outline\" d=\"M10.223,10.613a1.006,1.006,0,0,1-.731-.311L7.254,7.974A4.676,4.676,0,1,1,9.588,3.927,4.7,4.7,0,0,1,8.747,6.6L10.954,8.9a1.014,1.014,0,0,1-.731,1.717ZM7.383,6.768l2.778,2.889a.085.085,0,1,0,.122-.117L7.51,6.656l.269-.32A3.754,3.754,0,1,0,7.057,7Zm-2.472.738A3.578,3.578,0,1,1,8.49,3.927,3.582,3.582,0,0,1,4.911,7.506Zm0-6.227A2.649,2.649,0,1,0,7.56,3.927,2.652,2.652,0,0,0,4.911,1.279Z\" transform=\"translate(-0.484 0.5)\" fill=\"#9fa5d3\" />\n </g>\n </svg>\n);","export const AddIcon = () => (\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"10\" height=\"10\" viewBox=\"0 0 10 10\" fill=\"none\">\n <path d=\"M9.66667 5.66668H5.66667V9.66668H4.33333V5.66668H0.333333V4.33334H4.33333V0.333344H5.66667V4.33334H9.66667V5.66668Z\" fill=\"white\" />\n </svg>\n);","import { default as MuiFilterAltOffOutlinedIcon } from '@mui/icons-material/FilterAltOffOutlined';\nimport type { SvgIconProps } from '@mui/material';\n\nexport const ClearFilterIcon = (props: SvgIconProps) => {\n return <MuiFilterAltOffOutlinedIcon {...props} />;\n};","export const CloseIcon = () => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"12\"\n height=\"12\"\n viewBox=\"0 0 12 12\"\n fill=\"none\"\n >\n <path\n className=\"fillPath\"\n d=\"M11.6667 1.175L10.4917 0L5.83333 4.65833L1.175 0L0 1.175L4.65833 5.83333L0 10.4917L1.175 11.6667L5.83333 7.00833L10.4917 11.6667L11.6667 10.4917L7.00833 5.83333L11.6667 1.175Z\"\n fill=\"#9FA5D3\"\n />\n </svg>\n);\n","export const ColumnSettingsIcon = () => (\n <svg xmlns=\"http://www.w3.org/2000/svg\" id=\"edit-table_1_\" data-name=\"edit-table (1)\" width=\"14.501\" height=\"14.501\" viewBox=\"0 0 14.501 14.501\">\n <path id=\"Path_6032\" data-name=\"Path 6032\" d=\"M179.7,259.5a.3.3,0,0,0-.08.145l-.659,2.8a.3.3,0,0,0,.294.371.277.277,0,0,0,.069-.008l2.794-.659a.3.3,0,0,0,.144-.08l3.952-3.952-2.564-2.564Zm0,0\" transform=\"translate(-173.888 -248.313)\" fill=\"#9fa5d3\" />\n <path id=\"Path_6033\" data-name=\"Path 6033\" d=\"M371.246,180.568l-.854-.854a1.237,1.237,0,0,0-1.709,0l-1.175,1.175,2.564,2.564,1.175-1.175a1.209,1.209,0,0,0,0-1.709Zm0,0\" transform=\"translate(-357.099 -174.291)\" fill=\"#9fa5d3\" />\n <path id=\"Path_6034\" data-name=\"Path 6034\" d=\"M4.133,11.48H1.511a.3.3,0,0,1-.3-.3V9.667H5.74a.6.6,0,0,0,.6-.6V6.646H8.8a.6.6,0,0,0,0-1.208H6.344V3.625h3.927v.6a.6.6,0,1,0,1.208,0V1.36A1.361,1.361,0,0,0,10.12,0H1.36A1.361,1.361,0,0,0,0,1.36v9.818a1.513,1.513,0,0,0,1.51,1.51H4.133a.6.6,0,0,0,0-1.208Zm1-3.021H1.209V6.646H5.136Zm0-3.021H1.209V3.625H5.136Zm0,0\" transform=\"translate(0 0)\" fill=\"#9fa5d3\" />\n </svg>\n);","export const DoubleArrow = () => (\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"9.519\" height=\"9.751\" viewBox=\"0 0 9.519 9.751\">\n <path id=\"fast-forward\" d=\"M32.59,97.751a.7.7,0,0,1-.493-1.189l3.687-3.687L32.1,89.188a.7.7,0,0,1,.985-.985l4.179,4.179a.7.7,0,0,1,0,.985l-4.179,4.179A.694.694,0,0,1,32.59,97.751Zm-3.454-.2,4.179-4.179a.7.7,0,0,0,0-.985L29.135,88.2a.7.7,0,0,0-.985.985l3.687,3.687L28.15,96.562a.7.7,0,0,0,.985.985Z\" transform=\"translate(-27.946 -87.999)\" fill=\"#9fa5d3\" />\n </svg>\n);","export const DownloadIcon = () => (\n <svg xmlns=\"http://www.w3.org/2000/svg\" id=\"direct-download\" width=\"14.154\" height=\"11.795\" viewBox=\"0 0 14.154 11.795\">\n <path className=\"fillPath\" id=\"Path_6246\" data-name=\"Path 6246\" d=\"M9.538,10.257a.442.442,0,0,1-.32-.137l-3.1-3.244a.443.443,0,0,1,.32-.748H8.064V2.737A.738.738,0,0,1,8.8,2h1.474a.738.738,0,0,1,.737.737V6.128h1.622a.443.443,0,0,1,.32.748l-3.1,3.244A.442.442,0,0,1,9.538,10.257Z\" transform=\"translate(-2.461 -2)\" fill=\"#9fa5d3\" />\n <path className=\"fillPath\" id=\"Path_6247\" data-name=\"Path 6247\" d=\"M13.122,20.359H1.032A1.033,1.033,0,0,1,0,19.327v-.295A1.033,1.033,0,0,1,1.032,18h12.09a1.033,1.033,0,0,1,1.032,1.032v.295A1.033,1.033,0,0,1,13.122,20.359Z\" transform=\"translate(0 -8.564)\" fill=\"#9fa5d3\" />\n </svg>\n);","import { default as MuiExpandMoreIcon } from '@mui/icons-material/ExpandMore';\nimport type { SvgIconProps } from '@mui/material';\n\nexport const ExpandMoreIcon = (props: SvgIconProps) => {\n return <MuiExpandMoreIcon {...props} />;\n};","export const ListViewIcon = () => (\n <svg xmlns=\"http://www.w3.org/2000/svg\" id=\"list-text\" width=\"17.127\" height=\"11.777\" viewBox=\"0 0 17.127 11.777\">\n <g id=\"Group_160857\" data-name=\"Group 160857\" transform=\"translate(3.216 0)\">\n <g id=\"Group_160856\" data-name=\"Group 160856\" transform=\"translate(0 0)\">\n <path className=\"fillPath\" id=\"Path_2823\" data-name=\"Path 2823\" d=\"M107.951,80H97.25a1.07,1.07,0,0,0,0,2.14h10.7a1.07,1.07,0,0,0,0-2.14Z\" transform=\"translate(-96.18 -80)\" fill=\"#fff\" />\n </g>\n </g>\n <g id=\"Group_160859\" data-name=\"Group 160859\" transform=\"translate(0 0.005)\">\n <g id=\"Group_160858\" data-name=\"Group 160858\" transform=\"translate(0 0)\">\n <path className=\"fillPath\" id=\"Path_2824\" data-name=\"Path 2824\" d=\"M2.147,81.2a1.07,1.07,0,0,0-2.14,0,.911.911,0,0,0,0,.209.965.965,0,0,0,.059.2,1.242,1.242,0,0,0,.1.182A.979.979,0,0,0,.3,81.96a.947.947,0,0,0,.161.128.871.871,0,0,0,.182.1.883.883,0,0,0,.225.08.939.939,0,0,0,.209,0,1.07,1.07,0,0,0,.754-.31.979.979,0,0,0,.134-.166,1.242,1.242,0,0,0,.1-.182.993.993,0,0,0,.08-.2A.911.911,0,0,0,2.147,81.2Z\" transform=\"translate(-0.001 -80.135)\" fill=\"#fff\" />\n </g>\n </g>\n <g id=\"Group_160861\" data-name=\"Group 160861\" transform=\"translate(0.006 4.82)\">\n <g id=\"Group_160860\" data-name=\"Group 160860\" transform=\"translate(0 0)\">\n <path className=\"fillPath\" id=\"Path_2825\" data-name=\"Path 2825\" d=\"M2.32,225.2a.915.915,0,0,0,0-.209.866.866,0,0,0-.08-.2,1.071,1.071,0,0,0-.1-.187A.771.771,0,0,0,2,224.446,1.07,1.07,0,0,0,.18,225.2a1.067,1.067,0,0,0,.177.594,1.029,1.029,0,0,0,.139.16.781.781,0,0,0,.161.134.868.868,0,0,0,.182.1.909.909,0,0,0,.2.059.89.89,0,0,0,.209.021.912.912,0,0,0,.209,0,.869.869,0,0,0,.2-.059.894.894,0,0,0,.187-.1A.781.781,0,0,0,2,225.976a.782.782,0,0,0,.134-.16.861.861,0,0,0,.1-.182.906.906,0,0,0,.08-.225A.885.885,0,0,0,2.32,225.2Z\" transform=\"translate(-0.18 -224.135)\" fill=\"#fff\" />\n </g>\n </g>\n <g id=\"Group_160863\" data-name=\"Group 160863\" transform=\"translate(0.006 9.635)\">\n <g id=\"Group_160862\" data-name=\"Group 160862\">\n <path className=\"fillPath\" id=\"Path_2826\" data-name=\"Path 2826\" d=\"M2.318,369.2a.919.919,0,0,0,0-.209.909.909,0,0,0-.08-.2,1.24,1.24,0,0,0-.1-.182.78.78,0,0,0-.134-.16,1.07,1.07,0,0,0-1.509,0,.78.78,0,0,0-.134.16,1.24,1.24,0,0,0-.1.182.875.875,0,0,0-.059.2.92.92,0,0,0-.021.209,1.07,1.07,0,0,0,.316.754.784.784,0,0,0,.161.134.869.869,0,0,0,.182.1.907.907,0,0,0,.2.059.885.885,0,0,0,.209.021.907.907,0,0,0,.209,0,.865.865,0,0,0,.2-.059.892.892,0,0,0,.187-.1A.778.778,0,0,0,2,369.976a.782.782,0,0,0,.134-.161.855.855,0,0,0,.1-.182.909.909,0,0,0,.08-.225A.885.885,0,0,0,2.318,369.2Z\" transform=\"translate(-0.178 -368.135)\" fill=\"#fff\" />\n </g>\n </g>\n <g id=\"Group_160865\" data-name=\"Group 160865\" transform=\"translate(3.216 4.815)\">\n <g id=\"Group_160864\" data-name=\"Group 160864\">\n <path className=\"fillPath\" id=\"Path_2827\" data-name=\"Path 2827\" d=\"M109.021,224H97.25a1.07,1.07,0,0,0,0,2.14h11.771a1.07,1.07,0,0,0,0-2.14Z\" transform=\"translate(-96.18 -224)\" fill=\"#fff\" />\n </g>\n </g>\n <g id=\"Group_160867\" data-name=\"Group 160867\" transform=\"translate(3.216 9.631)\">\n <g id=\"Group_160866\" data-name=\"Group 160866\" transform=\"translate(0 0)\">\n <path className=\"fillPath\" id=\"Path_2828\" data-name=\"Path 2828\" d=\"M104.206,368H97.25a1.07,1.07,0,0,0,0,2.14h6.956a1.07,1.07,0,0,0,0-2.14Z\" transform=\"translate(-96.18 -368)\" fill=\"#fff\" />\n </g>\n </g>\n </svg>\n);","export const MoreIcon = () => (\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"4\" height=\"16\" viewBox=\"0 0 4 16\" fill=\"none\">\n <path d=\"M2 4C3.1 4 4 3.1 4 2C4 0.9 3.1 0 2 0C0.9 0 0 0.9 0 2C0 3.1 0.9 4 2 4ZM2 6C0.9 6 0 6.9 0 8C0 9.1 0.9 10 2 10C3.1 10 4 9.1 4 8C4 6.9 3.1 6 2 6ZM2 12C0.9 12 0 12.9 0 14C0 15.1 0.9 16 2 16C3.1 16 4 15.1 4 14C4 12.9 3.1 12 2 12Z\" fill=\"#9FA5D3\" />\n </svg>\n);","import type React from 'react';\n\nconst PaginationBackwardIcon: React.FC = (): React.JSX.Element => (\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"13\" height=\"12\" viewBox=\"0 0 13 12\" fill=\"none\">\n <path d=\"M12.41 10.59L7.82 6L12.41 1.41L11 0L5 6L11 12L12.41 10.59ZM0 0H2V12H0V0Z\" fill=\"#9FA5D3\" />\n </svg>\n);\n\nPaginationBackwardIcon.displayName = 'PaginationBackwardIcon';\n\nexport { PaginationBackwardIcon };","import type React from 'react';\n\nconst PaginationForwardIcon: React.FC = (): React.JSX.Element => (\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"13\" height=\"12\" viewBox=\"0 0 13 12\" fill=\"none\">\n <path d=\"M0.500004 1.41L5.09 6L0.500004 10.59L1.91 12L7.91 6L1.91 0L0.500004 1.41ZM12.91 12H10.91L10.91 0H12.91L12.91 12Z\" fill=\"#9FA5D3\" />\n </svg>\n);\n\nPaginationForwardIcon.displayName = 'PaginationForwardIcon';\n\nexport { PaginationForwardIcon };","import type React from 'react';\n\nconst PaginationNextIcon: React.FC = (): React.JSX.Element => (\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"8\" height=\"12\" viewBox=\"0 0 8 12\" fill=\"none\">\n <path d=\"M1.91 0L0.5 1.41L5.08 6L0.5 10.59L1.91 12L7.91 6L1.91 0Z\" fill=\"#9FA5D3\" />\n </svg>\n);\n\nPaginationNextIcon.displayName = 'PaginationNextIcon';\n\nexport { PaginationNextIcon };","import type React from 'react';\n\nconst PaginationPrevIcon: React.FC = (): React.JSX.Element => (\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"8\" height=\"12\" viewBox=\"0 0 8 12\" fill=\"none\">\n <path d=\"M6 12L7.41 10.59L2.83 6L7.41 1.41L6 0L0 6L6 12Z\" fill=\"#9FA5D3\" />\n </svg>\n);\n\nPaginationPrevIcon.displayName = 'PaginationPrevIcon';\n\nexport { PaginationPrevIcon };","export const SearchIcon = () => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"11.002\"\n height=\"11.363\"\n viewBox=\"0 0 11.002 11.363\"\n >\n <g\n id=\"Group_160786\"\n data-name=\"Group 160786\"\n transform=\"translate(0.25 0.25)\"\n >\n <path\n id=\"search_9_\"\n data-name=\"search (9)\"\n d=\"M10.9,9.5,8.421,6.92A4.211,4.211,0,1,0,5.2,8.425,4.167,4.167,0,0,0,7.61,7.663l2.5,2.6A.549.549,0,1,0,10.9,9.5ZM5.2,1.1A3.114,3.114,0,1,1,2.083,4.212,3.117,3.117,0,0,1,5.2,1.1Z\"\n transform=\"translate(-0.769 0.215)\"\n fill=\"#9fa5d3\"\n />\n <path\n id=\"search_9_-_Outline\"\n data-name=\"search (9) - Outline\"\n d=\"M10.508,10.683a.793.793,0,0,1-.576-.245L7.574,7.987A4.423,4.423,0,0,1,5.2,8.675a4.467,4.467,0,1,1,3.556-1.77L11.084,9.33a.8.8,0,0,1-.576,1.353ZM7.641,7.335l2.651,2.757a.293.293,0,0,0,.216.092.3.3,0,0,0,.216-.507L8.084,6.932l.145-.172a3.969,3.969,0,1,0-.763.7ZM5.2,7.576A3.364,3.364,0,1,1,8.56,4.212,3.367,3.367,0,0,1,5.2,7.576Zm0-6.227A2.864,2.864,0,1,0,8.06,4.212,2.867,2.867,0,0,0,5.2,1.349Z\"\n transform=\"translate(-0.769 0.215)\"\n fill=\"#9fa5d3\"\n />\n <path\n id=\"search_9_-_Outline-2\"\n data-name=\"search (9) - Outline\"\n d=\"M10.223,10.363a.758.758,0,0,1-.551-.234L7.295,7.656a4.388,4.388,0,0,1-2.383.7,4.432,4.432,0,1,1,3.51-1.732l2.352,2.446a.764.764,0,0,1-.551,1.294ZM7.352,7.1l2.63,2.735a.335.335,0,1,0,.482-.464L7.847,6.645,7.971,6.5a4,4,0,1,0-.77.7Zm-2.441.16A3.328,3.328,0,1,1,8.24,3.927,3.332,3.332,0,0,1,4.911,7.256Zm0-6.227a2.9,2.9,0,1,0,2.9,2.9A2.9,2.9,0,0,0,4.911,1.029Z\"\n transform=\"translate(-0.484 0.5)\"\n fill=\"#9fa5d3\"\n />\n <path\n id=\"search_9_-_Outline_-_Outline\"\n data-name=\"search (9) - Outline - Outline\"\n d=\"M10.223,10.613a1.006,1.006,0,0,1-.731-.311L7.254,7.974A4.676,4.676,0,1,1,9.588,3.927,4.7,4.7,0,0,1,8.747,6.6L10.954,8.9a1.014,1.014,0,0,1-.731,1.717ZM7.383,6.768l2.778,2.889a.085.085,0,1,0,.122-.117L7.51,6.656l.269-.32A3.754,3.754,0,1,0,7.057,7Zm-2.472.738A3.578,3.578,0,1,1,8.49,3.927,3.582,3.582,0,0,1,4.911,7.506Zm0-6.227A2.649,2.649,0,1,0,7.56,3.927,2.652,2.652,0,0,0,4.911,1.279Z\"\n transform=\"translate(-0.484 0.5)\"\n fill=\"#9fa5d3\"\n />\n </g>\n </svg>\n);\n","import type React from 'react';\n\nconst SortAscIcon: React.FC = (): React.JSX.Element => (\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"11.239\" height=\"10.416\" viewBox=\"0 0 11.239 10.416\">\n <g id=\"sort_1_\" data-name=\"sort (1)\" opacity=\"0.6\">\n <g id=\"Group_162906\" data-name=\"Group 162906\" transform=\"translate(4.66 9.046)\">\n <path id=\"Path_6298\" data-name=\"Path 6298\" d=\"M16.33,3H10.848a.518.518,0,0,0-.548.548.518.518,0,0,0,.548.548H16.33a.518.518,0,0,0,.548-.548A.549.549,0,0,0,16.33,3Z\" transform=\"translate(-10.3 -3)\" />\n </g>\n <g id=\"Group_162907\" data-name=\"Group 162907\" transform=\"translate(0 0)\">\n <path id=\"Path_6299\" data-name=\"Path 6299\" d=\"M4.541,15.5a.5.5,0,0,0-.384.164L1.964,17.857a.543.543,0,0,0,.768.768l2.193-2.193a.53.53,0,0,0,0-.768A.592.592,0,0,0,4.541,15.5Z\" transform=\"translate(-1.8 -15.5)\" />\n </g>\n <g id=\"Group_162908\" data-name=\"Group 162908\" transform=\"translate(2.193 0)\">\n <path id=\"Path_6300\" data-name=\"Path 6300\" d=\"M6.348,2.5a.518.518,0,0,0-.548.548v9.32a.548.548,0,1,0,1.1,0V3.048A.549.549,0,0,0,6.348,2.5Z\" transform=\"translate(-5.8 -2.5)\" />\n </g>\n <g id=\"Group_162909\" data-name=\"Group 162909\" transform=\"translate(4.66 6.305)\">\n <path id=\"Path_6301\" data-name=\"Path 6301\" d=\"M15.234,8H10.848a.548.548,0,0,0,0,1.1h4.386a.518.518,0,0,0,.548-.548A.549.549,0,0,0,15.234,8Z\" transform=\"translate(-10.3 -8)\" />\n </g>\n <g id=\"Group_162910\" data-name=\"Group 162910\" transform=\"translate(4.66 3.563)\">\n <path id=\"Path_6302\" data-name=\"Path 6302\" d=\"M14.138,13H10.848a.548.548,0,0,0,0,1.1h3.289a.518.518,0,0,0,.548-.548A.549.549,0,0,0,14.138,13Z\" transform=\"translate(-10.3 -13)\" />\n </g>\n <g id=\"Group_162911\" data-name=\"Group 162911\" transform=\"translate(4.66 0.822)\">\n <path id=\"Path_6303\" data-name=\"Path 6303\" d=\"M13.041,18H10.848a.548.548,0,0,0,0,1.1h2.193a.518.518,0,0,0,.548-.548A.549.549,0,0,0,13.041,18Z\" transform=\"translate(-10.3 -18)\" />\n </g>\n </g>\n </svg>\n);\n\nSortAscIcon.displayName = 'SortAscIcon';\n\nexport { SortAscIcon };","import type React from 'react';\n\nconst SortDescIcon: React.FC = (): React.JSX.Element => (\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"11.239\" height=\"10.416\" viewBox=\"0 0 11.239 10.416\">\n <g id=\"sort_1_\" data-name=\"sort (1)\" opacity=\"0.6\">\n <g id=\"Group_162906\" data-name=\"Group 162906\" transform=\"translate(4.66 0.274)\">\n <path id=\"Path_6298\" data-name=\"Path 6298\" d=\"M16.33,4.1H10.848a.518.518,0,0,1-.548-.548A.518.518,0,0,1,10.848,3H16.33a.518.518,0,0,1,.548.548A.549.549,0,0,1,16.33,4.1Z\" transform=\"translate(-10.3 -3)\" />\n </g>\n <g id=\"Group_162907\" data-name=\"Group 162907\" transform=\"translate(0 7.127)\">\n <path id=\"Path_6299\" data-name=\"Path 6299\" d=\"M4.541,18.789a.5.5,0,0,1-.384-.164L1.964,16.432a.543.543,0,0,1,.768-.768l2.193,2.193a.53.53,0,0,1,0,.768A.592.592,0,0,1,4.541,18.789Z\" transform=\"translate(-1.8 -15.5)\" />\n </g>\n <g id=\"Group_162908\" data-name=\"Group 162908\" transform=\"translate(2.193 0)\">\n <path id=\"Path_6300\" data-name=\"Path 6300\" d=\"M6.348,12.916a.518.518,0,0,1-.548-.548V3.048a.548.548,0,1,1,1.1,0v9.32A.549.549,0,0,1,6.348,12.916Z\" transform=\"translate(-5.8 -2.5)\" />\n </g>\n <g id=\"Group_162909\" data-name=\"Group 162909\" transform=\"translate(4.66 3.015)\">\n <path id=\"Path_6301\" data-name=\"Path 6301\" d=\"M15.234,9.1H10.848a.548.548,0,0,1,0-1.1h4.386a.518.518,0,0,1,.548.548A.549.549,0,0,1,15.234,9.1Z\" transform=\"translate(-10.3 -8)\" />\n </g>\n <g id=\"Group_162910\" data-name=\"Group 162910\" transform=\"translate(4.66 5.756)\">\n <path id=\"Path_6302\" data-name=\"Path 6302\" d=\"M14.138,14.1H10.848a.548.548,0,0,1,0-1.1h3.289a.518.518,0,0,1,.548.548A.549.549,0,0,1,14.138,14.1Z\" transform=\"translate(-10.3 -13)\" />\n </g>\n <g id=\"Group_162911\" data-name=\"Group 162911\" transform=\"translate(4.66 8.498)\">\n <path id=\"Path_6303\" data-name=\"Path 6303\" d=\"M13.041,19.1H10.848a.548.548,0,0,1,0-1.1h2.193a.518.518,0,0,1,.548.548A.549.549,0,0,1,13.041,19.1Z\" transform=\"translate(-10.3 -18)\" />\n </g>\n </g>\n </svg>\n);\n\nSortDescIcon.displayName = 'SortDescIcon';\n\nexport { SortDescIcon };","export const TileViewIcon = () => (\n <svg xmlns=\"http://www.w3.org/2000/svg\" id=\"visualization\" width=\"11.777\" height=\"11.777\" viewBox=\"0 0 11.777 11.777\">\n <g id=\"Group_160869\" data-name=\"Group 160869\">\n <g id=\"Group_160868\" data-name=\"Group 160868\">\n <path className=\"fillPath\" id=\"Path_2829\" data-name=\"Path 2829\" d=\"M4.316,0H1.005A1.006,1.006,0,0,0,0,1.005v3.31A1.006,1.006,0,0,0,1.005,5.321h3.31A1.006,1.006,0,0,0,5.321,4.316V1.005A1.006,1.006,0,0,0,4.316,0Z\" fill=\"#9fa5d3\" />\n <path className=\"fillPath\" id=\"Path_2830\" data-name=\"Path 2830\" d=\"M284.981,0h-3.31a1.006,1.006,0,0,0-1.005,1.005v3.31a1.006,1.006,0,0,0,1.005,1.005h3.31a1.006,1.006,0,0,0,1.005-1.005V1.005A1.006,1.006,0,0,0,284.981,0Z\" transform=\"translate(-274.209)\" fill=\"#9fa5d3\" />\n <path className=\"fillPath\" id=\"Path_2831\" data-name=\"Path 2831\" d=\"M4.316,280.665H1.005A1.006,1.006,0,0,0,0,281.67v3.31a1.006,1.006,0,0,0,1.005,1.005h3.31a1.006,1.006,0,0,0,1.005-1.005v-3.31A1.006,1.006,0,0,0,4.316,280.665Z\" transform=\"translate(0 -274.209)\" fill=\"#9fa5d3\" />\n <path className=\"fillPath\" id=\"Path_2832\" data-name=\"Path 2832\" d=\"M284.981,280.665h-3.31a1.006,1.006,0,0,0-1.005,1.005v3.31a1.006,1.006,0,0,0,1.005,1.005h3.31a1.006,1.006,0,0,0,1.005-1.005v-3.31A1.006,1.006,0,0,0,284.981,280.665Z\" transform=\"translate(-274.209 -274.209)\" fill=\"#9fa5d3\" />\n </g>\n </g>\n </svg>\n);","import type React from 'react';\nimport { useState } from 'react';\n\nimport {\n Accordion as MuiAccordion,\n AccordionSummary as MuiAccordionSummary,\n AccordionDetails as MuiAccordionDetails,\n type AccordionProps as MuiAccordionProps,\n} from '@mui/material';\n\nimport { ExpandMoreIcon } from '../../assets/svg';\n\nexport interface AccordionProps extends Omit<MuiAccordionProps, 'children' | 'content'> {\n summaryContent: React.ReactNode;\n content: React.ReactNode;\n defaultExpanded?: boolean;\n disabled?: boolean;\n}\n\nconst Accordion: React.FC<AccordionProps> = ({\n summaryContent,\n content,\n defaultExpanded = false,\n disabled = false,\n ...restProps\n}) => {\n const [expanded, setExpanded] = useState<boolean>(defaultExpanded);\n\n return (\n <MuiAccordion\n expanded={expanded}\n onChange={(_, isExpanded) => setExpanded(isExpanded)}\n disabled={disabled}\n {...restProps}\n >\n <MuiAccordionSummary expandIcon={<ExpandMoreIcon />}>\n {summaryContent}\n </MuiAccordionSummary>\n <MuiAccordionDetails>{content}</MuiAccordionDetails>\n </MuiAccordion>\n );\n};\n\nAccordion.displayName = 'Accordion';\n\nexport default Accordion;\n","import type React from 'react';\n\nimport { Avatar as MuiAvatar, type AvatarProps as MuiAvatarProps } from '@mui/material';\n\nconst Avatar: React.FC<MuiAvatarProps> = ({\n children,\n ...restProps\n}) => {\n return (\n <MuiAvatar {...restProps}>\n {children}\n </MuiAvatar>\n );\n};\n\nAvatar.displayName = 'Avatar';\n\nexport default Avatar;\n","import type React from 'react';\n\nimport { AvatarGroup as MuiAvatarGroup, type AvatarGroupProps as MuiAvatarGroupProps } from '@mui/material';\nexport interface AvatarGroupProps extends MuiAvatarGroupProps {\n children: React.ReactNode;\n}\n\nconst AvatarGroup: React.FC<AvatarGroupProps> = ({\n children,\n ...restProps\n}) => {\n return (\n <MuiAvatarGroup {...restProps}>\n {children}\n </MuiAvatarGroup>\n );\n};\n\nAvatarGroup.displayName = 'AvatarGroup';\n\nexport default AvatarGroup;\n","import type React from 'react';\nimport type { CSSProperties } from 'react';\n\nimport {\n Avatar as MuiAvatar,\n type AvatarProps as MuiAvatarProps,\n styled,\n Box\n} from '@mui/material';\n\nimport { Style } from './style';\n\nimport { Tooltip } from '../toolTip';\n\nexport interface CustomAvatarProps extends MuiAvatarProps {\n className?: string;\n tooltipTitle?: string;\n background?: string;\n sx?: CSSProperties;\n statusDotColor: string;\n}\n\nconst Avatar: React.FC<CustomAvatarProps> = ({\n className = '',\n tooltipTitle = '',\n background = '',\n statusDotColor = '',\n children,\n sx = {},\n ...restProps\n}) => {\n return (\n <Box className={`avatarContainer ${className}`}>\n <MuiAvatar {...restProps} sx={{ ...sx, background }}>\n {children}\n </MuiAvatar>\n\n <Box className={`statusDotContainer ${className}`}>\n <Tooltip title={tooltipTitle} arrow>\n <Box\n className=\"statusDot\"\n sx={{ background: statusDotColor }}\n />\n </Tooltip>\n </Box>\n </Box>\n );\n};\n\nAvatar.displayName = 'Avatar';\n\nexport default styled(Avatar)(Style);\n","export const Style = () => ({\n '.avatarContainer': {\n position: 'relative',\n },\n '.statusDot': {\n width: '7px',\n height: '7px',\n borderRadius: '50%',\n },\n '.statusDotContainer': {\n width: '5px',\n height: '5px',\n borderRadius: '5px',\n position: 'relative',\n bottom: '3px',\n '&.user': {\n left: '16px',\n },\n '&.group': {\n left: '19px',\n },\n }\n});\n","import type React from 'react';\nimport type { CSSProperties } from 'react';\n\nimport { Avatar as MuiAvatar, Typography } from '@mui/material';\n\nimport { getFormattedName } from '../../utils/global';\nexport interface AvatarTitleProps {\n img?: string;\n background?: string;\n name: string;\n color?: string;\n onClick?: (event: React.MouseEvent<HTMLDivElement>) => void;\n className?: string;\n sx?: CSSProperties;\n}\n\nconst AvatarTitle: React.FC<AvatarTitleProps> = ({\n img = '',\n background = '',\n name = '',\n color = '',\n onClick = () => { },\n className = '',\n sx = {},\n}) => {\n const NAME = getFormattedName(name)\n return (\n <MuiAvatar\n src={img}\n className={`avatar-title-wrapper ${className}`}\n alt={NAME}\n sx={{ ...sx, background: background }}\n onClick={onClick}\n >\n <Typography\n variant=\"body1\"\n className=\"avatar-title-typography\"\n sx={{ color: color }}\n noWrap\n >\n {NAME}\n </Typography>\n </MuiAvatar>\n );\n};\n\nAvatarTitle.displayName = 'AvatarTitle';\n\nexport default AvatarTitle;\n","import type React from 'react';\n\nimport { Badge as MuiBadge } from '@mui/material';\nimport type { BadgeProps as MuiBadgeProps } from '@mui/material/Badge';\n\nexport interface BadgeProps extends Omit<MuiBadgeProps, 'color' | 'variant'> {\n color?: 'default' | 'primary' | 'secondary' | 'error' | 'info' | 'success' | 'warning';\n badgeContent?: React.ReactNode;\n variant?: MuiBadgeProps['variant'];\n showZero?: boolean;\n invisible?: boolean;\n overlap?: MuiBadgeProps['overlap'];\n anchorOrigin?: {\n vertical: 'top' | 'bottom';\n horizontal: 'left' | 'right';\n };\n className?: string;\n children?: React.ReactNode;\n}\n\nconst Badge: React.FC<BadgeProps> = ({\n color = 'secondary',\n badgeContent = 0,\n variant = 'dot',\n showZero = true,\n invisible = false,\n overlap = 'circular',\n anchorOrigin = { vertical: 'top', horizontal: 'right' },\n className = '',\n children,\n}) => {\n return (\n <MuiBadge\n color={color}\n badgeContent={badgeContent}\n variant={variant}\n showZero={showZero}\n invisible={invisible}\n overlap={overlap}\n anchorOrigin={anchorOrigin}\n className={className}\n >\n {children}\n </MuiBadge>\n );\n};\n\nBadge.displayName = 'Badge';\n\nexport default Badge;\n","import type React from 'react';\n\nimport { Breadcrumbs, styled } from '@mui/material';\n\nimport { Style } from './style';\n\nimport { DoubleArrow } from '../../assets/svg/doubleArrow';\nimport { Link } from '../link';\nimport { Typography } from '../typography';\nexport interface BreadcrumbItem {\n label: string;\n path?: string;\n}\nexport interface BreadcrumbProps {\n headers: BreadcrumbItem[];\n onHeaderClick: (item: BreadcrumbItem) => void;\n className?: string;\n ariaLabel?: string;\n}\n\nconst Breadcrumb: React.FC<BreadcrumbProps> = ({\n headers = [],\n onHeaderClick = () => { },\n className = '',\n ariaLabel = '',\n}) => {\n return (\n <Breadcrumbs separator={<DoubleArrow />} aria-label={ariaLabel} className={className}>\n {headers.map((item, index) => {\n const key = `${item.label}-${index}`;\n if (item.path) {\n // Clickable item\n return (\n <Link\n key={key}\n color=\"inherit\"\n onClick={() => onHeaderClick(item)}\n underline=\"none\"\n >\n <Typography\n variant=\"body1\"\n className=\"breadcrumb-link\"\n >\n {item.label}\n </Typography>\n </Link>\n );\n }\n\n // Non-clickable item\n return (\n <Typography\n key={key}\n variant=\"body1\"\n className=\"breadcrumb-text\"\n >\n {item.label}\n </Typography>\n );\n })}\n </Breadcrumbs>\n );\n};\n\nBreadcrumb.displayName = 'BreadCrumb';\n\nexport default styled(Breadcrumb)(Style);\n","import type { Theme } from '@mui/material';\n\nexport const Style = ({ theme }: { theme: Theme }) => ({\n // Clickable link text\n '& .breadcrumb-link': {\n color: theme.palette.primary.main,\n fontSize: '14px',\n cursor: 'pointer',\n },\n\n // Non-clickable text\n '& .breadcrumb-text': {\n color: theme.palette.text.secondary,\n fontSize: '14px',\n cursor: 'default',\n },\n});\n","import type React from 'react';\n\nimport { Button as MuiButton, styled, type ButtonProps as MuiButtonProps } from '@mui/material';\n\nimport { Style } from './style';\nexport interface ButtonProps extends Omit<MuiButtonProps, 'variant'> {\n children: React.ReactNode;\n onClick?: () => void;\n variant?: 'contained' | 'outlined' | 'text';\n}\n\nconst Button: React.FC<ButtonProps> = ({\n children,\n onClick = () => { },\n variant = 'contained',\n size = 'medium',\n color = 'primary',\n disabled = false,\n fullWidth = false,\n className = '',\n ...restProps\n}) => {\n return (\n <MuiButton\n variant={variant}\n className={className}\n size={size}\n color={color}\n disabled={disabled}\n fullWidth={fullWidth}\n onClick={onClick}\n {...restProps}\n >\n {children}\n </MuiButton>\n );\n};\n\nButton.displayName = 'Button';\n\nexport default styled(Button)(Style);\n","import type { Theme } from '@mui/material';\n\nexport const Style = ({ theme }: { theme: Theme }) => {\n return {\n borderRadius: '20px !important',\n '&.MuiButton-contained.MuiButton-colorPrimary': {\n background: `linear-gradient(90deg, ${theme.palette.primary.main} 0%, ${theme.palette.primary.main !== `${theme.palette.primary.light}` ? theme.palette.primary.light : '#44C9E9'} 100%) !important`\n },\n }\n};","import type React from 'react';\n\nimport { EffectCoverflow, Pagination } from 'swiper/modules';\nimport { Swiper, SwiperSlide, type SwiperSlideProps } from 'swiper/react';\n\nimport 'swiper/css';\nimport 'swiper/css/effect-coverflow';\nimport 'swiper/css/pagination';\ninterface Option {\n value: string;\n label: string;\n image?: string;\n children?: React.ReactNode;\n}\ninterface CarousalProps {\n options: Option[];\n sliderProps?: Omit<SwiperSlideProps, 'key' | 'children'>;\n}\n\nconst Carousal: React.FC<CarousalProps> = (props: CarousalProps): React.JSX.Element => {\n const { options = [], sliderProps = {}, ...restProps } = props;\n\n return (\n <Swiper\n modules={[EffectCoverflow, Pagination]}\n {...restProps}\n >\n {options.map((option: Option) => (\n <SwiperSlide key={option.value} {...sliderProps}>\n {option.children && option.children}\n </SwiperSlide>\n ))}\n </Swiper>\n );\n};\n\nCarousal.displayName = 'Carousal';\n\nexport default Carousal;\n","import type React from 'react';\n\nimport {\n Checkbox as MuiCheckbox,\n FormControlLabel,\n type CheckboxProps as MuiCheckboxProps,\n type FormControlLabelProps\n} from '@mui/material';\nexport interface CheckboxProps extends Omit<MuiCheckboxProps, 'onChange'> {\n label?: string;\n onChange?: (event: React.ChangeEvent<HTMLInputElement>, checked: boolean) => void;\n formControlLabelProps?: Omit<FormControlLabelProps, 'control' | 'label'>;\n color?: 'default' | 'primary' | 'secondary' | 'error' | 'info' | 'success' | 'warning';\n size?: 'small' | 'medium' | 'large';\n}\n\nconst CheckBox: React.FC<CheckboxProps> = ({\n label,\n checked = false,\n onChange,\n disabled = false,\n indeterminate = false,\n color = 'primary',\n size = 'medium',\n formControlLabelProps,\n ...restProps\n}) => {\n const checkbox = (\n <MuiCheckbox\n checked={checked}\n onChange={onChange}\n disabled={disabled}\n indeterminate={indeterminate}\n color={color}\n size={size}\n {...restProps}\n />\n );\n\n if (label) {\n return (\n <FormControlLabel\n control={checkbox}\n label={label}\n disabled={disabled}\n {...formControlLabelProps}\n />\n );\n }\n\n return checkbox;\n};\n\nCheckBox.displayName = 'CheckBox';\n\nexport default CheckBox;\n","import React from 'react';\n\nimport { Chip as MuiChip, type ChipProps as MuiChipProps } from '@mui/material';\nexport interface ChipProps extends MuiChipProps {\n label: React.ReactNode;\n color?:\n | 'default'\n | 'primary'\n | 'secondary'\n | 'error'\n | 'success'\n | 'info'\n | 'warning';\n icon?: React.ReactElement;\n onClick?: () => void;\n onDelete?: () => void;\n variant?: 'filled' | 'outlined';\n size?: 'small' | 'medium';\n className?: string;\n}\n\nexport const Chip: React.FC<ChipProps> = ({\n label = '',\n color = 'default',\n icon,\n onClick = () => { },\n onDelete = () => { },\n variant = 'filled',\n size = 'medium',\n className = '',\n ...restProps\n}) => (\n <MuiChip\n className={className}\n label={label}\n color={color}\n icon={icon}\n onClick={onClick}\n onDelete={onDelete}\n variant={variant}\n size={size}\n {...restProps}\n />\n);\n\nexport default Chip;\n","import type React from 'react';\n\nimport { ChromePicker } from 'react-color';\n\nimport type { ColorResult } from 'react-color';\n\nexport interface ColorPickerProps {\n color: string;\n onChangeComplete: (color: ColorResult) => void;\n disableAlpha?: boolean;\n}\n\nconst ColorPicker: React.FC<ColorPickerProps> = ({\n color = '',\n onChangeComplete = () => { },\n disableAlpha = true,\n}) => {\n return (\n <ChromePicker\n color={color}\n onChangeComplete={onChangeComplete}\n disableAlpha={disableAlpha}\n />\n );\n};\n\nColorPicker.displayName = 'ColorPicker';\n\nexport default ColorPicker;\n","import type React from 'react';\n\nimport dayjs from 'dayjs';\n\nimport type { TextFieldProps } from '@mui/material/TextField';\nimport { DatePicker as MuiDatePicker, LocalizationProvider } from '@mui/x-date-pickers';\nimport { AdapterDayjs } from '@mui/x-date-pickers/AdapterDayjs';\nimport type { FieldChangeHandlerContext } from '@mui/x-date-pickers/internals';\nimport type { DateValidationError } from '@mui/x-date-pickers/models';\n\nimport { CloseIcon } from '../../assets/svg';\nimport { IconButton } from '../iconButton';\nimport { TextField } from '../textField';\n\nimport type { Dayjs } from 'dayjs';\nexport interface DatePickerProps {\n value: string;\n handleDateChange: (date: Dayjs | null, _context?: FieldChangeHandlerContext<DateValidationError>) => void;\n format: string;\n ariaLabel?: string;\n enableAccessibleFieldDOMStructure?: boolean;\n className?: string;\n slotProps?: React.ComponentProps<typeof MuiDatePicker>['slotProps'];\n slots?: React.ComponentProps<typeof MuiDatePicker>['slots'];\n}\n\nconst DatePicker: React.FC<DatePickerProps> = ({\n value = null,\n handleDateChange = () => { },\n format = 'DD/MM/YYYY',\n ariaLabel = '',\n enableAccessibleFieldDOMStructure = false,\n className = '',\n slotProps = {}, // slotProps let you customize props passed to those internal components\n slots = {}, // slots let you override which components are rendered internally\n}) => {\n\n return (\n <LocalizationProvider dateAdapter={AdapterDayjs}>\n <MuiDatePicker\n className={className}\n aria-label={ariaLabel}\n value={value ? dayjs(value) : undefined}\n onChange={handleDateChange}\n format={format}\n slotProps={slotProps}\n enableAccessibleFieldDOMStructure={enableAccessibleFieldDOMStructure}\n slots={{\n ...slots, // spread other slots props\n textField: (params: TextFieldProps) => {\n const { label, helperText, ...restParams } = params;\n const labelString = typeof label === 'string' ? label : undefined;\n const helperTextString = typeof helperText === 'string' ? helperText : undefined;\n\n return (\n <TextField\n {...restParams}\n label={labelString}\n helperText={helperTextString}\n fullWidth\n size='small'\n slotProps={{\n input: {\n ...(params.InputProps as Record<string, unknown>),\n endAdornment: value ? (\n <IconButton size='small' onClick={() => handleDateChange(null)}>\n <CloseIcon />\n </IconButton>\n ) : (\n (params.InputProps as { endAdornment?: React.ReactNode }).endAdornment\n ),\n },\n }}\n />\n );\n },\n }}\n />\n </LocalizationProvider>\n );\n};\n\nDatePicker.displayName = 'DatePicker';\n\nexport default DatePicker;","import React, { useEffect, useRef, useState } from 'react';\n\nimport dayjs from 'dayjs';\nimport customParseFormat from 'dayjs/plugin/customParseFormat';\n\nimport CalendarMonthIcon from '@mui/icons-material/CalendarMonth';\nimport ChevronLeftIcon from '@mui/icons-material/ChevronLeft';\nimport ChevronRightIcon from '@mui/icons-material/ChevronRight';\nimport KeyboardDoubleArrowLeftIcon from '@mui/icons-material/KeyboardDoubleArrowLeft';\nimport KeyboardDoubleArrowRightIcon from '@mui/icons-material/KeyboardDoubleArrowRight';\nimport {\n Box,\n Paper,\n List,\n ListItemButton,\n Popper,\n styled,\n} from '@mui/material';\nimport Fade from '@mui/material/Fade';\n\nimport { Style } from './style';\n\nimport { months, weekDays } from '../../constants/dateConstants';\nimport { Button } from '../button';\nimport { IconButton } from '../iconButton';\nimport { TextField } from '../textField';\nimport { Typography } from '../typography';\n\nimport type { Dayjs } from 'dayjs';\n\ndayjs.extend(customParseFormat);\n\ninterface DateRangePickerProps {\n value?: [Dayjs | null, Dayjs | null];\n onChange?: (dates: [Dayjs | null, Dayjs | null] | null) => void;\n presets?: Array<{ label: string; value: [Dayjs, Dayjs] }>;\n format?: string;\n placeholder?: [string, string];\n primaryColor?: string;\n className?: string;\n}\n\nconst DateRangePicker: React.FC<DateRangePickerProps> = ({\n value = [null, null],\n onChange,\n presets = [],\n format = 'DD/MM/YYYY',\n placeholder = ['From Date', 'To Date'],\n className = '',\n}) => {\n const [isOpen, setIsOpen] = useState(false);\n const [selectedDates, setSelectedDates] =\n useState<[Dayjs | null, Dayjs | null]>(value);\n const [inputValues, setInputValues] = useState<[string, string]>(['', '']);\n const [hoverDate, setHoverDate] = useState<Dayjs | null>(null);\n const [currentMonth, setCurrentMonth] = useState(dayjs());\n const [selectingStartDate, setSelectingStartDate] = useState(true);\n const [viewMode, setViewMode] = useState<'date' | 'month' | 'year'>('date');\n const [yearRangeStart, setYearRangeStart] = useState(\n Math.floor(dayjs().year() / 10) * 10\n );\n const [activeCalendar, setActiveCalendar] = useState<0 | 1>(0);\n const [anchorEl, setAnchorEl] = useState<HTMLDivElement | null>(null);\n const pickerRef = useRef<HTMLDivElement | null>(null);\n const popperRef = useRef<HTMLElement | null>(null);\n\n useEffect(() => {\n const valueChanged =\n value[0]?.valueOf() !== selectedDates[0]?.valueOf() ||\n value[1]?.valueOf() !== selectedDates[1]?.valueOf();\n\n if (valueChanged) {\n setSelectedDates(value);\n setInputValues([\n value[0] ? value[0].format(format) : '',\n value[1] ? value[1].format(format) : '',\n ]);\n if (value[0]) {\n setCurrentMonth(value[0]);\n }\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [value, format]);\n\n useEffect(() => {\n const handleClickOutside = (e: MouseEvent) => {\n const target = e.target as Node | null;\n const clickedInsidePicker = pickerRef.current?.contains(target);\n const clickedInsidePopper = popperRef.current?.contains(target);\n if (!clickedInsidePicker && !clickedInsidePopper) setIsOpen(false);\n };\n\n document.addEventListener('mousedown', handleClickOutside);\n return () => document.removeEventListener('mousedown', handleClickOutside);\n }, []);\n\n useEffect(() => {\n if (isOpen && selectedDates[0]) setCurrentMonth(selectedDates[0]);\n if (isOpen) setViewMode('date');\n }, [isOpen, selectedDates]);\n\n const handleInputChange = (index: 0 | 1, value: string) => {\n const newInputValues: [string, string] = [...inputValues] as [\n string,\n string\n ];\n newInputValues[index] = value;\n setInputValues(newInputValues);\n\n const parsedDate = dayjs(value, format, true);\n if (parsedDate.isValid()) {\n const newDates: [Dayjs | null, Dayjs | null] = [...selectedDates];\n newDates[index] = parsedDate;\n\n if (newDates[0] && newDates[1] && newDates[0].isAfter(newDates[1])) {\n const swapped: [Dayjs, Dayjs] = [newDates[1], newDates[0]];\n setSelectedDates(swapped);\n setInputValues([swapped[0].format(format), swapped[1].format(format)]);\n onChange?.(swapped);\n } else {\n setSelectedDates(newDates);\n if (newDates[0] && newDates[1]) {\n onChange?.(newDates as [Dayjs, Dayjs]);\n }\n }\n\n if (newDates[0]) {\n setCurrentMonth(newDates[0]);\n }\n }\n };\n\n const handleInputBlur = (index: 0 | 1) => {\n const newInputValues: [string, string] = [...inputValues] as [\n string,\n string\n ];\n if (selectedDates[index]) {\n newInputValues[index] = selectedDates[index].format(format);\n } else {\n newInputValues[index] = '';\n }\n setInputValues(newInputValues);\n };\n\n const daysInMonth = (date: Dayjs) => date.daysInMonth();\n const firstDayOfMonth = (date: Dayjs) => date.startOf('month').day();\n\n const generateCalendarDays = (month: Dayjs) => {\n const days: Dayjs[] = [];\n const firstDay = firstDayOfMonth(month);\n const totalDays = daysInMonth(month);\n const prevMonthDays = month.subtract(1, 'month').daysInMonth();\n for (let i = firstDay - 1; i >= 0; i--)\n days.push(month.subtract(1, 'month').date(prevMonthDays - i));\n for (let i = 1; i <= totalDays; i++) days.push(month.date(i));\n const remainingDays = 42 - days.length;\n for (let i = 1; i <= remainingDays; i++)\n days.push(month.add(1, 'month').date(i));\n return days;\n };\n\n const handleDateClick = (date: Dayjs) => {\n if (selectingStartDate || !selectedDates[0]) {\n setSelectedDates([date, null]);\n setInputValues([date.format(format), '']);\n setSelectingStartDate(false);\n } else {\n const [start] = selectedDates;\n const newDates: [Dayjs, Dayjs] = date.isBefore(start)\n ? [date, start]\n : [start, date];\n setSelectedDates(newDates);\n setInputValues([newDates[0].format(format), newDates[1].format(format)]);\n setSelectingStartDate(true);\n onChange?.(newDates);\n setIsOpen(false);\n }\n };\n\n const handlePresetClick = (presetDates: [Dayjs, Dayjs]) => {\n setSelectedDates(presetDates);\n setInputValues([\n presetDates[0].format(format),\n presetDates[1].format(format),\n ]);\n setSelectingStartDate(true);\n onChange?.(presetDates);\n setIsOpen(false);\n };\n\n const handleMonthClick = (monthIndex: number) => {\n const newMonth =\n activeCalendar === 0\n ? currentMonth.month(monthIndex)\n : currentMonth.add(1, 'month').month(monthIndex);\n setCurrentMonth(newMonth);\n setViewMode('date');\n };\n\n const handleYearClick = (year: number) => {\n const newMonth =\n activeCalendar === 0\n ? currentMonth.year(year)\n : currentMonth.add(1, 'month').year(year);\n setCurrentMonth(newMonth);\n setViewMode('month');\n };\n\n const handleMonthYearClick = (calendarIndex: 0 | 1) => {\n setActiveCalendar(calendarIndex);\n if (viewMode === 'date') setViewMode('month');\n else if (viewMode === 'month') {\n setViewMode('year');\n const targetMonth =\n calendarIndex === 0 ? currentMonth : currentMonth.add(1, 'month');\n setYearRangeStart(Math.floor(targetMonth.year() / 10) * 10);\n }\n };\n\n const isDateInRange = (date: Dayjs) => {\n const [start, end] = selectedDates;\n if (!start || !end) return false;\n return date.isAfter(start, 'day') && date.isBefore(end, 'day');\n };\n\n const isDateSelected = (date: Dayjs) => {\n const [start, end] = selectedDates;\n return !!(\n (start && date.isSame(start, 'day')) ||\n (end && date.isSame(end, 'day'))\n );\n };\n\n const isDateHovered = (date: Dayjs) => {\n if (!hoverDate || !selectedDates[0] || selectedDates[1]) return false;\n const start = selectedDates[0];\n return date.isAfter(start, 'day') && date.isBefore(hoverDate, 'day');\n };\n\n const renderMonthPicker = (calendarIndex: 0 | 1) => {\n const targetMonth =\n calendarIndex === 0 ? currentMonth : currentMonth.add(1, 'month');\n return (\n <Box className='gridBox'>\n {months.map((month, index) => {\n const isCurrentMonth =\n index === targetMonth.month() && activeCalendar === calendarIndex;\n return (\n <Button\n key={month}\n onClick={() => handleMonthClick(index)}\n className={`calendarYearButton ${isCurrentMonth ? 'currentMonth' : ''\n }`}\n >\n {month}\n </Button>\n );\n })}\n </Box>\n );\n };\n\n const renderYearPicker = (calendarIndex: 0 | 1) => {\n const years: number[] = [];\n const start = yearRangeStart;\n const end = start + 9;\n const targetMonth =\n calendarIndex === 0 ? currentMonth : currentMonth.add(1, 'month');\n years.push(start - 1);\n for (let y = start; y <= end; y++) years.push(y);\n years.push(end + 1);\n return (\n <Box className='gridBox'>\n {years.map((y) => {\n const isOther = y === start - 1 || y === end + 1;\n const isCurrentYear =\n y === targetMonth.year() && activeCalendar === calendarIndex;\n return (\n <Button\n key={y}\n onClick={() => handleYearClick(y)}\n disabled={isOther}\n className={`calendarYearButton \n ${isCurrentYear ? 'currentYear' : ''} \n ${isOther ? 'otherYear' : ''}`}\n >\n {y}\n </Button>\n );\n })}\n </Box>\n );\n };\n\n const renderCalendar = (month: Dayjs, offset: number = 0) => {\n const displayMonth = month.add(offset, 'month');\n const calendarIndex = offset as 0 | 1;\n const handleNavigation = (\n dir: 'prev-year' | 'prev-month' | 'next-month' | 'next-year'\n ) => {\n if (viewMode === 'date') {\n if (dir === 'prev-year')\n setCurrentMonth(currentMonth.subtract(1, 'year'));\n else if (dir === 'prev-month')\n setCurrentMonth(currentMonth.subtract(1, 'month'));\n else if (dir === 'next-month')\n setCurrentMonth(currentMonth.add(1, 'month'));\n else setCurrentMonth(currentMonth.add(1, 'year'));\n } else if (viewMode === 'month') {\n if (dir === 'prev-year')\n setCurrentMonth(currentMonth.subtract(1, 'year'));\n else if (dir === 'next-year')\n setCurrentMonth(currentMonth.add(1, 'year'));\n } else {\n if (dir === 'prev-year') setYearRangeStart((s) => s - 10);\n else if (dir === 'next-year') setYearRangeStart((s) => s + 10);\n }\n };\n const getHeaderLabel = () =>\n viewMode === 'date'\n ? displayMonth.format('MMM YYYY')\n : viewMode === 'month'\n ? displayMonth.format('YYYY')\n : `${yearRangeStart}-${yearRangeStart + 9}`;\n const days = viewMode === 'date' ? generateCalendarDays(displayMonth) : [];\n\n\n return (\n <Paper elevation={0} className='paperContainer'>\n <Box\n className={`calendarHeader \n ${viewMode === 'date'\n ? offset === 0\n ? 'startAlign'\n : 'endAlign'\n : 'centerAlign'\n }`}\n >\n {((viewMode === 'date' && offset === 0) || viewMode !== 'date') && (\n <>\n <IconButton\n size='small'\n onClick={() => handleNavigation('prev-year')}\n >\n <KeyboardDoubleArrowLeftIcon fontSize='small' />\n </IconButton>\n {viewMode === 'date' && (\n <IconButton\n size='small'\n onClick={() => handleNavigation('prev-month')}\n >\n <ChevronLeftIcon fontSize='small' />\n </IconButton>\n )}\n </>\n )}\n\n <Typography\n variant='body2'\n onClick={() => handleMonthYearClick(calendarIndex)}\n className='monthLabel'\n >\n {getHeaderLabel()}\n </Typography>\n\n {((viewMode === 'date' && offset === 1) || viewMode !== 'date') && (\n <>\n {viewMode === 'date' && (\n <IconButton\n size='small'\n onClick={() => handleNavigation('next-month')}\n >\n <ChevronRightIcon fontSize='small' />\n </IconButton>\n )}\n <IconButton\n size='small'\n onClick={() => handleNavigation('next-year')}\n >\n <KeyboardDoubleArrowRightIcon fontSize='small' />\n </IconButton>\n </>\n )}\n </Box>\n\n {viewMode === 'date' && (\n <Box className='weekGrid'>\n {weekDays.map((d) => (\n <Typography key={d} className='weekDayLabel'>\n {d}\n </Typography>\n ))}\n {days.map((day) => {\n const isCurrentMonth = day.month() === displayMonth.month();\n const isToday = day.isSame(dayjs(), 'day');\n let isInRange = false;\n let isSelected = false;\n let isHovered = false;\n\n if (isCurrentMonth) {\n isInRange = isDateInRange(day);\n isSelected = isDateSelected(day);\n isHovered = isDateHovered(day);\n }\n return (\n <Box\n key={day.valueOf()}\n component='button'\n onClick={() => isCurrentMonth && handleDateClick(day)}\n onMouseEnter={() => isCurrentMonth && setHoverDate(day)}\n onMouseLeave={() => setHoverDate(null)}\n className={`calendarDayButton\n ${!isCurrentMonth ? 'notCurrentMonth' : ''}\n ${isToday ? 'today' : ''}\n ${isSelected ? 'selected' : ''}\n ${isInRange ? 'inRange' : ''}\n ${isHovered ? 'hovered' : ''}\n `}\n >\n {day.date()}\n </Box>\n );\n })}\n </Box>\n )}\n\n {viewMode === 'month' && renderMonthPicker(calendarIndex)}\n {viewMode === 'year' && renderYearPicker(calendarIndex)}\n </Paper>\n );\n };\n\n return (\n <Box\n ref={(el: HTMLDivElement | null) => {\n pickerRef.current = el;\n setAnchorEl(el);\n }}\n className={`${className} pickerContainer`}\n >\n <Box className='inputBox'>\n <TextField\n value={inputValues[0]}\n onChange={(e) => handleInputChange(0, e.target.value)}\n onBlur={() => handleInputBlur(0)}\n onClick={() => setIsOpen((s) => !s)}\n placeholder={placeholder[0]}\n variant='standard'\n size='small'\n className='styledTextField'\n slotProps={{\n input: {\n disableUnderline: true,\n },\n }}\n />\n <Typography>→</Typography>\n <TextField\n value={inputValues[1]}\n onChange={(e) => handleInputChange(1, e.target.value)}\n onBlur={() => handleInputBlur(1)}\n onClick={() => setIsOpen((s) => !s)}\n placeholder={placeholder[1]}\n variant='standard'\n size='small'\n slotProps={{\n input: {\n disableUnderline: true,\n },\n }}\n className='styledTextField'\n />\n <CalendarMonthIcon\n fontSize='small'\n color='primary'\n onClick={() => setIsOpen((s) => !s)}\n />\n </Box>\n\n <Popper\n open={isOpen}\n anchorEl={anchorEl}\n placement='bottom-start'\n transition\n modifiers={[{ name: 'offset', options: { offset: [0, 8] } }]}\n className={className}\n >\n {({ TransitionProps }) => (\n <Fade {...TransitionProps} timeout={200}>\n <Paper\n ref={(el) => {\n popperRef.current = el;\n }}\n elevation={3}\n className='popperPaper'\n >\n {presets.length > 0 && (\n <Box className='presetListContainer'>\n <List disablePadding>\n {presets.map((preset) => {\n const isSelected =\n selectedDates[0]?.isSame(preset.value[0], 'day') &&\n selectedDates[1]?.isSame(preset.value[1], 'day');\n return (\n <ListItemButton\n key={preset.label}\n onClick={() => handlePresetClick(preset.value)}\n selected={isSelected}\n className='presetListItem'\n >\n <Typography variant='body1'>\n {preset.label}\n </Typography>\n </ListItemButton>\n );\n })}\n </List>\n </Box>\n )}\n\n <Box className='calendarWrapper'>\n <Box>{renderCalendar(currentMonth, 0)}</Box>\n {viewMode === 'date' && (\n <Box>{renderCalendar(currentMonth, 1)}</Box>\n )}\n </Box>\n </Paper>\n </Fade>\n )}\n </Popper>\n </Box>\n );\n};\n\nexport default styled(DateRangePicker)(Style);\n","import type { Theme } from '@mui/material';\n\nexport const Style = ({ theme }: { theme: Theme }) => {\n return {\n '&.pickerContainer': {\n position: 'relative',\n display: 'inline-block',\n fontFamily: 'inherit',\n },\n '.dateFormat': {\n flex: 1,\n textAlign: 'center',\n fontSize: 14,\n },\n '.inputBox': {\n display: 'flex',\n alignItems: 'center',\n gap: 8,\n padding: '8px 12px',\n border: `1.5px solid ${theme.palette.primary.main}`,\n borderRadius: 8,\n backgroundColor: '#fff',\n cursor: 'pointer',\n minWidth: 275,\n height:35,\n transition: 'all 0.2s ease',\n '&:hover': {\n boxShadow: `0 0 0 2px ${theme.palette.primary.light}25`\n },\n },\n '.popperPaper': {\n height:'300px',\n marginTop: 8,\n display: 'flex',\n borderRadius: 8,\n overflow: 'hidden',\n boxShadow: '0 4px 20px rgba(0,0,0,0.12)',\n backgroundColor: '#fff',\n },\n '.presetListContainer': {\n minWidth: 160,\n borderRight: '1px solid #e0e0e0',\n },\n '.presetListItem': {\n '& .MuiTypography-root': {\n fontWeight: 500,\n fontSize:'15px'\n },\n padding: '6px 16px',\n '&.Mui-selected': {\n color: theme.palette.primary.main,\n background: 'transparent',\n },\n },\n '.calendarWrapper': {\n display: 'flex',\n gap: 24,\n padding: '6px 16px',\n backgroundColor: '#fff',\n },\n '.paperContainer': {\n width: 280,\n padding: 2,\n borderRadius: 2,\n boxShadow: 'none',\n background: 'transparent',\n },\n '.calendarHeader': {\n display: 'flex',\n alignItems: 'center',\n gap: 8,\n marginBottom: 8,\n },\n '.calendarHeader.startAlign': {\n justifyContent: 'flex-start',\n },\n '.calendarHeader.endAlign': {\n justifyContent: 'flex-end',\n },\n '.calendarHeader.centerAlign': {\n justifyContent: 'center',\n },\n '.calendarDayButton': {\n margin: '4px -0.25px',\n padding: '4px',\n transition: 'all 0.12s',\n cursor: 'pointer',\n textAlign: 'center',\n fontSize: 14,\n border: '1px solid transparent',\n backgroundColor: 'transparent',\n color: 'inherit',\n '&:hover': {\n backgroundColor: 'rgba(0,0,0,0.04)',\n },\n },\n '.calendarDayButton.notCurrentMonth': {\n cursor: 'default',\n color: 'rgba(0,0,0,0.38)',\n '&:hover': {\n backgroundColor: 'transparent',\n },\n },\n '.calendarDayButton.today': {\n border: `1px solid ${theme.palette.primary.main}`,\n },\n '.calendarDayButton.selected': {\n backgroundColor: theme.palette.primary.main,\n color: '#fff',\n fontWeight: 600,\n '&:hover': {\n backgroundColor: theme.palette.primary.main,\n },\n },\n '.calendarDayButton.inRange': {\n backgroundColor: `${theme.palette.primary.main}20`,\n },\n '.calendarDayButton.hovered': {\n backgroundColor: `${theme.palette.primary.main}20`,\n },\n '.calendarYearButton': {\n textTransform: 'none',\n padding: 0,\n borderRadius: 8,\n fontSize: 14,\n marginTop: 25,\n marginBottom: 10,\n boxShadow: 'none',\n color: 'inherit',\n backgroundColor: 'transparent',\n transition: 'all 0.2s ease',\n '&:hover': {\n backgroundColor: 'rgba(0,0,0,0.04)',\n boxShadow: 'none',\n },\n },\n '& .calendarYearButton.currentMonth': {\n backgroundColor: theme.palette.primary.main,\n color: '#fff',\n\n '&:hover': {\n backgroundColor: theme.palette.primary.main,\n },\n },\n '& .calendarYearButton.otherYear': {\n color: theme.palette.text.disabled,\n\n '&:hover': {\n backgroundColor: 'transparent',\n },\n },\n '& .calendarYearButton.currentYear': {\n backgroundColor: theme.palette.primary.main,\n color: '#fff',\n\n '&:hover': {\n backgroundColor: theme.palette.primary.main,\n },\n },\n '.weekGrid': {\n display: 'grid',\n gridTemplateColumns: 'repeat(7, 1fr)',\n gap: 0.5,\n },\n '.gridBox': {\n display: 'grid',\n gridTemplateColumns: 'repeat(3, 1fr)',\n gap: 1,\n p: 1,\n },\n '.monthLabel': {\n fontSize: 14,\n fontWeight: 600,\n minWidth: 120,\n textAlign: 'center',\n cursor: 'pointer',\n '&:hover': {\n color: theme.palette.primary.main,\n },\n },\n '.weekDayLabel': {\n textAlign: 'center',\n fontSize: 13,\n fontWeight: 600,\n color: '#555',\n padding: '4px 0',\n },\n '.styledTextField': {\n width: 90,\n '& input': {\n fontSize: 14,\n padding: 0,\n cursor: 'pointer',\n },\n }\n };\n};\n","import type React from 'react';\n\nimport {\n Dialog as MuiDialog,\n DialogTitle as MuiDialogTitle,\n DialogContent as MuiDialogContent,\n DialogActions as MuiDialogActions,\n IconButton,\n styled,\n type DialogProps as MuiDialogProps,\n} from '@mui/material';\n\nimport { Style } from './style';\n\nimport { CloseIcon } from '../../assets/svg';\nexport interface DialogProps extends Omit<MuiDialogProps, 'title' | 'content'> {\n open: boolean;\n onClose?: (event?: object, reason?: 'backdropClick' | 'escapeKeyDown') => void;\n title?: React.ReactNode;\n children?: React.ReactNode;\n actions?: React.ReactNode;\n showCloseButton?: boolean;\n disableBackdropClick?: boolean;\n disableEscapeKeyDown?: boolean;\n}\n\nconst Dialog: React.FC<DialogProps> = ({\n open = false,\n onClose = () => { },\n title = '',\n actions,\n children,\n showCloseButton = true,\n maxWidth = 'sm',\n fullWidth = true,\n fullScreen = false,\n scroll = 'paper',\n disableBackdropClick = false,\n disableEscapeKeyDown = false,\n ...restProps\n}) => {\n const handleClose = (\n event: object,\n reason: 'backdropClick' | 'escapeKeyDown'\n ) => {\n if (disableBackdropClick && reason === 'backdropClick') return;\n if (disableEscapeKeyDown && reason === 'escapeKeyDown') return;\n onClose(event, reason);\n };\n\n return (\n <MuiDialog\n open={open}\n onClose={handleClose}\n maxWidth={maxWidth}\n fullWidth={fullWidth}\n fullScreen={fullScreen}\n scroll={scroll}\n {...restProps}\n >\n {title && (\n <MuiDialogTitle className='dialog-title'>\n {title}\n {showCloseButton && (\n <IconButton\n aria-label='close'\n onClick={(e) => onClose(e, 'escapeKeyDown')}\n >\n <CloseIcon />\n </IconButton>\n )}\n </MuiDialogTitle>\n )}\n {children && <MuiDialogContent>{children}</MuiDialogContent>}\n {actions && <MuiDialogActions>{actions}</MuiDialogActions>}\n </MuiDialog>\n );\n};\n\nDialog.displayName = 'Dialog';\n\nexport default styled(Dialog)(Style);\n","export const Style = () => {\n return {\n '.dialog-title': {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n paddingRight: 5,\n },\n };\n};\n","import type React from 'react';\n\nimport { Drawer as MuiDrawer, type Theme } from '@mui/material';\nimport type { DrawerProps as MuiDrawerProps } from '@mui/material/Drawer';\nimport type { SxProps } from '@mui/system';\n\nexport interface DrawerProps {\n anchor?: MuiDrawerProps['anchor'];\n open?: boolean;\n onClose?: MuiDrawerProps['onClose'];\n children?: React.ReactNode;\n className?: string;\n sx?: SxProps<Theme>;\n}\n\nconst Drawer: React.FC<DrawerProps> = ({\n anchor = 'left',\n open = false,\n onClose = () => { },\n children,\n className = '',\n sx = {},\n}) => {\n return (\n <MuiDrawer\n anchor={anchor}\n open={open}\n onClose={onClose}\n className={className}\n sx={sx}\n >\n {children}\n </MuiDrawer>\n );\n};\n\nDrawer.displayName = 'Drawer';\n\nexport default Drawer;\n","import { Component, type ErrorInfo, type ReactNode } from 'react';\n\nimport { Paper, Box, Typography, Button as MuiButton } from '@mui/material';\n\ninterface Props {\n children: ReactNode;\n fallback?: ReactNode;\n}\n\ninterface State {\n hasError: boolean;\n error: Error | null;\n}\n\nclass ErrorBoundary extends Component<Props, State> {\n constructor(props: Props) {\n super(props);\n this.state = { hasError: false, error: null };\n }\n\n static getDerivedStateFromError(error: Error): State {\n return { hasError: true, error };\n }\n\n override componentDidCatch(_error: Error, _errorInfo: ErrorInfo): void {\n // Error logged for debugging\n }\n\n handleReset = (): void => {\n this.setState({ hasError: false, error: null });\n };\n\n override render(): ReactNode {\n if (this.state.hasError) {\n if (this.props.fallback) {\n return this.props.fallback;\n }\n\n return (\n <Paper elevation={3}>\n <Box>\n <Typography variant=\"h6\" color=\"error\">\n Something went wrong\n </Typography>\n <Typography variant=\"body2\" color=\"text.secondary\">\n {this.state.error?.message || 'An unknown error occurred'}\n </Typography>\n <MuiButton variant=\"outlined\" onClick={this.handleReset}>\n Try again\n </MuiButton>\n </Box>\n </Paper>\n );\n }\n\n return this.props.children;\n }\n}\n\nexport default ErrorBoundary;\n","import type React from 'react';\n\nimport { IconButton as MuiIconButton } from '@mui/material';\nimport type { IconButtonProps as MuiIconButtonProps } from '@mui/material';\n\nexport interface IconButtonProps extends Omit<MuiIconButtonProps, 'color'> {\n color?: 'inherit' | 'default' | 'primary' | 'secondary' | 'error' | 'info' | 'success' | 'warning';\n size?: 'small' | 'medium' | 'large';\n disabled?: boolean;\n edge?: 'start' | 'end' | false;\n disableRipple?: boolean;\n ariaLabel?: string;\n onClick?: React.MouseEventHandler<HTMLButtonElement>;\n}\n\nconst IconButton: React.FC<IconButtonProps> = ({\n color = 'default',\n size = 'medium',\n disabled = false,\n edge = false,\n disableRipple = false,\n ariaLabel = '',\n className = '',\n children, // Icon passed between tags will be rendered as children\n onClick = () => { },\n ...props\n}) => {\n\n return (\n <MuiIconButton\n className={className}\n color={color}\n size={size}\n aria-label={ariaLabel}\n disabled={disabled}\n disableRipple={disableRipple}\n edge={edge}\n onClick={onClick}\n {...props}\n >\n {children}\n </MuiIconButton>\n );\n};\n\nIconButton.displayName = 'IconButton';\n\nexport default IconButton;","import type React from 'react';\n\nimport {\n Link as MuiLink,\n type LinkProps as MuiLinkProps,\n} from '@mui/material';\n\nexport interface LinkProps extends MuiLinkProps {\n underline?: 'none' | 'hover' | 'always';\n colorVariant?: 'primary' | 'secondary' | 'inherit' | 'textPrimary' | 'textSecondary';\n onClick?: (event: React.MouseEvent<HTMLAnchorElement>) => void;\n children: React.ReactNode;\n className?: string;\n}\n\nconst Link: React.FC<LinkProps> = ({\n underline = 'none',\n colorVariant = 'primary',\n onClick = () => { },\n children,\n className = '',\n ...props\n}) => {\n return (\n <MuiLink\n underline={underline}\n color={colorVariant}\n onClick={onClick}\n className={className}\n {...props}\n >\n {children}\n </MuiLink>\n );\n};\n\nLink.displayName = 'Link';\n\nexport default Link;\n","import type React from 'react';\n\nimport {\n CircularProgress,\n Box,\n styled,\n type CircularProgressProps as MuiCircularProgressProps,\n} from '@mui/material';\n\nimport { Style } from './style';\nexport interface CircularLoaderProps extends MuiCircularProgressProps {\n size?: number | string;\n thickness?: number;\n color?:\n | 'primary'\n | 'secondary'\n | 'error'\n | 'info'\n | 'success'\n | 'warning'\n | 'inherit';\n value?: number;\n determinate?: boolean;\n fullScreen?: boolean;\n overlay?: boolean;\n overlayColor?: string;\n className?: string;\n}\n\nconst CircularLoader: React.FC<CircularLoaderProps> = ({\n size = 40,\n thickness = 3.6,\n color = 'primary',\n value,\n determinate = false,\n fullScreen = false,\n overlay = false,\n overlayColor = 'rgba(255, 255, 255, 0.9)',\n className = '',\n ...restProps\n}) => {\n const wrapperClass = `${className} ${fullScreen || overlay\n ? `loader-overlay ${fullScreen ? 'fullscreen' : ''}`\n : 'loader-container'\n }`;\n\n return (\n <Box\n className={wrapperClass}\n {...(overlay && { sx: { bgcolor: overlayColor } })}\n >\n <CircularProgress\n size={size}\n thickness={thickness}\n color={color}\n variant={\n determinate && value !== undefined ? 'determinate' : 'indeterminate'\n }\n value={value}\n {...restProps}\n />\n </Box>\n );\n};\n\nexport default styled(CircularLoader)(Style);\n","import type React from 'react';\n\nimport {\n LinearProgress,\n Box,\n styled,\n type LinearProgressProps as MuiLinearProgressProps,\n} from '@mui/material';\n\nimport { Style } from './style';\nexport interface LinearLoaderProps extends MuiLinearProgressProps {\n color?:\n | 'primary'\n | 'secondary'\n | 'error'\n | 'info'\n | 'success'\n | 'warning'\n | 'inherit';\n value?: number;\n determinate?: boolean;\n fullScreen?: boolean;\n overlay?: boolean;\n overlayColor?: string;\n className?: string;\n}\n\nconst LinearLoader: React.FC<LinearLoaderProps> = ({\n color = 'primary',\n value,\n determinate = false,\n fullScreen = false,\n overlay = false,\n overlayColor = 'rgba(255, 255, 255, 0.9)',\n className = '',\n ...restProps\n}) => {\n const wrapperClass = `${className} ${fullScreen || overlay\n ? `loader-overlay ${fullScreen ? 'fullscreen' : ''}`\n : 'loader-container'\n }`;\n\n return (\n <Box\n className={wrapperClass}\n {...(overlay && { sx: { bgcolor: overlayColor } })}\n >\n <LinearProgress\n color={color}\n variant={\n determinate && value !== undefined ? 'determinate' : 'indeterminate'\n }\n value={value}\n {...restProps}\n />\n </Box>\n );\n};\n\nexport default styled(LinearLoader)(Style);\n","import type { Theme } from '@mui/material';\n\nexport const Style = ({ theme }: { theme: Theme }) => {\n return {\n '&.loader-container': {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n },\n '&.loader-overlay': {\n position: 'absolute',\n top: 0,\n left: 0,\n right: 0,\n bottom: 0,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n zIndex: theme.zIndex.modal + 1,\n },\n '&.loader-overlay.fullscreen': {\n position: 'fixed',\n },\n '& .MuiLinearProgress-root': {\n width: '100%',\n },\n };\n};\n","import React, { useEffect } from 'react';\n\nimport ReactPlayer from 'react-player';\n\nimport type { ReactPlayerProps } from 'react-player/types';\n\nexport interface MediaPlayerProps extends ReactPlayerProps {\n src?: string;\n width?: string | number;\n height?: string | number;\n controls?: boolean;\n playing?: boolean;\n hideOptions?: boolean;\n}\n\nconst MediaPlayer: React.FC<MediaPlayerProps> = ({\n src = '',\n width = '100%',\n height = '400px',\n controls = true,\n playing = false,\n hideOptions = true,\n ...restProps\n}) => {\n useEffect(() => {\n const mediaElements = document.querySelectorAll('video, audio');\n mediaElements.forEach((media) => {\n if (hideOptions) {\n media.setAttribute('controlsList', 'nodownload');\n media.setAttribute('disablePictureInPicture', 'true');\n } else {\n media.removeAttribute('controlsList');\n media.removeAttribute('disablePictureInPicture');\n }\n });\n }, [hideOptions]);\n\n return (\n <ReactPlayer\n src={src}\n width={width}\n height={height}\n controls={controls}\n playing={playing}\n {...restProps}\n />\n );\n};\n\nexport default MediaPlayer;\n","import React from 'react';\n\nimport {\n Menu as MuiMenu,\n MenuItem as MuiMenuItem,\n Box,\n type MenuProps as MuiMenuProps,\n styled,\n} from '@mui/material';\n\nimport { Style } from './style';\nexport interface MenuOption {\n id: string | number;\n label: string;\n icon?: React.ReactNode;\n disabled?: boolean;\n}\n\nexport interface MenuProps extends MuiMenuProps {\n options: MenuOption[];\n anchorEl: HTMLElement | null;\n open: boolean;\n onClose: () => void;\n onOptionClick: (option: MenuOption) => void;\n}\n\nconst Menu: React.FC<MenuProps> = ({\n options = [],\n anchorEl = null,\n open = false,\n onClose = () => { },\n onOptionClick = () => { },\n ...restProps\n}) => {\n return (\n <MuiMenu\n anchorEl={anchorEl}\n open={open}\n onClose={onClose}\n anchorOrigin={{ vertical: 'bottom', horizontal: 'right' }}\n transformOrigin={{ vertical: 'top', horizontal: 'right' }}\n {...restProps}\n >\n {options.map((option) => (\n <MuiMenuItem\n key={option.id}\n disabled={option.disabled}\n onClick={() => {\n onClose();\n onOptionClick(option);\n }}\n >\n {option.icon && <Box className=\"icon-style\">{option.icon}</Box>}\n {option.label}\n </MuiMenuItem>\n ))}\n </MuiMenu>\n );\n};\n\nexport default styled(Menu)(Style);\n","import type { Theme } from '@mui/material';\n\nexport const Style = ({ theme }: { theme: Theme }) => {\n return {\n '.icon-style': {\n marginRight: '8px',\n display: 'flex',\n alignItems: 'center',\n color: theme.palette.primary.main,\n },\n };\n};\n","import type React from 'react';\n\nimport {\n Modal as MuiModal,\n Backdrop,\n type ModalProps as MuiModalProps,\n} from '@mui/material';\n\nexport interface ModalProps {\n open?: boolean;\n onClose?: () => void;\n children: React.ReactElement<unknown>;\n className?: string;\n slots?: MuiModalProps['slots'];\n slotProps?: MuiModalProps['slotProps'];\n}\n\nconst Modal: React.FC<ModalProps> = ({\n open = false,\n onClose = () => { },\n children,\n className = '',\n slots = { backdrop: Backdrop },\n slotProps = { backdrop: { timeout: 300 } },\n}) => {\n return (\n <MuiModal\n open={open}\n onClose={onClose}\n closeAfterTransition\n slots={{\n backdrop: slots.backdrop,\n ...slots,\n }}\n slotProps={{\n backdrop: slotProps.backdrop,\n ...slotProps,\n }}\n className={className}\n >\n {children}\n </MuiModal>\n );\n};\n\nModal.displayName = 'Modal';\n\nexport default Modal;\n","import type React from 'react';\n\nimport { Popover as MuiPopover, type PopoverProps as MuiPopoverProps } from '@mui/material';\n\nexport interface PopoverProps {\n open: boolean;\n anchorEl: HTMLElement | null;\n onClose: () => void;\n className?: string;\n children?: React.ReactNode;\n anchorOrigin?: {\n vertical: 'top' | 'bottom' | 'center';\n horizontal: 'left' | 'center' | 'right';\n };\n transformOrigin?: {\n vertical: 'top' | 'bottom' | 'center';\n horizontal: 'left' | 'center' | 'right';\n };\n slotProps?: MuiPopoverProps['slotProps'];\n}\n\nconst Popover: React.FC<PopoverProps> = ({\n open = false,\n anchorEl = null,\n onClose = () => { },\n className = '',\n children,\n anchorOrigin = {\n vertical: 'bottom',\n horizontal: 'center',\n },\n transformOrigin = {\n vertical: 'top',\n horizontal: 'right',\n },\n slotProps = {},\n}) => {\n return (\n <MuiPopover\n open={open}\n anchorEl={anchorEl}\n onClose={onClose}\n anchorOrigin={anchorOrigin}\n transformOrigin={transformOrigin}\n className={className}\n slotProps={slotProps}\n >\n {children}\n </MuiPopover>\n );\n};\n\nPopover.displayName = 'Popover';\n\nexport default Popover;\n","import type React from 'react';\n\nimport {\n Radio as MuiRadio, RadioGroup, FormControlLabel,\n type RadioGroupProps, type RadioProps as MuiRadioProps\n} from '@mui/material';\n\nexport interface RadioOption {\n value: string;\n label: string;\n disabled?: boolean;\n}\n\nexport interface RadioProps extends Omit<RadioGroupProps, 'onChange'> {\n options: RadioOption[];\n onChange?: (event: React.ChangeEvent<HTMLInputElement>, value: string) => void;\n radioProps?: Omit<MuiRadioProps, 'checked' | 'value' | 'onChange'>;\n}\n\nconst Radio: React.FC<RadioProps> = ({\n options = [],\n value = '',\n onChange = () => { },\n name = 'radio-group',\n row = false,\n radioProps = {},\n ...restProps\n}) => {\n return (\n <RadioGroup\n aria-labelledby={`${name}-label`}\n name={name}\n value={value as string}\n onChange={onChange}\n row={row}\n {...restProps}\n >\n {options.map((option) => (\n <FormControlLabel\n key={option.value}\n value={option.value}\n control={\n <MuiRadio\n color={radioProps.color ?? 'primary'}\n size={radioProps.size ?? 'medium'}\n {...radioProps}\n />\n }\n label={option.label}\n disabled={option.disabled}\n />\n ))}\n </RadioGroup>\n );\n};\n\nRadio.displayName = 'Radio';\n\nexport default Radio;\n","import type React from 'react';\nimport { useState } from 'react';\n\nimport { Box, Collapse, InputAdornment } from '@mui/material';\n\nimport { CloseIcon, SearchIcon } from '../../assets/svg';\nimport { isEmptyString } from '../../utils';\nimport { IconButton } from '../iconButton';\nimport { TextField } from '../textField';\nimport { Tooltip } from '../toolTip';\n\nimport type { HandleClick } from '../viewHeader/defaultActions/types';\n\nexport interface SearchBarProps {\n search?: string;\n handleClick?: HandleClick;\n setSearch?: (search: string) => void;\n actionType?: string;\n placeholder?: string;\n}\n\nconst SearchBar: React.FC<SearchBarProps> = ({\n placeholder = 'Search here...',\n search = '',\n handleClick = () => { },\n setSearch = () => { },\n actionType = ''\n}) => {\n const [openSearch, setOpenSearch] = useState(false);\n\n const handleSearchChange = (value: string) => {\n setSearch(value);\n if (!isEmptyString(value)) {\n handleClick(actionType, { search: value });\n }\n };\n\n const handleClose = () => {\n setOpenSearch(false);\n setSearch('');\n handleClick(actionType, { search: '' });\n };\n\n return (\n <Box display=\"flex\">\n <Collapse in={openSearch} orientation=\"horizontal\">\n <TextField\n size=\"small\"\n placeholder={placeholder}\n aria-label=\"Search here\"\n value={search}\n onChange={(event) => {\n handleSearchChange(event.target.value);\n }}\n slotProps={{\n input: {\n startAdornment: <InputAdornment position=\"start\"><SearchIcon /></InputAdornment>,\n endAdornment: <InputAdornment position=\"end\">\n <IconButton onClick={handleClose}><CloseIcon /></IconButton>\n </InputAdornment>,\n },\n }}\n />\n </Collapse>\n {!openSearch && <Tooltip arrow title=\"Search\">\n <IconButton className=\"roundIcon\" onClick={() => { setOpenSearch(true); }}>\n <SearchIcon />\n </IconButton>\n </Tooltip>}\n </Box>\n );\n};\n\nSearchBar.displayName = 'SearchBar';\n\nexport default SearchBar;","import React from 'react';\n\nimport {\n Select as MuiSelect,\n MenuItem as MuiMenuItem,\n ListItemText,\n OutlinedInput,\n type SelectProps as MuiSelectProps,\n type SelectChangeEvent,\n styled,\n} from '@mui/material';\n\nimport { Style } from './style';\n\nimport { CheckBox } from '../checkBox';\n\ninterface SelectOption {\n value: string | number;\n label: string;\n disabled?: boolean;\n}\n\nexport interface MultiSelectProps extends Omit<MuiSelectProps<(string | number)[]>, 'onChange'> {\n options: SelectOption[];\n value: (string | number)[];\n placeholder?: string;\n size?: 'small' | 'medium';\n variant?: 'outlined' | 'filled' | 'standard';\n onChange?: (value: (string | number)[], event: SelectChangeEvent<(string | number)[]>) => void;\n className?: string;\n}\n\nconst MultiSelect: React.FC<MultiSelectProps> = ({\n options = [],\n value = [],\n placeholder = '',\n onChange = () => { },\n size = 'medium',\n variant = 'outlined',\n className = '',\n}) => {\n const getLabel = (v: string | number) =>\n options.find(opt => opt.value === v)?.label ?? v;\n\n const renderValue = (selected: (string | number)[]) =>\n selected.length === 0 ? <em>{placeholder}</em> : selected.map(getLabel).join(', ');\n\n return (\n <MuiSelect<(string | number)[]>\n multiple\n input={<OutlinedInput notched={false} />}\n value={value}\n onChange={(event) => onChange(event.target.value as (string | number)[], event)}\n displayEmpty={!!placeholder}\n renderValue={renderValue}\n size={size}\n variant={variant}\n className={className}\n >\n {options.map((option) => (\n <MuiMenuItem key={option.value} value={option.value} disabled={option.disabled}>\n <CheckBox checked={value.includes(option.value)} />\n <ListItemText primary={option.label} />\n </MuiMenuItem>\n ))}\n </MuiSelect>\n );\n};\n\nMultiSelect.displayName = 'MultiSelect';\n\nexport default styled(MultiSelect)(Style);\n","import React from 'react';\n\nimport {\n Select as MuiSelect,\n MenuItem as MuiMenuItem,\n type SelectProps as MuiSelectProps,\n type SelectChangeEvent,\n ListItemText,\n OutlinedInput,\n styled,\n} from '@mui/material';\n\nimport { Style } from './style';\n\ninterface SelectOption {\n value: string | number;\n label: string;\n disabled?: boolean;\n}\nexport interface SelectProps extends Omit<MuiSelectProps<string | number>, 'onChange'> {\n options: SelectOption[];\n value: string | number;\n placeholder?: string;\n onChange?: (\n value: string | number,\n event: SelectChangeEvent<string | number>\n ) => void;\n size?: 'small' | 'medium';\n variant?: 'outlined' | 'filled' | 'standard';\n className?: string;\n}\n\nconst Select: React.FC<SelectProps> = ({\n options = [],\n size = 'medium',\n variant = 'outlined',\n onChange = () => { },\n value = '',\n placeholder = '',\n className = '',\n ...restProps\n}) => {\n const renderValue = (selected: string | number) => {\n if (!selected) return <em>{placeholder}</em>;\n return options.find((opt) => opt.value === selected)?.label ?? selected;\n };\n\n return (\n <MuiSelect<string | number>\n input={<OutlinedInput notched={false} />}\n value={value}\n onChange={(event) => onChange(event.target.value, event)}\n displayEmpty={!!placeholder}\n renderValue={renderValue}\n variant={variant}\n size={size}\n className={className}\n {...restProps}\n >\n {options.map((option) => (\n <MuiMenuItem\n key={option.value}\n value={option.value}\n disabled={option.disabled}\n >\n <ListItemText primary={option.label} />\n </MuiMenuItem>\n ))}\n </MuiSelect>\n );\n};\n\nSelect.displayName = 'Select';\n\nexport default styled(Select)(Style);\n","export const Style = () => {\n return {\n width: '100%',\n borderRadius: '20px !important',\n };\n};\n","import type React from 'react';\n\nimport { Slider as MuiSlider, type SliderProps as MuiSliderProps } from '@mui/material';\nexport interface SliderProps extends MuiSliderProps {\n value?: number | number[];\n defaultValue?: number | number[];\n onChange?: (event: Event, value: number | number[]) => void;\n min?: number;\n max?: number;\n step?: number;\n marks?: boolean | Array<{ value: number; label?: string }>;\n valueLabelDisplay?: 'on' | 'auto' | 'off';\n color?: 'primary' | 'secondary' | 'error' | 'info' | 'success' | 'warning';\n size?: 'small' | 'medium';\n disabled?: boolean;\n orientation?: 'horizontal' | 'vertical';\n track?: 'normal' | 'inverted' | false;\n className?: string;\n}\n\nconst Slider: React.FC<SliderProps> = ({\n value = 0,\n defaultValue = 0,\n onChange = () => { },\n min = 0,\n max = 100,\n step = 1,\n marks = false,\n valueLabelDisplay = 'auto',\n color = 'primary',\n size = 'medium',\n disabled = false,\n orientation = 'horizontal',\n track = 'normal',\n className = '',\n ...restProps\n}) => {\n return (\n <MuiSlider\n value={value}\n defaultValue={defaultValue}\n onChange={onChange}\n min={min}\n max={max}\n step={step}\n marks={marks}\n valueLabelDisplay={valueLabelDisplay}\n color={color}\n size={size}\n disabled={disabled}\n orientation={orientation}\n track={track}\n className={className}\n {...restProps}\n />\n );\n};\n\nexport default Slider;","import type React from 'react';\n\nimport { Snackbar, Alert, Slide } from '@mui/material';\n\nexport interface SnackBarProps {\n message?: string;\n type?: 'success' | 'info' | 'warning' | 'error';\n autoHideDuration?: number;\n onClose: () => void;\n anchorOrigin?: {\n vertical: 'top' | 'bottom';\n horizontal: 'left' | 'center' | 'right';\n };\n slots?: Record<string, React.ElementType>;\n slotProps?: React.ComponentProps<typeof Snackbar>['slotProps'];\n snackbarKey?: string;\n}\n\nconst SnackBar: React.FC<SnackBarProps> = ({\n message = '',\n type = 'info',\n autoHideDuration = 2000,\n onClose = () => { },\n anchorOrigin = { vertical: 'top', horizontal: 'right' },\n slots = { transition: Slide },\n slotProps = { transition: { direction: 'left' } },\n snackbarKey = 'topright',\n}) => {\n const open = Boolean(message); //snackbar opens when message is not empty\n\n return open ? (\n <Snackbar\n open={open}\n autoHideDuration={autoHideDuration}\n onClose={onClose}\n anchorOrigin={anchorOrigin}\n slots={slots}\n slotProps={slotProps}\n key={snackbarKey}\n >\n <Alert\n onClose={onClose}\n severity={type}\n variant=\"filled\"\n >\n {message}\n </Alert>\n </Snackbar>\n ) : null;\n};\n\nSnackBar.displayName = 'SnackBar';\n\nexport default SnackBar;\n\n","import type React from 'react';\n\nimport {\n FormControlLabel,\n Switch as MuiSwitch,\n type SwitchProps as MuiSwitchProps,\n} from '@mui/material';\nexport interface SwitchProps extends MuiSwitchProps {\n checked?: boolean;\n defaultChecked?: boolean;\n onChange?: (\n event: React.ChangeEvent<HTMLInputElement>,\n checked: boolean\n ) => void;\n name?: string;\n label?: string;\n color?:\n | 'primary'\n | 'secondary'\n | 'error'\n | 'info'\n | 'success'\n | 'warning'\n | 'default';\n size?: 'small' | 'medium';\n disabled?: boolean;\n className?: string;\n}\n\nconst Switch: React.FC<SwitchProps> = ({\n checked = false,\n defaultChecked = false,\n onChange = () => { },\n name = '',\n label = '',\n color = 'primary',\n size = 'medium',\n disabled = false,\n className = '',\n ...restProps\n}) => {\n return (\n <FormControlLabel\n control={\n <MuiSwitch\n checked={checked}\n defaultChecked={defaultChecked}\n onChange={onChange}\n name={name}\n color={color}\n size={size}\n disabled={disabled}\n className={className}\n {...restProps}\n />\n }\n label={label}\n />\n );\n};\n\nexport default Switch;\n","import React from 'react';\n\n// udpate switch to use the new switch component - TO-DO\nimport { Box, Grid, Switch } from '@mui/material';\n\nimport { Typography, Tooltip, Link } from '../../';\nimport { formatDate } from '../../../utils/date';\nimport { getColorFromId, strEllipsis } from '../../../utils/global';\nimport { AvatarTitle } from '../../avatarTitle';\n\nimport type { FieldMappingParams } from '../types';\n\nexport const defaultFieldMappings = {\n 'DEFAULT': ({ data = {}, col, nullFieldText = '' }: FieldMappingParams) => {\n return (\n <Tooltip title={strEllipsis(data[col?.field || ''])} arrow>\n <Typography textAlign=\"left\">{strEllipsis(data[col?.field || '']) || nullFieldText || ''}</Typography>\n </Tooltip>\n );\n },\n\n 'AVATAR_LABEL': ({ handleRowDataClick = () => { }, data = {}, col }: FieldMappingParams) => {\n const fieldValue = data[col?.field || ''];\n const isActive = data.is_active;\n\n return (\n <Grid container alignItems=\"center\" wrap=\"nowrap\" onClick={col ? () => { handleRowDataClick(data, col) } : () => { }}>\n {typeof isActive === 'boolean' && (<Box className={`activeDot ${isActive ? 'active' : 'inactive'}`} />)}\n <AvatarTitle\n background={`${getColorFromId(fieldValue || null)}50`}\n color={`${getColorFromId(fieldValue || null)}`}\n name={`${fieldValue}`}\n />\n <Box ml={1}>\n <Tooltip title={typeof fieldValue === 'string' && fieldValue.length > 10 ? fieldValue : ''} arrow>\n <span>{strEllipsis(fieldValue)}</span>\n </Tooltip>\n </Box>\n </Grid>);\n },\n\n 'LINK': ({ handleRowDataClick = () => { }, data = {}, col }: FieldMappingParams) => {\n return (\n <Link onClick={col ? () => { handleRowDataClick(data, col) } : () => { }}>\n <Typography color=\"primary\" textAlign=\"left\">{data[col?.field || '']}</Typography>\n </Link>\n );\n },\n\n 'SWITCH': ({ data = {}, col, handleRowDataClick = () => { } }: FieldMappingParams) => {\n return (\n <Switch\n checked={Boolean(data[col?.field || ''])}\n onChange={col ? (e: React.ChangeEvent<HTMLInputElement>) => handleRowDataClick(data, col, e) : () => { }}\n color=\"primary\"\n size=\"small\"\n />\n );\n },\n\n 'DATE_TIME': ({ data = {}, col, nullFieldText = '' }: FieldMappingParams) => {\n return (\n <Typography textAlign=\"left\" className=\"bodyField\">\n {formatDate(data[col?.field || ''], 'MMMM D, YYYY [at] hh:mm A') || nullFieldText || ''}\n </Typography>\n );\n },\n\n 'DATE': ({ data = {}, col, nullFieldText = '' }: FieldMappingParams) => {\n return (\n <Typography textAlign=\"left\" className=\"bodyField\">\n {formatDate(data[col?.field || ''], 'MMMM D, YYYY') || nullFieldText || ''}\n </Typography>\n );\n }\n}","import React from 'react';\n\nimport { Box } from '@mui/material';\n\nimport { EditIcon } from '../../../assets/editIcon';\nimport { SearchIcon } from '../../../assets/searchIcon';\nimport { IconButton } from '../../../components/iconButton';\nimport { Tooltip } from '../../../components/toolTip';\nimport { getFormattedName } from '../../../utils/global';\n\nimport type { TableActionsProps } from '../types';\n\nconst TableActions: React.FC<TableActionsProps> = (props) => {\n\n const { actions = [], handleAction = () => { }, rowData = {}, customActions = {} } = props;\n\n const actionIcon: Record<string, React.ReactElement | ((rowData: Record<string, string | number | boolean | null>, action: string) => React.ReactElement)> = {\n 'EDIT': <EditIcon />,\n 'VIEW': <SearchIcon />,\n ...customActions\n }\n\n return (\n <Box className=\"tableActions\">\n {actions.length > 0 && actions.map((item) => {\n // eslint-disable-next-line\n if (actionIcon[item]) {\n return (\n <Tooltip key={item} title={getFormattedName(item)} arrow >\n <IconButton\n size=\"small\"\n className='actionIconBtn'\n onClick={(e) => { handleAction(item, rowData, e) }}\n >\n {typeof actionIcon[item] === 'function' ? actionIcon[item](rowData, item) : actionIcon[item]}\n </IconButton>\n </Tooltip>\n )\n } else {\n return null\n }\n })}\n </Box>\n );\n};\n\nexport default TableActions;","import React, { useMemo } from 'react';\n\nimport { TableCell, TableRow, TableBody } from '@mui/material';\n\nimport { defaultFieldMappings } from './defaultMappings';\nimport TableActions from './tableActions';\n\nimport type { BodyProps, HeaderArray } from '../types';\n\nconst TblBody: React.FC<BodyProps> = (props) => {\n\n const { dataRows = [], headers = [], headerStyles = {}, nullFieldText = '', fieldMappings = {}, actions = [], handleAction = () => { }, handleRowDataClick = () => { }, customActions = {}, lazyLoad = null } = props;\n\n const dataheaders = useMemo((): HeaderArray[] => {\n return headers.filter((item) => item.visible && item.field !== 'actions')\n }, [headers])\n\n const allFieldMappings = useMemo(() => {\n return { ...defaultFieldMappings, ...fieldMappings };\n }, [fieldMappings]);\n\n return (\n <TableBody>\n {dataRows.map((data, index) => (\n // eslint-disable-next-line\n <TableRow className=\"tableRowCls\" key={`data-col-${index}`}>\n {dataheaders.map((col, indx) => {\n // eslint-disable-next-line\n const styles = { sx: headerStyles[col.field] || headerStyles[\"*\"] || {} };\n const mappingKey = col.mapping as keyof typeof allFieldMappings | undefined;\n const mappingFunction = mappingKey && mappingKey in allFieldMappings ? allFieldMappings[mappingKey] : allFieldMappings['DEFAULT'];\n return (\n <TableCell\n {...styles}\n className={`tableColCls tableColCls-${col.field}`}\n // eslint-disable-next-line\n key={`data-col-${index}-${indx}`}\n data-field={col.field}\n >\n {mappingFunction({ data, col, handleRowDataClick, nullFieldText })}\n </TableCell>\n )\n })}\n {actions.length > 0 && (\n <TableCell className=\"tableColCls\" data-field=\"actions\">\n <TableActions rowData={data} actions={actions} handleAction={handleAction} customActions={customActions} />\n </TableCell>\n )}\n </TableRow>\n ))}\n {lazyLoad}\n </TableBody>\n )\n}\n\nexport default TblBody;","import type { ReactNode } from 'react';\nimport React, { useState, useMemo } from 'react';\n\nimport { DndContext, closestCenter, PointerSensor, useSensor, useSensors, DragOverlay } from '@dnd-kit/core';\nimport { arrayMove, SortableContext, verticalListSortingStrategy } from '@dnd-kit/sortable';\n\nimport { Table, Paper, styled } from '@mui/material';\n\nimport TblBody from './body/tblBody';\nimport TblHeader from './header/tblHeader';\nimport { Style } from './styles';\nimport type { DndWrapperProps } from './types';\n\nimport type { DragStartEvent, DragEndEvent, DragOverEvent } from '@dnd-kit/core';\n\nconst DndWrapper: React.FC<DndWrapperProps> = (props) => {\n\n const { headers, children, dataRows, headerStyles, fieldMappings, handleHeaderChange = () => { } } = props;\n\n const [draggedHeader, setDraggedHeader] = useState<string | null>(null);\n\n const sensors = useSensors(useSensor(PointerSensor, { activationConstraint: { distance: 5 } }));\n\n const handleReorder = (activeId: string, overId: string) => {\n if (activeId !== overId) {\n const headerMap = new Map<string, number>();\n headers.forEach((header, index) => {\n headerMap.set(header.field, index);\n });\n\n const oldIndex = headerMap.get(activeId);\n const newIndex = headerMap.get(overId);\n if (oldIndex !== undefined && newIndex !== undefined) {\n // Check if the target item is draggable\n const targetHeader = headers[newIndex];\n // eslint-disable-next-line\n if (targetHeader && targetHeader.draggable !== false) {\n const newHeaders = arrayMove(headers, Number(oldIndex), Number(newIndex));\n handleHeaderChange(newHeaders);\n }\n }\n }\n }\n\n const handleDragStart = (event: DragStartEvent) => {\n setDraggedHeader(event.active.id as string);\n };\n\n const handleDragEnd = (event: DragEndEvent) => {\n setDraggedHeader(null);\n if (event.over) handleReorder(event.active.id as string, event.over.id as string);\n };\n\n const handleDragOver = (event: DragOverEvent) => {\n if (event.over) handleReorder(event.active.id as string, event.over.id as string);\n };\n\n const sortableItems = useMemo((): string[] => {\n return headers.map((header, index) => {\n return header.field || `header-${index}`;\n });\n }, [headers]);\n\n const dragOverlayContent = useMemo((): ReactNode => {\n if (!draggedHeader) return null;\n\n const draggedHeaderItem = headers.filter((header) => header.field === draggedHeader);\n return (\n <Table>\n <TblHeader headers={draggedHeaderItem} headerStyles={headerStyles} sortObj={{ sortField: '', sortBy: '' }} handleSort={() => { }} />\n <TblBody dataRows={dataRows.slice(0, 10)} headers={draggedHeaderItem} headerStyles={headerStyles} fieldMappings={fieldMappings} nullFieldText=\"\" handleAction={() => { }} actions={[]} customActions={{}} handleRowDataClick={() => { }} />\n </Table>\n );\n }, [draggedHeader, headers, dataRows, headerStyles, fieldMappings]);\n\n return (\n <DndContext\n sensors={sensors}\n collisionDetection={closestCenter}\n onDragStart={handleDragStart}\n onDragEnd={handleDragEnd}\n onDragOver={handleDragOver}\n >\n <SortableContext items={sortableItems} strategy={verticalListSortingStrategy}>\n {children}\n </SortableContext>\n <DragOverlay>\n <Paper\n className=\"custom-paper\"\n elevation={4}\n >\n {dragOverlayContent}\n </Paper>\n </DragOverlay>\n </DndContext>\n )\n}\n\nexport default styled(DndWrapper)(Style);","import type { ReactNode } from 'react';\nimport React from 'react';\n\nimport { Box } from '@mui/material';\n\nimport { SortAscIcon } from '../../../assets/svg/sorting/ascending';\nimport { SortDescIcon } from '../../../assets/svg/sorting/descending';\nimport { IconButton } from '../../../components/iconButton';\nimport { Typography } from '../../../components/typography';\n\nimport type { HeaderContentProps } from '../types';\n\nconst HeaderContent: React.FC<HeaderContentProps> = ({\n label,\n sortable = false,\n handleSort = () => { },\n sortObj = { sortField: '', sortBy: '' },\n field = '',\n}) => {\n\n const onSort = (): void => {\n if (sortObj.sortBy === 'desc') {\n handleSort({ sortField: field, sortBy: 'asc' });\n } else {\n handleSort({ sortField: field, sortBy: 'desc' });\n }\n };\n\n const getSortIcon = (): ReactNode => {\n switch (sortObj.sortBy) {\n case 'asc':\n return <SortAscIcon />;\n case 'desc':\n return <SortDescIcon />;\n default:\n return <SortAscIcon />;\n }\n };\n\n return (\n <Box className=\"headerContent\">\n <Typography className=\"headerContentTxt\" variant=\"body1\">{label}</Typography>\n {sortable && (\n <IconButton\n size=\"small\"\n className={`sortIconButton ${sortObj.sortField === field ? 'sort-active' : 'sort-hover'}`}\n onClick={(e) => {\n e.stopPropagation();\n onSort();\n }}\n >\n {getSortIcon()}\n </IconButton>\n )}\n </Box>\n );\n};\n\nexport default HeaderContent;","import type { ReactNode } from 'react';\nimport React from 'react';\n\nimport { TableCell, TableRow, TableBody } from '@mui/material';\n\nimport { TextSearchField, SelectSearchField, DateSearchField } from './searchFields';\n\nimport type { SearchBarProps, HeaderArray } from '../types';\n\nconst SearchBar: React.FC<SearchBarProps> = React.memo((props) => {\n const {\n headers = [],\n searchObj = {},\n handleSearch = () => { }\n } = props;\n\n const renderSearchField = (item: HeaderArray): ReactNode => {\n if (item.searchable) {\n return (\n <TextSearchField\n field={item.field}\n value={searchObj[item.field] || ''}\n onSearch={(value) => handleSearch({ ...searchObj, [item.field]: value })}\n onClear={() => handleSearch({ ...searchObj, [item.field]: '' })}\n />\n );\n }\n\n if (item.customSearch?.field === 'SELECT') {\n return (\n <SelectSearchField\n field={item.field}\n value={searchObj[item.field] || ''}\n options={item.customSearch.options || []}\n onSearch={(value) => handleSearch({ ...searchObj, [item.field]: value })}\n />\n );\n }\n\n if (item.customSearch?.field === 'DATE_RANGE') {\n return (\n <DateSearchField\n field={item.field}\n value={searchObj[item.field] || null}\n onSearch={(value) => handleSearch({ ...searchObj, [item.field]: value })}\n />\n );\n }\n\n return null;\n };\n\n return (\n <TableBody>\n <TableRow>\n {headers.map((item) => (\n <TableCell\n key={`search-${item.field}`}\n className=\"searchBox\"\n data-field={item.field}\n >\n {renderSearchField(item)}\n </TableCell>\n ))}\n </TableRow>\n </TableBody>\n );\n});\n\nSearchBar.displayName = 'SearchBar';\n\nexport default SearchBar;","import React from 'react';\n\nimport dayjs from 'dayjs';\n\nimport type { FieldChangeHandlerContext } from '@mui/x-date-pickers/internals';\nimport type { DateValidationError } from '@mui/x-date-pickers/models';\n\nimport { DatePicker } from '../../../../components/datePicker';\n\nimport type { Dayjs } from 'dayjs';\n\ninterface DateSearchFieldProps {\n field: string;\n value: string | null;\n onSearch: (value: string | null) => void;\n}\n\nconst DateSearchFieldComponent: React.FC<DateSearchFieldProps> = ({\n field,\n value,\n onSearch,\n}) => {\n const handleDateChange = (date: Dayjs | null, _context?: FieldChangeHandlerContext<DateValidationError>) => {\n let newValue: string | null = null;\n try {\n newValue = date ? dayjs(date).format('YYYY-MM-DD') : null;\n } catch (_err) {\n // Invalid date handled silently\n }\n onSearch(newValue);\n };\n\n return (\n <DatePicker\n value={value || ''}\n handleDateChange={handleDateChange}\n format=\"DD/MM/YYYY\"\n ariaLabel={`Select ${field} date`}\n />\n );\n};\n\nDateSearchFieldComponent.displayName = 'DateSearchField';\n\nexport const DateSearchField = React.memo(DateSearchFieldComponent);","import React from 'react';\n\n// TO-DO: Update to use the new select component\nimport { Select, MenuItem } from '@mui/material';\n\ninterface SelectOption {\n value: string | number;\n label: string;\n}\n\ninterface SelectSearchFieldProps {\n field: string;\n value: string;\n options: SelectOption[];\n onSearch: (value: string) => void;\n}\n\nexport const SelectSearchField: React.FC<SelectSearchFieldProps> = React.memo(({\n field,\n value,\n options,\n onSearch\n}) => {\n return (\n <Select\n onChange={(e) => onSearch(e.target.value)}\n value={value}\n displayEmpty\n defaultValue=\"\"\n size=\"small\"\n aria-label={`Select ${field}`}\n >\n {options.map((option) => (\n <MenuItem key={option.value} value={option.value}>\n {option.label}\n </MenuItem>\n ))}\n </Select>\n );\n});\n\nSelectSearchField.displayName = 'SelectSearchField';","import React from 'react';\n\nimport { InputAdornment } from '@mui/material';\n\nimport { SearchIcon } from '../../../../assets/searchIcon';\nimport { CloseIcon } from '../../../../assets/svg/closeIcon';\nimport { IconButton } from '../../../../components/iconButton';\nimport { TextField } from '../../../../components/textField';\n\ninterface TextSearchFieldProps {\n field: string;\n value: string;\n onSearch: (value: string) => void;\n onClear: () => void;\n}\n\nconst TextSearchFieldComponent: React.FC<TextSearchFieldProps> = ({\n field,\n value,\n onSearch,\n onClear\n}) => {\n\n return (\n <TextField\n onChange={(e) => onSearch(e.target.value)}\n value={value}\n size=\"small\"\n placeholder=\"Search\"\n aria-label={`Search ${field}`}\n slotProps={{\n input: {\n startAdornment: (\n <InputAdornment position=\"start\">\n <SearchIcon />\n </InputAdornment>\n ),\n endAdornment: (\n <InputAdornment\n position=\"end\"\n className=\"text-search-adornment\"\n >\n {value ? (\n <IconButton\n className=\"text-search-icon-button\"\n onClick={onClear}\n ariaLabel={`Clear search for ${field}`}\n size=\"small\"\n >\n <CloseIcon />\n </IconButton>\n ) : null}\n </InputAdornment>\n ),\n },\n }}\n />\n );\n};\n\nTextSearchFieldComponent.displayName = 'TextSearchField';\n\nexport const TextSearchField = React.memo(TextSearchFieldComponent);","import React from 'react';\n\nimport { useSortable } from '@dnd-kit/sortable';\nimport { CSS } from '@dnd-kit/utilities';\n\nimport { TableCell, TableHead, TableRow } from '@mui/material';\n\nimport HeaderContent from './headerContent';\n\nimport type { HeaderProps, SortableTableCellProps } from '../types';\n\nconst SortableTableCell: React.FC<SortableTableCellProps> = ({ id, children, className, disabled = false, customSx = {}, ...props }) => {\n const { attributes, listeners, setNodeRef, transform, transition, isDragging } = useSortable({\n id: id,\n disabled: disabled,\n data: {\n type: 'header',\n id: id\n }\n });\n\n const classNameWithState = `${className} ${disabled ? 'sortable-disabled' : 'sortable-enabled'} ${isDragging ? 'sortable-dragging' : ''}`;\n\n return (\n <TableCell\n ref={setNodeRef}\n sx={{\n transform: CSS.Transform.toString(transform),\n transition,\n opacity: isDragging ? 0.5 : 1,\n ...customSx,\n }}\n {...(disabled ? {} : attributes)}\n {...(disabled ? {} : listeners)}\n className={classNameWithState}\n {...props}\n >\n {children}\n </TableCell>\n );\n};\n\nconst TblHeader: React.FC<HeaderProps> = (props) => {\n const { headers = [], sortObj = { sortField: '', sortBy: '' }, handleSort = () => { }, headerStyles = {} } = props;\n\n return (\n <TableHead>\n <TableRow>\n {headers\n .filter(col => col.visible)\n .map((col, index) => {\n const isDisabled = col.draggable === false;\n // eslint-disable-next-line\n const styles = headerStyles[col.field] || headerStyles['*'] || {};\n return (\n <SortableTableCell\n key={col.field || index}\n id={col.field || `header-${index}`}\n className=\"tableHeaderCls\"\n disabled={isDisabled}\n customSx={styles}\n data-field={col.field}\n >\n <HeaderContent {...col} sortObj={sortObj} handleSort={handleSort} />\n </SortableTableCell>\n );\n })}\n </TableRow>\n </TableHead>\n )\n}\n\nexport default TblHeader;","import React, { useMemo } from 'react';\n\nimport type { SelectChangeEvent } from '@mui/material';\nimport { Grid, Typography, Select, MenuItem, IconButton } from '@mui/material';\n\nimport type { PaginationProps } from './types';\n\nimport { PaginationBackwardIcon } from '../../assets/svg/pagination/backwardIcon';\nimport { PaginationForwardIcon } from '../../assets/svg/pagination/forwardIcon';\nimport { PaginationNextIcon } from '../../assets/svg/pagination/nextIcon';\nimport { PaginationPrevIcon } from '../../assets/svg/pagination/prevIcon';\n\nconst menuOptions = [\n { value: 20, label: '20' },\n { value: 50, label: '50' },\n { value: 100, label: '100' },\n];\n\nconst Pagination: React.FC<PaginationProps> = (props) => {\n\n const { totalCount = 0, skip = 0, limit = 10, handlePaginationChange = () => { } } = props;\n\n const { currentPage, maxPage } = useMemo((): { currentPage: number; maxPage: number } => {\n const maxPagee = Math.ceil(totalCount / limit);\n const currentPagee = skip === 0 ? 1 : skip + 1;\n return { currentPage: Math.min(currentPagee, maxPagee), maxPage: maxPagee };\n }, [totalCount, skip, limit])\n\n const pageDisplay = useMemo((): string => {\n return `Displaying ${skip * limit + 1}-${(skip + 1) * limit < totalCount ? (skip + 1) * limit : totalCount} of ${totalCount} results`\n }, [skip, limit, totalCount])\n\n return (\n <Grid\n container\n className=\"pagination\"\n justifyContent=\"space-between\"\n >\n <Grid className=\"flexAlign pagination-left\">\n <Typography variant=\"body2\" className=\"pagination-show-label\">Show</Typography>\n <Select\n className=\"pagination-select\"\n labelId=\"simple-select-label\"\n id=\"simple-select\"\n fullWidth\n name=\"isActive\"\n value={limit}\n onChange={(e: SelectChangeEvent<number>) => { handlePaginationChange({ page: 1, pageSize: Number(e.target.value) }); }}\n >\n {menuOptions.map((option) => (\n <MenuItem key={option.value} value={option.value}>\n {option.label}\n </MenuItem>\n ))}\n </Select>\n <Typography variant=\"body2\" className=\"pagination-display\">{pageDisplay}</Typography>\n </Grid>\n <Grid className=\"flexAlign\">\n <IconButton onClick={() => { handlePaginationChange({ page: 1, pageSize: limit }) }} disabled={currentPage === 1}>\n <PaginationBackwardIcon />\n </IconButton>\n <IconButton onClick={() => { handlePaginationChange({ page: skip, pageSize: limit }) }} disabled={currentPage === 1}>\n <PaginationPrevIcon />\n </IconButton>\n <Typography variant=\"body2\" className=\"pagination-page-info\">\n {currentPage} of {maxPage}\n </Typography>\n <IconButton onClick={() => { handlePaginationChange({ page: skip + 2, pageSize: limit }) }} disabled={currentPage === maxPage}>\n <PaginationNextIcon />\n </IconButton>\n <IconButton onClick={() => { handlePaginationChange({ page: maxPage, pageSize: limit }) }} disabled={currentPage === maxPage}>\n <PaginationForwardIcon />\n </IconButton>\n </Grid>\n </Grid>\n );\n};\n\nexport default Pagination;\n","import type { Theme } from '@mui/material/styles';\n\nexport const Style = ({ theme }: { theme: Theme }) => ({\n '&.MuiTableContainer-root ': {\n height: 'calc(100% - 30px)',\n },\n '.tableHeaderCls': {\n backgroundColor: theme.palette.view?.table || '#d4b0fd',\n fontWeight: 'bold',\n textAlign: 'left',\n padding: '0 10px',\n '&:hover .sortIconButton.sort-hover': {\n opacity: 1\n }\n },\n '.sortable-enabled': {\n cursor: 'grab',\n userSelect: 'none',\n position: 'relative',\n },\n '.sortable-disabled': {\n cursor: 'default',\n userSelect: 'auto',\n },\n '.sortable-dragging': {\n opacity: 0.5,\n },\n '.tableColCls': {\n '.activeDot': {\n width: '5px',\n height: '5px',\n borderRadius: '50%',\n marginRight: '10px',\n backgroundColor: 'transparent',\n },\n '.activeDot.active': {\n backgroundColor: '#54d38c',\n },\n\n '.activeDot.inactive': {\n backgroundColor: 'red',\n },\n },\n '& .pagination': {\n height: '30px',\n marginTop: theme.spacing(1),\n '& .flexAlign': {\n display: 'flex !important',\n alignItems: 'center',\n },\n '.MuiOutlinedInput-root': {\n borderRadius: '7px',\n height: '25px',\n background: theme.palette.bg?.iconBg\n },\n '.MuiOutlinedInput-notchedOutline': {\n border: `1px solid ${theme.palette.border?.toggle}`\n },\n '.MuiIconButton-root': {\n width: '28px',\n height: '28px'\n },\n '.pagination-left': {\n flex: 1,\n paddingLeft: theme.spacing(1),\n },\n '.pagination-show-label': {\n marginRight: theme.spacing(2),\n },\n '.pagination-select': {\n maxWidth: '70px',\n },\n '.pagination-display': {\n marginLeft: theme.spacing(2),\n },\n '.pagination-page-info': {\n marginRight: theme.spacing(1),\n marginLeft: theme.spacing(1),\n },\n },\n '.sortIconButton': {\n padding: '8px',\n marginLeft: '4px',\n '&:hover': {\n backgroundColor: 'rgba(0, 0, 0, 0.04)',\n }\n },\n '.sortIconButton.sort-hover': {\n opacity: 0,\n transition: 'opacity 0.2s ease-in-out'\n },\n '.sortIconButton.sort-active': {\n opacity: 1\n },\n '.searchBox': {\n background: '#fff',\n borderBottom: `1px solid ${theme.palette.border?.table}`,\n top: '44px',\n '.MuiOutlinedInput-root': {\n height: '26px',\n borderRadius: '0px',\n border: `1px solid ${theme.palette.border?.table}`,\n fontSize: '12px',\n },\n '.MuiSvgIcon-root': {\n fontSize: '1rem'\n }\n },\n\n '.MuiTableCell-head': {\n borderBottom: 'none',\n background: theme.palette.bg?.lightBg,\n padding: '0px 16px',\n height: '44px',\n whiteSpace: 'nowrap',\n '&:first-of-type': {\n borderTopLeftRadius: '4px'\n },\n '&:last-of-type': {\n borderTopRightRadius: '4px'\n }\n },\n '.MuiTableCell-head[data-field=\"actions\"]': {\n position: 'sticky !important',\n right: 0,\n top: 0,\n backgroundColor: theme.palette.view?.table,\n zIndex: 4,\n },\n '.headerContent': {\n display: 'flex',\n alignItems: 'center',\n },\n '.MuiTableCell-head[data-field=\"actions\"] .headerContent': {\n display: 'flex',\n alignItems: 'center',\n marginLeft: '8px',\n },\n '.headerContentTxt': {\n fontWeight: '550',\n textAlign: 'left',\n },\n '.MuiTableCell-body': {\n padding: '0px 16px',\n height: '48.5px',\n fontSize: '13px',\n fontFamily: theme.typography.body2.fontFamily,\n borderBottom: `1px solid ${theme.palette.border?.table} !important`,\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap',\n '&:first-of-type': {\n borderLeft: `1px solid ${theme.palette.border?.table}`\n },\n '&:last-child': {\n borderRight: `1px solid ${theme.palette.border?.table}`\n },\n '.MuiTypography-root': {\n fontSize: '13px',\n }\n },\n '.MuiTableCell-body[data-field=\"actions\"]': {\n position: 'sticky',\n right: 0,\n backgroundColor: '#fff',\n zIndex: 1,\n },\n '.actionIconBtn': {\n padding: '8px'\n },\n '.tableActions': {\n display: 'flex',\n justifyContent: 'flex-start',\n },\n '.bodyField': {\n whiteSpace: 'nowrap'\n },\n '.custom-paper': {\n borderRadius: '8px',\n overflowY: 'auto',\n },\n\n // Sticky header specific styles\n '&.sticky-header-table': {\n '.MuiTableCell-head[data-field=\"actions\"]': {\n position: 'sticky !important',\n right: 0,\n top: 0,\n backgroundColor: theme.palette.view?.table,\n zIndex: 4,\n },\n '.MuiTableHead-root': {\n position: 'sticky',\n top: 0,\n zIndex: 3,\n backgroundColor: theme.palette.view?.table,\n },\n },\n\n // Date search field styles\n '.iconButton': {\n padding: '4px',\n },\n '.closeIcon': {\n fontSize: '16px',\n },\n '.calendarIconWrapper': {\n transform: 'scale(0.85)',\n },\n\n // Text search field styles\n '.text-search-adornment': {\n width: '26px',\n height: '26px',\n },\n '.text-search-icon-button': {\n width: '26px',\n height: '26px',\n },\n\n})","import React, { useMemo } from 'react';\n\nimport { Table, TableContainer, Paper, styled, Grid, Box } from '@mui/material';\n\nimport TblBody from './body/tblBody';\nimport DndWrapper from './dndWrapper';\nimport SearchBar from './header/searchBar';\nimport TblHeader from './header/tblHeader';\nimport Pagination from './pagination';\nimport { Style } from './styles';\nimport type { HeaderArray, HeaderProps, BodyProps, TableProps } from './types';\n\nconst TableComponent: React.FC<TableProps> = (props) => {\n\n const {\n className = '', headers = [], dataRows = [], stickyHeader = true, fieldMappings = {},\n headerStyles = {}, showPagination = true, totalCount = 0, skip = 0, limit = 5,\n nullFieldText = '', handlePagination = () => { }, handleHeaderChange = () => { },\n sortObj = { sortField: '', sortBy: '' }, handleSort = () => { }, searchObj = {}, noRecordsFound = false,\n openSearch = false, handleSearch = () => { }, handleAction = () => { }, actions = [], handleRowDataClick = () => { },\n customActions = {}, lazyLoad = null\n } = props;\n\n const visibleHeaders = useMemo((): HeaderArray[] => {\n return headers.filter(f => (f.visible));\n }, [headers]);\n\n const headerProps = useMemo((): HeaderProps => ({\n headers: headers,\n headerStyles: headerStyles,\n sortObj: sortObj,\n handleSort: handleSort,\n }), [headers, headerStyles, sortObj, handleSort]);\n\n const bodyProps = useMemo((): BodyProps => ({\n dataRows: dataRows,\n headers: headers,\n headerStyles: headerStyles,\n fieldMappings: fieldMappings,\n nullFieldText: nullFieldText,\n handleAction: handleAction,\n actions: actions,\n customActions: customActions,\n handleRowDataClick: handleRowDataClick,\n lazyLoad: lazyLoad\n }), [dataRows, headers, headerStyles, fieldMappings, handleAction, nullFieldText, actions, handleRowDataClick, customActions, lazyLoad]);\n\n return (\n <>\n <TableContainer\n component={Paper}\n className={`${className} ${stickyHeader ? 'sticky-header-table' : ''}`}\n >\n <DndWrapper {...bodyProps} handleHeaderChange={handleHeaderChange}>\n <Table stickyHeader={stickyHeader}>\n <TblHeader {...headerProps} />\n {openSearch && (\n <SearchBar\n headers={visibleHeaders}\n searchObj={searchObj}\n handleSearch={handleSearch}\n />\n )}\n <TblBody {...bodyProps} />\n\n </Table>\n </DndWrapper>\n {/* TO-DO: Add no records found component */}\n {noRecordsFound && <Box>No records found</Box>}\n </TableContainer>\n {\n showPagination && (\n <Grid className={className}>\n <Pagination\n totalCount={totalCount}\n skip={skip}\n limit={limit}\n handlePaginationChange={(e: { page: number; pageSize: number }) => { handlePagination(e) }}\n />\n </Grid>\n )\n }\n </>\n );\n};\n\nexport default styled(TableComponent)(Style);\n","import type { Theme } from '@mui/material';\n\nexport const Style = ({ theme }: { theme: Theme }) => {\n return {\n width: '100%',\n '& .tab-item': {\n textTransform: 'none',\n minHeight: 'auto',\n border: '1px solid #E6E7F6',\n background: '#FCFCFE',\n borderRadius: '10px 10px 0px 0px',\n padding: '15px',\n marginRight: '10px',\n },\n '& .tab-badge': {\n background: theme.palette.secondary.main,\n color: '#fff',\n fontSize: '12px',\n fontFamily: theme.typography.h1.fontFamily,\n padding: '5px 12px',\n height: '20px',\n display: 'flex',\n alignItems: 'center',\n borderRadius: '30px'\n },\n '& .MuiTabs-indicator': {\n display: 'none',\n },\n '& .tab-label': {\n fontWeight: 600,\n },\n '& .fillPath': {\n fill: theme.palette.secondary.main,\n },\n '& .Mui-selected': {\n '& .fillPath': {\n fill: theme.palette.primary.main,\n },\n }\n\n };\n};\n\n","import type React from 'react';\n\nimport { TabPanel } from '@mui/lab';\nimport { styled } from '@mui/material';\n\nimport { TabPanelStyle } from './tabPanelStyle';\n\nexport interface TabPanelProps {\n className?: string;\n children: React.ReactNode;\n tabValue: string | number;\n currentTabValue: string | number;\n}\n\nconst TabPanelComponent: React.FC<TabPanelProps> = ({\n className = '',\n children,\n tabValue = '',\n currentTabValue = '',\n}) => {\n\n return (<TabPanel className={className} value={tabValue} hidden={currentTabValue !== tabValue}>{children}</TabPanel>);\n};\n\nTabPanelComponent.displayName = 'TabPanel';\n\nexport default styled(TabPanelComponent)(TabPanelStyle);\n\n","import type { Theme } from '@mui/material';\n\nexport const TabPanelStyle = ({ theme }: { theme: Theme }) => {\n return {\n padding: theme.spacing(3),\n width: '100%',\n };\n};\n\n","import type React from 'react';\n\nimport { Grid, Tabs as MuiTabs, Tab, styled, type TabsProps as MuiTabsProps } from '@mui/material';\n\nimport { Style } from './style';\n\nimport { Typography } from '../typography';\n\nexport interface TabItem {\n label: string;\n content?: React.ReactNode;\n value?: string | number;\n disabled?: boolean;\n icon?: React.ReactElement;\n count?: number;\n}\n\nexport interface TabsProps extends Omit<MuiTabsProps, 'onChange' | 'value' | 'children'> {\n tabs: TabItem[];\n handleTabChange: (event: React.SyntheticEvent, newValue: string | number) => void;\n orientation?: 'horizontal' | 'vertical';\n variant?: 'standard' | 'scrollable' | 'fullWidth';\n scrollButtons?: boolean | 'auto';\n className?: string;\n tabValue: string | number;\n}\n\nconst TabsComponent: React.FC<TabsProps> = ({\n tabs = [],\n tabValue = 0,\n handleTabChange = () => { },\n orientation = 'horizontal',\n variant = 'standard',\n scrollButtons = 'auto',\n className = '',\n ...restProps\n}) => {\n\n const handleChange = (event: React.SyntheticEvent, newValue: string | number) => {\n handleTabChange(event, newValue);\n };\n\n const getTabValue = (tab: TabItem, index: number): string | number => {\n return tab.value ?? index;\n };\n\n return (\n <MuiTabs\n value={tabValue}\n onChange={handleChange}\n orientation={orientation}\n className={`${className} tabs-container`}\n variant={variant}\n scrollButtons={scrollButtons}\n {...restProps}\n >\n {tabs.map((tab, index) => {\n const tabValue = getTabValue(tab, index);\n return (\n <Tab\n key={tabValue}\n label={\n <Grid container alignItems=\"center\" spacing={1}>\n {tab.icon && <Grid>{tab.icon}</Grid>}\n <Grid><Typography variant=\"body1\" className=\"tab-label\">{tab.label}</Typography></Grid>\n {tab.count && <Grid className=\"tab-badge\">{tab.count}</Grid>}\n </Grid>\n }\n value={tabValue}\n disabled={tab.disabled}\n className=\"tab-item\"\n />\n );\n })}\n </MuiTabs >\n );\n};\n\nTabsComponent.displayName = 'Tabs';\n\nexport default styled(TabsComponent)(Style);\n\n","import { LinkNode, AutoLinkNode } from '@lexical/link';\nimport { ListNode, ListItemNode } from '@lexical/list';\nimport { HeadingNode, QuoteNode } from '@lexical/rich-text';\n\nimport { theme } from './theme';\n\nimport type { InitialConfigType } from '@lexical/react/LexicalComposer';\nimport type { LexicalEditor } from 'lexical';\n\nexport const editorConfig: InitialConfigType = {\n namespace: 'MyLexicalEditor',\n theme: theme,\n onError(error: Error, _editor: LexicalEditor) {\n // eslint-disable-next-line no-console\n console.error(error);\n },\n nodes: [\n HeadingNode,\n QuoteNode,\n ListNode,\n ListItemNode,\n LinkNode,\n AutoLinkNode,\n ],\n};","import type React from 'react';\nimport { useState, useCallback, useRef, useEffect, memo } from 'react';\n\nimport { useLexicalComposerContext } from '@lexical/react/LexicalComposerContext';\nimport { FORMAT_ELEMENT_COMMAND } from 'lexical';\n\nimport { Box } from '@mui/material';\n\nimport { Button } from '../../button';\n\nexport type AlignmentType = 'left' | 'center' | 'right' | 'justify';\n\nexport interface AlignmentOption {\n value: AlignmentType;\n label: string;\n icon: React.ReactNode;\n}\n\nconst alignmentOptions: AlignmentOption[] = [\n {\n value: 'left',\n label: 'Align Left',\n icon: (\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M2 4h12M2 8h8M2 12h12\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" />\n </svg>\n ),\n },\n {\n value: 'center',\n label: 'Align Center',\n icon: (\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M4 4h8M2 8h12M4 12h8\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" />\n </svg>\n ),\n },\n {\n value: 'right',\n label: 'Align Right',\n icon: (\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M2 4h12M6 8h10M2 12h12\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" />\n </svg>\n ),\n },\n {\n value: 'justify',\n label: 'Justify',\n icon: (\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M2 4h12M2 8h12M2 12h12\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" />\n </svg>\n ),\n },\n];\n\nexport interface AlignmentDropdownProps {\n currentAlignment: AlignmentType;\n className?: string;\n}\n\nexport const AlignmentDropdown: React.FC<AlignmentDropdownProps> = memo(({ currentAlignment, className = '' }) => {\n const [editor] = useLexicalComposerContext();\n const [isOpen, setIsOpen] = useState(false);\n const dropdownRef = useRef<HTMLDivElement>(null);\n\n const currentAlignmentOption = alignmentOptions.find(option => option.value === currentAlignment) || alignmentOptions[0];\n\n const handleAlignmentChange = useCallback((alignment: AlignmentType): void => {\n editor.dispatchCommand(FORMAT_ELEMENT_COMMAND, alignment);\n setIsOpen(false);\n }, [editor]);\n\n useEffect(() => {\n const handleClickOutside = (event: MouseEvent): void => {\n if (dropdownRef.current && !dropdownRef.current.contains(event.target as Node)) {\n setIsOpen(false);\n }\n };\n\n if (isOpen) {\n document.addEventListener('mousedown', handleClickOutside);\n }\n\n return () => {\n document.removeEventListener('mousedown', handleClickOutside);\n };\n }, [isOpen]);\n\n return (\n <Box className={`alignment-dropdown ${className}`.trim()} ref={dropdownRef}>\n <Button\n variant=\"text\"\n color=\"inherit\"\n className=\"alignment-button\"\n onClick={() => setIsOpen(!isOpen)}\n >\n <span className=\"alignment-icon\">{currentAlignmentOption.icon}</span>\n <span className=\"alignment-arrow\">▼</span>\n </Button>\n {isOpen && (\n <Box className=\"alignment-menu\">\n {alignmentOptions.map((option) => (\n <Button\n key={option.value}\n variant=\"text\"\n color=\"inherit\"\n className={`alignment-option ${currentAlignment === option.value ? 'active' : ''}`.trim()}\n onClick={() => handleAlignmentChange(option.value)}\n >\n <span className=\"alignment-option-icon\">{option.icon}</span>\n <span className=\"alignment-option-label\">{option.label}</span>\n </Button>\n ))}\n </Box>\n )}\n </Box>\n );\n});\n\nAlignmentDropdown.displayName = 'AlignmentDropdown';\n\n","import type React from 'react';\nimport { memo, useCallback } from 'react';\n\nimport { useLexicalComposerContext } from '@lexical/react/LexicalComposerContext';\nimport { $createQuoteNode, $isQuoteNode } from '@lexical/rich-text';\nimport { $setBlocksType } from '@lexical/selection';\nimport { $getSelection, $isRangeSelection, $createParagraphNode } from 'lexical';\n\nimport { Button } from '../../button';\nexport interface BlockquoteButtonProps {\n isActive: boolean;\n children: React.ReactNode;\n className?: string;\n}\n\nexport const BlockquoteButton: React.FC<BlockquoteButtonProps> = memo(({ isActive, children, className = '' }) => {\n const [editor] = useLexicalComposerContext();\n\n const handleClick = useCallback((): void => {\n editor.update(() => {\n const selection = $getSelection();\n if ($isRangeSelection(selection)) {\n const anchorNode = selection.anchor.getNode();\n const topLevelElement = anchorNode.getTopLevelElement();\n\n if (topLevelElement && $isQuoteNode(topLevelElement)) {\n $setBlocksType(selection, () => $createParagraphNode());\n } else if (topLevelElement) {\n $setBlocksType(selection, () => $createQuoteNode());\n }\n }\n });\n }, [editor]);\n\n return (\n <Button\n variant=\"text\"\n color=\"inherit\"\n className={`${isActive ? 'active' : ''} ${className}`.trim()}\n onClick={handleClick}\n >\n {children}\n </Button>\n );\n});\n\nBlockquoteButton.displayName = 'BlockquoteButton';\n\n","import type React from 'react';\nimport { useState, useCallback, useRef, useEffect, memo } from 'react';\n\nimport { useLexicalComposerContext } from '@lexical/react/LexicalComposerContext';\nimport { $patchStyleText } from '@lexical/selection';\nimport { $getSelection, $isRangeSelection } from 'lexical';\n\nimport { Box } from '@mui/material';\n\nimport { Button } from '../../button';\n\nexport interface ColorOption {\n value: string;\n label: string;\n}\n\n// 36 colors arranged in 6x6 grid matching the image\nconst colorOptions: ColorOption[] = [\n // Row 1: Primary/Secondary colors\n { value: '#000000', label: 'Black' },\n { value: '#FF0000', label: 'Red' },\n { value: '#FF8C00', label: 'Orange' },\n { value: '#FFD700', label: 'Yellow' },\n { value: '#008000', label: 'Dark Green' },\n { value: '#0000FF', label: 'Blue' },\n // Row 2: Pastel colors\n { value: '#FFB6C1', label: 'Light Pink' },\n { value: '#F5DEB3', label: 'Cream' },\n { value: '#FFFFE0', label: 'Pale Yellow' },\n { value: '#98FB98', label: 'Light Sage Green' },\n { value: '#87CEEB', label: 'Light Sky Blue' },\n { value: '#E6E6FA', label: 'Lavender' },\n // Row 3: Muted tones\n { value: '#808080', label: 'Grey' },\n { value: '#FA8072', label: 'Coral' },\n { value: '#D2B48C', label: 'Tan' },\n { value: '#FFFF99', label: 'Pale Yellow 2' },\n { value: '#90EE90', label: 'Muted Green' },\n { value: '#4169E1', label: 'Medium Blue' },\n // Row 4: Darker tones\n { value: '#696969', label: 'Dark Grey' },\n { value: '#8B0000', label: 'Dark Red' },\n { value: '#A52A2A', label: 'Brown' },\n { value: '#6B8E23', label: 'Olive Green' },\n { value: '#228B22', label: 'Forest Green' },\n { value: '#00008B', label: 'Dark Royal Blue' },\n // Row 5: Very dark tones\n { value: '#2F2F2F', label: 'Very Dark Grey' },\n { value: '#654321', label: 'Darker Brown' },\n { value: '#556B2F', label: 'Darker Olive Green' },\n { value: '#006400', label: 'Darker Forest Green' },\n { value: '#000080', label: 'Darker Blue' },\n { value: '#191970', label: 'Darker Indigo' },\n // Row 6: Deep dark tones\n { value: '#1C1C1C', label: 'Deep Dark Grey' },\n { value: '#4B0000', label: 'Deep Dark Red' },\n { value: '#3D2817', label: 'Deep Brown' },\n { value: '#2F4F2F', label: 'Deep Olive' },\n { value: '#003300', label: 'Deep Forest Green' },\n { value: '#000033', label: 'Deep Indigo' },\n];\n\nexport interface ColorPickerProps {\n currentColor: string | null;\n className?: string;\n}\n\nexport const ColorPicker: React.FC<ColorPickerProps> = memo(({ currentColor, className = '' }) => {\n const [editor] = useLexicalComposerContext();\n const [isOpen, setIsOpen] = useState(false);\n const dropdownRef = useRef<HTMLDivElement>(null);\n\n const handleColorChange = useCallback((color: string): void => {\n editor.update(() => {\n const selection = $getSelection();\n if ($isRangeSelection(selection)) {\n $patchStyleText(selection, { color });\n }\n });\n setIsOpen(false);\n }, [editor]);\n\n useEffect(() => {\n const handleClickOutside = (event: MouseEvent): void => {\n if (dropdownRef.current && !dropdownRef.current.contains(event.target as Node)) {\n setIsOpen(false);\n }\n };\n\n if (isOpen) {\n document.addEventListener('mousedown', handleClickOutside);\n }\n\n return () => {\n document.removeEventListener('mousedown', handleClickOutside);\n };\n }, [isOpen]);\n\n const displayColor = currentColor || '#000000';\n\n return (\n <Box className={`color-picker ${className}`.trim()} ref={dropdownRef}>\n <Button\n variant=\"text\"\n color=\"inherit\"\n className={`color-picker-button ${isOpen ? 'active' : ''}`}\n onClick={() => setIsOpen(!isOpen)}\n >\n <span className=\"color-picker-icon\">\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path\n d=\"M8 2C8 2 6 4 6 6C6 7.10457 6.89543 8 8 8C9.10457 8 10 7.10457 10 6C10 4 8 2 8 2Z\"\n fill={displayColor}\n stroke={displayColor}\n strokeWidth=\"1\"\n />\n <path d=\"M3 12H13\" stroke={displayColor} strokeWidth=\"1.5\" strokeLinecap=\"round\" />\n </svg>\n </span>\n <span className=\"color-picker-arrow\">▼</span>\n </Button>\n {isOpen && (\n <Box className=\"color-picker-menu\">\n <Box className=\"color-picker-grid\">\n {colorOptions.map((color) => (\n <Button\n key={color.value}\n variant=\"text\"\n color=\"inherit\"\n className={`color-swatch ${currentColor === color.value ? 'active' : ''}`}\n onClick={() => handleColorChange(color.value)}\n style={{ backgroundColor: color.value }}\n title={color.label}\n >\n {currentColor === color.value && (\n <span className=\"color-swatch-check\">✓</span>\n )}\n </Button>\n ))}\n </Box>\n </Box>\n )}\n </Box>\n );\n});\n\nColorPicker.displayName = 'ColorPicker';\n\n","import type React from 'react';\nimport { memo, useCallback } from 'react';\n\nimport { useLexicalComposerContext } from '@lexical/react/LexicalComposerContext';\nimport { FORMAT_TEXT_COMMAND, type TextFormatType } from 'lexical';\n\nimport { Button } from '../../button';\n\nexport interface FormatButtonProps {\n format: TextFormatType;\n isActive: boolean;\n children: React.ReactNode;\n className?: string;\n}\n\nexport const FormatButton: React.FC<FormatButtonProps> = memo(({ format, isActive, children, className = '' }) => {\n const [editor] = useLexicalComposerContext();\n\n const handleClick = useCallback((): void => {\n editor.dispatchCommand(FORMAT_TEXT_COMMAND, format);\n }, [editor, format]);\n\n return (\n <Button\n variant=\"text\"\n color=\"inherit\"\n className={`${isActive ? 'active' : ''} ${className}`.trim()}\n onClick={handleClick}\n >\n {children}\n </Button>\n );\n});\n\nFormatButton.displayName = 'FormatButton';\n\n","import type React from 'react';\nimport { memo, useCallback } from 'react';\n\n\nimport { INSERT_UNORDERED_LIST_COMMAND, INSERT_ORDERED_LIST_COMMAND, $isListNode, $removeList } from '@lexical/list';\nimport { useLexicalComposerContext } from '@lexical/react/LexicalComposerContext';\nimport { $getSelection, $isRangeSelection } from 'lexical';\n\nimport { Button } from '../../button';\n\nexport interface ListButtonProps {\n listType: 'bullet' | 'number';\n isActive: boolean;\n children: React.ReactNode;\n className?: string;\n}\n\nexport const ListButton: React.FC<ListButtonProps> = memo(({ listType, isActive, children, className = '' }) => {\n const [editor] = useLexicalComposerContext();\n\n const handleClick = useCallback((): void => {\n editor.update(() => {\n const selection = $getSelection();\n if ($isRangeSelection(selection)) {\n const anchorNode = selection.anchor.getNode();\n const topLevelElement = anchorNode.getTopLevelElement();\n\n if (topLevelElement && $isListNode(topLevelElement)) {\n const currentListTag = topLevelElement.getTag();\n const targetListTag = listType === 'bullet' ? 'ul' : 'ol';\n\n // If clicking the same list type, remove the list\n if (currentListTag === targetListTag) {\n $removeList();\n } else {\n // If clicking different list type, convert to that type\n if (listType === 'bullet') {\n editor.dispatchCommand(INSERT_UNORDERED_LIST_COMMAND, undefined);\n } else {\n editor.dispatchCommand(INSERT_ORDERED_LIST_COMMAND, undefined);\n }\n }\n } else {\n // Not in a list, insert new list\n if (listType === 'bullet') {\n editor.dispatchCommand(INSERT_UNORDERED_LIST_COMMAND, undefined);\n } else {\n editor.dispatchCommand(INSERT_ORDERED_LIST_COMMAND, undefined);\n }\n }\n }\n });\n }, [editor, listType]);\n\n return (\n <Button\n variant=\"text\"\n color=\"inherit\"\n className={`${isActive ? 'active' : ''} ${className}`.trim()}\n onClick={handleClick}\n >\n {children}\n </Button>\n );\n});\n\nListButton.displayName = 'ListButton';\n\n","import type React from 'react';\nimport { useState, useCallback, useRef, useEffect, memo } from 'react';\n\n\nimport { useLexicalComposerContext } from '@lexical/react/LexicalComposerContext';\nimport { $createHeadingNode, type HeadingTagType } from '@lexical/rich-text';\nimport { $setBlocksType } from '@lexical/selection';\nimport { $getSelection, $isRangeSelection, $createParagraphNode } from 'lexical';\n\nimport { Box } from '@mui/material';\n\nimport { Button } from '../../button';\n\nexport type TextStyleType = 'paragraph' | HeadingTagType;\n\nexport interface TextStyleOption {\n value: TextStyleType;\n label: string;\n fontSize: string;\n fontWeight: string;\n}\n\nconst textStyles: TextStyleOption[] = [\n { value: 'h1', label: 'Heading 1', fontSize: '2em', fontWeight: 'bold' },\n { value: 'h2', label: 'Heading 2', fontSize: '1.75em', fontWeight: 'bold' },\n { value: 'h3', label: 'Heading 3', fontSize: '1.5em', fontWeight: 'bold' },\n { value: 'h4', label: 'Heading 4', fontSize: '1.25em', fontWeight: 'bold' },\n { value: 'h5', label: 'Heading 5', fontSize: '1.1em', fontWeight: 'bold' },\n { value: 'h6', label: 'Heading 6', fontSize: '1em', fontWeight: 'bold' },\n { value: 'paragraph', label: 'Normal', fontSize: '1em', fontWeight: 'normal' },\n];\n\nexport interface TextStyleDropdownProps {\n currentStyle: TextStyleType;\n className?: string;\n}\n\nexport const TextStyleDropdown: React.FC<TextStyleDropdownProps> = memo(({ currentStyle, className = '' }) => {\n const [editor] = useLexicalComposerContext();\n const [isOpen, setIsOpen] = useState(false);\n const dropdownRef = useRef<HTMLDivElement>(null);\n\n const currentStyleOption = textStyles.find(style => style.value === currentStyle) || textStyles[textStyles.length - 1];\n\n const handleStyleChange = useCallback((styleType: TextStyleType): void => {\n editor.update(() => {\n const selection = $getSelection();\n if ($isRangeSelection(selection)) {\n if (styleType === 'paragraph') {\n $setBlocksType(selection, () => $createParagraphNode());\n } else {\n $setBlocksType(selection, () => $createHeadingNode(styleType));\n }\n }\n });\n setIsOpen(false);\n }, [editor]);\n\n useEffect(() => {\n const handleClickOutside = (event: MouseEvent): void => {\n if (dropdownRef.current && !dropdownRef.current.contains(event.target as Node)) {\n setIsOpen(false);\n }\n };\n\n if (isOpen) {\n document.addEventListener('mousedown', handleClickOutside);\n }\n\n return () => {\n document.removeEventListener('mousedown', handleClickOutside);\n };\n }, [isOpen]);\n\n return (\n <Box className={`text-style-dropdown ${className}`.trim()} ref={dropdownRef}>\n <Button\n variant=\"text\"\n color=\"inherit\"\n className=\"text-style-button\"\n onClick={() => setIsOpen(!isOpen)}\n >\n <span\n className=\"text-style-label\"\n style={{\n fontSize: currentStyleOption.fontSize,\n fontWeight: currentStyleOption.fontWeight,\n }}\n >\n {currentStyleOption.label}\n </span>\n <span className=\"text-style-arrow\">▼</span>\n </Button>\n {isOpen && (\n <Box className=\"text-style-menu\">\n {textStyles.map((style) => (\n <Button\n key={style.value}\n variant=\"text\"\n color=\"inherit\"\n className={`text-style-option ${currentStyle === style.value ? 'active' : ''}`.trim()}\n onClick={() => handleStyleChange(style.value)}\n >\n <span\n className=\"text-style-option-label\"\n style={{\n fontSize: style.fontSize,\n fontWeight: style.fontWeight,\n }}\n >\n {style.label}\n </span>\n </Button>\n ))}\n </Box>\n )}\n </Box>\n );\n});\n\nTextStyleDropdown.displayName = 'TextStyleDropdown';\n\n","import type React from 'react';\n\nimport { Box } from '@mui/material';\n\nimport { AlignmentDropdown } from './alignmentDropdown';\nimport { BlockquoteButton } from './blockquoteButton';\nimport { ColorPicker } from './colorPicker';\nimport { FormatButton } from './formatButton';\nimport { ListButton } from './listButton';\nimport { TextStyleDropdown } from './textStyleDropdown';\nimport { UndoButton } from './undoButton';\nimport { useToolbarState } from './useToolbarState';\n\nexport const Toolbar: React.FC = () => {\n const state = useToolbarState();\n\n return (\n <Box className=\"toolbar\">\n <FormatButton format=\"bold\" isActive={state.bold}>\n B\n </FormatButton>\n <FormatButton format=\"italic\" isActive={state.italic}>\n I\n </FormatButton>\n <FormatButton format=\"underline\" isActive={state.underline}>\n U\n </FormatButton>\n <FormatButton format=\"strikethrough\" isActive={state.strikethrough}>\n S\n </FormatButton>\n <FormatButton format=\"subscript\" isActive={state.subscript}>\n x₂\n </FormatButton>\n <FormatButton format=\"superscript\" isActive={state.superscript}>\n x²\n </FormatButton>\n <ListButton listType=\"bullet\" isActive={state.bulletList}>\n •\n </ListButton>\n <ListButton listType=\"number\" isActive={state.numberList}>\n 123\n </ListButton>\n <BlockquoteButton isActive={state.blockquote}>\n Quote\n </BlockquoteButton>\n <ColorPicker currentColor={state.textColor} />\n <AlignmentDropdown currentAlignment={state.alignment} />\n <TextStyleDropdown currentStyle={state.textStyle} />\n <UndoButton />\n </Box>\n );\n};\n\nToolbar.displayName = 'Toolbar';\n","import type React from 'react';\nimport { memo, useCallback } from 'react';\n\n\nimport { useLexicalComposerContext } from '@lexical/react/LexicalComposerContext';\nimport { UNDO_COMMAND } from 'lexical';\n\nimport { Button } from '../../button';\n\nexport interface UndoButtonProps {\n className?: string;\n}\n\nexport const UndoButton: React.FC<UndoButtonProps> = memo(({ className = '' }) => {\n const [editor] = useLexicalComposerContext();\n\n const handleClick = useCallback((): void => {\n editor.dispatchCommand(UNDO_COMMAND, undefined);\n }, [editor]);\n\n return (\n <Button\n variant=\"text\"\n className={`undo-button ${className}`.trim()}\n onClick={handleClick}\n color=\"inherit\"\n title=\"Undo\"\n >\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path\n d=\"M3 8C3 5.23858 5.23858 3 8 3C10.7614 3 13 5.23858 13 8C13 10.7614 10.7614 13 8 13\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M5 5L3 3L5 1\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n </Button>\n );\n});\n\nUndoButton.displayName = 'UndoButton';\n\n","import { useState, useEffect, useRef } from 'react';\n\nimport { $isListNode } from '@lexical/list';\nimport { useLexicalComposerContext } from '@lexical/react/LexicalComposerContext';\nimport { $isQuoteNode, $isHeadingNode } from '@lexical/rich-text';\nimport { $getSelectionStyleValueForProperty } from '@lexical/selection';\nimport { $getNearestBlockElementAncestorOrThrow } from '@lexical/utils';\nimport { FORMAT_TEXT_COMMAND, FORMAT_ELEMENT_COMMAND, $getSelection, $isRangeSelection } from 'lexical';\n\nimport type { AlignmentType } from './alignmentDropdown';\nimport type { TextStyleType } from './textStyleDropdown';\n\nexport interface ToolbarState {\n bold: boolean;\n italic: boolean;\n underline: boolean;\n strikethrough: boolean;\n subscript: boolean;\n superscript: boolean;\n blockquote: boolean;\n bulletList: boolean;\n numberList: boolean;\n textStyle: TextStyleType;\n alignment: AlignmentType;\n textColor: string | null;\n}\n\nconst getToolbarState = (editor: ReturnType<typeof useLexicalComposerContext>[0]): ToolbarState => {\n const state: ToolbarState = {\n bold: false,\n italic: false,\n underline: false,\n strikethrough: false,\n subscript: false,\n superscript: false,\n blockquote: false,\n bulletList: false,\n numberList: false,\n textStyle: 'paragraph',\n alignment: 'left',\n textColor: null,\n };\n\n editor.getEditorState().read(() => {\n const selection = $getSelection();\n if ($isRangeSelection(selection)) {\n state.bold = selection.hasFormat('bold');\n state.italic = selection.hasFormat('italic');\n state.underline = selection.hasFormat('underline');\n state.strikethrough = selection.hasFormat('strikethrough');\n state.subscript = selection.hasFormat('subscript');\n state.superscript = selection.hasFormat('superscript');\n\n const textColor = $getSelectionStyleValueForProperty(selection, 'color', '');\n state.textColor = textColor || null;\n\n const anchorNode = selection.anchor.getNode();\n const topLevelElement = anchorNode.getTopLevelElement();\n\n try {\n const blockElement = $getNearestBlockElementAncestorOrThrow(anchorNode);\n if (typeof blockElement.getFormatType === 'function') {\n const formatType = blockElement.getFormatType();\n if (formatType === 'left' || formatType === 'center' || formatType === 'right' || formatType === 'justify') {\n state.alignment = formatType;\n }\n }\n } catch {\n state.alignment = 'left';\n }\n\n if (topLevelElement) {\n if ($isQuoteNode(topLevelElement)) {\n state.blockquote = true;\n } else if ($isHeadingNode(topLevelElement)) {\n state.textStyle = topLevelElement.getTag();\n } else if ($isListNode(topLevelElement)) {\n const listTag = topLevelElement.getTag();\n state.bulletList = listTag === 'ul';\n state.numberList = listTag === 'ol';\n } else {\n state.textStyle = 'paragraph';\n }\n }\n }\n });\n\n return state;\n};\n\nexport const useToolbarState = (): ToolbarState => {\n const [editor] = useLexicalComposerContext();\n const [state, setState] = useState<ToolbarState>(() => getToolbarState(editor));\n const editorRef = useRef(editor);\n\n useEffect(() => {\n editorRef.current = editor;\n }, [editor]);\n\n useEffect(() => {\n const updateState = (): void => {\n setState(getToolbarState(editorRef.current));\n };\n\n const updateListener = editor.registerUpdateListener(() => {\n updateState();\n });\n\n const formatTextListener = editor.registerCommand(\n FORMAT_TEXT_COMMAND,\n () => {\n updateState();\n return false;\n },\n 1\n );\n\n const formatElementListener = editor.registerCommand(\n FORMAT_ELEMENT_COMMAND,\n () => {\n updateState();\n return false;\n },\n 1\n );\n\n return () => {\n updateListener();\n formatTextListener();\n formatElementListener();\n };\n }, [editor]);\n\n return state;\n};\n","import type { Theme } from '@mui/material';\n\nexport const Style = ({ theme }: { theme: Theme }) => {\n return {\n '& .text-editor-wrapper': {\n width: '100%',\n },\n '& .editor-container': {\n width: '100%',\n border: `1px solid ${theme.palette.divider}`,\n borderRadius: theme.shape.borderRadius,\n maxWidth: '800px',\n margin: '40px auto',\n padding: theme.spacing(1.25),\n backgroundColor: theme.palette.background.paper,\n },\n '& .toolbar': {\n display: 'flex',\n gap: theme.spacing(1),\n padding: theme.spacing(0.75),\n borderBottom: `1px solid ${theme.palette.divider}`,\n },\n '& .toolbar button': {\n borderRadius: theme.shape.borderRadius,\n cursor: 'pointer',\n fontWeight: 'bold',\n minWidth: '35px',\n color: '#9fa5d3',\n background: '#0000',\n },\n '& .text-style-dropdown': {\n position: 'relative',\n display: 'inline-block',\n },\n '& .text-style-button': {\n padding: `${theme.spacing(0.5)} ${theme.spacing(1)}`,\n border: 'none',\n background: theme.palette.action.hover,\n borderRadius: theme.shape.borderRadius,\n cursor: 'pointer',\n display: 'flex',\n alignItems: 'center',\n gap: theme.spacing(0.75),\n minWidth: '100px',\n justifyContent: 'space-between',\n },\n '& .text-style-button:hover': {\n background: theme.palette.action.selected,\n },\n '& .text-style-label': {\n color: theme.palette.primary.main,\n flex: 1,\n textAlign: 'left',\n },\n '& .text-style-arrow': {\n fontSize: '10px',\n color: theme.palette.text.secondary,\n },\n '& .text-style-menu': {\n position: 'absolute',\n top: '100%',\n left: 0,\n marginTop: theme.spacing(0.5),\n background: theme.palette.background.paper,\n border: `1px solid ${theme.palette.divider}`,\n borderRadius: theme.shape.borderRadius,\n boxShadow: theme.shadows[2],\n zIndex: 1000,\n minWidth: '200px',\n padding: `${theme.spacing(0.5)} 0`,\n },\n '& .text-style-option': {\n width: '100%',\n padding: `${theme.spacing(1)} ${theme.spacing(2)}`,\n border: 'none',\n background: 'transparent',\n cursor: 'pointer',\n textAlign: 'left',\n display: 'flex',\n alignItems: 'center',\n transition: 'background-color 0.15s ease',\n },\n '& .text-style-option:hover': {\n background: theme.palette.action.hover,\n },\n '& .text-style-option.active': {\n background: theme.palette.action.selected,\n },\n '& .text-style-option-label': {\n color: theme.palette.text.primary,\n lineHeight: 1.5,\n },\n '& .text-style-option.active .text-style-option-label': {\n color: theme.palette.primary.main,\n },\n '& .alignment-dropdown': {\n position: 'relative',\n display: 'inline-block',\n },\n '& .alignment-button': {\n padding: `${theme.spacing(0.5)} ${theme.spacing(1)}`,\n border: 'none',\n background: theme.palette.action.hover,\n borderRadius: theme.shape.borderRadius,\n cursor: 'pointer',\n display: 'flex',\n alignItems: 'center',\n gap: theme.spacing(0.75),\n minWidth: '40px',\n justifyContent: 'space-between',\n },\n '& .alignment-button:hover': {\n background: theme.palette.action.selected,\n },\n '& .alignment-icon': {\n display: 'flex',\n alignItems: 'center',\n color: theme.palette.primary.main,\n },\n '& .alignment-arrow': {\n fontSize: '10px',\n color: theme.palette.text.secondary,\n },\n '& .alignment-menu': {\n position: 'absolute',\n top: '100%',\n left: 0,\n marginTop: theme.spacing(0.5),\n background: theme.palette.background.paper,\n border: `1px solid ${theme.palette.divider}`,\n borderRadius: theme.shape.borderRadius,\n boxShadow: theme.shadows[2],\n zIndex: 1000,\n minWidth: '150px',\n padding: `${theme.spacing(0.5)} 0`,\n },\n '& .alignment-option': {\n width: '100%',\n padding: `${theme.spacing(1)} ${theme.spacing(2)}`,\n border: 'none',\n background: 'transparent',\n cursor: 'pointer',\n textAlign: 'left',\n display: 'flex',\n alignItems: 'center',\n gap: theme.spacing(1.5),\n transition: 'background-color 0.15s ease',\n },\n '& .alignment-option:hover': {\n background: theme.palette.action.hover,\n },\n '& .alignment-option.active': {\n background: theme.palette.action.selected,\n },\n '& .alignment-option-icon': {\n display: 'flex',\n alignItems: 'center',\n color: theme.palette.text.secondary,\n minWidth: '20px',\n },\n '& .alignment-option.active .alignment-option-icon': {\n color: theme.palette.primary.main,\n },\n '& .alignment-option-label': {\n color: theme.palette.text.primary,\n lineHeight: 1.5,\n },\n '& .alignment-option.active .alignment-option-label': {\n color: theme.palette.primary.main,\n },\n '& .color-picker': {\n position: 'relative',\n display: 'inline-block',\n },\n '& .color-picker-button': {\n padding: `${theme.spacing(0.5)} ${theme.spacing(1)}`,\n border: 'none',\n background: theme.palette.action.hover,\n borderRadius: theme.shape.borderRadius,\n cursor: 'pointer',\n display: 'flex',\n alignItems: 'center',\n gap: theme.spacing(0.75),\n minWidth: '40px',\n justifyContent: 'space-between',\n transition: 'all 0.2s ease',\n },\n '& .color-picker-button:hover': {\n background: theme.palette.action.selected,\n },\n '& .color-picker-button.active': {\n background: theme.palette.action.selected,\n border: `2px solid ${theme.palette.primary.main}`,\n },\n '& .color-picker-icon': {\n display: 'flex',\n alignItems: 'center',\n },\n '& .color-picker-arrow': {\n fontSize: '10px',\n color: theme.palette.text.secondary,\n },\n '& .color-picker-menu': {\n position: 'absolute',\n top: '100%',\n left: 0,\n marginTop: theme.spacing(0.5),\n background: theme.palette.background.paper,\n border: `1px solid ${theme.palette.divider}`,\n borderRadius: theme.shape.borderRadius,\n boxShadow: theme.shadows[2],\n zIndex: 1000,\n padding: theme.spacing(1),\n },\n '& .color-picker-grid': {\n display: 'grid',\n gridTemplateColumns: 'repeat(6, 1fr)',\n gap: theme.spacing(0.5),\n width: '180px',\n },\n '& .color-swatch': {\n width: '24px',\n height: '24px',\n border: `1px solid ${theme.palette.divider}`,\n borderRadius: theme.shape.borderRadius,\n cursor: 'pointer',\n position: 'relative',\n padding: 0,\n transition: 'transform 0.1s ease, box-shadow 0.1s ease',\n },\n '& .color-swatch:hover': {\n transform: 'scale(1.1)',\n boxShadow: theme.shadows[2],\n zIndex: 1,\n },\n '& .color-swatch.active': {\n border: `2px solid ${theme.palette.primary.main}`,\n boxShadow: `0 0 0 1px ${theme.palette.background.paper}, 0 0 0 3px ${theme.palette.primary.main}`,\n },\n '& .color-swatch-check': {\n position: 'absolute',\n top: '50%',\n left: '50%',\n transform: 'translate(-50%, -50%)',\n color: theme.palette.common.white,\n fontSize: '12px',\n fontWeight: 'bold',\n textShadow: '0 0 2px rgba(0, 0, 0, 0.5)',\n },\n };\n};\n\n","import type React from 'react';\n\nimport { $generateHtmlFromNodes } from '@lexical/html';\nimport { LexicalComposer } from '@lexical/react/LexicalComposer';\nimport { ContentEditable } from '@lexical/react/LexicalContentEditable';\nimport { LexicalErrorBoundary } from '@lexical/react/LexicalErrorBoundary';\nimport { HistoryPlugin } from '@lexical/react/LexicalHistoryPlugin';\nimport { ListPlugin } from '@lexical/react/LexicalListPlugin';\nimport { OnChangePlugin } from '@lexical/react/LexicalOnChangePlugin';\nimport { RichTextPlugin } from '@lexical/react/LexicalRichTextPlugin';\n\nimport { Box, styled } from '@mui/material';\n\nimport './lexicalStyles.css';\nimport { editorConfig } from './config';\nimport { Toolbar } from './plugins/toolbar';\nimport { Style } from './style';\n\nimport type { EditorState, LexicalEditor } from 'lexical';\n\nexport interface TextEditorProps {\n value?: string;\n onChange?: (data: string) => void;\n onReady?: (editor: LexicalEditor) => void;\n onBlur?: (event: unknown, editor: LexicalEditor) => void;\n onFocus?: (event: unknown, editor: LexicalEditor) => void;\n disabled?: boolean;\n placeholder?: string;\n className?: string;\n}\n\nconst TextEditor: React.FC<TextEditorProps> = ({\n onChange = () => { },\n placeholder = 'Start typing...',\n className = '',\n}) => {\n const handleChange = (editorState: EditorState, editor: LexicalEditor) => {\n editorState.read(() => {\n const htmlString = $generateHtmlFromNodes(editor, null);\n onChange(htmlString);\n });\n };\n\n return (\n <Box className={`text-editor-wrapper ${className}`}>\n <Box className=\"editor-container\">\n <LexicalComposer initialConfig={editorConfig}>\n <Toolbar />\n <RichTextPlugin\n contentEditable={<ContentEditable className=\"editor-input\" />}\n placeholder={<Box className=\"editor-placeholder\">{placeholder}</Box>}\n ErrorBoundary={LexicalErrorBoundary}\n />\n <ListPlugin />\n <HistoryPlugin />\n <OnChangePlugin onChange={handleChange} />\n </LexicalComposer>\n </Box>\n </Box>\n );\n};\n\nTextEditor.displayName = 'TextEditor';\n\nexport default styled(TextEditor)(Style);\n","export interface LexicalTheme {\n paragraph?: string;\n text?: {\n bold?: string;\n italic?: string;\n underline?: string;\n strikethrough?: string;\n underlineStrikethrough?: string;\n subscript?: string;\n superscript?: string;\n code?: string;\n };\n heading?: {\n h1?: string;\n h2?: string;\n h3?: string;\n h4?: string;\n h5?: string;\n h6?: string;\n };\n list?: {\n nested?: {\n listitem?: string;\n };\n ol?: string;\n ul?: string;\n listitem?: string;\n };\n quote?: string;\n code?: string;\n codeHighlight?: {\n [key: string]: string;\n };\n}\n\nexport const theme: LexicalTheme = {\n paragraph: 'editor-paragraph',\n text: {\n bold: 'editor-textBold',\n italic: 'editor-textItalic',\n underline: 'editor-textUnderline',\n strikethrough: 'editor-textStrikethrough',\n subscript: 'editor-textSubscript',\n superscript: 'editor-textSuperscript',\n },\n heading: {\n h1: 'editor-heading-h1',\n h2: 'editor-heading-h2',\n h3: 'editor-heading-h3',\n h4: 'editor-heading-h4',\n h5: 'editor-heading-h5',\n h6: 'editor-heading-h6',\n },\n list: {\n ol: 'editor-list-ol',\n ul: 'editor-list-ul',\n listitem: 'editor-list-item',\n },\n quote: 'editor-quote',\n};","export const Style = () => ({\n '.MuiOutlinedInput-root': {\n borderRadius: '50px !important',\n },\n '.MuiInputBase-multiline': {\n borderRadius: '8px !important',\n }\n});","import { forwardRef } from 'react'\n\nimport { TextField, styled } from '@mui/material'\nimport type { TextFieldProps } from '@mui/material'\n\nimport { Style } from './style'\ninterface TextInputProps extends Omit<TextFieldProps, 'variant'> {\n variant?: 'outlined' | 'filled' | 'standard';\n size?: 'small' | 'medium';\n error?: boolean;\n helperText?: string;\n fullWidth?: boolean;\n label?: string;\n placeholder?: string;\n type?: string;\n required?: boolean;\n disabled?: boolean;\n}\n\nconst TextInput = forwardRef<HTMLDivElement, TextInputProps>(({\n variant = 'outlined',\n size = 'small',\n error = false,\n helperText,\n fullWidth = true,\n label,\n placeholder = 'Enter text here...',\n type = 'text',\n required = false,\n disabled = false,\n className = '',\n ...props\n}, ref) => {\n\n return (\n <TextField\n className={className}\n ref={ref}\n variant={variant}\n size={size}\n fullWidth={fullWidth}\n label={label}\n placeholder={placeholder}\n type={type}\n required={required}\n disabled={disabled}\n error={error}\n helperText={helperText}\n {...props}\n />\n )\n})\n\nTextInput.displayName = 'TextInput'\n\nexport default styled(TextInput)(Style)","import type React from 'react';\n\nimport CssBaseline from '@mui/material/CssBaseline';\nimport { createTheme, ThemeProvider as MuiThemeProvider, type Theme } from '@mui/material/styles';\n\ninterface ThemeProviderProps {\n theme?: Theme;\n children: React.ReactNode;\n enableCssBaseline?: boolean;\n}\n\nconst ThemeProvider: React.FC<ThemeProviderProps> = ({\n theme = createTheme({}),\n children,\n enableCssBaseline = true,\n}) => {\n return (\n <MuiThemeProvider theme={theme}>\n {enableCssBaseline && <CssBaseline />}\n {children}\n </MuiThemeProvider>\n );\n};\n\nexport default ThemeProvider;\n","import type React from 'react';\n\nimport type { PickerChangeHandlerContext, TimeValidationError } from '@mui/x-date-pickers';\nimport { LocalizationProvider, TimePicker as MuiTimePicker } from '@mui/x-date-pickers';\nimport { AdapterDayjs } from '@mui/x-date-pickers/AdapterDayjs';\nimport type { PickerValue } from '@mui/x-date-pickers/internals';\nimport type { TimePickerProps as MuiTimePickerProps } from '@mui/x-date-pickers/TimePicker';\n\nexport interface TimePickerProps {\n value?: PickerValue | undefined;\n onChange?: (value: PickerValue, context: PickerChangeHandlerContext<TimeValidationError>) => void;\n className?: string;\n disabled?: boolean;\n slotProps?: MuiTimePickerProps['slotProps'];\n viewRenderers?: MuiTimePickerProps['viewRenderers'];\n onOpen?: () => void;\n onClose?: () => void;\n}\n\nconst TimePicker: React.FC<TimePickerProps> = ({\n value = null,\n onChange = () => { },\n className = '',\n disabled = false,\n slotProps = {},\n viewRenderers = {},\n onOpen = () => { },\n onClose = () => { },\n ...props\n}) => {\n return (\n <LocalizationProvider dateAdapter={AdapterDayjs}>\n <MuiTimePicker\n value={value}\n onChange={onChange}\n disabled={disabled}\n className={className}\n slotProps={slotProps}\n viewRenderers={viewRenderers}\n onOpen={onOpen}\n onClose={onClose}\n {...props}\n />\n </LocalizationProvider>\n );\n};\n\nTimePicker.displayName = 'TimePicker';\n\nexport default TimePicker;","export const Style = () => {\n return {\n '.timeline-title': {\n fontWeight: '600',\n marginBottom: '4px',\n },\n };\n};","import type React from 'react';\n\nimport {\n Timeline as MuiTimeline,\n TimelineItem as MuiTimelineItem,\n TimelineSeparator as MuiTimelineSeparator,\n TimelineConnector as MuiTimelineConnector,\n TimelineContent as MuiTimelineContent,\n TimelineDot as MuiTimelineDot,\n TimelineOppositeContent as MuiTimelineOppositeContent,\n type TimelineProps as MuiTimelineProps,\n} from '@mui/lab';\nimport { Box, styled } from '@mui/material';\n\nimport { Style } from './style';\nexport interface TimelineItemConfig {\n id: string | number;\n title?: React.ReactNode;\n content: React.ReactNode;\n oppositeContent?: React.ReactNode;\n dotColor?:\n | 'primary'\n | 'secondary'\n | 'error'\n | 'info'\n | 'success'\n | 'warning'\n | 'grey'\n | 'inherit';\n dotVariant?: 'filled' | 'outlined';\n icon?: React.ReactNode;\n showConnector?: boolean;\n}\n\nexport interface TimelineProps extends MuiTimelineProps {\n items: TimelineItemConfig[];\n position?: 'left' | 'right' | 'alternate' | 'alternate-reverse';\n showConnectors?: boolean;\n}\n\nconst Timeline: React.FC<TimelineProps> = ({\n items = [],\n position = 'right',\n showConnectors = true,\n ...restProps\n}) => {\n return (\n <MuiTimeline position={position} {...restProps}>\n {items.map((item, index) => {\n const isLastItem = index === items.length - 1;\n const showItemConnector = showConnectors && (item.showConnector ?? !isLastItem);\n\n return (\n <MuiTimelineItem key={item.id}>\n {item.oppositeContent && (\n <MuiTimelineOppositeContent>\n {item.oppositeContent}\n </MuiTimelineOppositeContent>\n )}\n\n <MuiTimelineSeparator>\n <MuiTimelineDot\n color={item.dotColor || 'primary'}\n variant={item.dotVariant || 'filled'}\n >\n {item.icon}\n </MuiTimelineDot>\n {showItemConnector && (\n <MuiTimelineConnector />\n )}\n </MuiTimelineSeparator>\n\n <MuiTimelineContent>\n {item.title && (\n <Box className='timeline-title'>\n {item.title}\n </Box>\n )}\n {item.content}\n </MuiTimelineContent>\n </MuiTimelineItem>\n );\n })}\n </MuiTimeline>\n );\n};\n\nexport default styled(Timeline)(Style);\n","import type React from 'react';\n\nimport {\n Tooltip as MuiTooltip,\n type TooltipProps as MuiTooltipProps,\n} from '@mui/material';\n\nexport interface TooltipProps extends Omit<MuiTooltipProps, 'title'> {\n title: React.ReactNode;\n children: React.ReactElement;\n arrow: boolean;\n placement?:\n | 'bottom-end'\n | 'bottom-start'\n | 'bottom'\n | 'left-end'\n | 'left-start'\n | 'left'\n | 'right-end'\n | 'right-start'\n | 'right'\n | 'top-end'\n | 'top-start'\n | 'top';\n className?: string;\n}\n\nconst Tooltip: React.FC<TooltipProps> = ({\n title = '',\n children,\n arrow = true,\n placement = 'bottom',\n className = '',\n ...props\n}) => {\n return (\n <MuiTooltip\n title={title}\n arrow={arrow}\n placement={placement}\n className={className}\n {...props}\n >\n {children}\n </MuiTooltip>\n );\n};\n\nTooltip.displayName = 'Tooltip';\n\nexport default Tooltip;\n","import type React from 'react';\n\nimport { Typography as MuiTypography } from '@mui/material';\nimport type { TypographyProps as MuiTypographyProps } from '@mui/material';\nexport interface TypographyProps extends Omit<MuiTypographyProps, 'variant'> {\n variant?: 'h1' | 'h2' | 'h3' | 'h4' | 'h5' | 'h6' | 'body1' | 'body2' | 'caption' | 'button';\n className?: string;\n children: React.ReactNode;\n}\n\nconst Typography: React.FC<TypographyProps> = ({\n className = '',\n variant = 'body1',\n children,\n ...props\n}) => {\n return (\n <MuiTypography\n variant={variant}\n className={className}\n {...props}\n >\n {children}\n </MuiTypography>\n );\n};\n\nTypography.displayName = 'Typography';\n\nexport default Typography;","import type React from 'react';\nimport { memo, useCallback } from 'react';\n\nimport { Checkbox, FormControlLabel, FormGroup, Grid, styled } from '@mui/material';\n\nimport { ACTION_TYPES, getViewOptions } from './constants';\nimport { PopoverStyle } from './popoverStyle';\n\nimport { POPOVER_ANCHOR_ORIGIN, POPOVER_TRANSFORM_ORIGIN } from '../../constants/viewHeaderConstants';\nimport { Popover } from '../popOver';\nimport { Typography } from '../typography';\n\nexport interface DefaultViewPopoverProps {\n open: HTMLElement | null;\n setOpen: (element: HTMLElement | null) => void;\n viewType: string;\n handleClick: (item: string, data?: { [key: string]: unknown }) => void;\n className?: string;\n}\n\nconst DefaultViewPopover: React.FC<DefaultViewPopoverProps> = memo(({\n open = null,\n setOpen = () => { },\n viewType = '',\n handleClick = () => { },\n className = ''\n}) => {\n const VIEW_OPTIONS = getViewOptions(viewType);\n\n const handleClose = useCallback(() => {\n setOpen(null);\n }, [setOpen]);\n\n const handleOptionChange = useCallback((value: string) => {\n handleClick(ACTION_TYPES.DEFAULT_VIEW, { value });\n handleClose();\n }, [handleClick, handleClose]);\n\n return (\n <Popover\n open={Boolean(open)}\n anchorEl={open}\n onClose={handleClose}\n anchorOrigin={POPOVER_ANCHOR_ORIGIN}\n transformOrigin={POPOVER_TRANSFORM_ORIGIN}\n className={className}\n >\n <Grid className=\"default-view-grid\">\n <FormGroup>\n {VIEW_OPTIONS.map((option) => (\n <FormControlLabel\n key={option.value || 'none'}\n className=\"default-view-label\"\n control={\n <Checkbox\n checked={option.checked}\n onChange={() => { handleOptionChange(option.value); }}\n />\n }\n label={\n <Typography fontSize={15}>\n {option.label}\n </Typography>\n }\n />\n ))}\n </FormGroup>\n </Grid>\n </Popover>\n );\n});\n\nDefaultViewPopover.displayName = 'DefaultViewPopover';\n\nexport default styled(DefaultViewPopover)(PopoverStyle);","import type React from 'react';\nimport { memo, useCallback } from 'react';\n\nimport { Checkbox, FormControlLabel, FormGroup, Grid, styled } from '@mui/material';\n\nimport { ACTION_TYPES } from './constants';\nimport { PopoverStyle } from './popoverStyle';\n\nimport { POPOVER_ANCHOR_ORIGIN, POPOVER_TRANSFORM_ORIGIN } from '../../constants/viewHeaderConstants';\nimport { Popover } from '../popOver';\nimport { Typography } from '../typography';\n\nexport interface ColumnHeader {\n field: string;\n label: string;\n visible?: boolean;\n disabled?: boolean;\n}\n\nexport interface ColumnSettingsPopoverProps {\n open: HTMLElement | null;\n setOpen: (element: HTMLElement | null) => void;\n handleClick: (item: string, data?: { [key: string]: unknown }) => void;\n headers: ColumnHeader[];\n className?: string;\n}\n\nconst ColumnSettingsPopover: React.FC<ColumnSettingsPopoverProps> = memo(({\n open = null,\n setOpen = () => { },\n headers = [],\n handleClick = () => { },\n className = ''\n}) => {\n const handleClose = useCallback(() => {\n setOpen(null);\n }, [setOpen]);\n\n const handleOptionChange = useCallback((tmpHeaders: ColumnHeader[]) => {\n handleClick(ACTION_TYPES.COLUMN_SETTINGS, { headers: tmpHeaders });\n }, [handleClick]);\n\n const allChecked = headers.every((column) => column.visible);\n\n return (\n <Popover\n open={Boolean(open)}\n anchorEl={open}\n onClose={handleClose}\n anchorOrigin={POPOVER_ANCHOR_ORIGIN}\n transformOrigin={POPOVER_TRANSFORM_ORIGIN}\n className={className}\n >\n <Grid className=\"column-settings-grid\">\n <Typography variant=\"body1\" className=\"column-settings-title\">COLUMN SETTINGS</Typography>\n <FormGroup>\n <FormControlLabel\n key=\"select-all\"\n className=\"column-settings-label\"\n control={\n <Checkbox\n checked={allChecked}\n onChange={() => {\n const tmpHeaders = [...headers];\n const updatedHeaders = tmpHeaders.map((m) => ({ ...m, visible: m.disabled ? true : !allChecked }));\n handleOptionChange(updatedHeaders);\n }}\n />\n }\n label=\"Select All\"\n />\n {headers.map((item) => (\n <FormControlLabel\n key={item.field}\n className=\"column-settings-label\"\n control={\n <Checkbox\n checked={item.visible || false}\n onChange={() => {\n const tmpHeaders = [...headers];\n const curIndex = tmpHeaders.findIndex((header) => header.field === item.field);\n if (curIndex !== -1) {\n tmpHeaders[curIndex].visible = !tmpHeaders[curIndex].visible;\n handleOptionChange(tmpHeaders);\n }\n }}\n disabled={item.disabled === true}\n />\n }\n label={item.label}\n />\n ))}\n </FormGroup>\n </Grid>\n </Popover>\n );\n});\n\nColumnSettingsPopover.displayName = 'ColumnSettingsPopover';\n\nexport default styled(ColumnSettingsPopover)(PopoverStyle);","export const ACTION_TYPES = {\n ADD: 'ADD',\n CLEAR_FILTERS: 'CLEAR_FILTERS',\n COLUMN_SETTINGS: 'COLUMN_SETTINGS',\n DATE_RANGE_PICKER: 'DATE_RANGE_PICKER',\n DEFAULT_VIEW: 'DEFAULT_VIEW',\n DOWNLOAD: 'DOWNLOAD',\n LIST_SEARCH: 'LIST_SEARCH',\n TILE_SEARCH: 'TILE_SEARCH',\n VIEW_SWITCH: 'VIEW_SWITCH',\n} as const;\n\nexport interface ViewOption {\n value: string;\n label: string;\n checked: boolean;\n}\n\nexport const getViewOptions = (viewType: string): ViewOption[] => [\n {\n value: 'LIST',\n label: 'Set as default : List View',\n checked: viewType === 'LIST',\n },\n {\n value: 'TILE',\n label: 'Set as default : Card View',\n checked: viewType === 'TILE',\n },\n {\n value: '',\n label: 'None',\n checked: !viewType,\n }\n];\n\n","import type React from 'react';\n\nimport type { HandleClick } from './types';\n\nimport { AddIcon } from '../../../assets/svg';\nimport { Button } from '../../button';\nimport { ACTION_TYPES } from '../constants';\n\nexport interface AddProps {\n title?: string;\n handleClick?: HandleClick;\n}\n\nexport const Add: React.FC<AddProps> = ({\n title = '',\n handleClick = () => { }\n}) => {\n return (\n <Button\n size=\"small\"\n variant=\"contained\"\n onClick={() => handleClick(ACTION_TYPES.ADD)}\n startIcon={<AddIcon />}\n aria-label={title}\n className=\"addButton\"\n >\n {title}\n </Button>\n );\n};\n\n","import type React from 'react';\nimport { useState, useCallback } from 'react';\n\nimport type { HandleClick } from './types';\n\nimport { ColumnSettingsIcon } from '../../../assets/svg';\nimport { IconButton } from '../../iconButton';\nimport { Tooltip } from '../../toolTip';\nimport ColumnSettingsPopover from '../columnSettingsPopover';\n\nexport interface ColumnHeader {\n field: string;\n label: string;\n visible?: boolean;\n disabled?: boolean;\n}\n\nexport interface ColumnSettingsProps {\n headers?: ColumnHeader[];\n handleClick?: HandleClick;\n}\n\nexport const ColumnSettings: React.FC<ColumnSettingsProps> = ({\n headers = [],\n handleClick = () => { }\n}) => {\n const [open, setOpen] = useState<HTMLElement | null>(null);\n\n const handleIconClick = useCallback((event: React.MouseEvent<HTMLButtonElement>) => {\n setOpen(event.currentTarget);\n }, []);\n\n return (\n <>\n <Tooltip arrow title=\"Column Settings\">\n <IconButton className=\"roundIcon columnSettings\" onClick={handleIconClick}>\n <ColumnSettingsIcon />\n </IconButton>\n </Tooltip>\n <ColumnSettingsPopover\n open={open}\n setOpen={setOpen}\n headers={headers}\n handleClick={handleClick}\n />\n </>\n );\n};\n\n","import type React from 'react';\n\nimport type { HandleClick } from './types';\n\nimport { DateRangePicker } from '../../dateRangePicker';\nimport { ACTION_TYPES } from '../constants';\n\nimport type { Dayjs } from 'dayjs';\n\nexport interface DateRangePickerActionProps {\n handleClick?: HandleClick;\n handleDateChange?: (dates: [Dayjs | null, Dayjs | null] | null) => void;\n}\n\nexport const DateRangePickerAction: React.FC<DateRangePickerActionProps> = ({\n handleClick = () => { },\n handleDateChange = () => { }\n}) => {\n return (\n <DateRangePicker\n onChange={(dates) => {\n handleDateChange(dates);\n handleClick(ACTION_TYPES.DATE_RANGE_PICKER, { dates });\n }}\n />\n );\n};\n","import type React from 'react';\nimport { useState, useCallback } from 'react';\n\nimport type { HandleClick } from './types';\n\nimport { MoreIcon } from '../../../assets/svg';\nimport { IconButton } from '../../iconButton';\nimport { Tooltip } from '../../toolTip';\nimport DefaultViewPopover from '../DefaultViewPopover';\n\nexport interface DefaultViewProps {\n viewType?: string;\n handleClick?: HandleClick;\n}\n\nexport const DefaultView: React.FC<DefaultViewProps> = ({\n viewType = '',\n handleClick = () => { }\n}) => {\n const [open, setOpen] = useState<HTMLElement | null>(null);\n\n const handleIconClick = useCallback((event: React.MouseEvent<HTMLButtonElement>) => {\n setOpen(event.currentTarget);\n }, []);\n\n return (\n <>\n <Tooltip arrow title=\"Default view\">\n <IconButton onClick={handleIconClick}>\n <MoreIcon />\n </IconButton>\n </Tooltip>\n <DefaultViewPopover\n open={open}\n setOpen={setOpen}\n viewType={viewType}\n handleClick={handleClick}\n />\n </>\n );\n};\n\n","import type React from 'react';\n\nimport type { HandleClick } from './types';\n\nimport { DownloadIcon } from '../../../assets/svg';\nimport { IconButton } from '../../iconButton';\nimport { Tooltip } from '../../toolTip';\nimport { ACTION_TYPES } from '../constants';\n\nexport interface DownloadProps {\n handleClick?: HandleClick;\n}\n\nexport const Download: React.FC<DownloadProps> = ({\n handleClick = () => { }\n}) => {\n return (\n <Tooltip arrow title=\"Download\">\n <IconButton className=\"roundIcon\" onClick={() => handleClick(ACTION_TYPES.DOWNLOAD)}>\n <DownloadIcon />\n </IconButton>\n </Tooltip>\n );\n};\n\n","import { Add } from './add';\nimport { ColumnSettings } from './columnSettings';\nimport { DateRangePickerAction } from './dateRangePicker';\nimport { DefaultView } from './defaultView';\nimport { Download } from './download';\nimport { ListSearch } from './listSearch';\nimport { TileSearch } from './tileSearch';\nimport { ViewSwitch } from './viewSwitch';\n\nexport const defaultActions = {\n LIST_SEARCH: ListSearch,\n TILE_SEARCH: TileSearch,\n DOWNLOAD: Download,\n COLUMN_SETTINGS: ColumnSettings,\n VIEW_SWITCH: ViewSwitch,\n DEFAULT_VIEW: DefaultView,\n ADD: Add,\n DATE_RANGE_PICKER: DateRangePickerAction,\n};\n\n","import type React from 'react';\n\nimport { Box } from '@mui/material';\n\nimport type { HandleClick } from './types';\n\nimport { ClearFilterIcon, SearchIcon } from '../../../assets/svg';\nimport { IconButton } from '../../iconButton';\nimport { Tooltip } from '../../toolTip';\nimport { ACTION_TYPES } from '../constants';\n\nexport interface ListSearchProps {\n hasSearchValue?: boolean;\n handleClick?: HandleClick;\n}\n\nexport const ListSearch: React.FC<ListSearchProps> = ({\n hasSearchValue = false,\n handleClick = () => { }\n}) => {\n return (\n <Box display=\"flex\" alignItems=\"center\">\n {hasSearchValue && (\n <Tooltip arrow title=\"Clear Filter\">\n <IconButton\n className=\"closeRoundIcon\"\n onClick={() => handleClick(ACTION_TYPES.CLEAR_FILTERS)}\n >\n <ClearFilterIcon />\n </IconButton>\n </Tooltip>\n )}\n\n <Tooltip arrow title=\"Search\">\n <IconButton\n className=\"roundIcon\"\n onClick={() => handleClick(ACTION_TYPES.LIST_SEARCH)}\n >\n <SearchIcon />\n </IconButton>\n </Tooltip>\n </Box>\n );\n};\n\n","import type React from 'react';\n\nimport type { HandleClick } from './types';\n\nimport { SearchBar } from '../../searchBar';\nimport { ACTION_TYPES } from '../constants';\n\nexport interface TileSearchProps {\n tileSearch?: string;\n handleClick?: HandleClick;\n setTileSearch?: (search: string) => void;\n}\n\nexport const TileSearch: React.FC<TileSearchProps> = ({\n tileSearch = '',\n handleClick = () => { },\n setTileSearch = () => { }\n}) => {\n return (\n <SearchBar\n search={tileSearch}\n handleClick={handleClick}\n setSearch={setTileSearch}\n actionType={ACTION_TYPES.TILE_SEARCH}\n />\n );\n};\n\n","import type React from 'react';\nimport { useCallback } from 'react';\n\nimport { ToggleButton, ToggleButtonGroup } from '@mui/material';\n\nimport type { HandleClick } from './types';\n\nimport { ListViewIcon, TileViewIcon } from '../../../assets/svg';\nimport { Tooltip } from '../../toolTip';\nimport { ACTION_TYPES } from '../constants';\n\nexport interface ViewSwitchProps {\n viewType?: string;\n handleClick?: HandleClick;\n}\n\nexport const ViewSwitch = ({ viewType = 'TILE', handleClick = () => { } }: ViewSwitchProps) => {\n const handleViewSwitch = useCallback((_: React.MouseEvent<HTMLElement>, value: string) => {\n if (value) {\n handleClick(ACTION_TYPES.VIEW_SWITCH, { value });\n }\n }, [handleClick]);\n\n return (\n <ToggleButtonGroup\n className=\"toggleBtns\"\n value={viewType}\n exclusive\n onChange={handleViewSwitch}\n aria-label=\"view type selection\"\n >\n <Tooltip title=\"List\" placement=\"top\" arrow>\n <ToggleButton value=\"LIST\" aria-label=\"List View\">\n <ListViewIcon />\n </ToggleButton>\n </Tooltip>\n <Tooltip title=\"Card\" placement=\"top\" arrow>\n <ToggleButton value=\"TILE\" aria-label=\"Tile View\">\n <TileViewIcon />\n </ToggleButton>\n </Tooltip>\n </ToggleButtonGroup>\n );\n};\n\n","import type { Theme } from '@mui/material';\n\nexport const PopoverStyle = ({ theme }: { theme: Theme }) => ({\n '& .column-settings-grid': {\n width: '215px',\n maxHeight: '475px',\n padding: theme.spacing(2),\n },\n '& .column-settings-title': {\n fontSize: '14px',\n fontWeight: 600,\n paddingBottom: theme.spacing(1),\n },\n '& .column-settings-label': {\n marginRight: 0,\n },\n '& .default-view-grid': {\n width: '300px',\n padding: theme.spacing(5),\n },\n '& .default-view-label': {\n marginRight: 0,\n },\n});\n\n","import type { Theme } from '@mui/material';\n\nexport const Style = ({ theme }: { theme: Theme }) => ({\n paddingBottom: '16px',\n justifyContent: 'flex-end',\n '& .roundIcon': {\n border: `1px solid ${theme.palette.border?.icon || '#E7E8F7'}`,\n background: theme.palette.bg?.iconBg || '#FAFAFD',\n width: '34px',\n height: '34px',\n '& svg': {\n width: '13px',\n height: '13px'\n },\n '&.columnSettings': {\n '& svg': {\n width: '17px',\n height: '17px'\n },\n }\n },\n '& .toggleBtns': {\n height: '34px',\n '& .MuiToggleButtonGroup-grouped': {\n padding: '5px 10px',\n '& .fillPath': {\n fill: theme.palette.secondary.main\n },\n '&:first-of-type': {\n borderTopLeftRadius: '30px',\n borderBottomLeftRadius: '30px'\n },\n '&:last-child': {\n borderTopRightRadius: '30px',\n borderBottomRightRadius: '30px'\n },\n '&.Mui-selected': {\n background: theme.palette.primary.main,\n '& .fillPath': {\n fill: '#fff'\n },\n }\n }\n },\n '& .addButton': {\n paddingLeft: '24px',\n paddingRight: '24px',\n '& .MuiButton-startIcon': {\n marginRight: '6px !important'\n }\n },\n '& .closeRoundIcon': {\n border: '1px solid #E7E8F7',\n background: '#FAFAFD',\n width: '34px',\n height: '34px',\n marginRight: '8px',\n '& .MuiSvgIcon-root': {\n width: '18px',\n height: '18px',\n fill: theme.palette.secondary.main\n }\n },\n '& .view-header-container': {\n display: 'flex',\n justifyContent: 'flex-end',\n gap: theme.spacing(1),\n flexWrap: 'wrap',\n paddingBottom: '16px',\n },\n '& .actionItem': {\n display: 'inline-flex',\n }\n});","import type React from 'react';\nimport { memo } from 'react';\n\nimport { Grid, styled } from '@mui/material';\n\nimport type { ColumnHeader } from './columnSettingsPopover';\nimport { defaultActions } from './defaultActions/index';\nimport { Style } from './style';\n\ninterface HeaderItemValue {\n disabled?: boolean;\n tooltip?: string;\n className?: string;\n viewType?: string;\n title?: string;\n headers?: ColumnHeader[];\n visible?: boolean;\n [key: string]: unknown;\n}\n\ninterface HeaderItem {\n [key: string]: HeaderItemValue | null;\n}\n\ninterface ActionProps {\n handleClick: (item: string, data?: { [key: string]: unknown }) => void;\n [key: string]: unknown;\n}\n\ntype ActionKey = keyof typeof defaultActions;\n\ninterface ViewHeaderProps {\n headerItems?: HeaderItem;\n customActions?: Partial<Record<ActionKey, (props: ActionProps) => React.ReactNode>>;\n handleClick?: (item: string, data?: { [key: string]: unknown }) => void;\n className?: string;\n}\n\nconst ViewHeader: React.FC<ViewHeaderProps> = memo((props) => {\n const {\n className = '',\n customActions = {},\n headerItems = {},\n handleClick = () => { },\n } = props;\n\n return (\n <Grid container spacing={1} className={`view-header-container ${className}`}>\n {Object.keys(headerItems).map((item: string) => {\n const itemProps = headerItems[item] || {};\n const actionProps = { handleClick, ...itemProps } as ActionProps;\n const allActions = { ...defaultActions, ...customActions };\n const actionKey = item as ActionKey;\n\n const CurrentAction = actionKey in allActions ? (allActions[actionKey] as (props: ActionProps) => React.ReactNode)(actionProps) : null;\n\n if (itemProps.visible === false) return null;\n return (\n <Grid key={item} className=\"actionItem\">\n {CurrentAction}\n </Grid>\n );\n })}\n </Grid>\n );\n});\n\nViewHeader.displayName = 'ViewHeader';\n\nexport default styled(ViewHeader)(Style);\n","export const months = [\n 'Jan',\n 'Feb',\n 'Mar',\n 'Apr',\n 'May',\n 'Jun',\n 'Jul',\n 'Aug',\n 'Sep',\n 'Oct',\n 'Nov',\n 'Dec',\n];\n\nexport const weekDays = ['Su', 'Mo', 'Tu', 'We', 'Th', 'Fr', 'Sa'];","export const POPOVER_ANCHOR_ORIGIN = {\n vertical: 'bottom' as const,\n horizontal: 'right' as const,\n};\n\nexport const POPOVER_TRANSFORM_ORIGIN = {\n vertical: 'top' as const,\n horizontal: 'right' as const,\n};\n\n","import { useEffect, useState } from 'react';\n\n/**\n * Custom hook for debouncing a value.\n * @param value The value to debounce.\n * @param delay Delay in milliseconds before updating the debounced value.\n */\nexport const useDebounce = <T>(value: T, delay = 1000): T => {\n const [debouncedValue, setDebouncedValue] = useState(value);\n\n useEffect(() => {\n const timer = setTimeout(() => setDebouncedValue(value), delay);\n return () => clearTimeout(timer);\n }, [value, delay]);\n\n return debouncedValue;\n};\n","\n// Components\nexport {\n Button, Badge, BreadCrumb, ColorPicker, Drawer, SnackBar, Modal, Link,\n Tooltip, Popover, TimePicker, DatePicker, IconButton, Dialog, Timeline,\n LinearLoader, CircularLoader, MediaPlayer, Radio, Accordion, Slider, Switch,\n Menu, Chip, Select, MultiSelect, SearchBar, Typography, TextField, Tabs,\n TabPanel, TabContext, Avatar, AvatarGroup, AvatarStatus, AvatarTitle, ThemeProvider,\n TextEditor, ErrorBoundary, Carousal, CheckBox, Table, ViewHeader,\n\n\n type Theme, type Dayjs, type TableProps\n} from './components';\n\n// Hooks\nexport { useDebounce } from './hooks';\n\n// Utils\nexport {\n formatDate,\n isValidEmail,\n isEmpty,\n isEmptyString,\n isEmptyArray,\n isEmptyObject,\n\n getLocalStorageItem,\n setLocalStorageItem,\n removeLocalStorageItem,\n\n getSessionStorageItem,\n setSessionStorageItem,\n removeSessionStorageItem,\n\n getColorFromId,\n strEllipsis,\n getFormattedName,\n\n} from './utils';\n\n// Assets/Icons\nexport {\n EditIcon,\n SearchIcon,\n CloseIcon,\n DoubleArrow,\n ExpandMoreIcon,\n MoreIcon,\n} from './assets';\n","import dayjs, { type Dayjs } from 'dayjs';\nimport utc from 'dayjs/plugin/utc';\n\ndayjs.extend(utc);\n\n/**\n * Formats a date to a specific format string\n * @param date - The date to format (Date, string, number, Dayjs object, or boolean)\n * @param format - The format string (e.g., 'YYYY-MM-DD', 'MM/DD/YYYY', 'DD-MMM-YYYY')\n * @param utc - Whether to format the date in UTC (default: false)\n * @returns Formatted date string, or null if date is invalid\n */\nexport const formatDate = (date: Date | string | number | Dayjs | boolean | null | undefined, format: string, utc: boolean = false): string | null => {\n try {\n if (!date || typeof date === 'boolean') {\n return null;\n }\n const dayjsDate = utc ? dayjs.utc(date) : dayjs(date);\n if (!dayjsDate.isValid()) {\n return null;\n }\n return dayjsDate.format(format);\n } catch (_error) {\n return null;\n }\n};\n","/**\n * Validates whether a given string is a valid email address\n * @param email - The email string to validate\n * @returns true if the email is valid, false otherwise\n */\nexport const isValidEmail = (email: string): boolean => {\n if (!email || typeof email !== 'string') {\n return false;\n }\n\n const emailRegex = /^(?!\\.)(?!.*\\.\\.)[A-Za-z0-9.!#$%&'*+/=?^_`{|}~-]+(?<!\\.)@[A-Za-z0-9-]+(?:\\.[A-Za-z0-9-]+)*\\.[A-Za-z]{2,}$/;\n return emailRegex.test(email.trim());\n};\n\n","/**\n * Helper function to check if a value is null or undefined\n */\nconst isNullOrUndefined = (value: unknown): value is null | undefined => {\n return value === null || value === undefined;\n};\n\n/**\n * Checks if a string is empty (after trimming whitespace)\n * @param value - The string to check\n * @returns true if the string is empty or only whitespace, false otherwise\n */\nexport const isEmptyString = (value: string | null | undefined): boolean => {\n if (isNullOrUndefined(value)) {\n return true;\n }\n if (typeof value !== 'string') {\n return false;\n }\n return value.trim().length === 0;\n};\n\n/**\n * Checks if an array is empty\n * @param value - The array to check\n * @returns true if the array is empty, false otherwise\n */\nexport const isEmptyArray = (value: unknown[] | null | undefined): boolean => {\n if (isNullOrUndefined(value)) {\n return true;\n }\n if (!Array.isArray(value)) {\n return false;\n }\n return value.length === 0;\n};\n\n/**\n * Checks if an object is empty (has no keys)\n * @param value - The object to check\n * @returns true if the object is empty, false otherwise\n */\nexport const isEmptyObject = (value: Record<string, unknown> | null | undefined): boolean => {\n if (isNullOrUndefined(value)) {\n return true;\n }\n if (Array.isArray(value) || value.constructor !== Object) {\n return false;\n }\n return Object.keys(value).length === 0;\n};\n\n/**\n * Checks if a value is empty\n * @param value - The value to check (string, array, or object)\n * @returns true if the value is empty, false otherwise\n */\nexport const isEmpty = (value: string | unknown[] | Record<string, unknown> | null | undefined): boolean => {\n if (isNullOrUndefined(value)) {\n return true;\n }\n\n // Handle strings\n if (typeof value === 'string') {\n return isEmptyString(value);\n }\n\n // Handle arrays\n if (Array.isArray(value)) {\n return isEmptyArray(value);\n }\n\n // Handle objects\n if (typeof value === 'object') {\n return isEmptyObject(value);\n }\n\n // For other types, consider them as not empty\n return false;\n};\n\nconst colors = [\n '#e57373', '#f06292', '#ba68c8', '#9575cd', '#c5cae9',\n '#7986cb', '#4fc3f7', '#4dd0e1', '#4db6ac', '#81c784',\n '#aed581', '#dce775', '#ffee58', '#ffca28', '#ff7043',\n '#8d6e63', '#bdbdbd'\n];\nexport const getColorFromId = (id?: string | number | null | true): string => {\n if (!id && id !== 0) return colors[0];\n const str = String(id);\n const code = str.split('').reduce((acc, ch) => acc + ch.charCodeAt(0), 0);\n return colors[code % colors.length];\n};\n\n/**\n * Extracts initials from a name string\n * @param nameValue - The name string to extract initials from\n * @returns A string containing up to 2 uppercase initials\n */\nexport const getFormattedName = (nameValue?: string): string => {\n if (!nameValue) return '';\n return nameValue\n .slice()\n .split(' ')\n .map((word: string) => word[0] || '')\n .join('')\n .slice(0, 2)\n .toUpperCase();\n};\n\n/**\n * Truncates a string to a specified length and adds ellipsis if needed\n * @param str - The value to truncate (string, number, boolean, null, or undefined)\n * @param length - Maximum length before truncation (default: 25)\n * @returns Truncated string with ellipsis if needed, or the original string if shorter\n */\nexport const strEllipsis = (str: string | number | boolean | null | undefined, length: number = 25): string => {\n const stringValue = typeof str === 'string' ? str.trim() : String(str ?? '');\n return stringValue.length > length ? `${stringValue.substring(0, length)}...` : stringValue;\n};\n\n","/**\n * Retrieves an item from localStorage and parses it as JSON\n * @param key - The localStorage key to retrieve\n * @returns The parsed value if found and valid, null otherwise\n */\nexport const getLocalStorageItem = (key: string): unknown => {\n try {\n const item = window.localStorage.getItem(key);\n return item ? JSON.parse(item) : null;\n } catch (_error) {\n return null;\n }\n};\n\n/**\n * Sets an item in localStorage with JSON stringification\n * @param key - The localStorage key to set\n * @param value - The value to store (will be stringified as JSON)\n * @returns true if successful, false if an error occurred\n */\nexport const setLocalStorageItem = (key: string, value: unknown): boolean => {\n try {\n window.localStorage.setItem(key, JSON.stringify(value));\n return true;\n } catch (_error) {\n return false;\n }\n};\n\n/**\n * Removes an item from localStorage\n * @param key - The localStorage key to remove\n * @returns true if successful, false if an error occurred\n */\nexport const removeLocalStorageItem = (key: string): boolean => {\n try {\n window.localStorage.removeItem(key);\n return true;\n } catch {\n return false;\n }\n};","/**\n * Retrieves an item from sessionStorage and parses it as JSON\n * @param key - The sessionStorage key to retrieve\n * @returns The parsed value if found and valid, null otherwise\n */\nexport const getSessionStorageItem = (key: string): unknown => {\n try {\n const item = window.sessionStorage.getItem(key);\n return item ? JSON.parse(item) : null;\n } catch {\n return null;\n }\n};\n\n/**\n * Sets an item in sessionStorage with JSON stringification\n * @param key - The sessionStorage key to set\n * @param value - The value to store (will be stringified as JSON)\n * @returns true if successful, false if an error occurred\n */\nexport const setSessionStorageItem = (key: string, value: unknown): boolean => {\n try {\n window.sessionStorage.setItem(key, JSON.stringify(value));\n return true;\n } catch {\n return false;\n }\n};\n\n/**\n * Removes an item from sessionStorage\n * @param key - The sessionStorage key to remove\n * @returns true if successful, false if an error occurred\n */\nexport const removeSessionStorageItem = (key: string): boolean => {\n try {\n window.sessionStorage.removeItem(key);\n return true;\n } catch {\n return false;\n }\n};\n","const RefreshUtils = require('./refreshUtils');\nconst RefreshRuntime = require('react-refresh/runtime');\n\nfunction refresh(moduleId, webpackHot) {\n const currentExports = RefreshUtils.getModuleExports(moduleId);\n const fn = (exports) => {\n var errorOverlay;\n if (typeof __react_refresh_error_overlay__ !== 'undefined') {\n errorOverlay = __react_refresh_error_overlay__;\n }\n var testMode;\n if (typeof __react_refresh_test__ !== 'undefined') {\n testMode = __react_refresh_test__;\n }\n RefreshUtils.executeRuntime(\n exports,\n moduleId,\n webpackHot,\n errorOverlay,\n testMode,\n );\n };\n if (typeof Promise !== 'undefined' && currentExports instanceof Promise) {\n currentExports.then(fn);\n } else {\n fn(currentExports);\n }\n}\n\nmodule.exports = {\n refresh,\n register: RefreshRuntime.register,\n createSignatureFunctionForTransform:\n RefreshRuntime.createSignatureFunctionForTransform,\n};\n","var RefreshRuntime = require('react-refresh/runtime');\nvar safeThis = (function () {\n // copied from core-js-pure/features/global-this\n 'use strict';\n\n var check = function (it) {\n return it && it.Math == Math && it;\n };\n\n // https://github.com/zloirock/core-js/issues/86#issuecomment-115759028\n // eslint-disable-next-line es/no-global-this -- safe\n return (\n check(typeof globalThis == 'object' && globalThis) ||\n check(typeof window == 'object' && window) ||\n // eslint-disable-next-line no-restricted-globals -- safe\n check(typeof self == 'object' && self) ||\n check(typeof __webpack_require__.g == 'object' && __webpack_require__.g) ||\n // eslint-disable-next-line no-new-func -- fallback\n (function () {\n return this;\n })() ||\n this ||\n Function('return this')()\n );\n})();\n\nif (process.env.NODE_ENV !== 'production') {\n if (typeof safeThis !== 'undefined') {\n var $RefreshInjected$ = '__reactRefreshInjected';\n // Namespace the injected flag (if necessary) for monorepo compatibility\n if (\n typeof __react_refresh_library__ !== 'undefined' &&\n __react_refresh_library__\n ) {\n $RefreshInjected$ += '_' + __react_refresh_library__;\n }\n\n // Only inject the runtime if it hasn't been injected\n if (!safeThis[$RefreshInjected$]) {\n RefreshRuntime.injectIntoGlobalHook(safeThis);\n\n // Empty implementation to avoid \"ReferenceError: variable is not defined\" in module which didn't pass builtin:react-refresh-loader\n safeThis.$RefreshSig$ = () => (type) => type;\n safeThis.$RefreshReg$ = () => {};\n\n // Mark the runtime as injected to prevent double-injection\n safeThis[$RefreshInjected$] = true;\n }\n }\n}\n","/* global __webpack_require__ */\nvar Refresh = require('react-refresh/runtime');\n\n/**\n * Extracts exports from a webpack module object.\n * @param {string} moduleId A Webpack module ID.\n * @returns {*} An exports object from the module.\n */\nfunction getModuleExports(moduleId) {\n if (typeof moduleId === 'undefined') {\n // `moduleId` is unavailable, which indicates that this module is not in the cache,\n // which means we won't be able to capture any exports,\n // and thus they cannot be refreshed safely.\n // These are likely runtime or dynamically generated modules.\n return {};\n }\n\n var maybeModule = __webpack_require__.c[moduleId];\n if (typeof maybeModule === 'undefined') {\n // `moduleId` is available but the module in cache is unavailable,\n // which indicates the module is somehow corrupted (e.g. broken Webpacak `module` globals).\n // We will warn the user (as this is likely a mistake) and assume they cannot be refreshed.\n console.warn(\n '[React Refresh] Failed to get exports for module: ' + moduleId + '.',\n );\n return {};\n }\n\n var exportsOrPromise = maybeModule.exports;\n if (typeof Promise !== 'undefined' && exportsOrPromise instanceof Promise) {\n return exportsOrPromise.then(function (exports) {\n return exports;\n });\n }\n return exportsOrPromise;\n}\n\n/**\n * Calculates the signature of a React refresh boundary.\n * If this signature changes, it's unsafe to accept the boundary.\n *\n * This implementation is based on the one in [Metro](https://github.com/facebook/metro/blob/907d6af22ac6ebe58572be418e9253a90665ecbd/packages/metro/src/lib/polyfills/require.js#L795-L816).\n * @param {*} moduleExports A Webpack module exports object.\n * @returns {string[]} A React refresh boundary signature array.\n */\nfunction getReactRefreshBoundarySignature(moduleExports) {\n var signature = [];\n signature.push(Refresh.getFamilyByType(moduleExports));\n\n if (moduleExports == null || typeof moduleExports !== 'object') {\n // Exit if we can't iterate over exports.\n return signature;\n }\n\n for (var key in moduleExports) {\n if (key === '__esModule') {\n continue;\n }\n\n signature.push(key);\n signature.push(Refresh.getFamilyByType(moduleExports[key]));\n }\n\n return signature;\n}\n\n/**\n * Creates a helper that performs a delayed React refresh.\n * @returns {function(function(): void): void} A debounced React refresh function.\n */\nfunction createDebounceUpdate() {\n /**\n * A cached setTimeout handler.\n * @type {number | undefined}\n */\n var refreshTimeout;\n\n /**\n * Performs react refresh on a delay and clears the error overlay.\n * @param {function(): void} callback\n * @returns {void}\n */\n function enqueueUpdate(callback) {\n if (typeof refreshTimeout === 'undefined') {\n refreshTimeout = setTimeout(function () {\n refreshTimeout = undefined;\n Refresh.performReactRefresh();\n callback();\n }, 30);\n }\n }\n\n return enqueueUpdate;\n}\n\n/**\n * Checks if all exports are likely a React component.\n *\n * This implementation is based on the one in [Metro](https://github.com/facebook/metro/blob/febdba2383113c88296c61e28e4ef6a7f4939fda/packages/metro/src/lib/polyfills/require.js#L748-L774).\n * @param {*} moduleExports A Webpack module exports object.\n * @returns {boolean} Whether the exports are React component like.\n */\nfunction isReactRefreshBoundary(moduleExports) {\n if (Refresh.isLikelyComponentType(moduleExports)) {\n return true;\n }\n if (\n moduleExports === undefined ||\n moduleExports === null ||\n typeof moduleExports !== 'object'\n ) {\n // Exit if we can't iterate over exports.\n return false;\n }\n\n var hasExports = false;\n var areAllExportsComponents = true;\n for (var key in moduleExports) {\n hasExports = true;\n\n // This is the ES Module indicator flag\n if (key === '__esModule') {\n continue;\n }\n\n // We can (and have to) safely execute getters here,\n // as Webpack manually assigns harmony exports to getters,\n // without any side-effects attached.\n // Ref: https://github.com/webpack/webpack/blob/b93048643fe74de2a6931755911da1212df55897/lib/MainTemplate.js#L281\n var exportValue = moduleExports[key];\n if (!Refresh.isLikelyComponentType(exportValue)) {\n areAllExportsComponents = false;\n }\n }\n\n return hasExports && areAllExportsComponents;\n}\n\n/**\n * Checks if exports are likely a React component and registers them.\n *\n * This implementation is based on the one in [Metro](https://github.com/facebook/metro/blob/febdba2383113c88296c61e28e4ef6a7f4939fda/packages/metro/src/lib/polyfills/require.js#L818-L835).\n * @param {*} moduleExports A Webpack module exports object.\n * @param {string} moduleId A Webpack module ID.\n * @returns {void}\n */\nfunction registerExportsForReactRefresh(moduleExports, moduleId) {\n if (Refresh.isLikelyComponentType(moduleExports)) {\n // Register module.exports if it is likely a component\n Refresh.register(moduleExports, moduleId + ' %exports%');\n }\n\n if (\n moduleExports === undefined ||\n moduleExports === null ||\n typeof moduleExports !== 'object'\n ) {\n // Exit if we can't iterate over the exports.\n return;\n }\n\n for (var key in moduleExports) {\n // Skip registering the ES Module indicator\n if (key === '__esModule') {\n continue;\n }\n\n var exportValue = moduleExports[key];\n if (Refresh.isLikelyComponentType(exportValue)) {\n var typeID = moduleId + ' %exports% ' + key;\n Refresh.register(exportValue, typeID);\n }\n }\n}\n\n/**\n * Compares previous and next module objects to check for mutated boundaries.\n *\n * This implementation is based on the one in [Metro](https://github.com/facebook/metro/blob/907d6af22ac6ebe58572be418e9253a90665ecbd/packages/metro/src/lib/polyfills/require.js#L776-L792).\n * @param {*} prevExports The current Webpack module exports object.\n * @param {*} nextExports The next Webpack module exports object.\n * @returns {boolean} Whether the React refresh boundary should be invalidated.\n */\nfunction shouldInvalidateReactRefreshBoundary(prevExports, nextExports) {\n var prevSignature = getReactRefreshBoundarySignature(prevExports);\n var nextSignature = getReactRefreshBoundarySignature(nextExports);\n\n if (prevSignature.length !== nextSignature.length) {\n return true;\n }\n\n for (var i = 0; i < nextSignature.length; i += 1) {\n if (prevSignature[i] !== nextSignature[i]) {\n return true;\n }\n }\n\n return false;\n}\n\nvar enqueueUpdate = createDebounceUpdate();\n\nfunction executeRuntime(\n moduleExports,\n moduleId,\n webpackHot,\n refreshOverlay,\n isTest,\n) {\n registerExportsForReactRefresh(moduleExports, moduleId);\n\n if (webpackHot) {\n var isHotUpdate = !!webpackHot.data;\n var prevExports;\n if (isHotUpdate) {\n prevExports = webpackHot.data.prevExports;\n }\n\n if (isReactRefreshBoundary(moduleExports)) {\n webpackHot.dispose(\n /**\n * A callback to performs a full refresh if React has unrecoverable errors,\n * and also caches the to-be-disposed module.\n * @param {*} data A hot module data object from Webpack HMR.\n * @returns {void}\n */\n function hotDisposeCallback(data) {\n // We have to mutate the data object to get data registered and cached\n data.prevExports = moduleExports;\n },\n );\n webpackHot.accept(\n /**\n * An error handler to allow self-recovering behaviours.\n * @param {Error} error An error occurred during evaluation of a module.\n * @returns {void}\n */\n function hotErrorHandler(error) {\n console.error(error);\n if (\n __reload_on_runtime_errors__ &&\n isUnrecoverableRuntimeError(error)\n ) {\n location.reload();\n return;\n }\n\n if (typeof refreshOverlay !== 'undefined' && refreshOverlay) {\n refreshOverlay.handleRuntimeError(error);\n }\n\n if (typeof isTest !== 'undefined' && isTest) {\n if (window.onHotAcceptError) {\n window.onHotAcceptError(error.message);\n }\n }\n\n __webpack_require__.c[moduleId].hot.accept(hotErrorHandler);\n },\n );\n\n if (isHotUpdate) {\n if (\n isReactRefreshBoundary(prevExports) &&\n shouldInvalidateReactRefreshBoundary(prevExports, moduleExports)\n ) {\n webpackHot.invalidate();\n } else {\n enqueueUpdate(\n /**\n * A function to dismiss the error overlay after performing React refresh.\n * @returns {void}\n */\n function updateCallback() {\n if (typeof refreshOverlay !== 'undefined' && refreshOverlay) {\n refreshOverlay.clearRuntimeErrors();\n }\n },\n );\n }\n }\n } else {\n if (isHotUpdate && typeof prevExports !== 'undefined') {\n webpackHot.invalidate();\n }\n }\n }\n}\n\nfunction isUnrecoverableRuntimeError(error) {\n return error.message.startsWith('RuntimeError: factory is undefined');\n}\n\nmodule.exports = Object.freeze({\n enqueueUpdate: enqueueUpdate,\n executeRuntime: executeRuntime,\n getModuleExports: getModuleExports,\n isReactRefreshBoundary: isReactRefreshBoundary,\n shouldInvalidateReactRefreshBoundary: shouldInvalidateReactRefreshBoundary,\n registerExportsForReactRefresh: registerExportsForReactRefresh,\n});\n","function _define_property(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true });\n } else obj[key] = value;\n\n return obj;\n}\nexport { _define_property as _ };\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, j as elementIndex, m as makeElementsArray, s as setInnerHTML } from '../shared/utils.mjs';\n\nfunction A11y({\n swiper,\n extendParams,\n on\n}) {\n extendParams({\n a11y: {\n enabled: true,\n notificationClass: 'swiper-notification',\n prevSlideMessage: 'Previous slide',\n nextSlideMessage: 'Next slide',\n firstSlideMessage: 'This is the first slide',\n lastSlideMessage: 'This is the last slide',\n paginationBulletMessage: 'Go to slide {{index}}',\n slideLabelMessage: '{{index}} / {{slidesLength}}',\n containerMessage: null,\n containerRoleDescriptionMessage: null,\n containerRole: null,\n itemRoleDescriptionMessage: null,\n slideRole: 'group',\n id: null,\n scrollOnFocus: true,\n wrapperLiveRegion: 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 = 16) {\n const randomChar = () => Math.round(16 * Math.random()).toString(16);\n return 'x'.repeat(size).replace(/x/g, randomChar);\n }\n function makeElFocusable(el) {\n el = makeElementsArray(el);\n el.forEach(subEl => {\n subEl.setAttribute('tabIndex', '0');\n });\n }\n function makeElNotFocusable(el) {\n el = makeElementsArray(el);\n el.forEach(subEl => {\n subEl.setAttribute('tabIndex', '-1');\n });\n }\n function addElRole(el, role) {\n el = makeElementsArray(el);\n el.forEach(subEl => {\n subEl.setAttribute('role', role);\n });\n }\n function addElRoleDescription(el, description) {\n el = makeElementsArray(el);\n el.forEach(subEl => {\n subEl.setAttribute('aria-roledescription', description);\n });\n }\n function addElControls(el, controls) {\n el = makeElementsArray(el);\n el.forEach(subEl => {\n subEl.setAttribute('aria-controls', controls);\n });\n }\n function addElLabel(el, label) {\n el = makeElementsArray(el);\n el.forEach(subEl => {\n subEl.setAttribute('aria-label', label);\n });\n }\n function addElId(el, id) {\n el = makeElementsArray(el);\n el.forEach(subEl => {\n subEl.setAttribute('id', id);\n });\n }\n function addElLive(el, live) {\n el = makeElementsArray(el);\n el.forEach(subEl => {\n subEl.setAttribute('aria-live', live);\n });\n }\n function disableEl(el) {\n el = makeElementsArray(el);\n el.forEach(subEl => {\n subEl.setAttribute('aria-disabled', true);\n });\n }\n function enableEl(el) {\n el = makeElementsArray(el);\n el.forEach(subEl => {\n subEl.setAttribute('aria-disabled', false);\n });\n }\n function onEnterOrSpaceKey(e) {\n if (e.keyCode !== 13 && e.keyCode !== 32) return;\n const params = swiper.params.a11y;\n const targetEl = e.target;\n if (swiper.pagination && swiper.pagination.el && (targetEl === swiper.pagination.el || swiper.pagination.el.contains(e.target))) {\n if (!e.target.matches(classesToSelector(swiper.params.pagination.bulletClass))) return;\n }\n if (swiper.navigation && swiper.navigation.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(swiper.getSlideIndexWhenGrid(parseInt(slideEl.getAttribute('data-swiper-slide-index'))), 0);\n } else {\n swiper.slideTo(swiper.getSlideIndexWhenGrid(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 addElId(wrapperEl, wrapperId);\n if (params.wrapperLiveRegion) {\n const live = swiper.params.autoplay && swiper.params.autoplay.enabled ? 'off' : 'polite';\n addElLive(wrapperEl, live);\n }\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 { 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({\n swiper,\n extendParams,\n on,\n emit,\n params\n}) {\n swiper.autoplay = {\n running: false,\n paused: false,\n timeLeft: 0\n };\n extendParams({\n autoplay: {\n enabled: false,\n delay: 3000,\n waitForTransition: true,\n disableOnInteraction: 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 { n as nextTick, o as elementTransitionEnd } from '../shared/utils.mjs';\n\n/* eslint no-bitwise: [\"error\", { \"allow\": [\">>\"] }] */\nfunction Controller({\n swiper,\n extendParams,\n on\n}) {\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 { 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({\n swiper,\n extendParams,\n on\n}) {\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 = `${(params.rotate || swiper.isHorizontal() ? -25 : 0) * 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","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, a as getRotateFix } from '../shared/utils.mjs';\n\nfunction EffectCoverflow({\n swiper,\n extendParams,\n on\n}) {\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, a as getRotateFix } from '../shared/utils.mjs';\n\nfunction EffectCreative({\n swiper,\n extendParams,\n on\n}) {\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 { e as effectInit } from '../shared/effect-init.mjs';\nimport { c as createElement, a as getRotateFix } from '../shared/utils.mjs';\n\nfunction EffectCube({\n swiper,\n extendParams,\n on\n}) {\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 { 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({\n swiper,\n extendParams,\n on\n}) {\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","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, a as getRotateFix } from '../shared/utils.mjs';\n\nfunction EffectFlip({\n swiper,\n extendParams,\n on\n}) {\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 { h as now, o as elementTransitionEnd } from '../shared/utils.mjs';\n\nfunction freeMode({\n swiper,\n extendParams,\n emit,\n once\n}) {\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({\n currentPos\n }) {\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({\n swiper,\n extendParams,\n on\n}) {\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 { g as getDocument, a as getWindow } from '../shared/ssr-window.esm.mjs';\nimport { e as elementChildren } from '../shared/utils.mjs';\n\nfunction HashNavigation({\n swiper,\n extendParams,\n emit,\n on\n}) {\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 { a as getWindow } from '../shared/ssr-window.esm.mjs';\n\nfunction History({\n swiper,\n extendParams,\n on\n}) {\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","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, a as getWindow } from '../shared/ssr-window.esm.mjs';\nimport { d as elementParents, f as elementOffset } from '../shared/utils.mjs';\n\n/* eslint-disable consistent-return */\nfunction Keyboard({\n swiper,\n extendParams,\n on,\n emit\n}) {\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.isContentEditable || 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 { 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({\n swiper\n}) {\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 { a as getWindow } from '../shared/ssr-window.esm.mjs';\nimport { n as nextTick, h as now } from '../shared/utils.mjs';\n\n/* eslint-disable consistent-return */\nfunction Mousewheel({\n swiper,\n extendParams,\n on,\n emit\n}) {\n const window = getWindow();\n extendParams({\n mousewheel: {\n enabled: false,\n releaseOnEdges: false,\n invert: false,\n forceToAxis: false,\n sensitivity: 1,\n eventsTarget: 'container',\n thresholdDelta: null,\n thresholdTime: null,\n noMousewheelClass: 'swiper-no-mousewheel'\n }\n });\n swiper.mousewheel = {\n enabled: false\n };\n let timeout;\n let lastScrollTime = now();\n let lastEventBeforeSnap;\n const recentWheelEvents = [];\n function normalize(e) {\n // Reasonable defaults\n const PIXEL_STEP = 10;\n const LINE_HEIGHT = 40;\n const PAGE_HEIGHT = 800;\n let sX = 0;\n let sY = 0; // spinX, spinY\n let pX = 0;\n let pY = 0; // pixelX, pixelY\n\n // Legacy\n if ('detail' in e) {\n sY = e.detail;\n }\n if ('wheelDelta' in e) {\n sY = -e.wheelDelta / 120;\n }\n if ('wheelDeltaY' in e) {\n sY = -e.wheelDeltaY / 120;\n }\n if ('wheelDeltaX' in e) {\n sX = -e.wheelDeltaX / 120;\n }\n\n // side scrolling on FF with DOMMouseScroll\n if ('axis' in e && e.axis === e.HORIZONTAL_AXIS) {\n sX = sY;\n sY = 0;\n }\n pX = sX * PIXEL_STEP;\n pY = sY * PIXEL_STEP;\n if ('deltaY' in e) {\n pY = e.deltaY;\n }\n if ('deltaX' in e) {\n pX = e.deltaX;\n }\n if (e.shiftKey && !pX) {\n // if user scrolls with shift he wants horizontal scroll\n pX = pY;\n pY = 0;\n }\n if ((pX || pY) && e.deltaMode) {\n if (e.deltaMode === 1) {\n // delta in LINE units\n pX *= LINE_HEIGHT;\n pY *= LINE_HEIGHT;\n } else {\n // delta in PAGE units\n pX *= PAGE_HEIGHT;\n pY *= PAGE_HEIGHT;\n }\n }\n\n // Fall-back if spin cannot be determined\n if (pX && !sX) {\n sX = pX < 1 ? -1 : 1;\n }\n if (pY && !sY) {\n sY = pY < 1 ? -1 : 1;\n }\n return {\n spinX: sX,\n spinY: sY,\n pixelX: pX,\n pixelY: pY\n };\n }\n function handleMouseEnter() {\n if (!swiper.enabled) return;\n swiper.mouseEntered = true;\n }\n function handleMouseLeave() {\n if (!swiper.enabled) return;\n swiper.mouseEntered = false;\n }\n function animateSlider(newEvent) {\n if (swiper.params.mousewheel.thresholdDelta && newEvent.delta < swiper.params.mousewheel.thresholdDelta) {\n // Prevent if delta of wheel scroll delta is below configured threshold\n return false;\n }\n if (swiper.params.mousewheel.thresholdTime && now() - lastScrollTime < swiper.params.mousewheel.thresholdTime) {\n // Prevent if time between scrolls is below configured threshold\n return false;\n }\n\n // If the movement is NOT big enough and\n // if the last time the user scrolled was too close to the current one (avoid continuously triggering the slider):\n // Don't go any further (avoid insignificant scroll movement).\n if (newEvent.delta >= 6 && now() - lastScrollTime < 60) {\n // Return false as a default\n return true;\n }\n // If user is scrolling towards the end:\n // If the slider hasn't hit the latest slide or\n // if the slider is a loop and\n // if the slider isn't moving right now:\n // Go to next slide and\n // emit a scroll event.\n // Else (the user is scrolling towards the beginning) and\n // if the slider hasn't hit the first slide or\n // if the slider is a loop and\n // if the slider isn't moving right now:\n // Go to prev slide and\n // emit a scroll event.\n if (newEvent.direction < 0) {\n if ((!swiper.isEnd || swiper.params.loop) && !swiper.animating) {\n swiper.slideNext();\n emit('scroll', newEvent.raw);\n }\n } else if ((!swiper.isBeginning || swiper.params.loop) && !swiper.animating) {\n swiper.slidePrev();\n emit('scroll', newEvent.raw);\n }\n // If you got here is because an animation has been triggered so store the current time\n lastScrollTime = new window.Date().getTime();\n // Return false as a default\n return false;\n }\n function releaseScroll(newEvent) {\n const params = swiper.params.mousewheel;\n if (newEvent.direction < 0) {\n if (swiper.isEnd && !swiper.params.loop && params.releaseOnEdges) {\n // Return true to animate scroll on edges\n return true;\n }\n } else if (swiper.isBeginning && !swiper.params.loop && params.releaseOnEdges) {\n // Return true to animate scroll on edges\n return true;\n }\n return false;\n }\n function handle(event) {\n let e = event;\n let disableParentSwiper = true;\n if (!swiper.enabled) return;\n\n // Ignore event if the target or its parents have the swiper-no-mousewheel class\n if (event.target.closest(`.${swiper.params.mousewheel.noMousewheelClass}`)) return;\n const params = swiper.params.mousewheel;\n if (swiper.params.cssMode) {\n e.preventDefault();\n }\n let targetEl = swiper.el;\n if (swiper.params.mousewheel.eventsTarget !== 'container') {\n targetEl = document.querySelector(swiper.params.mousewheel.eventsTarget);\n }\n const targetElContainsTarget = targetEl && targetEl.contains(e.target);\n if (!swiper.mouseEntered && !targetElContainsTarget && !params.releaseOnEdges) return true;\n if (e.originalEvent) e = e.originalEvent; // jquery fix\n let delta = 0;\n const rtlFactor = swiper.rtlTranslate ? -1 : 1;\n const data = normalize(e);\n if (params.forceToAxis) {\n if (swiper.isHorizontal()) {\n if (Math.abs(data.pixelX) > Math.abs(data.pixelY)) delta = -data.pixelX * rtlFactor;else return true;\n } else if (Math.abs(data.pixelY) > Math.abs(data.pixelX)) delta = -data.pixelY;else return true;\n } else {\n delta = Math.abs(data.pixelX) > Math.abs(data.pixelY) ? -data.pixelX * rtlFactor : -data.pixelY;\n }\n if (delta === 0) return true;\n if (params.invert) delta = -delta;\n\n // Get the scroll positions\n let positions = swiper.getTranslate() + delta * params.sensitivity;\n if (positions >= swiper.minTranslate()) positions = swiper.minTranslate();\n if (positions <= swiper.maxTranslate()) positions = swiper.maxTranslate();\n\n // When loop is true:\n // the disableParentSwiper will be true.\n // When loop is false:\n // if the scroll positions is not on edge,\n // then the disableParentSwiper will be true.\n // if the scroll on edge positions,\n // then the disableParentSwiper will be false.\n disableParentSwiper = swiper.params.loop ? true : !(positions === swiper.minTranslate() || positions === swiper.maxTranslate());\n if (disableParentSwiper && swiper.params.nested) e.stopPropagation();\n if (!swiper.params.freeMode || !swiper.params.freeMode.enabled) {\n // Register the new event in a variable which stores the relevant data\n const newEvent = {\n time: now(),\n delta: Math.abs(delta),\n direction: Math.sign(delta),\n raw: event\n };\n\n // Keep the most recent events\n if (recentWheelEvents.length >= 2) {\n recentWheelEvents.shift(); // only store the last N events\n }\n\n const prevEvent = recentWheelEvents.length ? recentWheelEvents[recentWheelEvents.length - 1] : undefined;\n recentWheelEvents.push(newEvent);\n\n // If there is at least one previous recorded event:\n // If direction has changed or\n // if the scroll is quicker than the previous one:\n // Animate the slider.\n // Else (this is the first time the wheel is moved):\n // Animate the slider.\n if (prevEvent) {\n if (newEvent.direction !== prevEvent.direction || newEvent.delta > prevEvent.delta || newEvent.time > prevEvent.time + 150) {\n animateSlider(newEvent);\n }\n } else {\n animateSlider(newEvent);\n }\n\n // If it's time to release the scroll:\n // Return now so you don't hit the preventDefault.\n if (releaseScroll(newEvent)) {\n return true;\n }\n } else {\n // Freemode or scrollContainer:\n\n // If we recently snapped after a momentum scroll, then ignore wheel events\n // to give time for the deceleration to finish. Stop ignoring after 500 msecs\n // or if it's a new scroll (larger delta or inverse sign as last event before\n // an end-of-momentum snap).\n const newEvent = {\n time: now(),\n delta: Math.abs(delta),\n direction: Math.sign(delta)\n };\n const ignoreWheelEvents = lastEventBeforeSnap && newEvent.time < lastEventBeforeSnap.time + 500 && newEvent.delta <= lastEventBeforeSnap.delta && newEvent.direction === lastEventBeforeSnap.direction;\n if (!ignoreWheelEvents) {\n lastEventBeforeSnap = undefined;\n let position = swiper.getTranslate() + delta * params.sensitivity;\n const wasBeginning = swiper.isBeginning;\n const wasEnd = swiper.isEnd;\n if (position >= swiper.minTranslate()) position = swiper.minTranslate();\n if (position <= swiper.maxTranslate()) position = swiper.maxTranslate();\n swiper.setTransition(0);\n swiper.setTranslate(position);\n swiper.updateProgress();\n swiper.updateActiveIndex();\n swiper.updateSlidesClasses();\n if (!wasBeginning && swiper.isBeginning || !wasEnd && swiper.isEnd) {\n swiper.updateSlidesClasses();\n }\n if (swiper.params.loop) {\n swiper.loopFix({\n direction: newEvent.direction < 0 ? 'next' : 'prev',\n byMousewheel: true\n });\n }\n if (swiper.params.freeMode.sticky) {\n // When wheel scrolling starts with sticky (aka snap) enabled, then detect\n // the end of a momentum scroll by storing recent (N=15?) wheel events.\n // 1. do all N events have decreasing or same (absolute value) delta?\n // 2. did all N events arrive in the last M (M=500?) msecs?\n // 3. does the earliest event have an (absolute value) delta that's\n // at least P (P=1?) larger than the most recent event's delta?\n // 4. does the latest event have a delta that's smaller than Q (Q=6?) pixels?\n // If 1-4 are \"yes\" then we're near the end of a momentum scroll deceleration.\n // Snap immediately and ignore remaining wheel events in this scroll.\n // See comment above for \"remaining wheel events in this scroll\" determination.\n // If 1-4 aren't satisfied, then wait to snap until 500ms after the last event.\n clearTimeout(timeout);\n timeout = undefined;\n if (recentWheelEvents.length >= 15) {\n recentWheelEvents.shift(); // only store the last N events\n }\n\n const prevEvent = recentWheelEvents.length ? recentWheelEvents[recentWheelEvents.length - 1] : undefined;\n const firstEvent = recentWheelEvents[0];\n recentWheelEvents.push(newEvent);\n if (prevEvent && (newEvent.delta > prevEvent.delta || newEvent.direction !== prevEvent.direction)) {\n // Increasing or reverse-sign delta means the user started scrolling again. Clear the wheel event log.\n recentWheelEvents.splice(0);\n } else if (recentWheelEvents.length >= 15 && newEvent.time - firstEvent.time < 500 && firstEvent.delta - newEvent.delta >= 1 && newEvent.delta <= 6) {\n // We're at the end of the deceleration of a momentum scroll, so there's no need\n // to wait for more events. Snap ASAP on the next tick.\n // Also, because there's some remaining momentum we'll bias the snap in the\n // direction of the ongoing scroll because it's better UX for the scroll to snap\n // in the same direction as the scroll instead of reversing to snap. Therefore,\n // if it's already scrolled more than 20% in the current direction, keep going.\n const snapToThreshold = delta > 0 ? 0.8 : 0.2;\n lastEventBeforeSnap = newEvent;\n recentWheelEvents.splice(0);\n timeout = nextTick(() => {\n 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, s as setInnerHTML } from '../shared/utils.mjs';\n\nconst arrowSvg = `<svg class=\"swiper-navigation-icon\" width=\"11\" height=\"20\" viewBox=\"0 0 11 20\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M0.38296 20.0762C0.111788 19.805 0.111788 19.3654 0.38296 19.0942L9.19758 10.2796L0.38296 1.46497C0.111788 1.19379 0.111788 0.754138 0.38296 0.482966C0.654131 0.211794 1.09379 0.211794 1.36496 0.482966L10.4341 9.55214C10.8359 9.9539 10.8359 10.6053 10.4341 11.007L1.36496 20.0762C1.09379 20.3474 0.654131 20.3474 0.38296 20.0762Z\" fill=\"currentColor\"/></svg>`;\nfunction Navigation({\n swiper,\n extendParams,\n on,\n emit\n}) {\n extendParams({\n navigation: {\n nextEl: null,\n prevEl: null,\n addIcons: true,\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 arrowSvg\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 if (params.addIcons && el.matches('.swiper-button-next,.swiper-button-prev') && !el.querySelector('svg')) {\n const tempEl = document.createElement('div');\n setInnerHTML(tempEl, arrowSvg);\n el.appendChild(tempEl.querySelector('svg'));\n tempEl.remove();\n }\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 { 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, i as elementOuterSize, j as elementIndex, s as setInnerHTML, d as elementParents } from '../shared/utils.mjs';\n\nfunction Pagination({\n swiper,\n extendParams,\n on,\n emit\n}) {\n const pfx = 'swiper-pagination';\n extendParams({\n pagination: {\n el: null,\n bulletElement: 'span',\n clickable: false,\n hideOnClick: false,\n renderBullet: null,\n renderProgressbar: null,\n renderFraction: null,\n renderCustom: null,\n progressbarOpposite: false,\n type: 'bullets',\n // 'bullets' or 'progressbar' or 'fraction' or 'custom'\n dynamicBullets: false,\n dynamicMainBullets: 1,\n formatFractionCurrent: number => number,\n formatFractionTotal: number => number,\n bulletClass: `${pfx}-bullet`,\n bulletActiveClass: `${pfx}-bullet-active`,\n modifierClass: `${pfx}-`,\n currentClass: `${pfx}-current`,\n totalClass: `${pfx}-total`,\n hiddenClass: `${pfx}-hidden`,\n progressbarFillClass: `${pfx}-progressbar-fill`,\n progressbarOppositeClass: `${pfx}-progressbar-opposite`,\n clickableClass: `${pfx}-clickable`,\n lockClass: `${pfx}-lock`,\n horizontalClass: `${pfx}-horizontal`,\n verticalClass: `${pfx}-vertical`,\n paginationDisabledClass: `${pfx}-disabled`\n }\n });\n swiper.pagination = {\n el: null,\n bullets: []\n };\n let bulletSize;\n let dynamicBulletIndex = 0;\n 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}\"></${params.bulletElement}>`;\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 = `<span class=\"${params.currentClass}\"></span>` + ' / ' + `<span class=\"${params.totalClass}\"></span>`;\n }\n }\n if (params.type === 'progressbar') {\n if (params.renderProgressbar) {\n paginationHTML = params.renderProgressbar.call(swiper, params.progressbarFillClass);\n } else {\n paginationHTML = `<span class=\"${params.progressbarFillClass}\"></span>`;\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","import { e as elementChildren } from '../shared/utils.mjs';\n\nfunction Parallax({\n swiper,\n extendParams,\n on\n}) {\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 = (duration = swiper.params.speed) => {\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 { g as getDocument } from '../shared/ssr-window.esm.mjs';\nimport { m as makeElementsArray, k as classesToTokens, c as createElement, n as nextTick, f 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({\n swiper,\n extendParams,\n on,\n emit\n}) {\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 { g as getDocument } from '../shared/ssr-window.esm.mjs';\nimport { p as isObject, e as elementChildren } from '../shared/utils.mjs';\n\nfunction Thumb({\n swiper,\n extendParams,\n on\n}) {\n extendParams({\n thumbs: {\n swiper: null,\n multipleActiveThumbs: true,\n autoScrollOffset: 0,\n slideThumbActiveClass: 'swiper-slide-thumb-active',\n thumbsContainerClass: 'swiper-thumbs'\n }\n });\n let initialized = false;\n let swiperCreated = false;\n swiper.thumbs = {\n swiper: null\n };\n function onThumbClick() {\n const thumbsSwiper = swiper.thumbs.swiper;\n if (!thumbsSwiper || thumbsSwiper.destroyed) return;\n const clickedIndex = thumbsSwiper.clickedIndex;\n const clickedSlide = thumbsSwiper.clickedSlide;\n if (clickedSlide && clickedSlide.classList.contains(swiper.params.thumbs.slideThumbActiveClass)) return;\n if (typeof clickedIndex === 'undefined' || clickedIndex === null) return;\n let slideToIndex;\n if (thumbsSwiper.params.loop) {\n slideToIndex = parseInt(thumbsSwiper.clickedSlide.getAttribute('data-swiper-slide-index'), 10);\n } else {\n slideToIndex = clickedIndex;\n }\n if (swiper.params.loop) {\n swiper.slideToLoop(slideToIndex);\n } else {\n swiper.slideTo(slideToIndex);\n }\n }\n function init() {\n const {\n thumbs: thumbsParams\n } = swiper.params;\n if (initialized) return false;\n initialized = true;\n const SwiperClass = swiper.constructor;\n if (thumbsParams.swiper instanceof SwiperClass) {\n 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 { g as getDocument } from '../shared/ssr-window.esm.mjs';\nimport { b as setCSSProperty, e as elementChildren, s as setInnerHTML, c as createElement } from '../shared/utils.mjs';\n\nfunction Virtual({\n swiper,\n extendParams,\n on,\n emit\n}) {\n extendParams({\n virtual: {\n enabled: false,\n slides: [],\n cache: true,\n slidesPerViewAutoSlideSize: 320,\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 slidesPerGroup,\n centeredSlides,\n slidesPerView,\n loop: isLoop,\n initialSlide\n } = swiper.params;\n if (beforeInit && !isLoop && initialSlide > 0) {\n return;\n }\n const {\n addSlidesBefore,\n addSlidesAfter,\n slidesPerViewAutoSlideSize\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 slidesPerViewNumeric;\n if (slidesPerView === 'auto') {\n if (slidesPerViewAutoSlideSize) {\n let swiperSize = swiper.size;\n if (!swiperSize) {\n swiperSize = swiper.isHorizontal() ? swiper.el.getBoundingClientRect().width : swiper.el.getBoundingClientRect().height;\n }\n slidesPerViewNumeric = Math.max(1, Math.ceil(swiperSize / slidesPerViewAutoSlideSize));\n } else {\n slidesPerViewNumeric = 1;\n }\n } else {\n slidesPerViewNumeric = slidesPerView;\n }\n let slidesAfter;\n let slidesBefore;\n if (centeredSlides) {\n slidesAfter = Math.floor(slidesPerViewNumeric / 2) + slidesPerGroup + addSlidesAfter;\n slidesBefore = Math.floor(slidesPerViewNumeric / 2) + slidesPerGroup + addSlidesBefore;\n } else {\n slidesAfter = slidesPerViewNumeric + (slidesPerGroup - 1) + addSlidesAfter;\n slidesBefore = (isLoop ? slidesPerViewNumeric : 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","import { a as getWindow } from '../shared/ssr-window.esm.mjs';\nimport { e as elementChildren, d as elementParents, f as elementOffset, l as getTranslate } from '../shared/utils.mjs';\n\nfunction Zoom({\n swiper,\n extendParams,\n on,\n emit\n}) {\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","function classesToSelector(classes = '') {\n return `.${classes.trim().replace(/([\\.:!+\\/()[\\]])/g, '\\\\$1') // eslint-disable-line\n .replace(/ /g, '.')}`;\n}\n\nexport { classesToSelector as c };\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 { 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","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 { o as elementTransitionEnd } from './utils.mjs';\n\nfunction effectVirtualTransitionEnd({\n swiper,\n duration,\n transformElements,\n allSlides\n}) {\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","/**\n * SSR Window 5.0.1\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: June 27, 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 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';\nimport { d as elementParents, q as elementStyle, e as elementChildren, b as setCSSProperty, i as elementOuterSize, r as elementNextAll, t as elementPrevAll, l as getTranslate, u as animateCSSModeScroll, n as nextTick, v as showWarning, c as createElement, w as elementIsChildOf, h as now, x as extend, j 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({\n userAgent\n} = {}) {\n const support = getSupport();\n const window = getWindow();\n const platform = window.navigator.platform;\n const ua = userAgent || window.navigator.userAgent;\n const device = {\n ios: false,\n android: false\n };\n const screenWidth = window.screen.width;\n const screenHeight = window.screen.height;\n const android = ua.match(/(Android);?[\\s\\/]+([\\d.]+)?/); // eslint-disable-line\n let ipad = ua.match(/(iPad)(?!\\1).*OS\\s([\\d_]+)/);\n const ipod = ua.match(/(iPod)(.*OS\\s([\\d_]+))?/);\n const iphone = !ipad && ua.match(/(iPhone\\sOS|iOS)\\s([\\d_]+)/);\n const windows = platform === 'Win32';\n let macos = platform === 'MacIntel';\n\n // iPadOs 13 fix\n const iPadScreens = ['1024x1366', '1366x1024', '834x1194', '1194x834', '834x1112', '1112x834', '768x1024', '1024x768', '820x1180', '1180x820', '810x1080', '1080x810'];\n if (!ipad && macos && support.touch && iPadScreens.indexOf(`${screenWidth}x${screenHeight}`) >= 0) {\n ipad = ua.match(/(Version)\\/([\\d.]+)/);\n if (!ipad) ipad = [0, 1, '13_0_0'];\n macos = false;\n }\n\n // Android\n if (android && !windows) {\n device.os = 'android';\n device.android = true;\n }\n if (ipad || iphone || ipod) {\n device.os = 'ios';\n device.ios = true;\n }\n\n // Export object\n return device;\n}\nfunction getDevice(overrides = {}) {\n if (!deviceCached) {\n deviceCached = calcDevice(overrides);\n }\n return deviceCached;\n}\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({\n swiper,\n on,\n emit\n}) {\n const window = getWindow();\n let observer = null;\n let animationFrame = null;\n const resizeHandler = () => {\n if (!swiper || swiper.destroyed || !swiper.initialized) return;\n emit('beforeResize');\n emit('resize');\n };\n const createObserver = () => {\n if (!swiper || swiper.destroyed || !swiper.initialized) return;\n observer = new ResizeObserver(entries => {\n animationFrame = window.requestAnimationFrame(() => {\n const {\n width,\n height\n } = swiper;\n let newWidth = width;\n let newHeight = height;\n entries.forEach(({\n contentBoxSize,\n contentRect,\n target\n }) => {\n if (target && target !== swiper.el) return;\n newWidth = contentRect ? contentRect.width : (contentBoxSize[0] || contentBoxSize).inlineSize;\n newHeight = contentRect ? contentRect.height : (contentBoxSize[0] || contentBoxSize).blockSize;\n });\n if (newWidth !== width || newHeight !== height) {\n resizeHandler();\n }\n });\n });\n observer.observe(swiper.el);\n };\n const removeObserver = () => {\n if (animationFrame) {\n window.cancelAnimationFrame(animationFrame);\n }\n if (observer && observer.unobserve && swiper.el) {\n observer.unobserve(swiper.el);\n observer = null;\n }\n };\n const orientationChangeHandler = () => {\n if (!swiper || swiper.destroyed || !swiper.initialized) return;\n emit('orientationchange');\n };\n on('init', () => {\n if (swiper.params.resizeObserver && typeof window.ResizeObserver !== 'undefined') {\n createObserver();\n return;\n }\n window.addEventListener('resize', resizeHandler);\n window.addEventListener('orientationchange', orientationChangeHandler);\n });\n on('destroy', () => {\n removeObserver();\n window.removeEventListener('resize', resizeHandler);\n window.removeEventListener('orientationchange', orientationChangeHandler);\n });\n}\n\nfunction Observer({\n swiper,\n extendParams,\n on,\n emit\n}) {\n const observers = [];\n const window = getWindow();\n const attach = (target, options = {}) => {\n const ObserverFunc = window.MutationObserver || window.WebkitMutationObserver;\n const observer = new ObserverFunc(mutations => {\n // The observerUpdate event should only be triggered\n // once despite the number of mutations. Additional\n // triggers are redundant and are very costly\n if (swiper.__preventObserver__) return;\n if (mutations.length === 1) {\n emit('observerUpdate', mutations[0]);\n return;\n }\n const observerUpdate = function observerUpdate() {\n emit('observerUpdate', mutations[0]);\n };\n if (window.requestAnimationFrame) {\n window.requestAnimationFrame(observerUpdate);\n } else {\n window.setTimeout(observerUpdate, 0);\n }\n });\n observer.observe(target, {\n attributes: typeof options.attributes === 'undefined' ? true : options.attributes,\n childList: 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(...args) {\n self.off(events, onceHandler);\n if (onceHandler.__emitterProxy) {\n delete onceHandler.__emitterProxy;\n }\n handler.apply(self, args);\n }\n onceHandler.__emitterProxy = handler;\n return self.on(events, onceHandler, priority);\n },\n onAny(handler, priority) {\n const self = this;\n if (!self.eventsListeners || self.destroyed) return self;\n if (typeof handler !== 'function') return self;\n const method = priority ? 'unshift' : 'push';\n if (self.eventsAnyListeners.indexOf(handler) < 0) {\n self.eventsAnyListeners[method](handler);\n }\n return self;\n },\n offAny(handler) {\n const self = this;\n if (!self.eventsListeners || self.destroyed) return self;\n if (!self.eventsAnyListeners) return self;\n const index = self.eventsAnyListeners.indexOf(handler);\n if (index >= 0) {\n self.eventsAnyListeners.splice(index, 1);\n }\n return self;\n },\n off(events, handler) {\n const self = this;\n if (!self.eventsListeners || self.destroyed) return self;\n if (!self.eventsListeners) return self;\n events.split(' ').forEach(event => {\n if (typeof handler === 'undefined') {\n self.eventsListeners[event] = [];\n } else if (self.eventsListeners[event]) {\n self.eventsListeners[event].forEach((eventHandler, index) => {\n if (eventHandler === handler || eventHandler.__emitterProxy && eventHandler.__emitterProxy === handler) {\n self.eventsListeners[event].splice(index, 1);\n }\n });\n }\n });\n return self;\n },\n emit(...args) {\n const self = this;\n if (!self.eventsListeners || self.destroyed) return self;\n if (!self.eventsListeners) return self;\n let events;\n let data;\n let context;\n if (typeof args[0] === 'string' || Array.isArray(args[0])) {\n events = args[0];\n data = args.slice(1, args.length);\n context = self;\n } else {\n events = args[0].events;\n data = args[0].data;\n context = args[0].context || self;\n }\n data.unshift(context);\n const eventsArray = Array.isArray(events) ? events : events.split(' ');\n eventsArray.forEach(event => {\n if (self.eventsAnyListeners && self.eventsAnyListeners.length) {\n self.eventsAnyListeners.forEach(eventHandler => {\n eventHandler.apply(context, [event, ...data]);\n });\n }\n if (self.eventsListeners && self.eventsListeners[event]) {\n self.eventsListeners[event].forEach(eventHandler => {\n eventHandler.apply(context, data);\n });\n }\n });\n return self;\n }\n};\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 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 const swiperSize = swiper.size - offsetBefore - offsetAfter;\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 - offsetBefore - offsetAfter;\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 const slide = slides[i];\n if (slide) {\n if (gridEnabled) {\n swiper.grid.updateSlide(i, slide, slides);\n }\n if (elementStyle(slide, 'display') === 'none') continue; // eslint-disable-line\n }\n\n if (isVirtual && params.slidesPerView === 'auto') {\n if (params.virtual.slidesPerViewAutoSlideSize) {\n slideSize = params.virtual.slidesPerViewAutoSlideSize;\n }\n if (slideSize && slide) {\n if (params.roundLengths) slideSize = Math.floor(slideSize);\n slide.style[swiper.getDirectionLabel('width')] = `${slideSize}px`;\n }\n } else if (params.slidesPerView === 'auto') {\n if (shouldResetSlideSize) {\n slide.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 (slide) {\n slide.style[swiper.getDirectionLabel('width')] = `${slideSize}px`;\n }\n }\n if (slide) {\n slide.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 = (offsetBefore || 0) + (offsetAfter || 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 = this && this.translate || 0) {\n const swiper = this;\n const params = swiper.params;\n const {\n slides,\n rtlTranslate: rtl,\n snapGrid\n } = swiper;\n if (slides.length === 0) return;\n if (typeof slides[0].swiperSlideOffset === 'undefined') swiper.updateSlidesOffset();\n let offsetCenter = -translate;\n if (rtl) offsetCenter = translate;\n 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 = this.isHorizontal() ? 'x' : 'y') {\n const swiper = this;\n const {\n params,\n rtlTranslate: rtl,\n translate,\n wrapperEl\n } = swiper;\n if (params.virtualTranslate) {\n return rtl ? -translate : translate;\n }\n if (params.cssMode) {\n return translate;\n }\n let currentTranslate = getTranslate(wrapperEl, axis);\n currentTranslate += swiper.cssOverflowAdjustment();\n if (rtl) currentTranslate = -currentTranslate;\n return currentTranslate || 0;\n}\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 = 0, speed = this.params.speed, runCallbacks = true, translateBounds = true, internal) {\n const swiper = this;\n const {\n params,\n wrapperEl\n } = swiper;\n if (swiper.animating && params.preventInteractionOnTransition) {\n return false;\n }\n const minTranslate = swiper.minTranslate();\n const maxTranslate = swiper.maxTranslate();\n let newTranslate;\n if (translateBounds && translate > minTranslate) newTranslate = minTranslate;else if (translateBounds && translate < maxTranslate) newTranslate = maxTranslate;else newTranslate = translate;\n\n // Update progress\n swiper.updateProgress(newTranslate);\n if (params.cssMode) {\n const isH = swiper.isHorizontal();\n if (speed === 0) {\n wrapperEl[isH ? 'scrollLeft' : 'scrollTop'] = -newTranslate;\n } else {\n if (!swiper.support.smoothScroll) {\n animateCSSModeScroll({\n swiper,\n targetPosition: -newTranslate,\n side: isH ? 'left' : 'top'\n });\n return true;\n }\n wrapperEl.scrollTo({\n [isH ? 'left' : 'top']: -newTranslate,\n behavior: 'smooth'\n });\n }\n return true;\n }\n if (speed === 0) {\n swiper.setTransition(0);\n swiper.setTranslate(newTranslate);\n if (runCallbacks) {\n swiper.emit('beforeTransitionStart', speed, internal);\n swiper.emit('transitionEnd');\n }\n } else {\n swiper.setTransition(speed);\n swiper.setTranslate(newTranslate);\n if (runCallbacks) {\n swiper.emit('beforeTransitionStart', speed, internal);\n swiper.emit('transitionStart');\n }\n if (!swiper.animating) {\n swiper.animating = true;\n if (!swiper.onTranslateToWrapperTransitionEnd) {\n swiper.onTranslateToWrapperTransitionEnd = function transitionEnd(e) {\n if (!swiper || swiper.destroyed) return;\n if (e.target !== this) return;\n swiper.wrapperEl.removeEventListener('transitionend', swiper.onTranslateToWrapperTransitionEnd);\n swiper.onTranslateToWrapperTransitionEnd = null;\n delete swiper.onTranslateToWrapperTransitionEnd;\n 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({\n swiper,\n runCallbacks,\n direction,\n step\n}) {\n const {\n activeIndex,\n previousIndex\n } = swiper;\n let dir = direction;\n if (!dir) {\n if (activeIndex > previousIndex) dir = 'next';else if (activeIndex < previousIndex) dir = 'prev';else dir = 'reset';\n }\n swiper.emit(`transition${step}`);\n if (runCallbacks && 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 = true, direction) {\n const swiper = this;\n const {\n params\n } = swiper;\n if (params.cssMode) return;\n if (params.autoHeight) {\n swiper.updateAutoHeight();\n }\n transitionEmit({\n swiper,\n runCallbacks,\n direction,\n step: 'Start'\n });\n}\n\nfunction transitionEnd(runCallbacks = true, direction) {\n const swiper = this;\n const {\n params\n } = swiper;\n swiper.animating = false;\n if (params.cssMode) return;\n swiper.setTransition(0);\n transitionEmit({\n swiper,\n runCallbacks,\n direction,\n step: 'End'\n });\n}\n\nvar transition = {\n setTransition,\n transitionStart,\n transitionEnd\n};\n\nfunction slideTo(index = 0, speed, runCallbacks = true, internal, initial) {\n if (typeof index === 'string') {\n index = parseInt(index, 10);\n }\n const swiper = this;\n let slideIndex = index;\n if (slideIndex < 0) slideIndex = 0;\n const {\n params,\n snapGrid,\n slidesGrid,\n previousIndex,\n activeIndex,\n rtlTranslate: rtl,\n wrapperEl,\n enabled\n } = swiper;\n if (!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 = 0, speed, runCallbacks = true, internal) {\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 slidesOffsetBefore,\n slidesOffsetAfter\n } = swiper.params;\n const bothDirections = centeredSlides || !!slidesOffsetBefore || !!slidesOffsetAfter;\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 (bothDirections && slidesPerView % 2 === 0) {\n slidesPerView = slidesPerView + 1;\n }\n }\n let needLoopFix = cols - targetSlideIndex < slidesPerView;\n if (bothDirections) {\n needLoopFix = needLoopFix || targetSlideIndex < Math.ceil(slidesPerView / 2);\n }\n if (internal && bothDirections && swiper.params.slidesPerView !== 'auto' && !gridEnabled) {\n needLoopFix = false;\n }\n if (needLoopFix) {\n const direction = bothDirections ? 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 = true, internal) {\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 = true, internal) {\n const swiper = this;\n const {\n params,\n snapGrid,\n slidesGrid,\n rtlTranslate,\n enabled,\n animating\n } = swiper;\n if (!enabled || 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 = true, internal) {\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 = true, internal, threshold = 0.5) {\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.getSlideIndexWhenGrid(swiper.clickedIndex);\n let realIndex;\n const slideSelector = swiper.isElement ? `swiper-slide` : `.${params.slideClass}`;\n const isGrid = swiper.grid && swiper.params.grid && swiper.params.grid.rows > 1;\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 swiper.slideToLoop(realIndex);\n } else if (slideToIndex > (isGrid ? (swiper.slides.length - slidesPerView) / 2 - (swiper.params.grid.rows - 1) : 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 clearBlankSlides = () => {\n const slides = elementChildren(slidesEl, `.${params.slideBlankClass}`);\n slides.forEach(el => {\n el.remove();\n });\n if (slides.length > 0) {\n swiper.recalcSlides();\n swiper.updateSlides();\n }\n };\n const gridEnabled = swiper.grid && params.grid && params.grid.rows > 1;\n if (params.loopAddBlankSlides && (params.slidesPerGroup > 1 || gridEnabled)) {\n clearBlankSlides();\n }\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 const bothDirections = params.centeredSlides || !!params.slidesOffsetBefore || !!params.slidesOffsetAfter;\n swiper.loopFix({\n slideRealIndex,\n direction: bothDirections ? undefined : 'next',\n initial\n });\n}\n\nfunction loopFix({\n slideRealIndex,\n slideTo = true,\n direction,\n setTranslate,\n activeSlideIndex,\n initial,\n byController,\n byMousewheel\n} = {}) {\n const swiper = this;\n if (!swiper.params.loop) return;\n swiper.emit('beforeLoopFix');\n const {\n slides,\n allowSlidePrev,\n allowSlideNext,\n slidesEl,\n params\n } = swiper;\n const {\n centeredSlides,\n slidesOffsetBefore,\n slidesOffsetAfter,\n initialSlide\n } = params;\n const bothDirections = centeredSlides || !!slidesOffsetBefore || !!slidesOffsetAfter;\n swiper.allowSlidePrev = true;\n swiper.allowSlideNext = true;\n if (swiper.virtual && params.virtual.enabled) {\n if (slideTo) {\n if (!bothDirections && swiper.snapIndex === 0) {\n swiper.slideTo(swiper.virtual.slides.length, 0, false, true);\n } else if (bothDirections && 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 (bothDirections && slidesPerView % 2 === 0) {\n slidesPerView = slidesPerView + 1;\n }\n }\n const slidesPerGroup = params.slidesPerGroupAuto ? slidesPerView : params.slidesPerGroup;\n let loopedSlides = bothDirections ? Math.max(slidesPerGroup, Math.ceil(slidesPerView / 2)) : 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 && !bothDirections;\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 + (bothDirections && 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 = this) {\n function __closestFrom(el) {\n if (!el || el === getDocument() || el === getWindow()) return null;\n if (el.assignedSlot) el = el.assignedSlot;\n const found = el.closest(selector);\n if (!found && !el.getRootNode) {\n return null;\n }\n return found || __closestFrom(el.getRootNode().host);\n }\n return __closestFrom(base);\n}\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 = 'window', containerEl) {\n if (!breakpoints || base === 'container' && !containerEl) return undefined;\n let breakpoint = false;\n const window = getWindow();\n const currentHeight = base === 'window' ? window.innerHeight : containerEl.clientHeight;\n const points = Object.keys(breakpoints).map(point => {\n if (typeof point === 'string' && point.indexOf('@') === 0) {\n const minRatio = parseFloat(point.substr(1));\n const value = currentHeight * minRatio;\n return {\n value,\n point\n };\n }\n return {\n value: point,\n point\n };\n });\n points.sort((a, b) => parseInt(a.value, 10) - parseInt(b.value, 10));\n for (let i = 0; i < points.length; i += 1) {\n const {\n point,\n value\n } = points[i];\n if (base === 'window') {\n if (window.matchMedia(`(min-width: ${value}px)`).matches) {\n breakpoint = point;\n }\n } else if (value <= containerEl.clientWidth) {\n breakpoint = point;\n }\n }\n return breakpoint || 'max';\n}\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 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(...args) {\n let el;\n let params;\n if (args.length === 1 && args[0].constructor && Object.prototype.toString.call(args[0]).slice(8, -1) === 'Object') {\n params = args[0];\n } else {\n [el, params] = args;\n }\n if (!params) params = {};\n params = extend({}, params);\n if (el && !params.el) params.el = el;\n const document = getDocument();\n if (params.el && typeof params.el === 'string' && document.querySelectorAll(params.el).length > 1) {\n const swipers = [];\n document.querySelectorAll(params.el).forEach(containerEl => {\n const newParams = extend({}, params, {\n el: containerEl\n });\n swipers.push(new Swiper(newParams));\n });\n // eslint-disable-next-line no-constructor-return\n return swipers;\n }\n\n // Swiper Instance\n const swiper = this;\n swiper.__swiper__ = true;\n swiper.support = getSupport();\n swiper.device = getDevice({\n userAgent: params.userAgent\n });\n swiper.browser = getBrowser();\n swiper.eventsListeners = {};\n swiper.eventsAnyListeners = [];\n swiper.modules = [...swiper.__modules__];\n if (params.modules && Array.isArray(params.modules)) {\n swiper.modules.push(...params.modules);\n }\n const allModulesParams = {};\n swiper.modules.forEach(mod => {\n mod({\n params,\n swiper,\n extendParams: moduleExtendParams(params, allModulesParams),\n on: swiper.on.bind(swiper),\n once: swiper.once.bind(swiper),\n off: swiper.off.bind(swiper),\n emit: swiper.emit.bind(swiper)\n });\n });\n\n // Extend defaults with modules params\n const swiperParams = extend({}, defaults, allModulesParams);\n\n // Extend defaults with passed params\n swiper.params = extend({}, swiperParams, extendedDefaults, params);\n swiper.originalParams = extend({}, swiper.params);\n swiper.passedParams = extend({}, params);\n\n // add event listeners\n if (swiper.params && swiper.params.on) {\n Object.keys(swiper.params.on).forEach(eventName => {\n swiper.on(eventName, swiper.params.on[eventName]);\n });\n }\n if (swiper.params && swiper.params.onAny) {\n swiper.onAny(swiper.params.onAny);\n }\n\n // Extend Swiper\n Object.assign(swiper, {\n enabled: swiper.params.enabled,\n el,\n // Classes\n classNames: [],\n // Slides\n slides: [],\n slidesGrid: [],\n snapGrid: [],\n slidesSizesGrid: [],\n // isDirection\n isHorizontal() {\n return swiper.params.direction === 'horizontal';\n },\n isVertical() {\n return swiper.params.direction === 'vertical';\n },\n // Indexes\n activeIndex: 0,\n realIndex: 0,\n //\n isBeginning: true,\n isEnd: false,\n // Props\n translate: 0,\n previousTranslate: 0,\n progress: 0,\n velocity: 0,\n animating: false,\n cssOverflowAdjustment() {\n // Returns 0 unless `translate` is > 2**23\n // Should be subtracted from css values to prevent overflow\n return Math.trunc(this.translate / 2 ** 23) * 2 ** 23;\n },\n // Locks\n allowSlideNext: swiper.params.allowSlideNext,\n allowSlidePrev: swiper.params.allowSlidePrev,\n // Touch Events\n touchEventsData: {\n isTouched: undefined,\n isMoved: undefined,\n allowTouchCallbacks: undefined,\n touchStartTime: undefined,\n isScrolling: undefined,\n currentTranslate: undefined,\n startTranslate: undefined,\n allowThresholdMove: undefined,\n // Form elements to match\n focusableElements: swiper.params.focusableElements,\n // Last click time\n lastClickTime: 0,\n clickTimeout: undefined,\n // Velocities\n velocities: [],\n allowMomentumBounce: undefined,\n startMoving: undefined,\n 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 getSlideIndexWhenGrid(index) {\n if (this.grid && this.params.grid && this.params.grid.rows > 1) {\n if (this.params.grid.fill === 'column') {\n index = Math.floor(index / this.params.grid.rows);\n } else if (this.params.grid.fill === 'row') {\n index = index % Math.ceil(this.slides.length / this.params.grid.rows);\n }\n }\n return 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 = 'current', exact = false) {\n const swiper = this;\n const {\n params,\n slides,\n slidesGrid,\n slidesSizesGrid,\n size: swiperSize,\n activeIndex\n } = swiper;\n let spv = 1;\n if (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 = true) {\n const swiper = this;\n const currentDirection = swiper.params.direction;\n if (!newDirection) {\n // eslint-disable-next-line\n newDirection = currentDirection === 'horizontal' ? 'vertical' : 'horizontal';\n }\n if (newDirection === currentDirection || newDirection !== 'horizontal' && newDirection !== 'vertical') {\n return swiper;\n }\n swiper.el.classList.remove(`${swiper.params.containerModifierClass}${currentDirection}`);\n swiper.el.classList.add(`${swiper.params.containerModifierClass}${newDirection}`);\n swiper.emitContainerClasses();\n swiper.params.direction = newDirection;\n swiper.slides.forEach(slideEl => {\n if (newDirection === 'vertical') {\n slideEl.style.width = '';\n } else {\n slideEl.style.height = '';\n }\n });\n swiper.emit('changeDirection');\n if (needUpdate) swiper.update();\n return swiper;\n }\n changeLanguageDirection(direction) {\n const swiper = this;\n if (swiper.rtl && direction === 'rtl' || !swiper.rtl && direction === 'ltr') return;\n swiper.rtl = direction === 'rtl';\n swiper.rtlTranslate = swiper.params.direction === 'horizontal' && swiper.rtl;\n if (swiper.rtl) {\n swiper.el.classList.add(`${swiper.params.containerModifierClass}rtl`);\n swiper.el.dir = 'rtl';\n } else {\n swiper.el.classList.remove(`${swiper.params.containerModifierClass}rtl`);\n swiper.el.dir = 'ltr';\n }\n swiper.update();\n }\n mount(element) {\n const swiper = this;\n if (swiper.mounted) return true;\n\n // Find el\n let el = element || swiper.params.el;\n if (typeof el === 'string') {\n el = document.querySelector(el);\n }\n if (!el) {\n return false;\n }\n el.swiper = swiper;\n if (el.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 = true, cleanStyles = true) {\n const swiper = this;\n const {\n params,\n el,\n wrapperEl,\n slides\n } = swiper;\n if (typeof swiper.params === 'undefined' || swiper.destroyed) {\n return null;\n }\n swiper.emit('beforeDestroy');\n\n // Init Flag\n swiper.initialized = false;\n\n // Detach events\n swiper.detachEvents();\n\n // Destroy loop\n if (params.loop) {\n swiper.loopDestroy();\n }\n\n // Cleanup styles\n if (cleanStyles) {\n swiper.removeClasses();\n 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 { e as extend, p as paramsList, i as isObject, n as needsNavigation, a as needsPagination, b as needsScrollbar } from './update-swiper.mjs';\nimport { d as defaults } from './swiper-core.mjs';\n\nfunction getParams(obj = {}, splitEvents = true) {\n const params = {\n on: {}\n };\n const events = {};\n const passedParams = {};\n extend(params, defaults);\n params._emitClasses = true;\n params.init = false;\n const rest = {};\n const allowedParams = paramsList.map(key => key.replace(/_/, ''));\n const plainObj = Object.assign({}, obj);\n Object.keys(plainObj).forEach(key => {\n if (typeof obj[key] === 'undefined') return;\n if (allowedParams.indexOf(key) >= 0) {\n if (isObject(obj[key])) {\n params[key] = {};\n passedParams[key] = {};\n extend(params[key], obj[key]);\n extend(passedParams[key], obj[key]);\n } else {\n params[key] = obj[key];\n passedParams[key] = obj[key];\n }\n } else if (key.search(/on[A-Z]/) === 0 && typeof obj[key] === 'function') {\n if (splitEvents) {\n events[`${key[2].toLowerCase()}${key.substr(3)}`] = obj[key];\n } else {\n params.on[`${key[2].toLowerCase()}${key.substr(3)}`] = obj[key];\n }\n } else {\n rest[key] = obj[key];\n }\n });\n ['navigation', 'pagination', 'scrollbar'].forEach(key => {\n if (params[key] === true) params[key] = {};\n if (params[key] === false) delete params[key];\n });\n return {\n params,\n passedParams,\n rest,\n events\n };\n}\n\nfunction mountSwiper({\n el,\n nextEl,\n prevEl,\n paginationEl,\n scrollbarEl,\n swiper\n}, swiperParams) {\n if (needsNavigation(swiperParams) && nextEl && prevEl) {\n swiper.params.navigation.nextEl = nextEl;\n swiper.originalParams.navigation.nextEl = nextEl;\n swiper.params.navigation.prevEl = prevEl;\n swiper.originalParams.navigation.prevEl = prevEl;\n }\n if (needsPagination(swiperParams) && paginationEl) {\n swiper.params.pagination.el = paginationEl;\n swiper.originalParams.pagination.el = paginationEl;\n }\n if (needsScrollbar(swiperParams) && scrollbarEl) {\n swiper.params.scrollbar.el = scrollbarEl;\n swiper.originalParams.scrollbar.el = scrollbarEl;\n }\n swiper.init(el);\n}\n\nfunction getChangedParams(swiperParams, oldParams, children, oldChildren, getKey) {\n const keys = [];\n if (!oldParams) return keys;\n const addKey = key => {\n if (keys.indexOf(key) < 0) keys.push(key);\n };\n if (children && oldChildren) {\n const oldChildrenKeys = oldChildren.map(getKey);\n const childrenKeys = children.map(getKey);\n if (oldChildrenKeys.join('') !== childrenKeys.join('')) addKey('children');\n if (oldChildren.length !== children.length) addKey('children');\n }\n const watchParams = paramsList.filter(key => key[0] === '_').map(key => key.replace(/_/, ''));\n watchParams.forEach(key => {\n if (key in swiperParams && key in oldParams) {\n if (isObject(swiperParams[key]) && isObject(oldParams[key])) {\n const newKeys = Object.keys(swiperParams[key]);\n const oldKeys = Object.keys(oldParams[key]);\n if (newKeys.length !== oldKeys.length) {\n addKey(key);\n } else {\n newKeys.forEach(newKey => {\n if (swiperParams[key][newKey] !== oldParams[key][newKey]) {\n addKey(key);\n }\n });\n oldKeys.forEach(oldKey => {\n if (swiperParams[key][oldKey] !== oldParams[key][oldKey]) addKey(key);\n });\n }\n } else if (swiperParams[key] !== oldParams[key]) {\n addKey(key);\n }\n }\n });\n return keys;\n}\n\nconst updateOnVirtualData = swiper => {\n if (!swiper || swiper.destroyed || !swiper.params.virtual || swiper.params.virtual && !swiper.params.virtual.enabled) return;\n swiper.updateSlides();\n swiper.updateProgress();\n swiper.updateSlidesClasses();\n swiper.emit('_virtualUpdated');\n if (swiper.parallax && swiper.params.parallax && swiper.params.parallax.enabled) {\n swiper.parallax.setTranslate();\n }\n};\n\nexport { getChangedParams as a, getParams as g, mountSwiper as m, updateOnVirtualData as u };\n","import { s as setInnerHTML } from './utils.mjs';\n\n/* underscore in name -> watch for changes */\nconst paramsList = ['eventsPrefix', 'injectStyles', 'injectStylesUrls', 'modules', 'init', '_direction', 'oneWayMovement', 'swiperElementNodeName', 'touchEventsTarget', 'initialSlide', '_speed', 'cssMode', 'updateOnWindowResize', 'resizeObserver', 'nested', 'focusableElements', '_enabled', '_width', '_height', 'preventInteractionOnTransition', 'userAgent', 'url', '_edgeSwipeDetection', '_edgeSwipeThreshold', '_freeMode', '_autoHeight', 'setWrapperSize', 'virtualTranslate', '_effect', 'breakpoints', 'breakpointsBase', '_spaceBetween', '_slidesPerView', 'maxBackfaceHiddenSlides', '_grid', '_slidesPerGroup', '_slidesPerGroupSkip', '_slidesPerGroupAuto', '_centeredSlides', '_centeredSlidesBounds', '_slidesOffsetBefore', '_slidesOffsetAfter', 'normalizeSlideIndex', '_centerInsufficientSlides', '_watchOverflow', 'roundLengths', 'touchRatio', 'touchAngle', 'simulateTouch', '_shortSwipes', '_longSwipes', 'longSwipesRatio', 'longSwipesMs', '_followFinger', 'allowTouchMove', '_threshold', 'touchMoveStopPropagation', 'touchStartPreventDefault', 'touchStartForcePreventDefault', 'touchReleaseOnEdges', 'uniqueNavElements', '_resistance', '_resistanceRatio', '_watchSlidesProgress', '_grabCursor', 'preventClicks', 'preventClicksPropagation', '_slideToClickedSlide', '_loop', 'loopAdditionalSlides', 'loopAddBlankSlides', 'loopPreventsSliding', '_rewind', '_allowSlidePrev', '_allowSlideNext', '_swipeHandler', '_noSwiping', 'noSwipingClass', 'noSwipingSelector', 'passiveListeners', 'containerModifierClass', 'slideClass', 'slideActiveClass', 'slideVisibleClass', 'slideFullyVisibleClass', 'slideNextClass', 'slidePrevClass', 'slideBlankClass', 'wrapperClass', 'lazyPreloaderClass', 'lazyPreloadPrevNext', 'runCallbacksOnInit', 'observer', 'observeParents', 'observeSlideChildren',\n// modules\n'a11y', '_autoplay', '_controller', 'coverflowEffect', 'cubeEffect', 'fadeEffect', 'flipEffect', 'creativeEffect', 'cardsEffect', 'hashNavigation', 'history', 'keyboard', 'mousewheel', '_navigation', '_pagination', 'parallax', '_scrollbar', '_thumbs', 'virtual', 'zoom', 'control'];\n\nfunction isObject(o) {\n return typeof o === 'object' && o !== null && o.constructor && Object.prototype.toString.call(o).slice(8, -1) === 'Object' && !o.__swiper__;\n}\nfunction extend(target, src) {\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 if (src[key].__swiper__) target[key] = src[key];else extend(target[key], src[key]);\n } else {\n target[key] = src[key];\n }\n });\n}\nfunction needsNavigation(params = {}) {\n return params.navigation && typeof params.navigation.nextEl === 'undefined' && typeof params.navigation.prevEl === 'undefined';\n}\nfunction needsPagination(params = {}) {\n return params.pagination && typeof params.pagination.el === 'undefined';\n}\nfunction needsScrollbar(params = {}) {\n return params.scrollbar && typeof params.scrollbar.el === 'undefined';\n}\nfunction uniqueClasses(classNames = '') {\n const classes = classNames.split(' ').map(c => c.trim()).filter(c => !!c);\n const unique = [];\n classes.forEach(c => {\n if (unique.indexOf(c) < 0) unique.push(c);\n });\n return unique.join(' ');\n}\nfunction attrToProp(attrName = '') {\n return attrName.replace(/-[a-z]/g, l => l.toUpperCase().replace('-', ''));\n}\nfunction wrapperClass(className = '') {\n if (!className) return 'swiper-wrapper';\n if (!className.includes('swiper-wrapper')) return `swiper-wrapper ${className}`;\n return className;\n}\n\nfunction updateSwiper({\n swiper,\n slides,\n passedParams,\n changedParams,\n nextEl,\n prevEl,\n scrollbarEl,\n paginationEl\n}) {\n const updateParams = changedParams.filter(key => key !== 'children' && key !== 'direction' && key !== 'wrapperClass');\n const {\n params: currentParams,\n pagination,\n navigation,\n scrollbar,\n virtual,\n thumbs\n } = swiper;\n let needThumbsInit;\n let needControllerInit;\n let needPaginationInit;\n let needScrollbarInit;\n let needNavigationInit;\n let loopNeedDestroy;\n let loopNeedEnable;\n let loopNeedReloop;\n if (changedParams.includes('thumbs') && passedParams.thumbs && passedParams.thumbs.swiper && !passedParams.thumbs.swiper.destroyed && currentParams.thumbs && (!currentParams.thumbs.swiper || currentParams.thumbs.swiper.destroyed)) {\n needThumbsInit = true;\n }\n if (changedParams.includes('controller') && passedParams.controller && passedParams.controller.control && currentParams.controller && !currentParams.controller.control) {\n needControllerInit = true;\n }\n if (changedParams.includes('pagination') && passedParams.pagination && (passedParams.pagination.el || paginationEl) && (currentParams.pagination || currentParams.pagination === false) && pagination && !pagination.el) {\n needPaginationInit = true;\n }\n if (changedParams.includes('scrollbar') && passedParams.scrollbar && (passedParams.scrollbar.el || scrollbarEl) && (currentParams.scrollbar || currentParams.scrollbar === false) && scrollbar && !scrollbar.el) {\n needScrollbarInit = true;\n }\n if (changedParams.includes('navigation') && passedParams.navigation && (passedParams.navigation.prevEl || prevEl) && (passedParams.navigation.nextEl || nextEl) && (currentParams.navigation || currentParams.navigation === false) && navigation && !navigation.prevEl && !navigation.nextEl) {\n needNavigationInit = true;\n }\n const destroyModule = mod => {\n if (!swiper[mod]) return;\n swiper[mod].destroy();\n if (mod === 'navigation') {\n if (swiper.isElement) {\n swiper[mod].prevEl.remove();\n swiper[mod].nextEl.remove();\n }\n currentParams[mod].prevEl = undefined;\n currentParams[mod].nextEl = undefined;\n swiper[mod].prevEl = undefined;\n swiper[mod].nextEl = undefined;\n } else {\n if (swiper.isElement) {\n swiper[mod].el.remove();\n }\n currentParams[mod].el = undefined;\n swiper[mod].el = undefined;\n }\n };\n if (changedParams.includes('loop') && swiper.isElement) {\n if (currentParams.loop && !passedParams.loop) {\n loopNeedDestroy = true;\n } else if (!currentParams.loop && passedParams.loop) {\n loopNeedEnable = true;\n } else {\n loopNeedReloop = true;\n }\n }\n updateParams.forEach(key => {\n if (isObject(currentParams[key]) && isObject(passedParams[key])) {\n Object.assign(currentParams[key], passedParams[key]);\n if ((key === 'navigation' || key === 'pagination' || key === 'scrollbar') && 'enabled' in passedParams[key] && !passedParams[key].enabled) {\n destroyModule(key);\n }\n } else {\n const newValue = passedParams[key];\n if ((newValue === true || newValue === false) && (key === 'navigation' || key === 'pagination' || key === 'scrollbar')) {\n if (newValue === false) {\n destroyModule(key);\n }\n } else {\n currentParams[key] = passedParams[key];\n }\n }\n });\n if (updateParams.includes('controller') && !needControllerInit && swiper.controller && swiper.controller.control && currentParams.controller && currentParams.controller.control) {\n swiper.controller.control = currentParams.controller.control;\n }\n if (changedParams.includes('children') && slides && virtual && currentParams.virtual.enabled) {\n virtual.slides = slides;\n virtual.update(true);\n } else if (changedParams.includes('virtual') && virtual && currentParams.virtual.enabled) {\n if (slides) virtual.slides = slides;\n virtual.update(true);\n }\n if (changedParams.includes('children') && slides && currentParams.loop) {\n loopNeedReloop = true;\n }\n if (needThumbsInit) {\n const initialized = thumbs.init();\n if (initialized) thumbs.update(true);\n }\n if (needControllerInit) {\n swiper.controller.control = currentParams.controller.control;\n }\n if (needPaginationInit) {\n if (swiper.isElement && (!paginationEl || typeof paginationEl === 'string')) {\n paginationEl = document.createElement('div');\n paginationEl.classList.add('swiper-pagination');\n paginationEl.part.add('pagination');\n swiper.el.appendChild(paginationEl);\n }\n if (paginationEl) currentParams.pagination.el = paginationEl;\n pagination.init();\n pagination.render();\n pagination.update();\n }\n if (needScrollbarInit) {\n if (swiper.isElement && (!scrollbarEl || typeof scrollbarEl === 'string')) {\n scrollbarEl = document.createElement('div');\n scrollbarEl.classList.add('swiper-scrollbar');\n scrollbarEl.part.add('scrollbar');\n swiper.el.appendChild(scrollbarEl);\n }\n if (scrollbarEl) currentParams.scrollbar.el = scrollbarEl;\n scrollbar.init();\n scrollbar.updateSize();\n scrollbar.setTranslate();\n }\n if (needNavigationInit) {\n if (swiper.isElement) {\n if (!nextEl || typeof nextEl === 'string') {\n nextEl = document.createElement('div');\n nextEl.classList.add('swiper-button-next');\n setInnerHTML(nextEl, swiper.navigation.arrowSvg);\n nextEl.part.add('button-next');\n swiper.el.appendChild(nextEl);\n }\n if (!prevEl || typeof prevEl === 'string') {\n prevEl = document.createElement('div');\n prevEl.classList.add('swiper-button-prev');\n setInnerHTML(prevEl, swiper.navigation.arrowSvg);\n prevEl.part.add('button-prev');\n swiper.el.appendChild(prevEl);\n }\n }\n if (nextEl) currentParams.navigation.nextEl = nextEl;\n if (prevEl) currentParams.navigation.prevEl = prevEl;\n navigation.init();\n navigation.update();\n }\n if (changedParams.includes('allowSlideNext')) {\n swiper.allowSlideNext = passedParams.allowSlideNext;\n }\n if (changedParams.includes('allowSlidePrev')) {\n swiper.allowSlidePrev = passedParams.allowSlidePrev;\n }\n if (changedParams.includes('direction')) {\n swiper.changeDirection(passedParams.direction, false);\n }\n if (loopNeedDestroy || loopNeedReloop) {\n swiper.loopDestroy();\n }\n if (loopNeedEnable || loopNeedReloop) {\n swiper.loopCreate();\n }\n swiper.update();\n}\n\nexport { needsPagination as a, needsScrollbar as b, attrToProp as c, uniqueClasses as d, extend as e, isObject as i, needsNavigation as n, paramsList as p, updateSwiper as u, wrapperClass as w };\n","import { a as getWindow, g as getDocument } from './ssr-window.esm.mjs';\n\nfunction classesToTokens(classes = '') {\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 = 0) {\n return setTimeout(callback, delay);\n}\nfunction now() {\n return Date.now();\n}\nfunction getComputedStyle(el) {\n const window = getWindow();\n let style;\n if (window.getComputedStyle) {\n style = window.getComputedStyle(el, null);\n }\n if (!style && el.currentStyle) {\n style = el.currentStyle;\n }\n if (!style) {\n style = el.style;\n }\n return style;\n}\nfunction getTranslate(el, axis = 'x') {\n const window = getWindow();\n let matrix;\n let curTransform;\n let transformMatrix;\n const curStyle = getComputedStyle(el);\n if (window.WebKitCSSMatrix) {\n curTransform = curStyle.transform || curStyle.webkitTransform;\n if (curTransform.split(',').length > 6) {\n curTransform = curTransform.split(', ').map(a => a.replace(',', '.')).join(', ');\n }\n // Some old versions of Webkit choke when 'none' is passed; pass\n // empty string instead in this case\n transformMatrix = new window.WebKitCSSMatrix(curTransform === 'none' ? '' : curTransform);\n } else {\n transformMatrix = curStyle.MozTransform || curStyle.OTransform || curStyle.MsTransform || curStyle.msTransform || curStyle.transform || curStyle.getPropertyValue('transform').replace('translate(', 'matrix(1, 0, 0, 1,');\n matrix = transformMatrix.toString().split(',');\n }\n if (axis === 'x') {\n // Latest Chrome and webkits Fix\n if (window.WebKitCSSMatrix) curTransform = transformMatrix.m41;\n // Crazy IE10 Matrix\n else if (matrix.length === 16) curTransform = parseFloat(matrix[12]);\n // Normal Browsers\n else curTransform = parseFloat(matrix[4]);\n }\n if (axis === 'y') {\n // Latest Chrome and webkits Fix\n if (window.WebKitCSSMatrix) curTransform = transformMatrix.m42;\n // Crazy IE10 Matrix\n else if (matrix.length === 16) curTransform = parseFloat(matrix[13]);\n // Normal Browsers\n else curTransform = parseFloat(matrix[5]);\n }\n return curTransform || 0;\n}\nfunction isObject(o) {\n return typeof o === 'object' && o !== null && o.constructor && Object.prototype.toString.call(o).slice(8, -1) === 'Object';\n}\nfunction isNode(node) {\n // eslint-disable-next-line\n if (typeof window !== 'undefined' && typeof window.HTMLElement !== 'undefined') {\n return node instanceof HTMLElement;\n }\n return node && (node.nodeType === 1 || node.nodeType === 11);\n}\nfunction extend(...args) {\n const to = Object(args[0]);\n const noExtend = ['__proto__', 'constructor', 'prototype'];\n for (let i = 1; i < args.length; i += 1) {\n const nextSource = args[i];\n if (nextSource !== undefined && nextSource !== null && !isNode(nextSource)) {\n const keysArray = Object.keys(Object(nextSource)).filter(key => noExtend.indexOf(key) < 0);\n for (let nextIndex = 0, len = keysArray.length; nextIndex < len; nextIndex += 1) {\n const nextKey = keysArray[nextIndex];\n const desc = Object.getOwnPropertyDescriptor(nextSource, nextKey);\n if (desc !== undefined && desc.enumerable) {\n if (isObject(to[nextKey]) && isObject(nextSource[nextKey])) {\n if (nextSource[nextKey].__swiper__) {\n to[nextKey] = nextSource[nextKey];\n } else {\n extend(to[nextKey], nextSource[nextKey]);\n }\n } else if (!isObject(to[nextKey]) && isObject(nextSource[nextKey])) {\n to[nextKey] = {};\n if (nextSource[nextKey].__swiper__) {\n to[nextKey] = nextSource[nextKey];\n } else {\n extend(to[nextKey], nextSource[nextKey]);\n }\n } else {\n to[nextKey] = nextSource[nextKey];\n }\n }\n }\n }\n }\n return to;\n}\nfunction setCSSProperty(el, varName, varValue) {\n el.style.setProperty(varName, varValue);\n}\nfunction animateCSSModeScroll({\n swiper,\n targetPosition,\n side\n}) {\n const window = getWindow();\n const startPosition = -swiper.translate;\n let startTime = null;\n let time;\n const duration = swiper.params.speed;\n swiper.wrapperEl.style.scrollSnapType = 'none';\n window.cancelAnimationFrame(swiper.cssModeFrameID);\n const dir = targetPosition > startPosition ? 'next' : 'prev';\n const isOutOfBound = (current, target) => {\n return dir === 'next' && current >= target || dir === 'prev' && current <= target;\n };\n const animate = () => {\n time = new Date().getTime();\n if (startTime === null) {\n startTime = time;\n }\n const progress = Math.max(Math.min((time - startTime) / duration, 1), 0);\n const easeProgress = 0.5 - Math.cos(progress * Math.PI) / 2;\n let currentPosition = startPosition + easeProgress * (targetPosition - startPosition);\n if (isOutOfBound(currentPosition, targetPosition)) {\n currentPosition = targetPosition;\n }\n swiper.wrapperEl.scrollTo({\n [side]: currentPosition\n });\n if (isOutOfBound(currentPosition, targetPosition)) {\n swiper.wrapperEl.style.overflow = 'hidden';\n swiper.wrapperEl.style.scrollSnapType = '';\n setTimeout(() => {\n swiper.wrapperEl.style.overflow = '';\n swiper.wrapperEl.scrollTo({\n [side]: currentPosition\n });\n });\n window.cancelAnimationFrame(swiper.cssModeFrameID);\n return;\n }\n swiper.cssModeFrameID = window.requestAnimationFrame(animate);\n };\n animate();\n}\nfunction getSlideTransformEl(slideEl) {\n return slideEl.querySelector('.swiper-slide-transform') || slideEl.shadowRoot && slideEl.shadowRoot.querySelector('.swiper-slide-transform') || slideEl;\n}\nfunction elementChildren(element, selector = '') {\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 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 (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 { getRotateFix as a, setCSSProperty as b, createElement as c, elementParents as d, elementChildren as e, elementOffset as f, getSlideTransformEl as g, now as h, elementOuterSize as i, elementIndex as j, classesToTokens as k, getTranslate as l, makeElementsArray as m, nextTick as n, elementTransitionEnd as o, isObject 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","/**\n * Swiper React 12.0.3\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: October 21, 2025\n */\n\nimport React, { useEffect, useLayoutEffect, useContext, createContext, forwardRef, useState, useRef } from 'react';\nimport { S as Swiper$1 } from './shared/swiper-core.mjs';\nimport { g as getParams, m as mountSwiper, a as getChangedParams, u as updateOnVirtualData } from './shared/update-on-virtual-data.mjs';\nimport { d as uniqueClasses, w as wrapperClass, n as needsNavigation, b as needsScrollbar, a as needsPagination, e as extend, u as updateSwiper } from './shared/update-swiper.mjs';\n\nfunction _extends() {\n _extends = Object.assign ? Object.assign.bind() : function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n return target;\n };\n return _extends.apply(this, arguments);\n}\n\nfunction isChildSwiperSlide(child) {\n return child.type && child.type.displayName && child.type.displayName.includes('SwiperSlide');\n}\nfunction processChildren(c) {\n const slides = [];\n React.Children.toArray(c).forEach(child => {\n if (isChildSwiperSlide(child)) {\n slides.push(child);\n } else if (child.props && child.props.children) {\n processChildren(child.props.children).forEach(slide => slides.push(slide));\n }\n });\n return slides;\n}\nfunction getChildren(c) {\n const slides = [];\n const slots = {\n 'container-start': [],\n 'container-end': [],\n 'wrapper-start': [],\n 'wrapper-end': []\n };\n React.Children.toArray(c).forEach(child => {\n if (isChildSwiperSlide(child)) {\n slides.push(child);\n } else if (child.props && child.props.slot && slots[child.props.slot]) {\n slots[child.props.slot].push(child);\n } else if (child.props && child.props.children) {\n const foundSlides = processChildren(child.props.children);\n if (foundSlides.length > 0) {\n foundSlides.forEach(slide => slides.push(slide));\n } else {\n slots['container-end'].push(child);\n }\n } else {\n slots['container-end'].push(child);\n }\n });\n return {\n slides,\n slots\n };\n}\n\nfunction renderVirtual(swiper, slides, virtualData) {\n if (!virtualData) return null;\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 const style = swiper.isHorizontal() ? {\n [swiper.rtlTranslate ? 'right' : 'left']: `${virtualData.offset}px`\n } : {\n top: `${virtualData.offset}px`\n };\n const {\n from,\n to\n } = virtualData;\n const loopFrom = swiper.params.loop ? -slides.length : 0;\n const loopTo = swiper.params.loop ? slides.length * 2 : slides.length;\n const slidesToRender = [];\n for (let i = loopFrom; i < loopTo; i += 1) {\n if (i >= from && i <= to) {\n slidesToRender.push(slides[getSlideIndex(i)]);\n }\n }\n return slidesToRender.map((child, index) => {\n return /*#__PURE__*/React.cloneElement(child, {\n swiper,\n style,\n key: child.props.virtualIndex || child.key || `slide-${index}`\n });\n });\n}\n\nfunction useIsomorphicLayoutEffect(callback, deps) {\n // eslint-disable-next-line\n if (typeof window === 'undefined') return useEffect(callback, deps);\n return useLayoutEffect(callback, deps);\n}\n\nconst SwiperSlideContext = /*#__PURE__*/createContext(null);\nconst useSwiperSlide = () => {\n return useContext(SwiperSlideContext);\n};\nconst SwiperContext = /*#__PURE__*/createContext(null);\nconst useSwiper = () => {\n return useContext(SwiperContext);\n};\n\nconst Swiper = /*#__PURE__*/forwardRef(({\n className,\n tag: Tag = 'div',\n wrapperTag: WrapperTag = 'div',\n children,\n onSwiper,\n ...rest\n} = {}, externalElRef) => {\n let eventsAssigned = false;\n const [containerClasses, setContainerClasses] = useState('swiper');\n const [virtualData, setVirtualData] = useState(null);\n const [breakpointChanged, setBreakpointChanged] = useState(false);\n const initializedRef = useRef(false);\n const swiperElRef = useRef(null);\n const swiperRef = useRef(null);\n const oldPassedParamsRef = useRef(null);\n const oldSlides = useRef(null);\n const nextElRef = useRef(null);\n const prevElRef = useRef(null);\n const paginationElRef = useRef(null);\n const scrollbarElRef = useRef(null);\n const {\n params: swiperParams,\n passedParams,\n rest: restProps,\n events\n } = getParams(rest);\n const {\n slides,\n slots\n } = getChildren(children);\n const onBeforeBreakpoint = () => {\n setBreakpointChanged(!breakpointChanged);\n };\n Object.assign(swiperParams.on, {\n _containerClasses(swiper, classes) {\n setContainerClasses(classes);\n }\n });\n const initSwiper = () => {\n // init swiper\n Object.assign(swiperParams.on, events);\n eventsAssigned = true;\n const passParams = {\n ...swiperParams\n };\n delete passParams.wrapperClass;\n swiperRef.current = new Swiper$1(passParams);\n if (swiperRef.current.virtual && swiperRef.current.params.virtual.enabled) {\n swiperRef.current.virtual.slides = slides;\n const extendWith = {\n cache: false,\n slides,\n renderExternal: setVirtualData,\n renderExternalUpdate: false\n };\n extend(swiperRef.current.params.virtual, extendWith);\n extend(swiperRef.current.originalParams.virtual, extendWith);\n }\n };\n if (!swiperElRef.current) {\n initSwiper();\n }\n\n // Listen for breakpoints change\n if (swiperRef.current) {\n swiperRef.current.on('_beforeBreakpoint', onBeforeBreakpoint);\n }\n const attachEvents = () => {\n if (eventsAssigned || !events || !swiperRef.current) return;\n Object.keys(events).forEach(eventName => {\n swiperRef.current.on(eventName, events[eventName]);\n });\n };\n const detachEvents = () => {\n if (!events || !swiperRef.current) return;\n Object.keys(events).forEach(eventName => {\n swiperRef.current.off(eventName, events[eventName]);\n });\n };\n useEffect(() => {\n return () => {\n if (swiperRef.current) swiperRef.current.off('_beforeBreakpoint', onBeforeBreakpoint);\n };\n });\n\n // set initialized flag\n useEffect(() => {\n if (!initializedRef.current && swiperRef.current) {\n swiperRef.current.emitSlidesClasses();\n initializedRef.current = true;\n }\n });\n\n // mount swiper\n useIsomorphicLayoutEffect(() => {\n if (externalElRef) {\n externalElRef.current = swiperElRef.current;\n }\n if (!swiperElRef.current) return;\n if (swiperRef.current.destroyed) {\n initSwiper();\n }\n mountSwiper({\n el: swiperElRef.current,\n nextEl: nextElRef.current,\n prevEl: prevElRef.current,\n paginationEl: paginationElRef.current,\n scrollbarEl: scrollbarElRef.current,\n swiper: swiperRef.current\n }, swiperParams);\n if (onSwiper && !swiperRef.current.destroyed) onSwiper(swiperRef.current);\n // eslint-disable-next-line\n return () => {\n if (swiperRef.current && !swiperRef.current.destroyed) {\n swiperRef.current.destroy(true, false);\n }\n };\n }, []);\n\n // watch for params change\n useIsomorphicLayoutEffect(() => {\n attachEvents();\n const changedParams = getChangedParams(passedParams, oldPassedParamsRef.current, slides, oldSlides.current, c => c.key);\n oldPassedParamsRef.current = passedParams;\n oldSlides.current = slides;\n if (changedParams.length && swiperRef.current && !swiperRef.current.destroyed) {\n updateSwiper({\n swiper: swiperRef.current,\n slides,\n passedParams,\n changedParams,\n nextEl: nextElRef.current,\n prevEl: prevElRef.current,\n scrollbarEl: scrollbarElRef.current,\n paginationEl: paginationElRef.current\n });\n }\n return () => {\n detachEvents();\n };\n });\n\n // update on virtual update\n useIsomorphicLayoutEffect(() => {\n updateOnVirtualData(swiperRef.current);\n }, [virtualData]);\n\n // bypass swiper instance to slides\n function renderSlides() {\n if (swiperParams.virtual) {\n return renderVirtual(swiperRef.current, slides, virtualData);\n }\n return slides.map((child, index) => {\n return /*#__PURE__*/React.cloneElement(child, {\n swiper: swiperRef.current,\n swiperSlideIndex: index\n });\n });\n }\n return /*#__PURE__*/React.createElement(Tag, _extends({\n ref: swiperElRef,\n className: uniqueClasses(`${containerClasses}${className ? ` ${className}` : ''}`)\n }, restProps), /*#__PURE__*/React.createElement(SwiperContext.Provider, {\n value: swiperRef.current\n }, slots['container-start'], /*#__PURE__*/React.createElement(WrapperTag, {\n className: wrapperClass(swiperParams.wrapperClass)\n }, slots['wrapper-start'], renderSlides(), slots['wrapper-end']), needsNavigation(swiperParams) && /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(\"div\", {\n ref: prevElRef,\n className: \"swiper-button-prev\"\n }), /*#__PURE__*/React.createElement(\"div\", {\n ref: nextElRef,\n className: \"swiper-button-next\"\n })), needsScrollbar(swiperParams) && /*#__PURE__*/React.createElement(\"div\", {\n ref: scrollbarElRef,\n className: \"swiper-scrollbar\"\n }), needsPagination(swiperParams) && /*#__PURE__*/React.createElement(\"div\", {\n ref: paginationElRef,\n className: \"swiper-pagination\"\n }), slots['container-end']));\n});\nSwiper.displayName = 'Swiper';\n\nconst SwiperSlide = /*#__PURE__*/forwardRef(({\n tag: Tag = 'div',\n children,\n className = '',\n swiper,\n zoom,\n lazy,\n virtualIndex,\n swiperSlideIndex,\n ...rest\n} = {}, externalRef) => {\n const slideElRef = useRef(null);\n const [slideClasses, setSlideClasses] = useState('swiper-slide');\n const [lazyLoaded, setLazyLoaded] = useState(false);\n function updateClasses(_s, el, classNames) {\n if (el === slideElRef.current) {\n setSlideClasses(classNames);\n }\n }\n useIsomorphicLayoutEffect(() => {\n if (typeof swiperSlideIndex !== 'undefined') {\n slideElRef.current.swiperSlideIndex = swiperSlideIndex;\n }\n if (externalRef) {\n externalRef.current = slideElRef.current;\n }\n if (!slideElRef.current || !swiper) {\n return;\n }\n if (swiper.destroyed) {\n if (slideClasses !== 'swiper-slide') {\n setSlideClasses('swiper-slide');\n }\n return;\n }\n swiper.on('_slideClass', updateClasses);\n // eslint-disable-next-line\n return () => {\n if (!swiper) return;\n swiper.off('_slideClass', updateClasses);\n };\n });\n useIsomorphicLayoutEffect(() => {\n if (swiper && slideElRef.current && !swiper.destroyed) {\n setSlideClasses(swiper.getSlideClasses(slideElRef.current));\n }\n }, [swiper]);\n const slideData = {\n isActive: slideClasses.indexOf('swiper-slide-active') >= 0,\n isVisible: slideClasses.indexOf('swiper-slide-visible') >= 0,\n isPrev: slideClasses.indexOf('swiper-slide-prev') >= 0,\n isNext: slideClasses.indexOf('swiper-slide-next') >= 0\n };\n const renderChildren = () => {\n return typeof children === 'function' ? children(slideData) : children;\n };\n const onLoad = () => {\n setLazyLoaded(true);\n };\n return /*#__PURE__*/React.createElement(Tag, _extends({\n ref: slideElRef,\n className: uniqueClasses(`${slideClasses}${className ? ` ${className}` : ''}`),\n \"data-swiper-slide-index\": virtualIndex,\n onLoad: onLoad\n }, rest), zoom && /*#__PURE__*/React.createElement(SwiperSlideContext.Provider, {\n value: slideData\n }, /*#__PURE__*/React.createElement(\"div\", {\n className: \"swiper-zoom-container\",\n \"data-swiper-zoom\": typeof zoom === 'number' ? zoom : undefined\n }, renderChildren(), lazy && !lazyLoaded && /*#__PURE__*/React.createElement(\"div\", {\n className: \"swiper-lazy-preloader\"\n }))), !zoom && /*#__PURE__*/React.createElement(SwiperSlideContext.Provider, {\n value: slideData\n }, renderChildren(), lazy && !lazyLoaded && /*#__PURE__*/React.createElement(\"div\", {\n className: \"swiper-lazy-preloader\"\n })));\n});\nSwiperSlide.displayName = 'SwiperSlide';\n\nexport { Swiper, SwiperSlide, useSwiper, useSwiperSlide };\n","// getDefaultExport function for compatibility with non-ESM modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};\n","__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n Object.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n }\n }\n};","// This function allow to reference chunks\n__webpack_require__.miniCssF = (chunkId) => {\n // return url for filenames not based on template\n \n // return url for filenames based on template\n return \"static/css/\" + chunkId + \".css\"\n}","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","var currentModuleData = {};\nvar installedModules = __webpack_require__.c;\n\n// module and require creation\nvar currentChildModule;\nvar currentParents = [];\n\n// status\nvar registeredStatusHandlers = [];\nvar currentStatus = \"idle\";\n\n// while downloading\nvar blockingPromises = 0;\nvar blockingPromisesWaiting = [];\n\n// The update info\nvar currentUpdateApplyHandlers;\nvar queuedInvalidatedModules;\n\n__webpack_require__.hmrD = currentModuleData;\n__webpack_require__.i.push(function (options) {\n\tvar module = options.module;\n\tvar require = createRequire(options.require, options.id);\n\tmodule.hot = createModuleHotObject(options.id, module);\n\tmodule.parents = currentParents;\n\tmodule.children = [];\n\tcurrentParents = [];\n\toptions.require = require;\n});\n\n__webpack_require__.hmrC = {};\n__webpack_require__.hmrI = {};\n\nfunction createRequire(require, moduleId) {\n\tvar me = installedModules[moduleId];\n\tif (!me) return require;\n\tvar fn = function (request) {\n\t\tif (me.hot.active) {\n\t\t\tif (installedModules[request]) {\n\t\t\t\tvar parents = installedModules[request].parents;\n\t\t\t\tif (parents.indexOf(moduleId) === -1) {\n\t\t\t\t\tparents.push(moduleId);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tcurrentParents = [moduleId];\n\t\t\t\tcurrentChildModule = request;\n\t\t\t}\n\t\t\tif (me.children.indexOf(request) === -1) {\n\t\t\t\tme.children.push(request);\n\t\t\t}\n\t\t} else {\n\t\t\tconsole.warn(\n\t\t\t\t\"[HMR] unexpected require(\" +\n\t\t\t\trequest +\n\t\t\t\t\") from disposed module \" +\n\t\t\t\tmoduleId\n\t\t\t);\n\t\t\tcurrentParents = [];\n\t\t}\n\t\treturn require(request);\n\t};\n\tvar createPropertyDescriptor = function (name) {\n\t\treturn {\n\t\t\tconfigurable: true,\n\t\t\tenumerable: true,\n\t\t\tget: function () {\n\t\t\t\treturn require[name];\n\t\t\t},\n\t\t\tset: function (value) {\n\t\t\t\trequire[name] = value;\n\t\t\t}\n\t\t};\n\t};\n\tfor (var name in require) {\n\t\tif (Object.prototype.hasOwnProperty.call(require, name) && name !== \"e\") {\n\t\t\tObject.defineProperty(fn, name, createPropertyDescriptor(name));\n\t\t}\n\t}\n\n\tfn.e = function (chunkId, fetchPriority) {\n\t\treturn trackBlockingPromise(require.e(chunkId, fetchPriority));\n\t};\n\n\treturn fn;\n}\n\nfunction createModuleHotObject(moduleId, me) {\n\tvar _main = currentChildModule !== moduleId;\n\tvar hot = {\n\t\t_acceptedDependencies: {},\n\t\t_acceptedErrorHandlers: {},\n\t\t_declinedDependencies: {},\n\t\t_selfAccepted: false,\n\t\t_selfDeclined: false,\n\t\t_selfInvalidated: false,\n\t\t_disposeHandlers: [],\n\t\t_main: _main,\n\t\t_requireSelf: function () {\n\t\t\tcurrentParents = me.parents.slice();\n\t\t\tcurrentChildModule = _main ? undefined : moduleId;\n\t\t\t__webpack_require__(moduleId);\n\t\t},\n\t\tactive: true,\n\t\taccept: function (dep, callback, errorHandler) {\n\t\t\tif (dep === undefined) hot._selfAccepted = true;\n\t\t\telse if (typeof dep === \"function\") hot._selfAccepted = dep;\n\t\t\telse if (typeof dep === \"object\" && dep !== null) {\n\t\t\t\tfor (var i = 0; i < dep.length; i++) {\n\t\t\t\t\thot._acceptedDependencies[dep[i]] = callback || function () { };\n\t\t\t\t\thot._acceptedErrorHandlers[dep[i]] = errorHandler;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\thot._acceptedDependencies[dep] = callback || function () { };\n\t\t\t\thot._acceptedErrorHandlers[dep] = errorHandler;\n\t\t\t}\n\t\t},\n\t\tdecline: function (dep) {\n\t\t\tif (dep === undefined) hot._selfDeclined = true;\n\t\t\telse if (typeof dep === \"object\" && dep !== null)\n\t\t\t\tfor (var i = 0; i < dep.length; i++)\n\t\t\t\t\thot._declinedDependencies[dep[i]] = true;\n\t\t\telse hot._declinedDependencies[dep] = true;\n\t\t},\n\t\tdispose: function (callback) {\n\t\t\thot._disposeHandlers.push(callback);\n\t\t},\n\t\taddDisposeHandler: function (callback) {\n\t\t\thot._disposeHandlers.push(callback);\n\t\t},\n\t\tremoveDisposeHandler: function (callback) {\n\t\t\tvar idx = hot._disposeHandlers.indexOf(callback);\n\t\t\tif (idx >= 0) hot._disposeHandlers.splice(idx, 1);\n\t\t},\n\t\tinvalidate: function () {\n\t\t\tthis._selfInvalidated = true;\n\t\t\tswitch (currentStatus) {\n\t\t\t\tcase \"idle\":\n\t\t\t\t\tcurrentUpdateApplyHandlers = [];\n\t\t\t\t\tObject.keys(__webpack_require__.hmrI).forEach(function (key) {\n\t\t\t\t\t\t__webpack_require__.hmrI[key](moduleId, currentUpdateApplyHandlers);\n\t\t\t\t\t});\n\t\t\t\t\tsetStatus(\"ready\");\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"ready\":\n\t\t\t\t\tObject.keys(__webpack_require__.hmrI).forEach(function (key) {\n\t\t\t\t\t\t__webpack_require__.hmrI[key](moduleId, currentUpdateApplyHandlers);\n\t\t\t\t\t});\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"prepare\":\n\t\t\t\tcase \"check\":\n\t\t\t\tcase \"dispose\":\n\t\t\t\tcase \"apply\":\n\t\t\t\t\t(queuedInvalidatedModules = queuedInvalidatedModules || []).push(\n\t\t\t\t\t\tmoduleId\n\t\t\t\t\t);\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t},\n\t\tcheck: hotCheck,\n\t\tapply: hotApply,\n\t\tstatus: function (l) {\n\t\t\tif (!l) return currentStatus;\n\t\t\tregisteredStatusHandlers.push(l);\n\t\t},\n\t\taddStatusHandler: function (l) {\n\t\t\tregisteredStatusHandlers.push(l);\n\t\t},\n\t\tremoveStatusHandler: function (l) {\n\t\t\tvar idx = registeredStatusHandlers.indexOf(l);\n\t\t\tif (idx >= 0) registeredStatusHandlers.splice(idx, 1);\n\t\t},\n\t\tdata: currentModuleData[moduleId]\n\t};\n\tcurrentChildModule = undefined;\n\treturn hot;\n}\n\nfunction setStatus(newStatus) {\n\tcurrentStatus = newStatus; \n\tvar results = [];\n\tfor (var i = 0; i < registeredStatusHandlers.length; i++)\n\t\tresults[i] = registeredStatusHandlers[i].call(null, newStatus);\n\n\treturn Promise.all(results).then(function () { });\n}\n\nfunction unblock() {\n\tif (--blockingPromises === 0) {\n\t\tsetStatus(\"ready\").then(function () {\n\t\t\tif (blockingPromises === 0) {\n\t\t\t\tvar list = blockingPromisesWaiting;\n\t\t\t\tblockingPromisesWaiting = [];\n\t\t\t\tfor (var i = 0; i < list.length; i++) {\n\t\t\t\t\tlist[i]();\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n}\n\nfunction trackBlockingPromise(promise) {\n\tswitch (currentStatus) {\n\t\tcase \"ready\":\n\t\t\tsetStatus(\"prepare\");\n\t\tcase \"prepare\":\n\t\t\tblockingPromises++;\n\t\t\tpromise.then(unblock, unblock);\n\t\t\treturn promise;\n\t\tdefault:\n\t\t\treturn promise;\n\t}\n}\n\nfunction waitForBlockingPromises(fn) {\n\tif (blockingPromises === 0) return fn();\n\treturn new Promise(function (resolve) {\n\t\tblockingPromisesWaiting.push(function () {\n\t\t\tresolve(fn());\n\t\t});\n\t});\n}\n\nfunction hotCheck(applyOnUpdate) {\n\tif (currentStatus !== \"idle\") {\n\t\tthrow new Error(\"check() is only allowed in idle status\");\n\t} \n\treturn setStatus(\"check\")\n\t\t.then(__webpack_require__.hmrM)\n\t\t.then(function (update) {\n\t\t\tif (!update) {\n\t\t\t\treturn setStatus(applyInvalidatedModules() ? \"ready\" : \"idle\").then(\n\t\t\t\t\tfunction () {\n\t\t\t\t\t\treturn null;\n\t\t\t\t\t}\n\t\t\t\t);\n\t\t\t}\n\n\t\t\treturn setStatus(\"prepare\").then(function () {\n\t\t\t\tvar updatedModules = [];\n\t\t\t\tcurrentUpdateApplyHandlers = [];\n\n\t\t\t\treturn Promise.all(\n\t\t\t\t\tObject.keys(__webpack_require__.hmrC).reduce(function (\n\t\t\t\t\t\tpromises,\n\t\t\t\t\t\tkey\n\t\t\t\t\t) {\n\t\t\t\t\t\t__webpack_require__.hmrC[key](\n\t\t\t\t\t\t\tupdate.c,\n\t\t\t\t\t\t\tupdate.r,\n\t\t\t\t\t\t\tupdate.m,\n\t\t\t\t\t\t\tpromises,\n\t\t\t\t\t\t\tcurrentUpdateApplyHandlers,\n\t\t\t\t\t\t\tupdatedModules\n\t\t\t\t\t\t);\n\t\t\t\t\t\treturn promises;\n\t\t\t\t\t},\n\t\t\t\t\t\t[])\n\t\t\t\t).then(function () {\n\t\t\t\t\treturn waitForBlockingPromises(function () {\n\t\t\t\t\t\tif (applyOnUpdate) {\n\t\t\t\t\t\t\treturn internalApply(applyOnUpdate);\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn setStatus(\"ready\").then(function () {\n\t\t\t\t\t\t\treturn updatedModules;\n\t\t\t\t\t\t});\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t});\n\t\t});\n}\n\nfunction hotApply(options) {\n\tif (currentStatus !== \"ready\") {\n\t\treturn Promise.resolve().then(function () {\n\t\t\tthrow new Error(\n\t\t\t\t\"apply() is only allowed in ready status (state: \" + currentStatus + \")\"\n\t\t\t);\n\t\t});\n\t}\n\treturn internalApply(options);\n}\n\nfunction internalApply(options) {\n\toptions = options || {};\n\tapplyInvalidatedModules();\n\tvar results = currentUpdateApplyHandlers.map(function (handler) {\n\t\treturn handler(options);\n\t});\n\tcurrentUpdateApplyHandlers = undefined;\n\tvar errors = results\n\t\t.map(function (r) {\n\t\t\treturn r.error;\n\t\t})\n\t\t.filter(Boolean);\n\n\tif (errors.length > 0) {\n\t\treturn setStatus(\"abort\").then(function () {\n\t\t\tthrow errors[0];\n\t\t});\n\t}\n\n\tvar disposePromise = setStatus(\"dispose\");\n\n\tresults.forEach(function (result) {\n\t\tif (result.dispose) result.dispose();\n\t});\n\n\tvar applyPromise = setStatus(\"apply\");\n\n\tvar error;\n\tvar reportError = function (err) {\n\t\tif (!error) error = err;\n\t};\n\n\tvar outdatedModules = [];\n\tresults.forEach(function (result) {\n\t\tif (result.apply) {\n\t\t\tvar modules = result.apply(reportError);\n\t\t\tif (modules) {\n\t\t\t\tfor (var i = 0; i < modules.length; i++) {\n\t\t\t\t\toutdatedModules.push(modules[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t});\n\n\treturn Promise.all([disposePromise, applyPromise]).then(function () {\n\t\tif (error) {\n\t\t\treturn setStatus(\"fail\").then(function () {\n\t\t\t\tthrow error;\n\t\t\t});\n\t\t}\n\n\t\tif (queuedInvalidatedModules) {\n\t\t\treturn internalApply(options).then(function (list) {\n\t\t\t\toutdatedModules.forEach(function (moduleId) {\n\t\t\t\t\tif (list.indexOf(moduleId) < 0) list.push(moduleId);\n\t\t\t\t});\n\t\t\t\treturn list;\n\t\t\t});\n\t\t}\n\n\t\treturn setStatus(\"idle\").then(function () {\n\t\t\treturn outdatedModules;\n\t\t});\n\t});\n}\n\nfunction applyInvalidatedModules() {\n\tif (queuedInvalidatedModules) {\n\t\tif (!currentUpdateApplyHandlers) currentUpdateApplyHandlers = [];\n\t\tObject.keys(__webpack_require__.hmrI).forEach(function (key) {\n\t\t\tqueuedInvalidatedModules.forEach(function (moduleId) {\n\t\t\t\t__webpack_require__.hmrI[key](moduleId, currentUpdateApplyHandlers);\n\t\t\t});\n\t\t});\n\t\tqueuedInvalidatedModules = undefined;\n\t\treturn true;\n\t}\n}\n","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","__webpack_require__.p = \"/\";","if (typeof document === \"undefined\") return;\nvar createStylesheet = function (\n\tchunkId, fullhref, oldTag, resolve, reject\n) {\n\tvar linkTag = document.createElement(\"link\");\n\t\n\tlinkTag.rel = \"stylesheet\";\n\tlinkTag.type=\"text/css\";\n\tif (__webpack_require__.nc) {\n\t\tlinkTag.nonce = __webpack_require__.nc;\n\t}\n\tvar onLinkComplete = function (event) {\n\t\t// avoid mem leaks.\n\t\tlinkTag.onerror = linkTag.onload = null;\n\t\tif (event.type === 'load') {\n\t\t\tresolve();\n\t\t} else {\n\t\t\tvar errorType = event && (event.type === 'load' ? 'missing' : event.type);\n\t\t\tvar realHref = event && event.target && event.target.href || fullhref;\n\t\t\tvar err = new Error(\"Loading CSS chunk \" + chunkId + \" failed.\\\\n(\" + realHref + \")\");\n\t\t\terr.code = \"CSS_CHUNK_LOAD_FAILED\";\n\t\t\terr.type = errorType;\n\t\t\terr.request = realHref;\n\t\t\tif (linkTag.parentNode) linkTag.parentNode.removeChild(linkTag)\n\t\t\treject(err);\n\t\t}\n\t}\n\n\tlinkTag.onerror = linkTag.onload = onLinkComplete;\n\tlinkTag.href = fullhref;\n\t\n\tif (oldTag) {\n oldTag.parentNode.insertBefore(linkTag, oldTag.nextSibling);\n} else {\n document.head.appendChild(linkTag);\n}\n\treturn linkTag;\n}\nvar findStylesheet = function (href, fullhref) {\n\tvar existingLinkTags = document.getElementsByTagName(\"link\");\n\tfor (var i = 0; i < existingLinkTags.length; i++) {\n\t\tvar tag = existingLinkTags[i];\n\t\tvar dataHref = tag.getAttribute(\"data-href\") || tag.getAttribute(\"href\");\n\t\tif (dataHref) {\n\t\t\tdataHref = dataHref.split('?')[0]\n\t\t}\n\t\tif (tag.rel === \"stylesheet\" && (dataHref === href || dataHref === fullhref)) return tag;\n\t}\n\n\tvar existingStyleTags = document.getElementsByTagName(\"style\");\n\tfor (var i = 0; i < existingStyleTags.length; i++) {\n\t\tvar tag = existingStyleTags[i];\n\t\tvar dataHref = tag.getAttribute(\"data-href\");\n\t\tif (dataHref === href || dataHref === fullhref) return tag;\n\t}\n}\n\nvar loadStylesheet = function (chunkId) {\n\treturn new Promise(function (resolve, reject) {\n\t\tvar href = __webpack_require__.miniCssF(chunkId);\n\t\tvar fullhref = __webpack_require__.p + href;\n\t\tif (findStylesheet(href, fullhref)) return resolve();\n\t\tcreateStylesheet(chunkId, fullhref, null, resolve, reject);\n\t})\n}\n\n// no chunk loading\nvar oldTags = [];\nvar newTags = [];\nvar applyHandler = function (options) {\n\treturn {\n\t\tdispose: function () {\n\t\t\tfor (var i = 0; i < oldTags.length; i++) {\n\t\t\t\tvar oldTag = oldTags[i];\n\t\t\t\tif (oldTag.parentNode) oldTag.parentNode.removeChild(oldTag);\n\t\t\t}\n\t\t\toldTags.length = 0;\n\t\t},\n\t\tapply: function () {\n\t\t\tfor (var i = 0; i < newTags.length; i++) newTags[i].rel = \"stylesheet\";\n\t\t\tnewTags.length = 0;\n\t\t}\n\t}\n}\n__webpack_require__.hmrC.miniCss = function (chunkIds, removedChunks, removedModules, promises, applyHandlers, updatedModulesList) {\n\tapplyHandlers.push(applyHandler);\n\tchunkIds.forEach(function (chunkId) {\n\t\tvar href = __webpack_require__.miniCssF(chunkId);\n\t\tvar fullhref = __webpack_require__.p + href;\n\t\tvar oldTag = findStylesheet(href, fullhref);\n\t\tif (!oldTag) return;\n\t\tpromises.push(new Promise(function (resolve, reject) {\n\t\t\tvar tag = createStylesheet(\n\t\t\t\tchunkId,\n\n\t\t\t\t/**\n\t\t\t\t\tIf dynamically add link tag through dom API and there is already a loaded style link, browsers sometimes treats the new link tag as the same link, and won't fetch the new style.\n\t\t\t\t\tUse query to avoid browser cache the link tag, force to re-fetch new style, this is the same strategy as updateCss API, this can happen during lazy compilation\n\t\t\t\t */\n\t\t\t\t`${fullhref}?${Date.now()}`,\n\t\t\t\toldTag,\n\t\t\t\tfunction () {\n\t\t\t\t\ttag.as = \"style\";\n\t\t\t\t\ttag.rel = \"preload\";\n\t\t\t\t\tresolve();\n\t\t\t\t},\n\t\t\t\treject\n\t\t\t);\n\t\t\toldTags.push(oldTag);\n\t\t\tnewTags.push(tag);\n\t\t}))\n\t});\n}\n\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;AC3HA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;ACvBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;ACvBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;ACvBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;ACvBA;;;;ACAA;;;;ACAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;ACjVA;AACA;AACA;AAGA;AACA;;;;;ACNA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;ACjVA;AACA;AACA;AAGA;AACA;;;;;;;;;;;;ACJA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;AAKA;AA3CA;;;;;;;;;;;;;;;;;;ACAA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;;;;;;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;;;;;;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;;;;;;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;;;;;;;;;;;;;;;;AAGA;AATA;;;;;;;;;;;;;;;;;;ACFA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;;;;;;;;;;AAEA;AAJA;;;;;;;;;;;;;;;;;;;ACAA;AAGA;AACA;AAAA;;;;;;AACA;AAFA;;;;;;;;;;;;;;;;;;ACHA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;;;;;;;;;;AAGA;AAdA;;;;;;;;;;;;;;;;;;ACAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;;;;;;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;;;;;;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;;;;;;;;;;;AAEA;AANA;;;;;;;;;;;;;;;;;;ACAA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;;;;;;;;;;AAEA;AAJA;;;;;;;;;;;;;;;;;;ACAA;AACA;AAAA;AAAA;AAAA;AAAA;;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;;;;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;;;;;;;;;AAEA;AALA;;;;;;;;;;;;;;;;;;;ACAA;AAGA;AACA;AAAA;;;;;;AACA;AAFA;;;;;;;;;;;;;;;;;;ACHA;AACA;AAAA;AAAA;AAAA;AAAA;;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;;;;;;;;;;;;;;AAGA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;;;;;;;;;;;;;;AAGA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;;;;;;;;;;;;;;AAGA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;;;;;;;;;;;;;;AAGA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;;;;;;;;;;;;;;AAGA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;;;;;;;;;;;;;;;;;;;AAIA;AAjCA;;;;;;;;;;;;;;;;;;ACAA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;;;;;;;;;;AAEA;AAJA;;;;;;;;;;;;;;;;;;ACEA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;;;;;;;;;;;AAFA;AAMA;AAEA;;;;;;;;;;;;;;;;;;ACRA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;;;;;;;;;;;AAFA;AAMA;AAEA;;;;;;;;;;;;;;;;;;ACRA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;;;;;;;;;;;AAFA;AAMA;AAEA;;;;;;;;;;;;;;;;;;ACRA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;;;;;;;;;;;AAFA;AAMA;AAEA;;;;;;;;;;;;;;;;;;ACVA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;;;;;AAEA;AACA;AACA;AACA;AACA;AACA;;;;;;AAEA;AACA;AACA;AACA;AACA;AACA;;;;;;AAEA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;AAIA;AA1CA;;;;;;;;;;;;;;;;;;ACEA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;;;;;;;;;;;AAEA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;;;;;;;;;;;AAEA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;;;;;;;;;;;AAEA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;;;;;;;;;;;AAEA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;;;;;;;;;;;AAEA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;;;;;;;;;;;;;;;;;;;;;;AAnBA;AAyBA;AAEA;;;;;;;;;;;;;;;;;;AC3BA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;;;;;;;;;;;AAEA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;;;;;;;;;;;AAEA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;;;;;;;;;;;AAEA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;;;;;;;;;;;AAEA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;;;;;;;;;;;AAEA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;;;;;;;;;;;;;;;;;;;;;;AAnBA;AAyBA;AAEA;;;;;;;;;;;;;;;;;;AC7BA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;;;;;;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;;;;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;;;;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;;;;;;;;;;;;;;;;;;;AAIA;AAXA;;;;;;;;;;;;;;;;;;;;;;ACCA;AAEA;AAOA;AASA;AAAA;;AAOA;AAEA;AAEA;AACA;AACA;AACA;;AAEA;AAAA;;;;;AACA;;;;;;AAEA;AAAA;;;;;;;;;;;;AAGA;AAtBA;AAAA;AAwBA;AAEA;;;;;;;;;;;;;;;;;;;AC3CA;AAEA;AAAA;AAIA;AACA;AACA;;;;;;AAGA;AATA;AAWA;AAEA;;;;;;;;;;;;;;;;;;;ACfA;AAKA;AAAA;AAIA;AACA;AACA;;;;;;AAGA;AATA;AAWA;AAEA;;;;;;;;;;;;;;;;;;;;;ACjBA;AAOA;AAEA;AAUA;AAAA;AASA;AACA;;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;;;;;;AAGA;AAAA;AACA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AAAA;;;;;;;;;;;;;;;;;;;;;;AAMA;AAzBA;AA2BA;AAEA;;;;;;;;;;;;;;;;ACnDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAtBA;;;;;;;;;;;;;;;;;;;;ACGA;AAEA;AAWA;AAAA;AASA;AACA;AAEA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AAEA;AACA;AACA;AACA;AAAA;AAAA;AACA;AAEA;;;;;;;;;;;AAIA;AA5BA;AA8BA;AAEA;;;;;;;;;;;;;;;;;;;AC9CA;AAkBA;AAAA;AAOA;AAAA;AAAA;AAIA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;;;;;;AAGA;AAzBA;AA2BA;AAEA;;;;;;;;;;;;;;;;;;;;;;;AC/CA;AAEA;AAEA;AACA;AACA;AAYA;AAAA;AAMA;AACA;;;;;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AAEA;AACA;AACA;AAEA;;;;;;AATA;;;;;AAaA;AAEA;AACA;AAGA;AACA;AAEA;AAJA;;;;;AAOA;;;;;;AAGA;AA1CA;AA4CA;AAEA;;;;;;;;;;;;;;;;AChEA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAdA;;;;;;;;;;;;;;;;;;;;ACAA;AAEA;AAOA;AAAA;AAWA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;;;;;;AAGA;AAzBA;AA2BA;AAEA;;;;;;;;;;;;;;;;ACtCA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAPA;;;;;;;;;;;;;;;;;;;;;;;ACAA;AACA;AAEA;AACA;AACA;AAYA;AACA;AAEA;AAEA;AAAA;AAAA;AAAA;AACA;AAEA;AACA;AACA;AADA;;;;;;;;;;AAMA;AAfA;AAiBA;AAEA;;;;;;;;;;;;;;;;;;;ACpCA;AAcA;AAAA;AAWA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;AAIA;AACA;AAEA;AACA;AACA;AACA;;;;;;AAGA;AAEA;AACA;AAnCA;AAqCA;AAEA;;;;;;;;;;;;;;;;;;;;;ACvDA;AAEA;AAmBA;AAAA;AAWA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;AAEA;AAtBA;AAwBA;;;;;;;;;;;;;;;;;;;AC3CA;AAUA;AAAA;AAKA;AAEA;AACA;AACA;;;;;;AAGA;AAZA;AAcA;AAEA;;;;;;;;;;;;;;;;;;;;;;;;AC1BA;AAGA;AACA;AAIA;AACA;AACA;AAcA;AAAA;AAWA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;;;;;;;;;AAGA;AAEA;AACA;;;;;;AAGA;AACA;;;;;;;;;;;AAIA;AAtDA;AAwDA;AAEA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACpFA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAQA;AAEA;AAEA;AACA;AACA;AACA;AACA;AAIA;AAYA;AAAA;AACA;AAAA;AAAA;AAIA;AAAA;AAAA;;;AAGA;AACA;AAEA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AAEA;AAEA;AADA;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AAEA;AADA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AAIA;AACA;AAEA;AACA;AACA;AAAA;AAAA;AACA;AAEA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAIA;AACA;AACA;AAEA;AACA;AAIA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAIA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AAEA;AAGA;AACA;AAGA;AALA;;;;;AAQA;;;;;;AAGA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAGA;AACA;AACA;AACA;AACA;AAEA;AAPA;;;;;AAUA;;;;;;AAGA;AAEA;AAAA;AACA;AACA;AACA;AAGA;AACA;AAEA;AAEA;AAEA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AAMA;AAGA;AACA;AAAA;;AACA;AACA;AACA;;AAOA;;AAEA;AACA;AACA;AAEA;AAAA;;;;;;;;;;;AAEA;AAEA;AACA;AAEA;AAAA;;;;;;;;;;;;;AAMA;AACA;AACA;AACA;AAEA;;;;;;AAGA;;AAEA;AAEA;AACA;AAEA;AAAA;;;;;;;;;;;AAGA;AACA;AACA;AAEA;AAAA;;;;;;;;;;;;;;;;;;;AAMA;AACA;;AACA;AACA;AACA;AADA;;;;;AAIA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAbA;;;;;AAgBA;;;;;;;AAIA;AACA;;;;;;;AAGA;AAEA;AAEA;AACA;AACA;AACA;AACA;;AAEA;AAAA;;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;AAEA;AAAA;;;;;;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;AAEA;AACA;AACA;AACA;;;;;;;;;;;;AAIA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAEA;AAAA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AAAA;AACA;AAEA;AADA;AAGA;AAGA;AACA;AACA;AAEA;AAAA;AACA;;;;;;AANA;;;;;AAUA;;;;;;;;;;;AAKA;AAAA;;AACA;AAAA;;;;;;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AASA;AA3eA;AAAA;AA6eA;;;;;;;;;;;;;;;;ACrhBA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAlMA;;;;;;;;;;;;;;;;;;;;;ACAA;AAUA;AAEA;AAYA;AAAA;AAeA;AAIA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AACA;AACA;AAEA;AACA;AAEA;;;;;;;;;;;;;;;;AAKA;AAAA;;;;;;AACA;AAAA;;;;;;;;;;;;AAGA;AAnDA;AAqDA;AAEA;;;;;;;;;;;;;;;;ACjFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AATA;;;;;;;;;;;;;;;;;;;ACEA;AAaA;AAAA;AAQA;AAEA;AACA;AACA;AACA;AACA;AAEA;;;;;;AAGA;AAnBA;AAqBA;AAEA;;;;;;;;;;;;;;;;;;;;;;ACtCA;AAEA;AAYA;AAMA;AACA;AAAA;AAAA;AAAA;AACA;AAEA;AACA;AACA;AAMA;AACA;AAYA;AAXA;AACA;AACA;AAEA;AACA;AACA;;AACA;AAAA;AAAA;AAAA;;;;;;AAGA;AAAA;AAAA;AACA;;;;;;AAEA;AAAA;AAAA;AAAA;;;;;;;;;;;;;;;;;AAMA;AAEA;AACA;AAzCA;AACA;AAaA;AAAA;AAAA;AAAA;AACA;AAbA;AAAA;AAAA;AAAA;AACA;AAuCA;AAEA;;;;;;;;;;;;;;;;;ACzDA;AAaA;AAAA;AAaA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;;;;;;AAGA;AA5BA;AA8BA;AAEA;;;;;;;;;;;;;;;;;;;AC7CA;AAaA;AAAA;AAQA;AAEA;AACA;AACA;AACA;AACA;AAEA;;;;;;AAGA;AAnBA;AAqBA;AAEA;;;;;;;;;;;;;;;;;;;;ACpCA;AAOA;AAoBA;AAAA;AAYA;AAKA;AAEA;AACA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AAGA;AACA;;;;;;;;;;;AAIA;AAlCA;AAoCA;;;;;;;;;;;;;;;;;;;;AC/DA;AAOA;AAkBA;AAAA;AAUA;AAKA;AAEA;AACA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AAGA;AACA;;;;;;;;;;;AAIA;AA9BA;AAgCA;;;;;;;;;;;;;;;;ACzDA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAzBA;;;;;;;;;;;;;;;;;;;;;ACFA;AAEA;AAaA;AAAA;;AASA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;;;;;;AAGA;AAhCA;AAAA;AAkCA;;;;;;;;;;;;;;;;;;;;;ACjDA;AAEA;AAQA;AAgBA;AAAA;AAQA;AAEA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAEA;AAGA;AACA;AACA;AACA;AACA;;AAEA;AAAA;AAAA;;;;;;AACA;;AARA;;;;;;;;;;AAaA;AAhCA;AAkCA;;;;;;;;;;;;;;;;AC1DA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AATA;;;;;;;;;;;;;;;;;;;ACAA;AAeA;AAAA;AAKA;AAAA;AACA;AAAA;AAAA;AAAA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;;;;;;AAGA;AA1BA;AA4BA;AAEA;;;;;;;;;;;;;;;;;;;AC7CA;AAmBA;AAAA;AAOA;AACA;AACA;AAEA;AACA;AACA;AAGA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;;;;;;AAGA;AA7BA;AA+BA;AAEA;;;;;;;;;;;;;;;;;;;ACpDA;AAiBA;AAAA;AASA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AAGA;AACA;AAEA;AACA;AACA;;;;;;AAGA;AACA;AAVA;;;;;;;;;;AAeA;AAnCA;AAqCA;AAEA;;;;;;;;;;;;;;;;;;;;;;;;;;;ACzDA;AAEA;AAEA;AACA;AACA;AACA;AACA;AAYA;AAAA;;AAOA;AAEA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AAEA;AACA;AACA;AACA;AAAA;AAAA;AACA;AAEA;AACA;;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;;;;;;;;;;AACA;AAAA;AACA;AAAA;AAAA;;;;;;;;;;;;;;;AAEA;AACA;;;;;;;;;;;AAGA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;;;;;;;;;;;;;;;;;;;;;AAKA;AAlDA;AAAA;AAoDA;AAEA;;;;;;;;;;;;;;;;;;;;;;AC3EA;AAEA;AAUA;AAEA;AAkBA;AAAA;AASA;AACA;AAAA;;AAEA;AACA;;;;;AAAA;AAEA;AAEA;AACA;AAAA;;;;;;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAAA;;AACA;AAAA;;;;;;AACA;AAAA;;;;;;;AAFA;;;;;;;;;;AAOA;AAnCA;AAqCA;AAEA;;;;;;;;;;;;;;;;;;;;;ACvEA;AAEA;AAUA;AAoBA;AAAA;AAUA;AAEA;AADA;AAAA;;;;;;AACA;AACA;AAEA;AAEA;AAAA;;;;;;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAGA;AACA;AAEA;AAAA;;;;;;AAJA;;;;;;;;;;AASA;AAtCA;AAwCA;AAEA;;;;;;;;;;;;;;;;AC1EA;AACA;AACA;AACA;AACA;AACA;AALA;;;;;;;;;;;;;;;;;;;ACEA;AAkBA;AAAA;AAiBA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;AAGA;AApCA;AAsCA;;;;;;;;;;;;;;;;;;;ACxDA;AAgBA;AAAA;AAKA;AAAA;AAAA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAGA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AAEA;;;;;;AAPA;;;;AAUA;AACA;AA/BA;AAiCA;AAEA;;;;;;;;;;;;;;;;;;;ACnDA;AA2BA;AAAA;AAYA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;AAGA;;;;;;AAGA;AA9BA;AAgCA;;;;;;;;;;;;;;;;;;;;;;;;;;AC7DA;AAEA;AACA;AAEA;AACA;AACA;AACA;AAIA;AACA;AAAA;AACA;AACA;AAAA;AACA;AAAA;AAAA;;;;;;;;;;;AAGA;AAEA;AAAA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;;AACA;AAAA;;;;;;AACA;AACA;AACA;AACA;;;;;;AAEA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;;;;;;;;;;;;;;;;;;;;;;AAIA;AAEA;AAAA;AACA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;;;;;;;;;;;AAGA;AAEA;AAAA;AACA;AAEA;AACA;AACA;AACA;;;;;;AAGA;AAEA;AAAA;AACA;AACA;AAAA;AACA;;;;;;AAGA;AAEA;AAAA;AACA;AACA;AAAA;AACA;;;;;;AAGA;AACA;;;;;;;;;;;;;;;;;;;;;;;AC3EA;AAEA;AAEA;AACA;AACA;AACA;AACA;AAIA;AAEA;AAEA;AACA;;;;;AACA;;;;;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAEA;;;;;;AANA;;;;;AAUA;AACA;AACA;AACA;;;;;;AAGA;AAhCA;AAkCA;;;;;;;;;;;;;;;;;;;;;;;;AC9CA;AAEA;AAEA;AACA;AAIA;;AAEA;AAEA;AACA;AACA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAEA;;AAEA;AAEA;AAAA;;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;;;;;;;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAGA;AACA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;;;;;;;;;;;;AApBA;;;;;AAyBA;;;;;;;AAGA;AA5CA;AAAA;AA8CA;;;;;;;;;;;;;;;;;;;;;;;;;;ACtDA;AAEA;AACA;AAEA;AAEA;AACA;AACA;AAKA;;AAEA;AAEA;AAEA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAEA;AACA;AAEA;AACA;;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;;;;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;;;;;;;;;;AAGA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AAEA;AACA;AACA;AACA;AACA;;AAEA;AAAA;AAAA;AACA;;;;;;AAEA;AACA;AACA;AACA;AAEA;;;;;;;;;;;;;;;;;AAKA;AAjFA;;AAMA;;;AANA;AAmFA;;;;;;;;;;;;;;;;;;;;;;;;ACjGA;AAEA;AAEA;AACA;AACA;AACA;AAIA;AAAA;AAIA;AAAA;AAAA;AAIA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AAEA;AACA;AACA;AACA;;;;;AACA;AACA;;;;;AACA;AACA;;;;;AACA;AACA;AAEA;AACA;;AACA;AAAA;AAAA;AAAA;;;;;;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;;;;;;;;;;;;AAKA;AA5CA;AA8CA;;;;;;;;;;;;;;;;;;;;;;;ACzDA;AAEA;AAEA;AAIA;AACA;AAMA;AAYA;AAXA;AACA;AAEA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;;;;;;AAGA;AAEA;AACA;AAEA;AACA;AACA;AACA;AAAA;AAAA;AAAA;;;;;;AAGA;AAEA;AACA;AAEA;AACA;AACA;AAAA;AAAA;AAAA;;;;;;AAGA;AAEA;AACA;AAEA;AAEA;AACA;AAGA;AACA;AAEA;AAJA;;;;;;;;;;;;;;;AAUA;;AAEA;AAEA;;;;;;;;;;;;;;;;;;;;;;ACvEA;AAEA;AAKA;AAUA;AAAA;AAKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;;;;;;AAGA;AAvBA;AAyBA;AAEA;;;;;;;;;;;;;;;;;;;;;;AC5CA;AAEA;AACA;AAcA;AAAA;AAMA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AADA;;;;;;;;;;AAMA;;AAEA;;;;;;;;;;;;;;;;;;;;;;;;;ACzCA;AAEA;AAEA;AACA;AACA;AACA;AASA;AAAA;AAOA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;AAGA;AAEA;AACA;AAEA;AAEA;AACA;AACA;AACA;AAEA;;;;;;;;;AAEA;;;;;;AAGA;AACA;;;;;;AAGA;AA1CA;AA4CA;AAEA;;;;;;;;;;;;;;;;;;;;;;;;;;AC9DA;AAEA;AACA;AAEA;AAEA;AAIA;AAAA;;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;;;;;;AAGA;AA7BA;;AACA;;;AADA;AA+BA;AACA;AAAA;AAAA;AAAA;AAEA;AAEA;AACA;AAGA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AAAA;;;;;;AAPA;;;;;AAUA;;;;;;;;;;;AAIA;AA5BA;AA8BA;;;;;;;;;;;;;;;;;;;;;;;;;;ACxEA;AAGA;AAIA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAEA;;AAEA;AAEA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAEA;AAEA;AACA;AACA;;AAEA;AAAA;;AACA;AAAA;AAAA;AAAA;;;;;;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AADA;;;;;;;;;;AAKA;AAAA;AAAA;AAAA;;;;;;;;;;;;AAEA;AAAA;;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;;;;;;;;;;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;;;;;;;;;;AAEA;AAAA;AAAA;;AACA;AAAA;AAAA;;;;;;;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;;;;;;;;;;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;;;;;;;;;;;;;;;;;;;;;;AAKA;AA1DA;AAAA;AA4DA;;;;;;;;;;;;;;;;AC5EA;AAAA;AAKA;AALA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AA1NA;;;;;;;;;;;;;;;;;;;;;;;;;;;ACFA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AAGA;;AAEA;AAIA;AAAA;AAAA;AAKA;AACA;AACA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;;AAEA;AACA;AACA;;AAEA;AAAA;AAAA;AACA;AAAA;;AACA;AAAA;;;;;;AACA;AAEA;AACA;AACA;;;;;;AAGA;AAAA;;;;;;;;;;;;;;;;;AAKA;AAAA;;;;;;;;;;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;;;;;;;;;;;;;AAOA;AAxEA;AAAA;AA0EA;;;;;;;;;;;;;;;;ACpFA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAvCA;;;;;;;;;;;;;;;;;;;;;ACAA;AACA;AAEA;AASA;AAAA;AAOA;AAAA;AAAA;AAAA;AAAA;;;;;;AACA;AARA;AAUA;AAEA;;;;;;;;;;;;;;;;ACxBA;AAAA;AACA;AACA;AACA;AACA;AACA;AALA;;;;;;;;;;;;;;;;;;;;;ACAA;AAEA;AAEA;AAqBA;AAAA;AAWA;AACA;AACA;AAEA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAGA;AACA;AAAA;AAAA;;AACA;AAAA;;;;;;AACA;AAAA;AAAA;AAAA;AAAA;;;;;;;;;;;AACA;AAAA;AAAA;;;;;;;;;;;;AAGA;AACA;AACA;AAVA;;;;;AAaA;;;;;;AAGA;AAjDA;AAmDA;AAEA;;;;;;;;;;;;;;;;;;;;AChFA;AACA;AACA;AAEA;AAKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;ACvBA;AAEA;AACA;AAEA;AAEA;AAUA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;;;;;;;;;;;AAGA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;;;;;;;;;;;AAGA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;;;;;;;;;;;AAGA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;;;;;;;;;;;AAGA;AACA;AAOA;AAAA;;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AAAA;AAAA;AAEA;AACA;AAAA;;AACA;AACA;AACA;AACA;AACA;;AAEA;AAAA;AAAA;;;;;;AACA;AAAA;AAAA;;;;;;;;;;;;AAEA;AACA;AACA;AAGA;AACA;AACA;AACA;;AAEA;AAAA;AAAA;;;;;;AACA;AAAA;AAAA;;;;;;;AAPA;;;;;;;;;;;;;;;;AAcA;;AAxDA;;;;AAAA;;AAwDA;;AAEA;;;;;;;;;;;;;;;;;;;;;;;;;;ACxHA;AAEA;AACA;AACA;AACA;AAEA;AAOA;AAAA;;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAEA;AAEA;AACA;AACA;AACA;AAEA;;;;;;AAGA;;AA5BA;;;;AAAA;;AA4BA;;AAEA;;;;;;;;;;;;;;;;;;;;;;;;;;AC7CA;AAEA;AACA;AACA;AAEA;AAEA;AAOA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAOA;AAAA;;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AAAA;AAAA;AAEA;AAEA;AACA;AAAA;;AACA;AACA;AACA;AACA;AACA;;AAEA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;;AACA;AACA;AACA;AACA;AACA;;;;;;AAEA;AAAA;AAAA;AAAA;AAAA;;;;;;;;;;;;;;;;;AAGA;AAAA;AAAA;;;;;;;;;;;;AAEA;AACA;AACA;AAAA;AACA;AAGA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AAEA;AACA;AAAA;;;;;;AATA;;;;;;;;;;;;;;;;;;;;;AAkBA;;AA5EA;;;;AAAA;;AA4EA;;AAEA;;;;;;;;;;;;;;;;;;;;;;;;ACjJA;AAEA;AACA;AAEA;AASA;AAAA;;AACA;AAEA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AAEA;AACA;AACA;AACA;AAEA;;;;;;AAGA;;AAhBA;;;;AAAA;;AAgBA;;AAEA;;;;;;;;;;;;;;;;;;;;;;;;;ACjCA;AAGA;AACA;AACA;AAEA;AASA;AAAA;;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AAEA;AACA;AACA;AACA;AAEA;;;;;;AAGA;;AA9CA;;;;AAAA;;AA8CA;;AAEA;;;;;;;;;;;;;;;;;;;;;;;;;;;ACjEA;AAGA;AACA;AACA;AACA;AAEA;AAEA;AAWA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAOA;AAAA;;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AAAA;AAAA;AAEA;AACA;AAAA;;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;;;;;;AAEA;AAAA;AAAA;;;;;;;;;;;;AAEA;AACA;AACA;AAGA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;;;;;;AAbA;;;;;;;;;;;;;;;;AAqBA;;AAhFA;;;;AAAA;;AAgFA;;AAEA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACtHA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;;AACA;AAEA;AACA;;AACA;AAAA;AAAA;AAAA;;;;;;AAGA;AAAA;AAAA;AAAA;;;;;;AAGA;AAAA;AAAA;AAAA;;;;;;AAGA;AAAA;AAAA;AAAA;;;;;;AAGA;AAAA;AAAA;AAAA;;;;;;AAGA;AAAA;AAAA;AAAA;;;;;;AAGA;AAAA;AAAA;AAAA;;;;;;AAGA;AAAA;AAAA;AAAA;;;;;;AAGA;AAAA;AAAA;;;;;;AAGA;AAAA;;;;;;AACA;AAAA;;;;;;AACA;AAAA;;;;;;AACA;;;;;;;;;;;AAGA;AAtCA;;AACA;;;AADA;AAwCA;;;;;;;;;;;;;;;;;;;;;;;ACpDA;AAGA;AACA;AAEA;AAMA;AAAA;;AACA;AAEA;AACA;AACA;AAAA;AAAA;AAEA;AAEA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;AAEA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;AAKA;;AAhCA;;;;AAAA;;AAgCA;;AAEA;;;;;;;;;;;;;;;;;;;;;;;;AChDA;AAEA;AACA;AACA;AACA;AACA;AACA;AAoBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AAGA;AACA;AACA;AAIA;AAGA;AACA;AACA;AAIA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAEA;AACA;;;;;;;;;;;;;;ACpIA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAxPA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AACA;AACA;AACA;AAeA;AAAA;AAKA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAAA;AACA;AAAA;;AACA;;;;;AACA;AACA;AAAA;;;;;;AACA;AAAA;AAAA;;;;;;AACA;;;;;;AAEA;;;;;AACA;;;;;AACA;AAAA;;;;;;;;;;;;;;;;;;;;;;AAKA;AA7BA;AA+BA;AAEA;;;;;;;;;;;;;;;;AC7BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;AC3DA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAPA;;;;;;;;;;;;;;;;;;;;;ACAA;AAEA;AAGA;AAcA;AAAA;AAeA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;AAGA;;AAEA;AAEA;;;;;;;;;;;;;;;;;;;;;ACrDA;AACA;AAQA;AAAA;AAKA;AACA;;AACA;;;;;AACA;;;;;;;AAGA;AAXA;AAaA;;;;;;;;;;;;;;;;;;;;ACrBA;AACA;AAeA;AAAA;AAWA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;AAIA;AA1BA;AA4BA;AAEA;;;;;;;;;;;;;;;;ACjDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAPA;;;;;;;;;;;;;;;;;;;;;ACEA;AAUA;AAEA;AA0BA;AAAA;AAMA;AACA;AAAA;AACA;AACA;AACA;AAEA;;AAEA;AAEA;;;;;;AAIA;;AACA;AACA;AACA;AAEA;;;;;;AAEA;;;;;;;;;;;AAKA;;AACA;AACA;AACA;;;;;;AAGA;;;;;;;;AAzBA;;;;;AA6BA;;;;;;AAGA;AA7CA;AA+CA;;;;;;;;;;;;;;;;;;;ACrFA;AAyBA;AAAA;AAQA;AAEA;AACA;AACA;AACA;AACA;AAEA;;;;;;AAGA;AAnBA;AAqBA;AAEA;;;;;;;;;;;;;;;;;;;AChDA;AAQA;AAAA;AAMA;AAEA;AACA;AACA;AAEA;;;;;;AAGA;AAfA;AAiBA;AAEA;;;;;;;;;;;;;;;;;;;;;;;;;;AC5BA;AAEA;AAEA;AACA;AAEA;AACA;AACA;AAUA;AAAA;;AAOA;AAEA;AACA;AACA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AACA;AACA;AAGA;AACA;AAEA;AACA;AAAA;AAAA;;;;;;AAGA;AACA;AACA;;;;;;AAVA;;;;;;;;;;;;;;;;;;;;AAmBA;;AAEA;AAEA;;;;;;;;;;;;;;;;;;;;;;;;;;;ACzEA;AAEA;AAEA;AACA;AAEA;AACA;AACA;AAiBA;AAAA;;AAOA;AACA;AACA;AAAA;AAAA;AAEA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AAEA;AAEA;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;;AACA;AAAA;AAAA;AAAA;;;;;;AACA;;AACA;AAEA;AACA;AAEA;AACA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AACA;;;;;;AAGA;AAZA;;;;;AAcA;AAGA;AACA;AAEA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;AAGA;AAhBA;;;;;;;;;;;;;;;;;;;;;;AAuBA;;AAEA;AAEA;;;;;;;;;;;;;;;;;;ACpGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAQA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;AC9BA;AACA;AACA;AAOA;AAAA;AAIA;AAEA;AACA;AACA;AACA;;;;;AACA;AACA;AAEA;;;;;;AAGA;AAhBA;;;;;;;;;;;;;;;;;;;;;;;;ACZA;AAIA;AACA;AACA;AACA;AAcA;AAAA;;AAIA;AAEA;AACA;AACA;AAEA;;AAEA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;;;;;;;;;;;;;;;AAGA;AACA;AACA;AACA;AACA;;;;;;;;AAIA;AAzBA;AAAA;;;;;;;;;;;;;;;;;;;;AClBA;AACA;AASA;AAAA;AAIA;AAEA;AACA;AACA;AAAA;AAAA;AACA;;;;;;AAGA;AAZA;;;;;;;;;;;;;;;;;;;;;;;;ACbA;AAIA;AACA;AACA;AACA;AAOA;AAAA;;AAIA;AAEA;AACA;AACA;AAEA;;AAEA;AAAA;AAAA;AACA;AAAA;AACA;;;;;;;;;;;;;;;AAGA;AACA;AACA;AACA;AACA;;;;;;;;AAIA;AAzBA;AAAA;;;;;;;;;;;;;;;;;;;;;;ACXA;AACA;AACA;AACA;AAMA;AAAA;AAGA;AACA;AAAA;AACA;AAAA;AAAA;AACA;;;;;;;;;;;;;;;AAIA;AAVA;;;;;;;;;;;;;;;;;;;;;;;;ACbA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;AChBA;AAIA;AACA;AACA;AACA;AAOA;AAAA;AAIA;AACA;AAAA;;AACA;AACA;AAAA;AACA;AACA;AACA;AAEA;;;;;;;;;;;;;;;AAKA;AAAA;AAAA;AACA;AACA;AACA;AAEA;;;;;;;;;;;;;;;;;;;;;AAKA;AA3BA;;;;;;;;;;;;;;;;;;;;ACZA;AACA;AAQA;AAAA;AAKA;AAEA;AACA;AACA;AACA;;;;;;AAGA;AAbA;;;;;;;;;;;;;;;;;;;;;;;;;ACZA;AAEA;AAIA;AACA;AACA;AAOA;AAAA;;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AAAA;AAAA;AAEA;AAEA;AACA;AACA;AACA;AACA;;AAEA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;;;;;;;;;;;;;;;AAGA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;;;;;;;;;;;;;;;;;;;;;AAKA;AA3BA;AAAA;;;;;;;;;;;;;;;;ACdA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AArBA;;;;;;;;;;;;;;;;ACAA;AAAA;AAIA;AAJA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAvEA;;;;;;;;;;;;;;;;;;;;;;ACDA;AAEA;AAGA;AACA;AA+BA;AACA;AAOA;AACA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AACA;AAEA;AAEA;AACA;AACA;AACA;AADA;;;;;AAIA;;;;;;AAGA;;AAEA;AAEA;;;;;;;;;;;;;;;;;;ACrEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;;;;;;;;;;;;;ACfA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;;;;;;;;;;;;;;;ACRA;AAEA;;;;AAIA;AACA;AACA;AAEA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAEA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACfA;AACA;AAYA;AACA;AAEA;AACA;AAsBA;AACA;;;;;;;;;;;;;;;;;ACzCA;AACA;AAEA;AAEA;;;;;;AAMA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;ACzBA;;;;AAIA;AAEA;AACA;AACA;AAEA;AACA;AACA;;;;;;;;;;;;;;;;;;;;ACZA;;AAEA;AAEA;AACA;AAEA;;;;AAIA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;;;;AAIA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;;;;AAIA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;;;;AAIA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;;;;AAIA;AAEA;AACA;AAOA;AAEA;;;;;AAKA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;ACvHA;;;;AAIA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;;;;;AAKA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;;;;AAIA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;ACzCA;;;;AAIA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;;;;;AAKA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;;;;AAIA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACzCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;AClCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;ACjDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;AC5SA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACPA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;ACvXA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;AC9SA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;AC7LA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;AC9HA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;ACtGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;AChJA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;AC5KA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;AChEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;AC7GA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;AC1OA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;ACzJA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;AC3FA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC5IA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;ACrBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;ACnHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;AC/LA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;ACzYA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;AC/MA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;AC1cA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;ACvHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;AC5WA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;ACnMA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;AC3WA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;AC3rBA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;ACLA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;ACpBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;ACbA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;ACzDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;ACXA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;AC9CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;AC3IA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;AC/xHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;AC3HA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC1NA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;ACnUA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACvYA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;ACPA;AACA;AACA;AACA;AACA;AACA;AACA;;;;ACNA;AACA;AACA;AACA;AACA;AACA;AACA;;;;ACNA;;;;ACAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;ACzWA;AACA;AACA;AACA;AACA;AACA;AACA;;;;ACNA;;;;ACAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA"}