@influence-society-web/deshotelsetdesiles 4.1.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/utils/constants.ts", "../../src/utils/countries/userCountry.ts", "../../src/utils/buildQueryParams.ts", "../../src/utils/ApiClient.ts", "../../src/utils/utils.ts", "../../src/utils/bindQuotationData.ts", "../../src/utils/Offers.ts", "../../src/utils/createOffersInstance.ts", "../../../../node_modules/.pnpm/@splidejs+splide@4.1.4/node_modules/@splidejs/splide/dist/js/splide.esm.js", "../../src/utils/offerSlugSliders.ts", "../../src/pages/OfferSlug.ts"],
4
+ "sourcesContent": ["export const prefix = 'data';\n\n// Selectors used within the project\nexport const SELECTORS = {\n startingPriceList: `[${prefix}=starting-price-list]`,\n price: `[${prefix}=price]`,\n discount: `[${prefix}=discount]`,\n discountContainer: `[${prefix}=discount-container]`,\n currency: `[${prefix}=currency]`,\n beHid: `[${prefix}-be-hid]`,\n destination: `[${prefix}=destination]`,\n offersList: `[${prefix}=offers-list]`,\n /** Offer slug page: wrapper with existing main offer. Match both data=\"...\" and data-... for Webflow. */\n offerSlugDetail: `[${prefix}=offer-slug-detail], [data-offer-slug-detail]`,\n /** Offer slug page: \"Nos autres offres\" list container. */\n offerSlugOthersList: `[${prefix}=offer-slug-others-list], [data-offer-slug-others-list]`,\n /** Offer slug page: card template inside offer-slug-others-list (use .offer-others_item if no data-list-item). */\n offerSlugOthersListItem: '.offer-others_item',\n /** Offer slug page: \"Nos autres offres\" section wrapper. Shown when other offers are rendered. */\n offersMoreWrapper: `[${prefix}=offers-more-wrapper]`,\n offersListContainer: `[${prefix}=offers-list-container]`,\n listItem: `[${prefix}=list-item]`,\n image: `[${prefix}=image]`,\n name: `[${prefix}=name]`,\n description: `[${prefix}=description]`,\n hotelName: `[${prefix}=hotel-name]`,\n hotelLink: `[${prefix}=hotel-link]`,\n hotelStartingPriceContainer: `[${prefix}=hotel-starting-price-container]`,\n moreDetails: `[${prefix}=more-details]`,\n offersPopup: `[${prefix}=offers-popup]`,\n offersPopupClose: `[${prefix}=close-btn]`,\n hotelReserveLink: `[${prefix}=hotel-reserve-link]`,\n hotelVillaReserveLink: `[${prefix}=hotel-villa-reserve-link]`,\n hotelURLS: `[${prefix}=hotel-urls]`,\n languageDropdown: `[${prefix}=language-dropdown]`,\n selectedLanguage: `[${prefix}=selected-language]`,\n loadingSpinner: `[${prefix}=loading-spinner]`,\n cmsFilterEmptyState: `[fs-cmsfilter-element=empty]`,\n startingfromItem: (id: string) => `[${prefix}-be-hid=${id}]`,\n popupOverlay: `[fs-smartlightbox-element=trigger-close]`,\n};\n\n// Query params keys\nexport const URL_PARAMS_KEYS = {\n checkinDate: 'checkin_date',\n};\n\n// maps the HID value gotten from the HTML attributes to the snippet code used to make API calls\nexport const BE_HID_TO_SNIPPET_CODE: {\n [key: string]: string;\n} = {\n DHDICBeach: 'gpgos12767',\n DHDIJMalanga: 'gptro12772',\n DHDIToubana: 'gpsai12770',\n DHDIMahogany: 'gpgos12769',\n DHDILangleyres: 'gpgua27143',\n DHDIJungle: 'mqros18592',\n DHDIJade: 'agste21689',\n DHDIWINDLAND: 'zzzzz25376',\n DHDILeCapMaison: 'lcgro30400',\n DHDIChastenet: 'agste21688',\n DHDILPSoleil: 'mqsai18593',\n DHDISHANTI: 'zzzzz25378',\n DHDIPavillon: 'zzzzz25377',\n DHDIBELLEMARE: 'zzzzz25379',\n DHDIPrincemaurice: 'mupos25678',\n DHDIANAHITA: 'zzzzz25380',\n DHDISamana: 'agstm21687',\n FRANTHTLGrandCaseBe1: 'frsai31536',\n DHDITInn: 'ageng20433',\n DHDIBWaters: 'agcro20496',\n DHDICuisinartgolf: 'gpang25884',\n DMDESHTLSecretBayDom: 'dmtib00001',\n};\n\n// location data\nconst GUADELOUPE = {\n en: 'Guadeloupe Islands',\n fr: 'Les \u00CEles de Guadeloupe',\n es: 'Las islas de Guadalupe',\n it: 'Le isole della Guadalupa',\n};\n\nconst DOMINIQUE = {\n en: 'La Dominique',\n fr: 'La Dominique',\n es: 'Dominica',\n it: 'Dominica',\n};\nconst SAINT_LUCIE = {\n en: 'Saint Lucia',\n fr: 'Sainte-Lucie',\n es: 'Santa Luc\u00EDa',\n it: 'Santa Lucia',\n};\n\nconst MARTINIQUE = {\n en: 'Martinique',\n fr: 'Martinique',\n es: 'Martinica',\n it: 'Martinica',\n};\n\nconst ILE_MAURICE = {\n en: 'Mauritius',\n fr: '\u00CEle Maurice',\n es: 'Mauricio',\n it: 'Mauritius',\n};\n\nconst SAINT_MARTIN = {\n en: 'Saint Martin',\n fr: 'Saint-Martin',\n es: 'Saint-Martin',\n it: 'Saint Martin',\n};\n\nconst ANTIGUA = {\n en: 'Antigua',\n fr: 'Antigua',\n es: 'Antigua',\n it: 'Antigua',\n};\n\nconst ANGUILLA = {\n en: 'Anguilla',\n fr: 'Anguilla',\n es: 'Anguila',\n it: 'Anguilla',\n};\n\n// maps the Snippet code to the hotel details\nexport const SNIPPET_CODE_TO_HOTEL: {\n [key: string]: {\n destination: Destination;\n slug: string;\n codeIPlanet: string;\n cmsId: string;\n };\n} = {\n gpgos12767: {\n destination: GUADELOUPE,\n slug: '/hotels-et-villas/creole-beach-hotel-spa',\n codeIPlanet: 'FRAN414',\n cmsId: '67c809b5f63deab8a71cf8e9',\n },\n gptro12772: {\n destination: GUADELOUPE,\n slug: '/hotels-et-villas/le-jardin-malanga',\n codeIPlanet: 'FRAN416',\n cmsId: '67c809b5f63deab8a71cf90d',\n },\n gpsai12770: {\n destination: GUADELOUPE,\n slug: '/hotels-et-villas/la-toubana-hotel-spa',\n codeIPlanet: 'FRAN411',\n cmsId: '67c809b5f63deab8a71cf8ef',\n },\n gpgos12769: {\n destination: GUADELOUPE,\n slug: '/hotels-et-villas/mahogany-hotel-residence-spa',\n codeIPlanet: 'FRAN423',\n cmsId: '67c809b5f63deab8a71cf91f',\n },\n gpgua27143: {\n destination: GUADELOUPE,\n slug: '/hotels-et-villas/langley-resort-fort-royal',\n codeIPlanet: 'GPAN32',\n cmsId: '67c809b5f63deab8a71cf8f0',\n },\n mqros18592: {\n destination: DOMINIQUE,\n slug: '/hotels-et-villas/jungle-bay-dominica',\n codeIPlanet: 'DMAN1',\n cmsId: '67c809b5f63deab8a71cf8ed',\n },\n dmtib00001: {\n destination: DOMINIQUE,\n slug: '/hotels-et-villas/secret-bay-dominique',\n codeIPlanet: 'DMAN2',\n cmsId: '67c809b5f63deab8a71cfefd',\n },\n agste21689: {\n destination: SAINT_LUCIE,\n slug: '/hotels-et-villas/jade-mountain',\n codeIPlanet: 'AGAN6',\n cmsId: '67c809b5f63deab8a71cf92a',\n },\n zzzzz25376: {\n destination: SAINT_LUCIE,\n slug: '/hotels-et-villas/windjammer-landing',\n codeIPlanet: 'LCAN4',\n cmsId: '67c809b5f63deab8a71cf92b',\n },\n lcgro30400: {\n destination: SAINT_LUCIE,\n slug: '/hotels-et-villas/cap-maison',\n codeIPlanet: 'LCLC8',\n cmsId: '67c809b5f63deab8a71cf929',\n },\n agste21688: {\n destination: SAINT_LUCIE,\n slug: '/hotels-et-villas/anse-chastanet',\n codeIPlanet: 'AGAN5',\n cmsId: '67c809b5f63deab8a71cf928',\n },\n mqsai18593: {\n destination: MARTINIQUE,\n slug: '/hotels-et-villas/plein-soleil',\n codeIPlanet: 'MQAN16',\n cmsId: '67c809b5f63deab8a71cf925',\n },\n zzzzz25378: {\n destination: ILE_MAURICE,\n slug: '/hotels-et-villas/shanti-maurice',\n codeIPlanet: 'MUAN22',\n cmsId: '67c809b5f63deab8a71cf933',\n },\n zzzzz25377: {\n destination: ILE_MAURICE,\n slug: '/hotels-et-villas/lux-le-morne',\n codeIPlanet: 'MUAN21',\n cmsId: '67c809b5f63deab8a71cf931',\n },\n zzzzz25379: {\n destination: ILE_MAURICE,\n slug: '/hotels-et-villas/constance-belle-mare-plage',\n codeIPlanet: 'MUAN20',\n cmsId: '67c809b5f63deab8a71cf92f',\n },\n mupos25678: {\n destination: ILE_MAURICE,\n slug: '/hotels-et-villas/constance-le-prince-maurice',\n codeIPlanet: 'MUAN24',\n cmsId: '67c809b5f63deab8a71cf930',\n },\n zzzzz25380: {\n destination: ILE_MAURICE,\n slug: '/hotels-et-villas/anahita-the-resort',\n codeIPlanet: 'MUAN19',\n cmsId: '67c809b5f63deab8a71cf92e',\n },\n agstm21687: {\n destination: SAINT_MARTIN,\n slug: '/hotels-et-villas/la-samanna',\n codeIPlanet: 'FRAN2350',\n cmsId: '67c809b5f63deab8a71cf926',\n },\n frsai31536: {\n destination: SAINT_MARTIN,\n slug: '/hotels-et-villas/le-grand-case-beach-club',\n codeIPlanet: 'FRFRA3',\n cmsId: '67c809b5f63deab8a71cf927',\n },\n ageng20433: {\n destination: ANTIGUA,\n slug: '/hotels-et-villas/the-inn-at-english-harbour',\n codeIPlanet: 'AGAN4',\n cmsId: '67c809b5f63deab8a71cf8ec',\n },\n agcro20496: {\n destination: ANTIGUA,\n slug: '/hotels-et-villas/blue-waters',\n codeIPlanet: 'AGAN1',\n cmsId: '67c809b5f63deab8a71cf8eb',\n },\n gpang25884: {\n destination: ANGUILLA,\n slug: '/hotels-et-villas/aurora-anguilla-resort-golf-club',\n codeIPlanet: 'GPAN30',\n cmsId: '67c809b5f63deab8a71cf8ea',\n },\n};\n\n// maps the currency code to the currency symbol\nexport const CURRENCY_TO_SYMBOL: { [key: string]: string } = {\n AED: '\u062F.\u0625.',\n AFN: 'Af',\n ALL: 'L',\n AMD: '\u058F',\n ANG: '\u0192',\n AOA: 'Kz',\n ARS: 'AR$',\n AUD: 'AU$',\n AWG: '\u0192',\n AZN: '\u043C\u0430\u043D',\n BAM: 'KM',\n BBD: 'BBD$',\n BDT: '\u09F3',\n BGN: '\u043B\u0432.',\n BHD: 'BD',\n BIF: 'FBu',\n BMD: '$',\n BND: 'B$',\n BOB: 'Bs.',\n BRL: 'R$',\n BSD: '$',\n BTN: 'Nu.',\n BWP: 'P',\n BYN: 'Br',\n BZD: 'BZ$',\n CAD: 'CA$',\n CDF: 'FC',\n CHF: 'Fr.',\n CKD: '$',\n CLP: 'CL$',\n CNY: 'CN\u00A5',\n COP: 'CO$',\n CRC: '\u20A1',\n CUC: 'CUC$',\n CUP: '$MN',\n CVE: 'CV$',\n CZK: 'K\u010D',\n DJF: 'Fdj',\n DKK: 'kr.',\n DOP: 'RD$',\n DZD: 'DA',\n EGP: 'E\u00A3',\n EHP: 'Ptas.',\n ERN: 'Nkf',\n ETB: 'Br',\n EUR: '\u20AC',\n FJD: 'FJ$',\n FKP: 'FK\u00A3',\n FOK: 'kr',\n GBP: '\u00A3',\n GEL: '\u20BE',\n GGP: '\u00A3',\n GHS: 'GH\u20B5',\n GIP: '\u00A3',\n GMD: 'D',\n GNF: 'FG',\n GTQ: 'Q',\n GYD: 'G$',\n HKD: 'HK$',\n HNL: 'L',\n HRK: 'kn',\n HTG: 'G',\n HUF: 'Ft',\n IDR: 'Rp',\n ILS: '\u20AA',\n IMP: '\u00A3',\n INR: 'Rs.',\n IQD: '\u062F.\u0639.',\n IRR: '\uFDFC',\n ISK: 'kr',\n JEP: '\u00A3',\n JMD: 'J$',\n JOD: 'JD',\n JPY: '\u00A5',\n KES: 'KSh',\n KGS: '\u0441',\n KHR: '\u17DB',\n KID: '$',\n KMF: 'CF',\n KPW: '\u20A9',\n KRW: '\u20A9',\n KWD: 'KD',\n KYD: 'CI$',\n KZT: '\u20B8',\n LAK: '\u20ADN',\n LBP: 'LL.',\n LKR: 'Rs.',\n LRD: 'L$',\n LSL: 'L',\n LYD: 'LD',\n MAD: 'DH',\n MDL: 'L',\n MGA: 'Ar',\n MKD: 'den',\n MMK: 'Ks',\n MNT: '\u20AE',\n MOP: 'MOP$',\n MRU: 'UM',\n MUR: 'Rs.',\n MVR: 'MRf',\n MWK: 'MK',\n MXN: 'MX$',\n MYR: 'RM',\n MZN: 'MTn',\n NAD: 'N$',\n NGN: '\u20A6',\n NIO: 'C$',\n NOK: 'kr',\n NPR: 'Rs.',\n NZD: 'NZ$',\n OMR: 'OR',\n PAB: 'B/.',\n PEN: 'S/.',\n PGK: 'K',\n PHP: '\u20B1',\n PKR: 'Rs.',\n PLN: 'z\u0142',\n PND: '$',\n PRB: '\u0440.',\n PYG: '\u20B2',\n QAR: 'QR',\n RON: 'L',\n RSD: 'din',\n RUB: '\u20BD',\n RWF: 'FRw',\n SAR: 'SR',\n SBD: 'SI$',\n SCR: 'Rs.',\n SDG: '\u00A3SD',\n SEK: 'kr',\n SGD: 'S$',\n SHP: '\u00A3',\n SLL: 'Le',\n SLS: 'Sl',\n SOS: 'Sh.So.',\n SRD: 'Sr$',\n SSP: 'SS\u00A3',\n STN: 'Db',\n SVC: '\u20A1',\n SYP: 'LS',\n SZL: 'L',\n THB: '\u0E3F',\n TJS: 'SM',\n TMT: 'm.',\n TND: 'DT',\n TOP: 'T$',\n TRY: 'TL',\n TTD: 'TT$',\n TVD: '$',\n TWD: 'NT$',\n TZS: 'TSh',\n UAH: '\u20B4',\n UGX: 'USh',\n USD: '$',\n UYU: '$U',\n UZS: '\u0441\u0443\u043C',\n VED: 'Bs.',\n VES: 'Bs.F',\n VND: '\u20AB',\n VUV: 'VT',\n WST: 'T',\n XAF: 'Fr',\n XCD: '$',\n XOF: '\u20A3',\n XPF: '\u20A3',\n YER: 'YR',\n ZAR: 'R',\n ZMW: 'ZK',\n ZWB: '',\n ZWL: 'Z$',\n Abkhazia: '',\n Artsakh: '\u0564\u0580.',\n};\n\n// maps the language code to the locale\nexport const LANG_TO_LOCALE: { [key: string]: string } = {\n it: 'it_IT',\n es: 'es_ES',\n fr: 'fr_FR',\n en: 'en_GB',\n};\n\n// maps the offer category to the CMS collection ID\nexport const OFFER_CATEGORIES = {\n 'DERNI\u00C8RE MINUTE': '735fe5e0858671cf3a5c14cbcc2470fe',\n 'R\u00C9SERVEZ T\u00D4T': 'c5abb23caf056891f3902ff42ae2f9e0',\n};\n\n// maps the slug to the CMS theme ID\nexport const SLUG_TO_THEME: { [key: string]: string } = {\n // Family stay\n '/thematiques/sejour-en-famille': '67c809b5f63deab8a71cf936',\n '/en/themes/family-stay': '67c809b5f63deab8a71cf936',\n '/es/temas/estancia-en-familia': '67c809b5f63deab8a71cf936',\n '/it/temi/soggiorno-in-famiglia': '67c809b5f63deab8a71cf936',\n\n // Honeymoon\n '/thematiques/voyages-de-noces': '67c809b5f63deab8a71cfb33',\n '/en/themes/honeymoons': '67c809b5f63deab8a71cfb33',\n '/es/temas/lunas-de-miel': '67c809b5f63deab8a71cfb33',\n '/it/temi/lune-di-miele': '67c809b5f63deab8a71cfb33',\n\n // Golf paradise\n '/thematiques/paradis-des-golfeurs': '67c809b5f63deab8a71cfb32',\n '/en/themes/a-golfer-s-paradise': '67c809b5f63deab8a71cfb32',\n '/es/temas/el-paraiso-del-golfista': '67c809b5f63deab8a71cfb32',\n '/it/temi/un-paradiso-per-i-golfisti': '67c809b5f63deab8a71cfb32',\n\n // All-inclusive\n '/thematiques/all-inclusives': '67c809b5f63deab8a71cf934',\n '/en/themes/all-inclusives': '67c809b5f63deab8a71cf934',\n '/es/temas/todo-incluido': '67c809b5f63deab8a71cf934',\n '/it/temi/tutto-compreso': '67c809b5f63deab8a71cf934',\n\n // Escapade SPA & Bien-\u00CAtre\n '/thematiques/escapade-spa-bien-etre': '67c809b5f63deab8a71cf935',\n '/en/themes/wellness-spa-getaway': '67c809b5f63deab8a71cf935',\n '/es/temas/escapada-spa-bienestar': '67c809b5f63deab8a71cf935',\n '/it/temi/soggiorno-benessere-alle-terme': '67c809b5f63deab8a71cf935',\n\n // Adventure\n '/thematiques/activites-et-loisirs': '67c809b5f63deab8a71cfcb4',\n '/en/themes/leisure-activities': '67c809b5f63deab8a71cfcb4',\n '/es/temas/actividades-y-ocio': '67c809b5f63deab8a71cfcb4',\n '/it/temi/attivita-e-tempo-libero': '67c809b5f63deab8a71cfcb4',\n\n // Scuba diving\n '/thematiques/plongee-sous-marine': '67c809b5f63deab8a71cf937',\n '/en/themes/scuba-diving': '67c809b5f63deab8a71cf937',\n '/es/temas/submarinismo': '67c809b5f63deab8a71cf937',\n '/it/temi/immersione-subacquea': '67c809b5f63deab8a71cf937',\n\n // Road trip\n '/thematiques/roadtrip': '67c809b5f63deab8a71cfb34',\n '/en/themes/roadtrip': '67c809b5f63deab8a71cfb34',\n '/es/temas/viaje-por-carretera': '67c809b5f63deab8a71cfb34',\n '/it/temi/viaggio-in-auto': '67c809b5f63deab8a71cfb34',\n\n // Senior\n '/thematiques/senior-60-ans-et-plus': '67c809b5f63deab8a71cfedb',\n '/en/themes/senior-60-ans-et-plus': '67c809b5f63deab8a71cfedb',\n '/es/temas/senior-60-ans-et-plus': '67c809b5f63deab8a71cfedb',\n '/it/temi/senior-60-ans-et-plus': '67c809b5f63deab8a71cfedb',\n};\n\n// base URL for the API\nexport const apiBaseUrl = 'https://deshotelsetdesiles.ccordier.workers.dev/v2/';\n// base URL for the hotel and flight API\nexport const hotelAndFlightURLBaseUrl =\n 'https://deshotelsetdesiles.i-planet.fr/dhdi-public/searchform.cgi';\n\n// default country code\nexport const DEFAULT_COUNTRY_CODE = 'FR';\n\nexport const GTM_GL =\n '1*q1lzz9*_gcl_au*MTMyMzcyMDY5NC4xNzM5Mjg5MzYx*_ga*NTAxMzI1MzMwLjE3MzkyODkzNjE.*_ga_Q0RXHLR7D4*MTczOTI5NzEzNC4zLjAuMTczOTI5NzE3Mi4yMi4wLjA.';\n", "import { DEFAULT_COUNTRY_CODE } from '$utils/constants';\n\n/**\n * Get the user's country code as described in the geoip2 library.\n * https://dev.maxmind.com/geoip/geolocate-an-ip/client-side-javascript/\n */\n\n// The script is loaded on the page\ndeclare const geoip2: {\n country: (\n success: (response: { country: { iso_code: string } }) => void,\n error: () => void\n ) => void;\n};\n\nexport const getUserCountryCode = async (): Promise<string> => {\n return new Promise((resolve) => {\n geoip2.country(\n (successResponse: { country: { iso_code: string } }) => {\n resolve(successResponse.country.iso_code);\n },\n () => {\n resolve(DEFAULT_COUNTRY_CODE);\n }\n );\n });\n};\n", "/**\n *\n * @param queryParams to build\n * @returns string representation of query params\n */\nexport const buildQueryParams = (queryParams: QueryParams) => {\n let url = '?';\n for (const [key, value] of Object.entries(queryParams)) {\n if (value) {\n url += `${key}=${value}&`;\n }\n }\n return url;\n};\n", "import { buildQueryParams } from './buildQueryParams';\nimport { apiBaseUrl } from './constants';\n\nexport class ApiClient {\n /**\n *\n * @param queryParams to include as part of query for the request\n * @returns offers data for a group of hotels\n */\n public async getGroupOffersData(queryParams: QueryParams): Promise<GroupOffersData | null> {\n const url = apiBaseUrl + 'groupOffers' + buildQueryParams(queryParams);\n\n const response = await fetch(url);\n const body = await response.json();\n if (body.error || !body.data) return null;\n\n return body as GroupOffersData;\n }\n\n /**\n *\n * @param queryParams to include as part of query for the request\n * @returns offers data for a single hotel\n */\n public async getSingleHotelOffersData(queryParams: QueryParams): Promise<OffersData | null> {\n const url = apiBaseUrl + 'offers' + buildQueryParams(queryParams);\n\n const response = await fetch(url);\n const body = await response.json();\n if (body.error || !body.data) return null;\n\n return body as OffersData;\n }\n\n /**\n *\n * @param queryParams to include as part of query for the request\n * @returns Starting CMS offers data\n */\n public async getCMSOffers(): Promise<CMSOffersData | null> {\n const url = apiBaseUrl + 'cmsOffers';\n\n const response = await fetch(url);\n const body = await response.json();\n if (!body.items) return null;\n\n return body as CMSOffersData;\n }\n\n /**\n * @returns all CMS countries\n */\n public async getCountries(): Promise<CountriesData | null> {\n const url = apiBaseUrl + 'cmsCountries';\n\n const response = await fetch(url);\n const body = await response.json();\n if (!body.items) return null;\n\n return body as CountriesData;\n }\n}\n", "import {\n GTM_GL,\n hotelAndFlightURLBaseUrl,\n LANG_TO_LOCALE,\n SNIPPET_CODE_TO_HOTEL,\n} from './constants';\n\n/**\n * Listen for language change and reload the page when the language is changed.\n */\nexport const listenForLanguageChange = () => {\n const isitProduction = isProduction();\n if (!isitProduction) {\n const currentStagingLang = localStorage.getItem('wglang') || 'fr';\n window.Weglot.switchTo(currentStagingLang);\n }\n window.Weglot.on('languageChanged', () => {\n if (isitProduction) {\n window.location.reload();\n } else {\n const newLang = window.Weglot.getCurrentLang();\n //add new language to local storage\n localStorage.setItem('wglang', newLang);\n if (window.loadFromServer) {\n window.loadFromServer();\n }\n }\n });\n};\n\nexport const isProduction = () => {\n return window.location.hostname !== 'deshotelsetdesiles.webflow.io';\n};\n\n/**\n *\n * @returns The locale of the current language.\n */\nexport const getLocale = () => {\n const lang = getLanguage();\n return LANG_TO_LOCALE[lang];\n};\n\n/**\n *\n * @returns the current language.\n */\nexport const getLanguage = (): string => {\n if (!isProduction()) {\n return localStorage.getItem('wglang') || 'fr';\n }\n try {\n const language = window.Weglot.getCurrentLang();\n if (language) {\n return language;\n }\n } catch (error) {\n console.error('Error getting language', error);\n return 'fr';\n }\n\n return 'fr';\n};\n\n/**\n *\n * @returns A map of cmsid to hotel id.\n */\nexport const cmsIDToHotelIdMap = () => {\n const map: { [key: string]: string } = {};\n Object.entries(SNIPPET_CODE_TO_HOTEL).forEach(([key, value]) => {\n map[value.cmsId] = key;\n });\n return map;\n};\n\n/**\n * gets the offer slug from the hotel id and offer name.\n * This is used to compare the offer CMS metadata with the offer data from the API.\n * @param hotelId The hotel id.\n * @param offerName The offer name.\n * @returns\n */\nexport const offerSlug = (hotelId: string, offerName: string) => {\n return `${hotelId.toLowerCase().trim()}-${offerName.toLowerCase().trim()}`;\n};\n\n/**\n * Generates the URL for the hotel and flight page.\n * @param currency iso currency code\n * @param hotelID The hotel id.\n * @param accessCodeValue for HotelPromo\n * @returns\n */\nexport const hotelAndFlightURL = (\n currency: string,\n hotelID: string,\n accessCodeValue: string | null\n) => {\n const lang = getLanguage().toUpperCase();\n const hotelCode = SNIPPET_CODE_TO_HOTEL[hotelID].codeIPlanet.toUpperCase();\n let url = `${hotelAndFlightURLBaseUrl}?Lang=${lang}&currency=${currency.toUpperCase()}&HotelCode=${hotelCode}`;\n\n // Include the Google Tag query parameter if it exists\n const gaTag = getCookie('_ga');\n const glTag = GTM_GL;\n const gclAuTag = getCookie('_gcl_au');\n url += `&_ga=${gaTag}&_gl=${glTag}&_gcl_au=${gclAuTag}`;\n\n if (accessCodeValue) {\n url = `${url}&HotelPromo=${accessCodeValue}`;\n }\n return url;\n};\n\n/**\n * Get the value of a cookie.\n * @param name The name of the cookie.\n */\nexport const getCookie = (name: string): string | null => {\n const match = document.cookie.match(new RegExp('(^| )' + name + '=([^;]+)'));\n return match ? match[2] : null;\n};\n", "import { CURRENCY_TO_SYMBOL, SELECTORS } from './constants';\nimport { hotelAndFlightURL } from './utils';\n\n/**\n *\n * @param rate data to bind\n * @param container for data items\n * @param hotelId for hotel\n * @param cmsOfferData for offer filtering\n */\nexport const bindQuotationData = (\n container: HTMLDivElement,\n rate: Rate,\n hotelId: string,\n cmsOfferData?: CMSOfferItem\n) => {\n const {\n quotation,\n rate: { distribution },\n } = rate;\n const { pricePerNight, currency, plainBookLink } = quotation;\n const { accessCode } = distribution || {};\n\n // pick the first access code if available\n let accessCodeValue = '';\n if (accessCode && accessCode.length > 0) {\n [accessCodeValue] = accessCode;\n }\n\n // update price and currency\n updatePriceElement(container, pricePerNight, currency);\n\n // update hotel reserve link\n const hotelReserveEls = container.querySelector<HTMLLinkElement>(SELECTORS.hotelReserveLink);\n if (hotelReserveEls) {\n hotelReserveEls.addEventListener('click', (e) => {\n e.preventDefault();\n e.stopPropagation();\n window.open(plainBookLink, '_blank');\n });\n }\n\n // update hotel villa reserve link\n const hotelVillaReserveEl = container.querySelector<HTMLLinkElement>(\n SELECTORS.hotelVillaReserveLink\n );\n if (hotelVillaReserveEl) {\n hotelVillaReserveEl.addEventListener('click', (e) => {\n e.preventDefault();\n e.stopPropagation();\n window.open(hotelAndFlightURL(currency, hotelId, accessCodeValue), '_blank');\n });\n }\n\n // update discount percentage if available from CMS\n if (cmsOfferData) {\n const {\n fieldData: { 'discount-percentage': discountPercentage },\n } = cmsOfferData;\n const discountEl = container.querySelector<HTMLElement>(SELECTORS.discount);\n if (discountEl && discountPercentage) discountEl.innerHTML = `-${discountPercentage}%`;\n\n const discountContainerEl = container.querySelector<HTMLDivElement>(\n SELECTORS.discountContainer\n );\n\n if (discountContainerEl && !discountPercentage) {\n discountContainerEl.style.display = 'none';\n }\n }\n};\n\n/**\n *\n * @param container to update\n * @param pricePerNight of the quotation\n * @param currency of the quotation\n */\nexport const updatePriceElement = (\n container: HTMLDivElement,\n pricePerNight: number,\n currency: string\n) => {\n const priceEl = container.querySelector<HTMLElement>(SELECTORS.price);\n if (priceEl) priceEl.innerHTML = Math.floor(pricePerNight).toString();\n\n const currencyEl = container.querySelector<HTMLElement>(SELECTORS.currency);\n if (currencyEl) currencyEl.innerHTML = CURRENCY_TO_SYMBOL[currency];\n};\n", "import type { CMSList } from '@globalTypes/CMSList';\n\nimport { getUserCountryCode } from '$utils/countries/userCountry';\n\nimport { ApiClient } from './ApiClient';\nimport { bindQuotationData } from './bindQuotationData';\nimport { DEFAULT_COUNTRY_CODE, SELECTORS, SNIPPET_CODE_TO_HOTEL } from './constants';\nimport {\n cmsIDToHotelIdMap,\n getLanguage,\n getLocale,\n listenForLanguageChange,\n offerSlug,\n} from './utils';\n\nexport class Offers {\n /** The loading spinner element */\n private loadingSpinner: HTMLElement | null;\n\n /** The empty state element */\n private cmsFilterEmptyState: HTMLDivElement | null;\n\n /** A lookup object for the cms offers data */\n private offerLookup: { [key: string]: CMSOfferItem } = {};\n\n /** The api client */\n private apiClient = new ApiClient();\n\n /** The user's country code */\n private countryCode: string;\n\n /** All available countries in CMS */\n private availableCountries: { [key: string]: string } = {};\n\n /**\n *\n * @param listInstance The list that the offers will be displayed in\n * @param itemTemplateElement The template element to create new items from\n */\n constructor(\n private listInstance: CMSList,\n private itemTemplateElement: HTMLDivElement\n ) {\n this.cmsFilterEmptyState = document.querySelector<HTMLDivElement>(\n SELECTORS.cmsFilterEmptyState\n );\n if (this.cmsFilterEmptyState) {\n this.cmsFilterEmptyState.classList.add('hide-empty-state');\n }\n\n // Remove existing items\n listInstance.clearItems();\n\n listenForLanguageChange();\n this.loadingSpinner = document.querySelector<HTMLElement>(SELECTORS.loadingSpinner);\n this.countryCode = DEFAULT_COUNTRY_CODE;\n }\n\n /**\n * Retrieve hotel offer for given hotel IDs\n * @param options to filter the offers\n */\n public async getGroupOffers(options: {\n clearItems?: boolean;\n filter: (value: CMSOfferItem) => boolean;\n }) {\n const { clearItems = true, filter } = options || {};\n\n if (clearItems) this.listInstance.clearItems();\n\n // get the cms offers data\n const cmsOffersData = await this.apiClient.getCMSOffers();\n if (!cmsOffersData) return;\n\n // get the available countries in CMS\n const cmsCountries = await this.apiClient.getCountries();\n if (!cmsCountries) return;\n\n // map the cmscountries id to the title\n cmsCountries.items.forEach((c) => {\n this.availableCountries[c.id] = c.fieldData.title?.trim();\n });\n\n // filter the cms offers data using the provided filter\n this.countryCode = await getUserCountryCode();\n const filteredOffers = cmsOffersData.items.filter(filter).filter(this.countryCodeFilter);\n\n // extract the hotelIds to use\n const generatedHotelIds = this.generateHotelIds(filteredOffers);\n let hids = this.generateHotelIds(filteredOffers).join(',');\n\n const singleHotel = generatedHotelIds.length === 1;\n\n // if there is only one hotel, duplicate the hotel id to get the offers for that hotel\n // this is a workaround for the API to get the offers for a single hotel\n if (singleHotel) {\n hids = [hids, hids].join(',');\n }\n\n // generate the offer metadata and lookup object for easy access to the cms offers data\n const { offerMetaData }: { offerMetaData: string[] } = this.generateOfferData(filteredOffers);\n\n const locale = getLocale();\n\n // get the group offers data\n const hotelOffersData = await this.apiClient.getGroupOffersData({\n hids,\n locale,\n });\n\n if (!hotelOffersData || hotelOffersData.error || !hotelOffersData.data) {\n this.hideSpinnerAndShowFilter();\n return;\n }\n\n // if there is only one hotel, get the first offer from the group offers data\n if (singleHotel) {\n hotelOffersData.data = [hotelOffersData.data[0]];\n }\n\n // get all the offers from the group offers data\n const offers = this.getAllOffers(hotelOffersData, offerMetaData);\n\n // Create rate items for each hotel and add it to the collection\n this.addHotelToCollection(offers);\n this.hideSpinnerAndShowFilter();\n }\n\n /**\n * Retrieve hotel offer for given offer category\n * @param categoryId\n * @param allOffers\n */\n public async getGroupCategoryOffers(categoryId?: string, allOffers = false) {\n const filter = (value: CMSOfferItem) => {\n const { isArchived, isDraft, fieldData } = value;\n if (isArchived || isDraft) return false;\n // if allOffers is true, return only offers without thematiques, last minute and early booking\n if (allOffers) {\n return (\n (!fieldData.thematiques || fieldData.thematiques.length === 0) &&\n !fieldData.slug.includes('derniere-minute') &&\n !fieldData.slug.includes('reservez-tot')\n );\n }\n\n return fieldData.category === categoryId;\n };\n await this.getGroupOffers({ filter });\n }\n\n /**\n * Retrieve hotel offer for given offer theme\n * @param themeId\n */\n public async getGroupThemeOffers(themeId: string) {\n const filter = (value: CMSOfferItem) => {\n const { isArchived, isDraft, fieldData } = value;\n if (isArchived || isDraft || !fieldData.thematiques) return false;\n return fieldData.thematiques.includes(themeId);\n };\n await this.getGroupOffers({ filter });\n }\n\n /**\n * Retrieve hotel offer for the given offer slug (single offer page).\n * @param slug The offer slug from the page URL (e.g. forfait-special-ete-jungle-bay).\n */\n public async getGroupSlugOffers(slug: string) {\n const filter = (value: CMSOfferItem) => {\n const { isArchived, isDraft, fieldData } = value;\n if (isArchived || isDraft) return false;\n return fieldData.slug === slug;\n };\n await this.getGroupOffers({ filter });\n }\n\n /**\n * Retrieve all other offers (same as \"all offers\" list) excluding the given slug.\n * Used for \"Nos autres offres\" on the offer detail page.\n * @param excludeSlug The current page's offer slug to exclude from the list.\n */\n public async getGroupOtherOffers(excludeSlug: string) {\n const filter = (value: CMSOfferItem) => {\n const { isArchived, isDraft, fieldData } = value;\n if (isArchived || isDraft) return false;\n if (fieldData.slug === excludeSlug) return false;\n return (\n (!fieldData.thematiques || fieldData.thematiques.length === 0) &&\n !fieldData.slug.includes('derniere-minute') &&\n !fieldData.slug.includes('reservez-tot')\n );\n };\n await this.getGroupOffers({ filter });\n }\n\n /**\n * Hide the loading spinner and show the empty state if no offers are found\n * @private\n */\n private hideSpinnerAndShowFilter() {\n // Hide the loading spinner and show the empty state if no offers are found\n if (this.loadingSpinner) this.loadingSpinner.style.display = 'none';\n if (this.cmsFilterEmptyState) {\n this.cmsFilterEmptyState.classList.remove('hide-empty-state');\n }\n }\n\n /**\n * Filter the offers based on the country code\n * @param item\n */\n private countryCodeFilter = (item: CMSOfferItem) => {\n const { fieldData } = item;\n\n if (!fieldData['supported-countries'] || fieldData['supported-countries'].length === 0)\n return true;\n\n const itemCountryCodes = fieldData['supported-countries'].map(\n (c) => this.availableCountries[c]\n );\n\n return itemCountryCodes.includes(this.countryCode);\n };\n\n /**\n *\n * @param cmsOffers to generate hotel ids from\n * @returns hotel ids based on the cms offers\n */\n private generateHotelIds(cmsOffers: CMSOfferItem[]) {\n const hotelIds: string[] = [];\n const cmsIDToHotelIds = cmsIDToHotelIdMap();\n cmsOffers.forEach((offer) => {\n const {\n fieldData: { 'hotel-villa': hotelCMSId },\n } = offer;\n hotelIds.push(cmsIDToHotelIds[hotelCMSId]);\n });\n return Array.from(new Set(hotelIds));\n }\n\n /**\n * Retrieve all offers from the group offers data in a flat structure - sorted by CMS offer order\n * @param hotelOffersData to get all rates from\n * @param offerMetaData\n * @returns the offer with each rate as a separate item\n */\n\n private getAllOffers(hotelOffersData: GroupOffersData, offerMetaData: string[]) {\n const rates: Offer[] = [];\n\n hotelOffersData.data.forEach((offer) => {\n const {\n prop: { hid },\n rates: offerRates,\n } = offer;\n\n offerRates.forEach((rate) => {\n const { name, title } = rate.rate;\n\n const includeOffer =\n offerMetaData.includes(offerSlug(hid, name)) ||\n offerMetaData.includes(offerSlug(hid, title));\n\n if (includeOffer) {\n rates.push({\n ...offer,\n rates: [rate],\n });\n }\n });\n });\n\n // sort the rates based on the order in the CMS offer\n rates.sort((a, b) => {\n const cmsOfferA =\n this.offerLookup[offerSlug(a.prop.hid, a.rates[0].rate.title)] ||\n this.offerLookup[offerSlug(a.prop.hid, a.rates[0].rate.name)];\n\n const cmsOfferB =\n this.offerLookup[offerSlug(b.prop.hid, b.rates[0].rate.title)] ||\n this.offerLookup[offerSlug(b.prop.hid, b.rates[0].rate.name)];\n\n const aOrder = Number(cmsOfferA.fieldData.order) || 0;\n const bOrder = Number(cmsOfferB.fieldData.order) || 0;\n return aOrder - bOrder;\n });\n\n return rates;\n }\n\n /**\n *\n * @param filteredOffers to generate offer data from CMS offers\n * generate the offer metadata and create a lookup object for the cms offers data (useful when looking up for offers discount percentage)\n * @returns\n */\n private generateOfferData(filteredOffers: CMSOfferItem[]) {\n const offerMetaData: string[] = [];\n\n filteredOffers.forEach((offer) => {\n const {\n fieldData: { 'hotel-or-property-api-id': hotelId, 'offer-api-name': name },\n } = offer;\n const slug = offerSlug(hotelId, name);\n offerMetaData.push(slug);\n this.offerLookup[slug] = offer;\n });\n\n return { offerMetaData };\n }\n\n /**\n *\n * @param offers\n */\n private addHotelToCollection(offers: Offer[]) {\n for (const { prop, rates } of offers) {\n const items = rates.map((item) => this.createItem(prop, item, this.itemTemplateElement));\n this.listInstance.addItems(items);\n }\n }\n\n /**\n * Creates an item from the template element.\n * @param offerProperty\n * @param rate The Rate data to create the item from.\n * @param templateElement The template element.\n *\n * @returns A new Collection Item element.\n */\n private createItem(offerProperty: OfferProperty, rate: Rate, templateElement: HTMLDivElement) {\n const { rate: rateData } = rate;\n const { hid, title: hotelName, property } = offerProperty;\n const { image, title, name } = rateData;\n const offerCMSData =\n this.offerLookup[offerSlug(hid || property, title)] ||\n this.offerLookup[offerSlug(hid || property, name)];\n\n const newItem = templateElement.cloneNode(true) as HTMLDivElement;\n const hotelMeta = SNIPPET_CODE_TO_HOTEL[hid || property];\n if (!hotelMeta) return newItem;\n const { destination, slug } = hotelMeta;\n\n this.bindOffersMetaData(newItem, { destination, image, hotelName, title, slug });\n bindQuotationData(newItem, rate, hid, offerCMSData);\n\n const moreDetails = newItem.querySelector<HTMLDivElement>(SELECTORS.moreDetails);\n if (moreDetails) {\n moreDetails.addEventListener('click', () => {\n //get slug of this offer from the offerCMSData\n const offersSlug = this.getOffersCmsSlug(hid, property, name);\n //goto /offers/offersSlug\n window.location.href = `/offers/${offersSlug}`;\n });\n }\n\n newItem.style.display = 'flex';\n return newItem;\n }\n\n private getOffersCmsSlug(hid: string, property: string, title: string): string {\n const offerCMSData = this.offerLookup[offerSlug(hid || property, title)];\n return offerCMSData?.fieldData.slug;\n }\n\n /**\n *\n * @param container for data item\n * @param destination for offer\n * @param image for offer\n * @param hotelName for hotel\n * @param title for offer\n * @param slug\n * @param description\n */\n private bindOffersMetaData(\n container: HTMLDivElement,\n {\n destination,\n image,\n hotelName,\n title,\n slug,\n description,\n }: {\n destination: Destination;\n image: Image;\n hotelName: string;\n title: string;\n slug: string;\n description?: string;\n }\n ) {\n const destinationEl = container.querySelector<HTMLElement>(SELECTORS.destination);\n const imageEl = container.querySelector<HTMLImageElement>(SELECTORS.image);\n const hotelNameEl = container.querySelector<HTMLElement>(SELECTORS.hotelName);\n const nameEl = container.querySelector<HTMLElement>(SELECTORS.name);\n const descriptionEl = container.querySelector<HTMLElement>(SELECTORS.description);\n const hotelLinkEl = container.querySelector<HTMLAnchorElement>(SELECTORS.hotelLink);\n\n const language = getLanguage() as keyof Destination;\n if (destinationEl) destinationEl.textContent = destination[language];\n if (imageEl) imageEl.src = image?.url;\n if (hotelNameEl) hotelNameEl.innerHTML = hotelName;\n if (nameEl) nameEl.innerHTML = title;\n if (descriptionEl && description) descriptionEl.innerHTML = description;\n if (hotelLinkEl && slug) {\n hotelLinkEl.addEventListener('click', () => {\n window.location.href = slug;\n });\n }\n }\n}\n\n/**\n * Binds offer metadata (image, destination, hotel name, offer name, description, hotel link)\n * to elements inside the container. Same logic as the popup / list item binding.\n */\nexport function bindOfferMetaToContainer(\n container: HTMLDivElement,\n {\n destination,\n image,\n hotelName,\n title,\n slug,\n description,\n }: {\n destination: Destination;\n image: Image;\n hotelName: string;\n title: string;\n slug: string;\n description?: string;\n }\n): void {\n const destinationEl = container.querySelectorAll<HTMLElement>(SELECTORS.destination);\n const hotelNameEl = container.querySelectorAll<HTMLElement>(SELECTORS.hotelName);\n const nameEl = container.querySelectorAll<HTMLElement>(SELECTORS.name);\n const descriptionEl = container.querySelectorAll<HTMLElement>(SELECTORS.description);\n const hotelLinkEl = container.querySelectorAll<HTMLAnchorElement>(SELECTORS.hotelLink);\n\n const language = getLanguage() as keyof Destination;\n if (destinationEl) {\n destinationEl.forEach((el) => {\n el.textContent = destination[language];\n });\n }\n if (image?.url) {\n const images = container.querySelectorAll<HTMLImageElement>(SELECTORS.image);\n images.forEach((el) => {\n el.src = image.url;\n });\n }\n if (hotelNameEl) {\n hotelNameEl.forEach((el) => {\n el.innerHTML = hotelName;\n });\n }\n if (nameEl) {\n nameEl.forEach((el) => {\n el.innerHTML = title;\n });\n }\n if (descriptionEl && description) {\n descriptionEl.forEach((el) => {\n el.innerHTML = description;\n });\n }\n if (hotelLinkEl && slug) {\n hotelLinkEl.forEach((el) => {\n el.addEventListener('click', (e) => {\n e.preventDefault();\n window.location.href = slug;\n });\n });\n }\n}\n\n/**\n * Fetches the single offer for the given slug and binds price/CTA to existing elements\n * in the container. Use on the offer slug page where the main offer block is already\n * in the DOM (no list). Container should wrap elements with data-price, data-currency,\n * data-hotel-reserve-link, data-hotel-villa-reserve-link, data-discount, data-discount-container.\n */\nexport async function bindSlugOfferToContainer(\n slug: string,\n container: HTMLDivElement\n): Promise<void> {\n const apiClient = new ApiClient();\n const cmsOffersData = await apiClient.getCMSOffers();\n if (!cmsOffersData) return;\n\n const cmsCountries = await apiClient.getCountries();\n if (!cmsCountries) return;\n\n const availableCountries: { [key: string]: string } = {};\n cmsCountries.items.forEach((c) => {\n availableCountries[c.id] = c.fieldData.title?.trim();\n });\n\n const countryCode = await getUserCountryCode();\n const countryCodeFilter = (item: CMSOfferItem) => {\n const { fieldData } = item;\n if (!fieldData['supported-countries'] || fieldData['supported-countries'].length === 0)\n return true;\n const itemCountryCodes = fieldData['supported-countries'].map((c) => availableCountries[c]);\n return itemCountryCodes.includes(countryCode);\n };\n\n const slugFilter = (value: CMSOfferItem) => {\n const { isArchived, isDraft, fieldData } = value;\n if (isArchived || isDraft) return false;\n return fieldData.slug === slug;\n };\n\n const filteredOffers = cmsOffersData.items.filter(slugFilter).filter(countryCodeFilter);\n if (filteredOffers.length === 0) return;\n\n const cmsIDToHotelIds = cmsIDToHotelIdMap();\n const hotelIds = Array.from(\n new Set(\n filteredOffers\n .map((o) => cmsIDToHotelIds[o.fieldData['hotel-villa']])\n .filter((id): id is string => id != null)\n )\n );\n if (hotelIds.length === 0) return;\n let hids = hotelIds.join(',');\n if (hotelIds.length === 1) hids = [hids, hids].join(',');\n\n const offerLookup: { [key: string]: CMSOfferItem } = {};\n const offerMetaData: string[] = [];\n filteredOffers.forEach((offer) => {\n const {\n fieldData: { 'hotel-or-property-api-id': hotelId, 'offer-api-name': name },\n } = offer;\n const s = offerSlug(hotelId, name);\n offerMetaData.push(s);\n offerLookup[s] = offer;\n });\n\n const locale = getLocale();\n const hotelOffersData = await apiClient.getGroupOffersData({ hids, locale });\n if (!hotelOffersData?.data || hotelOffersData.error) return;\n\n const data = hotelIds.length === 1 ? [hotelOffersData.data[0]] : hotelOffersData.data;\n const offers: Offer[] = [];\n data.forEach((offer) => {\n const {\n prop: { hid },\n rates: offerRates,\n } = offer;\n offerRates.forEach((rate) => {\n const { name, title } = rate.rate;\n const include =\n offerMetaData.includes(offerSlug(hid, name)) ||\n offerMetaData.includes(offerSlug(hid, title));\n if (include) offers.push({ ...offer, rates: [rate] });\n });\n });\n offers.sort((a, b) => {\n const cmsA =\n offerLookup[offerSlug(a.prop.hid, a.rates[0].rate.title)] ||\n offerLookup[offerSlug(a.prop.hid, a.rates[0].rate.name)];\n const cmsB =\n offerLookup[offerSlug(b.prop.hid, b.rates[0].rate.title)] ||\n offerLookup[offerSlug(b.prop.hid, b.rates[0].rate.name)];\n return (Number(cmsA?.fieldData.order) || 0) - (Number(cmsB?.fieldData.order) || 0);\n });\n\n const first = offers[0];\n if (!first?.rates?.[0]) return;\n const { prop, rates } = first;\n const hid = prop.hid || prop.property;\n const rate = rates[0];\n const cmsOfferData =\n offerLookup[offerSlug(hid, rate.rate.title)] || offerLookup[offerSlug(hid, rate.rate.name)];\n try {\n const hotelMeta = SNIPPET_CODE_TO_HOTEL[hid];\n if (hotelMeta) {\n bindOfferMetaToContainer(container, {\n destination: hotelMeta.destination,\n image: rate.rate.image,\n hotelName: prop.title,\n title: rate.rate.title,\n slug: hotelMeta.slug,\n description: rate.rate.html_description,\n });\n }\n bindQuotationData(container, rate, hid, cmsOfferData);\n } catch {\n // bind failed\n }\n}\n", "import type { CMSFilters } from '@globalTypes/CMSFilters';\nimport type { CMSList } from '@globalTypes/CMSList';\n\nimport { SELECTORS } from './constants';\nimport { Offers } from './Offers';\n\n/**\n * Minimal CMSList backed by a plain DOM container (no cmsfilter/cmsload).\n * Template: `[data-list-item]` or, for offer-slug-others-list, `.offer-others_item` from snapshot.\n */\nexport function createOffersFromDomContainer(listContainer: HTMLDivElement): Offers | null {\n let templateItem = listContainer.querySelector<HTMLDivElement>(SELECTORS.listItem);\n if (!templateItem && listContainer.matches(SELECTORS.offerSlugOthersList)) {\n templateItem = listContainer.querySelector<HTMLDivElement>(SELECTORS.offerSlugOthersListItem);\n }\n if (!templateItem) return null;\n\n const fakeList = {\n items: [{ element: templateItem }],\n clearItems(removeElements = true) {\n if (removeElements) {\n listContainer.innerHTML = '';\n }\n },\n addItems(itemElements: HTMLElement[]) {\n for (const el of itemElements) {\n listContainer.appendChild(el);\n }\n return Promise.resolve();\n },\n } as CMSList;\n\n return createOfferForList(fakeList);\n}\n\n/**\n * creates an instance of Offers based on the filtersInstances\n * @param filtersInstances\n * @returns @type {Offers} instance\n */\nexport const createOffersInstance = (filtersInstances: CMSFilters[]) => {\n const [filtersInstance] = filtersInstances;\n\n // Get the list instance\n const { listInstance } = filtersInstance;\n if (listInstance.items.length === 0) {\n throw new Error('No items found in the list instance - Cannot create an instance of Offers');\n }\n\n return createOfferForList(listInstance);\n};\n\n/**\n * creates an instance of Offers based on the listInstance\n * @param listInstance\n * @returns @type {Offers} instance\n */\nexport const createOfferForList = (listInstance: CMSList) => {\n const [firstItem] = listInstance.items;\n if (!firstItem) throw new Error('No items found in the list instance');\n\n const itemTemplateElement = firstItem.element;\n return new Offers(listInstance, itemTemplateElement);\n};\n", "function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\n\n/*!\n * Splide.js\n * Version : 4.1.4\n * License : MIT\n * Copyright: 2022 Naotoshi Fujita\n */\nvar MEDIA_PREFERS_REDUCED_MOTION = \"(prefers-reduced-motion: reduce)\";\nvar CREATED = 1;\nvar MOUNTED = 2;\nvar IDLE = 3;\nvar MOVING = 4;\nvar SCROLLING = 5;\nvar DRAGGING = 6;\nvar DESTROYED = 7;\nvar STATES = {\n CREATED: CREATED,\n MOUNTED: MOUNTED,\n IDLE: IDLE,\n MOVING: MOVING,\n SCROLLING: SCROLLING,\n DRAGGING: DRAGGING,\n DESTROYED: DESTROYED\n};\n\nfunction empty(array) {\n array.length = 0;\n}\n\nfunction slice(arrayLike, start, end) {\n return Array.prototype.slice.call(arrayLike, start, end);\n}\n\nfunction apply(func) {\n return func.bind.apply(func, [null].concat(slice(arguments, 1)));\n}\n\nvar nextTick = setTimeout;\n\nvar noop = function noop() {};\n\nfunction raf(func) {\n return requestAnimationFrame(func);\n}\n\nfunction typeOf(type, subject) {\n return typeof subject === type;\n}\n\nfunction isObject(subject) {\n return !isNull(subject) && typeOf(\"object\", subject);\n}\n\nvar isArray = Array.isArray;\nvar isFunction = apply(typeOf, \"function\");\nvar isString = apply(typeOf, \"string\");\nvar isUndefined = apply(typeOf, \"undefined\");\n\nfunction isNull(subject) {\n return subject === null;\n}\n\nfunction isHTMLElement(subject) {\n try {\n return subject instanceof (subject.ownerDocument.defaultView || window).HTMLElement;\n } catch (e) {\n return false;\n }\n}\n\nfunction toArray(value) {\n return isArray(value) ? value : [value];\n}\n\nfunction forEach(values, iteratee) {\n toArray(values).forEach(iteratee);\n}\n\nfunction includes(array, value) {\n return array.indexOf(value) > -1;\n}\n\nfunction push(array, items) {\n array.push.apply(array, toArray(items));\n return array;\n}\n\nfunction toggleClass(elm, classes, add) {\n if (elm) {\n forEach(classes, function (name) {\n if (name) {\n elm.classList[add ? \"add\" : \"remove\"](name);\n }\n });\n }\n}\n\nfunction addClass(elm, classes) {\n toggleClass(elm, isString(classes) ? classes.split(\" \") : classes, true);\n}\n\nfunction append(parent, children) {\n forEach(children, parent.appendChild.bind(parent));\n}\n\nfunction before(nodes, ref) {\n forEach(nodes, function (node) {\n var parent = (ref || node).parentNode;\n\n if (parent) {\n parent.insertBefore(node, ref);\n }\n });\n}\n\nfunction matches(elm, selector) {\n return isHTMLElement(elm) && (elm[\"msMatchesSelector\"] || elm.matches).call(elm, selector);\n}\n\nfunction children(parent, selector) {\n var children2 = parent ? slice(parent.children) : [];\n return selector ? children2.filter(function (child) {\n return matches(child, selector);\n }) : children2;\n}\n\nfunction child(parent, selector) {\n return selector ? children(parent, selector)[0] : parent.firstElementChild;\n}\n\nvar ownKeys = Object.keys;\n\nfunction forOwn(object, iteratee, right) {\n if (object) {\n (right ? ownKeys(object).reverse() : ownKeys(object)).forEach(function (key) {\n key !== \"__proto__\" && iteratee(object[key], key);\n });\n }\n\n return object;\n}\n\nfunction assign(object) {\n slice(arguments, 1).forEach(function (source) {\n forOwn(source, function (value, key) {\n object[key] = source[key];\n });\n });\n return object;\n}\n\nfunction merge(object) {\n slice(arguments, 1).forEach(function (source) {\n forOwn(source, function (value, key) {\n if (isArray(value)) {\n object[key] = value.slice();\n } else if (isObject(value)) {\n object[key] = merge({}, isObject(object[key]) ? object[key] : {}, value);\n } else {\n object[key] = value;\n }\n });\n });\n return object;\n}\n\nfunction omit(object, keys) {\n forEach(keys || ownKeys(object), function (key) {\n delete object[key];\n });\n}\n\nfunction removeAttribute(elms, attrs) {\n forEach(elms, function (elm) {\n forEach(attrs, function (attr) {\n elm && elm.removeAttribute(attr);\n });\n });\n}\n\nfunction setAttribute(elms, attrs, value) {\n if (isObject(attrs)) {\n forOwn(attrs, function (value2, name) {\n setAttribute(elms, name, value2);\n });\n } else {\n forEach(elms, function (elm) {\n isNull(value) || value === \"\" ? removeAttribute(elm, attrs) : elm.setAttribute(attrs, String(value));\n });\n }\n}\n\nfunction create(tag, attrs, parent) {\n var elm = document.createElement(tag);\n\n if (attrs) {\n isString(attrs) ? addClass(elm, attrs) : setAttribute(elm, attrs);\n }\n\n parent && append(parent, elm);\n return elm;\n}\n\nfunction style(elm, prop, value) {\n if (isUndefined(value)) {\n return getComputedStyle(elm)[prop];\n }\n\n if (!isNull(value)) {\n elm.style[prop] = \"\" + value;\n }\n}\n\nfunction display(elm, display2) {\n style(elm, \"display\", display2);\n}\n\nfunction focus(elm) {\n elm[\"setActive\"] && elm[\"setActive\"]() || elm.focus({\n preventScroll: true\n });\n}\n\nfunction getAttribute(elm, attr) {\n return elm.getAttribute(attr);\n}\n\nfunction hasClass(elm, className) {\n return elm && elm.classList.contains(className);\n}\n\nfunction rect(target) {\n return target.getBoundingClientRect();\n}\n\nfunction remove(nodes) {\n forEach(nodes, function (node) {\n if (node && node.parentNode) {\n node.parentNode.removeChild(node);\n }\n });\n}\n\nfunction parseHtml(html) {\n return child(new DOMParser().parseFromString(html, \"text/html\").body);\n}\n\nfunction prevent(e, stopPropagation) {\n e.preventDefault();\n\n if (stopPropagation) {\n e.stopPropagation();\n e.stopImmediatePropagation();\n }\n}\n\nfunction query(parent, selector) {\n return parent && parent.querySelector(selector);\n}\n\nfunction queryAll(parent, selector) {\n return selector ? slice(parent.querySelectorAll(selector)) : [];\n}\n\nfunction removeClass(elm, classes) {\n toggleClass(elm, classes, false);\n}\n\nfunction timeOf(e) {\n return e.timeStamp;\n}\n\nfunction unit(value) {\n return isString(value) ? value : value ? value + \"px\" : \"\";\n}\n\nvar PROJECT_CODE = \"splide\";\nvar DATA_ATTRIBUTE = \"data-\" + PROJECT_CODE;\n\nfunction assert(condition, message) {\n if (!condition) {\n throw new Error(\"[\" + PROJECT_CODE + \"] \" + (message || \"\"));\n }\n}\n\nvar min = Math.min,\n max = Math.max,\n floor = Math.floor,\n ceil = Math.ceil,\n abs = Math.abs;\n\nfunction approximatelyEqual(x, y, epsilon) {\n return abs(x - y) < epsilon;\n}\n\nfunction between(number, x, y, exclusive) {\n var minimum = min(x, y);\n var maximum = max(x, y);\n return exclusive ? minimum < number && number < maximum : minimum <= number && number <= maximum;\n}\n\nfunction clamp(number, x, y) {\n var minimum = min(x, y);\n var maximum = max(x, y);\n return min(max(minimum, number), maximum);\n}\n\nfunction sign(x) {\n return +(x > 0) - +(x < 0);\n}\n\nfunction camelToKebab(string) {\n return string.replace(/([a-z0-9])([A-Z])/g, \"$1-$2\").toLowerCase();\n}\n\nfunction format(string, replacements) {\n forEach(replacements, function (replacement) {\n string = string.replace(\"%s\", \"\" + replacement);\n });\n return string;\n}\n\nfunction pad(number) {\n return number < 10 ? \"0\" + number : \"\" + number;\n}\n\nvar ids = {};\n\nfunction uniqueId(prefix) {\n return \"\" + prefix + pad(ids[prefix] = (ids[prefix] || 0) + 1);\n}\n\nfunction EventBinder() {\n var listeners = [];\n\n function bind(targets, events, callback, options) {\n forEachEvent(targets, events, function (target, event, namespace) {\n var isEventTarget = (\"addEventListener\" in target);\n var remover = isEventTarget ? target.removeEventListener.bind(target, event, callback, options) : target[\"removeListener\"].bind(target, callback);\n isEventTarget ? target.addEventListener(event, callback, options) : target[\"addListener\"](callback);\n listeners.push([target, event, namespace, callback, remover]);\n });\n }\n\n function unbind(targets, events, callback) {\n forEachEvent(targets, events, function (target, event, namespace) {\n listeners = listeners.filter(function (listener) {\n if (listener[0] === target && listener[1] === event && listener[2] === namespace && (!callback || listener[3] === callback)) {\n listener[4]();\n return false;\n }\n\n return true;\n });\n });\n }\n\n function dispatch(target, type, detail) {\n var e;\n var bubbles = true;\n\n if (typeof CustomEvent === \"function\") {\n e = new CustomEvent(type, {\n bubbles: bubbles,\n detail: detail\n });\n } else {\n e = document.createEvent(\"CustomEvent\");\n e.initCustomEvent(type, bubbles, false, detail);\n }\n\n target.dispatchEvent(e);\n return e;\n }\n\n function forEachEvent(targets, events, iteratee) {\n forEach(targets, function (target) {\n target && forEach(events, function (events2) {\n events2.split(\" \").forEach(function (eventNS) {\n var fragment = eventNS.split(\".\");\n iteratee(target, fragment[0], fragment[1]);\n });\n });\n });\n }\n\n function destroy() {\n listeners.forEach(function (data) {\n data[4]();\n });\n empty(listeners);\n }\n\n return {\n bind: bind,\n unbind: unbind,\n dispatch: dispatch,\n destroy: destroy\n };\n}\n\nvar EVENT_MOUNTED = \"mounted\";\nvar EVENT_READY = \"ready\";\nvar EVENT_MOVE = \"move\";\nvar EVENT_MOVED = \"moved\";\nvar EVENT_CLICK = \"click\";\nvar EVENT_ACTIVE = \"active\";\nvar EVENT_INACTIVE = \"inactive\";\nvar EVENT_VISIBLE = \"visible\";\nvar EVENT_HIDDEN = \"hidden\";\nvar EVENT_REFRESH = \"refresh\";\nvar EVENT_UPDATED = \"updated\";\nvar EVENT_RESIZE = \"resize\";\nvar EVENT_RESIZED = \"resized\";\nvar EVENT_DRAG = \"drag\";\nvar EVENT_DRAGGING = \"dragging\";\nvar EVENT_DRAGGED = \"dragged\";\nvar EVENT_SCROLL = \"scroll\";\nvar EVENT_SCROLLED = \"scrolled\";\nvar EVENT_OVERFLOW = \"overflow\";\nvar EVENT_DESTROY = \"destroy\";\nvar EVENT_ARROWS_MOUNTED = \"arrows:mounted\";\nvar EVENT_ARROWS_UPDATED = \"arrows:updated\";\nvar EVENT_PAGINATION_MOUNTED = \"pagination:mounted\";\nvar EVENT_PAGINATION_UPDATED = \"pagination:updated\";\nvar EVENT_NAVIGATION_MOUNTED = \"navigation:mounted\";\nvar EVENT_AUTOPLAY_PLAY = \"autoplay:play\";\nvar EVENT_AUTOPLAY_PLAYING = \"autoplay:playing\";\nvar EVENT_AUTOPLAY_PAUSE = \"autoplay:pause\";\nvar EVENT_LAZYLOAD_LOADED = \"lazyload:loaded\";\nvar EVENT_SLIDE_KEYDOWN = \"sk\";\nvar EVENT_SHIFTED = \"sh\";\nvar EVENT_END_INDEX_CHANGED = \"ei\";\n\nfunction EventInterface(Splide2) {\n var bus = Splide2 ? Splide2.event.bus : document.createDocumentFragment();\n var binder = EventBinder();\n\n function on(events, callback) {\n binder.bind(bus, toArray(events).join(\" \"), function (e) {\n callback.apply(callback, isArray(e.detail) ? e.detail : []);\n });\n }\n\n function emit(event) {\n binder.dispatch(bus, event, slice(arguments, 1));\n }\n\n if (Splide2) {\n Splide2.event.on(EVENT_DESTROY, binder.destroy);\n }\n\n return assign(binder, {\n bus: bus,\n on: on,\n off: apply(binder.unbind, bus),\n emit: emit\n });\n}\n\nfunction RequestInterval(interval, onInterval, onUpdate, limit) {\n var now = Date.now;\n var startTime;\n var rate = 0;\n var id;\n var paused = true;\n var count = 0;\n\n function update() {\n if (!paused) {\n rate = interval ? min((now() - startTime) / interval, 1) : 1;\n onUpdate && onUpdate(rate);\n\n if (rate >= 1) {\n onInterval();\n startTime = now();\n\n if (limit && ++count >= limit) {\n return pause();\n }\n }\n\n id = raf(update);\n }\n }\n\n function start(resume) {\n resume || cancel();\n startTime = now() - (resume ? rate * interval : 0);\n paused = false;\n id = raf(update);\n }\n\n function pause() {\n paused = true;\n }\n\n function rewind() {\n startTime = now();\n rate = 0;\n\n if (onUpdate) {\n onUpdate(rate);\n }\n }\n\n function cancel() {\n id && cancelAnimationFrame(id);\n rate = 0;\n id = 0;\n paused = true;\n }\n\n function set(time) {\n interval = time;\n }\n\n function isPaused() {\n return paused;\n }\n\n return {\n start: start,\n rewind: rewind,\n pause: pause,\n cancel: cancel,\n set: set,\n isPaused: isPaused\n };\n}\n\nfunction State(initialState) {\n var state = initialState;\n\n function set(value) {\n state = value;\n }\n\n function is(states) {\n return includes(toArray(states), state);\n }\n\n return {\n set: set,\n is: is\n };\n}\n\nfunction Throttle(func, duration) {\n var interval = RequestInterval(duration || 0, func, null, 1);\n return function () {\n interval.isPaused() && interval.start();\n };\n}\n\nfunction Media(Splide2, Components2, options) {\n var state = Splide2.state;\n var breakpoints = options.breakpoints || {};\n var reducedMotion = options.reducedMotion || {};\n var binder = EventBinder();\n var queries = [];\n\n function setup() {\n var isMin = options.mediaQuery === \"min\";\n ownKeys(breakpoints).sort(function (n, m) {\n return isMin ? +n - +m : +m - +n;\n }).forEach(function (key) {\n register(breakpoints[key], \"(\" + (isMin ? \"min\" : \"max\") + \"-width:\" + key + \"px)\");\n });\n register(reducedMotion, MEDIA_PREFERS_REDUCED_MOTION);\n update();\n }\n\n function destroy(completely) {\n if (completely) {\n binder.destroy();\n }\n }\n\n function register(options2, query) {\n var queryList = matchMedia(query);\n binder.bind(queryList, \"change\", update);\n queries.push([options2, queryList]);\n }\n\n function update() {\n var destroyed = state.is(DESTROYED);\n var direction = options.direction;\n var merged = queries.reduce(function (merged2, entry) {\n return merge(merged2, entry[1].matches ? entry[0] : {});\n }, {});\n omit(options);\n set(merged);\n\n if (options.destroy) {\n Splide2.destroy(options.destroy === \"completely\");\n } else if (destroyed) {\n destroy(true);\n Splide2.mount();\n } else {\n direction !== options.direction && Splide2.refresh();\n }\n }\n\n function reduce(enable) {\n if (matchMedia(MEDIA_PREFERS_REDUCED_MOTION).matches) {\n enable ? merge(options, reducedMotion) : omit(options, ownKeys(reducedMotion));\n }\n }\n\n function set(opts, base, notify) {\n merge(options, opts);\n base && merge(Object.getPrototypeOf(options), opts);\n\n if (notify || !state.is(CREATED)) {\n Splide2.emit(EVENT_UPDATED, options);\n }\n }\n\n return {\n setup: setup,\n destroy: destroy,\n reduce: reduce,\n set: set\n };\n}\n\nvar ARROW = \"Arrow\";\nvar ARROW_LEFT = ARROW + \"Left\";\nvar ARROW_RIGHT = ARROW + \"Right\";\nvar ARROW_UP = ARROW + \"Up\";\nvar ARROW_DOWN = ARROW + \"Down\";\nvar LTR = \"ltr\";\nvar RTL = \"rtl\";\nvar TTB = \"ttb\";\nvar ORIENTATION_MAP = {\n width: [\"height\"],\n left: [\"top\", \"right\"],\n right: [\"bottom\", \"left\"],\n x: [\"y\"],\n X: [\"Y\"],\n Y: [\"X\"],\n ArrowLeft: [ARROW_UP, ARROW_RIGHT],\n ArrowRight: [ARROW_DOWN, ARROW_LEFT]\n};\n\nfunction Direction(Splide2, Components2, options) {\n function resolve(prop, axisOnly, direction) {\n direction = direction || options.direction;\n var index = direction === RTL && !axisOnly ? 1 : direction === TTB ? 0 : -1;\n return ORIENTATION_MAP[prop] && ORIENTATION_MAP[prop][index] || prop.replace(/width|left|right/i, function (match, offset) {\n var replacement = ORIENTATION_MAP[match.toLowerCase()][index] || match;\n return offset > 0 ? replacement.charAt(0).toUpperCase() + replacement.slice(1) : replacement;\n });\n }\n\n function orient(value) {\n return value * (options.direction === RTL ? 1 : -1);\n }\n\n return {\n resolve: resolve,\n orient: orient\n };\n}\n\nvar ROLE = \"role\";\nvar TAB_INDEX = \"tabindex\";\nvar DISABLED = \"disabled\";\nvar ARIA_PREFIX = \"aria-\";\nvar ARIA_CONTROLS = ARIA_PREFIX + \"controls\";\nvar ARIA_CURRENT = ARIA_PREFIX + \"current\";\nvar ARIA_SELECTED = ARIA_PREFIX + \"selected\";\nvar ARIA_LABEL = ARIA_PREFIX + \"label\";\nvar ARIA_LABELLEDBY = ARIA_PREFIX + \"labelledby\";\nvar ARIA_HIDDEN = ARIA_PREFIX + \"hidden\";\nvar ARIA_ORIENTATION = ARIA_PREFIX + \"orientation\";\nvar ARIA_ROLEDESCRIPTION = ARIA_PREFIX + \"roledescription\";\nvar ARIA_LIVE = ARIA_PREFIX + \"live\";\nvar ARIA_BUSY = ARIA_PREFIX + \"busy\";\nvar ARIA_ATOMIC = ARIA_PREFIX + \"atomic\";\nvar ALL_ATTRIBUTES = [ROLE, TAB_INDEX, DISABLED, ARIA_CONTROLS, ARIA_CURRENT, ARIA_LABEL, ARIA_LABELLEDBY, ARIA_HIDDEN, ARIA_ORIENTATION, ARIA_ROLEDESCRIPTION];\nvar CLASS_PREFIX = PROJECT_CODE + \"__\";\nvar STATUS_CLASS_PREFIX = \"is-\";\nvar CLASS_ROOT = PROJECT_CODE;\nvar CLASS_TRACK = CLASS_PREFIX + \"track\";\nvar CLASS_LIST = CLASS_PREFIX + \"list\";\nvar CLASS_SLIDE = CLASS_PREFIX + \"slide\";\nvar CLASS_CLONE = CLASS_SLIDE + \"--clone\";\nvar CLASS_CONTAINER = CLASS_SLIDE + \"__container\";\nvar CLASS_ARROWS = CLASS_PREFIX + \"arrows\";\nvar CLASS_ARROW = CLASS_PREFIX + \"arrow\";\nvar CLASS_ARROW_PREV = CLASS_ARROW + \"--prev\";\nvar CLASS_ARROW_NEXT = CLASS_ARROW + \"--next\";\nvar CLASS_PAGINATION = CLASS_PREFIX + \"pagination\";\nvar CLASS_PAGINATION_PAGE = CLASS_PAGINATION + \"__page\";\nvar CLASS_PROGRESS = CLASS_PREFIX + \"progress\";\nvar CLASS_PROGRESS_BAR = CLASS_PROGRESS + \"__bar\";\nvar CLASS_TOGGLE = CLASS_PREFIX + \"toggle\";\nvar CLASS_TOGGLE_PLAY = CLASS_TOGGLE + \"__play\";\nvar CLASS_TOGGLE_PAUSE = CLASS_TOGGLE + \"__pause\";\nvar CLASS_SPINNER = CLASS_PREFIX + \"spinner\";\nvar CLASS_SR = CLASS_PREFIX + \"sr\";\nvar CLASS_INITIALIZED = STATUS_CLASS_PREFIX + \"initialized\";\nvar CLASS_ACTIVE = STATUS_CLASS_PREFIX + \"active\";\nvar CLASS_PREV = STATUS_CLASS_PREFIX + \"prev\";\nvar CLASS_NEXT = STATUS_CLASS_PREFIX + \"next\";\nvar CLASS_VISIBLE = STATUS_CLASS_PREFIX + \"visible\";\nvar CLASS_LOADING = STATUS_CLASS_PREFIX + \"loading\";\nvar CLASS_FOCUS_IN = STATUS_CLASS_PREFIX + \"focus-in\";\nvar CLASS_OVERFLOW = STATUS_CLASS_PREFIX + \"overflow\";\nvar STATUS_CLASSES = [CLASS_ACTIVE, CLASS_VISIBLE, CLASS_PREV, CLASS_NEXT, CLASS_LOADING, CLASS_FOCUS_IN, CLASS_OVERFLOW];\nvar CLASSES = {\n slide: CLASS_SLIDE,\n clone: CLASS_CLONE,\n arrows: CLASS_ARROWS,\n arrow: CLASS_ARROW,\n prev: CLASS_ARROW_PREV,\n next: CLASS_ARROW_NEXT,\n pagination: CLASS_PAGINATION,\n page: CLASS_PAGINATION_PAGE,\n spinner: CLASS_SPINNER\n};\n\nfunction closest(from, selector) {\n if (isFunction(from.closest)) {\n return from.closest(selector);\n }\n\n var elm = from;\n\n while (elm && elm.nodeType === 1) {\n if (matches(elm, selector)) {\n break;\n }\n\n elm = elm.parentElement;\n }\n\n return elm;\n}\n\nvar FRICTION = 5;\nvar LOG_INTERVAL = 200;\nvar POINTER_DOWN_EVENTS = \"touchstart mousedown\";\nvar POINTER_MOVE_EVENTS = \"touchmove mousemove\";\nvar POINTER_UP_EVENTS = \"touchend touchcancel mouseup click\";\n\nfunction Elements(Splide2, Components2, options) {\n var _EventInterface = EventInterface(Splide2),\n on = _EventInterface.on,\n bind = _EventInterface.bind;\n\n var root = Splide2.root;\n var i18n = options.i18n;\n var elements = {};\n var slides = [];\n var rootClasses = [];\n var trackClasses = [];\n var track;\n var list;\n var isUsingKey;\n\n function setup() {\n collect();\n init();\n update();\n }\n\n function mount() {\n on(EVENT_REFRESH, destroy);\n on(EVENT_REFRESH, setup);\n on(EVENT_UPDATED, update);\n bind(document, POINTER_DOWN_EVENTS + \" keydown\", function (e) {\n isUsingKey = e.type === \"keydown\";\n }, {\n capture: true\n });\n bind(root, \"focusin\", function () {\n toggleClass(root, CLASS_FOCUS_IN, !!isUsingKey);\n });\n }\n\n function destroy(completely) {\n var attrs = ALL_ATTRIBUTES.concat(\"style\");\n empty(slides);\n removeClass(root, rootClasses);\n removeClass(track, trackClasses);\n removeAttribute([track, list], attrs);\n removeAttribute(root, completely ? attrs : [\"style\", ARIA_ROLEDESCRIPTION]);\n }\n\n function update() {\n removeClass(root, rootClasses);\n removeClass(track, trackClasses);\n rootClasses = getClasses(CLASS_ROOT);\n trackClasses = getClasses(CLASS_TRACK);\n addClass(root, rootClasses);\n addClass(track, trackClasses);\n setAttribute(root, ARIA_LABEL, options.label);\n setAttribute(root, ARIA_LABELLEDBY, options.labelledby);\n }\n\n function collect() {\n track = find(\".\" + CLASS_TRACK);\n list = child(track, \".\" + CLASS_LIST);\n assert(track && list, \"A track/list element is missing.\");\n push(slides, children(list, \".\" + CLASS_SLIDE + \":not(.\" + CLASS_CLONE + \")\"));\n forOwn({\n arrows: CLASS_ARROWS,\n pagination: CLASS_PAGINATION,\n prev: CLASS_ARROW_PREV,\n next: CLASS_ARROW_NEXT,\n bar: CLASS_PROGRESS_BAR,\n toggle: CLASS_TOGGLE\n }, function (className, key) {\n elements[key] = find(\".\" + className);\n });\n assign(elements, {\n root: root,\n track: track,\n list: list,\n slides: slides\n });\n }\n\n function init() {\n var id = root.id || uniqueId(PROJECT_CODE);\n var role = options.role;\n root.id = id;\n track.id = track.id || id + \"-track\";\n list.id = list.id || id + \"-list\";\n\n if (!getAttribute(root, ROLE) && root.tagName !== \"SECTION\" && role) {\n setAttribute(root, ROLE, role);\n }\n\n setAttribute(root, ARIA_ROLEDESCRIPTION, i18n.carousel);\n setAttribute(list, ROLE, \"presentation\");\n }\n\n function find(selector) {\n var elm = query(root, selector);\n return elm && closest(elm, \".\" + CLASS_ROOT) === root ? elm : void 0;\n }\n\n function getClasses(base) {\n return [base + \"--\" + options.type, base + \"--\" + options.direction, options.drag && base + \"--draggable\", options.isNavigation && base + \"--nav\", base === CLASS_ROOT && CLASS_ACTIVE];\n }\n\n return assign(elements, {\n setup: setup,\n mount: mount,\n destroy: destroy\n });\n}\n\nvar SLIDE = \"slide\";\nvar LOOP = \"loop\";\nvar FADE = \"fade\";\n\nfunction Slide$1(Splide2, index, slideIndex, slide) {\n var event = EventInterface(Splide2);\n var on = event.on,\n emit = event.emit,\n bind = event.bind;\n var Components = Splide2.Components,\n root = Splide2.root,\n options = Splide2.options;\n var isNavigation = options.isNavigation,\n updateOnMove = options.updateOnMove,\n i18n = options.i18n,\n pagination = options.pagination,\n slideFocus = options.slideFocus;\n var resolve = Components.Direction.resolve;\n var styles = getAttribute(slide, \"style\");\n var label = getAttribute(slide, ARIA_LABEL);\n var isClone = slideIndex > -1;\n var container = child(slide, \".\" + CLASS_CONTAINER);\n var destroyed;\n\n function mount() {\n if (!isClone) {\n slide.id = root.id + \"-slide\" + pad(index + 1);\n setAttribute(slide, ROLE, pagination ? \"tabpanel\" : \"group\");\n setAttribute(slide, ARIA_ROLEDESCRIPTION, i18n.slide);\n setAttribute(slide, ARIA_LABEL, label || format(i18n.slideLabel, [index + 1, Splide2.length]));\n }\n\n listen();\n }\n\n function listen() {\n bind(slide, \"click\", apply(emit, EVENT_CLICK, self));\n bind(slide, \"keydown\", apply(emit, EVENT_SLIDE_KEYDOWN, self));\n on([EVENT_MOVED, EVENT_SHIFTED, EVENT_SCROLLED], update);\n on(EVENT_NAVIGATION_MOUNTED, initNavigation);\n\n if (updateOnMove) {\n on(EVENT_MOVE, onMove);\n }\n }\n\n function destroy() {\n destroyed = true;\n event.destroy();\n removeClass(slide, STATUS_CLASSES);\n removeAttribute(slide, ALL_ATTRIBUTES);\n setAttribute(slide, \"style\", styles);\n setAttribute(slide, ARIA_LABEL, label || \"\");\n }\n\n function initNavigation() {\n var controls = Splide2.splides.map(function (target) {\n var Slide2 = target.splide.Components.Slides.getAt(index);\n return Slide2 ? Slide2.slide.id : \"\";\n }).join(\" \");\n setAttribute(slide, ARIA_LABEL, format(i18n.slideX, (isClone ? slideIndex : index) + 1));\n setAttribute(slide, ARIA_CONTROLS, controls);\n setAttribute(slide, ROLE, slideFocus ? \"button\" : \"\");\n slideFocus && removeAttribute(slide, ARIA_ROLEDESCRIPTION);\n }\n\n function onMove() {\n if (!destroyed) {\n update();\n }\n }\n\n function update() {\n if (!destroyed) {\n var curr = Splide2.index;\n updateActivity();\n updateVisibility();\n toggleClass(slide, CLASS_PREV, index === curr - 1);\n toggleClass(slide, CLASS_NEXT, index === curr + 1);\n }\n }\n\n function updateActivity() {\n var active = isActive();\n\n if (active !== hasClass(slide, CLASS_ACTIVE)) {\n toggleClass(slide, CLASS_ACTIVE, active);\n setAttribute(slide, ARIA_CURRENT, isNavigation && active || \"\");\n emit(active ? EVENT_ACTIVE : EVENT_INACTIVE, self);\n }\n }\n\n function updateVisibility() {\n var visible = isVisible();\n var hidden = !visible && (!isActive() || isClone);\n\n if (!Splide2.state.is([MOVING, SCROLLING])) {\n setAttribute(slide, ARIA_HIDDEN, hidden || \"\");\n }\n\n setAttribute(queryAll(slide, options.focusableNodes || \"\"), TAB_INDEX, hidden ? -1 : \"\");\n\n if (slideFocus) {\n setAttribute(slide, TAB_INDEX, hidden ? -1 : 0);\n }\n\n if (visible !== hasClass(slide, CLASS_VISIBLE)) {\n toggleClass(slide, CLASS_VISIBLE, visible);\n emit(visible ? EVENT_VISIBLE : EVENT_HIDDEN, self);\n }\n\n if (!visible && document.activeElement === slide) {\n var Slide2 = Components.Slides.getAt(Splide2.index);\n Slide2 && focus(Slide2.slide);\n }\n }\n\n function style$1(prop, value, useContainer) {\n style(useContainer && container || slide, prop, value);\n }\n\n function isActive() {\n var curr = Splide2.index;\n return curr === index || options.cloneStatus && curr === slideIndex;\n }\n\n function isVisible() {\n if (Splide2.is(FADE)) {\n return isActive();\n }\n\n var trackRect = rect(Components.Elements.track);\n var slideRect = rect(slide);\n var left = resolve(\"left\", true);\n var right = resolve(\"right\", true);\n return floor(trackRect[left]) <= ceil(slideRect[left]) && floor(slideRect[right]) <= ceil(trackRect[right]);\n }\n\n function isWithin(from, distance) {\n var diff = abs(from - index);\n\n if (!isClone && (options.rewind || Splide2.is(LOOP))) {\n diff = min(diff, Splide2.length - diff);\n }\n\n return diff <= distance;\n }\n\n var self = {\n index: index,\n slideIndex: slideIndex,\n slide: slide,\n container: container,\n isClone: isClone,\n mount: mount,\n destroy: destroy,\n update: update,\n style: style$1,\n isWithin: isWithin\n };\n return self;\n}\n\nfunction Slides(Splide2, Components2, options) {\n var _EventInterface2 = EventInterface(Splide2),\n on = _EventInterface2.on,\n emit = _EventInterface2.emit,\n bind = _EventInterface2.bind;\n\n var _Components2$Elements = Components2.Elements,\n slides = _Components2$Elements.slides,\n list = _Components2$Elements.list;\n var Slides2 = [];\n\n function mount() {\n init();\n on(EVENT_REFRESH, destroy);\n on(EVENT_REFRESH, init);\n }\n\n function init() {\n slides.forEach(function (slide, index) {\n register(slide, index, -1);\n });\n }\n\n function destroy() {\n forEach$1(function (Slide2) {\n Slide2.destroy();\n });\n empty(Slides2);\n }\n\n function update() {\n forEach$1(function (Slide2) {\n Slide2.update();\n });\n }\n\n function register(slide, index, slideIndex) {\n var object = Slide$1(Splide2, index, slideIndex, slide);\n object.mount();\n Slides2.push(object);\n Slides2.sort(function (Slide1, Slide2) {\n return Slide1.index - Slide2.index;\n });\n }\n\n function get(excludeClones) {\n return excludeClones ? filter(function (Slide2) {\n return !Slide2.isClone;\n }) : Slides2;\n }\n\n function getIn(page) {\n var Controller = Components2.Controller;\n var index = Controller.toIndex(page);\n var max = Controller.hasFocus() ? 1 : options.perPage;\n return filter(function (Slide2) {\n return between(Slide2.index, index, index + max - 1);\n });\n }\n\n function getAt(index) {\n return filter(index)[0];\n }\n\n function add(items, index) {\n forEach(items, function (slide) {\n if (isString(slide)) {\n slide = parseHtml(slide);\n }\n\n if (isHTMLElement(slide)) {\n var ref = slides[index];\n ref ? before(slide, ref) : append(list, slide);\n addClass(slide, options.classes.slide);\n observeImages(slide, apply(emit, EVENT_RESIZE));\n }\n });\n emit(EVENT_REFRESH);\n }\n\n function remove$1(matcher) {\n remove(filter(matcher).map(function (Slide2) {\n return Slide2.slide;\n }));\n emit(EVENT_REFRESH);\n }\n\n function forEach$1(iteratee, excludeClones) {\n get(excludeClones).forEach(iteratee);\n }\n\n function filter(matcher) {\n return Slides2.filter(isFunction(matcher) ? matcher : function (Slide2) {\n return isString(matcher) ? matches(Slide2.slide, matcher) : includes(toArray(matcher), Slide2.index);\n });\n }\n\n function style(prop, value, useContainer) {\n forEach$1(function (Slide2) {\n Slide2.style(prop, value, useContainer);\n });\n }\n\n function observeImages(elm, callback) {\n var images = queryAll(elm, \"img\");\n var length = images.length;\n\n if (length) {\n images.forEach(function (img) {\n bind(img, \"load error\", function () {\n if (! --length) {\n callback();\n }\n });\n });\n } else {\n callback();\n }\n }\n\n function getLength(excludeClones) {\n return excludeClones ? slides.length : Slides2.length;\n }\n\n function isEnough() {\n return Slides2.length > options.perPage;\n }\n\n return {\n mount: mount,\n destroy: destroy,\n update: update,\n register: register,\n get: get,\n getIn: getIn,\n getAt: getAt,\n add: add,\n remove: remove$1,\n forEach: forEach$1,\n filter: filter,\n style: style,\n getLength: getLength,\n isEnough: isEnough\n };\n}\n\nfunction Layout(Splide2, Components2, options) {\n var _EventInterface3 = EventInterface(Splide2),\n on = _EventInterface3.on,\n bind = _EventInterface3.bind,\n emit = _EventInterface3.emit;\n\n var Slides = Components2.Slides;\n var resolve = Components2.Direction.resolve;\n var _Components2$Elements2 = Components2.Elements,\n root = _Components2$Elements2.root,\n track = _Components2$Elements2.track,\n list = _Components2$Elements2.list;\n var getAt = Slides.getAt,\n styleSlides = Slides.style;\n var vertical;\n var rootRect;\n var overflow;\n\n function mount() {\n init();\n bind(window, \"resize load\", Throttle(apply(emit, EVENT_RESIZE)));\n on([EVENT_UPDATED, EVENT_REFRESH], init);\n on(EVENT_RESIZE, resize);\n }\n\n function init() {\n vertical = options.direction === TTB;\n style(root, \"maxWidth\", unit(options.width));\n style(track, resolve(\"paddingLeft\"), cssPadding(false));\n style(track, resolve(\"paddingRight\"), cssPadding(true));\n resize(true);\n }\n\n function resize(force) {\n var newRect = rect(root);\n\n if (force || rootRect.width !== newRect.width || rootRect.height !== newRect.height) {\n style(track, \"height\", cssTrackHeight());\n styleSlides(resolve(\"marginRight\"), unit(options.gap));\n styleSlides(\"width\", cssSlideWidth());\n styleSlides(\"height\", cssSlideHeight(), true);\n rootRect = newRect;\n emit(EVENT_RESIZED);\n\n if (overflow !== (overflow = isOverflow())) {\n toggleClass(root, CLASS_OVERFLOW, overflow);\n emit(EVENT_OVERFLOW, overflow);\n }\n }\n }\n\n function cssPadding(right) {\n var padding = options.padding;\n var prop = resolve(right ? \"right\" : \"left\");\n return padding && unit(padding[prop] || (isObject(padding) ? 0 : padding)) || \"0px\";\n }\n\n function cssTrackHeight() {\n var height = \"\";\n\n if (vertical) {\n height = cssHeight();\n assert(height, \"height or heightRatio is missing.\");\n height = \"calc(\" + height + \" - \" + cssPadding(false) + \" - \" + cssPadding(true) + \")\";\n }\n\n return height;\n }\n\n function cssHeight() {\n return unit(options.height || rect(list).width * options.heightRatio);\n }\n\n function cssSlideWidth() {\n return options.autoWidth ? null : unit(options.fixedWidth) || (vertical ? \"\" : cssSlideSize());\n }\n\n function cssSlideHeight() {\n return unit(options.fixedHeight) || (vertical ? options.autoHeight ? null : cssSlideSize() : cssHeight());\n }\n\n function cssSlideSize() {\n var gap = unit(options.gap);\n return \"calc((100%\" + (gap && \" + \" + gap) + \")/\" + (options.perPage || 1) + (gap && \" - \" + gap) + \")\";\n }\n\n function listSize() {\n return rect(list)[resolve(\"width\")];\n }\n\n function slideSize(index, withoutGap) {\n var Slide = getAt(index || 0);\n return Slide ? rect(Slide.slide)[resolve(\"width\")] + (withoutGap ? 0 : getGap()) : 0;\n }\n\n function totalSize(index, withoutGap) {\n var Slide = getAt(index);\n\n if (Slide) {\n var right = rect(Slide.slide)[resolve(\"right\")];\n var left = rect(list)[resolve(\"left\")];\n return abs(right - left) + (withoutGap ? 0 : getGap());\n }\n\n return 0;\n }\n\n function sliderSize(withoutGap) {\n return totalSize(Splide2.length - 1) - totalSize(0) + slideSize(0, withoutGap);\n }\n\n function getGap() {\n var Slide = getAt(0);\n return Slide && parseFloat(style(Slide.slide, resolve(\"marginRight\"))) || 0;\n }\n\n function getPadding(right) {\n return parseFloat(style(track, resolve(\"padding\" + (right ? \"Right\" : \"Left\")))) || 0;\n }\n\n function isOverflow() {\n return Splide2.is(FADE) || sliderSize(true) > listSize();\n }\n\n return {\n mount: mount,\n resize: resize,\n listSize: listSize,\n slideSize: slideSize,\n sliderSize: sliderSize,\n totalSize: totalSize,\n getPadding: getPadding,\n isOverflow: isOverflow\n };\n}\n\nvar MULTIPLIER = 2;\n\nfunction Clones(Splide2, Components2, options) {\n var event = EventInterface(Splide2);\n var on = event.on;\n var Elements = Components2.Elements,\n Slides = Components2.Slides;\n var resolve = Components2.Direction.resolve;\n var clones = [];\n var cloneCount;\n\n function mount() {\n on(EVENT_REFRESH, remount);\n on([EVENT_UPDATED, EVENT_RESIZE], observe);\n\n if (cloneCount = computeCloneCount()) {\n generate(cloneCount);\n Components2.Layout.resize(true);\n }\n }\n\n function remount() {\n destroy();\n mount();\n }\n\n function destroy() {\n remove(clones);\n empty(clones);\n event.destroy();\n }\n\n function observe() {\n var count = computeCloneCount();\n\n if (cloneCount !== count) {\n if (cloneCount < count || !count) {\n event.emit(EVENT_REFRESH);\n }\n }\n }\n\n function generate(count) {\n var slides = Slides.get().slice();\n var length = slides.length;\n\n if (length) {\n while (slides.length < count) {\n push(slides, slides);\n }\n\n push(slides.slice(-count), slides.slice(0, count)).forEach(function (Slide, index) {\n var isHead = index < count;\n var clone = cloneDeep(Slide.slide, index);\n isHead ? before(clone, slides[0].slide) : append(Elements.list, clone);\n push(clones, clone);\n Slides.register(clone, index - count + (isHead ? 0 : length), Slide.index);\n });\n }\n }\n\n function cloneDeep(elm, index) {\n var clone = elm.cloneNode(true);\n addClass(clone, options.classes.clone);\n clone.id = Splide2.root.id + \"-clone\" + pad(index + 1);\n return clone;\n }\n\n function computeCloneCount() {\n var clones2 = options.clones;\n\n if (!Splide2.is(LOOP)) {\n clones2 = 0;\n } else if (isUndefined(clones2)) {\n var fixedSize = options[resolve(\"fixedWidth\")] && Components2.Layout.slideSize(0);\n var fixedCount = fixedSize && ceil(rect(Elements.track)[resolve(\"width\")] / fixedSize);\n clones2 = fixedCount || options[resolve(\"autoWidth\")] && Splide2.length || options.perPage * MULTIPLIER;\n }\n\n return clones2;\n }\n\n return {\n mount: mount,\n destroy: destroy\n };\n}\n\nfunction Move(Splide2, Components2, options) {\n var _EventInterface4 = EventInterface(Splide2),\n on = _EventInterface4.on,\n emit = _EventInterface4.emit;\n\n var set = Splide2.state.set;\n var _Components2$Layout = Components2.Layout,\n slideSize = _Components2$Layout.slideSize,\n getPadding = _Components2$Layout.getPadding,\n totalSize = _Components2$Layout.totalSize,\n listSize = _Components2$Layout.listSize,\n sliderSize = _Components2$Layout.sliderSize;\n var _Components2$Directio = Components2.Direction,\n resolve = _Components2$Directio.resolve,\n orient = _Components2$Directio.orient;\n var _Components2$Elements3 = Components2.Elements,\n list = _Components2$Elements3.list,\n track = _Components2$Elements3.track;\n var Transition;\n\n function mount() {\n Transition = Components2.Transition;\n on([EVENT_MOUNTED, EVENT_RESIZED, EVENT_UPDATED, EVENT_REFRESH], reposition);\n }\n\n function reposition() {\n if (!Components2.Controller.isBusy()) {\n Components2.Scroll.cancel();\n jump(Splide2.index);\n Components2.Slides.update();\n }\n }\n\n function move(dest, index, prev, callback) {\n if (dest !== index && canShift(dest > prev)) {\n cancel();\n translate(shift(getPosition(), dest > prev), true);\n }\n\n set(MOVING);\n emit(EVENT_MOVE, index, prev, dest);\n Transition.start(index, function () {\n set(IDLE);\n emit(EVENT_MOVED, index, prev, dest);\n callback && callback();\n });\n }\n\n function jump(index) {\n translate(toPosition(index, true));\n }\n\n function translate(position, preventLoop) {\n if (!Splide2.is(FADE)) {\n var destination = preventLoop ? position : loop(position);\n style(list, \"transform\", \"translate\" + resolve(\"X\") + \"(\" + destination + \"px)\");\n position !== destination && emit(EVENT_SHIFTED);\n }\n }\n\n function loop(position) {\n if (Splide2.is(LOOP)) {\n var index = toIndex(position);\n var exceededMax = index > Components2.Controller.getEnd();\n var exceededMin = index < 0;\n\n if (exceededMin || exceededMax) {\n position = shift(position, exceededMax);\n }\n }\n\n return position;\n }\n\n function shift(position, backwards) {\n var excess = position - getLimit(backwards);\n var size = sliderSize();\n position -= orient(size * (ceil(abs(excess) / size) || 1)) * (backwards ? 1 : -1);\n return position;\n }\n\n function cancel() {\n translate(getPosition(), true);\n Transition.cancel();\n }\n\n function toIndex(position) {\n var Slides = Components2.Slides.get();\n var index = 0;\n var minDistance = Infinity;\n\n for (var i = 0; i < Slides.length; i++) {\n var slideIndex = Slides[i].index;\n var distance = abs(toPosition(slideIndex, true) - position);\n\n if (distance <= minDistance) {\n minDistance = distance;\n index = slideIndex;\n } else {\n break;\n }\n }\n\n return index;\n }\n\n function toPosition(index, trimming) {\n var position = orient(totalSize(index - 1) - offset(index));\n return trimming ? trim(position) : position;\n }\n\n function getPosition() {\n var left = resolve(\"left\");\n return rect(list)[left] - rect(track)[left] + orient(getPadding(false));\n }\n\n function trim(position) {\n if (options.trimSpace && Splide2.is(SLIDE)) {\n position = clamp(position, 0, orient(sliderSize(true) - listSize()));\n }\n\n return position;\n }\n\n function offset(index) {\n var focus = options.focus;\n return focus === \"center\" ? (listSize() - slideSize(index, true)) / 2 : +focus * slideSize(index) || 0;\n }\n\n function getLimit(max) {\n return toPosition(max ? Components2.Controller.getEnd() : 0, !!options.trimSpace);\n }\n\n function canShift(backwards) {\n var shifted = orient(shift(getPosition(), backwards));\n return backwards ? shifted >= 0 : shifted <= list[resolve(\"scrollWidth\")] - rect(track)[resolve(\"width\")];\n }\n\n function exceededLimit(max, position) {\n position = isUndefined(position) ? getPosition() : position;\n var exceededMin = max !== true && orient(position) < orient(getLimit(false));\n var exceededMax = max !== false && orient(position) > orient(getLimit(true));\n return exceededMin || exceededMax;\n }\n\n return {\n mount: mount,\n move: move,\n jump: jump,\n translate: translate,\n shift: shift,\n cancel: cancel,\n toIndex: toIndex,\n toPosition: toPosition,\n getPosition: getPosition,\n getLimit: getLimit,\n exceededLimit: exceededLimit,\n reposition: reposition\n };\n}\n\nfunction Controller(Splide2, Components2, options) {\n var _EventInterface5 = EventInterface(Splide2),\n on = _EventInterface5.on,\n emit = _EventInterface5.emit;\n\n var Move = Components2.Move;\n var getPosition = Move.getPosition,\n getLimit = Move.getLimit,\n toPosition = Move.toPosition;\n var _Components2$Slides = Components2.Slides,\n isEnough = _Components2$Slides.isEnough,\n getLength = _Components2$Slides.getLength;\n var omitEnd = options.omitEnd;\n var isLoop = Splide2.is(LOOP);\n var isSlide = Splide2.is(SLIDE);\n var getNext = apply(getAdjacent, false);\n var getPrev = apply(getAdjacent, true);\n var currIndex = options.start || 0;\n var endIndex;\n var prevIndex = currIndex;\n var slideCount;\n var perMove;\n var perPage;\n\n function mount() {\n init();\n on([EVENT_UPDATED, EVENT_REFRESH, EVENT_END_INDEX_CHANGED], init);\n on(EVENT_RESIZED, onResized);\n }\n\n function init() {\n slideCount = getLength(true);\n perMove = options.perMove;\n perPage = options.perPage;\n endIndex = getEnd();\n var index = clamp(currIndex, 0, omitEnd ? endIndex : slideCount - 1);\n\n if (index !== currIndex) {\n currIndex = index;\n Move.reposition();\n }\n }\n\n function onResized() {\n if (endIndex !== getEnd()) {\n emit(EVENT_END_INDEX_CHANGED);\n }\n }\n\n function go(control, allowSameIndex, callback) {\n if (!isBusy()) {\n var dest = parse(control);\n var index = loop(dest);\n\n if (index > -1 && (allowSameIndex || index !== currIndex)) {\n setIndex(index);\n Move.move(dest, index, prevIndex, callback);\n }\n }\n }\n\n function scroll(destination, duration, snap, callback) {\n Components2.Scroll.scroll(destination, duration, snap, function () {\n var index = loop(Move.toIndex(getPosition()));\n setIndex(omitEnd ? min(index, endIndex) : index);\n callback && callback();\n });\n }\n\n function parse(control) {\n var index = currIndex;\n\n if (isString(control)) {\n var _ref = control.match(/([+\\-<>])(\\d+)?/) || [],\n indicator = _ref[1],\n number = _ref[2];\n\n if (indicator === \"+\" || indicator === \"-\") {\n index = computeDestIndex(currIndex + +(\"\" + indicator + (+number || 1)), currIndex);\n } else if (indicator === \">\") {\n index = number ? toIndex(+number) : getNext(true);\n } else if (indicator === \"<\") {\n index = getPrev(true);\n }\n } else {\n index = isLoop ? control : clamp(control, 0, endIndex);\n }\n\n return index;\n }\n\n function getAdjacent(prev, destination) {\n var number = perMove || (hasFocus() ? 1 : perPage);\n var dest = computeDestIndex(currIndex + number * (prev ? -1 : 1), currIndex, !(perMove || hasFocus()));\n\n if (dest === -1 && isSlide) {\n if (!approximatelyEqual(getPosition(), getLimit(!prev), 1)) {\n return prev ? 0 : endIndex;\n }\n }\n\n return destination ? dest : loop(dest);\n }\n\n function computeDestIndex(dest, from, snapPage) {\n if (isEnough() || hasFocus()) {\n var index = computeMovableDestIndex(dest);\n\n if (index !== dest) {\n from = dest;\n dest = index;\n snapPage = false;\n }\n\n if (dest < 0 || dest > endIndex) {\n if (!perMove && (between(0, dest, from, true) || between(endIndex, from, dest, true))) {\n dest = toIndex(toPage(dest));\n } else {\n if (isLoop) {\n dest = snapPage ? dest < 0 ? -(slideCount % perPage || perPage) : slideCount : dest;\n } else if (options.rewind) {\n dest = dest < 0 ? endIndex : 0;\n } else {\n dest = -1;\n }\n }\n } else {\n if (snapPage && dest !== from) {\n dest = toIndex(toPage(from) + (dest < from ? -1 : 1));\n }\n }\n } else {\n dest = -1;\n }\n\n return dest;\n }\n\n function computeMovableDestIndex(dest) {\n if (isSlide && options.trimSpace === \"move\" && dest !== currIndex) {\n var position = getPosition();\n\n while (position === toPosition(dest, true) && between(dest, 0, Splide2.length - 1, !options.rewind)) {\n dest < currIndex ? --dest : ++dest;\n }\n }\n\n return dest;\n }\n\n function loop(index) {\n return isLoop ? (index + slideCount) % slideCount || 0 : index;\n }\n\n function getEnd() {\n var end = slideCount - (hasFocus() || isLoop && perMove ? 1 : perPage);\n\n while (omitEnd && end-- > 0) {\n if (toPosition(slideCount - 1, true) !== toPosition(end, true)) {\n end++;\n break;\n }\n }\n\n return clamp(end, 0, slideCount - 1);\n }\n\n function toIndex(page) {\n return clamp(hasFocus() ? page : perPage * page, 0, endIndex);\n }\n\n function toPage(index) {\n return hasFocus() ? min(index, endIndex) : floor((index >= endIndex ? slideCount - 1 : index) / perPage);\n }\n\n function toDest(destination) {\n var closest = Move.toIndex(destination);\n return isSlide ? clamp(closest, 0, endIndex) : closest;\n }\n\n function setIndex(index) {\n if (index !== currIndex) {\n prevIndex = currIndex;\n currIndex = index;\n }\n }\n\n function getIndex(prev) {\n return prev ? prevIndex : currIndex;\n }\n\n function hasFocus() {\n return !isUndefined(options.focus) || options.isNavigation;\n }\n\n function isBusy() {\n return Splide2.state.is([MOVING, SCROLLING]) && !!options.waitForTransition;\n }\n\n return {\n mount: mount,\n go: go,\n scroll: scroll,\n getNext: getNext,\n getPrev: getPrev,\n getAdjacent: getAdjacent,\n getEnd: getEnd,\n setIndex: setIndex,\n getIndex: getIndex,\n toIndex: toIndex,\n toPage: toPage,\n toDest: toDest,\n hasFocus: hasFocus,\n isBusy: isBusy\n };\n}\n\nvar XML_NAME_SPACE = \"http://www.w3.org/2000/svg\";\nvar PATH = \"m15.5 0.932-4.3 4.38 14.5 14.6-14.5 14.5 4.3 4.4 14.6-14.6 4.4-4.3-4.4-4.4-14.6-14.6z\";\nvar SIZE = 40;\n\nfunction Arrows(Splide2, Components2, options) {\n var event = EventInterface(Splide2);\n var on = event.on,\n bind = event.bind,\n emit = event.emit;\n var classes = options.classes,\n i18n = options.i18n;\n var Elements = Components2.Elements,\n Controller = Components2.Controller;\n var placeholder = Elements.arrows,\n track = Elements.track;\n var wrapper = placeholder;\n var prev = Elements.prev;\n var next = Elements.next;\n var created;\n var wrapperClasses;\n var arrows = {};\n\n function mount() {\n init();\n on(EVENT_UPDATED, remount);\n }\n\n function remount() {\n destroy();\n mount();\n }\n\n function init() {\n var enabled = options.arrows;\n\n if (enabled && !(prev && next)) {\n createArrows();\n }\n\n if (prev && next) {\n assign(arrows, {\n prev: prev,\n next: next\n });\n display(wrapper, enabled ? \"\" : \"none\");\n addClass(wrapper, wrapperClasses = CLASS_ARROWS + \"--\" + options.direction);\n\n if (enabled) {\n listen();\n update();\n setAttribute([prev, next], ARIA_CONTROLS, track.id);\n emit(EVENT_ARROWS_MOUNTED, prev, next);\n }\n }\n }\n\n function destroy() {\n event.destroy();\n removeClass(wrapper, wrapperClasses);\n\n if (created) {\n remove(placeholder ? [prev, next] : wrapper);\n prev = next = null;\n } else {\n removeAttribute([prev, next], ALL_ATTRIBUTES);\n }\n }\n\n function listen() {\n on([EVENT_MOUNTED, EVENT_MOVED, EVENT_REFRESH, EVENT_SCROLLED, EVENT_END_INDEX_CHANGED], update);\n bind(next, \"click\", apply(go, \">\"));\n bind(prev, \"click\", apply(go, \"<\"));\n }\n\n function go(control) {\n Controller.go(control, true);\n }\n\n function createArrows() {\n wrapper = placeholder || create(\"div\", classes.arrows);\n prev = createArrow(true);\n next = createArrow(false);\n created = true;\n append(wrapper, [prev, next]);\n !placeholder && before(wrapper, track);\n }\n\n function createArrow(prev2) {\n var arrow = \"<button class=\\\"\" + classes.arrow + \" \" + (prev2 ? classes.prev : classes.next) + \"\\\" type=\\\"button\\\"><svg xmlns=\\\"\" + XML_NAME_SPACE + \"\\\" viewBox=\\\"0 0 \" + SIZE + \" \" + SIZE + \"\\\" width=\\\"\" + SIZE + \"\\\" height=\\\"\" + SIZE + \"\\\" focusable=\\\"false\\\"><path d=\\\"\" + (options.arrowPath || PATH) + \"\\\" />\";\n return parseHtml(arrow);\n }\n\n function update() {\n if (prev && next) {\n var index = Splide2.index;\n var prevIndex = Controller.getPrev();\n var nextIndex = Controller.getNext();\n var prevLabel = prevIndex > -1 && index < prevIndex ? i18n.last : i18n.prev;\n var nextLabel = nextIndex > -1 && index > nextIndex ? i18n.first : i18n.next;\n prev.disabled = prevIndex < 0;\n next.disabled = nextIndex < 0;\n setAttribute(prev, ARIA_LABEL, prevLabel);\n setAttribute(next, ARIA_LABEL, nextLabel);\n emit(EVENT_ARROWS_UPDATED, prev, next, prevIndex, nextIndex);\n }\n }\n\n return {\n arrows: arrows,\n mount: mount,\n destroy: destroy,\n update: update\n };\n}\n\nvar INTERVAL_DATA_ATTRIBUTE = DATA_ATTRIBUTE + \"-interval\";\n\nfunction Autoplay(Splide2, Components2, options) {\n var _EventInterface6 = EventInterface(Splide2),\n on = _EventInterface6.on,\n bind = _EventInterface6.bind,\n emit = _EventInterface6.emit;\n\n var interval = RequestInterval(options.interval, Splide2.go.bind(Splide2, \">\"), onAnimationFrame);\n var isPaused = interval.isPaused;\n var Elements = Components2.Elements,\n _Components2$Elements4 = Components2.Elements,\n root = _Components2$Elements4.root,\n toggle = _Components2$Elements4.toggle;\n var autoplay = options.autoplay;\n var hovered;\n var focused;\n var stopped = autoplay === \"pause\";\n\n function mount() {\n if (autoplay) {\n listen();\n toggle && setAttribute(toggle, ARIA_CONTROLS, Elements.track.id);\n stopped || play();\n update();\n }\n }\n\n function listen() {\n if (options.pauseOnHover) {\n bind(root, \"mouseenter mouseleave\", function (e) {\n hovered = e.type === \"mouseenter\";\n autoToggle();\n });\n }\n\n if (options.pauseOnFocus) {\n bind(root, \"focusin focusout\", function (e) {\n focused = e.type === \"focusin\";\n autoToggle();\n });\n }\n\n if (toggle) {\n bind(toggle, \"click\", function () {\n stopped ? play() : pause(true);\n });\n }\n\n on([EVENT_MOVE, EVENT_SCROLL, EVENT_REFRESH], interval.rewind);\n on(EVENT_MOVE, onMove);\n }\n\n function play() {\n if (isPaused() && Components2.Slides.isEnough()) {\n interval.start(!options.resetProgress);\n focused = hovered = stopped = false;\n update();\n emit(EVENT_AUTOPLAY_PLAY);\n }\n }\n\n function pause(stop) {\n if (stop === void 0) {\n stop = true;\n }\n\n stopped = !!stop;\n update();\n\n if (!isPaused()) {\n interval.pause();\n emit(EVENT_AUTOPLAY_PAUSE);\n }\n }\n\n function autoToggle() {\n if (!stopped) {\n hovered || focused ? pause(false) : play();\n }\n }\n\n function update() {\n if (toggle) {\n toggleClass(toggle, CLASS_ACTIVE, !stopped);\n setAttribute(toggle, ARIA_LABEL, options.i18n[stopped ? \"play\" : \"pause\"]);\n }\n }\n\n function onAnimationFrame(rate) {\n var bar = Elements.bar;\n bar && style(bar, \"width\", rate * 100 + \"%\");\n emit(EVENT_AUTOPLAY_PLAYING, rate);\n }\n\n function onMove(index) {\n var Slide = Components2.Slides.getAt(index);\n interval.set(Slide && +getAttribute(Slide.slide, INTERVAL_DATA_ATTRIBUTE) || options.interval);\n }\n\n return {\n mount: mount,\n destroy: interval.cancel,\n play: play,\n pause: pause,\n isPaused: isPaused\n };\n}\n\nfunction Cover(Splide2, Components2, options) {\n var _EventInterface7 = EventInterface(Splide2),\n on = _EventInterface7.on;\n\n function mount() {\n if (options.cover) {\n on(EVENT_LAZYLOAD_LOADED, apply(toggle, true));\n on([EVENT_MOUNTED, EVENT_UPDATED, EVENT_REFRESH], apply(cover, true));\n }\n }\n\n function cover(cover2) {\n Components2.Slides.forEach(function (Slide) {\n var img = child(Slide.container || Slide.slide, \"img\");\n\n if (img && img.src) {\n toggle(cover2, img, Slide);\n }\n });\n }\n\n function toggle(cover2, img, Slide) {\n Slide.style(\"background\", cover2 ? \"center/cover no-repeat url(\\\"\" + img.src + \"\\\")\" : \"\", true);\n display(img, cover2 ? \"none\" : \"\");\n }\n\n return {\n mount: mount,\n destroy: apply(cover, false)\n };\n}\n\nvar BOUNCE_DIFF_THRESHOLD = 10;\nvar BOUNCE_DURATION = 600;\nvar FRICTION_FACTOR = 0.6;\nvar BASE_VELOCITY = 1.5;\nvar MIN_DURATION = 800;\n\nfunction Scroll(Splide2, Components2, options) {\n var _EventInterface8 = EventInterface(Splide2),\n on = _EventInterface8.on,\n emit = _EventInterface8.emit;\n\n var set = Splide2.state.set;\n var Move = Components2.Move;\n var getPosition = Move.getPosition,\n getLimit = Move.getLimit,\n exceededLimit = Move.exceededLimit,\n translate = Move.translate;\n var isSlide = Splide2.is(SLIDE);\n var interval;\n var callback;\n var friction = 1;\n\n function mount() {\n on(EVENT_MOVE, clear);\n on([EVENT_UPDATED, EVENT_REFRESH], cancel);\n }\n\n function scroll(destination, duration, snap, onScrolled, noConstrain) {\n var from = getPosition();\n clear();\n\n if (snap && (!isSlide || !exceededLimit())) {\n var size = Components2.Layout.sliderSize();\n var offset = sign(destination) * size * floor(abs(destination) / size) || 0;\n destination = Move.toPosition(Components2.Controller.toDest(destination % size)) + offset;\n }\n\n var noDistance = approximatelyEqual(from, destination, 1);\n friction = 1;\n duration = noDistance ? 0 : duration || max(abs(destination - from) / BASE_VELOCITY, MIN_DURATION);\n callback = onScrolled;\n interval = RequestInterval(duration, onEnd, apply(update, from, destination, noConstrain), 1);\n set(SCROLLING);\n emit(EVENT_SCROLL);\n interval.start();\n }\n\n function onEnd() {\n set(IDLE);\n callback && callback();\n emit(EVENT_SCROLLED);\n }\n\n function update(from, to, noConstrain, rate) {\n var position = getPosition();\n var target = from + (to - from) * easing(rate);\n var diff = (target - position) * friction;\n translate(position + diff);\n\n if (isSlide && !noConstrain && exceededLimit()) {\n friction *= FRICTION_FACTOR;\n\n if (abs(diff) < BOUNCE_DIFF_THRESHOLD) {\n scroll(getLimit(exceededLimit(true)), BOUNCE_DURATION, false, callback, true);\n }\n }\n }\n\n function clear() {\n if (interval) {\n interval.cancel();\n }\n }\n\n function cancel() {\n if (interval && !interval.isPaused()) {\n clear();\n onEnd();\n }\n }\n\n function easing(t) {\n var easingFunc = options.easingFunc;\n return easingFunc ? easingFunc(t) : 1 - Math.pow(1 - t, 4);\n }\n\n return {\n mount: mount,\n destroy: clear,\n scroll: scroll,\n cancel: cancel\n };\n}\n\nvar SCROLL_LISTENER_OPTIONS = {\n passive: false,\n capture: true\n};\n\nfunction Drag(Splide2, Components2, options) {\n var _EventInterface9 = EventInterface(Splide2),\n on = _EventInterface9.on,\n emit = _EventInterface9.emit,\n bind = _EventInterface9.bind,\n unbind = _EventInterface9.unbind;\n\n var state = Splide2.state;\n var Move = Components2.Move,\n Scroll = Components2.Scroll,\n Controller = Components2.Controller,\n track = Components2.Elements.track,\n reduce = Components2.Media.reduce;\n var _Components2$Directio2 = Components2.Direction,\n resolve = _Components2$Directio2.resolve,\n orient = _Components2$Directio2.orient;\n var getPosition = Move.getPosition,\n exceededLimit = Move.exceededLimit;\n var basePosition;\n var baseEvent;\n var prevBaseEvent;\n var isFree;\n var dragging;\n var exceeded = false;\n var clickPrevented;\n var disabled;\n var target;\n\n function mount() {\n bind(track, POINTER_MOVE_EVENTS, noop, SCROLL_LISTENER_OPTIONS);\n bind(track, POINTER_UP_EVENTS, noop, SCROLL_LISTENER_OPTIONS);\n bind(track, POINTER_DOWN_EVENTS, onPointerDown, SCROLL_LISTENER_OPTIONS);\n bind(track, \"click\", onClick, {\n capture: true\n });\n bind(track, \"dragstart\", prevent);\n on([EVENT_MOUNTED, EVENT_UPDATED], init);\n }\n\n function init() {\n var drag = options.drag;\n disable(!drag);\n isFree = drag === \"free\";\n }\n\n function onPointerDown(e) {\n clickPrevented = false;\n\n if (!disabled) {\n var isTouch = isTouchEvent(e);\n\n if (isDraggable(e.target) && (isTouch || !e.button)) {\n if (!Controller.isBusy()) {\n target = isTouch ? track : window;\n dragging = state.is([MOVING, SCROLLING]);\n prevBaseEvent = null;\n bind(target, POINTER_MOVE_EVENTS, onPointerMove, SCROLL_LISTENER_OPTIONS);\n bind(target, POINTER_UP_EVENTS, onPointerUp, SCROLL_LISTENER_OPTIONS);\n Move.cancel();\n Scroll.cancel();\n save(e);\n } else {\n prevent(e, true);\n }\n }\n }\n }\n\n function onPointerMove(e) {\n if (!state.is(DRAGGING)) {\n state.set(DRAGGING);\n emit(EVENT_DRAG);\n }\n\n if (e.cancelable) {\n if (dragging) {\n Move.translate(basePosition + constrain(diffCoord(e)));\n var expired = diffTime(e) > LOG_INTERVAL;\n var hasExceeded = exceeded !== (exceeded = exceededLimit());\n\n if (expired || hasExceeded) {\n save(e);\n }\n\n clickPrevented = true;\n emit(EVENT_DRAGGING);\n prevent(e);\n } else if (isSliderDirection(e)) {\n dragging = shouldStart(e);\n prevent(e);\n }\n }\n }\n\n function onPointerUp(e) {\n if (state.is(DRAGGING)) {\n state.set(IDLE);\n emit(EVENT_DRAGGED);\n }\n\n if (dragging) {\n move(e);\n prevent(e);\n }\n\n unbind(target, POINTER_MOVE_EVENTS, onPointerMove);\n unbind(target, POINTER_UP_EVENTS, onPointerUp);\n dragging = false;\n }\n\n function onClick(e) {\n if (!disabled && clickPrevented) {\n prevent(e, true);\n }\n }\n\n function save(e) {\n prevBaseEvent = baseEvent;\n baseEvent = e;\n basePosition = getPosition();\n }\n\n function move(e) {\n var velocity = computeVelocity(e);\n var destination = computeDestination(velocity);\n var rewind = options.rewind && options.rewindByDrag;\n reduce(false);\n\n if (isFree) {\n Controller.scroll(destination, 0, options.snap);\n } else if (Splide2.is(FADE)) {\n Controller.go(orient(sign(velocity)) < 0 ? rewind ? \"<\" : \"-\" : rewind ? \">\" : \"+\");\n } else if (Splide2.is(SLIDE) && exceeded && rewind) {\n Controller.go(exceededLimit(true) ? \">\" : \"<\");\n } else {\n Controller.go(Controller.toDest(destination), true);\n }\n\n reduce(true);\n }\n\n function shouldStart(e) {\n var thresholds = options.dragMinThreshold;\n var isObj = isObject(thresholds);\n var mouse = isObj && thresholds.mouse || 0;\n var touch = (isObj ? thresholds.touch : +thresholds) || 10;\n return abs(diffCoord(e)) > (isTouchEvent(e) ? touch : mouse);\n }\n\n function isSliderDirection(e) {\n return abs(diffCoord(e)) > abs(diffCoord(e, true));\n }\n\n function computeVelocity(e) {\n if (Splide2.is(LOOP) || !exceeded) {\n var time = diffTime(e);\n\n if (time && time < LOG_INTERVAL) {\n return diffCoord(e) / time;\n }\n }\n\n return 0;\n }\n\n function computeDestination(velocity) {\n return getPosition() + sign(velocity) * min(abs(velocity) * (options.flickPower || 600), isFree ? Infinity : Components2.Layout.listSize() * (options.flickMaxPages || 1));\n }\n\n function diffCoord(e, orthogonal) {\n return coordOf(e, orthogonal) - coordOf(getBaseEvent(e), orthogonal);\n }\n\n function diffTime(e) {\n return timeOf(e) - timeOf(getBaseEvent(e));\n }\n\n function getBaseEvent(e) {\n return baseEvent === e && prevBaseEvent || baseEvent;\n }\n\n function coordOf(e, orthogonal) {\n return (isTouchEvent(e) ? e.changedTouches[0] : e)[\"page\" + resolve(orthogonal ? \"Y\" : \"X\")];\n }\n\n function constrain(diff) {\n return diff / (exceeded && Splide2.is(SLIDE) ? FRICTION : 1);\n }\n\n function isDraggable(target2) {\n var noDrag = options.noDrag;\n return !matches(target2, \".\" + CLASS_PAGINATION_PAGE + \", .\" + CLASS_ARROW) && (!noDrag || !matches(target2, noDrag));\n }\n\n function isTouchEvent(e) {\n return typeof TouchEvent !== \"undefined\" && e instanceof TouchEvent;\n }\n\n function isDragging() {\n return dragging;\n }\n\n function disable(value) {\n disabled = value;\n }\n\n return {\n mount: mount,\n disable: disable,\n isDragging: isDragging\n };\n}\n\nvar NORMALIZATION_MAP = {\n Spacebar: \" \",\n Right: ARROW_RIGHT,\n Left: ARROW_LEFT,\n Up: ARROW_UP,\n Down: ARROW_DOWN\n};\n\nfunction normalizeKey(key) {\n key = isString(key) ? key : key.key;\n return NORMALIZATION_MAP[key] || key;\n}\n\nvar KEYBOARD_EVENT = \"keydown\";\n\nfunction Keyboard(Splide2, Components2, options) {\n var _EventInterface10 = EventInterface(Splide2),\n on = _EventInterface10.on,\n bind = _EventInterface10.bind,\n unbind = _EventInterface10.unbind;\n\n var root = Splide2.root;\n var resolve = Components2.Direction.resolve;\n var target;\n var disabled;\n\n function mount() {\n init();\n on(EVENT_UPDATED, destroy);\n on(EVENT_UPDATED, init);\n on(EVENT_MOVE, onMove);\n }\n\n function init() {\n var keyboard = options.keyboard;\n\n if (keyboard) {\n target = keyboard === \"global\" ? window : root;\n bind(target, KEYBOARD_EVENT, onKeydown);\n }\n }\n\n function destroy() {\n unbind(target, KEYBOARD_EVENT);\n }\n\n function disable(value) {\n disabled = value;\n }\n\n function onMove() {\n var _disabled = disabled;\n disabled = true;\n nextTick(function () {\n disabled = _disabled;\n });\n }\n\n function onKeydown(e) {\n if (!disabled) {\n var key = normalizeKey(e);\n\n if (key === resolve(ARROW_LEFT)) {\n Splide2.go(\"<\");\n } else if (key === resolve(ARROW_RIGHT)) {\n Splide2.go(\">\");\n }\n }\n }\n\n return {\n mount: mount,\n destroy: destroy,\n disable: disable\n };\n}\n\nvar SRC_DATA_ATTRIBUTE = DATA_ATTRIBUTE + \"-lazy\";\nvar SRCSET_DATA_ATTRIBUTE = SRC_DATA_ATTRIBUTE + \"-srcset\";\nvar IMAGE_SELECTOR = \"[\" + SRC_DATA_ATTRIBUTE + \"], [\" + SRCSET_DATA_ATTRIBUTE + \"]\";\n\nfunction LazyLoad(Splide2, Components2, options) {\n var _EventInterface11 = EventInterface(Splide2),\n on = _EventInterface11.on,\n off = _EventInterface11.off,\n bind = _EventInterface11.bind,\n emit = _EventInterface11.emit;\n\n var isSequential = options.lazyLoad === \"sequential\";\n var events = [EVENT_MOVED, EVENT_SCROLLED];\n var entries = [];\n\n function mount() {\n if (options.lazyLoad) {\n init();\n on(EVENT_REFRESH, init);\n }\n }\n\n function init() {\n empty(entries);\n register();\n\n if (isSequential) {\n loadNext();\n } else {\n off(events);\n on(events, check);\n check();\n }\n }\n\n function register() {\n Components2.Slides.forEach(function (Slide) {\n queryAll(Slide.slide, IMAGE_SELECTOR).forEach(function (img) {\n var src = getAttribute(img, SRC_DATA_ATTRIBUTE);\n var srcset = getAttribute(img, SRCSET_DATA_ATTRIBUTE);\n\n if (src !== img.src || srcset !== img.srcset) {\n var className = options.classes.spinner;\n var parent = img.parentElement;\n var spinner = child(parent, \".\" + className) || create(\"span\", className, parent);\n entries.push([img, Slide, spinner]);\n img.src || display(img, \"none\");\n }\n });\n });\n }\n\n function check() {\n entries = entries.filter(function (data) {\n var distance = options.perPage * ((options.preloadPages || 1) + 1) - 1;\n return data[1].isWithin(Splide2.index, distance) ? load(data) : true;\n });\n entries.length || off(events);\n }\n\n function load(data) {\n var img = data[0];\n addClass(data[1].slide, CLASS_LOADING);\n bind(img, \"load error\", apply(onLoad, data));\n setAttribute(img, \"src\", getAttribute(img, SRC_DATA_ATTRIBUTE));\n setAttribute(img, \"srcset\", getAttribute(img, SRCSET_DATA_ATTRIBUTE));\n removeAttribute(img, SRC_DATA_ATTRIBUTE);\n removeAttribute(img, SRCSET_DATA_ATTRIBUTE);\n }\n\n function onLoad(data, e) {\n var img = data[0],\n Slide = data[1];\n removeClass(Slide.slide, CLASS_LOADING);\n\n if (e.type !== \"error\") {\n remove(data[2]);\n display(img, \"\");\n emit(EVENT_LAZYLOAD_LOADED, img, Slide);\n emit(EVENT_RESIZE);\n }\n\n isSequential && loadNext();\n }\n\n function loadNext() {\n entries.length && load(entries.shift());\n }\n\n return {\n mount: mount,\n destroy: apply(empty, entries),\n check: check\n };\n}\n\nfunction Pagination(Splide2, Components2, options) {\n var event = EventInterface(Splide2);\n var on = event.on,\n emit = event.emit,\n bind = event.bind;\n var Slides = Components2.Slides,\n Elements = Components2.Elements,\n Controller = Components2.Controller;\n var hasFocus = Controller.hasFocus,\n getIndex = Controller.getIndex,\n go = Controller.go;\n var resolve = Components2.Direction.resolve;\n var placeholder = Elements.pagination;\n var items = [];\n var list;\n var paginationClasses;\n\n function mount() {\n destroy();\n on([EVENT_UPDATED, EVENT_REFRESH, EVENT_END_INDEX_CHANGED], mount);\n var enabled = options.pagination;\n placeholder && display(placeholder, enabled ? \"\" : \"none\");\n\n if (enabled) {\n on([EVENT_MOVE, EVENT_SCROLL, EVENT_SCROLLED], update);\n createPagination();\n update();\n emit(EVENT_PAGINATION_MOUNTED, {\n list: list,\n items: items\n }, getAt(Splide2.index));\n }\n }\n\n function destroy() {\n if (list) {\n remove(placeholder ? slice(list.children) : list);\n removeClass(list, paginationClasses);\n empty(items);\n list = null;\n }\n\n event.destroy();\n }\n\n function createPagination() {\n var length = Splide2.length;\n var classes = options.classes,\n i18n = options.i18n,\n perPage = options.perPage;\n var max = hasFocus() ? Controller.getEnd() + 1 : ceil(length / perPage);\n list = placeholder || create(\"ul\", classes.pagination, Elements.track.parentElement);\n addClass(list, paginationClasses = CLASS_PAGINATION + \"--\" + getDirection());\n setAttribute(list, ROLE, \"tablist\");\n setAttribute(list, ARIA_LABEL, i18n.select);\n setAttribute(list, ARIA_ORIENTATION, getDirection() === TTB ? \"vertical\" : \"\");\n\n for (var i = 0; i < max; i++) {\n var li = create(\"li\", null, list);\n var button = create(\"button\", {\n class: classes.page,\n type: \"button\"\n }, li);\n var controls = Slides.getIn(i).map(function (Slide) {\n return Slide.slide.id;\n });\n var text = !hasFocus() && perPage > 1 ? i18n.pageX : i18n.slideX;\n bind(button, \"click\", apply(onClick, i));\n\n if (options.paginationKeyboard) {\n bind(button, \"keydown\", apply(onKeydown, i));\n }\n\n setAttribute(li, ROLE, \"presentation\");\n setAttribute(button, ROLE, \"tab\");\n setAttribute(button, ARIA_CONTROLS, controls.join(\" \"));\n setAttribute(button, ARIA_LABEL, format(text, i + 1));\n setAttribute(button, TAB_INDEX, -1);\n items.push({\n li: li,\n button: button,\n page: i\n });\n }\n }\n\n function onClick(page) {\n go(\">\" + page, true);\n }\n\n function onKeydown(page, e) {\n var length = items.length;\n var key = normalizeKey(e);\n var dir = getDirection();\n var nextPage = -1;\n\n if (key === resolve(ARROW_RIGHT, false, dir)) {\n nextPage = ++page % length;\n } else if (key === resolve(ARROW_LEFT, false, dir)) {\n nextPage = (--page + length) % length;\n } else if (key === \"Home\") {\n nextPage = 0;\n } else if (key === \"End\") {\n nextPage = length - 1;\n }\n\n var item = items[nextPage];\n\n if (item) {\n focus(item.button);\n go(\">\" + nextPage);\n prevent(e, true);\n }\n }\n\n function getDirection() {\n return options.paginationDirection || options.direction;\n }\n\n function getAt(index) {\n return items[Controller.toPage(index)];\n }\n\n function update() {\n var prev = getAt(getIndex(true));\n var curr = getAt(getIndex());\n\n if (prev) {\n var button = prev.button;\n removeClass(button, CLASS_ACTIVE);\n removeAttribute(button, ARIA_SELECTED);\n setAttribute(button, TAB_INDEX, -1);\n }\n\n if (curr) {\n var _button = curr.button;\n addClass(_button, CLASS_ACTIVE);\n setAttribute(_button, ARIA_SELECTED, true);\n setAttribute(_button, TAB_INDEX, \"\");\n }\n\n emit(EVENT_PAGINATION_UPDATED, {\n list: list,\n items: items\n }, prev, curr);\n }\n\n return {\n items: items,\n mount: mount,\n destroy: destroy,\n getAt: getAt,\n update: update\n };\n}\n\nvar TRIGGER_KEYS = [\" \", \"Enter\"];\n\nfunction Sync(Splide2, Components2, options) {\n var isNavigation = options.isNavigation,\n slideFocus = options.slideFocus;\n var events = [];\n\n function mount() {\n Splide2.splides.forEach(function (target) {\n if (!target.isParent) {\n sync(Splide2, target.splide);\n sync(target.splide, Splide2);\n }\n });\n\n if (isNavigation) {\n navigate();\n }\n }\n\n function destroy() {\n events.forEach(function (event) {\n event.destroy();\n });\n empty(events);\n }\n\n function remount() {\n destroy();\n mount();\n }\n\n function sync(splide, target) {\n var event = EventInterface(splide);\n event.on(EVENT_MOVE, function (index, prev, dest) {\n target.go(target.is(LOOP) ? dest : index);\n });\n events.push(event);\n }\n\n function navigate() {\n var event = EventInterface(Splide2);\n var on = event.on;\n on(EVENT_CLICK, onClick);\n on(EVENT_SLIDE_KEYDOWN, onKeydown);\n on([EVENT_MOUNTED, EVENT_UPDATED], update);\n events.push(event);\n event.emit(EVENT_NAVIGATION_MOUNTED, Splide2.splides);\n }\n\n function update() {\n setAttribute(Components2.Elements.list, ARIA_ORIENTATION, options.direction === TTB ? \"vertical\" : \"\");\n }\n\n function onClick(Slide) {\n Splide2.go(Slide.index);\n }\n\n function onKeydown(Slide, e) {\n if (includes(TRIGGER_KEYS, normalizeKey(e))) {\n onClick(Slide);\n prevent(e);\n }\n }\n\n return {\n setup: apply(Components2.Media.set, {\n slideFocus: isUndefined(slideFocus) ? isNavigation : slideFocus\n }, true),\n mount: mount,\n destroy: destroy,\n remount: remount\n };\n}\n\nfunction Wheel(Splide2, Components2, options) {\n var _EventInterface12 = EventInterface(Splide2),\n bind = _EventInterface12.bind;\n\n var lastTime = 0;\n\n function mount() {\n if (options.wheel) {\n bind(Components2.Elements.track, \"wheel\", onWheel, SCROLL_LISTENER_OPTIONS);\n }\n }\n\n function onWheel(e) {\n if (e.cancelable) {\n var deltaY = e.deltaY;\n var backwards = deltaY < 0;\n var timeStamp = timeOf(e);\n\n var _min = options.wheelMinThreshold || 0;\n\n var sleep = options.wheelSleep || 0;\n\n if (abs(deltaY) > _min && timeStamp - lastTime > sleep) {\n Splide2.go(backwards ? \"<\" : \">\");\n lastTime = timeStamp;\n }\n\n shouldPrevent(backwards) && prevent(e);\n }\n }\n\n function shouldPrevent(backwards) {\n return !options.releaseWheel || Splide2.state.is(MOVING) || Components2.Controller.getAdjacent(backwards) !== -1;\n }\n\n return {\n mount: mount\n };\n}\n\nvar SR_REMOVAL_DELAY = 90;\n\nfunction Live(Splide2, Components2, options) {\n var _EventInterface13 = EventInterface(Splide2),\n on = _EventInterface13.on;\n\n var track = Components2.Elements.track;\n var enabled = options.live && !options.isNavigation;\n var sr = create(\"span\", CLASS_SR);\n var interval = RequestInterval(SR_REMOVAL_DELAY, apply(toggle, false));\n\n function mount() {\n if (enabled) {\n disable(!Components2.Autoplay.isPaused());\n setAttribute(track, ARIA_ATOMIC, true);\n sr.textContent = \"\\u2026\";\n on(EVENT_AUTOPLAY_PLAY, apply(disable, true));\n on(EVENT_AUTOPLAY_PAUSE, apply(disable, false));\n on([EVENT_MOVED, EVENT_SCROLLED], apply(toggle, true));\n }\n }\n\n function toggle(active) {\n setAttribute(track, ARIA_BUSY, active);\n\n if (active) {\n append(track, sr);\n interval.start();\n } else {\n remove(sr);\n interval.cancel();\n }\n }\n\n function destroy() {\n removeAttribute(track, [ARIA_LIVE, ARIA_ATOMIC, ARIA_BUSY]);\n remove(sr);\n }\n\n function disable(disabled) {\n if (enabled) {\n setAttribute(track, ARIA_LIVE, disabled ? \"off\" : \"polite\");\n }\n }\n\n return {\n mount: mount,\n disable: disable,\n destroy: destroy\n };\n}\n\nvar ComponentConstructors = /*#__PURE__*/Object.freeze({\n __proto__: null,\n Media: Media,\n Direction: Direction,\n Elements: Elements,\n Slides: Slides,\n Layout: Layout,\n Clones: Clones,\n Move: Move,\n Controller: Controller,\n Arrows: Arrows,\n Autoplay: Autoplay,\n Cover: Cover,\n Scroll: Scroll,\n Drag: Drag,\n Keyboard: Keyboard,\n LazyLoad: LazyLoad,\n Pagination: Pagination,\n Sync: Sync,\n Wheel: Wheel,\n Live: Live\n});\nvar I18N = {\n prev: \"Previous slide\",\n next: \"Next slide\",\n first: \"Go to first slide\",\n last: \"Go to last slide\",\n slideX: \"Go to slide %s\",\n pageX: \"Go to page %s\",\n play: \"Start autoplay\",\n pause: \"Pause autoplay\",\n carousel: \"carousel\",\n slide: \"slide\",\n select: \"Select a slide to show\",\n slideLabel: \"%s of %s\"\n};\nvar DEFAULTS = {\n type: \"slide\",\n role: \"region\",\n speed: 400,\n perPage: 1,\n cloneStatus: true,\n arrows: true,\n pagination: true,\n paginationKeyboard: true,\n interval: 5e3,\n pauseOnHover: true,\n pauseOnFocus: true,\n resetProgress: true,\n easing: \"cubic-bezier(0.25, 1, 0.5, 1)\",\n drag: true,\n direction: \"ltr\",\n trimSpace: true,\n focusableNodes: \"a, button, textarea, input, select, iframe\",\n live: true,\n classes: CLASSES,\n i18n: I18N,\n reducedMotion: {\n speed: 0,\n rewindSpeed: 0,\n autoplay: \"pause\"\n }\n};\n\nfunction Fade(Splide2, Components2, options) {\n var Slides = Components2.Slides;\n\n function mount() {\n EventInterface(Splide2).on([EVENT_MOUNTED, EVENT_REFRESH], init);\n }\n\n function init() {\n Slides.forEach(function (Slide) {\n Slide.style(\"transform\", \"translateX(-\" + 100 * Slide.index + \"%)\");\n });\n }\n\n function start(index, done) {\n Slides.style(\"transition\", \"opacity \" + options.speed + \"ms \" + options.easing);\n nextTick(done);\n }\n\n return {\n mount: mount,\n start: start,\n cancel: noop\n };\n}\n\nfunction Slide(Splide2, Components2, options) {\n var Move = Components2.Move,\n Controller = Components2.Controller,\n Scroll = Components2.Scroll;\n var list = Components2.Elements.list;\n var transition = apply(style, list, \"transition\");\n var endCallback;\n\n function mount() {\n EventInterface(Splide2).bind(list, \"transitionend\", function (e) {\n if (e.target === list && endCallback) {\n cancel();\n endCallback();\n }\n });\n }\n\n function start(index, done) {\n var destination = Move.toPosition(index, true);\n var position = Move.getPosition();\n var speed = getSpeed(index);\n\n if (abs(destination - position) >= 1 && speed >= 1) {\n if (options.useScroll) {\n Scroll.scroll(destination, speed, false, done);\n } else {\n transition(\"transform \" + speed + \"ms \" + options.easing);\n Move.translate(destination, true);\n endCallback = done;\n }\n } else {\n Move.jump(index);\n done();\n }\n }\n\n function cancel() {\n transition(\"\");\n Scroll.cancel();\n }\n\n function getSpeed(index) {\n var rewindSpeed = options.rewindSpeed;\n\n if (Splide2.is(SLIDE) && rewindSpeed) {\n var prev = Controller.getIndex(true);\n var end = Controller.getEnd();\n\n if (prev === 0 && index >= end || prev >= end && index === 0) {\n return rewindSpeed;\n }\n }\n\n return options.speed;\n }\n\n return {\n mount: mount,\n start: start,\n cancel: cancel\n };\n}\n\nvar _Splide = /*#__PURE__*/function () {\n function _Splide(target, options) {\n this.event = EventInterface();\n this.Components = {};\n this.state = State(CREATED);\n this.splides = [];\n this._o = {};\n this._E = {};\n var root = isString(target) ? query(document, target) : target;\n assert(root, root + \" is invalid.\");\n this.root = root;\n options = merge({\n label: getAttribute(root, ARIA_LABEL) || \"\",\n labelledby: getAttribute(root, ARIA_LABELLEDBY) || \"\"\n }, DEFAULTS, _Splide.defaults, options || {});\n\n try {\n merge(options, JSON.parse(getAttribute(root, DATA_ATTRIBUTE)));\n } catch (e) {\n assert(false, \"Invalid JSON\");\n }\n\n this._o = Object.create(merge({}, options));\n }\n\n var _proto = _Splide.prototype;\n\n _proto.mount = function mount(Extensions, Transition) {\n var _this = this;\n\n var state = this.state,\n Components2 = this.Components;\n assert(state.is([CREATED, DESTROYED]), \"Already mounted!\");\n state.set(CREATED);\n this._C = Components2;\n this._T = Transition || this._T || (this.is(FADE) ? Fade : Slide);\n this._E = Extensions || this._E;\n var Constructors = assign({}, ComponentConstructors, this._E, {\n Transition: this._T\n });\n forOwn(Constructors, function (Component, key) {\n var component = Component(_this, Components2, _this._o);\n Components2[key] = component;\n component.setup && component.setup();\n });\n forOwn(Components2, function (component) {\n component.mount && component.mount();\n });\n this.emit(EVENT_MOUNTED);\n addClass(this.root, CLASS_INITIALIZED);\n state.set(IDLE);\n this.emit(EVENT_READY);\n return this;\n };\n\n _proto.sync = function sync(splide) {\n this.splides.push({\n splide: splide\n });\n splide.splides.push({\n splide: this,\n isParent: true\n });\n\n if (this.state.is(IDLE)) {\n this._C.Sync.remount();\n\n splide.Components.Sync.remount();\n }\n\n return this;\n };\n\n _proto.go = function go(control) {\n this._C.Controller.go(control);\n\n return this;\n };\n\n _proto.on = function on(events, callback) {\n this.event.on(events, callback);\n return this;\n };\n\n _proto.off = function off(events) {\n this.event.off(events);\n return this;\n };\n\n _proto.emit = function emit(event) {\n var _this$event;\n\n (_this$event = this.event).emit.apply(_this$event, [event].concat(slice(arguments, 1)));\n\n return this;\n };\n\n _proto.add = function add(slides, index) {\n this._C.Slides.add(slides, index);\n\n return this;\n };\n\n _proto.remove = function remove(matcher) {\n this._C.Slides.remove(matcher);\n\n return this;\n };\n\n _proto.is = function is(type) {\n return this._o.type === type;\n };\n\n _proto.refresh = function refresh() {\n this.emit(EVENT_REFRESH);\n return this;\n };\n\n _proto.destroy = function destroy(completely) {\n if (completely === void 0) {\n completely = true;\n }\n\n var event = this.event,\n state = this.state;\n\n if (state.is(CREATED)) {\n EventInterface(this).on(EVENT_READY, this.destroy.bind(this, completely));\n } else {\n forOwn(this._C, function (component) {\n component.destroy && component.destroy(completely);\n }, true);\n event.emit(EVENT_DESTROY);\n event.destroy();\n completely && empty(this.splides);\n state.set(DESTROYED);\n }\n\n return this;\n };\n\n _createClass(_Splide, [{\n key: \"options\",\n get: function get() {\n return this._o;\n },\n set: function set(options) {\n this._C.Media.set(options, true, true);\n }\n }, {\n key: \"length\",\n get: function get() {\n return this._C.Slides.getLength(true);\n }\n }, {\n key: \"index\",\n get: function get() {\n return this._C.Controller.getIndex();\n }\n }]);\n\n return _Splide;\n}();\n\nvar Splide = _Splide;\nSplide.defaults = {};\nSplide.STATES = STATES;\nvar CLASS_RENDERED = \"is-rendered\";\nvar RENDERER_DEFAULT_CONFIG = {\n listTag: \"ul\",\n slideTag: \"li\"\n};\n\nvar Style = /*#__PURE__*/function () {\n function Style(id, options) {\n this.styles = {};\n this.id = id;\n this.options = options;\n }\n\n var _proto2 = Style.prototype;\n\n _proto2.rule = function rule(selector, prop, value, breakpoint) {\n breakpoint = breakpoint || \"default\";\n var selectors = this.styles[breakpoint] = this.styles[breakpoint] || {};\n var styles = selectors[selector] = selectors[selector] || {};\n styles[prop] = value;\n };\n\n _proto2.build = function build() {\n var _this2 = this;\n\n var css = \"\";\n\n if (this.styles.default) {\n css += this.buildSelectors(this.styles.default);\n }\n\n Object.keys(this.styles).sort(function (n, m) {\n return _this2.options.mediaQuery === \"min\" ? +n - +m : +m - +n;\n }).forEach(function (breakpoint) {\n if (breakpoint !== \"default\") {\n css += \"@media screen and (max-width: \" + breakpoint + \"px) {\";\n css += _this2.buildSelectors(_this2.styles[breakpoint]);\n css += \"}\";\n }\n });\n return css;\n };\n\n _proto2.buildSelectors = function buildSelectors(selectors) {\n var _this3 = this;\n\n var css = \"\";\n forOwn(selectors, function (styles, selector) {\n selector = (\"#\" + _this3.id + \" \" + selector).trim();\n css += selector + \" {\";\n forOwn(styles, function (value, prop) {\n if (value || value === 0) {\n css += prop + \": \" + value + \";\";\n }\n });\n css += \"}\";\n });\n return css;\n };\n\n return Style;\n}();\n\nvar SplideRenderer = /*#__PURE__*/function () {\n function SplideRenderer(contents, options, config, defaults) {\n this.slides = [];\n this.options = {};\n this.breakpoints = [];\n merge(DEFAULTS, defaults || {});\n merge(merge(this.options, DEFAULTS), options || {});\n this.contents = contents;\n this.config = assign({}, RENDERER_DEFAULT_CONFIG, config || {});\n this.id = this.config.id || uniqueId(\"splide\");\n this.Style = new Style(this.id, this.options);\n this.Direction = Direction(null, null, this.options);\n assert(this.contents.length, \"Provide at least 1 content.\");\n this.init();\n }\n\n SplideRenderer.clean = function clean(splide) {\n var _EventInterface14 = EventInterface(splide),\n on = _EventInterface14.on;\n\n var root = splide.root;\n var clones = queryAll(root, \".\" + CLASS_CLONE);\n on(EVENT_MOUNTED, function () {\n remove(child(root, \"style\"));\n });\n remove(clones);\n };\n\n var _proto3 = SplideRenderer.prototype;\n\n _proto3.init = function init() {\n this.parseBreakpoints();\n this.initSlides();\n this.registerRootStyles();\n this.registerTrackStyles();\n this.registerSlideStyles();\n this.registerListStyles();\n };\n\n _proto3.initSlides = function initSlides() {\n var _this4 = this;\n\n push(this.slides, this.contents.map(function (content, index) {\n content = isString(content) ? {\n html: content\n } : content;\n content.styles = content.styles || {};\n content.attrs = content.attrs || {};\n\n _this4.cover(content);\n\n var classes = _this4.options.classes.slide + \" \" + (index === 0 ? CLASS_ACTIVE : \"\");\n assign(content.attrs, {\n class: (classes + \" \" + (content.attrs.class || \"\")).trim(),\n style: _this4.buildStyles(content.styles)\n });\n return content;\n }));\n\n if (this.isLoop()) {\n this.generateClones(this.slides);\n }\n };\n\n _proto3.registerRootStyles = function registerRootStyles() {\n var _this5 = this;\n\n this.breakpoints.forEach(function (_ref2) {\n var width = _ref2[0],\n options = _ref2[1];\n\n _this5.Style.rule(\" \", \"max-width\", unit(options.width), width);\n });\n };\n\n _proto3.registerTrackStyles = function registerTrackStyles() {\n var _this6 = this;\n\n var Style2 = this.Style;\n var selector = \".\" + CLASS_TRACK;\n this.breakpoints.forEach(function (_ref3) {\n var width = _ref3[0],\n options = _ref3[1];\n Style2.rule(selector, _this6.resolve(\"paddingLeft\"), _this6.cssPadding(options, false), width);\n Style2.rule(selector, _this6.resolve(\"paddingRight\"), _this6.cssPadding(options, true), width);\n Style2.rule(selector, \"height\", _this6.cssTrackHeight(options), width);\n });\n };\n\n _proto3.registerListStyles = function registerListStyles() {\n var _this7 = this;\n\n var Style2 = this.Style;\n var selector = \".\" + CLASS_LIST;\n this.breakpoints.forEach(function (_ref4) {\n var width = _ref4[0],\n options = _ref4[1];\n Style2.rule(selector, \"transform\", _this7.buildTranslate(options), width);\n\n if (!_this7.cssSlideHeight(options)) {\n Style2.rule(selector, \"aspect-ratio\", _this7.cssAspectRatio(options), width);\n }\n });\n };\n\n _proto3.registerSlideStyles = function registerSlideStyles() {\n var _this8 = this;\n\n var Style2 = this.Style;\n var selector = \".\" + CLASS_SLIDE;\n this.breakpoints.forEach(function (_ref5) {\n var width = _ref5[0],\n options = _ref5[1];\n Style2.rule(selector, \"width\", _this8.cssSlideWidth(options), width);\n Style2.rule(selector, \"height\", _this8.cssSlideHeight(options) || \"100%\", width);\n Style2.rule(selector, _this8.resolve(\"marginRight\"), unit(options.gap) || \"0px\", width);\n Style2.rule(selector + \" > img\", \"display\", options.cover ? \"none\" : \"inline\", width);\n });\n };\n\n _proto3.buildTranslate = function buildTranslate(options) {\n var _this$Direction = this.Direction,\n resolve = _this$Direction.resolve,\n orient = _this$Direction.orient;\n var values = [];\n values.push(this.cssOffsetClones(options));\n values.push(this.cssOffsetGaps(options));\n\n if (this.isCenter(options)) {\n values.push(this.buildCssValue(orient(-50), \"%\"));\n values.push.apply(values, this.cssOffsetCenter(options));\n }\n\n return values.filter(Boolean).map(function (value) {\n return \"translate\" + resolve(\"X\") + \"(\" + value + \")\";\n }).join(\" \");\n };\n\n _proto3.cssOffsetClones = function cssOffsetClones(options) {\n var _this$Direction2 = this.Direction,\n resolve = _this$Direction2.resolve,\n orient = _this$Direction2.orient;\n var cloneCount = this.getCloneCount();\n\n if (this.isFixedWidth(options)) {\n var _this$parseCssValue = this.parseCssValue(options[resolve(\"fixedWidth\")]),\n value = _this$parseCssValue.value,\n unit2 = _this$parseCssValue.unit;\n\n return this.buildCssValue(orient(value) * cloneCount, unit2);\n }\n\n var percent = 100 * cloneCount / options.perPage;\n return orient(percent) + \"%\";\n };\n\n _proto3.cssOffsetCenter = function cssOffsetCenter(options) {\n var _this$Direction3 = this.Direction,\n resolve = _this$Direction3.resolve,\n orient = _this$Direction3.orient;\n\n if (this.isFixedWidth(options)) {\n var _this$parseCssValue2 = this.parseCssValue(options[resolve(\"fixedWidth\")]),\n value = _this$parseCssValue2.value,\n unit2 = _this$parseCssValue2.unit;\n\n return [this.buildCssValue(orient(value / 2), unit2)];\n }\n\n var values = [];\n var perPage = options.perPage,\n gap = options.gap;\n values.push(orient(50 / perPage) + \"%\");\n\n if (gap) {\n var _this$parseCssValue3 = this.parseCssValue(gap),\n _value = _this$parseCssValue3.value,\n _unit = _this$parseCssValue3.unit;\n\n var gapOffset = (_value / perPage - _value) / 2;\n values.push(this.buildCssValue(orient(gapOffset), _unit));\n }\n\n return values;\n };\n\n _proto3.cssOffsetGaps = function cssOffsetGaps(options) {\n var cloneCount = this.getCloneCount();\n\n if (cloneCount && options.gap) {\n var orient = this.Direction.orient;\n\n var _this$parseCssValue4 = this.parseCssValue(options.gap),\n value = _this$parseCssValue4.value,\n unit2 = _this$parseCssValue4.unit;\n\n if (this.isFixedWidth(options)) {\n return this.buildCssValue(orient(value * cloneCount), unit2);\n }\n\n var perPage = options.perPage;\n var gaps = cloneCount / perPage;\n return this.buildCssValue(orient(gaps * value), unit2);\n }\n\n return \"\";\n };\n\n _proto3.resolve = function resolve(prop) {\n return camelToKebab(this.Direction.resolve(prop));\n };\n\n _proto3.cssPadding = function cssPadding(options, right) {\n var padding = options.padding;\n var prop = this.Direction.resolve(right ? \"right\" : \"left\", true);\n return padding && unit(padding[prop] || (isObject(padding) ? 0 : padding)) || \"0px\";\n };\n\n _proto3.cssTrackHeight = function cssTrackHeight(options) {\n var height = \"\";\n\n if (this.isVertical()) {\n height = this.cssHeight(options);\n assert(height, '\"height\" is missing.');\n height = \"calc(\" + height + \" - \" + this.cssPadding(options, false) + \" - \" + this.cssPadding(options, true) + \")\";\n }\n\n return height;\n };\n\n _proto3.cssHeight = function cssHeight(options) {\n return unit(options.height);\n };\n\n _proto3.cssSlideWidth = function cssSlideWidth(options) {\n return options.autoWidth ? \"\" : unit(options.fixedWidth) || (this.isVertical() ? \"\" : this.cssSlideSize(options));\n };\n\n _proto3.cssSlideHeight = function cssSlideHeight(options) {\n return unit(options.fixedHeight) || (this.isVertical() ? options.autoHeight ? \"\" : this.cssSlideSize(options) : this.cssHeight(options));\n };\n\n _proto3.cssSlideSize = function cssSlideSize(options) {\n var gap = unit(options.gap);\n return \"calc((100%\" + (gap && \" + \" + gap) + \")/\" + (options.perPage || 1) + (gap && \" - \" + gap) + \")\";\n };\n\n _proto3.cssAspectRatio = function cssAspectRatio(options) {\n var heightRatio = options.heightRatio;\n return heightRatio ? \"\" + 1 / heightRatio : \"\";\n };\n\n _proto3.buildCssValue = function buildCssValue(value, unit2) {\n return \"\" + value + unit2;\n };\n\n _proto3.parseCssValue = function parseCssValue(value) {\n if (isString(value)) {\n var number = parseFloat(value) || 0;\n var unit2 = value.replace(/\\d*(\\.\\d*)?/, \"\") || \"px\";\n return {\n value: number,\n unit: unit2\n };\n }\n\n return {\n value: value,\n unit: \"px\"\n };\n };\n\n _proto3.parseBreakpoints = function parseBreakpoints() {\n var _this9 = this;\n\n var breakpoints = this.options.breakpoints;\n this.breakpoints.push([\"default\", this.options]);\n\n if (breakpoints) {\n forOwn(breakpoints, function (options, width) {\n _this9.breakpoints.push([width, merge(merge({}, _this9.options), options)]);\n });\n }\n };\n\n _proto3.isFixedWidth = function isFixedWidth(options) {\n return !!options[this.Direction.resolve(\"fixedWidth\")];\n };\n\n _proto3.isLoop = function isLoop() {\n return this.options.type === LOOP;\n };\n\n _proto3.isCenter = function isCenter(options) {\n if (options.focus === \"center\") {\n if (this.isLoop()) {\n return true;\n }\n\n if (this.options.type === SLIDE) {\n return !this.options.trimSpace;\n }\n }\n\n return false;\n };\n\n _proto3.isVertical = function isVertical() {\n return this.options.direction === TTB;\n };\n\n _proto3.buildClasses = function buildClasses() {\n var options = this.options;\n return [CLASS_ROOT, CLASS_ROOT + \"--\" + options.type, CLASS_ROOT + \"--\" + options.direction, options.drag && CLASS_ROOT + \"--draggable\", options.isNavigation && CLASS_ROOT + \"--nav\", CLASS_ACTIVE, !this.config.hidden && CLASS_RENDERED].filter(Boolean).join(\" \");\n };\n\n _proto3.buildAttrs = function buildAttrs(attrs) {\n var attr = \"\";\n forOwn(attrs, function (value, key) {\n attr += value ? \" \" + camelToKebab(key) + \"=\\\"\" + value + \"\\\"\" : \"\";\n });\n return attr.trim();\n };\n\n _proto3.buildStyles = function buildStyles(styles) {\n var style = \"\";\n forOwn(styles, function (value, key) {\n style += \" \" + camelToKebab(key) + \":\" + value + \";\";\n });\n return style.trim();\n };\n\n _proto3.renderSlides = function renderSlides() {\n var _this10 = this;\n\n var tag = this.config.slideTag;\n return this.slides.map(function (content) {\n return \"<\" + tag + \" \" + _this10.buildAttrs(content.attrs) + \">\" + (content.html || \"\") + \"</\" + tag + \">\";\n }).join(\"\");\n };\n\n _proto3.cover = function cover(content) {\n var styles = content.styles,\n _content$html = content.html,\n html = _content$html === void 0 ? \"\" : _content$html;\n\n if (this.options.cover && !this.options.lazyLoad) {\n var src = html.match(/<img.*?src\\s*=\\s*(['\"])(.+?)\\1.*?>/);\n\n if (src && src[2]) {\n styles.background = \"center/cover no-repeat url('\" + src[2] + \"')\";\n }\n }\n };\n\n _proto3.generateClones = function generateClones(contents) {\n var classes = this.options.classes;\n var count = this.getCloneCount();\n var slides = contents.slice();\n\n while (slides.length < count) {\n push(slides, slides);\n }\n\n push(slides.slice(-count).reverse(), slides.slice(0, count)).forEach(function (content, index) {\n var attrs = assign({}, content.attrs, {\n class: content.attrs.class + \" \" + classes.clone\n });\n var clone = assign({}, content, {\n attrs: attrs\n });\n index < count ? contents.unshift(clone) : contents.push(clone);\n });\n };\n\n _proto3.getCloneCount = function getCloneCount() {\n if (this.isLoop()) {\n var options = this.options;\n\n if (options.clones) {\n return options.clones;\n }\n\n var perPage = max.apply(void 0, this.breakpoints.map(function (_ref6) {\n var options2 = _ref6[1];\n return options2.perPage;\n }));\n return perPage * ((options.flickMaxPages || 1) + 1);\n }\n\n return 0;\n };\n\n _proto3.renderArrows = function renderArrows() {\n var html = \"\";\n html += \"<div class=\\\"\" + this.options.classes.arrows + \"\\\">\";\n html += this.renderArrow(true);\n html += this.renderArrow(false);\n html += \"</div>\";\n return html;\n };\n\n _proto3.renderArrow = function renderArrow(prev) {\n var _this$options = this.options,\n classes = _this$options.classes,\n i18n = _this$options.i18n;\n var attrs = {\n class: classes.arrow + \" \" + (prev ? classes.prev : classes.next),\n type: \"button\",\n ariaLabel: prev ? i18n.prev : i18n.next\n };\n return \"<button \" + this.buildAttrs(attrs) + \"><svg xmlns=\\\"\" + XML_NAME_SPACE + \"\\\" viewBox=\\\"0 0 \" + SIZE + \" \" + SIZE + \"\\\" width=\\\"\" + SIZE + \"\\\" height=\\\"\" + SIZE + \"\\\"><path d=\\\"\" + (this.options.arrowPath || PATH) + \"\\\" /></svg></button>\";\n };\n\n _proto3.html = function html() {\n var _this$config = this.config,\n rootClass = _this$config.rootClass,\n listTag = _this$config.listTag,\n arrows = _this$config.arrows,\n beforeTrack = _this$config.beforeTrack,\n afterTrack = _this$config.afterTrack,\n slider = _this$config.slider,\n beforeSlider = _this$config.beforeSlider,\n afterSlider = _this$config.afterSlider;\n var html = \"\";\n html += \"<div id=\\\"\" + this.id + \"\\\" class=\\\"\" + this.buildClasses() + \" \" + (rootClass || \"\") + \"\\\">\";\n html += \"<style>\" + this.Style.build() + \"</style>\";\n\n if (slider) {\n html += beforeSlider || \"\";\n html += \"<div class=\\\"splide__slider\\\">\";\n }\n\n html += beforeTrack || \"\";\n\n if (arrows) {\n html += this.renderArrows();\n }\n\n html += \"<div class=\\\"splide__track\\\">\";\n html += \"<\" + listTag + \" class=\\\"splide__list\\\">\";\n html += this.renderSlides();\n html += \"</\" + listTag + \">\";\n html += \"</div>\";\n html += afterTrack || \"\";\n\n if (slider) {\n html += \"</div>\";\n html += afterSlider || \"\";\n }\n\n html += \"</div>\";\n return html;\n };\n\n return SplideRenderer;\n}();\n\nexport { CLASSES, CLASS_ACTIVE, CLASS_ARROW, CLASS_ARROWS, CLASS_ARROW_NEXT, CLASS_ARROW_PREV, CLASS_CLONE, CLASS_CONTAINER, CLASS_FOCUS_IN, CLASS_INITIALIZED, CLASS_LIST, CLASS_LOADING, CLASS_NEXT, CLASS_OVERFLOW, CLASS_PAGINATION, CLASS_PAGINATION_PAGE, CLASS_PREV, CLASS_PROGRESS, CLASS_PROGRESS_BAR, CLASS_ROOT, CLASS_SLIDE, CLASS_SPINNER, CLASS_SR, CLASS_TOGGLE, CLASS_TOGGLE_PAUSE, CLASS_TOGGLE_PLAY, CLASS_TRACK, CLASS_VISIBLE, DEFAULTS, EVENT_ACTIVE, EVENT_ARROWS_MOUNTED, EVENT_ARROWS_UPDATED, EVENT_AUTOPLAY_PAUSE, EVENT_AUTOPLAY_PLAY, EVENT_AUTOPLAY_PLAYING, EVENT_CLICK, EVENT_DESTROY, EVENT_DRAG, EVENT_DRAGGED, EVENT_DRAGGING, EVENT_END_INDEX_CHANGED, EVENT_HIDDEN, EVENT_INACTIVE, EVENT_LAZYLOAD_LOADED, EVENT_MOUNTED, EVENT_MOVE, EVENT_MOVED, EVENT_NAVIGATION_MOUNTED, EVENT_OVERFLOW, EVENT_PAGINATION_MOUNTED, EVENT_PAGINATION_UPDATED, EVENT_READY, EVENT_REFRESH, EVENT_RESIZE, EVENT_RESIZED, EVENT_SCROLL, EVENT_SCROLLED, EVENT_SHIFTED, EVENT_SLIDE_KEYDOWN, EVENT_UPDATED, EVENT_VISIBLE, EventBinder, EventInterface, FADE, LOOP, LTR, RTL, RequestInterval, SLIDE, STATUS_CLASSES, Splide, SplideRenderer, State, TTB, Throttle, Splide as default };\n", "import Splide from '@splidejs/splide';\n\nconst IMAGES_SLIDER_SELECTOR = '[custom=\"images-slider\"]';\nconst OFFERS_SLIDER_SELECTOR = '[custom=\"offers-slider\"]';\n\n/** Captured when the script runs so we can resolve Splide CSS URL from same origin. */\nconst scriptBaseUrl =\n typeof document !== 'undefined' && document.currentScript\n ? (document.currentScript as HTMLScriptElement).src.replace(/\\/[^/]+$/, '')\n : '';\n\ndeclare global {\n interface Window {\n offersSplides?: InstanceType<typeof Splide>[];\n }\n}\n\n/**\n * Ensure Splide default CSS is loaded. Script is at .../pages/OfferSlug.js, CSS at .../splide.min.css.\n */\nfunction ensureSplideStyles() {\n if (document.querySelector('link[data-splide-css]') || !scriptBaseUrl) return;\n const parts = scriptBaseUrl.split('/');\n if (parts[parts.length - 1] === 'pages') parts.pop();\n const base = parts.join('/');\n const link = document.createElement('link');\n link.rel = 'stylesheet';\n link.href = `${base}/splide.min.css`;\n link.setAttribute('data-splide-css', 'true');\n document.head.appendChild(link);\n}\n\n/**\n * Destroy existing Splide instances so we can re-mount after dynamic content.\n */\nfunction destroyExistingSliders() {\n if (Array.isArray(window.offersSplides)) {\n window.offersSplides.forEach((s) => {\n try {\n s.destroy();\n } catch {\n // ignore\n }\n });\n window.offersSplides = [];\n }\n const imagesSlider = document.querySelector(IMAGES_SLIDER_SELECTOR);\n if (imagesSlider && (imagesSlider as unknown as { splide?: Splide }).splide) {\n try {\n (imagesSlider as unknown as { splide: Splide }).splide.destroy();\n } catch {\n // ignore\n }\n }\n}\n\n/**\n * Mount images slider (main offer block). Same config as Webflow: destroy on desktop, slider on mobile (\u2264766px).\n */\nfunction mountImagesSlider() {\n const el = document.querySelector(IMAGES_SLIDER_SELECTOR);\n if (!el) return;\n new Splide(el as HTMLElement, {\n type: 'loop',\n pagination: true,\n speed: 600,\n easing: 'ease',\n gap: '0rem',\n perPage: 1,\n arrows: false,\n destroy: true,\n // breakpoints: {\n // 766: {\n // destroy: false,\n // },\n // },\n }).mount();\n}\n\n/**\n * Mount offers sliders (\"Nos autres offres\") and set up progress bar.\n */\nfunction mountOffersSliders() {\n const elements = document.querySelectorAll(OFFERS_SLIDER_SELECTOR);\n window.offersSplides = [];\n elements.forEach((sliderEl) => {\n const offersSlider = new Splide(sliderEl as HTMLElement, {\n autoWidth: true,\n type: 'loop',\n gap: '1.25rem',\n speed: 600,\n easing: 'ease',\n pagination: false,\n breakpoints: {\n 766: {\n gap: '0.625rem',\n },\n },\n });\n const bar = sliderEl.querySelector<HTMLElement>('.splide__progress-bar');\n offersSlider.on('mounted move', () => {\n const end = offersSlider.Components.Controller.getEnd() + 1;\n const rate = end > 0 ? Math.min((offersSlider.index + 1) / end, 1) : 0;\n if (bar) bar.style.width = `${100 * rate}%`;\n });\n offersSlider.on('mounted', () => {\n const progress = offersSlider.root.querySelector<HTMLElement>('.splide__progress');\n const { length } = offersSlider;\n if (progress && length > 0) {\n progress.addEventListener('click', (e: MouseEvent) => {\n e.preventDefault();\n e.stopPropagation();\n const { width, left } = progress.getBoundingClientRect();\n if (width <= 0) return;\n const clickedPosition = e.clientX - left;\n const slideIndex = Math.min(\n length - 1,\n Math.max(0, Math.floor((clickedPosition / width) * length))\n );\n offersSlider.go(slideIndex);\n });\n }\n });\n offersSlider.mount();\n if (!window.offersSplides) window.offersSplides = [];\n window.offersSplides.push(offersSlider);\n });\n}\n\n/**\n * Re-initialise Splide sliders after offer slug page has injected content.\n * Uses the installed @splidejs/splide package; CSS is loaded from dist/splide.min.css.\n */\nexport function initOfferSlugSliders(): void {\n try {\n ensureSplideStyles();\n destroyExistingSliders();\n mountImagesSlider();\n mountOffersSliders();\n } catch {\n // slider init failed\n }\n}\n", "import { SELECTORS } from '$utils/constants';\nimport { createOffersFromDomContainer } from '$utils/createOffersInstance';\nimport { bindSlugOfferToContainer } from '$utils/Offers';\nimport { initOfferSlugSliders } from '$utils/offerSlugSliders';\n\nwindow.fsAttributes = window.fsAttributes || [];\n\nfunction getOfferSlugFromPath(): string | null {\n const pathname = window.location.pathname.replace(/\\/$/, '');\n const match = pathname.match(/^\\/offers\\/?(.*)$/);\n const slug = match ? match[1]?.trim() : null;\n return slug || null;\n}\n\nfunction setVisible(el: HTMLElement | null, visible: boolean) {\n if (!el) return;\n el.style.display = visible ? '' : 'none';\n}\n\nasync function initOfferSlugPage() {\n const slug = getOfferSlugFromPath();\n if (!slug) return;\n\n const spinner = document.querySelector<HTMLElement>(SELECTORS.loadingSpinner);\n const detailWrapper = document.querySelector<HTMLElement>(SELECTORS.offerSlugDetail);\n const moreWrapper = document.querySelector<HTMLElement>(SELECTORS.offersMoreWrapper);\n\n // Initially: main and others both hidden, loader visible\n setVisible(spinner, true);\n setVisible(detailWrapper, false);\n setVisible(moreWrapper, false);\n\n try {\n // 1) Main wrapper gets content \u2192 it becomes visible, loader stays\n const detailContainer = document.querySelector<HTMLDivElement>(SELECTORS.offerSlugDetail);\n if (detailContainer) {\n await bindSlugOfferToContainer(slug, detailContainer);\n setVisible(detailWrapper, true);\n } else {\n setVisible(detailWrapper, true);\n }\n // 2) Others wrapper gets data \u2192 it becomes visible, then loader gets hidden (in finally)\n const othersList = document.querySelector<HTMLDivElement>(SELECTORS.offerSlugOthersList);\n if (othersList) {\n const offersOthers = createOffersFromDomContainer(othersList);\n if (offersOthers) {\n await offersOthers.getGroupOtherOffers(slug);\n }\n setVisible(moreWrapper, true);\n } else {\n setVisible(moreWrapper, true);\n }\n\n // 3) Re-initialise Splide sliders (images + offers) after dynamic content\n requestAnimationFrame(() => {\n initOfferSlugSliders();\n });\n } catch {\n setVisible(detailWrapper, true);\n setVisible(moreWrapper, true);\n } finally {\n setVisible(spinner, false);\n }\n}\n\nwindow.loadFromServer = () => {\n const run = () => {\n void initOfferSlugPage();\n };\n if (document.readyState === 'complete') {\n setTimeout(run, 0);\n } else {\n window.addEventListener('load', () => setTimeout(run, 0));\n }\n};\n\nwindow.addEventListener('load', () => {\n window.loadFromServer();\n});\n"],
5
+ "mappings": ";;;AAAO,MAAM,SAAS;AAGf,MAAM,YAAY;AAAA,IACvB,mBAAmB,IAAI,MAAM;AAAA,IAC7B,OAAO,IAAI,MAAM;AAAA,IACjB,UAAU,IAAI,MAAM;AAAA,IACpB,mBAAmB,IAAI,MAAM;AAAA,IAC7B,UAAU,IAAI,MAAM;AAAA,IACpB,OAAO,IAAI,MAAM;AAAA,IACjB,aAAa,IAAI,MAAM;AAAA,IACvB,YAAY,IAAI,MAAM;AAAA;AAAA,IAEtB,iBAAiB,IAAI,MAAM;AAAA;AAAA,IAE3B,qBAAqB,IAAI,MAAM;AAAA;AAAA,IAE/B,yBAAyB;AAAA;AAAA,IAEzB,mBAAmB,IAAI,MAAM;AAAA,IAC7B,qBAAqB,IAAI,MAAM;AAAA,IAC/B,UAAU,IAAI,MAAM;AAAA,IACpB,OAAO,IAAI,MAAM;AAAA,IACjB,MAAM,IAAI,MAAM;AAAA,IAChB,aAAa,IAAI,MAAM;AAAA,IACvB,WAAW,IAAI,MAAM;AAAA,IACrB,WAAW,IAAI,MAAM;AAAA,IACrB,6BAA6B,IAAI,MAAM;AAAA,IACvC,aAAa,IAAI,MAAM;AAAA,IACvB,aAAa,IAAI,MAAM;AAAA,IACvB,kBAAkB,IAAI,MAAM;AAAA,IAC5B,kBAAkB,IAAI,MAAM;AAAA,IAC5B,uBAAuB,IAAI,MAAM;AAAA,IACjC,WAAW,IAAI,MAAM;AAAA,IACrB,kBAAkB,IAAI,MAAM;AAAA,IAC5B,kBAAkB,IAAI,MAAM;AAAA,IAC5B,gBAAgB,IAAI,MAAM;AAAA,IAC1B,qBAAqB;AAAA,IACrB,kBAAkB,CAAC,OAAe,IAAI,MAAM,WAAW,EAAE;AAAA,IACzD,cAAc;AAAA,EAChB;AAoCA,MAAM,aAAa;AAAA,IACjB,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,EACN;AAEA,MAAM,YAAY;AAAA,IAChB,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,EACN;AACA,MAAM,cAAc;AAAA,IAClB,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,EACN;AAEA,MAAM,aAAa;AAAA,IACjB,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,EACN;AAEA,MAAM,cAAc;AAAA,IAClB,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,EACN;AAEA,MAAM,eAAe;AAAA,IACnB,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,EACN;AAEA,MAAM,UAAU;AAAA,IACd,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,EACN;AAEA,MAAM,WAAW;AAAA,IACf,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,EACN;AAGO,MAAM,wBAOT;AAAA,IACF,YAAY;AAAA,MACV,aAAa;AAAA,MACb,MAAM;AAAA,MACN,aAAa;AAAA,MACb,OAAO;AAAA,IACT;AAAA,IACA,YAAY;AAAA,MACV,aAAa;AAAA,MACb,MAAM;AAAA,MACN,aAAa;AAAA,MACb,OAAO;AAAA,IACT;AAAA,IACA,YAAY;AAAA,MACV,aAAa;AAAA,MACb,MAAM;AAAA,MACN,aAAa;AAAA,MACb,OAAO;AAAA,IACT;AAAA,IACA,YAAY;AAAA,MACV,aAAa;AAAA,MACb,MAAM;AAAA,MACN,aAAa;AAAA,MACb,OAAO;AAAA,IACT;AAAA,IACA,YAAY;AAAA,MACV,aAAa;AAAA,MACb,MAAM;AAAA,MACN,aAAa;AAAA,MACb,OAAO;AAAA,IACT;AAAA,IACA,YAAY;AAAA,MACV,aAAa;AAAA,MACb,MAAM;AAAA,MACN,aAAa;AAAA,MACb,OAAO;AAAA,IACT;AAAA,IACA,YAAY;AAAA,MACV,aAAa;AAAA,MACb,MAAM;AAAA,MACN,aAAa;AAAA,MACb,OAAO;AAAA,IACT;AAAA,IACA,YAAY;AAAA,MACV,aAAa;AAAA,MACb,MAAM;AAAA,MACN,aAAa;AAAA,MACb,OAAO;AAAA,IACT;AAAA,IACA,YAAY;AAAA,MACV,aAAa;AAAA,MACb,MAAM;AAAA,MACN,aAAa;AAAA,MACb,OAAO;AAAA,IACT;AAAA,IACA,YAAY;AAAA,MACV,aAAa;AAAA,MACb,MAAM;AAAA,MACN,aAAa;AAAA,MACb,OAAO;AAAA,IACT;AAAA,IACA,YAAY;AAAA,MACV,aAAa;AAAA,MACb,MAAM;AAAA,MACN,aAAa;AAAA,MACb,OAAO;AAAA,IACT;AAAA,IACA,YAAY;AAAA,MACV,aAAa;AAAA,MACb,MAAM;AAAA,MACN,aAAa;AAAA,MACb,OAAO;AAAA,IACT;AAAA,IACA,YAAY;AAAA,MACV,aAAa;AAAA,MACb,MAAM;AAAA,MACN,aAAa;AAAA,MACb,OAAO;AAAA,IACT;AAAA,IACA,YAAY;AAAA,MACV,aAAa;AAAA,MACb,MAAM;AAAA,MACN,aAAa;AAAA,MACb,OAAO;AAAA,IACT;AAAA,IACA,YAAY;AAAA,MACV,aAAa;AAAA,MACb,MAAM;AAAA,MACN,aAAa;AAAA,MACb,OAAO;AAAA,IACT;AAAA,IACA,YAAY;AAAA,MACV,aAAa;AAAA,MACb,MAAM;AAAA,MACN,aAAa;AAAA,MACb,OAAO;AAAA,IACT;AAAA,IACA,YAAY;AAAA,MACV,aAAa;AAAA,MACb,MAAM;AAAA,MACN,aAAa;AAAA,MACb,OAAO;AAAA,IACT;AAAA,IACA,YAAY;AAAA,MACV,aAAa;AAAA,MACb,MAAM;AAAA,MACN,aAAa;AAAA,MACb,OAAO;AAAA,IACT;AAAA,IACA,YAAY;AAAA,MACV,aAAa;AAAA,MACb,MAAM;AAAA,MACN,aAAa;AAAA,MACb,OAAO;AAAA,IACT;AAAA,IACA,YAAY;AAAA,MACV,aAAa;AAAA,MACb,MAAM;AAAA,MACN,aAAa;AAAA,MACb,OAAO;AAAA,IACT;AAAA,IACA,YAAY;AAAA,MACV,aAAa;AAAA,MACb,MAAM;AAAA,MACN,aAAa;AAAA,MACb,OAAO;AAAA,IACT;AAAA,IACA,YAAY;AAAA,MACV,aAAa;AAAA,MACb,MAAM;AAAA,MACN,aAAa;AAAA,MACb,OAAO;AAAA,IACT;AAAA,EACF;AAGO,MAAM,qBAAgD;AAAA,IAC3D,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,I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",
6
+ "names": ["hid", "rate", "noop", "children", "child", "prefix", "query", "Controller", "max", "style", "Slides", "Slide", "Elements", "focus", "Move", "closest", "Scroll", "_Splide", "remove"]
7
+ }