diff --git a/modules/.DS_Store b/modules/.DS_Store new file mode 100644 index 00000000..c94dbd96 Binary files /dev/null and b/modules/.DS_Store differ diff --git a/modules/appagebuilder/classes/.DS_Store b/modules/appagebuilder/classes/.DS_Store new file mode 100644 index 00000000..aee76bab Binary files /dev/null and b/modules/appagebuilder/classes/.DS_Store differ diff --git a/modules/customdevslider/classes/CustomDevSliderSlide.php b/modules/customdevslider/classes/CustomDevSliderSlide.php new file mode 100644 index 00000000..191d6d19 --- /dev/null +++ b/modules/customdevslider/classes/CustomDevSliderSlide.php @@ -0,0 +1,37 @@ + 'customdevslider_slide', + 'primary' => 'id_customdevslider_slide', + 'multilang' => true, + 'fields' => [ + 'image' => ['type' => self::TYPE_STRING, 'validate' => 'isFileName', 'size' => 255], + 'link' => ['type' => self::TYPE_STRING, 'validate' => 'isUrlOrEmpty', 'size' => 255], + 'position' => ['type' => self::TYPE_INT, 'validate' => 'isUnsignedInt'], + 'active' => ['type' => self::TYPE_BOOL, 'validate' => 'isBool'], + + 'title' => ['type' => self::TYPE_STRING, 'lang' => true, 'validate' => 'isCleanHtml', 'size' => 255], + 'text' => ['type' => self::TYPE_HTML, 'lang' => true, 'validate' => 'isCleanHtml'], + ], + ]; + + public static function isUrlOrEmpty($url) + { + if ($url === null || $url === '') { + return true; + } + return Validate::isUrl($url); + } +} diff --git a/modules/customdevslider/controllers/admin/AdminCustomDevSliderController.php b/modules/customdevslider/controllers/admin/AdminCustomDevSliderController.php new file mode 100644 index 00000000..3b52b74c --- /dev/null +++ b/modules/customdevslider/controllers/admin/AdminCustomDevSliderController.php @@ -0,0 +1,152 @@ +bootstrap = true; + + $this->table = 'customdevslider_slide'; + $this->className = 'CustomDevSliderSlide'; + $this->identifier = 'id_customdevslider_slide'; + $this->lang = true; + + parent::__construct(); + + $this->_defaultOrderBy = 'position'; + $this->_defaultOrderWay = 'ASC'; + + $this->fields_list = [ + 'id_customdevslider_slide' => ['title' => 'ID', 'class' => 'fixed-width-xs'], + 'title' => ['title' => $this->l('Title')], + 'link' => ['title' => $this->l('Link')], + 'position' => ['title' => $this->l('Position'), 'class' => 'fixed-width-sm'], + 'active' => ['title' => $this->l('Active'), 'type' => 'bool', 'active' => 'status', 'class' => 'fixed-width-sm'], + ]; + + $this->addRowAction('edit'); + $this->addRowAction('delete'); + + // Кнопка "Додати" + $this->bulk_actions = []; + } + + public function renderForm() + { + /** @var CustomDevSliderSlide $obj */ + $obj = $this->object; + + $imagePreview = ''; + if ($obj && !empty($obj->image)) { + $imageUrl = __PS_BASE_URI__.'modules/customdevslider/uploads/'.$obj->image; + $imagePreview = '
'; + } + + $this->fields_form = [ + 'legend' => ['title' => $this->l('Slide')], + 'input' => [ + [ + 'type' => 'file', + 'label' => $this->l('Image'), + 'name' => 'image_file', + 'desc' => $this->l('Allowed: jpg, jpeg, png, webp, gif.').$imagePreview, + ], + [ + 'type' => 'text', + 'label' => $this->l('Link'), + 'name' => 'link', + 'desc' => $this->l('Optional URL (https://...)'), + ], + [ + 'type' => 'text', + 'label' => $this->l('Title'), + 'name' => 'title', + 'lang' => true, + ], + [ + 'type' => 'textarea', + 'label' => $this->l('Text'), + 'name' => 'text', + 'lang' => true, + 'autoload_rte' => true, + ], + [ + 'type' => 'text', + 'label' => $this->l('Position'), + 'name' => 'position', + 'class' => 'fixed-width-sm', + 'desc' => $this->l('Sorting order (0..n). Lower goes first.'), + ], + [ + 'type' => 'switch', + 'label' => $this->l('Active'), + 'name' => 'active', + 'is_bool' => true, + 'values' => [ + ['id' => 'active_on', 'value' => 1, 'label' => $this->l('Enabled')], + ['id' => 'active_off', 'value' => 0, 'label' => $this->l('Disabled')], + ], + ], + ], + 'submit' => ['title' => $this->l('Save')], + ]; + + return parent::renderForm(); + } + + public function processAdd() + { + $this->handleImageUpload(); + return parent::processAdd(); + } + + public function processUpdate() + { + $this->handleImageUpload(); + return parent::processUpdate(); + } + + private function handleImageUpload() + { + if (!isset($_FILES['image_file']) || empty($_FILES['image_file']['name'])) { + return; + } + + $file = $_FILES['image_file']; + + if (!empty($file['error'])) { + $this->errors[] = $this->l('Image upload error.'); + return; + } + + $ext = Tools::strtolower(pathinfo($file['name'], PATHINFO_EXTENSION)); + $allowed = ['jpg', 'jpeg', 'png', 'webp', 'gif']; + + if (!in_array($ext, $allowed, true)) { + $this->errors[] = $this->l('Invalid image format.'); + return; + } + + $uploadDir = _PS_MODULE_DIR_.'customdevslider/uploads/'; + if (!is_dir($uploadDir)) { + if (!@mkdir($uploadDir, 0755, true)) { + $this->errors[] = $this->l('Cannot create uploads directory.'); + return; + } + } + + // Нормальне безпечне ім'я + $safeName = sha1(uniqid('customdevslider_', true)).'.'.$ext; + $dest = $uploadDir.$safeName; + + if (!move_uploaded_file($file['tmp_name'], $dest)) { + $this->errors[] = $this->l('Image upload failed.'); + return; + } + + // Записуємо ім'я файлу в поле image + $_POST['image'] = $safeName; + } +} diff --git a/modules/customdevslider/css/front.css b/modules/customdevslider/css/front.css new file mode 100644 index 00000000..65e76fdf --- /dev/null +++ b/modules/customdevslider/css/front.css @@ -0,0 +1 @@ +.hp-c-slider{padding:0 !important}.hp-c-slider>.ApColumn{padding:0 !important}div[id^=customdevslider-] .customdevslider-swiper__container{position:relative}div[id^=customdevslider-] .customdevslider-swiper__container .swiper-wrapper{position:absolute;inset:0}div[id^=customdevslider-] .customdevslider-swiper__container .swiper-wrapper .swiper-slide .customdevslider-swiper__image{height:100%;-o-object-fit:cover;object-fit:cover;-o-object-position:left center;object-position:left center}div[id^=customdevslider-] .customdevslider-swiper__container .customdevslider-swiper__content{position:relative;margin:50px 0 50px auto;row-gap:40px;min-height:548px;width:50%;height:100%;background:rgba(120,120,120,.65);padding:24px;color:#f2f2f2;z-index:1;display:flex;flex-direction:column}@media(max-width: 1300px){div[id^=customdevslider-] .customdevslider-swiper__container .customdevslider-swiper__content{width:60%}}@media(max-width: 900px){div[id^=customdevslider-] .customdevslider-swiper__container .customdevslider-swiper__content{width:100%;margin:0;padding:50px;background-color:rgba(34,34,34,.85);-webkit-backdrop-filter:blur(3px);backdrop-filter:blur(3px)}}div[id^=customdevslider-] .customdevslider-swiper__container .customdevslider-swiper__content .customdevslider-swiper__text{flex:1 1 auto;overflow:hidden;font-size:20px;line-height:1.3}div[id^=customdevslider-] .customdevslider-swiper__container .customdevslider-swiper__content .customdevslider-swiper__pagination{display:flex;flex-direction:row;gap:20px;justify-content:space-between;flex:0 0 auto;margin-top:auto;position:static !important;text-align:center}@media(max-width: 700px){div[id^=customdevslider-] .customdevslider-swiper__container .customdevslider-swiper__content .customdevslider-swiper__pagination{display:flex;flex-direction:row;flex-wrap:wrap}}div[id^=customdevslider-] .customdevslider-swiper__container .customdevslider-swiper__content .customdevslider-swiper__pagination .swiper-pagination-bullet{width:auto;height:auto;border-radius:0;background:rgba(0,0,0,0);opacity:1;margin:0 !important;padding:0;color:#fff;font-size:26px;letter-spacing:1px;text-transform:uppercase;font-weight:500;display:inline-block;cursor:pointer;min-width:-moz-max-content;min-width:max-content}@media(max-width: 700px){div[id^=customdevslider-] .customdevslider-swiper__container .customdevslider-swiper__content .customdevslider-swiper__pagination .swiper-pagination-bullet{flex:40%}}@media(max-width: 460px){div[id^=customdevslider-] .customdevslider-swiper__container .customdevslider-swiper__content .customdevslider-swiper__pagination .swiper-pagination-bullet{font-size:18px}}div[id^=customdevslider-] .customdevslider-swiper__container .customdevslider-swiper__content .customdevslider-swiper__pagination .swiper-pagination-bullet.swiper-pagination-bullet-active{color:#e60000}/*# sourceMappingURL=front.css.map */ \ No newline at end of file diff --git a/modules/customdevslider/css/front.css.map b/modules/customdevslider/css/front.css.map new file mode 100644 index 00000000..068320d3 --- /dev/null +++ b/modules/customdevslider/css/front.css.map @@ -0,0 +1 @@ +{"version":3,"sources":["front.scss"],"names":[],"mappings":"AAAA,aACC,oBAAA,CAEA,uBACC,oBAAA,CAID,6DACC,iBAAA,CAEA,6EACC,iBAAA,CACA,OAAA,CAGC,0HACC,WAAA,CACA,mBAAA,CAAA,gBAAA,CACA,8BAAA,CAAA,2BAAA,CAIH,8FACC,iBAAA,CACA,uBAAA,CACA,YAAA,CACA,gBAAA,CAKA,SAAA,CAEA,WAAA,CACA,gCAAA,CACA,YAAA,CACA,aAAA,CACA,SAAA,CAEA,YAAA,CACA,qBAAA,CAEA,0BApBD,8FAqBE,SAAA,CAAA,CAGD,yBAxBD,8FAyBE,UAAA,CACA,QAAA,CACA,YAAA,CACA,mCAAA,CACA,iCAAA,CAAA,yBAAA,CAAA,CAGD,4HACC,aAAA,CACA,eAAA,CACA,cAAA,CACA,eAAA,CAGD,kIACC,YAAA,CACA,kBAAA,CACA,QAAA,CACA,6BAAA,CAEA,aAAA,CACA,eAAA,CACA,0BAAA,CACA,iBAAA,CAEA,yBAXD,kIAYE,YAAA,CACA,kBAAA,CACA,cAAA,CAAA,CAGD,4JACC,UAAA,CACA,WAAA,CACA,eAAA,CACA,wBAAA,CACA,SAAA,CACA,mBAAA,CACA,SAAA,CACA,UAAA,CACA,cAAA,CACA,kBAAA,CACA,wBAAA,CACA,eAAA,CACA,oBAAA,CACA,cAAA,CAEA,0BAAA,CAAA,qBAAA,CAEA,yBAlBD,4JAmBE,QAAA,CAAA,CAED,yBArBD,4JAsBE,cAAA,CAAA,CAED,4LACC,aAAA","file":"front.css"} \ No newline at end of file diff --git a/modules/customdevslider/css/front.scss b/modules/customdevslider/css/front.scss new file mode 100644 index 00000000..49d4887a --- /dev/null +++ b/modules/customdevslider/css/front.scss @@ -0,0 +1,111 @@ +.hp-c-slider { + padding: 0 !important; + + > .ApColumn { + padding: 0 !important; + } +} +div[id^='customdevslider-'] { + .customdevslider-swiper__container { + position: relative; + + .swiper-wrapper { + position: absolute; + inset: 0; + + .swiper-slide { + .customdevslider-swiper__image { + height: 100%; + object-fit: cover; + object-position: left center; + } + } + } + .customdevslider-swiper__content { + position: relative; + margin: 50px 0 50px auto; + row-gap: 40px; + min-height: 548px; + + // position: absolute; + // right: 5%; + // top: 10%; + width: 50%; + // height: 80%; + height: 100%; + background: rgba(120, 120, 120, 0.65); + padding: 24px; + color: #f2f2f2; + z-index: 1; + + display: flex; + flex-direction: column; + + @media (max-width: 1300px) { + width: 60%; + } + + @media (max-width: 900px) { + width: 100%; + margin: 0; + padding: 50px; + background-color: rgb(34 34 34 / 85%); + backdrop-filter: blur(3px); + } + + .customdevslider-swiper__text { + flex: 1 1 auto; + overflow: hidden; + font-size: 20px; + line-height: 1.3; + } + + .customdevslider-swiper__pagination { + display: flex; + flex-direction: row; + gap: 20px; + justify-content: space-between; + + flex: 0 0 auto; + margin-top: auto; + position: static !important; + text-align: center; + + @media (max-width: 700px) { + display: flex; + flex-direction: row; + flex-wrap: wrap; + } + + .swiper-pagination-bullet { + width: auto; + height: auto; + border-radius: 0; + background: transparent; + opacity: 1; + margin: 0 !important; + padding: 0; + color: #ffffff; + font-size: 26px; + letter-spacing: 1px; + text-transform: uppercase; + font-weight: 500; + display: inline-block; + cursor: pointer; + + min-width: max-content; + + @media (max-width: 700px) { + flex: 40%; + } + @media (max-width: 460px) { + font-size: 18px; + } + &.swiper-pagination-bullet-active { + color: #e60000; + } + } + } + } + } +} diff --git a/modules/customdevslider/customdevslider.php b/modules/customdevslider/customdevslider.php new file mode 100644 index 00000000..d077d533 --- /dev/null +++ b/modules/customdevslider/customdevslider.php @@ -0,0 +1,195 @@ +name = 'customdevslider'; + $this->tab = 'front_office_features'; + $this->version = '1.0.0'; + $this->author = 'CustomDev'; + $this->need_instance = 0; + $this->bootstrap = true; + + parent::__construct(); + + $this->displayName = $this->l('Custom Dev Slider'); + $this->description = $this->l('Custom slider with dynamic slides (image, title, text, link).'); + } + + public function install() + { + return parent::install() + && $this->installDb() + && $this->installTab() + && $this->registerHook('displayHome') + && $this->registerHook('displayTop') + && $this->registerHook('header'); + } + + public function uninstall() + { + return $this->uninstallTab() + && $this->uninstallDb() + && parent::uninstall(); + } + + public function hookDisplayTop($params) + { + return $this->renderWidget('displayTop', []); + } + + public function hookDisplayHome($params) + { + return $this->renderWidget('displayHome', []); + } + + public function getContent() + { + Tools::redirectAdmin($this->context->link->getAdminLink('AdminCustomDevSlider')); + } + + public function hookHeader() + { + // Swiper (локально) + $this->context->controller->registerStylesheet( + 'customdevslider-swiper', + 'modules/'.$this->name.'/plugins/swiperjs/swiper.min.css', + ['media' => 'all', 'priority' => 140] + ); + + // Твій CSS (після swiper) + $this->context->controller->registerStylesheet( + 'customdevslider-front', + 'modules/'.$this->name.'/css/front.css', + ['media' => 'all', 'priority' => 150] + ); + + // Swiper JS (перед твоїм JS) + $this->context->controller->registerJavascript( + 'customdevslider-swiper', + 'modules/'.$this->name.'/plugins/swiperjs/swiper.min.js', + ['position' => 'bottom', 'priority' => 140] + ); + + // Твій JS ініціалізації + $this->context->controller->registerJavascript( + 'customdevslider-front', + 'modules/'.$this->name.'/js/front.js', + ['position' => 'bottom', 'priority' => 150] + ); + } + + // WidgetInterface + public function renderWidget($hookName, array $configuration) + { + $this->smarty->assign($this->getWidgetVariables($hookName, $configuration)); + return $this->fetch('module:'.$this->name.'/views/templates/hook/slider.tpl'); + } + + public function getWidgetVariables($hookName, array $configuration) + { + $idLang = (int)$this->context->language->id; + + $slides = Db::getInstance()->executeS(' + SELECT s.*, sl.title, sl.text + FROM `'._DB_PREFIX_.'customdevslider_slide` s + LEFT JOIN `'._DB_PREFIX_.'customdevslider_slide_lang` sl + ON (s.id_customdevslider_slide = sl.id_customdevslider_slide AND sl.id_lang = '.$idLang.') + WHERE s.active = 1 + ORDER BY s.position ASC + '); + + foreach ($slides as &$s) { + $s['image_url'] = $s['image'] + ? $this->context->link->getMediaLink(_MODULE_DIR_.$this->name.'/uploads/'.$s['image']) + : null; + } + unset($s); + + // UID щоб кілька віджетів не конфліктували + $uid = Tools::passwdGen(10, 'NO_NUMERIC'); + + return [ + 'customdevslider_slides' => $slides, + 'customdevslider_uid' => $uid, + ]; + } + + private function installDb() + { + $sql = []; + + $sql[] = 'CREATE TABLE IF NOT EXISTS `'._DB_PREFIX_.'customdevslider_slide` ( + `id_customdevslider_slide` INT UNSIGNED NOT NULL AUTO_INCREMENT, + `image` VARCHAR(255) DEFAULT NULL, + `link` VARCHAR(255) DEFAULT NULL, + `position` INT UNSIGNED NOT NULL DEFAULT 0, + `active` TINYINT(1) NOT NULL DEFAULT 1, + `date_add` DATETIME NULL, + `date_upd` DATETIME NULL, + PRIMARY KEY (`id_customdevslider_slide`) + ) ENGINE='._MYSQL_ENGINE_.' DEFAULT CHARSET=utf8;'; + + $sql[] = 'CREATE TABLE IF NOT EXISTS `'._DB_PREFIX_.'customdevslider_slide_lang` ( + `id_customdevslider_slide` INT UNSIGNED NOT NULL, + `id_lang` INT UNSIGNED NOT NULL, + `title` VARCHAR(255) DEFAULT NULL, + `text` TEXT DEFAULT NULL, + PRIMARY KEY (`id_customdevslider_slide`, `id_lang`) + ) ENGINE='._MYSQL_ENGINE_.' DEFAULT CHARSET=utf8;'; + + foreach ($sql as $q) { + if (!Db::getInstance()->execute($q)) { + return false; + } + } + + return true; + } + + private function uninstallDb() + { + $sql = []; + $sql[] = 'DROP TABLE IF EXISTS `'._DB_PREFIX_.'customdevslider_slide_lang`'; + $sql[] = 'DROP TABLE IF EXISTS `'._DB_PREFIX_.'customdevslider_slide`'; + + foreach ($sql as $q) { + if (!Db::getInstance()->execute($q)) { + return false; + } + } + return true; + } + + private function installTab() + { + $idParent = (int)Tab::getIdFromClassName('AdminParentModulesSf'); + + $tab = new Tab(); + $tab->active = 1; + $tab->class_name = 'AdminCustomDevSlider'; + $tab->module = $this->name; + $tab->id_parent = $idParent; + + $tab->name = []; + foreach (Language::getLanguages(true) as $lang) { + $tab->name[(int)$lang['id_lang']] = 'Custom Dev Slider'; + } + + return (bool)$tab->add(); + } + + private function uninstallTab() + { + $idTab = (int)Tab::getIdFromClassName('AdminCustomDevSlider'); + if ($idTab) { + $tab = new Tab($idTab); + return (bool)$tab->delete(); + } + return true; + } +} diff --git a/modules/customdevslider/js/front.js b/modules/customdevslider/js/front.js new file mode 100644 index 00000000..e6f234df --- /dev/null +++ b/modules/customdevslider/js/front.js @@ -0,0 +1,98 @@ +$(function () { + var $roots = $('.customdevslider-swiper') + if (!$roots.length) return + + $roots.each(function () { + var $root = $(this) + + if ($root.data('inited') === 1) return + $root.data('inited', 1) + + var $container = $root.find('.customdevslider-swiper__container').first() + var $paginationEl = $root + .find('.customdevslider-swiper__pagination') + .first() + var $textBox = $root.find('.customdevslider-swiper__text').first() + + if ( + !$container.length || + !$paginationEl.length || + typeof Swiper === 'undefined' + ) + return + + var titles = [] + try { + titles = JSON.parse($root.attr('data-titles') || '[]') + } catch (e) { + titles = [] + } + + function setHtmlByIndex(idx) { + var $slide = $container.find('.swiper-slide').eq(idx) + var html = + $slide.find('.customdevslider-swiper__slide-html').first().html() || '' + $textBox.html(html) + } + + var swiper = new Swiper($container[0], { + loop: true, + speed: 600, + autoplay: { + delay: 5000, + }, + + // fade + effect: 'fade', + fadeEffect: { crossFade: true }, + + pagination: { + el: $paginationEl[0], + clickable: true, + renderBullet: function (index, className) { + var t = (titles[index] || '').toString().trim() + if (!t) t = 'Slide ' + (index + 1) + return '' + t + '' + }, + }, + + on: { + init: function () { + setMaxTextHeight() + setHtmlByIndex(this.realIndex) + }, + slideChange: function () { + setHtmlByIndex(this.realIndex) + }, + resize: function () { + setMaxTextHeight() + }, + }, + }) + + setHtmlByIndex(0) + }) + + function setMaxTextHeight() { + var maxHeight = 0 + var originalHtml = $textBox.html() + + $container.find('.swiper-slide').each(function () { + var html = $(this) + .find('.customdevslider-swiper__slide-html') + .first() + .html() + + if (!html) return + + $textBox.html(html) + $textBox.css('height', 'auto') + + var h = $textBox.outerHeight(true) + if (h > maxHeight) maxHeight = h + }) + + $textBox.html(originalHtml) + $textBox.height(maxHeight) + } +}) diff --git a/modules/customdevslider/logo.png b/modules/customdevslider/logo.png new file mode 100644 index 00000000..7dda2bbb Binary files /dev/null and b/modules/customdevslider/logo.png differ diff --git a/modules/customdevslider/plugins/swiperjs/swiper.min.css b/modules/customdevslider/plugins/swiperjs/swiper.min.css new file mode 100644 index 00000000..c5bf0fb2 --- /dev/null +++ b/modules/customdevslider/plugins/swiperjs/swiper.min.css @@ -0,0 +1,13 @@ +/** + * Swiper 12.0.3 + * Most modern mobile touch slider and framework with hardware accelerated transitions + * https://swiperjs.com + * + * Copyright 2014-2025 Vladimir Kharlampidi + * + * Released under the MIT License + * + * Released on: October 21, 2025 + */ + +:root{--swiper-theme-color:#007aff}:host{display:block;margin-left:auto;margin-right:auto;position:relative;z-index:1}.swiper{display:block;list-style:none;margin-left:auto;margin-right:auto;overflow:hidden;padding:0;position:relative;z-index:1}.swiper-vertical>.swiper-wrapper{flex-direction:column}.swiper-wrapper{box-sizing:initial;display:flex;height:100%;position:relative;transition-property:transform;transition-timing-function:var(--swiper-wrapper-transition-timing-function,initial);width:100%;z-index:1}.swiper-android .swiper-slide,.swiper-ios .swiper-slide,.swiper-wrapper{transform:translateZ(0)}.swiper-horizontal{touch-action:pan-y}.swiper-vertical{touch-action:pan-x}.swiper-slide{display:block;flex-shrink:0;height:100%;position:relative;transition-property:transform;width:100%}.swiper-slide-invisible-blank{visibility:hidden}.swiper-autoheight,.swiper-autoheight .swiper-slide{height:auto}.swiper-autoheight .swiper-wrapper{align-items:flex-start;transition-property:transform,height}.swiper-backface-hidden .swiper-slide{backface-visibility:hidden;transform:translateZ(0)}.swiper-3d.swiper-css-mode .swiper-wrapper{perspective:1200px}.swiper-3d .swiper-wrapper{transform-style:preserve-3d}.swiper-3d{perspective:1200px;.swiper-cube-shadow,.swiper-slide{transform-style:preserve-3d}}.swiper-css-mode{>.swiper-wrapper{overflow:auto;scrollbar-width:none;-ms-overflow-style:none;&::-webkit-scrollbar{display:none}}>.swiper-wrapper>.swiper-slide{scroll-snap-align:start start}&.swiper-horizontal{>.swiper-wrapper{scroll-snap-type:x mandatory}}&.swiper-vertical{>.swiper-wrapper{scroll-snap-type:y mandatory}}&.swiper-free-mode{>.swiper-wrapper{scroll-snap-type:none}>.swiper-wrapper>.swiper-slide{scroll-snap-align:none}}&.swiper-centered{>.swiper-wrapper:before{content:"";flex-shrink:0;order:9999}>.swiper-wrapper>.swiper-slide{scroll-snap-align:center center;scroll-snap-stop:always}}&.swiper-centered.swiper-horizontal{>.swiper-wrapper>.swiper-slide:first-child{margin-inline-start:var(--swiper-centered-offset-before)}>.swiper-wrapper:before{height:100%;min-height:1px;width:var(--swiper-centered-offset-after)}}&.swiper-centered.swiper-vertical{>.swiper-wrapper>.swiper-slide:first-child{margin-block-start:var(--swiper-centered-offset-before)}>.swiper-wrapper:before{height:var(--swiper-centered-offset-after);min-width:1px;width:100%}}}.swiper-3d{.swiper-slide-shadow,.swiper-slide-shadow-bottom,.swiper-slide-shadow-left,.swiper-slide-shadow-right,.swiper-slide-shadow-top{height:100%;left:0;pointer-events:none;position:absolute;top:0;width:100%;z-index:10}.swiper-slide-shadow{background:#00000026}.swiper-slide-shadow-left{background-image:linear-gradient(270deg,#00000080,#0000)}.swiper-slide-shadow-right{background-image:linear-gradient(90deg,#00000080,#0000)}.swiper-slide-shadow-top{background-image:linear-gradient(0deg,#00000080,#0000)}.swiper-slide-shadow-bottom{background-image:linear-gradient(180deg,#00000080,#0000)}}.swiper-lazy-preloader{border:4px solid var(--swiper-preloader-color,var(--swiper-theme-color));border-radius:50%;border-top:4px solid #0000;box-sizing:border-box;height:42px;left:50%;margin-left:-21px;margin-top:-21px;position:absolute;top:50%;transform-origin:50%;width:42px;z-index:10}.swiper-watch-progress .swiper-slide-visible,.swiper:not(.swiper-watch-progress){.swiper-lazy-preloader{animation:swiper-preloader-spin 1s linear infinite}}.swiper-lazy-preloader-white{--swiper-preloader-color:#fff}.swiper-lazy-preloader-black{--swiper-preloader-color:#000}@keyframes swiper-preloader-spin{0%{transform:rotate(0deg)}to{transform:rotate(1turn)}}.swiper-virtual .swiper-slide{-webkit-backface-visibility:hidden;transform:translateZ(0)}.swiper-virtual.swiper-css-mode{.swiper-wrapper:after{content:"";left:0;pointer-events:none;position:absolute;top:0}}.swiper-virtual.swiper-css-mode.swiper-horizontal{.swiper-wrapper:after{height:1px;width:var(--swiper-virtual-size)}}.swiper-virtual.swiper-css-mode.swiper-vertical{.swiper-wrapper:after{height:var(--swiper-virtual-size);width:1px}}:root{--swiper-navigation-size:44px}.swiper-button-next,.swiper-button-prev{align-items:center;color:var(--swiper-navigation-color,var(--swiper-theme-color));cursor:pointer;display:flex;height:var(--swiper-navigation-size);justify-content:center;position:absolute;width:var(--swiper-navigation-size);z-index:10;&.swiper-button-disabled{cursor:auto;opacity:.35;pointer-events:none}&.swiper-button-hidden{cursor:auto;opacity:0;pointer-events:none}.swiper-navigation-disabled &{display:none!important}svg{height:100%;object-fit:contain;transform-origin:center;width:100%;fill:currentColor;pointer-events:none}}.swiper-button-lock{display:none}.swiper-button-next,.swiper-button-prev{margin-top:calc(0px - var(--swiper-navigation-size)/2);top:var(--swiper-navigation-top-offset,50%)}.swiper-button-prev{left:var(--swiper-navigation-sides-offset,4px);right:auto;.swiper-navigation-icon{transform:rotate(180deg)}}.swiper-button-next{left:auto;right:var(--swiper-navigation-sides-offset,4px)}.swiper-horizontal{.swiper-button-next,.swiper-button-prev,~.swiper-button-next,~.swiper-button-prev{margin-left:0;margin-top:calc(0px - var(--swiper-navigation-size)/2);top:var(--swiper-navigation-top-offset,50%)}&.swiper-rtl .swiper-button-next,&.swiper-rtl~.swiper-button-next,&~.swiper-button-prev,.swiper-button-prev{left:var(--swiper-navigation-sides-offset,4px);right:auto}&.swiper-rtl .swiper-button-prev,&.swiper-rtl~.swiper-button-prev,&~.swiper-button-next,.swiper-button-next{left:auto;right:var(--swiper-navigation-sides-offset,4px)}&.swiper-rtl .swiper-button-next,&.swiper-rtl~.swiper-button-next,&~.swiper-button-prev,.swiper-button-prev{.swiper-navigation-icon{transform:rotate(180deg)}}&.swiper-rtl .swiper-button-prev,&.swiper-rtl~.swiper-button-prev{.swiper-navigation-icon{transform:rotate(0deg)}}}.swiper-vertical{.swiper-button-next,.swiper-button-prev,~.swiper-button-next,~.swiper-button-prev{left:var(--swiper-navigation-top-offset,50%);margin-left:calc(0px - var(--swiper-navigation-size)/2);margin-top:0;right:auto}.swiper-button-prev,~.swiper-button-prev{bottom:auto;top:var(--swiper-navigation-sides-offset,4px);.swiper-navigation-icon{transform:rotate(-90deg)}}.swiper-button-next,~.swiper-button-next{bottom:var(--swiper-navigation-sides-offset,4px);top:auto;.swiper-navigation-icon{transform:rotate(90deg)}}}.swiper-pagination{position:absolute;text-align:center;transform:translateZ(0);transition:opacity .3s;z-index:10;&.swiper-pagination-hidden{opacity:0}&.swiper-pagination-disabled,.swiper-pagination-disabled>&{display:none!important}}.swiper-horizontal>.swiper-pagination-bullets,.swiper-pagination-bullets.swiper-pagination-horizontal,.swiper-pagination-custom,.swiper-pagination-fraction{bottom:var(--swiper-pagination-bottom,8px);left:0;top:var(--swiper-pagination-top,auto);width:100%}.swiper-pagination-bullets-dynamic{font-size:0;overflow:hidden;.swiper-pagination-bullet{position:relative;transform:scale(.33)}.swiper-pagination-bullet-active,.swiper-pagination-bullet-active-main{transform:scale(1)}.swiper-pagination-bullet-active-prev{transform:scale(.66)}.swiper-pagination-bullet-active-prev-prev{transform:scale(.33)}.swiper-pagination-bullet-active-next{transform:scale(.66)}.swiper-pagination-bullet-active-next-next{transform:scale(.33)}}.swiper-pagination-bullet{background:var(--swiper-pagination-bullet-inactive-color,#000);border-radius:var(--swiper-pagination-bullet-border-radius,50%);display:inline-block;height:var(--swiper-pagination-bullet-height,var(--swiper-pagination-bullet-size,8px));opacity:var(--swiper-pagination-bullet-inactive-opacity,.2);width:var(--swiper-pagination-bullet-width,var(--swiper-pagination-bullet-size,8px));button&{appearance:none;border:none;box-shadow:none;margin:0;padding:0}.swiper-pagination-clickable &{cursor:pointer}&:only-child{display:none!important}}.swiper-pagination-bullet-active{background:var(--swiper-pagination-color,var(--swiper-theme-color));opacity:var(--swiper-pagination-bullet-opacity,1)}.swiper-pagination-vertical.swiper-pagination-bullets,.swiper-vertical>.swiper-pagination-bullets{left:var(--swiper-pagination-left,auto);right:var(--swiper-pagination-right,8px);top:50%;transform:translate3d(0,-50%,0);.swiper-pagination-bullet{display:block;margin:var(--swiper-pagination-bullet-vertical-gap,6px) 0}&.swiper-pagination-bullets-dynamic{top:50%;transform:translateY(-50%);width:8px;.swiper-pagination-bullet{display:inline-block;transition:transform .2s,top .2s}}}.swiper-horizontal>.swiper-pagination-bullets,.swiper-pagination-horizontal.swiper-pagination-bullets{.swiper-pagination-bullet{margin:0 var(--swiper-pagination-bullet-horizontal-gap,4px)}&.swiper-pagination-bullets-dynamic{left:50%;transform:translateX(-50%);white-space:nowrap;.swiper-pagination-bullet{transition:transform .2s,left .2s}}}.swiper-horizontal.swiper-rtl>.swiper-pagination-bullets-dynamic .swiper-pagination-bullet{transition:transform .2s,right .2s}.swiper-pagination-fraction{color:var(--swiper-pagination-fraction-color,inherit)}.swiper-pagination-progressbar{background:var(--swiper-pagination-progressbar-bg-color,#00000040);position:absolute;.swiper-pagination-progressbar-fill{background:var(--swiper-pagination-color,var(--swiper-theme-color));height:100%;left:0;position:absolute;top:0;transform:scale(0);transform-origin:left top;width:100%}.swiper-rtl & .swiper-pagination-progressbar-fill{transform-origin:right top}&.swiper-pagination-horizontal,&.swiper-pagination-vertical.swiper-pagination-progressbar-opposite,.swiper-horizontal>&,.swiper-vertical>&.swiper-pagination-progressbar-opposite{height:var(--swiper-pagination-progressbar-size,4px);left:0;top:0;width:100%}&.swiper-pagination-horizontal.swiper-pagination-progressbar-opposite,&.swiper-pagination-vertical,.swiper-horizontal>&.swiper-pagination-progressbar-opposite,.swiper-vertical>&{height:100%;left:0;top:0;width:var(--swiper-pagination-progressbar-size,4px)}}.swiper-pagination-lock{display:none}.swiper-scrollbar{background:var(--swiper-scrollbar-bg-color,#0000001a);border-radius:var(--swiper-scrollbar-border-radius,10px);position:relative;touch-action:none;&.swiper-scrollbar-disabled,.swiper-scrollbar-disabled>&{display:none!important}&.swiper-scrollbar-horizontal,.swiper-horizontal>&{bottom:var(--swiper-scrollbar-bottom,4px);height:var(--swiper-scrollbar-size,4px);left:var(--swiper-scrollbar-sides-offset,1%);position:absolute;top:var(--swiper-scrollbar-top,auto);width:calc(100% - var(--swiper-scrollbar-sides-offset, 1%)*2);z-index:50}&.swiper-scrollbar-vertical,.swiper-vertical>&{height:calc(100% - var(--swiper-scrollbar-sides-offset, 1%)*2);left:var(--swiper-scrollbar-left,auto);position:absolute;right:var(--swiper-scrollbar-right,4px);top:var(--swiper-scrollbar-sides-offset,1%);width:var(--swiper-scrollbar-size,4px);z-index:50}}.swiper-scrollbar-drag{background:var(--swiper-scrollbar-drag-bg-color,#00000080);border-radius:var(--swiper-scrollbar-border-radius,10px);height:100%;left:0;position:relative;top:0;width:100%}.swiper-scrollbar-cursor-drag{cursor:move}.swiper-scrollbar-lock{display:none}.swiper-zoom-container{align-items:center;display:flex;height:100%;justify-content:center;text-align:center;width:100%;>canvas,>img,>svg{max-height:100%;max-width:100%;object-fit:contain}}.swiper-slide-zoomed{cursor:move;touch-action:none}.swiper .swiper-notification{left:0;opacity:0;pointer-events:none;position:absolute;top:0;z-index:-1000}.swiper-free-mode>.swiper-wrapper{margin:0 auto;transition-timing-function:ease-out}.swiper-grid>.swiper-wrapper{flex-wrap:wrap}.swiper-grid-column>.swiper-wrapper{flex-direction:column;flex-wrap:wrap}.swiper-fade{&.swiper-free-mode{.swiper-slide{transition-timing-function:ease-out}}.swiper-slide{pointer-events:none;transition-property:opacity;.swiper-slide{pointer-events:none}}.swiper-slide-active{pointer-events:auto;& .swiper-slide-active{pointer-events:auto}}}.swiper.swiper-cube{overflow:visible}.swiper-cube{.swiper-slide{backface-visibility:hidden;height:100%;pointer-events:none;transform-origin:0 0;visibility:hidden;width:100%;z-index:1;.swiper-slide{pointer-events:none}}&.swiper-rtl .swiper-slide{transform-origin:100% 0}.swiper-slide-active{&,& .swiper-slide-active{pointer-events:auto}}.swiper-slide-active,.swiper-slide-next,.swiper-slide-prev{pointer-events:auto;visibility:visible}.swiper-cube-shadow{bottom:0;height:100%;left:0;opacity:.6;position:absolute;width:100%;z-index:0;&:before{background:#000;bottom:0;content:"";filter:blur(50px);left:0;position:absolute;right:0;top:0}}}.swiper-cube{.swiper-slide-next+.swiper-slide{pointer-events:auto;visibility:visible}}.swiper-cube{.swiper-slide-shadow-cube.swiper-slide-shadow-bottom,.swiper-slide-shadow-cube.swiper-slide-shadow-left,.swiper-slide-shadow-cube.swiper-slide-shadow-right,.swiper-slide-shadow-cube.swiper-slide-shadow-top{backface-visibility:hidden;z-index:0}}.swiper.swiper-flip{overflow:visible}.swiper-flip{.swiper-slide{backface-visibility:hidden;pointer-events:none;z-index:1;.swiper-slide{pointer-events:none}}.swiper-slide-active{&,& .swiper-slide-active{pointer-events:auto}}}.swiper-flip{.swiper-slide-shadow-flip.swiper-slide-shadow-bottom,.swiper-slide-shadow-flip.swiper-slide-shadow-left,.swiper-slide-shadow-flip.swiper-slide-shadow-right,.swiper-slide-shadow-flip.swiper-slide-shadow-top{backface-visibility:hidden;z-index:0}}.swiper-creative{.swiper-slide{backface-visibility:hidden;overflow:hidden;transition-property:transform,opacity,height}}.swiper.swiper-cards{overflow:visible}.swiper-cards{.swiper-slide{backface-visibility:hidden;overflow:hidden;transform-origin:center bottom}} \ No newline at end of file diff --git a/modules/customdevslider/plugins/swiperjs/swiper.min.js b/modules/customdevslider/plugins/swiperjs/swiper.min.js new file mode 100644 index 00000000..92512656 --- /dev/null +++ b/modules/customdevslider/plugins/swiperjs/swiper.min.js @@ -0,0 +1,7661 @@ +/** + * Swiper 12.0.3 + * Most modern mobile touch slider and framework with hardware accelerated transitions + * https://swiperjs.com + * + * Copyright 2014-2025 Vladimir Kharlampidi + * + * Released under the MIT License + * + * Released on: October 21, 2025 + */ + +var Swiper = (function () { + 'use strict' + function e(e) { + return ( + null !== e && + 'object' == typeof e && + 'constructor' in e && + e.constructor === Object + ) + } + function t(s = {}, a = {}) { + const i = ['__proto__', 'constructor', 'prototype'] + Object.keys(a) + .filter((e) => i.indexOf(e) < 0) + .forEach((i) => { + void 0 === s[i] + ? (s[i] = a[i]) + : e(a[i]) && e(s[i]) && Object.keys(a[i]).length > 0 && t(s[i], a[i]) + }) + } + const s = { + body: {}, + addEventListener() {}, + removeEventListener() {}, + activeElement: { blur() {}, nodeName: '' }, + querySelector: () => null, + querySelectorAll: () => [], + getElementById: () => null, + createEvent: () => ({ initEvent() {} }), + createElement: () => ({ + children: [], + childNodes: [], + style: {}, + setAttribute() {}, + getElementsByTagName: () => [], + }), + createElementNS: () => ({}), + importNode: () => null, + location: { + hash: '', + host: '', + hostname: '', + href: '', + origin: '', + pathname: '', + protocol: '', + search: '', + }, + } + function a() { + const e = 'undefined' != typeof document ? document : {} + return t(e, s), e + } + const i = { + document: s, + navigator: { userAgent: '' }, + location: { + hash: '', + host: '', + hostname: '', + href: '', + origin: '', + pathname: '', + protocol: '', + search: '', + }, + history: { replaceState() {}, pushState() {}, go() {}, back() {} }, + CustomEvent: function () { + return this + }, + addEventListener() {}, + removeEventListener() {}, + getComputedStyle: () => ({ getPropertyValue: () => '' }), + Image() {}, + Date() {}, + screen: {}, + setTimeout() {}, + clearTimeout() {}, + matchMedia: () => ({}), + requestAnimationFrame: (e) => + 'undefined' == typeof setTimeout ? (e(), null) : setTimeout(e, 0), + cancelAnimationFrame(e) { + 'undefined' != typeof setTimeout && clearTimeout(e) + }, + } + function r() { + const e = 'undefined' != typeof window ? window : {} + return t(e, i), e + } + function n(e = '') { + return e + .trim() + .split(' ') + .filter((e) => !!e.trim()) + } + function l(e, t = 0) { + return setTimeout(e, t) + } + function o() { + return Date.now() + } + function d(e, t = 'x') { + const s = r() + let a, i, n + const l = (function (e) { + const t = r() + let s + return ( + t.getComputedStyle && (s = t.getComputedStyle(e, null)), + !s && e.currentStyle && (s = e.currentStyle), + s || (s = e.style), + s + ) + })(e) + return ( + s.WebKitCSSMatrix + ? ((i = l.transform || l.webkitTransform), + i.split(',').length > 6 && + (i = i + .split(', ') + .map((e) => e.replace(',', '.')) + .join(', ')), + (n = new s.WebKitCSSMatrix('none' === i ? '' : i))) + : ((n = + l.MozTransform || + l.OTransform || + l.MsTransform || + l.msTransform || + l.transform || + l + .getPropertyValue('transform') + .replace('translate(', 'matrix(1, 0, 0, 1,')), + (a = n.toString().split(','))), + 'x' === t && + (i = s.WebKitCSSMatrix + ? n.m41 + : 16 === a.length + ? parseFloat(a[12]) + : parseFloat(a[4])), + 'y' === t && + (i = s.WebKitCSSMatrix + ? n.m42 + : 16 === a.length + ? parseFloat(a[13]) + : parseFloat(a[5])), + i || 0 + ) + } + function c(e) { + return ( + 'object' == typeof e && + null !== e && + e.constructor && + 'Object' === Object.prototype.toString.call(e).slice(8, -1) + ) + } + function p(e) { + return 'undefined' != typeof window && void 0 !== window.HTMLElement + ? e instanceof HTMLElement + : e && (1 === e.nodeType || 11 === e.nodeType) + } + function u(...e) { + const t = Object(e[0]), + s = ['__proto__', 'constructor', 'prototype'] + for (let a = 1; a < e.length; a += 1) { + const i = e[a] + if (null != i && !p(i)) { + const e = Object.keys(Object(i)).filter((e) => s.indexOf(e) < 0) + for (let s = 0, a = e.length; s < a; s += 1) { + const a = e[s], + r = Object.getOwnPropertyDescriptor(i, a) + void 0 !== r && + r.enumerable && + (c(t[a]) && c(i[a]) + ? i[a].__swiper__ + ? (t[a] = i[a]) + : u(t[a], i[a]) + : !c(t[a]) && c(i[a]) + ? ((t[a] = {}), i[a].__swiper__ ? (t[a] = i[a]) : u(t[a], i[a])) + : (t[a] = i[a])) + } + } + } + return t + } + function m(e, t, s) { + e.style.setProperty(t, s) + } + function h({ swiper: e, targetPosition: t, side: s }) { + const a = r(), + i = -e.translate + let n, + l = null + const o = e.params.speed + ;(e.wrapperEl.style.scrollSnapType = 'none'), + a.cancelAnimationFrame(e.cssModeFrameID) + const d = t > i ? 'next' : 'prev', + c = (e, t) => ('next' === d && e >= t) || ('prev' === d && e <= t), + p = () => { + ;(n = new Date().getTime()), null === l && (l = n) + const r = Math.max(Math.min((n - l) / o, 1), 0), + d = 0.5 - Math.cos(r * Math.PI) / 2 + let u = i + d * (t - i) + if ((c(u, t) && (u = t), e.wrapperEl.scrollTo({ [s]: u }), c(u, t))) + return ( + (e.wrapperEl.style.overflow = 'hidden'), + (e.wrapperEl.style.scrollSnapType = ''), + setTimeout(() => { + ;(e.wrapperEl.style.overflow = ''), + e.wrapperEl.scrollTo({ [s]: u }) + }), + void a.cancelAnimationFrame(e.cssModeFrameID) + ) + e.cssModeFrameID = a.requestAnimationFrame(p) + } + p() + } + function f(e) { + return ( + e.querySelector('.swiper-slide-transform') || + (e.shadowRoot && e.shadowRoot.querySelector('.swiper-slide-transform')) || + e + ) + } + function g(e, t = '') { + const s = r(), + a = [...e.children] + return ( + s.HTMLSlotElement && + e instanceof HTMLSlotElement && + a.push(...e.assignedElements()), + t ? a.filter((e) => e.matches(t)) : a + ) + } + function v(e) { + try { + return void console.warn(e) + } catch (e) {} + } + function w(e, t = []) { + const s = document.createElement(e) + return s.classList.add(...(Array.isArray(t) ? t : n(t))), s + } + function b(e) { + const t = r(), + s = a(), + i = e.getBoundingClientRect(), + n = s.body, + l = e.clientTop || n.clientTop || 0, + o = e.clientLeft || n.clientLeft || 0, + d = e === t ? t.scrollY : e.scrollTop, + c = e === t ? t.scrollX : e.scrollLeft + return { top: i.top + d - l, left: i.left + c - o } + } + function y(e, t) { + return r().getComputedStyle(e, null).getPropertyValue(t) + } + function E(e) { + let t, + s = e + if (s) { + for (t = 0; null !== (s = s.previousSibling); ) + 1 === s.nodeType && (t += 1) + return t + } + } + function x(e, t) { + const s = [] + let a = e.parentElement + for (; a; ) t ? a.matches(t) && s.push(a) : s.push(a), (a = a.parentElement) + return s + } + function S(e, t) { + t && + e.addEventListener('transitionend', function s(a) { + a.target === e && + (t.call(e, a), e.removeEventListener('transitionend', s)) + }) + } + function T(e, t, s) { + const a = r() + return s + ? e['width' === t ? 'offsetWidth' : 'offsetHeight'] + + parseFloat( + a + .getComputedStyle(e, null) + .getPropertyValue('width' === t ? 'margin-right' : 'margin-top') + ) + + parseFloat( + a + .getComputedStyle(e, null) + .getPropertyValue('width' === t ? 'margin-left' : 'margin-bottom') + ) + : e.offsetWidth + } + function M(e) { + return (Array.isArray(e) ? e : [e]).filter((e) => !!e) + } + function C(e) { + return (t) => + Math.abs(t) > 0 && + e.browser && + e.browser.need3dFix && + Math.abs(t) % 90 == 0 + ? t + 0.001 + : t + } + function P(e, t = '') { + 'undefined' != typeof trustedTypes + ? (e.innerHTML = trustedTypes + .createPolicy('html', { createHTML: (e) => e }) + .createHTML(t)) + : (e.innerHTML = t) + } + let L, I, z + function A() { + return ( + L || + (L = (function () { + const e = r(), + t = a() + return { + smoothScroll: + t.documentElement && + t.documentElement.style && + 'scrollBehavior' in t.documentElement.style, + touch: !!( + 'ontouchstart' in e || + (e.DocumentTouch && t instanceof e.DocumentTouch) + ), + } + })()), + L + ) + } + function $(e = {}) { + return ( + I || + (I = (function ({ userAgent: e } = {}) { + const t = A(), + s = r(), + a = s.navigator.platform, + i = e || s.navigator.userAgent, + n = { ios: !1, android: !1 }, + l = s.screen.width, + o = s.screen.height, + d = i.match(/(Android);?[\s\/]+([\d.]+)?/) + let c = i.match(/(iPad)(?!\1).*OS\s([\d_]+)/) + const p = i.match(/(iPod)(.*OS\s([\d_]+))?/), + u = !c && i.match(/(iPhone\sOS|iOS)\s([\d_]+)/), + m = 'Win32' === a + let h = 'MacIntel' === a + return ( + !c && + h && + t.touch && + [ + '1024x1366', + '1366x1024', + '834x1194', + '1194x834', + '834x1112', + '1112x834', + '768x1024', + '1024x768', + '820x1180', + '1180x820', + '810x1080', + '1080x810', + ].indexOf(`${l}x${o}`) >= 0 && + ((c = i.match(/(Version)\/([\d.]+)/)), + c || (c = [0, 1, '13_0_0']), + (h = !1)), + d && !m && ((n.os = 'android'), (n.android = !0)), + (c || u || p) && ((n.os = 'ios'), (n.ios = !0)), + n + ) + })(e)), + I + ) + } + function k() { + return ( + z || + (z = (function () { + const e = r(), + t = $() + let s = !1 + function a() { + const t = e.navigator.userAgent.toLowerCase() + return ( + t.indexOf('safari') >= 0 && + t.indexOf('chrome') < 0 && + t.indexOf('android') < 0 + ) + } + if (a()) { + const t = String(e.navigator.userAgent) + if (t.includes('Version/')) { + const [e, a] = t + .split('Version/')[1] + .split(' ')[0] + .split('.') + .map((e) => Number(e)) + s = e < 16 || (16 === e && a < 2) + } + } + const i = /(iPhone|iPod|iPad).*AppleWebKit(?!.*Safari)/i.test( + e.navigator.userAgent + ), + n = a() + return { + isSafari: s || n, + needPerspectiveFix: s, + need3dFix: n || (i && t.ios), + isWebView: i, + } + })()), + z + ) + } + var O = { + on(e, t, s) { + const a = this + if (!a.eventsListeners || a.destroyed) return a + if ('function' != typeof t) return a + const i = s ? 'unshift' : 'push' + return ( + e.split(' ').forEach((e) => { + a.eventsListeners[e] || (a.eventsListeners[e] = []), + a.eventsListeners[e][i](t) + }), + a + ) + }, + once(e, t, s) { + const a = this + if (!a.eventsListeners || a.destroyed) return a + if ('function' != typeof t) return a + function i(...s) { + a.off(e, i), i.__emitterProxy && delete i.__emitterProxy, t.apply(a, s) + } + return (i.__emitterProxy = t), a.on(e, i, s) + }, + onAny(e, t) { + const s = this + if (!s.eventsListeners || s.destroyed) return s + if ('function' != typeof e) return s + const a = t ? 'unshift' : 'push' + return ( + s.eventsAnyListeners.indexOf(e) < 0 && s.eventsAnyListeners[a](e), s + ) + }, + offAny(e) { + const t = this + if (!t.eventsListeners || t.destroyed) return t + if (!t.eventsAnyListeners) return t + const s = t.eventsAnyListeners.indexOf(e) + return s >= 0 && t.eventsAnyListeners.splice(s, 1), t + }, + off(e, t) { + const s = this + return !s.eventsListeners || s.destroyed + ? s + : s.eventsListeners + ? (e.split(' ').forEach((e) => { + void 0 === t + ? (s.eventsListeners[e] = []) + : s.eventsListeners[e] && + s.eventsListeners[e].forEach((a, i) => { + ;(a === t || (a.__emitterProxy && a.__emitterProxy === t)) && + s.eventsListeners[e].splice(i, 1) + }) + }), + s) + : s + }, + emit(...e) { + const t = this + if (!t.eventsListeners || t.destroyed) return t + if (!t.eventsListeners) return t + let s, a, i + 'string' == typeof e[0] || Array.isArray(e[0]) + ? ((s = e[0]), (a = e.slice(1, e.length)), (i = t)) + : ((s = e[0].events), (a = e[0].data), (i = e[0].context || t)), + a.unshift(i) + return ( + (Array.isArray(s) ? s : s.split(' ')).forEach((e) => { + t.eventsAnyListeners && + t.eventsAnyListeners.length && + t.eventsAnyListeners.forEach((t) => { + t.apply(i, [e, ...a]) + }), + t.eventsListeners && + t.eventsListeners[e] && + t.eventsListeners[e].forEach((e) => { + e.apply(i, a) + }) + }), + t + ) + }, + } + const D = (e, t, s) => { + t && !e.classList.contains(s) + ? e.classList.add(s) + : !t && e.classList.contains(s) && e.classList.remove(s) + } + const G = (e, t, s) => { + t && !e.classList.contains(s) + ? e.classList.add(s) + : !t && e.classList.contains(s) && e.classList.remove(s) + } + const X = (e, t) => { + if (!e || e.destroyed || !e.params) return + const s = t.closest( + e.isElement ? 'swiper-slide' : `.${e.params.slideClass}` + ) + if (s) { + let t = s.querySelector(`.${e.params.lazyPreloaderClass}`) + !t && + e.isElement && + (s.shadowRoot + ? (t = s.shadowRoot.querySelector( + `.${e.params.lazyPreloaderClass}` + )) + : requestAnimationFrame(() => { + s.shadowRoot && + ((t = s.shadowRoot.querySelector( + `.${e.params.lazyPreloaderClass}` + )), + t && t.remove()) + })), + t && t.remove() + } + }, + B = (e, t) => { + if (!e.slides[t]) return + const s = e.slides[t].querySelector('[loading="lazy"]') + s && s.removeAttribute('loading') + }, + Y = (e) => { + if (!e || e.destroyed || !e.params) return + let t = e.params.lazyPreloadPrevNext + const s = e.slides.length + if (!s || !t || t < 0) return + t = Math.min(t, s) + const a = + 'auto' === e.params.slidesPerView + ? e.slidesPerViewDynamic() + : Math.ceil(e.params.slidesPerView), + i = e.activeIndex + if (e.params.grid && e.params.grid.rows > 1) { + const s = i, + r = [s - t] + return ( + r.push(...Array.from({ length: t }).map((e, t) => s + a + t)), + void e.slides.forEach((t, s) => { + r.includes(t.column) && B(e, s) + }) + ) + } + const r = i + a - 1 + if (e.params.rewind || e.params.loop) + for (let a = i - t; a <= r + t; a += 1) { + const t = ((a % s) + s) % s + ;(t < i || t > r) && B(e, t) + } + else + for (let a = Math.max(i - t, 0); a <= Math.min(r + t, s - 1); a += 1) + a !== i && (a > r || a < i) && B(e, a) + } + var H = { + updateSize: function () { + const e = this + let t, s + const a = e.el + ;(t = + void 0 !== e.params.width && null !== e.params.width + ? e.params.width + : a.clientWidth), + (s = + void 0 !== e.params.height && null !== e.params.height + ? e.params.height + : a.clientHeight), + (0 === t && e.isHorizontal()) || + (0 === s && e.isVertical()) || + ((t = + t - + parseInt(y(a, 'padding-left') || 0, 10) - + parseInt(y(a, 'padding-right') || 0, 10)), + (s = + s - + parseInt(y(a, 'padding-top') || 0, 10) - + parseInt(y(a, 'padding-bottom') || 0, 10)), + Number.isNaN(t) && (t = 0), + Number.isNaN(s) && (s = 0), + Object.assign(e, { + width: t, + height: s, + size: e.isHorizontal() ? t : s, + })) + }, + updateSlides: function () { + const e = this + function t(t, s) { + return parseFloat(t.getPropertyValue(e.getDirectionLabel(s)) || 0) + } + const s = e.params, + { wrapperEl: a, slidesEl: i, rtlTranslate: r, wrongRTL: n } = e, + l = e.virtual && s.virtual.enabled, + o = l ? e.virtual.slides.length : e.slides.length, + d = g(i, `.${e.params.slideClass}, swiper-slide`), + c = l ? e.virtual.slides.length : d.length + let p = [] + const u = [], + h = [] + let f = s.slidesOffsetBefore + 'function' == typeof f && (f = s.slidesOffsetBefore.call(e)) + let v = s.slidesOffsetAfter + 'function' == typeof v && (v = s.slidesOffsetAfter.call(e)) + const w = e.snapGrid.length, + b = e.slidesGrid.length, + E = e.size - f - v + let x = s.spaceBetween, + S = -f, + M = 0, + C = 0 + if (void 0 === E) return + 'string' == typeof x && x.indexOf('%') >= 0 + ? (x = (parseFloat(x.replace('%', '')) / 100) * E) + : 'string' == typeof x && (x = parseFloat(x)), + (e.virtualSize = -x - f - v), + d.forEach((e) => { + r ? (e.style.marginLeft = '') : (e.style.marginRight = ''), + (e.style.marginBottom = ''), + (e.style.marginTop = '') + }), + s.centeredSlides && + s.cssMode && + (m(a, '--swiper-centered-offset-before', ''), + m(a, '--swiper-centered-offset-after', '')) + const P = s.grid && s.grid.rows > 1 && e.grid + let L + P ? e.grid.initSlides(d) : e.grid && e.grid.unsetSlides() + const I = + 'auto' === s.slidesPerView && + s.breakpoints && + Object.keys(s.breakpoints).filter( + (e) => void 0 !== s.breakpoints[e].slidesPerView + ).length > 0 + for (let a = 0; a < c; a += 1) { + L = 0 + const i = d[a] + if ( + !i || + (P && e.grid.updateSlide(a, i, d), 'none' !== y(i, 'display')) + ) { + if (l && 'auto' === s.slidesPerView) + s.virtual.slidesPerViewAutoSlideSize && + (L = s.virtual.slidesPerViewAutoSlideSize), + L && + i && + (s.roundLengths && (L = Math.floor(L)), + (i.style[e.getDirectionLabel('width')] = `${L}px`)) + else if ('auto' === s.slidesPerView) { + I && (i.style[e.getDirectionLabel('width')] = '') + const a = getComputedStyle(i), + r = i.style.transform, + n = i.style.webkitTransform + if ( + (r && (i.style.transform = 'none'), + n && (i.style.webkitTransform = 'none'), + s.roundLengths) + ) + L = e.isHorizontal() ? T(i, 'width', !0) : T(i, 'height', !0) + else { + const e = t(a, 'width'), + s = t(a, 'padding-left'), + r = t(a, 'padding-right'), + n = t(a, 'margin-left'), + l = t(a, 'margin-right'), + o = a.getPropertyValue('box-sizing') + if (o && 'border-box' === o) L = e + n + l + else { + const { clientWidth: t, offsetWidth: a } = i + L = e + s + r + n + l + (a - t) + } + } + r && (i.style.transform = r), + n && (i.style.webkitTransform = n), + s.roundLengths && (L = Math.floor(L)) + } else + (L = (E - (s.slidesPerView - 1) * x) / s.slidesPerView), + s.roundLengths && (L = Math.floor(L)), + i && (i.style[e.getDirectionLabel('width')] = `${L}px`) + i && (i.swiperSlideSize = L), + h.push(L), + s.centeredSlides + ? ((S = S + L / 2 + M / 2 + x), + 0 === M && 0 !== a && (S = S - E / 2 - x), + 0 === a && (S = S - E / 2 - x), + Math.abs(S) < 0.001 && (S = 0), + s.roundLengths && (S = Math.floor(S)), + C % s.slidesPerGroup === 0 && p.push(S), + u.push(S)) + : (s.roundLengths && (S = Math.floor(S)), + (C - Math.min(e.params.slidesPerGroupSkip, C)) % + e.params.slidesPerGroup === + 0 && p.push(S), + u.push(S), + (S = S + L + x)), + (e.virtualSize += L + x), + (M = L), + (C += 1) + } + } + if ( + ((e.virtualSize = Math.max(e.virtualSize, E) + v), + r && + n && + ('slide' === s.effect || 'coverflow' === s.effect) && + (a.style.width = `${e.virtualSize + x}px`), + s.setWrapperSize && + (a.style[e.getDirectionLabel('width')] = `${e.virtualSize + x}px`), + P && e.grid.updateWrapperSize(L, p), + !s.centeredSlides) + ) { + const t = [] + for (let a = 0; a < p.length; a += 1) { + let i = p[a] + s.roundLengths && (i = Math.floor(i)), + p[a] <= e.virtualSize - E && t.push(i) + } + ;(p = t), + Math.floor(e.virtualSize - E) - Math.floor(p[p.length - 1]) > 1 && + p.push(e.virtualSize - E) + } + if (l && s.loop) { + const t = h[0] + x + if (s.slidesPerGroup > 1) { + const a = Math.ceil( + (e.virtual.slidesBefore + e.virtual.slidesAfter) / + s.slidesPerGroup + ), + i = t * s.slidesPerGroup + for (let e = 0; e < a; e += 1) p.push(p[p.length - 1] + i) + } + for ( + let a = 0; + a < e.virtual.slidesBefore + e.virtual.slidesAfter; + a += 1 + ) + 1 === s.slidesPerGroup && p.push(p[p.length - 1] + t), + u.push(u[u.length - 1] + t), + (e.virtualSize += t) + } + if ((0 === p.length && (p = [0]), 0 !== x)) { + const t = + e.isHorizontal() && r + ? 'marginLeft' + : e.getDirectionLabel('marginRight') + d.filter( + (e, t) => !(s.cssMode && !s.loop) || t !== d.length - 1 + ).forEach((e) => { + e.style[t] = `${x}px` + }) + } + if (s.centeredSlides && s.centeredSlidesBounds) { + let e = 0 + h.forEach((t) => { + e += t + (x || 0) + }), + (e -= x) + const t = e > E ? e - E : 0 + p = p.map((e) => (e <= 0 ? -f : e > t ? t + v : e)) + } + if (s.centerInsufficientSlides) { + let e = 0 + h.forEach((t) => { + e += t + (x || 0) + }), + (e -= x) + const t = (f || 0) + (v || 0) + if (e + t < E) { + const s = (E - e - t) / 2 + p.forEach((e, t) => { + p[t] = e - s + }), + u.forEach((e, t) => { + u[t] = e + s + }) + } + } + if ( + (Object.assign(e, { + slides: d, + snapGrid: p, + slidesGrid: u, + slidesSizesGrid: h, + }), + s.centeredSlides && s.cssMode && !s.centeredSlidesBounds) + ) { + m(a, '--swiper-centered-offset-before', -p[0] + 'px'), + m( + a, + '--swiper-centered-offset-after', + e.size / 2 - h[h.length - 1] / 2 + 'px' + ) + const t = -e.snapGrid[0], + s = -e.slidesGrid[0] + ;(e.snapGrid = e.snapGrid.map((e) => e + t)), + (e.slidesGrid = e.slidesGrid.map((e) => e + s)) + } + if ( + (c !== o && e.emit('slidesLengthChange'), + p.length !== w && + (e.params.watchOverflow && e.checkOverflow(), + e.emit('snapGridLengthChange')), + u.length !== b && e.emit('slidesGridLengthChange'), + s.watchSlidesProgress && e.updateSlidesOffset(), + e.emit('slidesUpdated'), + !(l || s.cssMode || ('slide' !== s.effect && 'fade' !== s.effect))) + ) { + const t = `${s.containerModifierClass}backface-hidden`, + a = e.el.classList.contains(t) + c <= s.maxBackfaceHiddenSlides + ? a || e.el.classList.add(t) + : a && e.el.classList.remove(t) + } + }, + updateAutoHeight: function (e) { + const t = this, + s = [], + a = t.virtual && t.params.virtual.enabled + let i, + r = 0 + 'number' == typeof e + ? t.setTransition(e) + : !0 === e && t.setTransition(t.params.speed) + const n = (e) => (a ? t.slides[t.getSlideIndexByData(e)] : t.slides[e]) + if ('auto' !== t.params.slidesPerView && t.params.slidesPerView > 1) + if (t.params.centeredSlides) + (t.visibleSlides || []).forEach((e) => { + s.push(e) + }) + else + for (i = 0; i < Math.ceil(t.params.slidesPerView); i += 1) { + const e = t.activeIndex + i + if (e > t.slides.length && !a) break + s.push(n(e)) + } + else s.push(n(t.activeIndex)) + for (i = 0; i < s.length; i += 1) + if (void 0 !== s[i]) { + const e = s[i].offsetHeight + r = e > r ? e : r + } + ;(r || 0 === r) && (t.wrapperEl.style.height = `${r}px`) + }, + updateSlidesOffset: function () { + const e = this, + t = e.slides, + s = e.isElement + ? e.isHorizontal() + ? e.wrapperEl.offsetLeft + : e.wrapperEl.offsetTop + : 0 + for (let a = 0; a < t.length; a += 1) + t[a].swiperSlideOffset = + (e.isHorizontal() ? t[a].offsetLeft : t[a].offsetTop) - + s - + e.cssOverflowAdjustment() + }, + updateSlidesProgress: function (e = (this && this.translate) || 0) { + const t = this, + s = t.params, + { slides: a, rtlTranslate: i, snapGrid: r } = t + if (0 === a.length) return + void 0 === a[0].swiperSlideOffset && t.updateSlidesOffset() + let n = -e + i && (n = e), (t.visibleSlidesIndexes = []), (t.visibleSlides = []) + let l = s.spaceBetween + 'string' == typeof l && l.indexOf('%') >= 0 + ? (l = (parseFloat(l.replace('%', '')) / 100) * t.size) + : 'string' == typeof l && (l = parseFloat(l)) + for (let e = 0; e < a.length; e += 1) { + const o = a[e] + let d = o.swiperSlideOffset + s.cssMode && s.centeredSlides && (d -= a[0].swiperSlideOffset) + const c = + (n + (s.centeredSlides ? t.minTranslate() : 0) - d) / + (o.swiperSlideSize + l), + p = + (n - r[0] + (s.centeredSlides ? t.minTranslate() : 0) - d) / + (o.swiperSlideSize + l), + u = -(n - d), + m = u + t.slidesSizesGrid[e], + h = u >= 0 && u <= t.size - t.slidesSizesGrid[e], + f = + (u >= 0 && u < t.size - 1) || + (m > 1 && m <= t.size) || + (u <= 0 && m >= t.size) + f && (t.visibleSlides.push(o), t.visibleSlidesIndexes.push(e)), + D(o, f, s.slideVisibleClass), + D(o, h, s.slideFullyVisibleClass), + (o.progress = i ? -c : c), + (o.originalProgress = i ? -p : p) + } + }, + updateProgress: function (e) { + const t = this + if (void 0 === e) { + const s = t.rtlTranslate ? -1 : 1 + e = (t && t.translate && t.translate * s) || 0 + } + const s = t.params, + a = t.maxTranslate() - t.minTranslate() + let { progress: i, isBeginning: r, isEnd: n, progressLoop: l } = t + const o = r, + d = n + if (0 === a) (i = 0), (r = !0), (n = !0) + else { + i = (e - t.minTranslate()) / a + const s = Math.abs(e - t.minTranslate()) < 1, + l = Math.abs(e - t.maxTranslate()) < 1 + ;(r = s || i <= 0), (n = l || i >= 1), s && (i = 0), l && (i = 1) + } + if (s.loop) { + const s = t.getSlideIndexByData(0), + a = t.getSlideIndexByData(t.slides.length - 1), + i = t.slidesGrid[s], + r = t.slidesGrid[a], + n = t.slidesGrid[t.slidesGrid.length - 1], + o = Math.abs(e) + ;(l = o >= i ? (o - i) / n : (o + n - r) / n), l > 1 && (l -= 1) + } + Object.assign(t, { + progress: i, + progressLoop: l, + isBeginning: r, + isEnd: n, + }), + (s.watchSlidesProgress || (s.centeredSlides && s.autoHeight)) && + t.updateSlidesProgress(e), + r && !o && t.emit('reachBeginning toEdge'), + n && !d && t.emit('reachEnd toEdge'), + ((o && !r) || (d && !n)) && t.emit('fromEdge'), + t.emit('progress', i) + }, + updateSlidesClasses: function () { + const e = this, + { slides: t, params: s, slidesEl: a, activeIndex: i } = e, + r = e.virtual && s.virtual.enabled, + n = e.grid && s.grid && s.grid.rows > 1, + l = (e) => g(a, `.${s.slideClass}${e}, swiper-slide${e}`)[0] + let o, d, c + if (r) + if (s.loop) { + let t = i - e.virtual.slidesBefore + t < 0 && (t = e.virtual.slides.length + t), + t >= e.virtual.slides.length && (t -= e.virtual.slides.length), + (o = l(`[data-swiper-slide-index="${t}"]`)) + } else o = l(`[data-swiper-slide-index="${i}"]`) + else + n + ? ((o = t.find((e) => e.column === i)), + (c = t.find((e) => e.column === i + 1)), + (d = t.find((e) => e.column === i - 1))) + : (o = t[i]) + o && + (n || + ((c = (function (e, t) { + const s = [] + for (; e.nextElementSibling; ) { + const a = e.nextElementSibling + t ? a.matches(t) && s.push(a) : s.push(a), (e = a) + } + return s + })(o, `.${s.slideClass}, swiper-slide`)[0]), + s.loop && !c && (c = t[0]), + (d = (function (e, t) { + const s = [] + for (; e.previousElementSibling; ) { + const a = e.previousElementSibling + t ? a.matches(t) && s.push(a) : s.push(a), (e = a) + } + return s + })(o, `.${s.slideClass}, swiper-slide`)[0]), + s.loop && 0 === !d && (d = t[t.length - 1]))), + t.forEach((e) => { + G(e, e === o, s.slideActiveClass), + G(e, e === c, s.slideNextClass), + G(e, e === d, s.slidePrevClass) + }), + e.emitSlidesClasses() + }, + updateActiveIndex: function (e) { + const t = this, + s = t.rtlTranslate ? t.translate : -t.translate, + { + snapGrid: a, + params: i, + activeIndex: r, + realIndex: n, + snapIndex: l, + } = t + let o, + d = e + const c = (e) => { + let s = e - t.virtual.slidesBefore + return ( + s < 0 && (s = t.virtual.slides.length + s), + s >= t.virtual.slides.length && (s -= t.virtual.slides.length), + s + ) + } + if ( + (void 0 === d && + (d = (function (e) { + const { slidesGrid: t, params: s } = e, + a = e.rtlTranslate ? e.translate : -e.translate + let i + for (let e = 0; e < t.length; e += 1) + void 0 !== t[e + 1] + ? a >= t[e] && a < t[e + 1] - (t[e + 1] - t[e]) / 2 + ? (i = e) + : a >= t[e] && a < t[e + 1] && (i = e + 1) + : a >= t[e] && (i = e) + return ( + s.normalizeSlideIndex && (i < 0 || void 0 === i) && (i = 0), i + ) + })(t)), + a.indexOf(s) >= 0) + ) + o = a.indexOf(s) + else { + const e = Math.min(i.slidesPerGroupSkip, d) + o = e + Math.floor((d - e) / i.slidesPerGroup) + } + if ((o >= a.length && (o = a.length - 1), d === r && !t.params.loop)) + return void (o !== l && ((t.snapIndex = o), t.emit('snapIndexChange'))) + if (d === r && t.params.loop && t.virtual && t.params.virtual.enabled) + return void (t.realIndex = c(d)) + const p = t.grid && i.grid && i.grid.rows > 1 + let u + if (t.virtual && i.virtual.enabled && i.loop) u = c(d) + else if (p) { + const e = t.slides.find((e) => e.column === d) + let s = parseInt(e.getAttribute('data-swiper-slide-index'), 10) + Number.isNaN(s) && (s = Math.max(t.slides.indexOf(e), 0)), + (u = Math.floor(s / i.grid.rows)) + } else if (t.slides[d]) { + const e = t.slides[d].getAttribute('data-swiper-slide-index') + u = e ? parseInt(e, 10) : d + } else u = d + Object.assign(t, { + previousSnapIndex: l, + snapIndex: o, + previousRealIndex: n, + realIndex: u, + previousIndex: r, + activeIndex: d, + }), + t.initialized && Y(t), + t.emit('activeIndexChange'), + t.emit('snapIndexChange'), + (t.initialized || t.params.runCallbacksOnInit) && + (n !== u && t.emit('realIndexChange'), t.emit('slideChange')) + }, + updateClickedSlide: function (e, t) { + const s = this, + a = s.params + let i = e.closest(`.${a.slideClass}, swiper-slide`) + !i && + s.isElement && + t && + t.length > 1 && + t.includes(e) && + [...t.slice(t.indexOf(e) + 1, t.length)].forEach((e) => { + !i && + e.matches && + e.matches(`.${a.slideClass}, swiper-slide`) && + (i = e) + }) + let r, + n = !1 + if (i) + for (let e = 0; e < s.slides.length; e += 1) + if (s.slides[e] === i) { + ;(n = !0), (r = e) + break + } + if (!i || !n) + return (s.clickedSlide = void 0), void (s.clickedIndex = void 0) + ;(s.clickedSlide = i), + s.virtual && s.params.virtual.enabled + ? (s.clickedIndex = parseInt( + i.getAttribute('data-swiper-slide-index'), + 10 + )) + : (s.clickedIndex = r), + a.slideToClickedSlide && + void 0 !== s.clickedIndex && + s.clickedIndex !== s.activeIndex && + s.slideToClickedSlide() + }, + } + var N = { + getTranslate: function (e = this.isHorizontal() ? 'x' : 'y') { + const { params: t, rtlTranslate: s, translate: a, wrapperEl: i } = this + if (t.virtualTranslate) return s ? -a : a + if (t.cssMode) return a + let r = d(i, e) + return (r += this.cssOverflowAdjustment()), s && (r = -r), r || 0 + }, + setTranslate: function (e, t) { + const s = this, + { rtlTranslate: a, params: i, wrapperEl: r, progress: n } = s + let l, + o = 0, + d = 0 + s.isHorizontal() ? (o = a ? -e : e) : (d = e), + i.roundLengths && ((o = Math.floor(o)), (d = Math.floor(d))), + (s.previousTranslate = s.translate), + (s.translate = s.isHorizontal() ? o : d), + i.cssMode + ? (r[s.isHorizontal() ? 'scrollLeft' : 'scrollTop'] = s.isHorizontal() + ? -o + : -d) + : i.virtualTranslate || + (s.isHorizontal() + ? (o -= s.cssOverflowAdjustment()) + : (d -= s.cssOverflowAdjustment()), + (r.style.transform = `translate3d(${o}px, ${d}px, 0px)`)) + const c = s.maxTranslate() - s.minTranslate() + ;(l = 0 === c ? 0 : (e - s.minTranslate()) / c), + l !== n && s.updateProgress(e), + s.emit('setTranslate', s.translate, t) + }, + minTranslate: function () { + return -this.snapGrid[0] + }, + maxTranslate: function () { + return -this.snapGrid[this.snapGrid.length - 1] + }, + translateTo: function (e = 0, t = this.params.speed, s = !0, a = !0, i) { + const r = this, + { params: n, wrapperEl: l } = r + if (r.animating && n.preventInteractionOnTransition) return !1 + const o = r.minTranslate(), + d = r.maxTranslate() + let c + if ( + ((c = a && e > o ? o : a && e < d ? d : e), + r.updateProgress(c), + n.cssMode) + ) { + const e = r.isHorizontal() + if (0 === t) l[e ? 'scrollLeft' : 'scrollTop'] = -c + else { + if (!r.support.smoothScroll) + return ( + h({ swiper: r, targetPosition: -c, side: e ? 'left' : 'top' }), !0 + ) + l.scrollTo({ [e ? 'left' : 'top']: -c, behavior: 'smooth' }) + } + return !0 + } + return ( + 0 === t + ? (r.setTransition(0), + r.setTranslate(c), + s && + (r.emit('beforeTransitionStart', t, i), r.emit('transitionEnd'))) + : (r.setTransition(t), + r.setTranslate(c), + s && + (r.emit('beforeTransitionStart', t, i), + r.emit('transitionStart')), + r.animating || + ((r.animating = !0), + r.onTranslateToWrapperTransitionEnd || + (r.onTranslateToWrapperTransitionEnd = function (e) { + r && + !r.destroyed && + e.target === this && + (r.wrapperEl.removeEventListener( + 'transitionend', + r.onTranslateToWrapperTransitionEnd + ), + (r.onTranslateToWrapperTransitionEnd = null), + delete r.onTranslateToWrapperTransitionEnd, + (r.animating = !1), + s && r.emit('transitionEnd')) + }), + r.wrapperEl.addEventListener( + 'transitionend', + r.onTranslateToWrapperTransitionEnd + ))), + !0 + ) + }, + } + function R({ swiper: e, runCallbacks: t, direction: s, step: a }) { + const { activeIndex: i, previousIndex: r } = e + let n = s + n || (n = i > r ? 'next' : i < r ? 'prev' : 'reset'), + e.emit(`transition${a}`), + t && 'reset' === n + ? e.emit(`slideResetTransition${a}`) + : t && + i !== r && + (e.emit(`slideChangeTransition${a}`), + 'next' === n + ? e.emit(`slideNextTransition${a}`) + : e.emit(`slidePrevTransition${a}`)) + } + var V = { + slideTo: function (e = 0, t, s = !0, a, i) { + 'string' == typeof e && (e = parseInt(e, 10)) + const r = this + let n = e + n < 0 && (n = 0) + const { + params: l, + snapGrid: o, + slidesGrid: d, + previousIndex: c, + activeIndex: p, + rtlTranslate: u, + wrapperEl: m, + enabled: f, + } = r + if ( + (!f && !a && !i) || + r.destroyed || + (r.animating && l.preventInteractionOnTransition) + ) + return !1 + void 0 === t && (t = r.params.speed) + const g = Math.min(r.params.slidesPerGroupSkip, n) + let v = g + Math.floor((n - g) / r.params.slidesPerGroup) + v >= o.length && (v = o.length - 1) + const w = -o[v] + if (l.normalizeSlideIndex) + for (let e = 0; e < d.length; e += 1) { + const t = -Math.floor(100 * w), + s = Math.floor(100 * d[e]), + a = Math.floor(100 * d[e + 1]) + void 0 !== d[e + 1] + ? t >= s && t < a - (a - s) / 2 + ? (n = e) + : t >= s && t < a && (n = e + 1) + : t >= s && (n = e) + } + if (r.initialized && n !== p) { + if ( + !r.allowSlideNext && + (u + ? w > r.translate && w > r.minTranslate() + : w < r.translate && w < r.minTranslate()) + ) + return !1 + if ( + !r.allowSlidePrev && + w > r.translate && + w > r.maxTranslate() && + (p || 0) !== n + ) + return !1 + } + let b + n !== (c || 0) && s && r.emit('beforeSlideChangeStart'), + r.updateProgress(w), + (b = n > p ? 'next' : n < p ? 'prev' : 'reset') + const y = r.virtual && r.params.virtual.enabled + if (!(y && i) && ((u && -w === r.translate) || (!u && w === r.translate))) + return ( + r.updateActiveIndex(n), + l.autoHeight && r.updateAutoHeight(), + r.updateSlidesClasses(), + 'slide' !== l.effect && r.setTranslate(w), + 'reset' !== b && (r.transitionStart(s, b), r.transitionEnd(s, b)), + !1 + ) + if (l.cssMode) { + const e = r.isHorizontal(), + s = u ? w : -w + if (0 === t) + y && + ((r.wrapperEl.style.scrollSnapType = 'none'), + (r._immediateVirtual = !0)), + y && !r._cssModeVirtualInitialSet && r.params.initialSlide > 0 + ? ((r._cssModeVirtualInitialSet = !0), + requestAnimationFrame(() => { + m[e ? 'scrollLeft' : 'scrollTop'] = s + })) + : (m[e ? 'scrollLeft' : 'scrollTop'] = s), + y && + requestAnimationFrame(() => { + ;(r.wrapperEl.style.scrollSnapType = ''), + (r._immediateVirtual = !1) + }) + else { + if (!r.support.smoothScroll) + return ( + h({ swiper: r, targetPosition: s, side: e ? 'left' : 'top' }), !0 + ) + m.scrollTo({ [e ? 'left' : 'top']: s, behavior: 'smooth' }) + } + return !0 + } + const E = k().isSafari + return ( + y && !i && E && r.isElement && r.virtual.update(!1, !1, n), + r.setTransition(t), + r.setTranslate(w), + r.updateActiveIndex(n), + r.updateSlidesClasses(), + r.emit('beforeTransitionStart', t, a), + r.transitionStart(s, b), + 0 === t + ? r.transitionEnd(s, b) + : r.animating || + ((r.animating = !0), + r.onSlideToWrapperTransitionEnd || + (r.onSlideToWrapperTransitionEnd = function (e) { + r && + !r.destroyed && + e.target === this && + (r.wrapperEl.removeEventListener( + 'transitionend', + r.onSlideToWrapperTransitionEnd + ), + (r.onSlideToWrapperTransitionEnd = null), + delete r.onSlideToWrapperTransitionEnd, + r.transitionEnd(s, b)) + }), + r.wrapperEl.addEventListener( + 'transitionend', + r.onSlideToWrapperTransitionEnd + )), + !0 + ) + }, + slideToLoop: function (e = 0, t, s = !0, a) { + if ('string' == typeof e) { + e = parseInt(e, 10) + } + const i = this + if (i.destroyed) return + void 0 === t && (t = i.params.speed) + const r = i.grid && i.params.grid && i.params.grid.rows > 1 + let n = e + if (i.params.loop) + if (i.virtual && i.params.virtual.enabled) n += i.virtual.slidesBefore + else { + let e + if (r) { + const t = n * i.params.grid.rows + e = i.slides.find( + (e) => 1 * e.getAttribute('data-swiper-slide-index') === t + ).column + } else e = i.getSlideIndexByData(n) + const t = r + ? Math.ceil(i.slides.length / i.params.grid.rows) + : i.slides.length, + { + centeredSlides: s, + slidesOffsetBefore: l, + slidesOffsetAfter: o, + } = i.params, + d = s || !!l || !!o + let c = i.params.slidesPerView + 'auto' === c + ? (c = i.slidesPerViewDynamic()) + : ((c = Math.ceil(parseFloat(i.params.slidesPerView, 10))), + d && c % 2 == 0 && (c += 1)) + let p = t - e < c + if ( + (d && (p = p || e < Math.ceil(c / 2)), + a && d && 'auto' !== i.params.slidesPerView && !r && (p = !1), + p) + ) { + const s = d + ? e < i.activeIndex + ? 'prev' + : 'next' + : e - i.activeIndex - 1 < i.params.slidesPerView + ? 'next' + : 'prev' + i.loopFix({ + direction: s, + slideTo: !0, + activeSlideIndex: 'next' === s ? e + 1 : e - t + 1, + slideRealIndex: 'next' === s ? i.realIndex : void 0, + }) + } + if (r) { + const e = n * i.params.grid.rows + n = i.slides.find( + (t) => 1 * t.getAttribute('data-swiper-slide-index') === e + ).column + } else n = i.getSlideIndexByData(n) + } + return ( + requestAnimationFrame(() => { + i.slideTo(n, t, s, a) + }), + i + ) + }, + slideNext: function (e, t = !0, s) { + const a = this, + { enabled: i, params: r, animating: n } = a + if (!i || a.destroyed) return a + void 0 === e && (e = a.params.speed) + let l = r.slidesPerGroup + 'auto' === r.slidesPerView && + 1 === r.slidesPerGroup && + r.slidesPerGroupAuto && + (l = Math.max(a.slidesPerViewDynamic('current', !0), 1)) + const o = a.activeIndex < r.slidesPerGroupSkip ? 1 : l, + d = a.virtual && r.virtual.enabled + if (r.loop) { + if (n && !d && r.loopPreventsSliding) return !1 + if ( + (a.loopFix({ direction: 'next' }), + (a._clientLeft = a.wrapperEl.clientLeft), + a.activeIndex === a.slides.length - 1 && r.cssMode) + ) + return ( + requestAnimationFrame(() => { + a.slideTo(a.activeIndex + o, e, t, s) + }), + !0 + ) + } + return r.rewind && a.isEnd + ? a.slideTo(0, e, t, s) + : a.slideTo(a.activeIndex + o, e, t, s) + }, + slidePrev: function (e, t = !0, s) { + const a = this, + { + params: i, + snapGrid: r, + slidesGrid: n, + rtlTranslate: l, + enabled: o, + animating: d, + } = a + if (!o || a.destroyed) return a + void 0 === e && (e = a.params.speed) + const c = a.virtual && i.virtual.enabled + if (i.loop) { + if (d && !c && i.loopPreventsSliding) return !1 + a.loopFix({ direction: 'prev' }), + (a._clientLeft = a.wrapperEl.clientLeft) + } + function p(e) { + return e < 0 ? -Math.floor(Math.abs(e)) : Math.floor(e) + } + const u = p(l ? a.translate : -a.translate), + m = r.map((e) => p(e)), + h = i.freeMode && i.freeMode.enabled + let f = r[m.indexOf(u) - 1] + if (void 0 === f && (i.cssMode || h)) { + let e + r.forEach((t, s) => { + u >= t && (e = s) + }), + void 0 !== e && (f = h ? r[e] : r[e > 0 ? e - 1 : e]) + } + let g = 0 + if ( + (void 0 !== f && + ((g = n.indexOf(f)), + g < 0 && (g = a.activeIndex - 1), + 'auto' === i.slidesPerView && + 1 === i.slidesPerGroup && + i.slidesPerGroupAuto && + ((g = g - a.slidesPerViewDynamic('previous', !0) + 1), + (g = Math.max(g, 0)))), + i.rewind && a.isBeginning) + ) { + const i = + a.params.virtual && a.params.virtual.enabled && a.virtual + ? a.virtual.slides.length - 1 + : a.slides.length - 1 + return a.slideTo(i, e, t, s) + } + return i.loop && 0 === a.activeIndex && i.cssMode + ? (requestAnimationFrame(() => { + a.slideTo(g, e, t, s) + }), + !0) + : a.slideTo(g, e, t, s) + }, + slideReset: function (e, t = !0, s) { + const a = this + if (!a.destroyed) + return ( + void 0 === e && (e = a.params.speed), + a.slideTo(a.activeIndex, e, t, s) + ) + }, + slideToClosest: function (e, t = !0, s, a = 0.5) { + const i = this + if (i.destroyed) return + void 0 === e && (e = i.params.speed) + let r = i.activeIndex + const n = Math.min(i.params.slidesPerGroupSkip, r), + l = n + Math.floor((r - n) / i.params.slidesPerGroup), + o = i.rtlTranslate ? i.translate : -i.translate + if (o >= i.snapGrid[l]) { + const e = i.snapGrid[l] + o - e > (i.snapGrid[l + 1] - e) * a && (r += i.params.slidesPerGroup) + } else { + const e = i.snapGrid[l - 1] + o - e <= (i.snapGrid[l] - e) * a && (r -= i.params.slidesPerGroup) + } + return ( + (r = Math.max(r, 0)), + (r = Math.min(r, i.slidesGrid.length - 1)), + i.slideTo(r, e, t, s) + ) + }, + slideToClickedSlide: function () { + const e = this + if (e.destroyed) return + const { params: t, slidesEl: s } = e, + a = + 'auto' === t.slidesPerView + ? e.slidesPerViewDynamic() + : t.slidesPerView + let i, + r = e.getSlideIndexWhenGrid(e.clickedIndex) + const n = e.isElement ? 'swiper-slide' : `.${t.slideClass}`, + o = e.grid && e.params.grid && e.params.grid.rows > 1 + if (t.loop) { + if (e.animating) return + ;(i = parseInt( + e.clickedSlide.getAttribute('data-swiper-slide-index'), + 10 + )), + t.centeredSlides + ? e.slideToLoop(i) + : r > + (o + ? (e.slides.length - a) / 2 - (e.params.grid.rows - 1) + : e.slides.length - a) + ? (e.loopFix(), + (r = e.getSlideIndex( + g(s, `${n}[data-swiper-slide-index="${i}"]`)[0] + )), + l(() => { + e.slideTo(r) + })) + : e.slideTo(r) + } else e.slideTo(r) + }, + } + var q = { + loopCreate: function (e, t) { + const s = this, + { params: a, slidesEl: i } = s + if (!a.loop || (s.virtual && s.params.virtual.enabled)) return + const r = () => { + g(i, `.${a.slideClass}, swiper-slide`).forEach((e, t) => { + e.setAttribute('data-swiper-slide-index', t) + }) + }, + n = s.grid && a.grid && a.grid.rows > 1 + a.loopAddBlankSlides && + (a.slidesPerGroup > 1 || n) && + (() => { + const e = g(i, `.${a.slideBlankClass}`) + e.forEach((e) => { + e.remove() + }), + e.length > 0 && (s.recalcSlides(), s.updateSlides()) + })() + const l = a.slidesPerGroup * (n ? a.grid.rows : 1), + o = s.slides.length % l !== 0, + d = n && s.slides.length % a.grid.rows !== 0, + c = (e) => { + for (let t = 0; t < e; t += 1) { + const e = s.isElement + ? w('swiper-slide', [a.slideBlankClass]) + : w('div', [a.slideClass, a.slideBlankClass]) + s.slidesEl.append(e) + } + } + if (o) { + if (a.loopAddBlankSlides) { + c(l - (s.slides.length % l)), s.recalcSlides(), s.updateSlides() + } else + v( + '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)' + ) + r() + } else if (d) { + if (a.loopAddBlankSlides) { + c(a.grid.rows - (s.slides.length % a.grid.rows)), + s.recalcSlides(), + s.updateSlides() + } else + v( + '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)' + ) + r() + } else r() + const p = + a.centeredSlides || !!a.slidesOffsetBefore || !!a.slidesOffsetAfter + s.loopFix({ + slideRealIndex: e, + direction: p ? void 0 : 'next', + initial: t, + }) + }, + loopFix: function ({ + slideRealIndex: e, + slideTo: t = !0, + direction: s, + setTranslate: a, + activeSlideIndex: i, + initial: r, + byController: n, + byMousewheel: l, + } = {}) { + const o = this + if (!o.params.loop) return + o.emit('beforeLoopFix') + const { + slides: d, + allowSlidePrev: c, + allowSlideNext: p, + slidesEl: u, + params: m, + } = o, + { + centeredSlides: h, + slidesOffsetBefore: f, + slidesOffsetAfter: g, + initialSlide: w, + } = m, + b = h || !!f || !!g + if ( + ((o.allowSlidePrev = !0), + (o.allowSlideNext = !0), + o.virtual && m.virtual.enabled) + ) + return ( + t && + (b || 0 !== o.snapIndex + ? b && o.snapIndex < m.slidesPerView + ? o.slideTo(o.virtual.slides.length + o.snapIndex, 0, !1, !0) + : o.snapIndex === o.snapGrid.length - 1 && + o.slideTo(o.virtual.slidesBefore, 0, !1, !0) + : o.slideTo(o.virtual.slides.length, 0, !1, !0)), + (o.allowSlidePrev = c), + (o.allowSlideNext = p), + void o.emit('loopFix') + ) + let y = m.slidesPerView + 'auto' === y + ? (y = o.slidesPerViewDynamic()) + : ((y = Math.ceil(parseFloat(m.slidesPerView, 10))), + b && y % 2 == 0 && (y += 1)) + const E = m.slidesPerGroupAuto ? y : m.slidesPerGroup + let x = b ? Math.max(E, Math.ceil(y / 2)) : E + x % E !== 0 && (x += E - (x % E)), + (x += m.loopAdditionalSlides), + (o.loopedSlides = x) + const S = o.grid && m.grid && m.grid.rows > 1 + d.length < y + x || ('cards' === o.params.effect && d.length < y + 2 * x) + ? v( + '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' + ) + : S && + 'row' === m.grid.fill && + v( + 'Swiper Loop Warning: Loop mode is not compatible with grid.fill = `row`' + ) + const T = [], + M = [], + C = S ? Math.ceil(d.length / m.grid.rows) : d.length, + P = r && C - w < y && !b + let L = P ? w : o.activeIndex + void 0 === i + ? (i = o.getSlideIndex( + d.find((e) => e.classList.contains(m.slideActiveClass)) + )) + : (L = i) + const I = 'next' === s || !s, + z = 'prev' === s || !s + let A = 0, + $ = 0 + const k = (S ? d[i].column : i) + (b && void 0 === a ? -y / 2 + 0.5 : 0) + if (k < x) { + A = Math.max(x - k, E) + for (let e = 0; e < x - k; e += 1) { + const t = e - Math.floor(e / C) * C + if (S) { + const e = C - t - 1 + for (let t = d.length - 1; t >= 0; t -= 1) + d[t].column === e && T.push(t) + } else T.push(C - t - 1) + } + } else if (k + y > C - x) { + ;($ = Math.max(k - (C - 2 * x), E)), + P && ($ = Math.max($, y - C + w + 1)) + for (let e = 0; e < $; e += 1) { + const t = e - Math.floor(e / C) * C + S + ? d.forEach((e, s) => { + e.column === t && M.push(s) + }) + : M.push(t) + } + } + if ( + ((o.__preventObserver__ = !0), + requestAnimationFrame(() => { + o.__preventObserver__ = !1 + }), + 'cards' === o.params.effect && + d.length < y + 2 * x && + (M.includes(i) && M.splice(M.indexOf(i), 1), + T.includes(i) && T.splice(T.indexOf(i), 1)), + z && + T.forEach((e) => { + ;(d[e].swiperLoopMoveDOM = !0), + u.prepend(d[e]), + (d[e].swiperLoopMoveDOM = !1) + }), + I && + M.forEach((e) => { + ;(d[e].swiperLoopMoveDOM = !0), + u.append(d[e]), + (d[e].swiperLoopMoveDOM = !1) + }), + o.recalcSlides(), + 'auto' === m.slidesPerView + ? o.updateSlides() + : S && + ((T.length > 0 && z) || (M.length > 0 && I)) && + o.slides.forEach((e, t) => { + o.grid.updateSlide(t, e, o.slides) + }), + m.watchSlidesProgress && o.updateSlidesOffset(), + t) + ) + if (T.length > 0 && z) { + if (void 0 === e) { + const e = o.slidesGrid[L], + t = o.slidesGrid[L + A] - e + l + ? o.setTranslate(o.translate - t) + : (o.slideTo(L + Math.ceil(A), 0, !1, !0), + a && + ((o.touchEventsData.startTranslate = + o.touchEventsData.startTranslate - t), + (o.touchEventsData.currentTranslate = + o.touchEventsData.currentTranslate - t))) + } else if (a) { + const e = S ? T.length / m.grid.rows : T.length + o.slideTo(o.activeIndex + e, 0, !1, !0), + (o.touchEventsData.currentTranslate = o.translate) + } + } else if (M.length > 0 && I) + if (void 0 === e) { + const e = o.slidesGrid[L], + t = o.slidesGrid[L - $] - e + l + ? o.setTranslate(o.translate - t) + : (o.slideTo(L - $, 0, !1, !0), + a && + ((o.touchEventsData.startTranslate = + o.touchEventsData.startTranslate - t), + (o.touchEventsData.currentTranslate = + o.touchEventsData.currentTranslate - t))) + } else { + const e = S ? M.length / m.grid.rows : M.length + o.slideTo(o.activeIndex - e, 0, !1, !0) + } + if ( + ((o.allowSlidePrev = c), + (o.allowSlideNext = p), + o.controller && o.controller.control && !n) + ) { + const r = { + slideRealIndex: e, + direction: s, + setTranslate: a, + activeSlideIndex: i, + byController: !0, + } + Array.isArray(o.controller.control) + ? o.controller.control.forEach((e) => { + !e.destroyed && + e.params.loop && + e.loopFix({ + ...r, + slideTo: e.params.slidesPerView === m.slidesPerView && t, + }) + }) + : o.controller.control instanceof o.constructor && + o.controller.control.params.loop && + o.controller.control.loopFix({ + ...r, + slideTo: + o.controller.control.params.slidesPerView === m.slidesPerView && + t, + }) + } + o.emit('loopFix') + }, + loopDestroy: function () { + const e = this, + { params: t, slidesEl: s } = e + if (!t.loop || !s || (e.virtual && e.params.virtual.enabled)) return + e.recalcSlides() + const a = [] + e.slides.forEach((e) => { + const t = + void 0 === e.swiperSlideIndex + ? 1 * e.getAttribute('data-swiper-slide-index') + : e.swiperSlideIndex + a[t] = e + }), + e.slides.forEach((e) => { + e.removeAttribute('data-swiper-slide-index') + }), + a.forEach((e) => { + s.append(e) + }), + e.recalcSlides(), + e.slideTo(e.realIndex, 0) + }, + } + function _(e, t, s) { + const a = r(), + { params: i } = e, + n = i.edgeSwipeDetection, + l = i.edgeSwipeThreshold + return ( + !n || + !(s <= l || s >= a.innerWidth - l) || + ('prevent' === n && (t.preventDefault(), !0)) + ) + } + function F(e) { + const t = this, + s = a() + let i = e + i.originalEvent && (i = i.originalEvent) + const n = t.touchEventsData + if ('pointerdown' === i.type) { + if (null !== n.pointerId && n.pointerId !== i.pointerId) return + n.pointerId = i.pointerId + } else + 'touchstart' === i.type && + 1 === i.targetTouches.length && + (n.touchId = i.targetTouches[0].identifier) + if ('touchstart' === i.type) return void _(t, i, i.targetTouches[0].pageX) + const { params: l, touches: d, enabled: c } = t + if (!c) return + if (!l.simulateTouch && 'mouse' === i.pointerType) return + if (t.animating && l.preventInteractionOnTransition) return + !t.animating && l.cssMode && l.loop && t.loopFix() + let p = i.target + if ( + 'wrapper' === l.touchEventsTarget && + !(function (e, t) { + const s = r() + let a = t.contains(e) + !a && + s.HTMLSlotElement && + t instanceof HTMLSlotElement && + ((a = [...t.assignedElements()].includes(e)), + a || + (a = (function (e, t) { + const s = [t] + for (; s.length > 0; ) { + const t = s.shift() + if (e === t) return !0 + s.push( + ...t.children, + ...(t.shadowRoot ? t.shadowRoot.children : []), + ...(t.assignedElements ? t.assignedElements() : []) + ) + } + })(e, t))) + return a + })(p, t.wrapperEl) + ) + return + if ('which' in i && 3 === i.which) return + if ('button' in i && i.button > 0) return + if (n.isTouched && n.isMoved) return + const u = !!l.noSwipingClass && '' !== l.noSwipingClass, + m = i.composedPath ? i.composedPath() : i.path + u && i.target && i.target.shadowRoot && m && (p = m[0]) + const h = l.noSwipingSelector + ? l.noSwipingSelector + : `.${l.noSwipingClass}`, + f = !(!i.target || !i.target.shadowRoot) + if ( + l.noSwiping && + (f + ? (function (e, t = this) { + return (function t(s) { + if (!s || s === a() || s === r()) return null + s.assignedSlot && (s = s.assignedSlot) + const i = s.closest(e) + return i || s.getRootNode ? i || t(s.getRootNode().host) : null + })(t) + })(h, p) + : p.closest(h)) + ) + return void (t.allowClick = !0) + if (l.swipeHandler && !p.closest(l.swipeHandler)) return + ;(d.currentX = i.pageX), (d.currentY = i.pageY) + const g = d.currentX, + v = d.currentY + if (!_(t, i, g)) return + Object.assign(n, { + isTouched: !0, + isMoved: !1, + allowTouchCallbacks: !0, + isScrolling: void 0, + startMoving: void 0, + }), + (d.startX = g), + (d.startY = v), + (n.touchStartTime = o()), + (t.allowClick = !0), + t.updateSize(), + (t.swipeDirection = void 0), + l.threshold > 0 && (n.allowThresholdMove = !1) + let w = !0 + p.matches(n.focusableElements) && + ((w = !1), 'SELECT' === p.nodeName && (n.isTouched = !1)), + s.activeElement && + s.activeElement.matches(n.focusableElements) && + s.activeElement !== p && + ('mouse' === i.pointerType || + ('mouse' !== i.pointerType && !p.matches(n.focusableElements))) && + s.activeElement.blur() + const b = w && t.allowTouchMove && l.touchStartPreventDefault + ;(!l.touchStartForcePreventDefault && !b) || + p.isContentEditable || + i.preventDefault(), + l.freeMode && + l.freeMode.enabled && + t.freeMode && + t.animating && + !l.cssMode && + t.freeMode.onTouchStart(), + t.emit('touchStart', i) + } + function W(e) { + const t = a(), + s = this, + i = s.touchEventsData, + { params: r, touches: n, rtlTranslate: l, enabled: d } = s + if (!d) return + if (!r.simulateTouch && 'mouse' === e.pointerType) return + let c, + p = e + if ((p.originalEvent && (p = p.originalEvent), 'pointermove' === p.type)) { + if (null !== i.touchId) return + if (p.pointerId !== i.pointerId) return + } + if ('touchmove' === p.type) { + if ( + ((c = [...p.changedTouches].find((e) => e.identifier === i.touchId)), + !c || c.identifier !== i.touchId) + ) + return + } else c = p + if (!i.isTouched) + return void ( + i.startMoving && + i.isScrolling && + s.emit('touchMoveOpposite', p) + ) + const u = c.pageX, + m = c.pageY + if (p.preventedByNestedSwiper) return (n.startX = u), void (n.startY = m) + if (!s.allowTouchMove) + return ( + p.target.matches(i.focusableElements) || (s.allowClick = !1), + void ( + i.isTouched && + (Object.assign(n, { startX: u, startY: m, currentX: u, currentY: m }), + (i.touchStartTime = o())) + ) + ) + if (r.touchReleaseOnEdges && !r.loop) + if (s.isVertical()) { + if ( + (m < n.startY && s.translate <= s.maxTranslate()) || + (m > n.startY && s.translate >= s.minTranslate()) + ) + return (i.isTouched = !1), void (i.isMoved = !1) + } else { + if ( + l && + ((u > n.startX && -s.translate <= s.maxTranslate()) || + (u < n.startX && -s.translate >= s.minTranslate())) + ) + return + if ( + !l && + ((u < n.startX && s.translate <= s.maxTranslate()) || + (u > n.startX && s.translate >= s.minTranslate())) + ) + return + } + if ( + (t.activeElement && + t.activeElement.matches(i.focusableElements) && + t.activeElement !== p.target && + 'mouse' !== p.pointerType && + t.activeElement.blur(), + t.activeElement && + p.target === t.activeElement && + p.target.matches(i.focusableElements)) + ) + return (i.isMoved = !0), void (s.allowClick = !1) + i.allowTouchCallbacks && s.emit('touchMove', p), + (n.previousX = n.currentX), + (n.previousY = n.currentY), + (n.currentX = u), + (n.currentY = m) + const h = n.currentX - n.startX, + f = n.currentY - n.startY + if (s.params.threshold && Math.sqrt(h ** 2 + f ** 2) < s.params.threshold) + return + if (void 0 === i.isScrolling) { + let e + ;(s.isHorizontal() && n.currentY === n.startY) || + (s.isVertical() && n.currentX === n.startX) + ? (i.isScrolling = !1) + : h * h + f * f >= 25 && + ((e = (180 * Math.atan2(Math.abs(f), Math.abs(h))) / Math.PI), + (i.isScrolling = s.isHorizontal() + ? e > r.touchAngle + : 90 - e > r.touchAngle)) + } + if ( + (i.isScrolling && s.emit('touchMoveOpposite', p), + void 0 === i.startMoving && + ((n.currentX === n.startX && n.currentY === n.startY) || + (i.startMoving = !0)), + i.isScrolling || + ('touchmove' === p.type && i.preventTouchMoveFromPointerMove)) + ) + return void (i.isTouched = !1) + if (!i.startMoving) return + ;(s.allowClick = !1), + !r.cssMode && p.cancelable && p.preventDefault(), + r.touchMoveStopPropagation && !r.nested && p.stopPropagation() + let g = s.isHorizontal() ? h : f, + v = s.isHorizontal() ? n.currentX - n.previousX : n.currentY - n.previousY + r.oneWayMovement && + ((g = Math.abs(g) * (l ? 1 : -1)), (v = Math.abs(v) * (l ? 1 : -1))), + (n.diff = g), + (g *= r.touchRatio), + l && ((g = -g), (v = -v)) + const w = s.touchesDirection + ;(s.swipeDirection = g > 0 ? 'prev' : 'next'), + (s.touchesDirection = v > 0 ? 'prev' : 'next') + const b = s.params.loop && !r.cssMode, + y = + ('next' === s.touchesDirection && s.allowSlideNext) || + ('prev' === s.touchesDirection && s.allowSlidePrev) + if (!i.isMoved) { + if ( + (b && y && s.loopFix({ direction: s.swipeDirection }), + (i.startTranslate = s.getTranslate()), + s.setTransition(0), + s.animating) + ) { + const e = new window.CustomEvent('transitionend', { + bubbles: !0, + cancelable: !0, + detail: { bySwiperTouchMove: !0 }, + }) + s.wrapperEl.dispatchEvent(e) + } + ;(i.allowMomentumBounce = !1), + !r.grabCursor || + (!0 !== s.allowSlideNext && !0 !== s.allowSlidePrev) || + s.setGrabCursor(!0), + s.emit('sliderFirstMove', p) + } + if ( + (new Date().getTime(), + !1 !== r._loopSwapReset && + i.isMoved && + i.allowThresholdMove && + w !== s.touchesDirection && + b && + y && + Math.abs(g) >= 1) + ) + return ( + Object.assign(n, { + startX: u, + startY: m, + currentX: u, + currentY: m, + startTranslate: i.currentTranslate, + }), + (i.loopSwapReset = !0), + void (i.startTranslate = i.currentTranslate) + ) + s.emit('sliderMove', p), + (i.isMoved = !0), + (i.currentTranslate = g + i.startTranslate) + let E = !0, + x = r.resistanceRatio + if ( + (r.touchReleaseOnEdges && (x = 0), + g > 0 + ? (b && + y && + i.allowThresholdMove && + i.currentTranslate > + (r.centeredSlides + ? s.minTranslate() - + s.slidesSizesGrid[s.activeIndex + 1] - + ('auto' !== r.slidesPerView && + s.slides.length - r.slidesPerView >= 2 + ? s.slidesSizesGrid[s.activeIndex + 1] + + s.params.spaceBetween + : 0) - + s.params.spaceBetween + : s.minTranslate()) && + s.loopFix({ + direction: 'prev', + setTranslate: !0, + activeSlideIndex: 0, + }), + i.currentTranslate > s.minTranslate() && + ((E = !1), + r.resistance && + (i.currentTranslate = + s.minTranslate() - + 1 + + (-s.minTranslate() + i.startTranslate + g) ** x))) + : g < 0 && + (b && + y && + i.allowThresholdMove && + i.currentTranslate < + (r.centeredSlides + ? s.maxTranslate() + + s.slidesSizesGrid[s.slidesSizesGrid.length - 1] + + s.params.spaceBetween + + ('auto' !== r.slidesPerView && + s.slides.length - r.slidesPerView >= 2 + ? s.slidesSizesGrid[s.slidesSizesGrid.length - 1] + + s.params.spaceBetween + : 0) + : s.maxTranslate()) && + s.loopFix({ + direction: 'next', + setTranslate: !0, + activeSlideIndex: + s.slides.length - + ('auto' === r.slidesPerView + ? s.slidesPerViewDynamic() + : Math.ceil(parseFloat(r.slidesPerView, 10))), + }), + i.currentTranslate < s.maxTranslate() && + ((E = !1), + r.resistance && + (i.currentTranslate = + s.maxTranslate() + + 1 - + (s.maxTranslate() - i.startTranslate - g) ** x))), + E && (p.preventedByNestedSwiper = !0), + !s.allowSlideNext && + 'next' === s.swipeDirection && + i.currentTranslate < i.startTranslate && + (i.currentTranslate = i.startTranslate), + !s.allowSlidePrev && + 'prev' === s.swipeDirection && + i.currentTranslate > i.startTranslate && + (i.currentTranslate = i.startTranslate), + s.allowSlidePrev || + s.allowSlideNext || + (i.currentTranslate = i.startTranslate), + r.threshold > 0) + ) { + if (!(Math.abs(g) > r.threshold || i.allowThresholdMove)) + return void (i.currentTranslate = i.startTranslate) + if (!i.allowThresholdMove) + return ( + (i.allowThresholdMove = !0), + (n.startX = n.currentX), + (n.startY = n.currentY), + (i.currentTranslate = i.startTranslate), + void (n.diff = s.isHorizontal() + ? n.currentX - n.startX + : n.currentY - n.startY) + ) + } + r.followFinger && + !r.cssMode && + (((r.freeMode && r.freeMode.enabled && s.freeMode) || + r.watchSlidesProgress) && + (s.updateActiveIndex(), s.updateSlidesClasses()), + r.freeMode && + r.freeMode.enabled && + s.freeMode && + s.freeMode.onTouchMove(), + s.updateProgress(i.currentTranslate), + s.setTranslate(i.currentTranslate)) + } + function j(e) { + const t = this, + s = t.touchEventsData + let a, + i = e + i.originalEvent && (i = i.originalEvent) + if ('touchend' === i.type || 'touchcancel' === i.type) { + if ( + ((a = [...i.changedTouches].find((e) => e.identifier === s.touchId)), + !a || a.identifier !== s.touchId) + ) + return + } else { + if (null !== s.touchId) return + if (i.pointerId !== s.pointerId) return + a = i + } + if ( + ['pointercancel', 'pointerout', 'pointerleave', 'contextmenu'].includes( + i.type + ) + ) { + if ( + !( + ['pointercancel', 'contextmenu'].includes(i.type) && + (t.browser.isSafari || t.browser.isWebView) + ) + ) + return + } + ;(s.pointerId = null), (s.touchId = null) + const { + params: r, + touches: n, + rtlTranslate: d, + slidesGrid: c, + enabled: p, + } = t + if (!p) return + if (!r.simulateTouch && 'mouse' === i.pointerType) return + if ( + (s.allowTouchCallbacks && t.emit('touchEnd', i), + (s.allowTouchCallbacks = !1), + !s.isTouched) + ) + return ( + s.isMoved && r.grabCursor && t.setGrabCursor(!1), + (s.isMoved = !1), + void (s.startMoving = !1) + ) + r.grabCursor && + s.isMoved && + s.isTouched && + (!0 === t.allowSlideNext || !0 === t.allowSlidePrev) && + t.setGrabCursor(!1) + const u = o(), + m = u - s.touchStartTime + if (t.allowClick) { + const e = i.path || (i.composedPath && i.composedPath()) + t.updateClickedSlide((e && e[0]) || i.target, e), + t.emit('tap click', i), + m < 300 && + u - s.lastClickTime < 300 && + t.emit('doubleTap doubleClick', i) + } + if ( + ((s.lastClickTime = o()), + l(() => { + t.destroyed || (t.allowClick = !0) + }), + !s.isTouched || + !s.isMoved || + !t.swipeDirection || + (0 === n.diff && !s.loopSwapReset) || + (s.currentTranslate === s.startTranslate && !s.loopSwapReset)) + ) + return (s.isTouched = !1), (s.isMoved = !1), void (s.startMoving = !1) + let h + if ( + ((s.isTouched = !1), + (s.isMoved = !1), + (s.startMoving = !1), + (h = r.followFinger + ? d + ? t.translate + : -t.translate + : -s.currentTranslate), + r.cssMode) + ) + return + if (r.freeMode && r.freeMode.enabled) + return void t.freeMode.onTouchEnd({ currentPos: h }) + const f = h >= -t.maxTranslate() && !t.params.loop + let g = 0, + v = t.slidesSizesGrid[0] + for ( + let e = 0; + e < c.length; + e += e < r.slidesPerGroupSkip ? 1 : r.slidesPerGroup + ) { + const t = e < r.slidesPerGroupSkip - 1 ? 1 : r.slidesPerGroup + void 0 !== c[e + t] + ? (f || (h >= c[e] && h < c[e + t])) && ((g = e), (v = c[e + t] - c[e])) + : (f || h >= c[e]) && ((g = e), (v = c[c.length - 1] - c[c.length - 2])) + } + let w = null, + b = null + r.rewind && + (t.isBeginning + ? (b = + r.virtual && r.virtual.enabled && t.virtual + ? t.virtual.slides.length - 1 + : t.slides.length - 1) + : t.isEnd && (w = 0)) + const y = (h - c[g]) / v, + E = g < r.slidesPerGroupSkip - 1 ? 1 : r.slidesPerGroup + if (m > r.longSwipesMs) { + if (!r.longSwipes) return void t.slideTo(t.activeIndex) + 'next' === t.swipeDirection && + (y >= r.longSwipesRatio + ? t.slideTo(r.rewind && t.isEnd ? w : g + E) + : t.slideTo(g)), + 'prev' === t.swipeDirection && + (y > 1 - r.longSwipesRatio + ? t.slideTo(g + E) + : null !== b && y < 0 && Math.abs(y) > r.longSwipesRatio + ? t.slideTo(b) + : t.slideTo(g)) + } else { + if (!r.shortSwipes) return void t.slideTo(t.activeIndex) + t.navigation && + (i.target === t.navigation.nextEl || i.target === t.navigation.prevEl) + ? i.target === t.navigation.nextEl + ? t.slideTo(g + E) + : t.slideTo(g) + : ('next' === t.swipeDirection && t.slideTo(null !== w ? w : g + E), + 'prev' === t.swipeDirection && t.slideTo(null !== b ? b : g)) + } + } + function U() { + const e = this, + { params: t, el: s } = e + if (s && 0 === s.offsetWidth) return + t.breakpoints && e.setBreakpoint() + const { allowSlideNext: a, allowSlidePrev: i, snapGrid: r } = e, + n = e.virtual && e.params.virtual.enabled + ;(e.allowSlideNext = !0), + (e.allowSlidePrev = !0), + e.updateSize(), + e.updateSlides(), + e.updateSlidesClasses() + const l = n && t.loop + !('auto' === t.slidesPerView || t.slidesPerView > 1) || + !e.isEnd || + e.isBeginning || + e.params.centeredSlides || + l + ? e.params.loop && !n + ? e.slideToLoop(e.realIndex, 0, !1, !0) + : e.slideTo(e.activeIndex, 0, !1, !0) + : e.slideTo(e.slides.length - 1, 0, !1, !0), + e.autoplay && + e.autoplay.running && + e.autoplay.paused && + (clearTimeout(e.autoplay.resizeTimeout), + (e.autoplay.resizeTimeout = setTimeout(() => { + e.autoplay && + e.autoplay.running && + e.autoplay.paused && + e.autoplay.resume() + }, 500))), + (e.allowSlidePrev = i), + (e.allowSlideNext = a), + e.params.watchOverflow && r !== e.snapGrid && e.checkOverflow() + } + function K(e) { + const t = this + t.enabled && + (t.allowClick || + (t.params.preventClicks && e.preventDefault(), + t.params.preventClicksPropagation && + t.animating && + (e.stopPropagation(), e.stopImmediatePropagation()))) + } + function Z() { + const e = this, + { wrapperEl: t, rtlTranslate: s, enabled: a } = e + if (!a) return + let i + ;(e.previousTranslate = e.translate), + e.isHorizontal() + ? (e.translate = -t.scrollLeft) + : (e.translate = -t.scrollTop), + 0 === e.translate && (e.translate = 0), + e.updateActiveIndex(), + e.updateSlidesClasses() + const r = e.maxTranslate() - e.minTranslate() + ;(i = 0 === r ? 0 : (e.translate - e.minTranslate()) / r), + i !== e.progress && e.updateProgress(s ? -e.translate : e.translate), + e.emit('setTranslate', e.translate, !1) + } + function Q(e) { + const t = this + X(t, e.target), + t.params.cssMode || + ('auto' !== t.params.slidesPerView && !t.params.autoHeight) || + t.update() + } + function J() { + const e = this + e.documentTouchHandlerProceeded || + ((e.documentTouchHandlerProceeded = !0), + e.params.touchReleaseOnEdges && (e.el.style.touchAction = 'auto')) + } + const ee = (e, t) => { + const s = a(), + { params: i, el: r, wrapperEl: n, device: l } = e, + o = !!i.nested, + d = 'on' === t ? 'addEventListener' : 'removeEventListener', + c = t + r && + 'string' != typeof r && + (s[d]('touchstart', e.onDocumentTouchStart, { passive: !1, capture: o }), + r[d]('touchstart', e.onTouchStart, { passive: !1 }), + r[d]('pointerdown', e.onTouchStart, { passive: !1 }), + s[d]('touchmove', e.onTouchMove, { passive: !1, capture: o }), + s[d]('pointermove', e.onTouchMove, { passive: !1, capture: o }), + s[d]('touchend', e.onTouchEnd, { passive: !0 }), + s[d]('pointerup', e.onTouchEnd, { passive: !0 }), + s[d]('pointercancel', e.onTouchEnd, { passive: !0 }), + s[d]('touchcancel', e.onTouchEnd, { passive: !0 }), + s[d]('pointerout', e.onTouchEnd, { passive: !0 }), + s[d]('pointerleave', e.onTouchEnd, { passive: !0 }), + s[d]('contextmenu', e.onTouchEnd, { passive: !0 }), + (i.preventClicks || i.preventClicksPropagation) && + r[d]('click', e.onClick, !0), + i.cssMode && n[d]('scroll', e.onScroll), + i.updateOnWindowResize + ? e[c]( + l.ios || l.android + ? 'resize orientationchange observerUpdate' + : 'resize observerUpdate', + U, + !0 + ) + : e[c]('observerUpdate', U, !0), + r[d]('load', e.onLoad, { capture: !0 })) + } + const te = (e, t) => e.grid && t.grid && t.grid.rows > 1 + var se = { + init: !0, + direction: 'horizontal', + oneWayMovement: !1, + swiperElementNodeName: 'SWIPER-CONTAINER', + touchEventsTarget: 'wrapper', + initialSlide: 0, + speed: 300, + cssMode: !1, + updateOnWindowResize: !0, + resizeObserver: !0, + nested: !1, + createElements: !1, + eventsPrefix: 'swiper', + enabled: !0, + focusableElements: 'input, select, option, textarea, button, video, label', + width: null, + height: null, + preventInteractionOnTransition: !1, + userAgent: null, + url: null, + edgeSwipeDetection: !1, + edgeSwipeThreshold: 20, + autoHeight: !1, + setWrapperSize: !1, + virtualTranslate: !1, + effect: 'slide', + breakpoints: void 0, + breakpointsBase: 'window', + spaceBetween: 0, + slidesPerView: 1, + slidesPerGroup: 1, + slidesPerGroupSkip: 0, + slidesPerGroupAuto: !1, + centeredSlides: !1, + centeredSlidesBounds: !1, + slidesOffsetBefore: 0, + slidesOffsetAfter: 0, + normalizeSlideIndex: !0, + centerInsufficientSlides: !1, + watchOverflow: !0, + roundLengths: !1, + touchRatio: 1, + touchAngle: 45, + simulateTouch: !0, + shortSwipes: !0, + longSwipes: !0, + longSwipesRatio: 0.5, + longSwipesMs: 300, + followFinger: !0, + allowTouchMove: !0, + threshold: 5, + touchMoveStopPropagation: !1, + touchStartPreventDefault: !0, + touchStartForcePreventDefault: !1, + touchReleaseOnEdges: !1, + uniqueNavElements: !0, + resistance: !0, + resistanceRatio: 0.85, + watchSlidesProgress: !1, + grabCursor: !1, + preventClicks: !0, + preventClicksPropagation: !0, + slideToClickedSlide: !1, + loop: !1, + loopAddBlankSlides: !0, + loopAdditionalSlides: 0, + loopPreventsSliding: !0, + rewind: !1, + allowSlidePrev: !0, + allowSlideNext: !0, + swipeHandler: null, + noSwiping: !0, + noSwipingClass: 'swiper-no-swiping', + noSwipingSelector: null, + passiveListeners: !0, + maxBackfaceHiddenSlides: 10, + containerModifierClass: 'swiper-', + slideClass: 'swiper-slide', + slideBlankClass: 'swiper-slide-blank', + slideActiveClass: 'swiper-slide-active', + slideVisibleClass: 'swiper-slide-visible', + slideFullyVisibleClass: 'swiper-slide-fully-visible', + slideNextClass: 'swiper-slide-next', + slidePrevClass: 'swiper-slide-prev', + wrapperClass: 'swiper-wrapper', + lazyPreloaderClass: 'swiper-lazy-preloader', + lazyPreloadPrevNext: 0, + runCallbacksOnInit: !0, + _emitClasses: !1, + } + function ae(e, t) { + return function (s = {}) { + const a = Object.keys(s)[0], + i = s[a] + 'object' == typeof i && null !== i + ? (!0 === e[a] && (e[a] = { enabled: !0 }), + 'navigation' === a && + e[a] && + e[a].enabled && + !e[a].prevEl && + !e[a].nextEl && + (e[a].auto = !0), + ['pagination', 'scrollbar'].indexOf(a) >= 0 && + e[a] && + e[a].enabled && + !e[a].el && + (e[a].auto = !0), + a in e && 'enabled' in i + ? ('object' != typeof e[a] || + 'enabled' in e[a] || + (e[a].enabled = !0), + e[a] || (e[a] = { enabled: !1 }), + u(t, s)) + : u(t, s)) + : u(t, s) + } + } + const ie = { + eventsEmitter: O, + update: H, + translate: N, + transition: { + setTransition: function (e, t) { + const s = this + s.params.cssMode || + ((s.wrapperEl.style.transitionDuration = `${e}ms`), + (s.wrapperEl.style.transitionDelay = 0 === e ? '0ms' : '')), + s.emit('setTransition', e, t) + }, + transitionStart: function (e = !0, t) { + const s = this, + { params: a } = s + a.cssMode || + (a.autoHeight && s.updateAutoHeight(), + R({ swiper: s, runCallbacks: e, direction: t, step: 'Start' })) + }, + transitionEnd: function (e = !0, t) { + const s = this, + { params: a } = s + ;(s.animating = !1), + a.cssMode || + (s.setTransition(0), + R({ swiper: s, runCallbacks: e, direction: t, step: 'End' })) + }, + }, + slide: V, + loop: q, + grabCursor: { + setGrabCursor: function (e) { + const t = this + if ( + !t.params.simulateTouch || + (t.params.watchOverflow && t.isLocked) || + t.params.cssMode + ) + return + const s = + 'container' === t.params.touchEventsTarget ? t.el : t.wrapperEl + t.isElement && (t.__preventObserver__ = !0), + (s.style.cursor = 'move'), + (s.style.cursor = e ? 'grabbing' : 'grab'), + t.isElement && + requestAnimationFrame(() => { + t.__preventObserver__ = !1 + }) + }, + unsetGrabCursor: function () { + const e = this + ;(e.params.watchOverflow && e.isLocked) || + e.params.cssMode || + (e.isElement && (e.__preventObserver__ = !0), + (e[ + 'container' === e.params.touchEventsTarget ? 'el' : 'wrapperEl' + ].style.cursor = ''), + e.isElement && + requestAnimationFrame(() => { + e.__preventObserver__ = !1 + })) + }, + }, + events: { + attachEvents: function () { + const e = this, + { params: t } = e + ;(e.onTouchStart = F.bind(e)), + (e.onTouchMove = W.bind(e)), + (e.onTouchEnd = j.bind(e)), + (e.onDocumentTouchStart = J.bind(e)), + t.cssMode && (e.onScroll = Z.bind(e)), + (e.onClick = K.bind(e)), + (e.onLoad = Q.bind(e)), + ee(e, 'on') + }, + detachEvents: function () { + ee(this, 'off') + }, + }, + breakpoints: { + setBreakpoint: function () { + const e = this, + { realIndex: t, initialized: s, params: i, el: r } = e, + n = i.breakpoints + if (!n || (n && 0 === Object.keys(n).length)) return + const l = a(), + o = + 'window' !== i.breakpointsBase && i.breakpointsBase + ? 'container' + : i.breakpointsBase, + d = + ['window', 'container'].includes(i.breakpointsBase) || + !i.breakpointsBase + ? e.el + : l.querySelector(i.breakpointsBase), + c = e.getBreakpoint(n, o, d) + if (!c || e.currentBreakpoint === c) return + const p = (c in n ? n[c] : void 0) || e.originalParams, + m = te(e, i), + h = te(e, p), + f = e.params.grabCursor, + g = p.grabCursor, + v = i.enabled + m && !h + ? (r.classList.remove( + `${i.containerModifierClass}grid`, + `${i.containerModifierClass}grid-column` + ), + e.emitContainerClasses()) + : !m && + h && + (r.classList.add(`${i.containerModifierClass}grid`), + ((p.grid.fill && 'column' === p.grid.fill) || + (!p.grid.fill && 'column' === i.grid.fill)) && + r.classList.add(`${i.containerModifierClass}grid-column`), + e.emitContainerClasses()), + f && !g ? e.unsetGrabCursor() : !f && g && e.setGrabCursor(), + ['navigation', 'pagination', 'scrollbar'].forEach((t) => { + if (void 0 === p[t]) return + const s = i[t] && i[t].enabled, + a = p[t] && p[t].enabled + s && !a && e[t].disable(), !s && a && e[t].enable() + }) + const w = p.direction && p.direction !== i.direction, + b = i.loop && (p.slidesPerView !== i.slidesPerView || w), + y = i.loop + w && s && e.changeDirection(), u(e.params, p) + const E = e.params.enabled, + x = e.params.loop + Object.assign(e, { + allowTouchMove: e.params.allowTouchMove, + allowSlideNext: e.params.allowSlideNext, + allowSlidePrev: e.params.allowSlidePrev, + }), + v && !E ? e.disable() : !v && E && e.enable(), + (e.currentBreakpoint = c), + e.emit('_beforeBreakpoint', p), + s && + (b + ? (e.loopDestroy(), e.loopCreate(t), e.updateSlides()) + : !y && x + ? (e.loopCreate(t), e.updateSlides()) + : y && !x && e.loopDestroy()), + e.emit('breakpoint', p) + }, + getBreakpoint: function (e, t = 'window', s) { + if (!e || ('container' === t && !s)) return + let a = !1 + const i = r(), + n = 'window' === t ? i.innerHeight : s.clientHeight, + l = Object.keys(e).map((e) => { + if ('string' == typeof e && 0 === e.indexOf('@')) { + const t = parseFloat(e.substr(1)) + return { value: n * t, point: e } + } + return { value: e, point: e } + }) + l.sort((e, t) => parseInt(e.value, 10) - parseInt(t.value, 10)) + for (let e = 0; e < l.length; e += 1) { + const { point: r, value: n } = l[e] + 'window' === t + ? i.matchMedia(`(min-width: ${n}px)`).matches && (a = r) + : n <= s.clientWidth && (a = r) + } + return a || 'max' + }, + }, + checkOverflow: { + checkOverflow: function () { + const e = this, + { isLocked: t, params: s } = e, + { slidesOffsetBefore: a } = s + if (a) { + const t = e.slides.length - 1, + s = e.slidesGrid[t] + e.slidesSizesGrid[t] + 2 * a + e.isLocked = e.size > s + } else e.isLocked = 1 === e.snapGrid.length + !0 === s.allowSlideNext && (e.allowSlideNext = !e.isLocked), + !0 === s.allowSlidePrev && (e.allowSlidePrev = !e.isLocked), + t && t !== e.isLocked && (e.isEnd = !1), + t !== e.isLocked && e.emit(e.isLocked ? 'lock' : 'unlock') + }, + }, + classes: { + addClasses: function () { + const e = this, + { classNames: t, params: s, rtl: a, el: i, device: r } = e, + n = (function (e, t) { + const s = [] + return ( + e.forEach((e) => { + 'object' == typeof e + ? Object.keys(e).forEach((a) => { + e[a] && s.push(t + a) + }) + : 'string' == typeof e && s.push(t + e) + }), + s + ) + })( + [ + 'initialized', + s.direction, + { 'free-mode': e.params.freeMode && s.freeMode.enabled }, + { autoheight: s.autoHeight }, + { rtl: a }, + { grid: s.grid && s.grid.rows > 1 }, + { + 'grid-column': + s.grid && s.grid.rows > 1 && 'column' === s.grid.fill, + }, + { android: r.android }, + { ios: r.ios }, + { 'css-mode': s.cssMode }, + { centered: s.cssMode && s.centeredSlides }, + { 'watch-progress': s.watchSlidesProgress }, + ], + s.containerModifierClass + ) + t.push(...n), i.classList.add(...t), e.emitContainerClasses() + }, + removeClasses: function () { + const { el: e, classNames: t } = this + e && + 'string' != typeof e && + (e.classList.remove(...t), this.emitContainerClasses()) + }, + }, + }, + re = {} + class ne { + constructor(...e) { + let t, s + 1 === e.length && + e[0].constructor && + 'Object' === Object.prototype.toString.call(e[0]).slice(8, -1) + ? (s = e[0]) + : ([t, s] = e), + s || (s = {}), + (s = u({}, s)), + t && !s.el && (s.el = t) + const i = a() + if ( + s.el && + 'string' == typeof s.el && + i.querySelectorAll(s.el).length > 1 + ) { + const e = [] + return ( + i.querySelectorAll(s.el).forEach((t) => { + const a = u({}, s, { el: t }) + e.push(new ne(a)) + }), + e + ) + } + const r = this + ;(r.__swiper__ = !0), + (r.support = A()), + (r.device = $({ userAgent: s.userAgent })), + (r.browser = k()), + (r.eventsListeners = {}), + (r.eventsAnyListeners = []), + (r.modules = [...r.__modules__]), + s.modules && Array.isArray(s.modules) && r.modules.push(...s.modules) + const n = {} + r.modules.forEach((e) => { + e({ + params: s, + swiper: r, + extendParams: ae(s, n), + on: r.on.bind(r), + once: r.once.bind(r), + off: r.off.bind(r), + emit: r.emit.bind(r), + }) + }) + const l = u({}, se, n) + return ( + (r.params = u({}, l, re, s)), + (r.originalParams = u({}, r.params)), + (r.passedParams = u({}, s)), + r.params && + r.params.on && + Object.keys(r.params.on).forEach((e) => { + r.on(e, r.params.on[e]) + }), + r.params && r.params.onAny && r.onAny(r.params.onAny), + Object.assign(r, { + enabled: r.params.enabled, + el: t, + classNames: [], + slides: [], + slidesGrid: [], + snapGrid: [], + slidesSizesGrid: [], + isHorizontal: () => 'horizontal' === r.params.direction, + isVertical: () => 'vertical' === r.params.direction, + activeIndex: 0, + realIndex: 0, + isBeginning: !0, + isEnd: !1, + translate: 0, + previousTranslate: 0, + progress: 0, + velocity: 0, + animating: !1, + cssOverflowAdjustment() { + return Math.trunc(this.translate / 2 ** 23) * 2 ** 23 + }, + allowSlideNext: r.params.allowSlideNext, + allowSlidePrev: r.params.allowSlidePrev, + touchEventsData: { + isTouched: void 0, + isMoved: void 0, + allowTouchCallbacks: void 0, + touchStartTime: void 0, + isScrolling: void 0, + currentTranslate: void 0, + startTranslate: void 0, + allowThresholdMove: void 0, + focusableElements: r.params.focusableElements, + lastClickTime: 0, + clickTimeout: void 0, + velocities: [], + allowMomentumBounce: void 0, + startMoving: void 0, + pointerId: null, + touchId: null, + }, + allowClick: !0, + allowTouchMove: r.params.allowTouchMove, + touches: { startX: 0, startY: 0, currentX: 0, currentY: 0, diff: 0 }, + imagesToLoad: [], + imagesLoaded: 0, + }), + r.emit('_swiper'), + r.params.init && r.init(), + r + ) + } + getDirectionLabel(e) { + return this.isHorizontal() + ? e + : { + width: 'height', + 'margin-top': 'margin-left', + 'margin-bottom ': 'margin-right', + 'margin-left': 'margin-top', + 'margin-right': 'margin-bottom', + 'padding-left': 'padding-top', + 'padding-right': 'padding-bottom', + marginRight: 'marginBottom', + }[e] + } + getSlideIndex(e) { + const { slidesEl: t, params: s } = this, + a = E(g(t, `.${s.slideClass}, swiper-slide`)[0]) + return E(e) - a + } + getSlideIndexByData(e) { + return this.getSlideIndex( + this.slides.find( + (t) => 1 * t.getAttribute('data-swiper-slide-index') === e + ) + ) + } + getSlideIndexWhenGrid(e) { + return ( + this.grid && + this.params.grid && + this.params.grid.rows > 1 && + ('column' === this.params.grid.fill + ? (e = Math.floor(e / this.params.grid.rows)) + : 'row' === this.params.grid.fill && + (e %= Math.ceil(this.slides.length / this.params.grid.rows))), + e + ) + } + recalcSlides() { + const { slidesEl: e, params: t } = this + this.slides = g(e, `.${t.slideClass}, swiper-slide`) + } + enable() { + const e = this + e.enabled || + ((e.enabled = !0), + e.params.grabCursor && e.setGrabCursor(), + e.emit('enable')) + } + disable() { + const e = this + e.enabled && + ((e.enabled = !1), + e.params.grabCursor && e.unsetGrabCursor(), + e.emit('disable')) + } + setProgress(e, t) { + const s = this + e = Math.min(Math.max(e, 0), 1) + const a = s.minTranslate(), + i = (s.maxTranslate() - a) * e + a + s.translateTo(i, void 0 === t ? 0 : t), + s.updateActiveIndex(), + s.updateSlidesClasses() + } + emitContainerClasses() { + const e = this + if (!e.params._emitClasses || !e.el) return + const t = e.el.className + .split(' ') + .filter( + (t) => + 0 === t.indexOf('swiper') || + 0 === t.indexOf(e.params.containerModifierClass) + ) + e.emit('_containerClasses', t.join(' ')) + } + getSlideClasses(e) { + const t = this + return t.destroyed + ? '' + : e.className + .split(' ') + .filter( + (e) => + 0 === e.indexOf('swiper-slide') || + 0 === e.indexOf(t.params.slideClass) + ) + .join(' ') + } + emitSlidesClasses() { + const e = this + if (!e.params._emitClasses || !e.el) return + const t = [] + e.slides.forEach((s) => { + const a = e.getSlideClasses(s) + t.push({ slideEl: s, classNames: a }), e.emit('_slideClass', s, a) + }), + e.emit('_slideClasses', t) + } + slidesPerViewDynamic(e = 'current', t = !1) { + const { + params: s, + slides: a, + slidesGrid: i, + slidesSizesGrid: r, + size: n, + activeIndex: l, + } = this + let o = 1 + if ('number' == typeof s.slidesPerView) return s.slidesPerView + if (s.centeredSlides) { + let e, + t = a[l] ? Math.ceil(a[l].swiperSlideSize) : 0 + for (let s = l + 1; s < a.length; s += 1) + a[s] && + !e && + ((t += Math.ceil(a[s].swiperSlideSize)), + (o += 1), + t > n && (e = !0)) + for (let s = l - 1; s >= 0; s -= 1) + a[s] && + !e && + ((t += a[s].swiperSlideSize), (o += 1), t > n && (e = !0)) + } else if ('current' === e) + for (let e = l + 1; e < a.length; e += 1) { + ;(t ? i[e] + r[e] - i[l] < n : i[e] - i[l] < n) && (o += 1) + } + else + for (let e = l - 1; e >= 0; e -= 1) { + i[l] - i[e] < n && (o += 1) + } + return o + } + update() { + const e = this + if (!e || e.destroyed) return + const { snapGrid: t, params: s } = e + function a() { + const t = e.rtlTranslate ? -1 * e.translate : e.translate, + s = Math.min(Math.max(t, e.maxTranslate()), e.minTranslate()) + e.setTranslate(s), e.updateActiveIndex(), e.updateSlidesClasses() + } + let i + if ( + (s.breakpoints && e.setBreakpoint(), + [...e.el.querySelectorAll('[loading="lazy"]')].forEach((t) => { + t.complete && X(e, t) + }), + e.updateSize(), + e.updateSlides(), + e.updateProgress(), + e.updateSlidesClasses(), + s.freeMode && s.freeMode.enabled && !s.cssMode) + ) + a(), s.autoHeight && e.updateAutoHeight() + else { + if ( + ('auto' === s.slidesPerView || s.slidesPerView > 1) && + e.isEnd && + !s.centeredSlides + ) { + const t = e.virtual && s.virtual.enabled ? e.virtual.slides : e.slides + i = e.slideTo(t.length - 1, 0, !1, !0) + } else i = e.slideTo(e.activeIndex, 0, !1, !0) + i || a() + } + s.watchOverflow && t !== e.snapGrid && e.checkOverflow(), e.emit('update') + } + changeDirection(e, t = !0) { + const s = this, + a = s.params.direction + return ( + e || (e = 'horizontal' === a ? 'vertical' : 'horizontal'), + e === a || + ('horizontal' !== e && 'vertical' !== e) || + (s.el.classList.remove(`${s.params.containerModifierClass}${a}`), + s.el.classList.add(`${s.params.containerModifierClass}${e}`), + s.emitContainerClasses(), + (s.params.direction = e), + s.slides.forEach((t) => { + 'vertical' === e ? (t.style.width = '') : (t.style.height = '') + }), + s.emit('changeDirection'), + t && s.update()), + s + ) + } + changeLanguageDirection(e) { + const t = this + ;(t.rtl && 'rtl' === e) || + (!t.rtl && 'ltr' === e) || + ((t.rtl = 'rtl' === e), + (t.rtlTranslate = 'horizontal' === t.params.direction && t.rtl), + t.rtl + ? (t.el.classList.add(`${t.params.containerModifierClass}rtl`), + (t.el.dir = 'rtl')) + : (t.el.classList.remove(`${t.params.containerModifierClass}rtl`), + (t.el.dir = 'ltr')), + t.update()) + } + mount(e) { + const t = this + if (t.mounted) return !0 + let s = e || t.params.el + if (('string' == typeof s && (s = document.querySelector(s)), !s)) + return !1 + ;(s.swiper = t), + s.parentNode && + s.parentNode.host && + s.parentNode.host.nodeName === + t.params.swiperElementNodeName.toUpperCase() && + (t.isElement = !0) + const a = () => + `.${(t.params.wrapperClass || '').trim().split(' ').join('.')}` + let i = (() => { + if (s && s.shadowRoot && s.shadowRoot.querySelector) { + return s.shadowRoot.querySelector(a()) + } + return g(s, a())[0] + })() + return ( + !i && + t.params.createElements && + ((i = w('div', t.params.wrapperClass)), + s.append(i), + g(s, `.${t.params.slideClass}`).forEach((e) => { + i.append(e) + })), + Object.assign(t, { + el: s, + wrapperEl: i, + slidesEl: + t.isElement && !s.parentNode.host.slideSlots + ? s.parentNode.host + : i, + hostEl: t.isElement ? s.parentNode.host : s, + mounted: !0, + rtl: 'rtl' === s.dir.toLowerCase() || 'rtl' === y(s, 'direction'), + rtlTranslate: + 'horizontal' === t.params.direction && + ('rtl' === s.dir.toLowerCase() || 'rtl' === y(s, 'direction')), + wrongRTL: '-webkit-box' === y(i, 'display'), + }), + !0 + ) + } + init(e) { + const t = this + if (t.initialized) return t + if (!1 === t.mount(e)) return t + t.emit('beforeInit'), + t.params.breakpoints && t.setBreakpoint(), + t.addClasses(), + t.updateSize(), + t.updateSlides(), + t.params.watchOverflow && t.checkOverflow(), + t.params.grabCursor && t.enabled && t.setGrabCursor(), + t.params.loop && t.virtual && t.params.virtual.enabled + ? t.slideTo( + t.params.initialSlide + t.virtual.slidesBefore, + 0, + t.params.runCallbacksOnInit, + !1, + !0 + ) + : t.slideTo( + t.params.initialSlide, + 0, + t.params.runCallbacksOnInit, + !1, + !0 + ), + t.params.loop && t.loopCreate(void 0, !0), + t.attachEvents() + const s = [...t.el.querySelectorAll('[loading="lazy"]')] + return ( + t.isElement && s.push(...t.hostEl.querySelectorAll('[loading="lazy"]')), + s.forEach((e) => { + e.complete + ? X(t, e) + : e.addEventListener('load', (e) => { + X(t, e.target) + }) + }), + Y(t), + (t.initialized = !0), + Y(t), + t.emit('init'), + t.emit('afterInit'), + t + ) + } + destroy(e = !0, t = !0) { + const s = this, + { params: a, el: i, wrapperEl: r, slides: n } = s + return ( + void 0 === s.params || + s.destroyed || + (s.emit('beforeDestroy'), + (s.initialized = !1), + s.detachEvents(), + a.loop && s.loopDestroy(), + t && + (s.removeClasses(), + i && 'string' != typeof i && i.removeAttribute('style'), + r && r.removeAttribute('style'), + n && + n.length && + n.forEach((e) => { + e.classList.remove( + a.slideVisibleClass, + a.slideFullyVisibleClass, + a.slideActiveClass, + a.slideNextClass, + a.slidePrevClass + ), + e.removeAttribute('style'), + e.removeAttribute('data-swiper-slide-index') + })), + s.emit('destroy'), + Object.keys(s.eventsListeners).forEach((e) => { + s.off(e) + }), + !1 !== e && + (s.el && 'string' != typeof s.el && (s.el.swiper = null), + (function (e) { + const t = e + Object.keys(t).forEach((e) => { + try { + t[e] = null + } catch (e) {} + try { + delete t[e] + } catch (e) {} + }) + })(s)), + (s.destroyed = !0)), + null + ) + } + static extendDefaults(e) { + u(re, e) + } + static get extendedDefaults() { + return re + } + static get defaults() { + return se + } + static installModule(e) { + ne.prototype.__modules__ || (ne.prototype.__modules__ = []) + const t = ne.prototype.__modules__ + 'function' == typeof e && t.indexOf(e) < 0 && t.push(e) + } + static use(e) { + return Array.isArray(e) + ? (e.forEach((e) => ne.installModule(e)), ne) + : (ne.installModule(e), ne) + } + } + function le(e, t, s, a) { + return ( + e.params.createElements && + Object.keys(a).forEach((i) => { + if (!s[i] && !0 === s.auto) { + let r = g(e.el, `.${a[i]}`)[0] + r || ((r = w('div', a[i])), (r.className = a[i]), e.el.append(r)), + (s[i] = r), + (t[i] = r) + } + }), + s + ) + } + Object.keys(ie).forEach((e) => { + Object.keys(ie[e]).forEach((t) => { + ne.prototype[t] = ie[e][t] + }) + }), + ne.use([ + function ({ swiper: e, on: t, emit: s }) { + const a = r() + let i = null, + n = null + const l = () => { + e && + !e.destroyed && + e.initialized && + (s('beforeResize'), s('resize')) + }, + o = () => { + e && !e.destroyed && e.initialized && s('orientationchange') + } + t('init', () => { + e.params.resizeObserver && void 0 !== a.ResizeObserver + ? e && + !e.destroyed && + e.initialized && + ((i = new ResizeObserver((t) => { + n = a.requestAnimationFrame(() => { + const { width: s, height: a } = e + let i = s, + r = a + t.forEach( + ({ contentBoxSize: t, contentRect: s, target: a }) => { + ;(a && a !== e.el) || + ((i = s ? s.width : (t[0] || t).inlineSize), + (r = s ? s.height : (t[0] || t).blockSize)) + } + ), + (i === s && r === a) || l() + }) + })), + i.observe(e.el)) + : (a.addEventListener('resize', l), + a.addEventListener('orientationchange', o)) + }), + t('destroy', () => { + n && a.cancelAnimationFrame(n), + i && i.unobserve && e.el && (i.unobserve(e.el), (i = null)), + a.removeEventListener('resize', l), + a.removeEventListener('orientationchange', o) + }) + }, + function ({ swiper: e, extendParams: t, on: s, emit: a }) { + const i = [], + n = r(), + l = (t, s = {}) => { + const r = new (n.MutationObserver || n.WebkitMutationObserver)( + (t) => { + if (e.__preventObserver__) return + if (1 === t.length) return void a('observerUpdate', t[0]) + const s = function () { + a('observerUpdate', t[0]) + } + n.requestAnimationFrame + ? n.requestAnimationFrame(s) + : n.setTimeout(s, 0) + } + ) + r.observe(t, { + attributes: void 0 === s.attributes || s.attributes, + childList: e.isElement || (void 0 === s.childList || s).childList, + characterData: void 0 === s.characterData || s.characterData, + }), + i.push(r) + } + t({ observer: !1, observeParents: !1, observeSlideChildren: !1 }), + s('init', () => { + if (e.params.observer) { + if (e.params.observeParents) { + const t = x(e.hostEl) + for (let e = 0; e < t.length; e += 1) l(t[e]) + } + l(e.hostEl, { childList: e.params.observeSlideChildren }), + l(e.wrapperEl, { attributes: !1 }) + } + }), + s('destroy', () => { + i.forEach((e) => { + e.disconnect() + }), + i.splice(0, i.length) + }) + }, + ]) + const oe = + '' + function de(e = '') { + return `.${e + .trim() + .replace(/([\.:!+\/()[\]])/g, '\\$1') + .replace(/ /g, '.')}` + } + function ce(e) { + const t = this, + { params: s, slidesEl: a } = t + s.loop && t.loopDestroy() + const i = (e) => { + if ('string' == typeof e) { + const t = document.createElement('div') + P(t, e), a.append(t.children[0]), P(t, '') + } else a.append(e) + } + if ('object' == typeof e && 'length' in e) + for (let t = 0; t < e.length; t += 1) e[t] && i(e[t]) + else i(e) + t.recalcSlides(), + s.loop && t.loopCreate(), + (s.observer && !t.isElement) || t.update() + } + function pe(e) { + const t = this, + { params: s, activeIndex: a, slidesEl: i } = t + s.loop && t.loopDestroy() + let r = a + 1 + const n = (e) => { + if ('string' == typeof e) { + const t = document.createElement('div') + P(t, e), i.prepend(t.children[0]), P(t, '') + } else i.prepend(e) + } + if ('object' == typeof e && 'length' in e) { + for (let t = 0; t < e.length; t += 1) e[t] && n(e[t]) + r = a + e.length + } else n(e) + t.recalcSlides(), + s.loop && t.loopCreate(), + (s.observer && !t.isElement) || t.update(), + t.slideTo(r, 0, !1) + } + function ue(e, t) { + const s = this, + { params: a, activeIndex: i, slidesEl: r } = s + let n = i + a.loop && ((n -= s.loopedSlides), s.loopDestroy(), s.recalcSlides()) + const l = s.slides.length + if (e <= 0) return void s.prependSlide(t) + if (e >= l) return void s.appendSlide(t) + let o = n > e ? n + 1 : n + const d = [] + for (let t = l - 1; t >= e; t -= 1) { + const e = s.slides[t] + e.remove(), d.unshift(e) + } + if ('object' == typeof t && 'length' in t) { + for (let e = 0; e < t.length; e += 1) t[e] && r.append(t[e]) + o = n > e ? n + t.length : n + } else r.append(t) + for (let e = 0; e < d.length; e += 1) r.append(d[e]) + s.recalcSlides(), + a.loop && s.loopCreate(), + (a.observer && !s.isElement) || s.update(), + a.loop ? s.slideTo(o + s.loopedSlides, 0, !1) : s.slideTo(o, 0, !1) + } + function me(e) { + const t = this, + { params: s, activeIndex: a } = t + let i = a + s.loop && ((i -= t.loopedSlides), t.loopDestroy()) + let r, + n = i + if ('object' == typeof e && 'length' in e) { + for (let s = 0; s < e.length; s += 1) + (r = e[s]), t.slides[r] && t.slides[r].remove(), r < n && (n -= 1) + n = Math.max(n, 0) + } else + (r = e), + t.slides[r] && t.slides[r].remove(), + r < n && (n -= 1), + (n = Math.max(n, 0)) + t.recalcSlides(), + s.loop && t.loopCreate(), + (s.observer && !t.isElement) || t.update(), + s.loop ? t.slideTo(n + t.loopedSlides, 0, !1) : t.slideTo(n, 0, !1) + } + function he() { + const e = this, + t = [] + for (let s = 0; s < e.slides.length; s += 1) t.push(s) + e.removeSlide(t) + } + function fe(e) { + const { + effect: t, + swiper: s, + on: a, + setTranslate: i, + setTransition: r, + overwriteParams: n, + perspective: l, + recreateShadows: o, + getEffectParams: d, + } = e + let c + a('beforeInit', () => { + if (s.params.effect !== t) return + s.classNames.push(`${s.params.containerModifierClass}${t}`), + l && l() && s.classNames.push(`${s.params.containerModifierClass}3d`) + const e = n ? n() : {} + Object.assign(s.params, e), Object.assign(s.originalParams, e) + }), + a('setTranslate _virtualUpdated', () => { + s.params.effect === t && i() + }), + a('setTransition', (e, a) => { + s.params.effect === t && r(a) + }), + a('transitionEnd', () => { + if (s.params.effect === t && o) { + if (!d || !d().slideShadows) return + s.slides.forEach((e) => { + e.querySelectorAll( + '.swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left' + ).forEach((e) => e.remove()) + }), + o() + } + }), + a('virtualUpdate', () => { + s.params.effect === t && + (s.slides.length || (c = !0), + requestAnimationFrame(() => { + c && s.slides && s.slides.length && (i(), (c = !1)) + })) + }) + } + function ge(e, t) { + const s = f(t) + return ( + s !== t && + ((s.style.backfaceVisibility = 'hidden'), + (s.style['-webkit-backface-visibility'] = 'hidden')), + s + ) + } + function ve({ swiper: e, duration: t, transformElements: s, allSlides: a }) { + const { activeIndex: i } = e + if (e.params.virtualTranslate && 0 !== t) { + let t, + r = !1 + ;(t = a + ? s + : s.filter((t) => { + const s = t.classList.contains('swiper-slide-transform') + ? ((t) => { + if (!t.parentElement) + return e.slides.find( + (e) => e.shadowRoot && e.shadowRoot === t.parentNode + ) + return t.parentElement + })(t) + : t + return e.getSlideIndex(s) === i + })), + t.forEach((t) => { + S(t, () => { + if (r) return + if (!e || e.destroyed) return + ;(r = !0), (e.animating = !1) + const t = new window.CustomEvent('transitionend', { + bubbles: !0, + cancelable: !0, + }) + e.wrapperEl.dispatchEvent(t) + }) + }) + } + } + function we(e, t, s) { + const a = `swiper-slide-shadow${s ? `-${s}` : ''}${ + e ? ` swiper-slide-shadow-${e}` : '' + }`, + i = f(t) + let r = i.querySelector(`.${a.split(' ').join('.')}`) + return r || ((r = w('div', a.split(' '))), i.append(r)), r + } + const be = [ + function ({ swiper: e, extendParams: t, on: s, emit: i }) { + let r + t({ + virtual: { + enabled: !1, + slides: [], + cache: !0, + slidesPerViewAutoSlideSize: 320, + renderSlide: null, + renderExternal: null, + renderExternalUpdate: !0, + addSlidesBefore: 0, + addSlidesAfter: 0, + }, + }) + const n = a() + e.virtual = { + cache: {}, + from: void 0, + to: void 0, + slides: [], + offset: 0, + slidesGrid: [], + } + const l = n.createElement('div') + function o(t, s) { + const a = e.params.virtual + if (a.cache && e.virtual.cache[s]) return e.virtual.cache[s] + let i + return ( + a.renderSlide + ? ((i = a.renderSlide.call(e, t, s)), + 'string' == typeof i && (P(l, i), (i = l.children[0]))) + : (i = e.isElement + ? w('swiper-slide') + : w('div', e.params.slideClass)), + i.setAttribute('data-swiper-slide-index', s), + a.renderSlide || P(i, t), + a.cache && (e.virtual.cache[s] = i), + i + ) + } + function d(t, s, a) { + const { + slidesPerGroup: r, + centeredSlides: n, + slidesPerView: l, + loop: d, + initialSlide: c, + } = e.params + if (s && !d && c > 0) return + const { + addSlidesBefore: p, + addSlidesAfter: u, + slidesPerViewAutoSlideSize: m, + } = e.params.virtual, + { from: h, to: f, slides: v, slidesGrid: w, offset: b } = e.virtual + e.params.cssMode || e.updateActiveIndex() + const y = void 0 === a ? e.activeIndex || 0 : a + let E, x, S, T + if ( + ((E = e.rtlTranslate ? 'right' : e.isHorizontal() ? 'left' : 'top'), + 'auto' === l) + ) + if (m) { + let t = e.size + t || + (t = e.isHorizontal() + ? e.el.getBoundingClientRect().width + : e.el.getBoundingClientRect().height), + (x = Math.max(1, Math.ceil(t / m))) + } else x = 1 + else x = l + n + ? ((S = Math.floor(x / 2) + r + u), (T = Math.floor(x / 2) + r + p)) + : ((S = x + (r - 1) + u), (T = (d ? x : r) + p)) + let M = y - T, + C = y + S + d || ((M = Math.max(M, 0)), (C = Math.min(C, v.length - 1))) + let P = (e.slidesGrid[M] || 0) - (e.slidesGrid[0] || 0) + function L() { + e.updateSlides(), + e.updateProgress(), + e.updateSlidesClasses(), + i('virtualUpdate') + } + if ( + (d && y >= T + ? ((M -= T), n || (P += e.slidesGrid[0])) + : d && y < T && ((M = -T), n && (P += e.slidesGrid[0])), + Object.assign(e.virtual, { + from: M, + to: C, + offset: P, + slidesGrid: e.slidesGrid, + slidesBefore: T, + slidesAfter: S, + }), + h === M && f === C && !t) + ) + return ( + e.slidesGrid !== w && + P !== b && + e.slides.forEach((t) => { + t.style[E] = P - Math.abs(e.cssOverflowAdjustment()) + 'px' + }), + e.updateProgress(), + void i('virtualUpdate') + ) + if (e.params.virtual.renderExternal) + return ( + e.params.virtual.renderExternal.call(e, { + offset: P, + from: M, + to: C, + slides: (function () { + const e = [] + for (let t = M; t <= C; t += 1) e.push(v[t]) + return e + })(), + }), + void (e.params.virtual.renderExternalUpdate + ? L() + : i('virtualUpdate')) + ) + const I = [], + z = [], + A = (e) => { + let t = e + return ( + e < 0 ? (t = v.length + e) : t >= v.length && (t -= v.length), t + ) + } + if (t) + e.slides + .filter((t) => t.matches(`.${e.params.slideClass}, swiper-slide`)) + .forEach((e) => { + e.remove() + }) + else + for (let t = h; t <= f; t += 1) + if (t < M || t > C) { + const s = A(t) + e.slides + .filter((t) => + t.matches( + `.${e.params.slideClass}[data-swiper-slide-index="${s}"], swiper-slide[data-swiper-slide-index="${s}"]` + ) + ) + .forEach((e) => { + e.remove() + }) + } + const $ = d ? -v.length : 0, + k = d ? 2 * v.length : v.length + for (let e = $; e < k; e += 1) + if (e >= M && e <= C) { + const s = A(e) + void 0 === f || t + ? z.push(s) + : (e > f && z.push(s), e < h && I.push(s)) + } + if ( + (z.forEach((t) => { + e.slidesEl.append(o(v[t], t)) + }), + d) + ) + for (let t = I.length - 1; t >= 0; t -= 1) { + const s = I[t] + e.slidesEl.prepend(o(v[s], s)) + } + else + I.sort((e, t) => t - e), + I.forEach((t) => { + e.slidesEl.prepend(o(v[t], t)) + }) + g(e.slidesEl, '.swiper-slide, swiper-slide').forEach((t) => { + t.style[E] = P - Math.abs(e.cssOverflowAdjustment()) + 'px' + }), + L() + } + s('beforeInit', () => { + if (!e.params.virtual.enabled) return + let t + if (void 0 === e.passedParams.virtual.slides) { + const s = [...e.slidesEl.children].filter((t) => + t.matches(`.${e.params.slideClass}, swiper-slide`) + ) + s && + s.length && + ((e.virtual.slides = [...s]), + (t = !0), + s.forEach((t, s) => { + t.setAttribute('data-swiper-slide-index', s), + (e.virtual.cache[s] = t), + t.remove() + })) + } + t || (e.virtual.slides = e.params.virtual.slides), + e.classNames.push(`${e.params.containerModifierClass}virtual`), + (e.params.watchSlidesProgress = !0), + (e.originalParams.watchSlidesProgress = !0), + d(!1, !0) + }), + s('setTranslate', () => { + e.params.virtual.enabled && + (e.params.cssMode && !e._immediateVirtual + ? (clearTimeout(r), + (r = setTimeout(() => { + d() + }, 100))) + : d()) + }), + s('init update resize', () => { + e.params.virtual.enabled && + e.params.cssMode && + m(e.wrapperEl, '--swiper-virtual-size', `${e.virtualSize}px`) + }), + Object.assign(e.virtual, { + appendSlide: function (t) { + if ('object' == typeof t && 'length' in t) + for (let s = 0; s < t.length; s += 1) + t[s] && e.virtual.slides.push(t[s]) + else e.virtual.slides.push(t) + d(!0) + }, + prependSlide: function (t) { + const s = e.activeIndex + let a = s + 1, + i = 1 + if (Array.isArray(t)) { + for (let s = 0; s < t.length; s += 1) + t[s] && e.virtual.slides.unshift(t[s]) + ;(a = s + t.length), (i = t.length) + } else e.virtual.slides.unshift(t) + if (e.params.virtual.cache) { + const t = e.virtual.cache, + s = {} + Object.keys(t).forEach((e) => { + const a = t[e], + r = a.getAttribute('data-swiper-slide-index') + r && + a.setAttribute( + 'data-swiper-slide-index', + parseInt(r, 10) + i + ), + (s[parseInt(e, 10) + i] = a) + }), + (e.virtual.cache = s) + } + d(!0), e.slideTo(a, 0) + }, + removeSlide: function (t) { + if (null == t) return + let s = e.activeIndex + if (Array.isArray(t)) + for (let a = t.length - 1; a >= 0; a -= 1) + e.params.virtual.cache && + (delete e.virtual.cache[t[a]], + Object.keys(e.virtual.cache).forEach((s) => { + s > t && + ((e.virtual.cache[s - 1] = e.virtual.cache[s]), + e.virtual.cache[s - 1].setAttribute( + 'data-swiper-slide-index', + s - 1 + ), + delete e.virtual.cache[s]) + })), + e.virtual.slides.splice(t[a], 1), + t[a] < s && (s -= 1), + (s = Math.max(s, 0)) + else + e.params.virtual.cache && + (delete e.virtual.cache[t], + Object.keys(e.virtual.cache).forEach((s) => { + s > t && + ((e.virtual.cache[s - 1] = e.virtual.cache[s]), + e.virtual.cache[s - 1].setAttribute( + 'data-swiper-slide-index', + s - 1 + ), + delete e.virtual.cache[s]) + })), + e.virtual.slides.splice(t, 1), + t < s && (s -= 1), + (s = Math.max(s, 0)) + d(!0), e.slideTo(s, 0) + }, + removeAllSlides: function () { + ;(e.virtual.slides = []), + e.params.virtual.cache && (e.virtual.cache = {}), + d(!0), + e.slideTo(0, 0) + }, + update: d, + }) + }, + function ({ swiper: e, extendParams: t, on: s, emit: i }) { + const n = a(), + l = r() + function o(t) { + if (!e.enabled) return + const { rtlTranslate: s } = e + let a = t + a.originalEvent && (a = a.originalEvent) + const r = a.keyCode || a.charCode, + o = e.params.keyboard.pageUpDown, + d = o && 33 === r, + c = o && 34 === r, + p = 37 === r, + u = 39 === r, + m = 38 === r, + h = 40 === r + if ( + !e.allowSlideNext && + ((e.isHorizontal() && u) || (e.isVertical() && h) || c) + ) + return !1 + if ( + !e.allowSlidePrev && + ((e.isHorizontal() && p) || (e.isVertical() && m) || d) + ) + return !1 + if ( + !( + a.shiftKey || + a.altKey || + a.ctrlKey || + a.metaKey || + (n.activeElement && + (n.activeElement.isContentEditable || + (n.activeElement.nodeName && + ('input' === n.activeElement.nodeName.toLowerCase() || + 'textarea' === n.activeElement.nodeName.toLowerCase())))) + ) + ) { + if ( + e.params.keyboard.onlyInViewport && + (d || c || p || u || m || h) + ) { + let t = !1 + if ( + x(e.el, `.${e.params.slideClass}, swiper-slide`).length > 0 && + 0 === x(e.el, `.${e.params.slideActiveClass}`).length + ) + return + const a = e.el, + i = a.clientWidth, + r = a.clientHeight, + n = l.innerWidth, + o = l.innerHeight, + d = b(a) + s && (d.left -= a.scrollLeft) + const c = [ + [d.left, d.top], + [d.left + i, d.top], + [d.left, d.top + r], + [d.left + i, d.top + r], + ] + for (let e = 0; e < c.length; e += 1) { + const s = c[e] + if (s[0] >= 0 && s[0] <= n && s[1] >= 0 && s[1] <= o) { + if (0 === s[0] && 0 === s[1]) continue + t = !0 + } + } + if (!t) return + } + e.isHorizontal() + ? ((d || c || p || u) && + (a.preventDefault ? a.preventDefault() : (a.returnValue = !1)), + (((c || u) && !s) || ((d || p) && s)) && e.slideNext(), + (((d || p) && !s) || ((c || u) && s)) && e.slidePrev()) + : ((d || c || m || h) && + (a.preventDefault ? a.preventDefault() : (a.returnValue = !1)), + (c || h) && e.slideNext(), + (d || m) && e.slidePrev()), + i('keyPress', r) + } + } + function d() { + e.keyboard.enabled || + (n.addEventListener('keydown', o), (e.keyboard.enabled = !0)) + } + function c() { + e.keyboard.enabled && + (n.removeEventListener('keydown', o), (e.keyboard.enabled = !1)) + } + ;(e.keyboard = { enabled: !1 }), + t({ keyboard: { enabled: !1, onlyInViewport: !0, pageUpDown: !0 } }), + s('init', () => { + e.params.keyboard.enabled && d() + }), + s('destroy', () => { + e.keyboard.enabled && c() + }), + Object.assign(e.keyboard, { enable: d, disable: c }) + }, + function ({ swiper: e, extendParams: t, on: s, emit: a }) { + const i = r() + let n + t({ + mousewheel: { + enabled: !1, + releaseOnEdges: !1, + invert: !1, + forceToAxis: !1, + sensitivity: 1, + eventsTarget: 'container', + thresholdDelta: null, + thresholdTime: null, + noMousewheelClass: 'swiper-no-mousewheel', + }, + }), + (e.mousewheel = { enabled: !1 }) + let d, + c = o() + const p = [] + function u() { + e.enabled && (e.mouseEntered = !0) + } + function m() { + e.enabled && (e.mouseEntered = !1) + } + function h(t) { + return ( + !( + e.params.mousewheel.thresholdDelta && + t.delta < e.params.mousewheel.thresholdDelta + ) && + !( + e.params.mousewheel.thresholdTime && + o() - c < e.params.mousewheel.thresholdTime + ) && + ((t.delta >= 6 && o() - c < 60) || + (t.direction < 0 + ? (e.isEnd && !e.params.loop) || + e.animating || + (e.slideNext(), a('scroll', t.raw)) + : (e.isBeginning && !e.params.loop) || + e.animating || + (e.slidePrev(), a('scroll', t.raw)), + (c = new i.Date().getTime()), + !1)) + ) + } + function f(t) { + let s = t, + i = !0 + if (!e.enabled) return + if (t.target.closest(`.${e.params.mousewheel.noMousewheelClass}`)) + return + const r = e.params.mousewheel + e.params.cssMode && s.preventDefault() + let c = e.el + 'container' !== e.params.mousewheel.eventsTarget && + (c = document.querySelector(e.params.mousewheel.eventsTarget)) + const u = c && c.contains(s.target) + if (!e.mouseEntered && !u && !r.releaseOnEdges) return !0 + s.originalEvent && (s = s.originalEvent) + let m = 0 + const f = e.rtlTranslate ? -1 : 1, + g = (function (e) { + let t = 0, + s = 0, + a = 0, + i = 0 + return ( + 'detail' in e && (s = e.detail), + 'wheelDelta' in e && (s = -e.wheelDelta / 120), + 'wheelDeltaY' in e && (s = -e.wheelDeltaY / 120), + 'wheelDeltaX' in e && (t = -e.wheelDeltaX / 120), + 'axis' in e && e.axis === e.HORIZONTAL_AXIS && ((t = s), (s = 0)), + (a = 10 * t), + (i = 10 * s), + 'deltaY' in e && (i = e.deltaY), + 'deltaX' in e && (a = e.deltaX), + e.shiftKey && !a && ((a = i), (i = 0)), + (a || i) && + e.deltaMode && + (1 === e.deltaMode + ? ((a *= 40), (i *= 40)) + : ((a *= 800), (i *= 800))), + a && !t && (t = a < 1 ? -1 : 1), + i && !s && (s = i < 1 ? -1 : 1), + { spinX: t, spinY: s, pixelX: a, pixelY: i } + ) + })(s) + if (r.forceToAxis) + if (e.isHorizontal()) { + if (!(Math.abs(g.pixelX) > Math.abs(g.pixelY))) return !0 + m = -g.pixelX * f + } else { + if (!(Math.abs(g.pixelY) > Math.abs(g.pixelX))) return !0 + m = -g.pixelY + } + else + m = + Math.abs(g.pixelX) > Math.abs(g.pixelY) ? -g.pixelX * f : -g.pixelY + if (0 === m) return !0 + r.invert && (m = -m) + let v = e.getTranslate() + m * r.sensitivity + if ( + (v >= e.minTranslate() && (v = e.minTranslate()), + v <= e.maxTranslate() && (v = e.maxTranslate()), + (i = + !!e.params.loop || + !(v === e.minTranslate() || v === e.maxTranslate())), + i && e.params.nested && s.stopPropagation(), + e.params.freeMode && e.params.freeMode.enabled) + ) { + const t = { time: o(), delta: Math.abs(m), direction: Math.sign(m) }, + i = + d && + t.time < d.time + 500 && + t.delta <= d.delta && + t.direction === d.direction + if (!i) { + d = void 0 + let o = e.getTranslate() + m * r.sensitivity + const c = e.isBeginning, + u = e.isEnd + if ( + (o >= e.minTranslate() && (o = e.minTranslate()), + o <= e.maxTranslate() && (o = e.maxTranslate()), + e.setTransition(0), + e.setTranslate(o), + e.updateProgress(), + e.updateActiveIndex(), + e.updateSlidesClasses(), + ((!c && e.isBeginning) || (!u && e.isEnd)) && + e.updateSlidesClasses(), + e.params.loop && + e.loopFix({ + direction: t.direction < 0 ? 'next' : 'prev', + byMousewheel: !0, + }), + e.params.freeMode.sticky) + ) { + clearTimeout(n), (n = void 0), p.length >= 15 && p.shift() + const s = p.length ? p[p.length - 1] : void 0, + a = p[0] + if ( + (p.push(t), + s && (t.delta > s.delta || t.direction !== s.direction)) + ) + p.splice(0) + else if ( + p.length >= 15 && + t.time - a.time < 500 && + a.delta - t.delta >= 1 && + t.delta <= 6 + ) { + const s = m > 0 ? 0.8 : 0.2 + ;(d = t), + p.splice(0), + (n = l(() => { + !e.destroyed && + e.params && + e.slideToClosest(e.params.speed, !0, void 0, s) + }, 0)) + } + n || + (n = l(() => { + if (e.destroyed || !e.params) return + ;(d = t), + p.splice(0), + e.slideToClosest(e.params.speed, !0, void 0, 0.5) + }, 500)) + } + if ( + (i || a('scroll', s), + e.params.autoplay && + e.params.autoplay.disableOnInteraction && + e.autoplay.stop(), + r.releaseOnEdges && + (o === e.minTranslate() || o === e.maxTranslate())) + ) + return !0 + } + } else { + const s = { + time: o(), + delta: Math.abs(m), + direction: Math.sign(m), + raw: t, + } + p.length >= 2 && p.shift() + const a = p.length ? p[p.length - 1] : void 0 + if ( + (p.push(s), + a + ? (s.direction !== a.direction || + s.delta > a.delta || + s.time > a.time + 150) && + h(s) + : h(s), + (function (t) { + const s = e.params.mousewheel + if (t.direction < 0) { + if (e.isEnd && !e.params.loop && s.releaseOnEdges) return !0 + } else if (e.isBeginning && !e.params.loop && s.releaseOnEdges) + return !0 + return !1 + })(s)) + ) + return !0 + } + return s.preventDefault ? s.preventDefault() : (s.returnValue = !1), !1 + } + function g(t) { + let s = e.el + 'container' !== e.params.mousewheel.eventsTarget && + (s = document.querySelector(e.params.mousewheel.eventsTarget)), + s[t]('mouseenter', u), + s[t]('mouseleave', m), + s[t]('wheel', f) + } + function v() { + return e.params.cssMode + ? (e.wrapperEl.removeEventListener('wheel', f), !0) + : !e.mousewheel.enabled && + (g('addEventListener'), (e.mousewheel.enabled = !0), !0) + } + function w() { + return e.params.cssMode + ? (e.wrapperEl.addEventListener(event, f), !0) + : !!e.mousewheel.enabled && + (g('removeEventListener'), (e.mousewheel.enabled = !1), !0) + } + s('init', () => { + !e.params.mousewheel.enabled && e.params.cssMode && w(), + e.params.mousewheel.enabled && v() + }), + s('destroy', () => { + e.params.cssMode && v(), e.mousewheel.enabled && w() + }), + Object.assign(e.mousewheel, { enable: v, disable: w }) + }, + function ({ swiper: e, extendParams: t, on: s, emit: a }) { + function i(t) { + let s + return t && + 'string' == typeof t && + e.isElement && + ((s = e.el.querySelector(t) || e.hostEl.querySelector(t)), s) + ? s + : (t && + ('string' == typeof t && (s = [...document.querySelectorAll(t)]), + e.params.uniqueNavElements && + 'string' == typeof t && + s && + s.length > 1 && + 1 === e.el.querySelectorAll(t).length + ? (s = e.el.querySelector(t)) + : s && 1 === s.length && (s = s[0])), + t && !s ? t : s) + } + function r(t, s) { + const a = e.params.navigation + ;(t = M(t)).forEach((t) => { + t && + (t.classList[s ? 'add' : 'remove'](...a.disabledClass.split(' ')), + 'BUTTON' === t.tagName && (t.disabled = s), + e.params.watchOverflow && + e.enabled && + t.classList[e.isLocked ? 'add' : 'remove'](a.lockClass)) + }) + } + function n() { + const { nextEl: t, prevEl: s } = e.navigation + if (e.params.loop) return r(s, !1), void r(t, !1) + r(s, e.isBeginning && !e.params.rewind), + r(t, e.isEnd && !e.params.rewind) + } + function l(t) { + t.preventDefault(), + (!e.isBeginning || e.params.loop || e.params.rewind) && + (e.slidePrev(), a('navigationPrev')) + } + function o(t) { + t.preventDefault(), + (!e.isEnd || e.params.loop || e.params.rewind) && + (e.slideNext(), a('navigationNext')) + } + function d() { + const t = e.params.navigation + if ( + ((e.params.navigation = le( + e, + e.originalParams.navigation, + e.params.navigation, + { nextEl: 'swiper-button-next', prevEl: 'swiper-button-prev' } + )), + !t.nextEl && !t.prevEl) + ) + return + let s = i(t.nextEl), + a = i(t.prevEl) + Object.assign(e.navigation, { nextEl: s, prevEl: a }), + (s = M(s)), + (a = M(a)) + const r = (s, a) => { + if (s) { + if ( + t.addIcons && + s.matches('.swiper-button-next,.swiper-button-prev') && + !s.querySelector('svg') + ) { + const e = document.createElement('div') + P(e, oe), s.appendChild(e.querySelector('svg')), e.remove() + } + s.addEventListener('click', 'next' === a ? o : l) + } + !e.enabled && s && s.classList.add(...t.lockClass.split(' ')) + } + s.forEach((e) => r(e, 'next')), a.forEach((e) => r(e, 'prev')) + } + function c() { + let { nextEl: t, prevEl: s } = e.navigation + ;(t = M(t)), (s = M(s)) + const a = (t, s) => { + t.removeEventListener('click', 'next' === s ? o : l), + t.classList.remove(...e.params.navigation.disabledClass.split(' ')) + } + t.forEach((e) => a(e, 'next')), s.forEach((e) => a(e, 'prev')) + } + t({ + navigation: { + nextEl: null, + prevEl: null, + addIcons: !0, + hideOnClick: !1, + disabledClass: 'swiper-button-disabled', + hiddenClass: 'swiper-button-hidden', + lockClass: 'swiper-button-lock', + navigationDisabledClass: 'swiper-navigation-disabled', + }, + }), + (e.navigation = { nextEl: null, prevEl: null, arrowSvg: oe }), + s('init', () => { + !1 === e.params.navigation.enabled ? p() : (d(), n()) + }), + s('toEdge fromEdge lock unlock', () => { + n() + }), + s('destroy', () => { + c() + }), + s('enable disable', () => { + let { nextEl: t, prevEl: s } = e.navigation + ;(t = M(t)), + (s = M(s)), + e.enabled + ? n() + : [...t, ...s] + .filter((e) => !!e) + .forEach((t) => + t.classList.add(e.params.navigation.lockClass) + ) + }), + s('click', (t, s) => { + let { nextEl: i, prevEl: r } = e.navigation + ;(i = M(i)), (r = M(r)) + const n = s.target + let l = r.includes(n) || i.includes(n) + if (e.isElement && !l) { + const e = s.path || (s.composedPath && s.composedPath()) + e && (l = e.find((e) => i.includes(e) || r.includes(e))) + } + if (e.params.navigation.hideOnClick && !l) { + if ( + e.pagination && + e.params.pagination && + e.params.pagination.clickable && + (e.pagination.el === n || e.pagination.el.contains(n)) + ) + return + let t + i.length + ? (t = i[0].classList.contains(e.params.navigation.hiddenClass)) + : r.length && + (t = r[0].classList.contains(e.params.navigation.hiddenClass)), + a(!0 === t ? 'navigationShow' : 'navigationHide'), + [...i, ...r] + .filter((e) => !!e) + .forEach((t) => + t.classList.toggle(e.params.navigation.hiddenClass) + ) + } + }) + const p = () => { + e.el.classList.add( + ...e.params.navigation.navigationDisabledClass.split(' ') + ), + c() + } + Object.assign(e.navigation, { + enable: () => { + e.el.classList.remove( + ...e.params.navigation.navigationDisabledClass.split(' ') + ), + d(), + n() + }, + disable: p, + update: n, + init: d, + destroy: c, + }) + }, + function ({ swiper: e, extendParams: t, on: s, emit: a }) { + const i = 'swiper-pagination' + let r + t({ + pagination: { + el: null, + bulletElement: 'span', + clickable: !1, + hideOnClick: !1, + renderBullet: null, + renderProgressbar: null, + renderFraction: null, + renderCustom: null, + progressbarOpposite: !1, + type: 'bullets', + dynamicBullets: !1, + dynamicMainBullets: 1, + formatFractionCurrent: (e) => e, + formatFractionTotal: (e) => e, + bulletClass: `${i}-bullet`, + bulletActiveClass: `${i}-bullet-active`, + modifierClass: `${i}-`, + currentClass: `${i}-current`, + totalClass: `${i}-total`, + hiddenClass: `${i}-hidden`, + progressbarFillClass: `${i}-progressbar-fill`, + progressbarOppositeClass: `${i}-progressbar-opposite`, + clickableClass: `${i}-clickable`, + lockClass: `${i}-lock`, + horizontalClass: `${i}-horizontal`, + verticalClass: `${i}-vertical`, + paginationDisabledClass: `${i}-disabled`, + }, + }), + (e.pagination = { el: null, bullets: [] }) + let n = 0 + function l() { + return ( + !e.params.pagination.el || + !e.pagination.el || + (Array.isArray(e.pagination.el) && 0 === e.pagination.el.length) + ) + } + function o(t, s) { + const { bulletActiveClass: a } = e.params.pagination + t && + (t = t[('prev' === s ? 'previous' : 'next') + 'ElementSibling']) && + (t.classList.add(`${a}-${s}`), + (t = t[('prev' === s ? 'previous' : 'next') + 'ElementSibling']) && + t.classList.add(`${a}-${s}-${s}`)) + } + function d(t) { + const s = t.target.closest(de(e.params.pagination.bulletClass)) + if (!s) return + t.preventDefault() + const a = E(s) * e.params.slidesPerGroup + if (e.params.loop) { + if (e.realIndex === a) return + const t = + ((i = e.realIndex), + (r = a), + (n = e.slides.length), + (r %= n) === 1 + (i %= n) + ? 'next' + : r === i - 1 + ? 'previous' + : void 0) + 'next' === t + ? e.slideNext() + : 'previous' === t + ? e.slidePrev() + : e.slideToLoop(a) + } else e.slideTo(a) + var i, r, n + } + function c() { + const t = e.rtl, + s = e.params.pagination + if (l()) return + let i, + d, + c = e.pagination.el + c = M(c) + const p = + e.virtual && e.params.virtual.enabled + ? e.virtual.slides.length + : e.slides.length, + u = e.params.loop + ? Math.ceil(p / e.params.slidesPerGroup) + : e.snapGrid.length + if ( + (e.params.loop + ? ((d = e.previousRealIndex || 0), + (i = + e.params.slidesPerGroup > 1 + ? Math.floor(e.realIndex / e.params.slidesPerGroup) + : e.realIndex)) + : void 0 !== e.snapIndex + ? ((i = e.snapIndex), (d = e.previousSnapIndex)) + : ((d = e.previousIndex || 0), (i = e.activeIndex || 0)), + 'bullets' === s.type && + e.pagination.bullets && + e.pagination.bullets.length > 0) + ) { + const a = e.pagination.bullets + let l, p, u + if ( + (s.dynamicBullets && + ((r = T(a[0], e.isHorizontal() ? 'width' : 'height', !0)), + c.forEach((t) => { + t.style[e.isHorizontal() ? 'width' : 'height'] = + r * (s.dynamicMainBullets + 4) + 'px' + }), + s.dynamicMainBullets > 1 && + void 0 !== d && + ((n += i - (d || 0)), + n > s.dynamicMainBullets - 1 + ? (n = s.dynamicMainBullets - 1) + : n < 0 && (n = 0)), + (l = Math.max(i - n, 0)), + (p = l + (Math.min(a.length, s.dynamicMainBullets) - 1)), + (u = (p + l) / 2)), + a.forEach((e) => { + const t = [ + ...[ + '', + '-next', + '-next-next', + '-prev', + '-prev-prev', + '-main', + ].map((e) => `${s.bulletActiveClass}${e}`), + ] + .map((e) => + 'string' == typeof e && e.includes(' ') ? e.split(' ') : e + ) + .flat() + e.classList.remove(...t) + }), + c.length > 1) + ) + a.forEach((t) => { + const a = E(t) + a === i + ? t.classList.add(...s.bulletActiveClass.split(' ')) + : e.isElement && t.setAttribute('part', 'bullet'), + s.dynamicBullets && + (a >= l && + a <= p && + t.classList.add( + ...`${s.bulletActiveClass}-main`.split(' ') + ), + a === l && o(t, 'prev'), + a === p && o(t, 'next')) + }) + else { + const t = a[i] + if ( + (t && t.classList.add(...s.bulletActiveClass.split(' ')), + e.isElement && + a.forEach((e, t) => { + e.setAttribute('part', t === i ? 'bullet-active' : 'bullet') + }), + s.dynamicBullets) + ) { + const e = a[l], + t = a[p] + for (let e = l; e <= p; e += 1) + a[e] && + a[e].classList.add( + ...`${s.bulletActiveClass}-main`.split(' ') + ) + o(e, 'prev'), o(t, 'next') + } + } + if (s.dynamicBullets) { + const i = Math.min(a.length, s.dynamicMainBullets + 4), + n = (r * i - r) / 2 - u * r, + l = t ? 'right' : 'left' + a.forEach((t) => { + t.style[e.isHorizontal() ? l : 'top'] = `${n}px` + }) + } + } + c.forEach((t, r) => { + if ( + ('fraction' === s.type && + (t.querySelectorAll(de(s.currentClass)).forEach((e) => { + e.textContent = s.formatFractionCurrent(i + 1) + }), + t.querySelectorAll(de(s.totalClass)).forEach((e) => { + e.textContent = s.formatFractionTotal(u) + })), + 'progressbar' === s.type) + ) { + let a + a = s.progressbarOpposite + ? e.isHorizontal() + ? 'vertical' + : 'horizontal' + : e.isHorizontal() + ? 'horizontal' + : 'vertical' + const r = (i + 1) / u + let n = 1, + l = 1 + 'horizontal' === a ? (n = r) : (l = r), + t.querySelectorAll(de(s.progressbarFillClass)).forEach((t) => { + ;(t.style.transform = `translate3d(0,0,0) scaleX(${n}) scaleY(${l})`), + (t.style.transitionDuration = `${e.params.speed}ms`) + }) + } + 'custom' === s.type && s.renderCustom + ? (P(t, s.renderCustom(e, i + 1, u)), + 0 === r && a('paginationRender', t)) + : (0 === r && a('paginationRender', t), a('paginationUpdate', t)), + e.params.watchOverflow && + e.enabled && + t.classList[e.isLocked ? 'add' : 'remove'](s.lockClass) + }) + } + function p() { + const t = e.params.pagination + if (l()) return + const s = + e.virtual && e.params.virtual.enabled + ? e.virtual.slides.length + : e.grid && e.params.grid.rows > 1 + ? e.slides.length / Math.ceil(e.params.grid.rows) + : e.slides.length + let i = e.pagination.el + i = M(i) + let r = '' + if ('bullets' === t.type) { + let a = e.params.loop + ? Math.ceil(s / e.params.slidesPerGroup) + : e.snapGrid.length + e.params.freeMode && e.params.freeMode.enabled && a > s && (a = s) + for (let s = 0; s < a; s += 1) + t.renderBullet + ? (r += t.renderBullet.call(e, s, t.bulletClass)) + : (r += `<${t.bulletElement} ${ + e.isElement ? 'part="bullet"' : '' + } class="${t.bulletClass}">`) + } + 'fraction' === t.type && + (r = t.renderFraction + ? t.renderFraction.call(e, t.currentClass, t.totalClass) + : ` / `), + 'progressbar' === t.type && + (r = t.renderProgressbar + ? t.renderProgressbar.call(e, t.progressbarFillClass) + : ``), + (e.pagination.bullets = []), + i.forEach((s) => { + 'custom' !== t.type && P(s, r || ''), + 'bullets' === t.type && + e.pagination.bullets.push( + ...s.querySelectorAll(de(t.bulletClass)) + ) + }), + 'custom' !== t.type && a('paginationRender', i[0]) + } + function u() { + e.params.pagination = le( + e, + e.originalParams.pagination, + e.params.pagination, + { el: 'swiper-pagination' } + ) + const t = e.params.pagination + if (!t.el) return + let s + 'string' == typeof t.el && + e.isElement && + (s = e.el.querySelector(t.el)), + s || + 'string' != typeof t.el || + (s = [...document.querySelectorAll(t.el)]), + s || (s = t.el), + s && + 0 !== s.length && + (e.params.uniqueNavElements && + 'string' == typeof t.el && + Array.isArray(s) && + s.length > 1 && + ((s = [...e.el.querySelectorAll(t.el)]), + s.length > 1 && (s = s.find((t) => x(t, '.swiper')[0] === e.el))), + Array.isArray(s) && 1 === s.length && (s = s[0]), + Object.assign(e.pagination, { el: s }), + (s = M(s)), + s.forEach((s) => { + 'bullets' === t.type && + t.clickable && + s.classList.add(...(t.clickableClass || '').split(' ')), + s.classList.add(t.modifierClass + t.type), + s.classList.add( + e.isHorizontal() ? t.horizontalClass : t.verticalClass + ), + 'bullets' === t.type && + t.dynamicBullets && + (s.classList.add(`${t.modifierClass}${t.type}-dynamic`), + (n = 0), + t.dynamicMainBullets < 1 && (t.dynamicMainBullets = 1)), + 'progressbar' === t.type && + t.progressbarOpposite && + s.classList.add(t.progressbarOppositeClass), + t.clickable && s.addEventListener('click', d), + e.enabled || s.classList.add(t.lockClass) + })) + } + function m() { + const t = e.params.pagination + if (l()) return + let s = e.pagination.el + s && + ((s = M(s)), + s.forEach((s) => { + s.classList.remove(t.hiddenClass), + s.classList.remove(t.modifierClass + t.type), + s.classList.remove( + e.isHorizontal() ? t.horizontalClass : t.verticalClass + ), + t.clickable && + (s.classList.remove(...(t.clickableClass || '').split(' ')), + s.removeEventListener('click', d)) + })), + e.pagination.bullets && + e.pagination.bullets.forEach((e) => + e.classList.remove(...t.bulletActiveClass.split(' ')) + ) + } + s('changeDirection', () => { + if (!e.pagination || !e.pagination.el) return + const t = e.params.pagination + let { el: s } = e.pagination + ;(s = M(s)), + s.forEach((s) => { + s.classList.remove(t.horizontalClass, t.verticalClass), + s.classList.add( + e.isHorizontal() ? t.horizontalClass : t.verticalClass + ) + }) + }), + s('init', () => { + !1 === e.params.pagination.enabled ? h() : (u(), p(), c()) + }), + s('activeIndexChange', () => { + void 0 === e.snapIndex && c() + }), + s('snapIndexChange', () => { + c() + }), + s('snapGridLengthChange', () => { + p(), c() + }), + s('destroy', () => { + m() + }), + s('enable disable', () => { + let { el: t } = e.pagination + t && + ((t = M(t)), + t.forEach((t) => + t.classList[e.enabled ? 'remove' : 'add']( + e.params.pagination.lockClass + ) + )) + }), + s('lock unlock', () => { + c() + }), + s('click', (t, s) => { + const i = s.target, + r = M(e.pagination.el) + if ( + e.params.pagination.el && + e.params.pagination.hideOnClick && + r && + r.length > 0 && + !i.classList.contains(e.params.pagination.bulletClass) + ) { + if ( + e.navigation && + ((e.navigation.nextEl && i === e.navigation.nextEl) || + (e.navigation.prevEl && i === e.navigation.prevEl)) + ) + return + const t = r[0].classList.contains(e.params.pagination.hiddenClass) + a(!0 === t ? 'paginationShow' : 'paginationHide'), + r.forEach((t) => + t.classList.toggle(e.params.pagination.hiddenClass) + ) + } + }) + const h = () => { + e.el.classList.add(e.params.pagination.paginationDisabledClass) + let { el: t } = e.pagination + t && + ((t = M(t)), + t.forEach((t) => + t.classList.add(e.params.pagination.paginationDisabledClass) + )), + m() + } + Object.assign(e.pagination, { + enable: () => { + e.el.classList.remove(e.params.pagination.paginationDisabledClass) + let { el: t } = e.pagination + t && + ((t = M(t)), + t.forEach((t) => + t.classList.remove(e.params.pagination.paginationDisabledClass) + )), + u(), + p(), + c() + }, + disable: h, + render: p, + update: c, + init: u, + destroy: m, + }) + }, + function ({ swiper: e, extendParams: t, on: s, emit: i }) { + const r = a() + let o, + d, + c, + p, + u = !1, + m = null, + h = null + function f() { + if (!e.params.scrollbar.el || !e.scrollbar.el) return + const { scrollbar: t, rtlTranslate: s } = e, + { dragEl: a, el: i } = t, + r = e.params.scrollbar, + n = e.params.loop ? e.progressLoop : e.progress + let l = d, + o = (c - d) * n + s + ? ((o = -o), + o > 0 ? ((l = d - o), (o = 0)) : -o + d > c && (l = c + o)) + : o < 0 + ? ((l = d + o), (o = 0)) + : o + d > c && (l = c - o), + e.isHorizontal() + ? ((a.style.transform = `translate3d(${o}px, 0, 0)`), + (a.style.width = `${l}px`)) + : ((a.style.transform = `translate3d(0px, ${o}px, 0)`), + (a.style.height = `${l}px`)), + r.hide && + (clearTimeout(m), + (i.style.opacity = 1), + (m = setTimeout(() => { + ;(i.style.opacity = 0), (i.style.transitionDuration = '400ms') + }, 1e3))) + } + function g() { + if (!e.params.scrollbar.el || !e.scrollbar.el) return + const { scrollbar: t } = e, + { dragEl: s, el: a } = t + ;(s.style.width = ''), + (s.style.height = ''), + (c = e.isHorizontal() ? a.offsetWidth : a.offsetHeight), + (p = + e.size / + (e.virtualSize + + e.params.slidesOffsetBefore - + (e.params.centeredSlides ? e.snapGrid[0] : 0))), + (d = + 'auto' === e.params.scrollbar.dragSize + ? c * p + : parseInt(e.params.scrollbar.dragSize, 10)), + e.isHorizontal() + ? (s.style.width = `${d}px`) + : (s.style.height = `${d}px`), + (a.style.display = p >= 1 ? 'none' : ''), + e.params.scrollbar.hide && (a.style.opacity = 0), + e.params.watchOverflow && + e.enabled && + t.el.classList[e.isLocked ? 'add' : 'remove']( + e.params.scrollbar.lockClass + ) + } + function v(t) { + return e.isHorizontal() ? t.clientX : t.clientY + } + function y(t) { + const { scrollbar: s, rtlTranslate: a } = e, + { el: i } = s + let r + ;(r = + (v(t) - + b(i)[e.isHorizontal() ? 'left' : 'top'] - + (null !== o ? o : d / 2)) / + (c - d)), + (r = Math.max(Math.min(r, 1), 0)), + a && (r = 1 - r) + const n = e.minTranslate() + (e.maxTranslate() - e.minTranslate()) * r + e.updateProgress(n), + e.setTranslate(n), + e.updateActiveIndex(), + e.updateSlidesClasses() + } + function E(t) { + const s = e.params.scrollbar, + { scrollbar: a, wrapperEl: r } = e, + { el: n, dragEl: l } = a + ;(u = !0), + (o = + t.target === l + ? v(t) - + t.target.getBoundingClientRect()[ + e.isHorizontal() ? 'left' : 'top' + ] + : null), + t.preventDefault(), + t.stopPropagation(), + (r.style.transitionDuration = '100ms'), + (l.style.transitionDuration = '100ms'), + y(t), + clearTimeout(h), + (n.style.transitionDuration = '0ms'), + s.hide && (n.style.opacity = 1), + e.params.cssMode && (e.wrapperEl.style['scroll-snap-type'] = 'none'), + i('scrollbarDragStart', t) + } + function x(t) { + const { scrollbar: s, wrapperEl: a } = e, + { el: r, dragEl: n } = s + u && + (t.preventDefault && t.cancelable + ? t.preventDefault() + : (t.returnValue = !1), + y(t), + (a.style.transitionDuration = '0ms'), + (r.style.transitionDuration = '0ms'), + (n.style.transitionDuration = '0ms'), + i('scrollbarDragMove', t)) + } + function S(t) { + const s = e.params.scrollbar, + { scrollbar: a, wrapperEl: r } = e, + { el: n } = a + u && + ((u = !1), + e.params.cssMode && + ((e.wrapperEl.style['scroll-snap-type'] = ''), + (r.style.transitionDuration = '')), + s.hide && + (clearTimeout(h), + (h = l(() => { + ;(n.style.opacity = 0), (n.style.transitionDuration = '400ms') + }, 1e3))), + i('scrollbarDragEnd', t), + s.snapOnRelease && e.slideToClosest()) + } + function T(t) { + const { scrollbar: s, params: a } = e, + i = s.el + if (!i) return + const n = i, + l = !!a.passiveListeners && { passive: !1, capture: !1 }, + o = !!a.passiveListeners && { passive: !0, capture: !1 } + if (!n) return + const d = 'on' === t ? 'addEventListener' : 'removeEventListener' + n[d]('pointerdown', E, l), + r[d]('pointermove', x, l), + r[d]('pointerup', S, o) + } + function C() { + const { scrollbar: t, el: s } = e + e.params.scrollbar = le( + e, + e.originalParams.scrollbar, + e.params.scrollbar, + { el: 'swiper-scrollbar' } + ) + const a = e.params.scrollbar + if (!a.el) return + let i, l + if ( + ('string' == typeof a.el && + e.isElement && + (i = e.el.querySelector(a.el)), + i || 'string' != typeof a.el) + ) + i || (i = a.el) + else if (((i = r.querySelectorAll(a.el)), !i.length)) return + e.params.uniqueNavElements && + 'string' == typeof a.el && + i.length > 1 && + 1 === s.querySelectorAll(a.el).length && + (i = s.querySelector(a.el)), + i.length > 0 && (i = i[0]), + i.classList.add( + e.isHorizontal() ? a.horizontalClass : a.verticalClass + ), + i && + ((l = i.querySelector(de(e.params.scrollbar.dragClass))), + l || ((l = w('div', e.params.scrollbar.dragClass)), i.append(l))), + Object.assign(t, { el: i, dragEl: l }), + a.draggable && e.params.scrollbar.el && e.scrollbar.el && T('on'), + i && + i.classList[e.enabled ? 'remove' : 'add']( + ...n(e.params.scrollbar.lockClass) + ) + } + function P() { + const t = e.params.scrollbar, + s = e.scrollbar.el + s && + s.classList.remove( + ...n(e.isHorizontal() ? t.horizontalClass : t.verticalClass) + ), + e.params.scrollbar.el && e.scrollbar.el && T('off') + } + t({ + scrollbar: { + el: null, + dragSize: 'auto', + hide: !1, + draggable: !1, + snapOnRelease: !0, + lockClass: 'swiper-scrollbar-lock', + dragClass: 'swiper-scrollbar-drag', + scrollbarDisabledClass: 'swiper-scrollbar-disabled', + horizontalClass: 'swiper-scrollbar-horizontal', + verticalClass: 'swiper-scrollbar-vertical', + }, + }), + (e.scrollbar = { el: null, dragEl: null }), + s('changeDirection', () => { + if (!e.scrollbar || !e.scrollbar.el) return + const t = e.params.scrollbar + let { el: s } = e.scrollbar + ;(s = M(s)), + s.forEach((s) => { + s.classList.remove(t.horizontalClass, t.verticalClass), + s.classList.add( + e.isHorizontal() ? t.horizontalClass : t.verticalClass + ) + }) + }), + s('init', () => { + !1 === e.params.scrollbar.enabled ? L() : (C(), g(), f()) + }), + s('update resize observerUpdate lock unlock changeDirection', () => { + g() + }), + s('setTranslate', () => { + f() + }), + s('setTransition', (t, s) => { + !(function (t) { + e.params.scrollbar.el && + e.scrollbar.el && + (e.scrollbar.dragEl.style.transitionDuration = `${t}ms`) + })(s) + }), + s('enable disable', () => { + const { el: t } = e.scrollbar + t && + t.classList[e.enabled ? 'remove' : 'add']( + ...n(e.params.scrollbar.lockClass) + ) + }), + s('destroy', () => { + P() + }) + const L = () => { + e.el.classList.add(...n(e.params.scrollbar.scrollbarDisabledClass)), + e.scrollbar.el && + e.scrollbar.el.classList.add( + ...n(e.params.scrollbar.scrollbarDisabledClass) + ), + P() + } + Object.assign(e.scrollbar, { + enable: () => { + e.el.classList.remove( + ...n(e.params.scrollbar.scrollbarDisabledClass) + ), + e.scrollbar.el && + e.scrollbar.el.classList.remove( + ...n(e.params.scrollbar.scrollbarDisabledClass) + ), + C(), + g(), + f() + }, + disable: L, + updateSize: g, + setTranslate: f, + init: C, + destroy: P, + }) + }, + function ({ swiper: e, extendParams: t, on: s }) { + t({ parallax: { enabled: !1 } }) + const a = + '[data-swiper-parallax], [data-swiper-parallax-x], [data-swiper-parallax-y], [data-swiper-parallax-opacity], [data-swiper-parallax-scale]', + i = (t, s) => { + const { rtl: a } = e, + i = a ? -1 : 1, + r = t.getAttribute('data-swiper-parallax') || '0' + let n = t.getAttribute('data-swiper-parallax-x'), + l = t.getAttribute('data-swiper-parallax-y') + const o = t.getAttribute('data-swiper-parallax-scale'), + d = t.getAttribute('data-swiper-parallax-opacity'), + c = t.getAttribute('data-swiper-parallax-rotate') + if ( + (n || l + ? ((n = n || '0'), (l = l || '0')) + : e.isHorizontal() + ? ((n = r), (l = '0')) + : ((l = r), (n = '0')), + (n = + n.indexOf('%') >= 0 + ? parseInt(n, 10) * s * i + '%' + : n * s * i + 'px'), + (l = + l.indexOf('%') >= 0 ? parseInt(l, 10) * s + '%' : l * s + 'px'), + null != d) + ) { + const e = d - (d - 1) * (1 - Math.abs(s)) + t.style.opacity = e + } + let p = `translate3d(${n}, ${l}, 0px)` + if (null != o) { + p += ` scale(${o - (o - 1) * (1 - Math.abs(s))})` + } + if (c && null != c) { + p += ` rotate(${c * s * -1}deg)` + } + t.style.transform = p + }, + r = () => { + const { + el: t, + slides: s, + progress: r, + snapGrid: n, + isElement: l, + } = e, + o = g(t, a) + e.isElement && o.push(...g(e.hostEl, a)), + o.forEach((e) => { + i(e, r) + }), + s.forEach((t, s) => { + let l = t.progress + e.params.slidesPerGroup > 1 && + 'auto' !== e.params.slidesPerView && + (l += Math.ceil(s / 2) - r * (n.length - 1)), + (l = Math.min(Math.max(l, -1), 1)), + t + .querySelectorAll(`${a}, [data-swiper-parallax-rotate]`) + .forEach((e) => { + i(e, l) + }) + }) + } + s('beforeInit', () => { + e.params.parallax.enabled && + ((e.params.watchSlidesProgress = !0), + (e.originalParams.watchSlidesProgress = !0)) + }), + s('init', () => { + e.params.parallax.enabled && r() + }), + s('setTranslate', () => { + e.params.parallax.enabled && r() + }), + s('setTransition', (t, s) => { + e.params.parallax.enabled && + ((t = e.params.speed) => { + const { el: s, hostEl: i } = e, + r = [...s.querySelectorAll(a)] + e.isElement && r.push(...i.querySelectorAll(a)), + r.forEach((e) => { + let s = + parseInt( + e.getAttribute('data-swiper-parallax-duration'), + 10 + ) || t + 0 === t && (s = 0), (e.style.transitionDuration = `${s}ms`) + }) + })(s) + }) + }, + function ({ swiper: e, extendParams: t, on: s, emit: a }) { + const i = r() + t({ + zoom: { + enabled: !1, + limitToOriginalSize: !1, + maxRatio: 3, + minRatio: 1, + panOnMouseMove: !1, + toggle: !0, + containerClass: 'swiper-zoom-container', + zoomedSlideClass: 'swiper-slide-zoomed', + }, + }), + (e.zoom = { enabled: !1 }) + let n, + l, + o = 1, + c = !1, + p = !1, + u = { x: 0, y: 0 } + const m = [], + h = { + originX: 0, + originY: 0, + slideEl: void 0, + slideWidth: void 0, + slideHeight: void 0, + imageEl: void 0, + imageWrapEl: void 0, + maxRatio: 3, + }, + f = { + isTouched: void 0, + isMoved: void 0, + currentX: void 0, + currentY: void 0, + minX: void 0, + minY: void 0, + maxX: void 0, + maxY: void 0, + width: void 0, + height: void 0, + startX: void 0, + startY: void 0, + touchesStart: {}, + touchesCurrent: {}, + }, + v = { + x: void 0, + y: void 0, + prevPositionX: void 0, + prevPositionY: void 0, + prevTime: void 0, + } + let w, + y = 1 + function E() { + if (m.length < 2) return 1 + const e = m[0].pageX, + t = m[0].pageY, + s = m[1].pageX, + a = m[1].pageY + return Math.sqrt((s - e) ** 2 + (a - t) ** 2) + } + function S() { + const t = e.params.zoom, + s = h.imageWrapEl.getAttribute('data-swiper-zoom') || t.maxRatio + if (t.limitToOriginalSize && h.imageEl && h.imageEl.naturalWidth) { + const e = h.imageEl.naturalWidth / h.imageEl.offsetWidth + return Math.min(e, s) + } + return s + } + function T(t) { + const s = e.isElement ? 'swiper-slide' : `.${e.params.slideClass}` + return ( + !!t.target.matches(s) || + e.slides.filter((e) => e.contains(t.target)).length > 0 + ) + } + function M(t) { + const s = `.${e.params.zoom.containerClass}` + return ( + !!t.target.matches(s) || + [...e.hostEl.querySelectorAll(s)].filter((e) => e.contains(t.target)) + .length > 0 + ) + } + function C(t) { + if (('mouse' === t.pointerType && m.splice(0, m.length), !T(t))) return + const s = e.params.zoom + if (((n = !1), (l = !1), m.push(t), !(m.length < 2))) { + if (((n = !0), (h.scaleStart = E()), !h.slideEl)) { + ;(h.slideEl = t.target.closest( + `.${e.params.slideClass}, swiper-slide` + )), + h.slideEl || (h.slideEl = e.slides[e.activeIndex]) + let a = h.slideEl.querySelector(`.${s.containerClass}`) + if ( + (a && + (a = a.querySelectorAll( + 'picture, img, svg, canvas, .swiper-zoom-target' + )[0]), + (h.imageEl = a), + (h.imageWrapEl = a + ? x(h.imageEl, `.${s.containerClass}`)[0] + : void 0), + !h.imageWrapEl) + ) + return void (h.imageEl = void 0) + h.maxRatio = S() + } + if (h.imageEl) { + const [e, t] = (function () { + if (m.length < 2) return { x: null, y: null } + const e = h.imageEl.getBoundingClientRect() + return [ + (m[0].pageX + (m[1].pageX - m[0].pageX) / 2 - e.x - i.scrollX) / + o, + (m[0].pageY + (m[1].pageY - m[0].pageY) / 2 - e.y - i.scrollY) / + o, + ] + })() + ;(h.originX = e), + (h.originY = t), + (h.imageEl.style.transitionDuration = '0ms') + } + c = !0 + } + } + function P(t) { + if (!T(t)) return + const s = e.params.zoom, + a = e.zoom, + i = m.findIndex((e) => e.pointerId === t.pointerId) + i >= 0 && (m[i] = t), + m.length < 2 || + ((l = !0), + (h.scaleMove = E()), + h.imageEl && + ((a.scale = (h.scaleMove / h.scaleStart) * o), + a.scale > h.maxRatio && + (a.scale = h.maxRatio - 1 + (a.scale - h.maxRatio + 1) ** 0.5), + a.scale < s.minRatio && + (a.scale = s.minRatio + 1 - (s.minRatio - a.scale + 1) ** 0.5), + (h.imageEl.style.transform = `translate3d(0,0,0) scale(${a.scale})`))) + } + function L(t) { + if (!T(t)) return + if ('mouse' === t.pointerType && 'pointerout' === t.type) return + const s = e.params.zoom, + a = e.zoom, + i = m.findIndex((e) => e.pointerId === t.pointerId) + i >= 0 && m.splice(i, 1), + n && + l && + ((n = !1), + (l = !1), + h.imageEl && + ((a.scale = Math.max(Math.min(a.scale, h.maxRatio), s.minRatio)), + (h.imageEl.style.transitionDuration = `${e.params.speed}ms`), + (h.imageEl.style.transform = `translate3d(0,0,0) scale(${a.scale})`), + (o = a.scale), + (c = !1), + a.scale > 1 && h.slideEl + ? h.slideEl.classList.add(`${s.zoomedSlideClass}`) + : a.scale <= 1 && + h.slideEl && + h.slideEl.classList.remove(`${s.zoomedSlideClass}`), + 1 === a.scale && + ((h.originX = 0), (h.originY = 0), (h.slideEl = void 0)))) + } + function I() { + e.touchEventsData.preventTouchMoveFromPointerMove = !1 + } + function z(t) { + const s = 'mouse' === t.pointerType && e.params.zoom.panOnMouseMove + if (!T(t) || !M(t)) return + const a = e.zoom + if (!h.imageEl) return + if (!f.isTouched || !h.slideEl) return void (s && $(t)) + if (s) return void $(t) + f.isMoved || + ((f.width = h.imageEl.offsetWidth || h.imageEl.clientWidth), + (f.height = h.imageEl.offsetHeight || h.imageEl.clientHeight), + (f.startX = d(h.imageWrapEl, 'x') || 0), + (f.startY = d(h.imageWrapEl, 'y') || 0), + (h.slideWidth = h.slideEl.offsetWidth), + (h.slideHeight = h.slideEl.offsetHeight), + (h.imageWrapEl.style.transitionDuration = '0ms')) + const i = f.width * a.scale, + r = f.height * a.scale + ;(f.minX = Math.min(h.slideWidth / 2 - i / 2, 0)), + (f.maxX = -f.minX), + (f.minY = Math.min(h.slideHeight / 2 - r / 2, 0)), + (f.maxY = -f.minY), + (f.touchesCurrent.x = m.length > 0 ? m[0].pageX : t.pageX), + (f.touchesCurrent.y = m.length > 0 ? m[0].pageY : t.pageY) + if ( + (Math.max( + Math.abs(f.touchesCurrent.x - f.touchesStart.x), + Math.abs(f.touchesCurrent.y - f.touchesStart.y) + ) > 5 && (e.allowClick = !1), + !f.isMoved && !c) + ) { + if ( + e.isHorizontal() && + ((Math.floor(f.minX) === Math.floor(f.startX) && + f.touchesCurrent.x < f.touchesStart.x) || + (Math.floor(f.maxX) === Math.floor(f.startX) && + f.touchesCurrent.x > f.touchesStart.x)) + ) + return (f.isTouched = !1), void I() + if ( + !e.isHorizontal() && + ((Math.floor(f.minY) === Math.floor(f.startY) && + f.touchesCurrent.y < f.touchesStart.y) || + (Math.floor(f.maxY) === Math.floor(f.startY) && + f.touchesCurrent.y > f.touchesStart.y)) + ) + return (f.isTouched = !1), void I() + } + t.cancelable && t.preventDefault(), + t.stopPropagation(), + clearTimeout(w), + (e.touchEventsData.preventTouchMoveFromPointerMove = !0), + (w = setTimeout(() => { + e.destroyed || I() + })), + (f.isMoved = !0) + const n = (a.scale - o) / (h.maxRatio - e.params.zoom.minRatio), + { originX: l, originY: p } = h + ;(f.currentX = + f.touchesCurrent.x - + f.touchesStart.x + + f.startX + + n * (f.width - 2 * l)), + (f.currentY = + f.touchesCurrent.y - + f.touchesStart.y + + f.startY + + n * (f.height - 2 * p)), + f.currentX < f.minX && + (f.currentX = f.minX + 1 - (f.minX - f.currentX + 1) ** 0.8), + f.currentX > f.maxX && + (f.currentX = f.maxX - 1 + (f.currentX - f.maxX + 1) ** 0.8), + f.currentY < f.minY && + (f.currentY = f.minY + 1 - (f.minY - f.currentY + 1) ** 0.8), + f.currentY > f.maxY && + (f.currentY = f.maxY - 1 + (f.currentY - f.maxY + 1) ** 0.8), + v.prevPositionX || (v.prevPositionX = f.touchesCurrent.x), + v.prevPositionY || (v.prevPositionY = f.touchesCurrent.y), + v.prevTime || (v.prevTime = Date.now()), + (v.x = + (f.touchesCurrent.x - v.prevPositionX) / + (Date.now() - v.prevTime) / + 2), + (v.y = + (f.touchesCurrent.y - v.prevPositionY) / + (Date.now() - v.prevTime) / + 2), + Math.abs(f.touchesCurrent.x - v.prevPositionX) < 2 && (v.x = 0), + Math.abs(f.touchesCurrent.y - v.prevPositionY) < 2 && (v.y = 0), + (v.prevPositionX = f.touchesCurrent.x), + (v.prevPositionY = f.touchesCurrent.y), + (v.prevTime = Date.now()), + (h.imageWrapEl.style.transform = `translate3d(${f.currentX}px, ${f.currentY}px,0)`) + } + function A() { + const t = e.zoom + h.slideEl && + e.activeIndex !== e.slides.indexOf(h.slideEl) && + (h.imageEl && + (h.imageEl.style.transform = 'translate3d(0,0,0) scale(1)'), + h.imageWrapEl && + (h.imageWrapEl.style.transform = 'translate3d(0,0,0)'), + h.slideEl.classList.remove(`${e.params.zoom.zoomedSlideClass}`), + (t.scale = 1), + (o = 1), + (h.slideEl = void 0), + (h.imageEl = void 0), + (h.imageWrapEl = void 0), + (h.originX = 0), + (h.originY = 0)) + } + function $(e) { + if (o <= 1 || !h.imageWrapEl) return + if (!T(e) || !M(e)) return + const t = i.getComputedStyle(h.imageWrapEl).transform, + s = new i.DOMMatrix(t) + if (!p) + return ( + (p = !0), + (u.x = e.clientX), + (u.y = e.clientY), + (f.startX = s.e), + (f.startY = s.f), + (f.width = h.imageEl.offsetWidth || h.imageEl.clientWidth), + (f.height = h.imageEl.offsetHeight || h.imageEl.clientHeight), + (h.slideWidth = h.slideEl.offsetWidth), + void (h.slideHeight = h.slideEl.offsetHeight) + ) + const a = -3 * (e.clientX - u.x), + r = -3 * (e.clientY - u.y), + n = f.width * o, + l = f.height * o, + d = h.slideWidth, + c = h.slideHeight, + m = Math.min(d / 2 - n / 2, 0), + g = -m, + v = Math.min(c / 2 - l / 2, 0), + w = -v, + b = Math.max(Math.min(f.startX + a, g), m), + y = Math.max(Math.min(f.startY + r, w), v) + ;(h.imageWrapEl.style.transitionDuration = '0ms'), + (h.imageWrapEl.style.transform = `translate3d(${b}px, ${y}px, 0)`), + (u.x = e.clientX), + (u.y = e.clientY), + (f.startX = b), + (f.startY = y), + (f.currentX = b), + (f.currentY = y) + } + function k(t) { + const s = e.zoom, + a = e.params.zoom + if (!h.slideEl) { + t && + t.target && + (h.slideEl = t.target.closest( + `.${e.params.slideClass}, swiper-slide` + )), + h.slideEl || + (e.params.virtual && e.params.virtual.enabled && e.virtual + ? (h.slideEl = g( + e.slidesEl, + `.${e.params.slideActiveClass}` + )[0]) + : (h.slideEl = e.slides[e.activeIndex])) + let s = h.slideEl.querySelector(`.${a.containerClass}`) + s && + (s = s.querySelectorAll( + 'picture, img, svg, canvas, .swiper-zoom-target' + )[0]), + (h.imageEl = s), + (h.imageWrapEl = s + ? x(h.imageEl, `.${a.containerClass}`)[0] + : void 0) + } + if (!h.imageEl || !h.imageWrapEl) return + let r, n, l, d, c, p, u, m, v, w, y, E, T, M, C, P, L, I + e.params.cssMode && + ((e.wrapperEl.style.overflow = 'hidden'), + (e.wrapperEl.style.touchAction = 'none')), + h.slideEl.classList.add(`${a.zoomedSlideClass}`), + void 0 === f.touchesStart.x && t + ? ((r = t.pageX), (n = t.pageY)) + : ((r = f.touchesStart.x), (n = f.touchesStart.y)) + const z = o, + A = 'number' == typeof t ? t : null + 1 === o && + A && + ((r = void 0), + (n = void 0), + (f.touchesStart.x = void 0), + (f.touchesStart.y = void 0)) + const $ = S() + ;(s.scale = A || $), + (o = A || $), + !t || (1 === o && A) + ? ((u = 0), (m = 0)) + : ((L = h.slideEl.offsetWidth), + (I = h.slideEl.offsetHeight), + (l = b(h.slideEl).left + i.scrollX), + (d = b(h.slideEl).top + i.scrollY), + (c = l + L / 2 - r), + (p = d + I / 2 - n), + (v = h.imageEl.offsetWidth || h.imageEl.clientWidth), + (w = h.imageEl.offsetHeight || h.imageEl.clientHeight), + (y = v * s.scale), + (E = w * s.scale), + (T = Math.min(L / 2 - y / 2, 0)), + (M = Math.min(I / 2 - E / 2, 0)), + (C = -T), + (P = -M), + z > 0 && + A && + 'number' == typeof f.currentX && + 'number' == typeof f.currentY + ? ((u = (f.currentX * s.scale) / z), + (m = (f.currentY * s.scale) / z)) + : ((u = c * s.scale), (m = p * s.scale)), + u < T && (u = T), + u > C && (u = C), + m < M && (m = M), + m > P && (m = P)), + A && 1 === s.scale && ((h.originX = 0), (h.originY = 0)), + (f.currentX = u), + (f.currentY = m), + (h.imageWrapEl.style.transitionDuration = '300ms'), + (h.imageWrapEl.style.transform = `translate3d(${u}px, ${m}px,0)`), + (h.imageEl.style.transitionDuration = '300ms'), + (h.imageEl.style.transform = `translate3d(0,0,0) scale(${s.scale})`) + } + function O() { + const t = e.zoom, + s = e.params.zoom + if (!h.slideEl) { + e.params.virtual && e.params.virtual.enabled && e.virtual + ? (h.slideEl = g(e.slidesEl, `.${e.params.slideActiveClass}`)[0]) + : (h.slideEl = e.slides[e.activeIndex]) + let t = h.slideEl.querySelector(`.${s.containerClass}`) + t && + (t = t.querySelectorAll( + 'picture, img, svg, canvas, .swiper-zoom-target' + )[0]), + (h.imageEl = t), + (h.imageWrapEl = t + ? x(h.imageEl, `.${s.containerClass}`)[0] + : void 0) + } + h.imageEl && + h.imageWrapEl && + (e.params.cssMode && + ((e.wrapperEl.style.overflow = ''), + (e.wrapperEl.style.touchAction = '')), + (t.scale = 1), + (o = 1), + (f.currentX = void 0), + (f.currentY = void 0), + (f.touchesStart.x = void 0), + (f.touchesStart.y = void 0), + (h.imageWrapEl.style.transitionDuration = '300ms'), + (h.imageWrapEl.style.transform = 'translate3d(0,0,0)'), + (h.imageEl.style.transitionDuration = '300ms'), + (h.imageEl.style.transform = 'translate3d(0,0,0) scale(1)'), + h.slideEl.classList.remove(`${s.zoomedSlideClass}`), + (h.slideEl = void 0), + (h.originX = 0), + (h.originY = 0), + e.params.zoom.panOnMouseMove && + ((u = { x: 0, y: 0 }), + p && ((p = !1), (f.startX = 0), (f.startY = 0)))) + } + function D(t) { + const s = e.zoom + s.scale && 1 !== s.scale ? O() : k(t) + } + function G() { + return { + passiveListener: !!e.params.passiveListeners && { + passive: !0, + capture: !1, + }, + activeListenerWithCapture: !e.params.passiveListeners || { + passive: !1, + capture: !0, + }, + } + } + function X() { + const t = e.zoom + if (t.enabled) return + t.enabled = !0 + const { passiveListener: s, activeListenerWithCapture: a } = G() + e.wrapperEl.addEventListener('pointerdown', C, s), + e.wrapperEl.addEventListener('pointermove', P, a), + ['pointerup', 'pointercancel', 'pointerout'].forEach((t) => { + e.wrapperEl.addEventListener(t, L, s) + }), + e.wrapperEl.addEventListener('pointermove', z, a) + } + function B() { + const t = e.zoom + if (!t.enabled) return + t.enabled = !1 + const { passiveListener: s, activeListenerWithCapture: a } = G() + e.wrapperEl.removeEventListener('pointerdown', C, s), + e.wrapperEl.removeEventListener('pointermove', P, a), + ['pointerup', 'pointercancel', 'pointerout'].forEach((t) => { + e.wrapperEl.removeEventListener(t, L, s) + }), + e.wrapperEl.removeEventListener('pointermove', z, a) + } + Object.defineProperty(e.zoom, 'scale', { + get: () => y, + set(e) { + if (y !== e) { + const t = h.imageEl, + s = h.slideEl + a('zoomChange', e, t, s) + } + y = e + }, + }), + s('init', () => { + e.params.zoom.enabled && X() + }), + s('destroy', () => { + B() + }), + s('touchStart', (t, s) => { + e.zoom.enabled && + (function (t) { + const s = e.device + if (!h.imageEl) return + if (f.isTouched) return + s.android && t.cancelable && t.preventDefault(), + (f.isTouched = !0) + const a = m.length > 0 ? m[0] : t + ;(f.touchesStart.x = a.pageX), (f.touchesStart.y = a.pageY) + })(s) + }), + s('touchEnd', (t, s) => { + e.zoom.enabled && + (function () { + const t = e.zoom + if (((m.length = 0), !h.imageEl)) return + if (!f.isTouched || !f.isMoved) + return (f.isTouched = !1), void (f.isMoved = !1) + ;(f.isTouched = !1), (f.isMoved = !1) + let s = 300, + a = 300 + const i = v.x * s, + r = f.currentX + i, + n = v.y * a, + l = f.currentY + n + 0 !== v.x && (s = Math.abs((r - f.currentX) / v.x)), + 0 !== v.y && (a = Math.abs((l - f.currentY) / v.y)) + const o = Math.max(s, a) + ;(f.currentX = r), (f.currentY = l) + const d = f.width * t.scale, + c = f.height * t.scale + ;(f.minX = Math.min(h.slideWidth / 2 - d / 2, 0)), + (f.maxX = -f.minX), + (f.minY = Math.min(h.slideHeight / 2 - c / 2, 0)), + (f.maxY = -f.minY), + (f.currentX = Math.max(Math.min(f.currentX, f.maxX), f.minX)), + (f.currentY = Math.max(Math.min(f.currentY, f.maxY), f.minY)), + (h.imageWrapEl.style.transitionDuration = `${o}ms`), + (h.imageWrapEl.style.transform = `translate3d(${f.currentX}px, ${f.currentY}px,0)`) + })() + }), + s('doubleTap', (t, s) => { + !e.animating && + e.params.zoom.enabled && + e.zoom.enabled && + e.params.zoom.toggle && + D(s) + }), + s('transitionEnd', () => { + e.zoom.enabled && e.params.zoom.enabled && A() + }), + s('slideChange', () => { + e.zoom.enabled && e.params.zoom.enabled && e.params.cssMode && A() + }), + Object.assign(e.zoom, { + enable: X, + disable: B, + in: k, + out: O, + toggle: D, + }) + }, + function ({ swiper: e, extendParams: t, on: s }) { + function a(e, t) { + const s = (function () { + let e, t, s + return (a, i) => { + for (t = -1, e = a.length; e - t > 1; ) + (s = (e + t) >> 1), a[s] <= i ? (t = s) : (e = s) + return e + } + })() + let a, i + return ( + (this.x = e), + (this.y = t), + (this.lastIndex = e.length - 1), + (this.interpolate = function (e) { + return e + ? ((i = s(this.x, e)), + (a = i - 1), + ((e - this.x[a]) * (this.y[i] - this.y[a])) / + (this.x[i] - this.x[a]) + + this.y[a]) + : 0 + }), + this + ) + } + function i() { + e.controller.control && + e.controller.spline && + ((e.controller.spline = void 0), delete e.controller.spline) + } + t({ controller: { control: void 0, inverse: !1, by: 'slide' } }), + (e.controller = { control: void 0 }), + s('beforeInit', () => { + if ( + 'undefined' != typeof window && + ('string' == typeof e.params.controller.control || + e.params.controller.control instanceof HTMLElement) + ) { + return void ( + 'string' == typeof e.params.controller.control + ? [...document.querySelectorAll(e.params.controller.control)] + : [e.params.controller.control] + ).forEach((t) => { + if ( + (e.controller.control || (e.controller.control = []), + t && t.swiper) + ) + e.controller.control.push(t.swiper) + else if (t) { + const s = `${e.params.eventsPrefix}init`, + a = (i) => { + e.controller.control.push(i.detail[0]), + e.update(), + t.removeEventListener(s, a) + } + t.addEventListener(s, a) + } + }) + } + e.controller.control = e.params.controller.control + }), + s('update', () => { + i() + }), + s('resize', () => { + i() + }), + s('observerUpdate', () => { + i() + }), + s('setTranslate', (t, s, a) => { + e.controller.control && + !e.controller.control.destroyed && + e.controller.setTranslate(s, a) + }), + s('setTransition', (t, s, a) => { + e.controller.control && + !e.controller.control.destroyed && + e.controller.setTransition(s, a) + }), + Object.assign(e.controller, { + setTranslate: function (t, s) { + const i = e.controller.control + let r, n + const l = e.constructor + function o(t) { + if (t.destroyed) return + const s = e.rtlTranslate ? -e.translate : e.translate + 'slide' === e.params.controller.by && + (!(function (t) { + e.controller.spline = e.params.loop + ? new a(e.slidesGrid, t.slidesGrid) + : new a(e.snapGrid, t.snapGrid) + })(t), + (n = -e.controller.spline.interpolate(-s))), + (n && 'container' !== e.params.controller.by) || + ((r = + (t.maxTranslate() - t.minTranslate()) / + (e.maxTranslate() - e.minTranslate())), + (!Number.isNaN(r) && Number.isFinite(r)) || (r = 1), + (n = (s - e.minTranslate()) * r + t.minTranslate())), + e.params.controller.inverse && (n = t.maxTranslate() - n), + t.updateProgress(n), + t.setTranslate(n, e), + t.updateActiveIndex(), + t.updateSlidesClasses() + } + if (Array.isArray(i)) + for (let e = 0; e < i.length; e += 1) + i[e] !== s && i[e] instanceof l && o(i[e]) + else i instanceof l && s !== i && o(i) + }, + setTransition: function (t, s) { + const a = e.constructor, + i = e.controller.control + let r + function n(s) { + s.destroyed || + (s.setTransition(t, e), + 0 !== t && + (s.transitionStart(), + s.params.autoHeight && + l(() => { + s.updateAutoHeight() + }), + S(s.wrapperEl, () => { + i && s.transitionEnd() + }))) + } + if (Array.isArray(i)) + for (r = 0; r < i.length; r += 1) + i[r] !== s && i[r] instanceof a && n(i[r]) + else i instanceof a && s !== i && n(i) + }, + }) + }, + function ({ swiper: e, extendParams: t, on: s }) { + t({ + a11y: { + enabled: !0, + notificationClass: 'swiper-notification', + prevSlideMessage: 'Previous slide', + nextSlideMessage: 'Next slide', + firstSlideMessage: 'This is the first slide', + lastSlideMessage: 'This is the last slide', + paginationBulletMessage: 'Go to slide {{index}}', + slideLabelMessage: '{{index}} / {{slidesLength}}', + containerMessage: null, + containerRoleDescriptionMessage: null, + containerRole: null, + itemRoleDescriptionMessage: null, + slideRole: 'group', + id: null, + scrollOnFocus: !0, + wrapperLiveRegion: !0, + }, + }), + (e.a11y = { clicked: !1 }) + let i, + r, + n = null, + l = new Date().getTime() + function o(e) { + const t = n + 0 !== t.length && P(t, e) + } + function d(e) { + ;(e = M(e)).forEach((e) => { + e.setAttribute('tabIndex', '0') + }) + } + function c(e) { + ;(e = M(e)).forEach((e) => { + e.setAttribute('tabIndex', '-1') + }) + } + function p(e, t) { + ;(e = M(e)).forEach((e) => { + e.setAttribute('role', t) + }) + } + function u(e, t) { + ;(e = M(e)).forEach((e) => { + e.setAttribute('aria-roledescription', t) + }) + } + function m(e, t) { + ;(e = M(e)).forEach((e) => { + e.setAttribute('aria-label', t) + }) + } + function h(e) { + ;(e = M(e)).forEach((e) => { + e.setAttribute('aria-disabled', !0) + }) + } + function f(e) { + ;(e = M(e)).forEach((e) => { + e.setAttribute('aria-disabled', !1) + }) + } + function g(t) { + if (13 !== t.keyCode && 32 !== t.keyCode) return + const s = e.params.a11y, + a = t.target + if ( + !e.pagination || + !e.pagination.el || + (a !== e.pagination.el && !e.pagination.el.contains(t.target)) || + t.target.matches(de(e.params.pagination.bulletClass)) + ) { + if (e.navigation && e.navigation.prevEl && e.navigation.nextEl) { + const t = M(e.navigation.prevEl) + M(e.navigation.nextEl).includes(a) && + ((e.isEnd && !e.params.loop) || e.slideNext(), + e.isEnd ? o(s.lastSlideMessage) : o(s.nextSlideMessage)), + t.includes(a) && + ((e.isBeginning && !e.params.loop) || e.slidePrev(), + e.isBeginning ? o(s.firstSlideMessage) : o(s.prevSlideMessage)) + } + e.pagination && + a.matches(de(e.params.pagination.bulletClass)) && + a.click() + } + } + function v() { + return ( + e.pagination && e.pagination.bullets && e.pagination.bullets.length + ) + } + function b() { + return v() && e.params.pagination.clickable + } + const y = (e, t, s) => { + d(e), + 'BUTTON' !== e.tagName && + (p(e, 'button'), e.addEventListener('keydown', g)), + m(e, s), + (function (e, t) { + ;(e = M(e)).forEach((e) => { + e.setAttribute('aria-controls', t) + }) + })(e, t) + }, + x = (t) => { + r && r !== t.target && !r.contains(t.target) && (i = !0), + (e.a11y.clicked = !0) + }, + S = () => { + ;(i = !1), + requestAnimationFrame(() => { + requestAnimationFrame(() => { + e.destroyed || (e.a11y.clicked = !1) + }) + }) + }, + T = (e) => { + l = new Date().getTime() + }, + C = (t) => { + if (e.a11y.clicked || !e.params.a11y.scrollOnFocus) return + if (new Date().getTime() - l < 100) return + const s = t.target.closest(`.${e.params.slideClass}, swiper-slide`) + if (!s || !e.slides.includes(s)) return + r = s + const a = e.slides.indexOf(s) === e.activeIndex, + n = + e.params.watchSlidesProgress && + e.visibleSlides && + e.visibleSlides.includes(s) + a || + n || + (t.sourceCapabilities && t.sourceCapabilities.firesTouchEvents) || + (e.isHorizontal() ? (e.el.scrollLeft = 0) : (e.el.scrollTop = 0), + requestAnimationFrame(() => { + i || + (e.params.loop + ? e.slideToLoop( + e.getSlideIndexWhenGrid( + parseInt(s.getAttribute('data-swiper-slide-index')) + ), + 0 + ) + : e.slideTo(e.getSlideIndexWhenGrid(e.slides.indexOf(s)), 0), + (i = !1)) + })) + }, + L = () => { + const t = e.params.a11y + t.itemRoleDescriptionMessage && + u(e.slides, t.itemRoleDescriptionMessage), + t.slideRole && p(e.slides, t.slideRole) + const s = e.slides.length + t.slideLabelMessage && + e.slides.forEach((a, i) => { + const r = e.params.loop + ? parseInt(a.getAttribute('data-swiper-slide-index'), 10) + : i + m( + a, + t.slideLabelMessage + .replace(/\{\{index\}\}/, r + 1) + .replace(/\{\{slidesLength\}\}/, s) + ) + }) + }, + I = () => { + const t = e.params.a11y + e.el.append(n) + const s = e.el + t.containerRoleDescriptionMessage && + u(s, t.containerRoleDescriptionMessage), + t.containerMessage && m(s, t.containerMessage), + t.containerRole && p(s, t.containerRole) + const i = e.wrapperEl, + r = + t.id || + i.getAttribute('id') || + `swiper-wrapper-${(function (e = 16) { + return 'x' + .repeat(e) + .replace(/x/g, () => + Math.round(16 * Math.random()).toString(16) + ) + })(16)}` + var l + if ( + ((l = r), + M(i).forEach((e) => { + e.setAttribute('id', l) + }), + t.wrapperLiveRegion) + ) { + !(function (e, t) { + ;(e = M(e)).forEach((e) => { + e.setAttribute('aria-live', t) + }) + })( + i, + e.params.autoplay && e.params.autoplay.enabled ? 'off' : 'polite' + ) + } + L() + let { nextEl: o, prevEl: d } = e.navigation ? e.navigation : {} + if ( + ((o = M(o)), + (d = M(d)), + o && o.forEach((e) => y(e, r, t.nextSlideMessage)), + d && d.forEach((e) => y(e, r, t.prevSlideMessage)), + b()) + ) { + M(e.pagination.el).forEach((e) => { + e.addEventListener('keydown', g) + }) + } + a().addEventListener('visibilitychange', T), + e.el.addEventListener('focus', C, !0), + e.el.addEventListener('focus', C, !0), + e.el.addEventListener('pointerdown', x, !0), + e.el.addEventListener('pointerup', S, !0) + } + s('beforeInit', () => { + ;(n = w('span', e.params.a11y.notificationClass)), + n.setAttribute('aria-live', 'assertive'), + n.setAttribute('aria-atomic', 'true') + }), + s('afterInit', () => { + e.params.a11y.enabled && I() + }), + s( + 'slidesLengthChange snapGridLengthChange slidesGridLengthChange', + () => { + e.params.a11y.enabled && L() + } + ), + s('fromEdge toEdge afterInit lock unlock', () => { + e.params.a11y.enabled && + (function () { + if (e.params.loop || e.params.rewind || !e.navigation) return + const { nextEl: t, prevEl: s } = e.navigation + s && (e.isBeginning ? (h(s), c(s)) : (f(s), d(s))), + t && (e.isEnd ? (h(t), c(t)) : (f(t), d(t))) + })() + }), + s('paginationUpdate', () => { + e.params.a11y.enabled && + (function () { + const t = e.params.a11y + v() && + e.pagination.bullets.forEach((s) => { + e.params.pagination.clickable && + (d(s), + e.params.pagination.renderBullet || + (p(s, 'button'), + m( + s, + t.paginationBulletMessage.replace( + /\{\{index\}\}/, + E(s) + 1 + ) + ))), + s.matches(de(e.params.pagination.bulletActiveClass)) + ? s.setAttribute('aria-current', 'true') + : s.removeAttribute('aria-current') + }) + })() + }), + s('destroy', () => { + e.params.a11y.enabled && + (function () { + n && n.remove() + let { nextEl: t, prevEl: s } = e.navigation ? e.navigation : {} + ;(t = M(t)), + (s = M(s)), + t && t.forEach((e) => e.removeEventListener('keydown', g)), + s && s.forEach((e) => e.removeEventListener('keydown', g)), + b() && + M(e.pagination.el).forEach((e) => { + e.removeEventListener('keydown', g) + }) + a().removeEventListener('visibilitychange', T), + e.el && + 'string' != typeof e.el && + (e.el.removeEventListener('focus', C, !0), + e.el.removeEventListener('pointerdown', x, !0), + e.el.removeEventListener('pointerup', S, !0)) + })() + }) + }, + function ({ swiper: e, extendParams: t, on: s }) { + t({ + history: { + enabled: !1, + root: '', + replaceState: !1, + key: 'slides', + keepQuery: !1, + }, + }) + let a = !1, + i = {} + const n = (e) => + e + .toString() + .replace(/\s+/g, '-') + .replace(/[^\w-]+/g, '') + .replace(/--+/g, '-') + .replace(/^-+/, '') + .replace(/-+$/, ''), + l = (e) => { + const t = r() + let s + s = e ? new URL(e) : t.location + const a = s.pathname + .slice(1) + .split('/') + .filter((e) => '' !== e), + i = a.length + return { key: a[i - 2], value: a[i - 1] } + }, + o = (t, s) => { + const i = r() + if (!a || !e.params.history.enabled) return + let l + l = e.params.url ? new URL(e.params.url) : i.location + const o = + e.virtual && e.params.virtual.enabled + ? e.slidesEl.querySelector(`[data-swiper-slide-index="${s}"]`) + : e.slides[s] + let d = n(o.getAttribute('data-history')) + if (e.params.history.root.length > 0) { + let s = e.params.history.root + '/' === s[s.length - 1] && (s = s.slice(0, s.length - 1)), + (d = `${s}/${t ? `${t}/` : ''}${d}`) + } else l.pathname.includes(t) || (d = `${t ? `${t}/` : ''}${d}`) + e.params.history.keepQuery && (d += l.search) + const c = i.history.state + ;(c && c.value === d) || + (e.params.history.replaceState + ? i.history.replaceState({ value: d }, null, d) + : i.history.pushState({ value: d }, null, d)) + }, + d = (t, s, a) => { + if (s) + for (let i = 0, r = e.slides.length; i < r; i += 1) { + const r = e.slides[i] + if (n(r.getAttribute('data-history')) === s) { + const s = e.getSlideIndex(r) + e.slideTo(s, t, a) + } + } + else e.slideTo(0, t, a) + }, + c = () => { + ;(i = l(e.params.url)), d(e.params.speed, i.value, !1) + } + s('init', () => { + e.params.history.enabled && + (() => { + const t = r() + if (e.params.history) { + if (!t.history || !t.history.pushState) + return ( + (e.params.history.enabled = !1), + void (e.params.hashNavigation.enabled = !0) + ) + ;(a = !0), + (i = l(e.params.url)), + i.key || i.value + ? (d(0, i.value, e.params.runCallbacksOnInit), + e.params.history.replaceState || + t.addEventListener('popstate', c)) + : e.params.history.replaceState || + t.addEventListener('popstate', c) + } + })() + }), + s('destroy', () => { + e.params.history.enabled && + (() => { + const t = r() + e.params.history.replaceState || + t.removeEventListener('popstate', c) + })() + }), + s('transitionEnd _freeModeNoMomentumRelease', () => { + a && o(e.params.history.key, e.activeIndex) + }), + s('slideChange', () => { + a && e.params.cssMode && o(e.params.history.key, e.activeIndex) + }) + }, + function ({ swiper: e, extendParams: t, emit: s, on: i }) { + let n = !1 + const l = a(), + o = r() + t({ + hashNavigation: { + enabled: !1, + replaceState: !1, + watchState: !1, + getSlideIndex(t, s) { + if (e.virtual && e.params.virtual.enabled) { + const t = e.slides.find((e) => e.getAttribute('data-hash') === s) + if (!t) return 0 + return parseInt(t.getAttribute('data-swiper-slide-index'), 10) + } + return e.getSlideIndex( + g( + e.slidesEl, + `.${e.params.slideClass}[data-hash="${s}"], swiper-slide[data-hash="${s}"]` + )[0] + ) + }, + }, + }) + const d = () => { + s('hashChange') + const t = l.location.hash.replace('#', ''), + a = + e.virtual && e.params.virtual.enabled + ? e.slidesEl.querySelector( + `[data-swiper-slide-index="${e.activeIndex}"]` + ) + : e.slides[e.activeIndex] + if (t !== (a ? a.getAttribute('data-hash') : '')) { + const s = e.params.hashNavigation.getSlideIndex(e, t) + if (void 0 === s || Number.isNaN(s)) return + e.slideTo(s) + } + }, + c = () => { + if (!n || !e.params.hashNavigation.enabled) return + const t = + e.virtual && e.params.virtual.enabled + ? e.slidesEl.querySelector( + `[data-swiper-slide-index="${e.activeIndex}"]` + ) + : e.slides[e.activeIndex], + a = t + ? t.getAttribute('data-hash') || t.getAttribute('data-history') + : '' + e.params.hashNavigation.replaceState && + o.history && + o.history.replaceState + ? (o.history.replaceState(null, null, `#${a}` || ''), s('hashSet')) + : ((l.location.hash = a || ''), s('hashSet')) + } + i('init', () => { + e.params.hashNavigation.enabled && + (() => { + if ( + !e.params.hashNavigation.enabled || + (e.params.history && e.params.history.enabled) + ) + return + n = !0 + const t = l.location.hash.replace('#', '') + if (t) { + const s = 0, + a = e.params.hashNavigation.getSlideIndex(e, t) + e.slideTo(a || 0, s, e.params.runCallbacksOnInit, !0) + } + e.params.hashNavigation.watchState && + o.addEventListener('hashchange', d) + })() + }), + i('destroy', () => { + e.params.hashNavigation.enabled && + e.params.hashNavigation.watchState && + o.removeEventListener('hashchange', d) + }), + i('transitionEnd _freeModeNoMomentumRelease', () => { + n && c() + }), + i('slideChange', () => { + n && e.params.cssMode && c() + }) + }, + function ({ swiper: e, extendParams: t, on: s, emit: i, params: r }) { + let n, l + ;(e.autoplay = { running: !1, paused: !1, timeLeft: 0 }), + t({ + autoplay: { + enabled: !1, + delay: 3e3, + waitForTransition: !0, + disableOnInteraction: !1, + stopOnLastSlide: !1, + reverseDirection: !1, + pauseOnMouseEnter: !1, + }, + }) + let o, + d, + c, + p, + u, + m, + h, + f, + g = r && r.autoplay ? r.autoplay.delay : 3e3, + v = r && r.autoplay ? r.autoplay.delay : 3e3, + w = new Date().getTime() + function b(t) { + e && + !e.destroyed && + e.wrapperEl && + t.target === e.wrapperEl && + (e.wrapperEl.removeEventListener('transitionend', b), + f || (t.detail && t.detail.bySwiperTouchMove) || M()) + } + const y = () => { + if (e.destroyed || !e.autoplay.running) return + e.autoplay.paused ? (d = !0) : d && ((v = o), (d = !1)) + const t = e.autoplay.paused ? o : w + v - new Date().getTime() + ;(e.autoplay.timeLeft = t), + i('autoplayTimeLeft', t, t / g), + (l = requestAnimationFrame(() => { + y() + })) + }, + E = (t) => { + if (e.destroyed || !e.autoplay.running) return + cancelAnimationFrame(l), y() + let s = void 0 === t ? e.params.autoplay.delay : t + ;(g = e.params.autoplay.delay), (v = e.params.autoplay.delay) + const a = (() => { + let t + if ( + ((t = + e.virtual && e.params.virtual.enabled + ? e.slides.find((e) => + e.classList.contains('swiper-slide-active') + ) + : e.slides[e.activeIndex]), + !t) + ) + return + return parseInt(t.getAttribute('data-swiper-autoplay'), 10) + })() + !Number.isNaN(a) && + a > 0 && + void 0 === t && + ((s = a), (g = a), (v = a)), + (o = s) + const r = e.params.speed, + d = () => { + e && + !e.destroyed && + (e.params.autoplay.reverseDirection + ? !e.isBeginning || e.params.loop || e.params.rewind + ? (e.slidePrev(r, !0, !0), i('autoplay')) + : e.params.autoplay.stopOnLastSlide || + (e.slideTo(e.slides.length - 1, r, !0, !0), i('autoplay')) + : !e.isEnd || e.params.loop || e.params.rewind + ? (e.slideNext(r, !0, !0), i('autoplay')) + : e.params.autoplay.stopOnLastSlide || + (e.slideTo(0, r, !0, !0), i('autoplay')), + e.params.cssMode && + ((w = new Date().getTime()), + requestAnimationFrame(() => { + E() + }))) + } + return ( + s > 0 + ? (clearTimeout(n), + (n = setTimeout(() => { + d() + }, s))) + : requestAnimationFrame(() => { + d() + }), + s + ) + }, + x = () => { + ;(w = new Date().getTime()), + (e.autoplay.running = !0), + E(), + i('autoplayStart') + }, + S = () => { + ;(e.autoplay.running = !1), + clearTimeout(n), + cancelAnimationFrame(l), + i('autoplayStop') + }, + T = (t, s) => { + if (e.destroyed || !e.autoplay.running) return + clearTimeout(n), t || (h = !0) + const a = () => { + i('autoplayPause'), + e.params.autoplay.waitForTransition + ? e.wrapperEl.addEventListener('transitionend', b) + : M() + } + if (((e.autoplay.paused = !0), s)) + return m && (o = e.params.autoplay.delay), (m = !1), void a() + const r = o || e.params.autoplay.delay + ;(o = r - (new Date().getTime() - w)), + (e.isEnd && o < 0 && !e.params.loop) || (o < 0 && (o = 0), a()) + }, + M = () => { + ;(e.isEnd && o < 0 && !e.params.loop) || + e.destroyed || + !e.autoplay.running || + ((w = new Date().getTime()), + h ? ((h = !1), E(o)) : E(), + (e.autoplay.paused = !1), + i('autoplayResume')) + }, + C = () => { + if (e.destroyed || !e.autoplay.running) return + const t = a() + 'hidden' === t.visibilityState && ((h = !0), T(!0)), + 'visible' === t.visibilityState && M() + }, + P = (t) => { + 'mouse' === t.pointerType && + ((h = !0), (f = !0), e.animating || e.autoplay.paused || T(!0)) + }, + L = (t) => { + 'mouse' === t.pointerType && ((f = !1), e.autoplay.paused && M()) + } + s('init', () => { + e.params.autoplay.enabled && + (e.params.autoplay.pauseOnMouseEnter && + (e.el.addEventListener('pointerenter', P), + e.el.addEventListener('pointerleave', L)), + a().addEventListener('visibilitychange', C), + x()) + }), + s('destroy', () => { + e.el && + 'string' != typeof e.el && + (e.el.removeEventListener('pointerenter', P), + e.el.removeEventListener('pointerleave', L)), + a().removeEventListener('visibilitychange', C), + e.autoplay.running && S() + }), + s('_freeModeStaticRelease', () => { + ;(p || h) && M() + }), + s('_freeModeNoMomentumRelease', () => { + e.params.autoplay.disableOnInteraction ? S() : T(!0, !0) + }), + s('beforeTransitionStart', (t, s, a) => { + !e.destroyed && + e.autoplay.running && + (a || !e.params.autoplay.disableOnInteraction ? T(!0, !0) : S()) + }), + s('sliderFirstMove', () => { + !e.destroyed && + e.autoplay.running && + (e.params.autoplay.disableOnInteraction + ? S() + : ((c = !0), + (p = !1), + (h = !1), + (u = setTimeout(() => { + ;(h = !0), (p = !0), T(!0) + }, 200)))) + }), + s('touchEnd', () => { + if (!e.destroyed && e.autoplay.running && c) { + if ( + (clearTimeout(u), + clearTimeout(n), + e.params.autoplay.disableOnInteraction) + ) + return (p = !1), void (c = !1) + p && e.params.cssMode && M(), (p = !1), (c = !1) + } + }), + s('slideChange', () => { + !e.destroyed && e.autoplay.running && (m = !0) + }), + Object.assign(e.autoplay, { start: x, stop: S, pause: T, resume: M }) + }, + function ({ swiper: e, extendParams: t, on: s }) { + t({ + thumbs: { + swiper: null, + multipleActiveThumbs: !0, + autoScrollOffset: 0, + slideThumbActiveClass: 'swiper-slide-thumb-active', + thumbsContainerClass: 'swiper-thumbs', + }, + }) + let i = !1, + r = !1 + function n() { + const t = e.thumbs.swiper + if (!t || t.destroyed) return + const s = t.clickedIndex, + a = t.clickedSlide + if (a && a.classList.contains(e.params.thumbs.slideThumbActiveClass)) + return + if (null == s) return + let i + ;(i = t.params.loop + ? parseInt(t.clickedSlide.getAttribute('data-swiper-slide-index'), 10) + : s), + e.params.loop ? e.slideToLoop(i) : e.slideTo(i) + } + function l() { + const { thumbs: t } = e.params + if (i) return !1 + i = !0 + const s = e.constructor + if (t.swiper instanceof s) { + if (t.swiper.destroyed) return (i = !1), !1 + ;(e.thumbs.swiper = t.swiper), + Object.assign(e.thumbs.swiper.originalParams, { + watchSlidesProgress: !0, + slideToClickedSlide: !1, + }), + Object.assign(e.thumbs.swiper.params, { + watchSlidesProgress: !0, + slideToClickedSlide: !1, + }), + e.thumbs.swiper.update() + } else if (c(t.swiper)) { + const a = Object.assign({}, t.swiper) + Object.assign(a, { + watchSlidesProgress: !0, + slideToClickedSlide: !1, + }), + (e.thumbs.swiper = new s(a)), + (r = !0) + } + return ( + e.thumbs.swiper.el.classList.add( + e.params.thumbs.thumbsContainerClass + ), + e.thumbs.swiper.on('tap', n), + !0 + ) + } + function o(t) { + const s = e.thumbs.swiper + if (!s || s.destroyed) return + const a = + 'auto' === s.params.slidesPerView + ? s.slidesPerViewDynamic() + : s.params.slidesPerView + let i = 1 + const r = e.params.thumbs.slideThumbActiveClass + if ( + (e.params.slidesPerView > 1 && + !e.params.centeredSlides && + (i = e.params.slidesPerView), + e.params.thumbs.multipleActiveThumbs || (i = 1), + (i = Math.floor(i)), + s.slides.forEach((e) => e.classList.remove(r)), + s.params.loop || (s.params.virtual && s.params.virtual.enabled)) + ) + for (let t = 0; t < i; t += 1) + g( + s.slidesEl, + `[data-swiper-slide-index="${e.realIndex + t}"]` + ).forEach((e) => { + e.classList.add(r) + }) + else + for (let t = 0; t < i; t += 1) + s.slides[e.realIndex + t] && + s.slides[e.realIndex + t].classList.add(r) + const n = e.params.thumbs.autoScrollOffset, + l = n && !s.params.loop + if (e.realIndex !== s.realIndex || l) { + const i = s.activeIndex + let r, o + if (s.params.loop) { + const t = s.slides.find( + (t) => + t.getAttribute('data-swiper-slide-index') === `${e.realIndex}` + ) + ;(r = s.slides.indexOf(t)), + (o = e.activeIndex > e.previousIndex ? 'next' : 'prev') + } else (r = e.realIndex), (o = r > e.previousIndex ? 'next' : 'prev') + l && (r += 'next' === o ? n : -1 * n), + s.visibleSlidesIndexes && + s.visibleSlidesIndexes.indexOf(r) < 0 && + (s.params.centeredSlides + ? (r = + r > i + ? r - Math.floor(a / 2) + 1 + : r + Math.floor(a / 2) - 1) + : r > i && s.params.slidesPerGroup, + s.slideTo(r, t ? 0 : void 0)) + } + } + ;(e.thumbs = { swiper: null }), + s('beforeInit', () => { + const { thumbs: t } = e.params + if (t && t.swiper) + if ( + 'string' == typeof t.swiper || + t.swiper instanceof HTMLElement + ) { + const s = a(), + i = () => { + const a = + 'string' == typeof t.swiper + ? s.querySelector(t.swiper) + : t.swiper + if (a && a.swiper) (t.swiper = a.swiper), l(), o(!0) + else if (a) { + const s = `${e.params.eventsPrefix}init`, + i = (r) => { + ;(t.swiper = r.detail[0]), + a.removeEventListener(s, i), + l(), + o(!0), + t.swiper.update(), + e.update() + } + a.addEventListener(s, i) + } + return a + }, + r = () => { + if (e.destroyed) return + i() || requestAnimationFrame(r) + } + requestAnimationFrame(r) + } else l(), o(!0) + }), + s('slideChange update resize observerUpdate', () => { + o() + }), + s('setTransition', (t, s) => { + const a = e.thumbs.swiper + a && !a.destroyed && a.setTransition(s) + }), + s('beforeDestroy', () => { + const t = e.thumbs.swiper + t && !t.destroyed && r && t.destroy() + }), + Object.assign(e.thumbs, { init: l, update: o }) + }, + function ({ swiper: e, extendParams: t, emit: s, once: a }) { + t({ + freeMode: { + enabled: !1, + momentum: !0, + momentumRatio: 1, + momentumBounce: !0, + momentumBounceRatio: 1, + momentumVelocityRatio: 1, + sticky: !1, + minimumVelocity: 0.02, + }, + }), + Object.assign(e, { + freeMode: { + onTouchStart: function () { + if (e.params.cssMode) return + const t = e.getTranslate() + e.setTranslate(t), + e.setTransition(0), + (e.touchEventsData.velocities.length = 0), + e.freeMode.onTouchEnd({ + currentPos: e.rtl ? e.translate : -e.translate, + }) + }, + onTouchMove: function () { + if (e.params.cssMode) return + const { touchEventsData: t, touches: s } = e + 0 === t.velocities.length && + t.velocities.push({ + position: s[e.isHorizontal() ? 'startX' : 'startY'], + time: t.touchStartTime, + }), + t.velocities.push({ + position: s[e.isHorizontal() ? 'currentX' : 'currentY'], + time: o(), + }) + }, + onTouchEnd: function ({ currentPos: t }) { + if (e.params.cssMode) return + const { + params: i, + wrapperEl: r, + rtlTranslate: n, + snapGrid: l, + touchEventsData: d, + } = e, + c = o() - d.touchStartTime + if (t < -e.minTranslate()) e.slideTo(e.activeIndex) + else if (t > -e.maxTranslate()) + e.slides.length < l.length + ? e.slideTo(l.length - 1) + : e.slideTo(e.slides.length - 1) + else { + if (i.freeMode.momentum) { + if (d.velocities.length > 1) { + const t = d.velocities.pop(), + s = d.velocities.pop(), + a = t.position - s.position, + r = t.time - s.time + ;(e.velocity = a / r), + (e.velocity /= 2), + Math.abs(e.velocity) < i.freeMode.minimumVelocity && + (e.velocity = 0), + (r > 150 || o() - t.time > 300) && (e.velocity = 0) + } else e.velocity = 0 + ;(e.velocity *= i.freeMode.momentumVelocityRatio), + (d.velocities.length = 0) + let t = 1e3 * i.freeMode.momentumRatio + const c = e.velocity * t + let p = e.translate + c + n && (p = -p) + let u, + m = !1 + const h = + 20 * Math.abs(e.velocity) * i.freeMode.momentumBounceRatio + let f + if (p < e.maxTranslate()) + i.freeMode.momentumBounce + ? (p + e.maxTranslate() < -h && + (p = e.maxTranslate() - h), + (u = e.maxTranslate()), + (m = !0), + (d.allowMomentumBounce = !0)) + : (p = e.maxTranslate()), + i.loop && i.centeredSlides && (f = !0) + else if (p > e.minTranslate()) + i.freeMode.momentumBounce + ? (p - e.minTranslate() > h && (p = e.minTranslate() + h), + (u = e.minTranslate()), + (m = !0), + (d.allowMomentumBounce = !0)) + : (p = e.minTranslate()), + i.loop && i.centeredSlides && (f = !0) + else if (i.freeMode.sticky) { + let t + for (let e = 0; e < l.length; e += 1) + if (l[e] > -p) { + t = e + break + } + ;(p = + Math.abs(l[t] - p) < Math.abs(l[t - 1] - p) || + 'next' === e.swipeDirection + ? l[t] + : l[t - 1]), + (p = -p) + } + if ( + (f && + a('transitionEnd', () => { + e.loopFix() + }), + 0 !== e.velocity) + ) { + if ( + ((t = n + ? Math.abs((-p - e.translate) / e.velocity) + : Math.abs((p - e.translate) / e.velocity)), + i.freeMode.sticky) + ) { + const s = Math.abs((n ? -p : p) - e.translate), + a = e.slidesSizesGrid[e.activeIndex] + t = + s < a + ? i.speed + : s < 2 * a + ? 1.5 * i.speed + : 2.5 * i.speed + } + } else if (i.freeMode.sticky) return void e.slideToClosest() + i.freeMode.momentumBounce && m + ? (e.updateProgress(u), + e.setTransition(t), + e.setTranslate(p), + e.transitionStart(!0, e.swipeDirection), + (e.animating = !0), + S(r, () => { + e && + !e.destroyed && + d.allowMomentumBounce && + (s('momentumBounce'), + e.setTransition(i.speed), + setTimeout(() => { + e.setTranslate(u), + S(r, () => { + e && !e.destroyed && e.transitionEnd() + }) + }, 0)) + })) + : e.velocity + ? (s('_freeModeNoMomentumRelease'), + e.updateProgress(p), + e.setTransition(t), + e.setTranslate(p), + e.transitionStart(!0, e.swipeDirection), + e.animating || + ((e.animating = !0), + S(r, () => { + e && !e.destroyed && e.transitionEnd() + }))) + : e.updateProgress(p), + e.updateActiveIndex(), + e.updateSlidesClasses() + } else { + if (i.freeMode.sticky) return void e.slideToClosest() + i.freeMode && s('_freeModeNoMomentumRelease') + } + ;(!i.freeMode.momentum || c >= i.longSwipesMs) && + (s('_freeModeStaticRelease'), + e.updateProgress(), + e.updateActiveIndex(), + e.updateSlidesClasses()) + } + }, + }, + }) + }, + function ({ swiper: e, extendParams: t, on: s }) { + let a, i, r, n + t({ grid: { rows: 1, fill: 'column' } }) + const l = () => { + let t = e.params.spaceBetween + return ( + 'string' == typeof t && t.indexOf('%') >= 0 + ? (t = (parseFloat(t.replace('%', '')) / 100) * e.size) + : 'string' == typeof t && (t = parseFloat(t)), + t + ) + } + s('init', () => { + n = e.params.grid && e.params.grid.rows > 1 + }), + s('update', () => { + const { params: t, el: s } = e, + a = t.grid && t.grid.rows > 1 + n && !a + ? (s.classList.remove( + `${t.containerModifierClass}grid`, + `${t.containerModifierClass}grid-column` + ), + (r = 1), + e.emitContainerClasses()) + : !n && + a && + (s.classList.add(`${t.containerModifierClass}grid`), + 'column' === t.grid.fill && + s.classList.add(`${t.containerModifierClass}grid-column`), + e.emitContainerClasses()), + (n = a) + }), + (e.grid = { + initSlides: (t) => { + const { slidesPerView: s } = e.params, + { rows: n, fill: l } = e.params.grid, + o = + e.virtual && e.params.virtual.enabled + ? e.virtual.slides.length + : t.length + ;(r = Math.floor(o / n)), + (a = Math.floor(o / n) === o / n ? o : Math.ceil(o / n) * n), + 'auto' !== s && 'row' === l && (a = Math.max(a, s * n)), + (i = a / n) + }, + unsetSlides: () => { + e.slides && + e.slides.forEach((t) => { + t.swiperSlideGridSet && + ((t.style.height = ''), + (t.style[e.getDirectionLabel('margin-top')] = '')) + }) + }, + updateSlide: (t, s, n) => { + const { slidesPerGroup: o } = e.params, + d = l(), + { rows: c, fill: p } = e.params.grid, + u = + e.virtual && e.params.virtual.enabled + ? e.virtual.slides.length + : n.length + let m, h, f + if ('row' === p && o > 1) { + const e = Math.floor(t / (o * c)), + i = t - c * o * e, + r = 0 === e ? o : Math.min(Math.ceil((u - e * c * o) / c), o) + ;(f = Math.floor(i / r)), + (h = i - f * r + e * o), + (m = h + (f * a) / c), + (s.style.order = m) + } else + 'column' === p + ? ((h = Math.floor(t / c)), + (f = t - h * c), + (h > r || (h === r && f === c - 1)) && + ((f += 1), f >= c && ((f = 0), (h += 1)))) + : ((f = Math.floor(t / i)), (h = t - f * i)) + ;(s.row = f), + (s.column = h), + (s.style.height = `calc((100% - ${(c - 1) * d}px) / ${c})`), + (s.style[e.getDirectionLabel('margin-top')] = + 0 !== f ? d && `${d}px` : ''), + (s.swiperSlideGridSet = !0) + }, + updateWrapperSize: (t, s) => { + const { centeredSlides: i, roundLengths: r } = e.params, + n = l(), + { rows: o } = e.params.grid + if ( + ((e.virtualSize = (t + n) * a), + (e.virtualSize = Math.ceil(e.virtualSize / o) - n), + e.params.cssMode || + (e.wrapperEl.style[e.getDirectionLabel('width')] = `${ + e.virtualSize + n + }px`), + i) + ) { + const t = [] + for (let a = 0; a < s.length; a += 1) { + let i = s[a] + r && (i = Math.floor(i)), + s[a] < e.virtualSize + s[0] && t.push(i) + } + s.splice(0, s.length), s.push(...t) + } + }, + }) + }, + function ({ swiper: e }) { + Object.assign(e, { + appendSlide: ce.bind(e), + prependSlide: pe.bind(e), + addSlide: ue.bind(e), + removeSlide: me.bind(e), + removeAllSlides: he.bind(e), + }) + }, + function ({ swiper: e, extendParams: t, on: s }) { + t({ fadeEffect: { crossFade: !1 } }), + fe({ + effect: 'fade', + swiper: e, + on: s, + setTranslate: () => { + const { slides: t } = e + e.params.fadeEffect + for (let s = 0; s < t.length; s += 1) { + const t = e.slides[s] + let a = -t.swiperSlideOffset + e.params.virtualTranslate || (a -= e.translate) + let i = 0 + e.isHorizontal() || ((i = a), (a = 0)) + const r = e.params.fadeEffect.crossFade + ? Math.max(1 - Math.abs(t.progress), 0) + : 1 + Math.min(Math.max(t.progress, -1), 0), + n = ge(0, t) + ;(n.style.opacity = r), + (n.style.transform = `translate3d(${a}px, ${i}px, 0px)`) + } + }, + setTransition: (t) => { + const s = e.slides.map((e) => f(e)) + s.forEach((e) => { + e.style.transitionDuration = `${t}ms` + }), + ve({ + swiper: e, + duration: t, + transformElements: s, + allSlides: !0, + }) + }, + overwriteParams: () => ({ + slidesPerView: 1, + slidesPerGroup: 1, + watchSlidesProgress: !0, + spaceBetween: 0, + virtualTranslate: !e.params.cssMode, + }), + }) + }, + function ({ swiper: e, extendParams: t, on: s }) { + t({ + cubeEffect: { + slideShadows: !0, + shadow: !0, + shadowOffset: 20, + shadowScale: 0.94, + }, + }) + const a = (e, t, s) => { + let a = s + ? e.querySelector('.swiper-slide-shadow-left') + : e.querySelector('.swiper-slide-shadow-top'), + i = s + ? e.querySelector('.swiper-slide-shadow-right') + : e.querySelector('.swiper-slide-shadow-bottom') + a || + ((a = w( + 'div', + ( + 'swiper-slide-shadow-cube swiper-slide-shadow-' + + (s ? 'left' : 'top') + ).split(' ') + )), + e.append(a)), + i || + ((i = w( + 'div', + ( + 'swiper-slide-shadow-cube swiper-slide-shadow-' + + (s ? 'right' : 'bottom') + ).split(' ') + )), + e.append(i)), + a && (a.style.opacity = Math.max(-t, 0)), + i && (i.style.opacity = Math.max(t, 0)) + } + fe({ + effect: 'cube', + swiper: e, + on: s, + setTranslate: () => { + const { + el: t, + wrapperEl: s, + slides: i, + width: r, + height: n, + rtlTranslate: l, + size: o, + browser: d, + } = e, + c = C(e), + p = e.params.cubeEffect, + u = e.isHorizontal(), + m = e.virtual && e.params.virtual.enabled + let h, + f = 0 + p.shadow && + (u + ? ((h = e.wrapperEl.querySelector('.swiper-cube-shadow')), + h || + ((h = w('div', 'swiper-cube-shadow')), e.wrapperEl.append(h)), + (h.style.height = `${r}px`)) + : ((h = t.querySelector('.swiper-cube-shadow')), + h || ((h = w('div', 'swiper-cube-shadow')), t.append(h)))) + for (let e = 0; e < i.length; e += 1) { + const t = i[e] + let s = e + m && (s = parseInt(t.getAttribute('data-swiper-slide-index'), 10)) + let r = 90 * s, + n = Math.floor(r / 360) + l && ((r = -r), (n = Math.floor(-r / 360))) + const d = Math.max(Math.min(t.progress, 1), -1) + let h = 0, + g = 0, + v = 0 + s % 4 == 0 + ? ((h = 4 * -n * o), (v = 0)) + : (s - 1) % 4 == 0 + ? ((h = 0), (v = 4 * -n * o)) + : (s - 2) % 4 == 0 + ? ((h = o + 4 * n * o), (v = o)) + : (s - 3) % 4 == 0 && ((h = -o), (v = 3 * o + 4 * o * n)), + l && (h = -h), + u || ((g = h), (h = 0)) + const w = `rotateX(${c(u ? 0 : -r)}deg) rotateY(${c( + u ? r : 0 + )}deg) translate3d(${h}px, ${g}px, ${v}px)` + d <= 1 && + d > -1 && + ((f = 90 * s + 90 * d), l && (f = 90 * -s - 90 * d)), + (t.style.transform = w), + p.slideShadows && a(t, d, u) + } + if ( + ((s.style.transformOrigin = `50% 50% -${o / 2}px`), + (s.style['-webkit-transform-origin'] = `50% 50% -${o / 2}px`), + p.shadow) + ) + if (u) + h.style.transform = `translate3d(0px, ${ + r / 2 + p.shadowOffset + }px, ${-r / 2}px) rotateX(89.99deg) rotateZ(0deg) scale(${ + p.shadowScale + })` + else { + const e = Math.abs(f) - 90 * Math.floor(Math.abs(f) / 90), + t = + 1.5 - + (Math.sin((2 * e * Math.PI) / 360) / 2 + + Math.cos((2 * e * Math.PI) / 360) / 2), + s = p.shadowScale, + a = p.shadowScale / t, + i = p.shadowOffset + h.style.transform = `scale3d(${s}, 1, ${a}) translate3d(0px, ${ + n / 2 + i + }px, ${-n / 2 / a}px) rotateX(-89.99deg)` + } + const g = + (d.isSafari || d.isWebView) && d.needPerspectiveFix ? -o / 2 : 0 + ;(s.style.transform = `translate3d(0px,0,${g}px) rotateX(${c( + e.isHorizontal() ? 0 : f + )}deg) rotateY(${c(e.isHorizontal() ? -f : 0)}deg)`), + s.style.setProperty('--swiper-cube-translate-z', `${g}px`) + }, + setTransition: (t) => { + const { el: s, slides: a } = e + if ( + (a.forEach((e) => { + ;(e.style.transitionDuration = `${t}ms`), + e + .querySelectorAll( + '.swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left' + ) + .forEach((e) => { + e.style.transitionDuration = `${t}ms` + }) + }), + e.params.cubeEffect.shadow && !e.isHorizontal()) + ) { + const e = s.querySelector('.swiper-cube-shadow') + e && (e.style.transitionDuration = `${t}ms`) + } + }, + recreateShadows: () => { + const t = e.isHorizontal() + e.slides.forEach((e) => { + const s = Math.max(Math.min(e.progress, 1), -1) + a(e, s, t) + }) + }, + getEffectParams: () => e.params.cubeEffect, + perspective: () => !0, + overwriteParams: () => ({ + slidesPerView: 1, + slidesPerGroup: 1, + watchSlidesProgress: !0, + resistanceRatio: 0, + spaceBetween: 0, + centeredSlides: !1, + virtualTranslate: !0, + }), + }) + }, + function ({ swiper: e, extendParams: t, on: s }) { + t({ flipEffect: { slideShadows: !0, limitRotation: !0 } }) + const a = (t, s) => { + let a = e.isHorizontal() + ? t.querySelector('.swiper-slide-shadow-left') + : t.querySelector('.swiper-slide-shadow-top'), + i = e.isHorizontal() + ? t.querySelector('.swiper-slide-shadow-right') + : t.querySelector('.swiper-slide-shadow-bottom') + a || (a = we('flip', t, e.isHorizontal() ? 'left' : 'top')), + i || (i = we('flip', t, e.isHorizontal() ? 'right' : 'bottom')), + a && (a.style.opacity = Math.max(-s, 0)), + i && (i.style.opacity = Math.max(s, 0)) + } + fe({ + effect: 'flip', + swiper: e, + on: s, + setTranslate: () => { + const { slides: t, rtlTranslate: s } = e, + i = e.params.flipEffect, + r = C(e) + for (let n = 0; n < t.length; n += 1) { + const l = t[n] + let o = l.progress + e.params.flipEffect.limitRotation && + (o = Math.max(Math.min(l.progress, 1), -1)) + const d = l.swiperSlideOffset + let c = -180 * o, + p = 0, + u = e.params.cssMode ? -d - e.translate : -d, + m = 0 + e.isHorizontal() + ? s && (c = -c) + : ((m = u), (u = 0), (p = -c), (c = 0)), + (l.style.zIndex = -Math.abs(Math.round(o)) + t.length), + i.slideShadows && a(l, o) + const h = `translate3d(${u}px, ${m}px, 0px) rotateX(${r( + p + )}deg) rotateY(${r(c)}deg)` + ge(0, l).style.transform = h + } + }, + setTransition: (t) => { + const s = e.slides.map((e) => f(e)) + s.forEach((e) => { + ;(e.style.transitionDuration = `${t}ms`), + e + .querySelectorAll( + '.swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left' + ) + .forEach((e) => { + e.style.transitionDuration = `${t}ms` + }) + }), + ve({ swiper: e, duration: t, transformElements: s }) + }, + recreateShadows: () => { + e.params.flipEffect, + e.slides.forEach((t) => { + let s = t.progress + e.params.flipEffect.limitRotation && + (s = Math.max(Math.min(t.progress, 1), -1)), + a(t, s) + }) + }, + getEffectParams: () => e.params.flipEffect, + perspective: () => !0, + overwriteParams: () => ({ + slidesPerView: 1, + slidesPerGroup: 1, + watchSlidesProgress: !0, + spaceBetween: 0, + virtualTranslate: !e.params.cssMode, + }), + }) + }, + function ({ swiper: e, extendParams: t, on: s }) { + t({ + coverflowEffect: { + rotate: 50, + stretch: 0, + depth: 100, + scale: 1, + modifier: 1, + slideShadows: !0, + }, + }), + fe({ + effect: 'coverflow', + swiper: e, + on: s, + setTranslate: () => { + const { width: t, height: s, slides: a, slidesSizesGrid: i } = e, + r = e.params.coverflowEffect, + n = e.isHorizontal(), + l = e.translate, + o = n ? t / 2 - l : s / 2 - l, + d = n ? r.rotate : -r.rotate, + c = r.depth, + p = C(e) + for (let e = 0, t = a.length; e < t; e += 1) { + const t = a[e], + s = i[e], + l = (o - t.swiperSlideOffset - s / 2) / s, + u = + 'function' == typeof r.modifier + ? r.modifier(l) + : l * r.modifier + let m = n ? d * u : 0, + h = n ? 0 : d * u, + f = -c * Math.abs(u), + g = r.stretch + 'string' == typeof g && + -1 !== g.indexOf('%') && + (g = (parseFloat(r.stretch) / 100) * s) + let v = n ? 0 : g * u, + w = n ? g * u : 0, + b = 1 - (1 - r.scale) * Math.abs(u) + Math.abs(w) < 0.001 && (w = 0), + Math.abs(v) < 0.001 && (v = 0), + Math.abs(f) < 0.001 && (f = 0), + Math.abs(m) < 0.001 && (m = 0), + Math.abs(h) < 0.001 && (h = 0), + Math.abs(b) < 0.001 && (b = 0) + const y = `translate3d(${w}px,${v}px,${f}px) rotateX(${p( + h + )}deg) rotateY(${p(m)}deg) scale(${b})` + if ( + ((ge(0, t).style.transform = y), + (t.style.zIndex = 1 - Math.abs(Math.round(u))), + r.slideShadows) + ) { + let e = n + ? t.querySelector('.swiper-slide-shadow-left') + : t.querySelector('.swiper-slide-shadow-top'), + s = n + ? t.querySelector('.swiper-slide-shadow-right') + : t.querySelector('.swiper-slide-shadow-bottom') + e || (e = we('coverflow', t, n ? 'left' : 'top')), + s || (s = we('coverflow', t, n ? 'right' : 'bottom')), + e && (e.style.opacity = u > 0 ? u : 0), + s && (s.style.opacity = -u > 0 ? -u : 0) + } + } + }, + setTransition: (t) => { + e.slides + .map((e) => f(e)) + .forEach((e) => { + ;(e.style.transitionDuration = `${t}ms`), + e + .querySelectorAll( + '.swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left' + ) + .forEach((e) => { + e.style.transitionDuration = `${t}ms` + }) + }) + }, + perspective: () => !0, + overwriteParams: () => ({ watchSlidesProgress: !0 }), + }) + }, + function ({ swiper: e, extendParams: t, on: s }) { + t({ + creativeEffect: { + limitProgress: 1, + shadowPerProgress: !1, + progressMultiplier: 1, + perspective: !0, + prev: { + translate: [0, 0, 0], + rotate: [0, 0, 0], + opacity: 1, + scale: 1, + }, + next: { + translate: [0, 0, 0], + rotate: [0, 0, 0], + opacity: 1, + scale: 1, + }, + }, + }) + const a = (e) => ('string' == typeof e ? e : `${e}px`) + fe({ + effect: 'creative', + swiper: e, + on: s, + setTranslate: () => { + const { slides: t, wrapperEl: s, slidesSizesGrid: i } = e, + r = e.params.creativeEffect, + { progressMultiplier: n } = r, + l = e.params.centeredSlides, + o = C(e) + if (l) { + const t = i[0] / 2 - e.params.slidesOffsetBefore || 0 + s.style.transform = `translateX(calc(50% - ${t}px))` + } + for (let s = 0; s < t.length; s += 1) { + const i = t[s], + d = i.progress, + c = Math.min( + Math.max(i.progress, -r.limitProgress), + r.limitProgress + ) + let p = c + l || + (p = Math.min( + Math.max(i.originalProgress, -r.limitProgress), + r.limitProgress + )) + const u = i.swiperSlideOffset, + m = [e.params.cssMode ? -u - e.translate : -u, 0, 0], + h = [0, 0, 0] + let f = !1 + e.isHorizontal() || ((m[1] = m[0]), (m[0] = 0)) + let g = { + translate: [0, 0, 0], + rotate: [0, 0, 0], + scale: 1, + opacity: 1, + } + c < 0 + ? ((g = r.next), (f = !0)) + : c > 0 && ((g = r.prev), (f = !0)), + m.forEach((e, t) => { + m[t] = `calc(${e}px + (${a(g.translate[t])} * ${Math.abs( + c * n + )}))` + }), + h.forEach((e, t) => { + let s = g.rotate[t] * Math.abs(c * n) + h[t] = s + }), + (i.style.zIndex = -Math.abs(Math.round(d)) + t.length) + const v = m.join(', '), + w = `rotateX(${o(h[0])}deg) rotateY(${o(h[1])}deg) rotateZ(${o( + h[2] + )}deg)`, + b = + p < 0 + ? `scale(${1 + (1 - g.scale) * p * n})` + : `scale(${1 - (1 - g.scale) * p * n})`, + y = + p < 0 + ? 1 + (1 - g.opacity) * p * n + : 1 - (1 - g.opacity) * p * n, + E = `translate3d(${v}) ${w} ${b}` + if ((f && g.shadow) || !f) { + let e = i.querySelector('.swiper-slide-shadow') + if ((!e && g.shadow && (e = we('creative', i)), e)) { + const t = r.shadowPerProgress ? c * (1 / r.limitProgress) : c + e.style.opacity = Math.min(Math.max(Math.abs(t), 0), 1) + } + } + const x = ge(0, i) + ;(x.style.transform = E), + (x.style.opacity = y), + g.origin && (x.style.transformOrigin = g.origin) + } + }, + setTransition: (t) => { + const s = e.slides.map((e) => f(e)) + s.forEach((e) => { + ;(e.style.transitionDuration = `${t}ms`), + e.querySelectorAll('.swiper-slide-shadow').forEach((e) => { + e.style.transitionDuration = `${t}ms` + }) + }), + ve({ swiper: e, duration: t, transformElements: s, allSlides: !0 }) + }, + perspective: () => e.params.creativeEffect.perspective, + overwriteParams: () => ({ + watchSlidesProgress: !0, + virtualTranslate: !e.params.cssMode, + }), + }) + }, + function ({ swiper: e, extendParams: t, on: s }) { + t({ + cardsEffect: { + slideShadows: !0, + rotate: !0, + perSlideRotate: 2, + perSlideOffset: 8, + }, + }), + fe({ + effect: 'cards', + swiper: e, + on: s, + setTranslate: () => { + const { slides: t, activeIndex: s, rtlTranslate: a } = e, + i = e.params.cardsEffect, + { startTranslate: r, isTouched: n } = e.touchEventsData, + l = a ? -e.translate : e.translate + for (let o = 0; o < t.length; o += 1) { + const d = t[o], + c = d.progress, + p = Math.min(Math.max(c, -4), 4) + let u = d.swiperSlideOffset + e.params.centeredSlides && + !e.params.cssMode && + (e.wrapperEl.style.transform = `translateX(${e.minTranslate()}px)`), + e.params.centeredSlides && + e.params.cssMode && + (u -= t[0].swiperSlideOffset) + let m = e.params.cssMode ? -u - e.translate : -u, + h = 0 + const f = -100 * Math.abs(p) + let g = 1, + v = -i.perSlideRotate * p, + w = i.perSlideOffset - 0.75 * Math.abs(p) + const b = + e.virtual && e.params.virtual.enabled + ? e.virtual.from + o + : o, + y = + (b === s || b === s - 1) && + p > 0 && + p < 1 && + (n || e.params.cssMode) && + l < r, + E = + (b === s || b === s + 1) && + p < 0 && + p > -1 && + (n || e.params.cssMode) && + l > r + if (y || E) { + const t = (1 - Math.abs((Math.abs(p) - 0.5) / 0.5)) ** 0.5 + ;(v += -28 * p * t), + (g += -0.5 * t), + (w += 96 * t), + (h = + (i.rotate || e.isHorizontal() ? -25 : 0) * t * Math.abs(p) + + '%') + } + if ( + ((m = + p < 0 + ? `calc(${m}px ${a ? '-' : '+'} (${w * Math.abs(p)}%))` + : p > 0 + ? `calc(${m}px ${a ? '-' : '+'} (-${w * Math.abs(p)}%))` + : `${m}px`), + !e.isHorizontal()) + ) { + const e = h + ;(h = m), (m = e) + } + const x = p < 0 ? '' + (1 + (1 - g) * p) : '' + (1 - (1 - g) * p), + S = `\n translate3d(${m}, ${h}, ${f}px)\n rotateZ(${ + i.rotate ? (a ? -v : v) : 0 + }deg)\n scale(${x})\n ` + if (i.slideShadows) { + let e = d.querySelector('.swiper-slide-shadow') + e || (e = we('cards', d)), + e && + (e.style.opacity = Math.min( + Math.max((Math.abs(p) - 0.5) / 0.5, 0), + 1 + )) + } + d.style.zIndex = -Math.abs(Math.round(c)) + t.length + ge(0, d).style.transform = S + } + }, + setTransition: (t) => { + const s = e.slides.map((e) => f(e)) + s.forEach((e) => { + ;(e.style.transitionDuration = `${t}ms`), + e.querySelectorAll('.swiper-slide-shadow').forEach((e) => { + e.style.transitionDuration = `${t}ms` + }) + }), + ve({ swiper: e, duration: t, transformElements: s }) + }, + perspective: () => !0, + overwriteParams: () => ({ + _loopSwapReset: !1, + watchSlidesProgress: !0, + loopAdditionalSlides: e.params.cardsEffect.rotate ? 3 : 2, + centeredSlides: !0, + virtualTranslate: !e.params.cssMode, + }), + }) + }, + ] + return ne.use(be), ne +})() +//# sourceMappingURL=swiper-bundle.min.js.map diff --git a/modules/customdevslider/views/templates/hook/slider.tpl b/modules/customdevslider/views/templates/hook/slider.tpl new file mode 100644 index 00000000..c9e21b63 --- /dev/null +++ b/modules/customdevslider/views/templates/hook/slider.tpl @@ -0,0 +1,45 @@ +{if $customdevslider_slides|@count > 0} + {assign var="titles" value=[]} + {foreach from=$customdevslider_slides item=s} + {$titles[] = ($s.title|default:'')|strip_tags} + {/foreach} + +
+ +
+
+ {foreach from=$customdevslider_slides item=s} +
+ {if $s.link} + + {/if} + + {if $s.image_url} + {$s.title|escape:'htmlall':'UTF-8'} + {/if} + + {if $s.link} + + {/if} + + {* ВАЖЛИВО: зберігаємо HTML структуру тексту *} + +
+ {/foreach} +
+ + {* ОДИН overlay content на весь слайдер *} +
+
+
+
+ +
+
+{/if}