{"version":3,"file":"product-details-section-xxxxxxxxxxxxxxxxxxxx.min.js","mappings":"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","sources":["webpack://lange/./scripts/sections/product-details/product-details/index.ts","webpack://lange/./scripts/sections/product-details/product-variant-selector/index.ts","webpack://lange/./scripts/sections/product-details/product-variant-selector/index.scss","webpack://lange/./scripts/sections/product-details/product-variant-selector/index.html","webpack://lange/./scripts/sections/product-details/sticky-cta/index.ts","webpack://lange/./scripts/sections/product-details/sticky-cta/index.scss","webpack://lange/./scripts/sections/product-details/sets-subproduct/index.ts","webpack://lange/./scripts/sections/product-details/sets-subproduct/index.scss","webpack://lange/./scripts/sections/product-details/sets-subproduct/index.html","webpack://lange/./scripts/sections/product-details/product-description/index.ts","webpack://lange/./scripts/sections/product-details/product-description/index.scss","webpack://lange/./scripts/sections/product-details/product-description/index.html","webpack://lange/./scripts/sections/product-details/product-detail-countdown-timer/index.ts","webpack://lange/./scripts/sections/product-details/product-detail-countdown-timer/index.scss","webpack://lange/./scripts/sections/product-details/product-detail-countdown-timer/index.html","webpack://lange/./scripts/sections/product-details/zoomable-image/index.ts","webpack://lange/./scripts/sections/product-details/zoomable-image/index.scss","webpack://lange/./scripts/sections/product-details/zoomable-image/index.html","webpack://lange/../node_modules/@splidejs/splide/dist/js/splide.esm.js","webpack://lange/./scripts/carousels/splide-slidebar-extension.ts","webpack://lange/./scripts/sections/product-details/product-gallery.ts"],"sourcesContent":["import { CustomElement } from '@integrabeauty/custom-elements';\n\n/**\n * A custom element that manages logic related to displaying product details on PDP.\n */\nclass ProductDetails extends HTMLElement implements CustomElement {\n  readonly dataset: {\n    /**\n     * Boolean represented as a string that indicates whether the product description is set\n     * (not bundle or default product).\n     */\n    isSet: 'false' | 'true';\n  };\n\n  private onVariantChangedBound = this.onVariantChanged.bind(this);\n\n  public constructor() {\n    super();\n  }\n\n  public connectedCallback() {\n    this.addEventListener('variant-changed', this.onVariantChangedBound);\n  }\n\n  public disconnectedCallback() {\n    this.removeEventListener('variant-changed', this.onVariantChangedBound);\n  }\n\n  private onVariantChanged(event: WindowEventMap['variant-changed']) {\n    const { variant } = event.detail;\n    // Don't update prices for sets. Sets have their own price not dependent on a selected variant.\n    if (this.dataset.isSet === 'true') {\n      return;\n    }\n\n    this.updatePrice(variant.price);\n    this.updateCompareAtPrice(variant.compareAtPrice, variant.compareAtPriceModalContent);\n    this.updateTopBadge(variant.topBadge, variant.topBadgeStyle);\n  }\n\n  private updatePrice(price: number) {\n    const priceElement = this.querySelector('.price__final');\n    const previousValue = priceElement.textContent || '';\n    priceElement.textContent =\n      previousValue.replace(/\\d+/g, (price / 100).toFixed(0));\n  }\n\n  private updateCompareAtPrice(price: string, modalContent: string) {\n    const compareAtPrice = this.querySelector('.price__compare-at');\n    compareAtPrice.textContent = price || '';\n\n    // create a compare at price info button if needed\n    if (modalContent) {\n      const compareAtPriceInfo = document.createElement('compare-at-price-info');\n      compareAtPriceInfo.dataset.content = modalContent;\n      compareAtPrice.appendChild(compareAtPriceInfo);\n    }\n  }\n\n  private updateTopBadge(value: string, style: string) {\n    type ProductTopBadge = HTMLElementTagNameMap['product-top-badge'];\n    const topBadge = this.querySelector<ProductTopBadge>('product-top-badge');\n    if (!topBadge) {\n      return;\n    }\n\n    topBadge.dataset.value = value;\n    topBadge.dataset.style = style;\n  }\n}\n\ndeclare global {\n  interface HTMLElementTagNameMap {\n    'product-details': ProductDetails;\n  }\n}\n\nif (!customElements.get('product-details')) {\n  customElements.define('product-details', ProductDetails);\n}\n","import type { CustomElement } from '@integrabeauty/custom-elements';\nimport html from './index.html';\nimport styles from './index.scss';\n\n/**\n * A custom element that manages displaying the selected variant's details and the functionality\n * for the dropdown variant selector on PDP.\n */\nexport class ProductVariantSelector extends HTMLElement implements CustomElement {\n  readonly dataset!: {\n    /**\n     * Boolean represented as string indicates whether the URL should be updated or not.\n     *\n     * Controls whether this component is allowed to update the url with a new variant parameter\n     * when a new variant is selected. For Lange this happens all the time, but for other brands\n     * where we eventually plan to share this code, this is not always true. For example, on one of\n     * our other brands you can change the selected variant on certain collection pages.\n     *\n     * This is not an observed attribute. We only set this in the connected callback during init and\n     * do not update its value again later. We do not expect it to ever change.\n     */\n    shouldUpdateUrl: 'false' | 'true';\n  };\n\n  private onVariantChangedBound = this.onVariantChanged.bind(this);\n  private onShowOptionsClickedBound = this.onShowOptionsClicked.bind(this);\n\n  constructor() {\n    super();\n    this.attachShadow({ mode: 'open' });\n    this.shadowRoot.innerHTML = `<style>${styles}</style>${html}`;\n  }\n\n  public connectedCallback() {\n    const button = this.shadowRoot.querySelector('.show-options');\n    button.addEventListener('click', this.onShowOptionsClickedBound);\n\n    for (const event of product_variant_selector_event_queue) {\n      if (isVariantChangedEvent(event)) {\n        try {\n          this.onVariantChangedBound(event);\n        } catch (error) {\n          console.warn(error);\n        }\n      }\n    }\n\n    this.addEventListener('variant-changed', this.onVariantChangedBound);\n\n    this.shadowRoot.host.classList.remove('hidden');\n  }\n\n  public disconnectedCallback() {\n    const button = this.shadowRoot.querySelector('.show-options');\n    button.removeEventListener('click', this.onShowOptionsClickedBound);\n\n    this.removeEventListener('variant-changed', this.onVariantChangedBound);\n  }\n\n  private onShowOptionsClicked() {\n    const button = this.shadowRoot.querySelector('.show-options');\n    const optionsContainer = this.shadowRoot.querySelector('slot[name=\"variant-selector\"]');\n    const isExpanded = button?.getAttribute('aria-expanded') === 'true';\n\n    if (isExpanded) {\n      button.setAttribute('aria-expanded', 'false');\n      optionsContainer.classList.add('collapsed');\n      optionsContainer.classList.remove('expanded');\n    } else {\n      button.setAttribute('aria-expanded', 'true');\n      optionsContainer.classList.add('expanded');\n      optionsContainer.classList.remove('collapsed');\n    }\n  }\n\n  private onVariantChanged(event: WindowEventMap['variant-changed']) {\n    const variantId = event.detail.variant.id;\n\n    this.updateVariantTitle(event.detail.variant.option);\n    this.updateColorSwatch(event.detail.variant.color);\n\n    if (this.dataset.shouldUpdateUrl === 'true') {\n      updateUrl(variantId.toString());\n    }\n  }\n\n  /**\n   * Updates the selected variant title in the dropdown button on mobile.\n   */\n  private updateVariantTitle(selectedOption: string) {\n    const dropdownText =\n      this.shadowRoot.querySelector<HTMLElement>('.selected-variant');\n\n    dropdownText.textContent = selectedOption;\n    dropdownText.setAttribute('aria-label', `Selected variant: ${selectedOption}`);\n  }\n\n  /**\n   * Updates the color title in the dropdown button on mobile.\n   */\n  private updateColorSwatch(color: string) {\n    const swatch = this.shadowRoot.querySelector<HTMLElement>('.swatch');\n\n    if (color) {\n      swatch.style.backgroundColor = color;\n      swatch.classList.remove('hidden');\n    } else {\n      swatch.style.backgroundColor = null;\n      swatch.classList.add('hidden');\n    }\n  }\n}\n\nfunction updateUrl(variantId: string) {\n  const url = new URL(location.href);\n  const variantSearchParam = url.searchParams.get('variant');\n  if (variantSearchParam === variantId) {\n    // When the page loads, there might be a \"variant\" search parameter. If it matches the\n    // currently selected variant ID, don’t do anything.\n    return;\n  }\n\n  url.searchParams.set('variant', variantId.toString());\n  window.history.replaceState({}, '', url);\n\n  const historyEvent = new CustomEvent('history-change', { cancelable: true });\n  dispatchEvent(historyEvent);\n}\n\nfunction isVariantChangedEvent(value: any): value is WindowEventMap['variant-changed'] {\n  return value?.type === 'variant-changed';\n}\n\ndeclare global {\n  interface HTMLElementTagNameMap {\n    'product-variant-selector': ProductVariantSelector;\n  }\n\n  // eslint-disable-next-line @typescript-eslint/naming-convention\n  var product_variant_selector_event_queue: Event[];\n  // eslint-disable-next-line @typescript-eslint/naming-convention\n  var product_variant_selector_event_listener: (event: Event)=> void;\n}\n\nif (!customElements.get('product-variant-selector')) {\n  customElements.define('product-variant-selector', ProductVariantSelector);\n}\n","export default \"*{box-sizing:border-box}:host{display:inline-flex;flex-direction:column-reverse}@media only screen and (min-width:992px){:host{flex-direction:column}}.show-options{align-items:center;appearance:none;background-color:#0000;border:1px solid #1e1e1e;color:#1e1e1e;column-gap:4px;cursor:pointer;display:flex;flex-grow:1;font-family:inherit;font-size:.875rem;justify-content:space-between;line-height:1;min-height:48px;padding:8px;text-align:left}@media only screen and (min-width:768px){.show-options{display:none}}.show-options:focus{outline:2px solid #000;outline-offset:1px}.show-options svg{flex-shrink:0;transform:rotate(180deg);width:10px}@media only screen and (min-width:768px){.show-options svg{width:auto}}@media only screen and (min-width:992px){.show-options svg{transform:rotate(0)}}.show-options[aria-expanded=true] svg{transform:rotate(0)}@media only screen and (min-width:992px){.show-options[aria-expanded=true] svg{transform:rotate(180deg)}}.swatch{border-radius:100px;display:inline-block;flex-shrink:0;height:18px;width:18px}@media only screen and (min-width:768px){.swatch{height:24px;width:24px}}.selected-variant{margin-right:auto;max-width:100%;overflow:hidden;overflow-wrap:break-word}slot[name=variant-selector]{animation-duration:.2s;animation-fill-mode:forwards;animation-timing-function:ease;border:1px solid #1e1e1e;display:block;margin-bottom:16px;overflow:hidden;padding:8px;width:calc(200% + 8px)}@media only screen and (min-width:768px){slot[name=variant-selector]{border:none;border-top:1px solid #dbdbdb;font-size:.875rem;margin-bottom:32px;margin-top:24px;overflow:visible;padding:24px 0 0;width:auto}}@media only screen and (min-width:992px){slot[name=variant-selector]{font-size:1rem;margin-bottom:0;margin-top:16px}}slot[name=variant-selector].expanded{animation-name:expand}slot[name=variant-selector].collapsed{animation-name:collapse}.hidden{display:none}@keyframes expand{0%{max-height:0;transform:scaleY(0);visibility:hidden}to{max-height:500px;transform:scaleY(1);visibility:visible}}@keyframes collapse{0%{max-height:500px;transform:scaleY(1);visibility:visible}to{border-width:0;margin:0;max-height:0;padding:0;transform:scaleY(0);visibility:hidden}}\";","// Module\nvar code = \"<button class=\\\"show-options\\\" aria-expanded=\\\"true\\\" aria-controls=\\\"variant-selector\\\"><span class=\\\"swatch hidden\\\" role=\\\"img\\\"></span><span class=\\\"selected-variant\\\" role=\\\"img\\\"></span><svg role=\\\"presentation\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"14\\\" height=\\\"9\\\" viewBox=\\\"0 0 14 9\\\" fill=\\\"none\\\"><path d=\\\"M13 1L7 8L1 0.999998\\\" stroke=\\\"#1E1E1E\\\" stroke-linecap=\\\"square\\\" stroke-linejoin=\\\"round\\\"/></svg></button><slot id=\\\"variant-selector\\\" name=\\\"variant-selector\\\"></slot>\";\n// Exports\nexport default code;","/*\n* This component simply positions its contents `fixed` on the bottom, full width,\n* and only when less than 768px; otherwise, its flow is `static`.\n*/\nimport type { CustomElement } from '@integrabeauty/custom-elements';\nimport styles from './index.scss';\n\nclass OfirStickyCTA extends HTMLElement implements CustomElement {\n  private mediaQuery: MediaQueryList;\n  private matchesMediaQuery: boolean;\n\n  private onVariantChangedBound = this.onVariantChanged.bind(this);\n  private onDOMContentLoadedBound = this.onDOMContentLoaded.bind(this);\n  private updateElementsBasedOnViewportBound = this.updateElementsBasedOnViewport.bind(this);\n\n  constructor() {\n    super();\n    this.mediaQuery = window.matchMedia('(max-width: 767px)');\n    this.matchesMediaQuery = false;\n    this.updateElementsBasedOnViewport();\n  }\n\n  connectedCallback() {\n    const styleElement = document.createElement('style');\n    styleElement.textContent = styles;\n    this.append(styleElement);\n    this.addEventListener('DOMContentLoaded', this.onDOMContentLoadedBound);\n    this.addEventListener('variant-changed', this.onVariantChangedBound);\n  }\n\n  public disconnectedCallback() {\n    this.removeEventListener('variant-changed', this.onVariantChangedBound);\n    this.mediaQuery.removeEventListener('change', this.updateElementsBasedOnViewportBound);\n  }\n\n  private onDOMContentLoaded(_event: Event) {\n    this.mediaQuery.addEventListener('change', this.updateElementsBasedOnViewportBound);\n    this.updateElementsBasedOnViewport();\n    this.removeEventListener('DOMContentLoaded', this.onDOMContentLoadedBound);\n  }\n\n  private updateElementsBasedOnViewport() {\n    if (this.mediaQuery.matches === this.matchesMediaQuery) {\n      return;\n    }\n\n    this.matchesMediaQuery = this.mediaQuery.matches;\n    if (this.matchesMediaQuery) {\n      document.querySelector<HTMLElement>('#shopify-section-footer').style.paddingBottom =\n        this.offsetHeight + 'px';\n    } else {\n      document.querySelector<HTMLElement>('#shopify-section-footer').style.paddingBottom =\n        '';\n    }\n  }\n\n  private onVariantChanged(event: WindowEventMap['variant-changed']) {\n    const discountMessage = this.querySelector('discount-message');\n    if (!discountMessage) {\n      return;\n    }\n\n    discountMessage.dataset.message = event.detail.variant.discountMessage;\n  }\n}\n\nif (!customElements.get('ofir-sticky-cta')) {\n  customElements.define('ofir-sticky-cta', OfirStickyCTA);\n}\n","export default \"ofir-sticky-cta{display:flex;flex-wrap:wrap;gap:16px;width:100%}@media only screen and (min-width:768px){ofir-sticky-cta{flex-direction:column;max-width:670px}}@media(max-width:767px){ofir-sticky-cta{align-items:flex-end;background-color:#fff;border-top:1px solid #0003;bottom:0;column-gap:8px;display:flex;left:0;padding:16px;position:fixed;z-index:50}#shopify-section-footer{padding-bottom:100px}}@media(min-width:768px){ofir-sticky-cta{align-items:flex-end}}@media(min-width:992px){ofir-sticky-cta{align-items:flex-start}}ofir-sticky-cta .product-v2__backorder{color:#616161;display:block;font-size:.75rem;margin-bottom:-8px;text-align:center;width:100%}@media only screen and (min-width:768px){ofir-sticky-cta .product-v2__backorder{font-size:.875rem;margin-bottom:0}}.product-v2__actions{width:100%}ofir-sticky-cta product-variant-selector,ofir-sticky-cta product-variant-selector~.product-v2__actions{width:calc(50% - 4px)}@media only screen and (min-width:768px){ofir-sticky-cta product-variant-selector,ofir-sticky-cta product-variant-selector~.product-v2__actions{width:100%}}\";","import html from './index.html';\nimport styles from './index.scss';\n\n/**\n * Custom element that renders a set's subproduct and handles image updates based on the selected\n * variant.\n */\nclass SetsSubproduct extends HTMLElement {\n  private onVariantChangedBound = this.onVariantChanged.bind(this);\n  public shadowRoot!: ShadowRoot;\n\n  public constructor() {\n    super();\n    this.attachShadow({ mode: 'open' });\n    this.shadowRoot.innerHTML = `<style>${styles}</style>${html}`;\n  }\n\n  public connectedCallback() {\n    this.addEventListener('variant-changed', this.onVariantChangedBound);\n  }\n\n  public disconnectedCallback() {\n    this.removeEventListener('variant-changed', this.onVariantChangedBound);\n  }\n\n  private onVariantChanged(event: WindowEventMap['variant-changed']) {\n    const imageSrc = event.detail.variant.image;\n    const image = this.querySelector('img[slot=\"image\"]');\n    image.setAttribute('src', imageSrc);\n  }\n}\n\ndeclare global {\n  interface HTMLElementTagNameMap {\n    'sets-subproduct': SetsSubproduct;\n  }\n}\n\nif (!customElements.get('sets-subproduct')) {\n  customElements.define('sets-subproduct', SetsSubproduct);\n}\n","export default \":host{display:flex;min-height:112px;padding-bottom:12px;padding-top:8px;text-align:left;width:100%}slot[name=image]{display:block;flex-shrink:0;height:100px;width:100px}::slotted([slot=image]){object-fit:contain;object-position:center}.main{flex-grow:1;padding-left:4px}.header{align-items:center;display:flex;justify-content:space-between;margin-bottom:4px}.title{font-size:.875rem;margin-bottom:0;margin-top:0}slot[name=rating]{display:block;margin-top:-7px}slot[name=subtitle]{font-size:.875rem}slot[name=variant-selector]{display:block;font-size:.875rem;margin-top:12px}\";","// Module\nvar code = \"<slot name=\\\"image\\\"></slot><div class=\\\"main\\\"><div class=\\\"header\\\"><h3 class=\\\"title\\\"><slot name=\\\"title\\\"></slot></h3><slot name=\\\"rating\\\"></slot></div><slot name=\\\"subtitle\\\"></slot><slot name=\\\"variant-selector\\\"></slot></div>\";\n// Exports\nexport default code;","import html from './index.html';\nimport styles from './index.scss';\n\n/**\n * This component renders a product description. If in mobile view and the description visually\n * spans more than two lines, it will be truncated with an option to expand the view.\n */\nclass ProductDescription extends HTMLElement {\n  public static get observedAttributes() {\n    return [\n      'data-product-description'\n    ];\n  }\n\n  readonly dataset: {\n    /**\n     * The description of a product\n     */\n    productDescription: string;\n  };\n\n  public shadowRoot!: ShadowRoot;\n  private onClickReadMoreBound = this.onClickReadMore.bind(this);\n\n  constructor() {\n    super();\n    this.attachShadow({ mode: 'open' });\n    this.shadowRoot.innerHTML = `<style>${styles}</style>${html}`;\n  }\n\n  public connectedCallback() {\n    const readMore = this.shadowRoot.querySelector('.read-more');\n    readMore.addEventListener('click', this.onClickReadMoreBound);\n\n    this.render();\n  }\n\n  public disconnectedCallback() {\n    const readMore = this.shadowRoot.querySelector('.read-more');\n    readMore.removeEventListener('click', this.onClickReadMoreBound);\n  }\n\n  public attributeChangedCallback(_name: string, _oldValue: string, _newValue: string) {\n    this.render();\n  }\n\n  private onClickReadMore(event: Event) {\n    event.preventDefault();\n\n    const host = <HTMLElement>this.shadowRoot.host;\n    const readMore = this.shadowRoot.querySelector<HTMLElement>('.read-more');\n    const readMoreLabel = readMore.querySelector('span');\n\n    if (host.dataset.expanded === 'true') {\n      host.removeAttribute('data-expanded');\n      readMore.setAttribute('aria-expanded', 'false');\n      readMoreLabel.textContent = 'Read More';\n    } else {\n      host.setAttribute('data-expanded', 'true');\n      readMore.setAttribute('aria-expanded', 'true');\n      readMoreLabel.textContent = 'Read Less';\n    }\n  }\n\n  private render() {\n    const description = this.shadowRoot.querySelector<HTMLElement>('.description');\n    description.innerHTML = this.dataset.productDescription;\n  }\n}\n\ndeclare global {\n  interface HTMLElementTagNameMap {\n    'product-description': ProductDescription;\n  }\n}\n\nif (!customElements.get('product-description')) {\n  customElements.define('product-description', ProductDescription);\n}\n","export default \":host{font-size:.875rem;line-height:1.5}:host([data-expanded=true]) .description{max-height:none;overflow:initial}:host([data-expanded=true]) .read-more{display:flex}:host([data-expanded=true]) svg{transform:rotate(180deg)}strong{font-weight:600}.description{display:flex;flex-direction:column;gap:1em;max-height:3em;overflow:hidden}.description *{margin:0;padding:0}@media screen and (min-width:1024px){.description{max-height:none;overflow:initial}}.read-more{align-items:center;background-color:#0000;border:none;border-radius:0;color:#7c0d3f;cursor:pointer;display:flex;font-size:inherit;font-weight:600;justify-content:space-between;margin-top:4px;padding:0;text-decoration:underline;width:100%}@media screen and (min-width:1024px){.read-more{display:none}}\";","// Module\nvar code = \"<div id=\\\"description\\\" class=\\\"description\\\"></div><button class=\\\"read-more\\\" aria-expanded=\\\"false\\\" aria-controls=\\\"description\\\"><span>Read More</span><svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"14\\\" height=\\\"9\\\" viewBox=\\\"0 0 14 9\\\" fill=\\\"none\\\"><path d=\\\"M13 1L7 8L1 0.999998\\\" stroke=\\\"#1E1E1E\\\" stroke-linecap=\\\"square\\\" stroke-linejoin=\\\"round\\\"/></svg></button>\";\n// Exports\nexport default code;","import html from './index.html';\nimport styles from './index.scss';\n\n/**\n * Renders product related countdown timer. It is used in a product template context.\n */\nclass ProductDetailCountdownTimer extends HTMLElement {\n  public static get observedAttributes() {\n    return [\n      'data-end-time',\n      'data-start-time'\n    ];\n  }\n\n  readonly dataset!: {\n    /**\n     * Stop time as unix epoch time.\n     *\n     * @see https://www.epochconverter.com\n     */\n    endTime: string;\n\n    /**\n     * Start time as unix epoch time.\n     *\n     * @see https://www.epochconverter.com\n     */\n    startTime: string;\n  };\n\n  public shadowRoot!: ShadowRoot;\n  private endTime?: number;\n  private startTime?: number;\n  private timer?: ReturnType<typeof setInterval>;\n  private timeRemainingElement?: HTMLElement;\n\n  constructor() {\n    super();\n    this.hide();\n    this.attachShadow({ mode: 'open' });\n    this.shadowRoot.innerHTML = `<style>${styles}</style>${html}`;\n  }\n\n  public connectedCallback() {\n    this.timeRemainingElement = this.shadowRoot.querySelector<HTMLElement>('.time-remaining');\n    this.render();\n  }\n\n  public attributeChangedCallback(name: string, _oldValue: string, newValue: string) {\n    switch (name) {\n      case 'data-start-time':\n        this.startTime = parseInt(newValue, 10) * 1000;\n        break;\n      case 'data-end-time':\n        this.endTime = parseInt(newValue, 10) * 1000;\n        break;\n    }\n\n    this.render();\n  }\n\n  private render() {\n    if (!this.isConnected || !this.startTime || !this.endTime) {\n      return;\n    }\n\n    const nowTime = Date.now();\n\n    if (nowTime < this.startTime) {\n      return;\n    }\n\n    if (nowTime >= this.endTime) {\n      return;\n    }\n\n    this.show();\n    clearInterval(this.timer);\n    this.timer = setInterval(this.renderTime.bind(this), 100);\n  }\n\n  private renderTime() {\n    const nowTime = Date.now();\n    if (this.endTime - nowTime < 0) {\n      this.hide();\n      clearInterval(this.timer);\n      return;\n    }\n\n    const remaining = getTimeRemaining(this.endTime, nowTime);\n    const daysRemaining = remaining.days > 0 ?\n      `${remaining.days} ${remaining.days === 1 ? 'day' : 'days'}` :\n      '';\n    const timeRemaining = formatTime(remaining.hours, remaining.minutes,\n      remaining.seconds);\n\n    this.timeRemainingElement.textContent = `${daysRemaining} ${timeRemaining}`;\n  }\n\n  /**\n   * Hide the whole component.\n   */\n  private hide() {\n    this.style.display = 'none';\n  }\n\n  /**\n   * Show the whole component.\n   */\n  private show() {\n    this.style.display = null;\n  }\n}\n\nfunction formatTime(hours: number, minutes: number, seconds: number) {\n  const h = hours.toString();\n  const m = minutes.toString();\n  const s = seconds.toString();\n  return `${h}h ${m}m ${s}s`;\n}\n\nfunction getTimeRemaining(endingMs: number, currentMs: number) {\n  let timeRemainingSeconds = (endingMs - currentMs) / 1000;\n\n  const days = Math.floor(timeRemainingSeconds / 86400);\n  timeRemainingSeconds -= days * 86400;\n\n  const hours = Math.floor(timeRemainingSeconds / 3600) % 24;\n  timeRemainingSeconds -= hours * 3600;\n\n  const minutes = Math.floor(timeRemainingSeconds / 60) % 60;\n  timeRemainingSeconds -= minutes * 60;\n\n  const seconds = Math.floor(timeRemainingSeconds % 60);\n\n  return {\n    days,\n    hours,\n    minutes,\n    seconds\n  };\n}\n\ndeclare global {\n  interface HTMLElementTagNameMap {\n    'product-detail-countdown-timer': ProductDetailCountdownTimer;\n  }\n}\n\nif (!customElements.get('product-detail-countdown-timer')) {\n  customElements.define('product-detail-countdown-timer', ProductDetailCountdownTimer);\n}\n","export default \":host{display:block;font-size:.875rem}.time-remaining{color:#7c0d3f;font-weight:600;margin-left:8px}\";","// Module\nvar code = \"Sale Ends in<time class=\\\"time-remaining\\\"></time>\";\n// Exports\nexport default code;","import { CustomElement } from '@integrabeauty/custom-elements';\nimport html from './index.html';\nimport styles from './index.scss';\n\n/**\n * A custom element that displays a zoomable image when clicked.\n *\n * It should only be used on devices that support hover and have a minimum width of 768px. We don't\n * need this feature on mobile devices as users can pinch to zoom.\n */\nclass ZoomableImage extends HTMLElement implements CustomElement {\n  readonly dataset!: {\n    /**\n     * The scale coefficient of the zoomable image, number represented as a string, e.g. \"1.5\"\n     * Defaults to \"2\" if not set or invalid.\n     */\n    scale: string;\n\n    /**\n     * The URL of the large zoomable image.\n     */\n    zoomableImage: string;\n  };\n\n  private onClickedBound = this.onClicked.bind(this);\n  private onMouseEnterBound = this.onMouseEnter.bind(this);\n  private onMouseLeaveBound = this.onMouseLeave.bind(this);\n  private onMouseMoveBound = this.onMouseMove.bind(this);\n  private onMediaQueryChangeBound = this.onMediaQueryChange.bind(this);\n\n  public shadowRoot!: ShadowRoot;\n  private animationFrameId: number | null = null;\n  private isPreloaded = false;\n  private state: 'zoomedIn' | 'zoomedOut' = 'zoomedOut';\n  private imageContainer: HTMLDivElement | null = null;\n  private mediaQuery = matchMedia('(hover: hover) and (min-width: 768px)');\n\n  public constructor() {\n    super();\n    this.attachShadow({ mode: 'open' });\n    this.shadowRoot.innerHTML = `<style>${styles}</style>${html}`;\n  }\n\n  public connectedCallback() {\n    if (this.mediaQuery.matches) {\n      this.addEventListeners();\n    }\n\n    this.mediaQuery.addEventListener('change', this.onMediaQueryChangeBound);\n  }\n\n  public disconnectedCallback() {\n    this.removeEventListeners();\n  }\n\n  private addEventListeners() {\n    this.addEventListener('click', this.onClickedBound);\n    this.addEventListener('mouseenter', this.onMouseEnterBound);\n    this.addEventListener('mouseleave', this.onMouseLeaveBound);\n    this.addEventListener('mousemove', this.onMouseMoveBound);\n  }\n\n  private removeEventListeners() {\n    this.removeEventListener('click', this.onClickedBound);\n    this.removeEventListener('mouseenter', this.onMouseEnterBound);\n    this.removeEventListener('mouseleave', this.onMouseLeaveBound);\n  }\n\n  private onMediaQueryChange(event: MediaQueryListEvent) {\n    if (event.matches) {\n      this.addEventListeners();\n    } else {\n      this.removeEventListeners();\n      if (this.state === 'zoomedIn') {\n        this.hideImage();\n      }\n    }\n  }\n\n  private onClicked(_event: Event) {\n    if (this.state === 'zoomedOut') {\n      this.showImage();\n    } else if (this.state === 'zoomedIn') {\n      this.hideImage();\n    }\n  }\n\n  /**\n   * Preload the zoomable image on mouse enter. It improves user experience by reducing the delay\n   * when the user clicks to zoom in and sees the large image.\n   */\n  private onMouseEnter(_event: Event) {\n    // preload only once\n    if (this.isPreloaded) {\n      return;\n    }\n\n    preloadImage(this.dataset.zoomableImage);\n    this.removeEventListener('mouseenter', this.onMouseEnter);\n  }\n\n  private onMouseLeave(_event: Event) {\n    if (this.state === 'zoomedIn') {\n      this.hideImage();\n    }\n  }\n\n  private onMouseMove(event: MouseEvent) {\n    if (!this.imageContainer) {\n      return;\n    }\n\n    if (this.animationFrameId) {\n      cancelAnimationFrame(this.animationFrameId);\n    }\n\n    this.animationFrameId = requestAnimationFrame(() => {\n      // it's possible that the imageContainer is null when the animation frame is executed\n      if (!this.imageContainer) {\n        return;\n      }\n\n      const translateX = (event.offsetX * 100) / this.offsetWidth;\n      const translateY = (event.offsetY * 100) / this.offsetHeight;\n      this.imageContainer.style.backgroundPosition =\n        `${translateX.toFixed(2)}% ${translateY.toFixed(2)}%`;\n    });\n  }\n\n  private showImage() {\n    this.state = 'zoomedIn';\n\n    if (!this.dataset.zoomableImage) {\n      return;\n    }\n\n    const div = document.createElement('div');\n    div.style.backgroundImage = `url(${this.dataset.zoomableImage})`;\n\n    // default to 2 if not a valid number\n    const scale = parseFloat(this.dataset.scale) || 2;\n    div.style.backgroundSize = `${scale * 100}%`;\n\n    this.shadowRoot.appendChild(div);\n    this.imageContainer = div;\n  }\n\n  private hideImage() {\n    this.state = 'zoomedOut';\n\n    const imageContainer = this.shadowRoot.querySelector('div');\n    if (imageContainer) {\n      this.shadowRoot.removeChild(imageContainer);\n    }\n\n    this.imageContainer = null;\n  }\n}\n\nfunction preloadImage(src: string) {\n  const img = new Image();\n  img.src = src;\n}\n\ndeclare global {\n  interface HTMLElementTagNameMap {\n    'zoomable-image': ZoomableImage;\n  }\n}\n\nif (!customElements.get('zoomable-image')) {\n  customElements.define('zoomable-image', ZoomableImage);\n}\n","export default \":host{display:block;position:relative}@media only screen and (min-width:768px)and (hover:hover){:host{cursor:zoom-in}}div{background-position:50% 50%;background-repeat:no-repeat;background-size:150%;cursor:zoom-out;display:block;height:100%;left:50%;position:absolute;top:50%;transform:translate(-50%,-50%);width:100%;z-index:2}\";","// Module\nvar code = \"<slot></slot>\";\n// Exports\nexport default code;","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 type { Splide, Components, Options } from '@splidejs/splide';\n\n/**\n * Extension to add a custom slidebar to the Splide slider for visualizing and controlling the\n * slide position.\n *\n * If you want to render a sidebar in a specific place in the HTML, add the sidebar's markup\n * directly to your template. If no markup is provided, the sidebar will be automatically created\n * and inserted right before the closing tag of the Splide root element.\n *\n * This library was copy-paged from Lange.\n *\n * @param splide The main Splide instance\n * @param components Splide components\n * @param options Splide options object, containing customization options\n *\n * @see https://splidejs.com/components/\n * @see https://splidejs.com/guides/options/\n * @see https://splidejs.com/guides/extension/\n */\nexport function splideSlidebarExtension(splide: Splide, components: Components, options: Options) {\n  /**\n   * Root slidebar element\n   */\n  let slidebar: HTMLElement;\n\n  /**\n   * Indicates whether the sidebar markup is already present in the HTML or not.\n   */\n  let hasSlidebarMarkup = false;\n\n  /**\n   * Slide bar handle element\n   */\n  let handle: HTMLElement;\n\n  /**\n   * Slidebar current position\n   */\n  let position = 0;\n\n  /**\n   * Maximum allowable position value for the slidebar handle\n   */\n  let maxPosition: number;\n\n  /**\n   * Maximum allowable position value for the Splide's track. Store the value to not calculate all\n   * the time when the slider is dragged.\n   */\n  let maxTrackPosition: number;\n\n  /**\n   * Previous x-coordinate of the touch, needed to calculate the touch movement distance.\n   */\n  let previousTouchX = 0;\n\n  /**\n   * Mounts the extension, setting up the slidebar and initializing event listeners. Splide call\n   * this method automatically when the slider is ready.\n   *\n   * @see https://splidejs.com/guides/extension/\n   */\n  function mount() {\n    slidebar = components.Elements.root.querySelector('.splide__slider');\n    handle = components.Elements.root.querySelector('.splide__slider-handle');\n\n    if (slidebar && handle) {\n      hasSlidebarMarkup = true;\n    } else {\n      renderSlidebar();\n    }\n\n    splide.on('ready', onSplideReady);\n    splide.on('updated', onSplideOptionsUpdated);\n    splide.on('overflow', onSplideOverflowed);\n  }\n\n  /**\n   * Enables the slidebar functionality, adding the necessary event listeners.\n   */\n  function enable() {\n    if (!hasSlidebarMarkup) {\n      components.Elements.root.appendChild(slidebar);\n    }\n\n    slidebar.classList.remove('hidden');\n\n    // Without this delay, the first page of the carousel is not clickable. There’s an issue with\n    // calling the components.Controller.go() method immediately when the extension is mounted.\n    setTimeout(onSplideResized);\n\n    if (!splide.is('fade')) {\n      splide.on('dragging.slidebar', onSplideDragging);\n    }\n\n    splide.on('move.slidebar', onSplideMoveStarted);\n    splide.on('resized.slidebar', onSplideResized);\n    handle.addEventListener('mousedown', onMousedown);\n    handle.addEventListener('touchstart', onTouchstart, { passive: true });\n    handle.addEventListener('transitionend', onTransitionend);\n    slidebar.addEventListener('click', onSlidebarClicked);\n  }\n\n  /**\n   * Disables the slidebar functionality, removing the event listeners and slidebar element.\n   */\n  function disable() {\n    slidebar.classList.add('hidden');\n\n    splide.off('move.slidebar');\n    splide.off('resized.slidebar');\n    splide.off('dragging.slidebar');\n    handle.removeEventListener('mousedown', onMousedown);\n    handle.removeEventListener('touchstart', onTouchstart);\n    handle.removeEventListener('transitionend', onTransitionend);\n    slidebar.removeEventListener('click', onSlidebarClicked);\n  }\n\n  /**\n   * Creates elements, calculates, and sets the handle width based on the number of slides, but does\n   * not append the element to the DOM.\n   */\n  function renderSlidebar() {\n    slidebar = document.createElement('div');\n    slidebar.classList.add('splide__slider');\n\n    handle = document.createElement('div');\n    handle.classList.add('splide__slider-handle');\n\n    handle.style.width = calculateHandleWidth();\n\n    slidebar.appendChild(handle);\n  }\n\n  /**\n   * Calculates the width of the handle.\n   *\n   * The function works depending upon the 'mode' the Splide is in. If it's in 'fade' mode, the\n   * width is calculated based on the proportion of 'perPage' option to the total number of slides,\n   * scaled to fit a percentage scale (0-100).\n   *\n   * For other modes, the handle width is determined by the ratio of list size\n   * to slider size, also expressed as a percentage.\n   *\n   * @returns The calculated width of the handle.\n   */\n  function calculateHandleWidth() {\n    let handleWidth;\n    if (splide.is('fade')) {\n      handleWidth = (options.perPage / components.Slides.getLength()) * 100;\n    } else {\n      handleWidth = (components.Layout.listSize() / components.Layout.sliderSize()) * 100;\n    }\n\n    return `${handleWidth}%`;\n  }\n\n  /**\n   * Calculates maximum values for the slidebar and track, ensuring they stay in sync.\n   */\n  function recalculateSlidebarAndTrackPosition() {\n    maxPosition = slidebar.offsetWidth - handle.offsetWidth;\n    maxTrackPosition = components.Layout.sliderSize() - components.Layout.listSize();\n\n    components.Controller.go(splide.index, true);\n  }\n\n  /**\n   * Processes and restricts handle movement within the slidebar bounds.\n   *\n   * @param toPosition Desired new position of the handle.\n   */\n  function processHandleMove(toPosition: number) {\n    const newPosition = getHandlePositionWithinBounds(toPosition);\n\n    // avoid position update if handle position hasn't changed.\n    if (position === newPosition) {\n      return;\n    }\n\n    position = getHandlePositionWithinBounds(toPosition);\n\n    if (!splide.is('fade')) {\n      const newSplidePosition = getCalculatedTrackPosition(position);\n      components.Move.translate(newSplidePosition);\n    }\n\n    // it ensures the DOM updates are synchronized with the browser's refresh rate, avoiding\n    // unnecessary reflows and keeping animations smooth\n    requestAnimationFrame(() => {\n      handle.style.transform = `translateX(${position}px)`;\n    });\n  }\n\n  /**\n   * Adjusts and returns the intended position of the handle within the boundaries of a slider.\n   * Checks whether the new position is within the range [0, maxPosition]. If the intended position\n   * is less than 0, it will be set to 0. If it's larger than maxPosition, it will be set\n   * to maxPosition. If it's the same as the current position, it will return this value without\n   * changes.\n   *\n   * @param toPosition - The intended new position.\n   * @returns newPosition - The adjusted position within the range [0, maxPosition].\n   */\n  function getHandlePositionWithinBounds(toPosition: number) {\n    let newPosition = toPosition;\n    if (newPosition <= 0) {\n      newPosition = 0;\n    } else if (newPosition >= maxPosition) {\n      newPosition = maxPosition;\n    }\n\n    return newPosition;\n  }\n\n  /**\n   * Aligns the track position based on the current position of the handle.\n   */\n  function alignTrackPosition() {\n    let index: number;\n\n    if (splide.is('fade')) {\n      index = Math.round(position / (maxPosition / components.Slides.getLength()));\n    } else {\n      const currentSplidePosition = components.Move.getPosition();\n      index = components.Move.toIndex(currentSplidePosition);\n    }\n\n    components.Controller.go(index, true);\n  }\n\n  function onSplideOptionsUpdated(_options: Options) {\n    toggleSlidebar();\n  }\n\n  function onSplideReady() {\n    toggleSlidebar();\n  }\n\n  function toggleSlidebar() {\n    // We need to both check isEnough() and isOverflow(). Depending on the Splide options or due\n    // to some Splide bugs, solely relying on one of these methods has led to issues.\n    if (options.slidebar && components.Slides.isEnough() && components.Layout.isOverflow()) {\n      enable();\n    } else {\n      disable();\n    }\n  }\n\n  function onMousedown() {\n    addEventListener('mousemove', onMousemove);\n    addEventListener('mouseup', onMouseup);\n  }\n\n  function onMouseup() {\n    // TODO: \"mouseup\" event is fired on touch devices right after \"touchend\". Need to investigate,\n    // if we can replace mouse and touch events with \"pointerdown\" and \"pointerup\" events.\n\n    alignTrackPosition();\n\n    removeEventListener('mousemove', onMousemove);\n    removeEventListener('mouseup', onMouseup);\n  }\n\n  function onMousemove(event: MouseEvent) {\n    const newPosition = position + event.movementX;\n    processHandleMove(newPosition);\n  }\n\n  function onTouchstart(event: TouchEvent) {\n    const touch = event.touches[0];\n    previousTouchX = touch.clientX;\n\n    addEventListener('touchmove', onTouchmove);\n    addEventListener('touchend', onTouchend);\n  }\n\n  function onTouchend(_event: TouchEvent) {\n    previousTouchX = 0;\n\n    alignTrackPosition();\n\n    removeEventListener('touchmove', onTouchmove);\n    removeEventListener('touchend', onTouchend);\n  }\n\n  function onTouchmove(event: TouchEvent) {\n    const touch = event.touches[0];\n    const movementX = touch.clientX - previousTouchX;\n    const newPosition = position + movementX;\n    previousTouchX = touch.clientX;\n\n    processHandleMove(newPosition);\n  }\n\n  /**\n   * Resets handle transition style once transition ends\n   */\n  function onTransitionend() {\n    handle.style.transition = '';\n  }\n\n  function onSlidebarClicked(event: MouseEvent) {\n    if (event.target !== event.currentTarget) {\n      return;\n    }\n\n    const newSlidebarPosition = event.offsetX - handle.offsetWidth / 2;\n    let index: number;\n\n    if (splide.is('fade')) {\n      index = Math.round(newSlidebarPosition / (maxPosition / components.Slides.getLength()));\n    } else {\n      const newTrackPosition = getCalculatedTrackPosition(newSlidebarPosition);\n      index = components.Move.toIndex(newTrackPosition);\n    }\n\n    components.Controller.go(index, true);\n  }\n\n  function onSplideResized() {\n    handle.style.width = calculateHandleWidth();\n\n    recalculateSlidebarAndTrackPosition();\n  }\n\n  function onSplideOverflowed(isOverflow: boolean) {\n    if (isOverflow) {\n      enable();\n    } else {\n      disable();\n    }\n  }\n\n  /**\n   * Sets the handle position based on the active slide's position.\n   *\n   * @param index Active Slide index.\n   */\n  function onSplideMoveStarted(index: number) {\n    let newSlidebarPosition;\n    if (splide.is('fade')) {\n      newSlidebarPosition = (options.perPage / (components.Slides.getLength() - 1)) * maxPosition *\n        index;\n    } else {\n      const newTrackPosition = components.Move.toPosition(index);\n      newSlidebarPosition = getCalculatedSlidebarPosition(newTrackPosition);\n    }\n\n    position = getHandlePositionWithinBounds(newSlidebarPosition);\n    handle.style.transform = `translateX(${position}px)`;\n    handle.style.transition = 'transform 400ms cubic-bezier(0.25, 1, 0.5, 1)';\n  }\n\n  function onSplideDragging() {\n    const newPosition = getCalculatedSlidebarPosition();\n    position = getHandlePositionWithinBounds(newPosition);\n    handle.style.transform = `translateX(${position}px)`;\n  }\n\n  /**\n   * Calculates the handle's position based on the current track position.\n   *\n   * @param trackPosition Optional track position for calculation. If not provided the value from\n   *   the Move component is taken. We don't need to pass a new track position if this function used\n   *   to get the slidebar position when the slider is dragged, but it's necessary if used when\n   *   the slider is moved to a certain slide because the position at the end of moving should be\n   *   taken instead of the current Splide's track position.\n   */\n  function getCalculatedSlidebarPosition(trackPosition?: number) {\n    const currentTrackPosition = -1 * (trackPosition ?? components.Move.getPosition());\n    const ratio = currentTrackPosition / maxTrackPosition;\n    const newSlideBarPosition = ratio * maxPosition;\n    return newSlideBarPosition;\n  }\n\n  /**\n   * Calculates the track's position based on the handle's position.\n   *\n   * @param slidebarPosition Position of the slidebar handle.\n   */\n  function getCalculatedTrackPosition(slidebarPosition: number) {\n    const ratio = slidebarPosition / maxPosition;\n    const newTrackPosition = -1 * ratio * maxTrackPosition;\n    return newTrackPosition;\n  }\n\n  return {\n    mount\n  };\n}\n","import Splide from '@splidejs/splide';\nimport { splideSlidebarExtension } from '../../carousels/splide-slidebar-extension';\n\nlet productId: number;\nlet mainSplide: Splide;\nlet navSplide: Splide;\nlet mainImages: HTMLElement;\nlet navImages: HTMLElement;\n\nfunction showAndFadeOutCountIndicator() {\n  const elems = document.querySelectorAll('.splide__count-indicator');\n  if (elems.length === 0) {\n    return;\n  }\n\n  for (const elem of elems) {\n    elem.classList.remove('fade-out');\n  }\n\n  setTimeout(() => {\n    for (const elem of elems) {\n      elem.classList.add('fade-out');\n    }\n  }, 1000);\n}\n\nfunction recalculateCarousel() {\n  const gallery = document.getElementById('product-image-gallery');\n  if (!gallery) {\n    return;\n  }\n\n  gallery.style.cssText = '';\n}\n\nfunction onDOMContentLoaded() {\n  const mainCarousel = document.querySelector('.splide--product-gallery-main-carousel');\n  if (!mainCarousel) {\n    return;\n  }\n\n  const gallery = document.querySelector<HTMLElement>('#product-image-gallery');\n  productId = parseInt(gallery.dataset.productId, 10);\n  if (!productId) {\n    return;\n  }\n\n  initCarousel();\n  recalculateCarousel();\n\n  addEventListener('resize', recalculateCarousel);\n\n  // Listen only to events from the PDP variant selector. It prevents collisions between a product\n  // card with the same product on the page, e.g. in the predictive search or recommended products,\n  // and the product details.\n  const productPage = document.querySelector<HTMLElement>('.product-v2, .sets-product');\n  productPage.addEventListener('variant-changed', onVariantChanged);\n}\n\nfunction onVariantChanged(event: WindowEventMap['variant-changed']) {\n  const detail = event.detail;\n  // This extra conditional is just paranoia, might not be needed\n  if (detail.variant.product_id !== productId) {\n    return;\n  }\n\n  updateCarouselImages(detail.variant.id.toString());\n}\n\nfunction updateCarouselImages(variantId: string) {\n  // Update images per variant on main carousel\n  mainSplide.Components.Slides.remove(item => item.slide.dataset.variantId);\n  let index = 0;\n  const variantMainImages =\n    mainImages.querySelectorAll(`[data-variant-id=\"${variantId}\"]`);\n  for (const slide of variantMainImages) {\n    const newSlide = <HTMLElement>(slide.cloneNode(true));\n    mainSplide.Components.Slides.add(newSlide, index++);\n  }\n\n  const singleImage = variantMainImages.length <= 1;\n  const mainSliderFooter = mainSplide.Components.Elements.root.querySelector('.splide__footer');\n  if (singleImage) {\n    mainSliderFooter.classList.add('hidden');\n  } else {\n    mainSliderFooter.classList.remove('hidden');\n  }\n\n  // Update images per variant on nav carousel\n  if (navSplide) {\n    if (singleImage) {\n      navSplide.Components.Elements.root.classList.add('hidden');\n    } else {\n      navSplide.Components.Elements.root.classList.remove('hidden');\n    }\n\n    navSplide.Components.Slides.remove(item => item.slide.dataset.variantId);\n    let index = 0;\n    const variantNavImages =\n      navImages.querySelectorAll(`[data-variant-id=\"${variantId}\"]`);\n    for (const slide of variantNavImages) {\n      const newSlide = <HTMLElement>(slide.cloneNode(true));\n      navSplide.Components.Slides.add(newSlide, index++);\n    }\n  }\n\n  // Scroll to first slide\n  mainSplide.go(0);\n}\n\nfunction initCarousel() {\n  const mainCarousel =\n    document.querySelector<HTMLElement>('.splide--product-gallery-main-carousel');\n\n  // Cache main carousel markup\n  mainImages = document.createElement('div');\n  mainImages.innerHTML = mainCarousel.innerHTML;\n\n  // Init main carousel\n  mainSplide = new Splide(mainCarousel, {\n    type: 'fade',\n    perPage: 1,\n    perMove: 1,\n    rewind: true,\n    pagination: false,\n    arrows: true,\n    lazyLoad: 'nearby',\n    mediaQuery: 'min',\n    slidebar: true,\n    breakpoints: {\n      768: {\n        arrows: false,\n        slidebar: false\n      }\n    }\n  });\n\n  const navCarousel = document.querySelector('.splide--product-gallery-nav-carousel');\n  if (navCarousel) {\n    // Cache nav carousel markup\n    navImages = document.createElement('div');\n    navImages.innerHTML = navCarousel.innerHTML;\n\n    navSplide = new Splide(<HTMLElement>navCarousel, {\n      fixedWidth: 85,\n      fixedHeight: 85,\n      gap: 12,\n      perMove: 1,\n      rewind: true,\n      pagination: false,\n      isNavigation: true,\n      arrows: true,\n      lazyLoad: 'nearby',\n      keyboard: true,\n      breakpoints: {\n        767: {\n          // SPLIDE BUG regarding `destroy: true`\n          // @see https://github.com/Splidejs/splide/issues/1268\n          // I reported this bug, but temporarily we are leveraging CSS to hide\n          // the nav carousel so it doesn't break syncing after resize.\n          // destroy: true\n        },\n        768: {\n          arrows: false\n        }\n      }\n    });\n  }\n\n  // Pause video when slide is not active\n  mainSplide.on('move', (newIndex, prevIndex) => {\n    showAndFadeOutCountIndicator();\n    const oldSlideContainer = mainSplide.Components.Slides.getAt(prevIndex);\n    const video = oldSlideContainer?.slide.querySelector('video');\n    if (video && !video.paused) {\n      video.pause();\n    }\n  });\n\n  // Start to play video when slide became active\n  mainSplide.on('moved', (newIndex, prevIndex, destIndex) => {\n    showAndFadeOutCountIndicator();\n    const newSlideContainer = mainSplide.Components.Slides.getAt(destIndex);\n    const video = newSlideContainer?.slide.querySelector('video');\n    video?.play().catch(console.warn);\n  });\n\n  // Mount carousels\n  // Order specific per\n  // @see https://splidejs.com/guides/apis/#sync\n  if (navSplide) {\n    mainSplide.sync(navSplide);\n  }\n\n  mainSplide.mount({\n    splideSlidebarExtension\n  });\n\n  type Detail = WindowEventMap['product-carousel-initialized']['detail'];\n  const event = new CustomEvent<Detail>('product-carousel-initialized', {\n    detail: { splide: mainSplide }\n  });\n  dispatchEvent(event);\n\n  if (navSplide) {\n    navSplide.mount();\n  }\n\n  // set initial carousel state\n  const selectedVariant = mainCarousel.dataset.selectedVariant;\n  const hasOnlyDefaultVariant = mainCarousel.dataset.hasOnlyDefaultVariant === 'true';\n  if (selectedVariant && !hasOnlyDefaultVariant) {\n    updateCarouselImages(selectedVariant);\n  }\n}\n\n/**\n * Occurs when a product image gallery is initialized on a PDP page.\n */\ntype ProductCarouselInitializedEvent = CustomEvent<{\n  splide: Splide;\n}>;\n\ndeclare global {\n  interface WindowEventMap {\n    'product-carousel-initialized': ProductCarouselInitializedEvent;\n  }\n}\n\naddEventListener('DOMContentLoaded', onDOMContentLoaded);\n"],"names":["ProductDetails","HTMLElement","constructor","super","onVariantChangedBound","this","onVariantChanged","bind","connectedCallback","addEventListener","disconnectedCallback","removeEventListener","event","variant","detail","dataset","isSet","updatePrice","price","updateCompareAtPrice","compareAtPrice","compareAtPriceModalContent","updateTopBadge","topBadge","topBadgeStyle","priceElement","querySelector","previousValue","textContent","replace","toFixed","modalContent","compareAtPriceInfo","document","createElement","content","appendChild","value","style","customElements","get","define","ProductVariantSelector","onShowOptionsClickedBound","onShowOptionsClicked","attachShadow","mode","shadowRoot","innerHTML","concat","product_variant_selector_event_queue","isVariantChangedEvent","error","console","warn","host","classList","remove","button","optionsContainer","getAttribute","setAttribute","add","variantId","id","updateVariantTitle","option","updateColorSwatch","color","shouldUpdateUrl","url","URL","location","href","searchParams","set","toString","window","history","replaceState","historyEvent","CustomEvent","cancelable","dispatchEvent","updateUrl","selectedOption","dropdownText","swatch","backgroundColor","type","OfirStickyCTA","onDOMContentLoadedBound","onDOMContentLoaded","updateElementsBasedOnViewportBound","updateElementsBasedOnViewport","mediaQuery","matchMedia","matchesMediaQuery","styleElement","append","_event","matches","paddingBottom","offsetHeight","discountMessage","message","SetsSubproduct","imageSrc","image","ProductDescription","observedAttributes","onClickReadMoreBound","onClickReadMore","render","attributeChangedCallback","_name","_oldValue","_newValue","preventDefault","readMore","readMoreLabel","expanded","removeAttribute","productDescription","ProductDetailCountdownTimer","hide","timeRemainingElement","name","newValue","startTime","parseInt","endTime","isConnected","nowTime","Date","now","show","clearInterval","timer","setInterval","renderTime","remaining","endingMs","currentMs","timeRemainingSeconds","days","Math","floor","hours","minutes","seconds","getTimeRemaining","daysRemaining","timeRemaining","h","m","s","formatTime","display","ZoomableImage","onClickedBound","onClicked","onMouseEnterBound","onMouseEnter","onMouseLeaveBound","onMouseLeave","onMouseMoveBound","onMouseMove","onMediaQueryChangeBound","onMediaQueryChange","animationFrameId","isPreloaded","state","imageContainer","addEventListeners","removeEventListeners","hideImage","showImage","src","zoomableImage","Image","cancelAnimationFrame","requestAnimationFrame","translateX","offsetX","offsetWidth","translateY","offsetY","backgroundPosition","div","backgroundImage","scale","parseFloat","backgroundSize","removeChild","_defineProperties","target","props","i","length","descriptor","enumerable","configurable","writable","Object","defineProperty","key","MEDIA_PREFERS_REDUCED_MOTION","STATES","CREATED","MOUNTED","IDLE","MOVING","SCROLLING","DRAGGING","DESTROYED","empty","array","slice","arrayLike","start","end","Array","prototype","call","apply","func","arguments","nextTick","setTimeout","noop","raf","typeOf","subject","isObject","isNull","isArray","isFunction","isString","isUndefined","isHTMLElement","ownerDocument","defaultView","e","toArray","forEach","values","iteratee","includes","indexOf","push","items","toggleClass","elm","classes","addClass","split","parent","children","before","nodes","ref","node","parentNode","insertBefore","selector","children2","filter","child","firstElementChild","ownKeys","keys","forOwn","object","right","reverse","assign","source","merge","omit","elms","attrs","attr","value2","String","create","tag","prop","getComputedStyle","display2","focus","preventScroll","hasClass","className","contains","rect","getBoundingClientRect","parseHtml","html","DOMParser","parseFromString","body","prevent","stopPropagation","stopImmediatePropagation","query","queryAll","querySelectorAll","removeClass","timeOf","timeStamp","unit","PROJECT_CODE","DATA_ATTRIBUTE","assert","condition","Error","min","max","ceil","abs","approximatelyEqual","x","y","epsilon","between","number","exclusive","minimum","maximum","clamp","sign","format","string","replacements","replacement","pad","ids","uniqueId","prefix","EventBinder","listeners","forEachEvent","targets","events","events2","eventNS","fragment","callback","options","namespace","isEventTarget","remover","unbind","listener","dispatch","bubbles","createEvent","initCustomEvent","destroy","data","EVENT_MOUNTED","EVENT_READY","EVENT_MOVE","EVENT_MOVED","EVENT_CLICK","EVENT_ACTIVE","EVENT_INACTIVE","EVENT_VISIBLE","EVENT_HIDDEN","EVENT_REFRESH","EVENT_UPDATED","EVENT_RESIZE","EVENT_RESIZED","EVENT_SCROLL","EVENT_SCROLLED","EVENT_DESTROY","EVENT_ARROWS_MOUNTED","EVENT_NAVIGATION_MOUNTED","EVENT_AUTOPLAY_PLAY","EVENT_AUTOPLAY_PAUSE","EVENT_LAZYLOAD_LOADED","EVENT_SLIDE_KEYDOWN","EVENT_SHIFTED","EVENT_END_INDEX_CHANGED","EventInterface","Splide2","bus","createDocumentFragment","binder","on","join","off","emit","RequestInterval","interval","onInterval","onUpdate","limit","rate","paused","count","update","pause","cancel","resume","rewind","time","isPaused","ARROW","ARROW_LEFT","ARROW_RIGHT","ARROW_UP","ARROW_DOWN","TTB","ORIENTATION_MAP","width","left","X","Y","ArrowLeft","ArrowRight","Direction","Components2","resolve","axisOnly","direction","index","match","offset","toLowerCase","charAt","toUpperCase","orient","ROLE","TAB_INDEX","ARIA_PREFIX","ARIA_CONTROLS","ARIA_CURRENT","ARIA_SELECTED","ARIA_LABEL","ARIA_LABELLEDBY","ARIA_HIDDEN","ARIA_ORIENTATION","ARIA_ROLEDESCRIPTION","ARIA_LIVE","ARIA_BUSY","ARIA_ATOMIC","ALL_ATTRIBUTES","CLASS_PREFIX","STATUS_CLASS_PREFIX","CLASS_ROOT","CLASS_TRACK","CLASS_LIST","CLASS_SLIDE","CLASS_CLONE","CLASS_CONTAINER","CLASS_ARROWS","CLASS_ARROW","CLASS_ARROW_PREV","CLASS_ARROW_NEXT","CLASS_PAGINATION","CLASS_PAGINATION_PAGE","CLASS_PROGRESS_BAR","CLASS_TOGGLE","CLASS_SR","CLASS_INITIALIZED","CLASS_ACTIVE","CLASS_PREV","CLASS_NEXT","CLASS_VISIBLE","CLASS_LOADING","CLASS_FOCUS_IN","CLASS_OVERFLOW","STATUS_CLASSES","CLASSES","slide","clone","arrows","arrow","prev","next","pagination","page","spinner","POINTER_DOWN_EVENTS","POINTER_MOVE_EVENTS","POINTER_UP_EVENTS","SLIDE","LOOP","FADE","Slide$1","slideIndex","destroyed","Components","root","isNavigation","updateOnMove","i18n","slideFocus","styles","label","isClone","container","initNavigation","controls","splides","map","Slide2","splide","Slides","getAt","slideX","onMove","curr","active","isActive","self","visible","is","trackRect","Elements","track","slideRect","isVisible","hidden","focusableNodes","activeElement","updateVisibility","cloneStatus","mount","slideLabel","useContainer","isWithin","from","distance","diff","XML_NAME_SPACE","PATH","INTERVAL_DATA_ATTRIBUTE","SCROLL_LISTENER_OPTIONS","passive","capture","NORMALIZATION_MAP","Spacebar","Right","Left","Up","Down","normalizeKey","KEYBOARD_EVENT","SRC_DATA_ATTRIBUTE","SRCSET_DATA_ATTRIBUTE","IMAGE_SELECTOR","TRIGGER_KEYS","ComponentConstructors","freeze","__proto__","Media","breakpoints","reducedMotion","queries","completely","register","options2","queryList","merged","reduce","merged2","entry","refresh","opts","base","notify","getPrototypeOf","setup","isMin","sort","n","enable","list","isUsingKey","_EventInterface","elements","slides","rootClasses","trackClasses","find","bar","toggle","role","tagName","carousel","init","getClasses","labelledby","closest","nodeType","parentElement","drag","_EventInterface2","_Components2$Elements","Slides2","forEach$1","Slide1","excludeClones","matcher","getIn","Controller","toIndex","hasFocus","perPage","images","img","getLength","isEnough","Layout","vertical","rootRect","overflow","_EventInterface3","_Components2$Elements2","styleSlides","cssPadding","resize","force","newRect","height","cssHeight","cssTrackHeight","gap","autoWidth","fixedWidth","cssSlideSize","fixedHeight","autoHeight","isOverflow","padding","heightRatio","listSize","slideSize","withoutGap","Slide","getGap","totalSize","sliderSize","duration","getPadding","Clones","cloneCount","clones","remount","observe","computeCloneCount","isHead","cloneNode","cloneDeep","generate","clones2","fixedSize","Move","Transition","_EventInterface4","_Components2$Layout","_Components2$Directio","_Components2$Elements3","reposition","isBusy","Scroll","jump","translate","toPosition","position","preventLoop","destination","exceededMax","getEnd","shift","loop","backwards","excess","getLimit","size","getPosition","minDistance","Infinity","trimming","trimSpace","trim","move","dest","shifted","exceededLimit","exceededMin","endIndex","slideCount","perMove","_EventInterface5","_Components2$Slides","omitEnd","isLoop","isSlide","getNext","getAdjacent","getPrev","currIndex","prevIndex","onResized","computeDestIndex","snapPage","computeMovableDestIndex","toPage","setIndex","waitForTransition","go","control","allowSameIndex","_ref","indicator","parse","scroll","snap","getIndex","toDest","Arrows","created","wrapperClasses","placeholder","wrapper","enabled","createArrow","prev2","arrowPath","nextIndex","prevLabel","last","nextLabel","first","disabled","Autoplay","hovered","focused","_EventInterface6","_Components2$Elements4","autoplay","stopped","play","resetProgress","stop","autoToggle","pauseOnHover","pauseOnFocus","listen","Cover","cover","cover2","_EventInterface8","friction","onScrolled","noConstrain","clear","noDistance","onEnd","to","t","easingFunc","pow","Drag","basePosition","baseEvent","prevBaseEvent","isFree","dragging","clickPrevented","_EventInterface9","_Components2$Directio2","exceeded","disable","onPointerDown","isTouch","isTouchEvent","target2","noDrag","onPointerMove","onPointerUp","save","diffCoord","expired","diffTime","hasExceeded","isSliderDirection","thresholds","dragMinThreshold","isObj","mouse","touch","shouldStart","velocity","computeVelocity","flickPower","flickMaxPages","computeDestination","rewindByDrag","onClick","orthogonal","coordOf","getBaseEvent","changedTouches","TouchEvent","isDragging","Keyboard","_EventInterface10","keyboard","onKeydown","_disabled","LazyLoad","_EventInterface11","isSequential","lazyLoad","entries","srcset","loadNext","check","preloadPages","load","onLoad","Pagination","paginationClasses","dir","getDirection","nextPage","item","paginationDirection","_button","select","li","class","text","pageX","paginationKeyboard","createPagination","Sync","isParent","sync","Wheel","lastTime","onWheel","deltaY","_min","wheelMinThreshold","sleep","wheelSleep","releaseWheel","shouldPrevent","wheel","Live","live","sr","DEFAULTS","speed","easing","rewindSpeed","Fade","done","endCallback","transition","getSpeed","useScroll","_Splide","states","_o","_E","defaults","JSON","Constructor","protoProps","staticProps","_proto","Extensions","_this","_C","_T","Component","component","_this$event","Splide","splideSlidebarExtension","components","slidebar","handle","maxPosition","maxTrackPosition","hasSlidebarMarkup","previousTouchX","onSplideResized","onSplideDragging","onSplideMoveStarted","onMousedown","onTouchstart","onTransitionend","onSlidebarClicked","calculateHandleWidth","handleWidth","processHandleMove","newPosition","getHandlePositionWithinBounds","newSplidePosition","getCalculatedTrackPosition","transform","alignTrackPosition","round","currentSplidePosition","onSplideOptionsUpdated","_options","toggleSlidebar","onSplideReady","onMousemove","onMouseup","movementX","touches","clientX","onTouchmove","onTouchend","currentTarget","newSlidebarPosition","newTrackPosition","onSplideOverflowed","getCalculatedSlidebarPosition","trackPosition","slidebarPosition","productId","mainSplide","navSplide","mainImages","navImages","showAndFadeOutCountIndicator","elems","elem","recalculateCarousel","gallery","getElementById","cssText","product_id","updateCarouselImages","variantMainImages","newSlide","singleImage","mainSliderFooter","variantNavImages","mainCarousel","navCarousel","newIndex","oldSlideContainer","video","destIndex","newSlideContainer","catch","selectedVariant","hasOnlyDefaultVariant","initCarousel"],"sourceRoot":""}