[
  {
    "path": ".babelrc",
    "content": "{\n  \"presets\": [\n    \"@babel/preset-env\"\n  ]\n}"
  },
  {
    "path": ".editorconfig",
    "content": "root = true\n\n[*]\nindent_style = space\nindent_size = 2\ncharset = utf-8\nend_of_line = lf\ntrim_trailing_whitespace = true\ninsert_final_newline = true\n"
  },
  {
    "path": ".eslintrc",
    "content": "{\n  \"extends\": [\n    \"eslint:recommended\",\n    \"plugin:@typescript-eslint/recommended\",\n    \"plugin:vue/vue3-recommended\"\n  ],\n  \"plugins\": [\n    \"@typescript-eslint\"\n  ],\n  \"parser\": \"@typescript-eslint/parser\",\n  \"parserOptions\": {\n    \"ecmaVersion\": 2018,\n    \"sourceType\": \"module\"\n  },\n  \"env\": {\n    \"browser\": true\n  },\n  \"ignorePatterns\": [\n    \"*.esm.js\"\n  ],\n  \"rules\": {\n    \"semi\": [\n      \"error\",\n      \"always\",\n      {\n        \"omitLastInOneLineBlock\": true\n      }\n    ],\n    \"space-in-parens\": [\n      \"error\",\n      \"always\"\n    ],\n    \"array-bracket-spacing\": [\n      \"error\",\n      \"always\"\n    ],\n    \"object-curly-spacing\": [\n      \"error\",\n      \"always\"\n    ],\n    \"computed-property-spacing\": [\n      \"error\",\n      \"always\"\n    ],\n    \"camelcase\": \"error\",\n    \"comma-dangle\": [\n      \"error\",\n      {\n        \"arrays\": \"always-multiline\",\n        \"objects\": \"always-multiline\",\n        \"imports\": \"always-multiline\",\n        \"exports\": \"always-multiline\",\n        \"functions\": \"never\"\n      }\n    ],\n    \"comma-spacing\": [\n      \"error\",\n      {\n        \"before\": false,\n        \"after\": true\n      }\n    ],\n    \"eqeqeq\": \"error\",\n    \"indent\": [\n      \"error\",\n      2,\n      {\n        \"SwitchCase\": 1,\n        \"VariableDeclarator\": \"first\"\n      }\n    ],\n    \"no-console\": [\n      \"error\",\n      {\n        \"allow\": [\n          \"error\"\n        ]\n      }\n    ],\n    \"no-empty-function\": [\n      \"error\",\n      {\n        \"allow\": [\n          \"methods\"\n        ]\n      }\n    ],\n    \"@typescript-eslint/no-empty-function\": [\n      \"error\",\n      {\n        \"allow\": [\n          \"methods\"\n        ]\n      }\n    ],\n    \"@typescript-eslint/no-unused-vars\": \"error\",\n    \"@typescript-eslint/no-explicit-any\": \"off\",\n    \"@typescript-eslint/no-empty-interface\": \"off\",\n    \"@typescript-eslint/explicit-module-boundary-types\": [\n      \"error\",\n      {\n        \"allowArgumentsExplicitlyTypedAsAny\": true\n      }\n    ],\n    \"@typescript-eslint/ban-types\": [\n      \"error\",\n      {\n        \"types\": {\n          \"object\": false\n        }\n      }\n    ]\n  }\n}\n"
  },
  {
    "path": ".github/FUNDING.yml",
    "content": "github: NaotoshiFujita"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/BUG_REPORT.yml",
    "content": "name: Bug Report\ndescription: Create a bug report.\nlabels: [ \"bug\" ]\nbody:\n  - type: markdown\n    attributes:\n      value: |\n        Thank you for taking your time to post a bug report!\n        Please fill out the following form. I might need to close the issue without required fields or e.g. clear repro steps.\n  - type: checkboxes\n    attributes:\n      label: Checks\n      description: Before posting a report, please check following things.\n      options:\n        - label: \"Not a duplicate.\"\n          required: true\n        - label: \"Not a question, feature request, or anything other than a bug report directly related to Vue Splide. Use Discussions for these topics: https://github.com/Splidejs/splide/discussions\"\n          required: true\n  - type: input\n    id: version\n    attributes:\n      label: Version\n      description: The version where the bug happens.\n      placeholder: x.x.x\n    validations:\n      required: true\n  - type: textarea\n    attributes:\n      label: Description\n      description: Describe the bug.\n      placeholder: Provide a clear and precise description. Feel free to paste your code, screenshort, etc.\n    validations:\n      required: true\n  - type: input\n    id: reproduction-link\n    attributes:\n      label: Reproduction Link\n      description: A link to a reproduction (CodeSandbox, etc.). **Do not link to your project**, it has to be a minimal and fresh reproduction.\n      placeholder: \"https://codesandbox.io/\"\n    validations:\n      required: false\n  - type: textarea\n    attributes:\n      label: Steps to Reproduce\n      description: Describe steps how to reproduce the bug.\n      value: |\n        1.\n        2.\n        ...\n    validations:\n      required: true\n  - type: textarea\n    attributes:\n      label: Expected Behaviour\n      description: Describe what you expected to happen.\n    validations:\n      required: true\n"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/config.yml",
    "content": "blank_issues_enabled: false\n"
  },
  {
    "path": ".github/pull_request_template.md",
    "content": "<!--\n  Please make sure to add a new issue before you send PR!\n-->\n\n## Related Issues\n\n<!--\n  Link to the issue\n-->\n\n## Description\n\n<!-- Write a brief description here -->\n"
  },
  {
    "path": ".gitignore",
    "content": "node_modules/\n.idea/\nlocal/\n"
  },
  {
    "path": ".npmignore",
    "content": "node_modules/\nimages/\nexamples/\nlocal/\n.idea/\n.github/\n.editorconfig\n"
  },
  {
    "path": "LICENSE",
    "content": "The MIT License (MIT)\n\nCopyright (c) 2020 Naotoshi Fujita\n\nPermission is hereby granted, free of charge, to any person obtaining a copy of\nthis software and associated documentation files (the \"Software\"), to deal in\nthe Software without restriction, including without limitation the rights to\nuse, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of\nthe Software, and to permit persons to whom the Software is furnished to do so,\nsubject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS\nFOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR\nCOPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER\nIN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\nCONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE."
  },
  {
    "path": "README.md",
    "content": "<div align=\"center\">\n  <a href=\"https://splidejs.com\" target=\"_blank\">\n      <img width=\"70\" src=\"images/logo.svg\">\n  </a>\n  <a href=\"https://v3.vuejs.org/\" target=\"_blank\">\n      <img width=\"70\" src=\"images/vue-logo.svg\">\n  </a>\n\n  <h1>Vue Splide</h1>\n\n  <p>\n    Vue Splide is the Vue component for the\n    <a href=\"https://github.com/Splidejs/splide\">Splide</a> slider/carousel.\n  </p>\n\n  <p>\n    <a href=\"https://splidejs.com/integration/vue-splide/\">Getting Started</a>\n    <br>\n    <a href=\"https://splidejs.com/\">Demo</a>\n    <br>\n    <a href=\"https://github.com/Splidejs/splide/discussions\">Discussions</a>\n  </p>\n</div>\n\n## Caveat\n\nThe latest version only supports **Vue 3**.\nYou have to use the old version (0.3.5) for Vue 2, but the Splide version is also outdated.\n\n\n## Quick Start\nGet the latest version from NPM:\n```\n$ npm install @splidejs/vue-splide\n```\n\nImport CSS and components:\n\n```vue\n<template>\n  <Splide :options=\"{ rewind: true }\" aria-label=\"Vue Splide Example\">\n    <SplideSlide>\n      <img src=\"image1.jpg\" alt=\"Sample 1\">\n    </SplideSlide>\n    <SplideSlide>\n      <img src=\"image2.jpg\" alt=\"Sample 2\">\n    </SplideSlide>\n  </Splide>\n</template>\n\n<script>\nimport { Splide, SplideSlide } from '@splidejs/vue-splide';\nimport { defineComponent } from 'vue';\nimport '@splidejs/vue-splide/css';\n\nexport default defineComponent( {\n  components: { Splide, SplideSlide },\n} );\n</script>\n```\n\nVisit [here](https://splidejs.com/integration/vue-splide/) for more details.\n\n\n## Support Splide\n\nPlease support the project if you like it!\n- [GitHub Sponsors](https://github.com/sponsors/NaotoshiFujita)\n\n\n## License\nVue Splide and Splide are released under the MIT license.\n© 2022 Naotoshi Fujita\n"
  },
  {
    "path": "dist/js/vue-splide.cjs.js",
    "content": "\"use strict\";\nObject.defineProperties(exports, { __esModule: { value: true }, [Symbol.toStringTag]: { value: \"Module\" } });\nconst vue = require(\"vue\");\nfunction _defineProperties(target, props) {\n  for (var i = 0; i < props.length; i++) {\n    var descriptor = props[i];\n    descriptor.enumerable = descriptor.enumerable || false;\n    descriptor.configurable = true;\n    if (\"value\" in descriptor)\n      descriptor.writable = true;\n    Object.defineProperty(target, descriptor.key, descriptor);\n  }\n}\nfunction _createClass(Constructor, protoProps, staticProps) {\n  if (protoProps)\n    _defineProperties(Constructor.prototype, protoProps);\n  if (staticProps)\n    _defineProperties(Constructor, staticProps);\n  Object.defineProperty(Constructor, \"prototype\", { writable: false });\n  return Constructor;\n}\n/*!\n * Splide.js\n * Version  : 4.1.3\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,\n  MOUNTED,\n  IDLE,\n  MOVING,\n  SCROLLING,\n  DRAGGING,\n  DESTROYED\n};\nfunction empty(array) {\n  array.length = 0;\n}\nfunction slice(arrayLike, start, end) {\n  return Array.prototype.slice.call(arrayLike, start, end);\n}\nfunction apply(func) {\n  return func.bind.apply(func, [null].concat(slice(arguments, 1)));\n}\nvar nextTick = setTimeout;\nvar noop = function noop2() {\n};\nfunction raf(func) {\n  return requestAnimationFrame(func);\n}\nfunction typeOf(type, subject) {\n  return typeof subject === type;\n}\nfunction isObject$1(subject) {\n  return !isNull(subject) && typeOf(\"object\", subject);\n}\nvar isArray = Array.isArray;\nvar isFunction = apply(typeOf, \"function\");\nvar isString = apply(typeOf, \"string\");\nvar isUndefined = apply(typeOf, \"undefined\");\nfunction isNull(subject) {\n  return subject === null;\n}\nfunction isHTMLElement(subject) {\n  try {\n    return subject instanceof (subject.ownerDocument.defaultView || window).HTMLElement;\n  } catch (e) {\n    return false;\n  }\n}\nfunction toArray(value) {\n  return isArray(value) ? value : [value];\n}\nfunction forEach(values, iteratee) {\n  toArray(values).forEach(iteratee);\n}\nfunction includes(array, value) {\n  return array.indexOf(value) > -1;\n}\nfunction push(array, items) {\n  array.push.apply(array, toArray(items));\n  return array;\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}\nfunction addClass(elm, classes) {\n  toggleClass(elm, isString(classes) ? classes.split(\" \") : classes, true);\n}\nfunction append(parent, children2) {\n  forEach(children2, parent.appendChild.bind(parent));\n}\nfunction before(nodes, ref) {\n  forEach(nodes, function(node) {\n    var parent = (ref || node).parentNode;\n    if (parent) {\n      parent.insertBefore(node, ref);\n    }\n  });\n}\nfunction matches(elm, selector) {\n  return isHTMLElement(elm) && (elm[\"msMatchesSelector\"] || elm.matches).call(elm, selector);\n}\nfunction children(parent, selector) {\n  var children2 = parent ? slice(parent.children) : [];\n  return selector ? children2.filter(function(child2) {\n    return matches(child2, selector);\n  }) : children2;\n}\nfunction child(parent, selector) {\n  return selector ? children(parent, selector)[0] : parent.firstElementChild;\n}\nvar ownKeys = Object.keys;\nfunction forOwn$1(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  return object;\n}\nfunction assign(object) {\n  slice(arguments, 1).forEach(function(source) {\n    forOwn$1(source, function(value, key) {\n      object[key] = source[key];\n    });\n  });\n  return object;\n}\nfunction merge$1(object) {\n  slice(arguments, 1).forEach(function(source) {\n    forOwn$1(source, function(value, key) {\n      if (isArray(value)) {\n        object[key] = value.slice();\n      } else if (isObject$1(value)) {\n        object[key] = merge$1({}, isObject$1(object[key]) ? object[key] : {}, value);\n      } else {\n        object[key] = value;\n      }\n    });\n  });\n  return object;\n}\nfunction omit(object, keys) {\n  forEach(keys || ownKeys(object), function(key) {\n    delete object[key];\n  });\n}\nfunction removeAttribute(elms, attrs) {\n  forEach(elms, function(elm) {\n    forEach(attrs, function(attr) {\n      elm && elm.removeAttribute(attr);\n    });\n  });\n}\nfunction setAttribute(elms, attrs, value) {\n  if (isObject$1(attrs)) {\n    forOwn$1(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}\nfunction create(tag, attrs, parent) {\n  var elm = document.createElement(tag);\n  if (attrs) {\n    isString(attrs) ? addClass(elm, attrs) : setAttribute(elm, attrs);\n  }\n  parent && append(parent, elm);\n  return elm;\n}\nfunction style(elm, prop, value) {\n  if (isUndefined(value)) {\n    return getComputedStyle(elm)[prop];\n  }\n  if (!isNull(value)) {\n    elm.style[prop] = \"\" + value;\n  }\n}\nfunction display(elm, display2) {\n  style(elm, \"display\", display2);\n}\nfunction focus(elm) {\n  elm[\"setActive\"] && elm[\"setActive\"]() || elm.focus({\n    preventScroll: true\n  });\n}\nfunction getAttribute(elm, attr) {\n  return elm.getAttribute(attr);\n}\nfunction hasClass(elm, className) {\n  return elm && elm.classList.contains(className);\n}\nfunction rect(target) {\n  return target.getBoundingClientRect();\n}\nfunction remove(nodes) {\n  forEach(nodes, function(node) {\n    if (node && node.parentNode) {\n      node.parentNode.removeChild(node);\n    }\n  });\n}\nfunction parseHtml(html) {\n  return child(new DOMParser().parseFromString(html, \"text/html\").body);\n}\nfunction prevent(e, stopPropagation) {\n  e.preventDefault();\n  if (stopPropagation) {\n    e.stopPropagation();\n    e.stopImmediatePropagation();\n  }\n}\nfunction query(parent, selector) {\n  return parent && parent.querySelector(selector);\n}\nfunction queryAll(parent, selector) {\n  return selector ? slice(parent.querySelectorAll(selector)) : [];\n}\nfunction removeClass(elm, classes) {\n  toggleClass(elm, classes, false);\n}\nfunction timeOf(e) {\n  return e.timeStamp;\n}\nfunction unit(value) {\n  return isString(value) ? value : value ? value + \"px\" : \"\";\n}\nvar PROJECT_CODE = \"splide\";\nvar DATA_ATTRIBUTE = \"data-\" + PROJECT_CODE;\nfunction assert(condition, message) {\n  if (!condition) {\n    throw new Error(\"[\" + PROJECT_CODE + \"] \" + (message || \"\"));\n  }\n}\nvar min = Math.min, max = Math.max, floor = Math.floor, ceil = Math.ceil, abs = Math.abs;\nfunction approximatelyEqual(x, y, epsilon) {\n  return abs(x - y) < epsilon;\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}\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}\nfunction sign(x) {\n  return +(x > 0) - +(x < 0);\n}\nfunction format(string, replacements) {\n  forEach(replacements, function(replacement) {\n    string = string.replace(\"%s\", \"\" + replacement);\n  });\n  return string;\n}\nfunction pad(number) {\n  return number < 10 ? \"0\" + number : \"\" + number;\n}\nvar ids = {};\nfunction uniqueId(prefix) {\n  return \"\" + prefix + pad(ids[prefix] = (ids[prefix] || 0) + 1);\n}\nfunction EventBinder() {\n  var listeners = [];\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  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        return true;\n      });\n    });\n  }\n  function dispatch(target, type, detail) {\n    var e;\n    var bubbles = true;\n    if (typeof CustomEvent === \"function\") {\n      e = new CustomEvent(type, {\n        bubbles,\n        detail\n      });\n    } else {\n      e = document.createEvent(\"CustomEvent\");\n      e.initCustomEvent(type, bubbles, false, detail);\n    }\n    target.dispatchEvent(e);\n    return e;\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  function destroy() {\n    listeners.forEach(function(data) {\n      data[4]();\n    });\n    empty(listeners);\n  }\n  return {\n    bind,\n    unbind,\n    dispatch,\n    destroy\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\";\nfunction EventInterface(Splide2) {\n  var bus = Splide2 ? Splide2.event.bus : document.createDocumentFragment();\n  var binder = EventBinder();\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  function emit(event) {\n    binder.dispatch(bus, event, slice(arguments, 1));\n  }\n  if (Splide2) {\n    Splide2.event.on(EVENT_DESTROY, binder.destroy);\n  }\n  return assign(binder, {\n    bus,\n    on,\n    off: apply(binder.unbind, bus),\n    emit\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  function update() {\n    if (!paused) {\n      rate = interval ? min((now() - startTime) / interval, 1) : 1;\n      onUpdate && onUpdate(rate);\n      if (rate >= 1) {\n        onInterval();\n        startTime = now();\n        if (limit && ++count >= limit) {\n          return pause();\n        }\n      }\n      id = raf(update);\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  function pause() {\n    paused = true;\n  }\n  function rewind() {\n    startTime = now();\n    rate = 0;\n    if (onUpdate) {\n      onUpdate(rate);\n    }\n  }\n  function cancel() {\n    id && cancelAnimationFrame(id);\n    rate = 0;\n    id = 0;\n    paused = true;\n  }\n  function set(time) {\n    interval = time;\n  }\n  function isPaused() {\n    return paused;\n  }\n  return {\n    start,\n    rewind,\n    pause,\n    cancel,\n    set,\n    isPaused\n  };\n}\nfunction State(initialState) {\n  var state = initialState;\n  function set(value) {\n    state = value;\n  }\n  function is(states) {\n    return includes(toArray(states), state);\n  }\n  return {\n    set,\n    is\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}\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  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  function destroy(completely) {\n    if (completely) {\n      binder.destroy();\n    }\n  }\n  function register(options2, query2) {\n    var queryList = matchMedia(query2);\n    binder.bind(queryList, \"change\", update);\n    queries.push([options2, queryList]);\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$1(merged2, entry[1].matches ? entry[0] : {});\n    }, {});\n    omit(options);\n    set(merged);\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  function reduce(enable) {\n    if (matchMedia(MEDIA_PREFERS_REDUCED_MOTION).matches) {\n      enable ? merge$1(options, reducedMotion) : omit(options, ownKeys(reducedMotion));\n    }\n  }\n  function set(opts, base, notify) {\n    merge$1(options, opts);\n    base && merge$1(Object.getPrototypeOf(options), opts);\n    if (notify || !state.is(CREATED)) {\n      Splide2.emit(EVENT_UPDATED, options);\n    }\n  }\n  return {\n    setup,\n    destroy,\n    reduce,\n    set\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 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};\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  function orient(value) {\n    return value * (options.direction === RTL ? 1 : -1);\n  }\n  return {\n    resolve,\n    orient\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_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};\nfunction closest(from, selector) {\n  if (isFunction(from.closest)) {\n    return from.closest(selector);\n  }\n  var elm = from;\n  while (elm && elm.nodeType === 1) {\n    if (matches(elm, selector)) {\n      break;\n    }\n    elm = elm.parentElement;\n  }\n  return elm;\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\";\nfunction Elements(Splide2, Components2, options) {\n  var _EventInterface = EventInterface(Splide2), on = _EventInterface.on, bind = _EventInterface.bind;\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  function setup() {\n    collect();\n    init();\n    update();\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  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  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  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$1({\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,\n      track,\n      list,\n      slides\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    if (!getAttribute(root, ROLE) && root.tagName !== \"SECTION\" && role) {\n      setAttribute(root, ROLE, role);\n    }\n    setAttribute(root, ARIA_ROLEDESCRIPTION, i18n.carousel);\n    setAttribute(list, ROLE, \"presentation\");\n  }\n  function find(selector) {\n    var elm = query(root, selector);\n    return elm && closest(elm, \".\" + CLASS_ROOT) === root ? elm : void 0;\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  return assign(elements, {\n    setup,\n    mount,\n    destroy\n  });\n}\nvar SLIDE = \"slide\";\nvar LOOP = \"loop\";\nvar FADE = \"fade\";\nfunction Slide$1(Splide2, index, slideIndex, slide) {\n  var event = EventInterface(Splide2);\n  var on = event.on, emit = event.emit, bind = event.bind;\n  var Components = Splide2.Components, root = Splide2.root, options = Splide2.options;\n  var isNavigation = options.isNavigation, updateOnMove = options.updateOnMove, i18n = options.i18n, pagination = options.pagination, 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  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    listen();\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    if (updateOnMove) {\n      on(EVENT_MOVE, onMove);\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  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  function onMove() {\n    if (!destroyed) {\n      update();\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  function updateActivity() {\n    var active = isActive();\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  function updateVisibility() {\n    var visible = isVisible();\n    var hidden = !visible && (!isActive() || isClone);\n    if (!Splide2.state.is([MOVING, SCROLLING])) {\n      setAttribute(slide, ARIA_HIDDEN, hidden || \"\");\n    }\n    setAttribute(queryAll(slide, options.focusableNodes || \"\"), TAB_INDEX, hidden ? -1 : \"\");\n    if (slideFocus) {\n      setAttribute(slide, TAB_INDEX, hidden ? -1 : 0);\n    }\n    if (visible !== hasClass(slide, CLASS_VISIBLE)) {\n      toggleClass(slide, CLASS_VISIBLE, visible);\n      emit(visible ? EVENT_VISIBLE : EVENT_HIDDEN, self);\n    }\n    if (!visible && document.activeElement === slide) {\n      var Slide2 = Components.Slides.getAt(Splide2.index);\n      Slide2 && focus(Slide2.slide);\n    }\n  }\n  function style$1(prop, value, useContainer) {\n    style(useContainer && container || slide, prop, value);\n  }\n  function isActive() {\n    var curr = Splide2.index;\n    return curr === index || options.cloneStatus && curr === slideIndex;\n  }\n  function isVisible() {\n    if (Splide2.is(FADE)) {\n      return isActive();\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  function isWithin(from, distance) {\n    var diff = abs(from - index);\n    if (!isClone && (options.rewind || Splide2.is(LOOP))) {\n      diff = min(diff, Splide2.length - diff);\n    }\n    return diff <= distance;\n  }\n  var self = {\n    index,\n    slideIndex,\n    slide,\n    container,\n    isClone,\n    mount,\n    destroy,\n    update,\n    style: style$1,\n    isWithin\n  };\n  return self;\n}\nfunction Slides(Splide2, Components2, options) {\n  var _EventInterface2 = EventInterface(Splide2), on = _EventInterface2.on, emit = _EventInterface2.emit, bind = _EventInterface2.bind;\n  var _Components2$Elements = Components2.Elements, slides = _Components2$Elements.slides, list = _Components2$Elements.list;\n  var Slides2 = [];\n  function mount() {\n    init();\n    on(EVENT_REFRESH, destroy);\n    on(EVENT_REFRESH, init);\n  }\n  function init() {\n    slides.forEach(function(slide, index) {\n      register(slide, index, -1);\n    });\n  }\n  function destroy() {\n    forEach$1(function(Slide2) {\n      Slide2.destroy();\n    });\n    empty(Slides2);\n  }\n  function update() {\n    forEach$1(function(Slide2) {\n      Slide2.update();\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  function get(excludeClones) {\n    return excludeClones ? filter(function(Slide2) {\n      return !Slide2.isClone;\n    }) : Slides2;\n  }\n  function getIn(page) {\n    var Controller2 = Components2.Controller;\n    var index = Controller2.toIndex(page);\n    var max2 = Controller2.hasFocus() ? 1 : options.perPage;\n    return filter(function(Slide2) {\n      return between(Slide2.index, index, index + max2 - 1);\n    });\n  }\n  function getAt(index) {\n    return filter(index)[0];\n  }\n  function add(items, index) {\n    forEach(items, function(slide) {\n      if (isString(slide)) {\n        slide = parseHtml(slide);\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  function remove$1(matcher) {\n    remove(filter(matcher).map(function(Slide2) {\n      return Slide2.slide;\n    }));\n    emit(EVENT_REFRESH);\n  }\n  function forEach$1(iteratee, excludeClones) {\n    get(excludeClones).forEach(iteratee);\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  function style2(prop, value, useContainer) {\n    forEach$1(function(Slide2) {\n      Slide2.style(prop, value, useContainer);\n    });\n  }\n  function observeImages(elm, callback) {\n    var images = queryAll(elm, \"img\");\n    var length = images.length;\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  function getLength(excludeClones) {\n    return excludeClones ? slides.length : Slides2.length;\n  }\n  function isEnough() {\n    return Slides2.length > options.perPage;\n  }\n  return {\n    mount,\n    destroy,\n    update,\n    register,\n    get,\n    getIn,\n    getAt,\n    add,\n    remove: remove$1,\n    forEach: forEach$1,\n    filter,\n    style: style2,\n    getLength,\n    isEnough\n  };\n}\nfunction Layout(Splide2, Components2, options) {\n  var _EventInterface3 = EventInterface(Splide2), on = _EventInterface3.on, bind = _EventInterface3.bind, emit = _EventInterface3.emit;\n  var Slides2 = Components2.Slides;\n  var resolve = Components2.Direction.resolve;\n  var _Components2$Elements2 = Components2.Elements, root = _Components2$Elements2.root, track = _Components2$Elements2.track, list = _Components2$Elements2.list;\n  var getAt = Slides2.getAt, styleSlides = Slides2.style;\n  var vertical;\n  var rootRect;\n  var overflow;\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  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  function resize(force) {\n    var newRect = rect(root);\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      if (overflow !== (overflow = isOverflow())) {\n        toggleClass(root, CLASS_OVERFLOW, overflow);\n        emit(EVENT_OVERFLOW, overflow);\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$1(padding) ? 0 : padding)) || \"0px\";\n  }\n  function cssTrackHeight() {\n    var height = \"\";\n    if (vertical) {\n      height = cssHeight();\n      assert(height, \"height or heightRatio is missing.\");\n      height = \"calc(\" + height + \" - \" + cssPadding(false) + \" - \" + cssPadding(true) + \")\";\n    }\n    return height;\n  }\n  function cssHeight() {\n    return unit(options.height || rect(list).width * options.heightRatio);\n  }\n  function cssSlideWidth() {\n    return options.autoWidth ? null : unit(options.fixedWidth) || (vertical ? \"\" : cssSlideSize());\n  }\n  function cssSlideHeight() {\n    return unit(options.fixedHeight) || (vertical ? options.autoHeight ? null : cssSlideSize() : cssHeight());\n  }\n  function cssSlideSize() {\n    var gap = unit(options.gap);\n    return \"calc((100%\" + (gap && \" + \" + gap) + \")/\" + (options.perPage || 1) + (gap && \" - \" + gap) + \")\";\n  }\n  function listSize() {\n    return rect(list)[resolve(\"width\")];\n  }\n  function slideSize(index, withoutGap) {\n    var Slide2 = getAt(index || 0);\n    return Slide2 ? rect(Slide2.slide)[resolve(\"width\")] + (withoutGap ? 0 : getGap()) : 0;\n  }\n  function totalSize(index, withoutGap) {\n    var Slide2 = getAt(index);\n    if (Slide2) {\n      var right = rect(Slide2.slide)[resolve(\"right\")];\n      var left = rect(list)[resolve(\"left\")];\n      return abs(right - left) + (withoutGap ? 0 : getGap());\n    }\n    return 0;\n  }\n  function sliderSize(withoutGap) {\n    return totalSize(Splide2.length - 1) - totalSize(0) + slideSize(0, withoutGap);\n  }\n  function getGap() {\n    var Slide2 = getAt(0);\n    return Slide2 && parseFloat(style(Slide2.slide, resolve(\"marginRight\"))) || 0;\n  }\n  function getPadding(right) {\n    return parseFloat(style(track, resolve(\"padding\" + (right ? \"Right\" : \"Left\")))) || 0;\n  }\n  function isOverflow() {\n    return Splide2.is(FADE) || sliderSize(true) > listSize();\n  }\n  return {\n    mount,\n    resize,\n    listSize,\n    slideSize,\n    sliderSize,\n    totalSize,\n    getPadding,\n    isOverflow\n  };\n}\nvar MULTIPLIER = 2;\nfunction Clones(Splide2, Components2, options) {\n  var event = EventInterface(Splide2);\n  var on = event.on;\n  var Elements2 = Components2.Elements, Slides2 = Components2.Slides;\n  var resolve = Components2.Direction.resolve;\n  var clones = [];\n  var cloneCount;\n  function mount() {\n    on(EVENT_REFRESH, remount);\n    on([EVENT_UPDATED, EVENT_RESIZE], observe);\n    if (cloneCount = computeCloneCount()) {\n      generate(cloneCount);\n      Components2.Layout.resize(true);\n    }\n  }\n  function remount() {\n    destroy();\n    mount();\n  }\n  function destroy() {\n    remove(clones);\n    empty(clones);\n    event.destroy();\n  }\n  function observe() {\n    var count = computeCloneCount();\n    if (cloneCount !== count) {\n      if (cloneCount < count || !count) {\n        event.emit(EVENT_REFRESH);\n      }\n    }\n  }\n  function generate(count) {\n    var slides = Slides2.get().slice();\n    var length = slides.length;\n    if (length) {\n      while (slides.length < count) {\n        push(slides, slides);\n      }\n      push(slides.slice(-count), slides.slice(0, count)).forEach(function(Slide2, index) {\n        var isHead = index < count;\n        var clone = cloneDeep(Slide2.slide, index);\n        isHead ? before(clone, slides[0].slide) : append(Elements2.list, clone);\n        push(clones, clone);\n        Slides2.register(clone, index - count + (isHead ? 0 : length), Slide2.index);\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  function computeCloneCount() {\n    var clones2 = options.clones;\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(Elements2.track)[resolve(\"width\")] / fixedSize);\n      clones2 = fixedCount || options[resolve(\"autoWidth\")] && Splide2.length || options.perPage * MULTIPLIER;\n    }\n    return clones2;\n  }\n  return {\n    mount,\n    destroy\n  };\n}\nfunction Move(Splide2, Components2, options) {\n  var _EventInterface4 = EventInterface(Splide2), on = _EventInterface4.on, emit = _EventInterface4.emit;\n  var set = Splide2.state.set;\n  var _Components2$Layout = Components2.Layout, slideSize = _Components2$Layout.slideSize, getPadding = _Components2$Layout.getPadding, totalSize = _Components2$Layout.totalSize, listSize = _Components2$Layout.listSize, sliderSize = _Components2$Layout.sliderSize;\n  var _Components2$Directio = Components2.Direction, resolve = _Components2$Directio.resolve, orient = _Components2$Directio.orient;\n  var _Components2$Elements3 = Components2.Elements, list = _Components2$Elements3.list, track = _Components2$Elements3.track;\n  var Transition;\n  function mount() {\n    Transition = Components2.Transition;\n    on([EVENT_MOUNTED, EVENT_RESIZED, EVENT_UPDATED, EVENT_REFRESH], reposition);\n  }\n  function reposition() {\n    if (!Components2.Controller.isBusy()) {\n      Components2.Scroll.cancel();\n      jump(Splide2.index);\n      Components2.Slides.update();\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    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  function jump(index) {\n    translate(toPosition(index, true));\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  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      if (exceededMin || exceededMax) {\n        position = shift(position, exceededMax);\n      }\n    }\n    return position;\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  function cancel() {\n    translate(getPosition(), true);\n    Transition.cancel();\n  }\n  function toIndex(position) {\n    var Slides2 = Components2.Slides.get();\n    var index = 0;\n    var minDistance = Infinity;\n    for (var i = 0; i < Slides2.length; i++) {\n      var slideIndex = Slides2[i].index;\n      var distance = abs(toPosition(slideIndex, true) - position);\n      if (distance <= minDistance) {\n        minDistance = distance;\n        index = slideIndex;\n      } else {\n        break;\n      }\n    }\n    return index;\n  }\n  function toPosition(index, trimming) {\n    var position = orient(totalSize(index - 1) - offset(index));\n    return trimming ? trim(position) : position;\n  }\n  function getPosition() {\n    var left = resolve(\"left\");\n    return rect(list)[left] - rect(track)[left] + orient(getPadding(false));\n  }\n  function trim(position) {\n    if (options.trimSpace && Splide2.is(SLIDE)) {\n      position = clamp(position, 0, orient(sliderSize(true) - listSize()));\n    }\n    return position;\n  }\n  function offset(index) {\n    var focus2 = options.focus;\n    return focus2 === \"center\" ? (listSize() - slideSize(index, true)) / 2 : +focus2 * slideSize(index) || 0;\n  }\n  function getLimit(max2) {\n    return toPosition(max2 ? Components2.Controller.getEnd() : 0, !!options.trimSpace);\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  function exceededLimit(max2, position) {\n    position = isUndefined(position) ? getPosition() : position;\n    var exceededMin = max2 !== true && orient(position) < orient(getLimit(false));\n    var exceededMax = max2 !== false && orient(position) > orient(getLimit(true));\n    return exceededMin || exceededMax;\n  }\n  return {\n    mount,\n    move,\n    jump,\n    translate,\n    shift,\n    cancel,\n    toIndex,\n    toPosition,\n    getPosition,\n    getLimit,\n    exceededLimit,\n    reposition\n  };\n}\nfunction Controller(Splide2, Components2, options) {\n  var _EventInterface5 = EventInterface(Splide2), on = _EventInterface5.on, emit = _EventInterface5.emit;\n  var Move2 = Components2.Move;\n  var getPosition = Move2.getPosition, getLimit = Move2.getLimit, toPosition = Move2.toPosition;\n  var _Components2$Slides = Components2.Slides, isEnough = _Components2$Slides.isEnough, 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  function mount() {\n    init();\n    on([EVENT_UPDATED, EVENT_REFRESH, EVENT_END_INDEX_CHANGED], init);\n    on(EVENT_RESIZED, onResized);\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    if (index !== currIndex) {\n      currIndex = index;\n      Move2.reposition();\n    }\n  }\n  function onResized() {\n    if (endIndex !== getEnd()) {\n      emit(EVENT_END_INDEX_CHANGED);\n    }\n  }\n  function go(control, allowSameIndex, callback) {\n    if (!isBusy()) {\n      var dest = parse(control);\n      var index = loop(dest);\n      if (index > -1 && (allowSameIndex || index !== currIndex)) {\n        setIndex(index);\n        Move2.move(dest, index, prevIndex, callback);\n      }\n    }\n  }\n  function scroll(destination, duration, snap, callback) {\n    Components2.Scroll.scroll(destination, duration, snap, function() {\n      var index = loop(Move2.toIndex(getPosition()));\n      setIndex(omitEnd ? min(index, endIndex) : index);\n      callback && callback();\n    });\n  }\n  function parse(control) {\n    var index = currIndex;\n    if (isString(control)) {\n      var _ref = control.match(/([+\\-<>])(\\d+)?/) || [], indicator = _ref[1], number = _ref[2];\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    return index;\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    if (dest === -1 && isSlide) {\n      if (!approximatelyEqual(getPosition(), getLimit(!prev), 1)) {\n        return prev ? 0 : endIndex;\n      }\n    }\n    return destination ? dest : loop(dest);\n  }\n  function computeDestIndex(dest, from, snapPage) {\n    if (isEnough() || hasFocus()) {\n      var index = computeMovableDestIndex(dest);\n      if (index !== dest) {\n        from = dest;\n        dest = index;\n        snapPage = false;\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    return dest;\n  }\n  function computeMovableDestIndex(dest) {\n    if (isSlide && options.trimSpace === \"move\" && dest !== currIndex) {\n      var position = getPosition();\n      while (position === toPosition(dest, true) && between(dest, 0, Splide2.length - 1, !options.rewind)) {\n        dest < currIndex ? --dest : ++dest;\n      }\n    }\n    return dest;\n  }\n  function loop(index) {\n    return isLoop ? (index + slideCount) % slideCount || 0 : index;\n  }\n  function getEnd() {\n    var end = slideCount - (hasFocus() || isLoop && perMove ? 1 : perPage);\n    while (omitEnd && end-- > 0) {\n      if (toPosition(slideCount - 1, true) !== toPosition(end, true)) {\n        end++;\n        break;\n      }\n    }\n    return clamp(end, 0, slideCount - 1);\n  }\n  function toIndex(page) {\n    return clamp(hasFocus() ? page : perPage * page, 0, endIndex);\n  }\n  function toPage(index) {\n    return hasFocus() ? min(index, endIndex) : floor((index >= endIndex ? slideCount - 1 : index) / perPage);\n  }\n  function toDest(destination) {\n    var closest2 = Move2.toIndex(destination);\n    return isSlide ? clamp(closest2, 0, endIndex) : closest2;\n  }\n  function setIndex(index) {\n    if (index !== currIndex) {\n      prevIndex = currIndex;\n      currIndex = index;\n    }\n  }\n  function getIndex(prev) {\n    return prev ? prevIndex : currIndex;\n  }\n  function hasFocus() {\n    return !isUndefined(options.focus) || options.isNavigation;\n  }\n  function isBusy() {\n    return Splide2.state.is([MOVING, SCROLLING]) && !!options.waitForTransition;\n  }\n  return {\n    mount,\n    go,\n    scroll,\n    getNext,\n    getPrev,\n    getAdjacent,\n    getEnd,\n    setIndex,\n    getIndex,\n    toIndex,\n    toPage,\n    toDest,\n    hasFocus,\n    isBusy\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;\nfunction Arrows(Splide2, Components2, options) {\n  var event = EventInterface(Splide2);\n  var on = event.on, bind = event.bind, emit = event.emit;\n  var classes = options.classes, i18n = options.i18n;\n  var Elements2 = Components2.Elements, Controller2 = Components2.Controller;\n  var placeholder = Elements2.arrows, track = Elements2.track;\n  var wrapper = placeholder;\n  var prev = Elements2.prev;\n  var next = Elements2.next;\n  var created;\n  var wrapperClasses;\n  var arrows = {};\n  function mount() {\n    init();\n    on(EVENT_UPDATED, remount);\n  }\n  function remount() {\n    destroy();\n    mount();\n  }\n  function init() {\n    var enabled = options.arrows;\n    if (enabled && !(prev && next)) {\n      createArrows();\n    }\n    if (prev && next) {\n      assign(arrows, {\n        prev,\n        next\n      });\n      display(wrapper, enabled ? \"\" : \"none\");\n      addClass(wrapper, wrapperClasses = CLASS_ARROWS + \"--\" + options.direction);\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  function destroy() {\n    event.destroy();\n    removeClass(wrapper, wrapperClasses);\n    if (created) {\n      remove(placeholder ? [prev, next] : wrapper);\n      prev = next = null;\n    } else {\n      removeAttribute([prev, next], ALL_ATTRIBUTES);\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  function go(control) {\n    Controller2.go(control, true);\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  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  function update() {\n    if (prev && next) {\n      var index = Splide2.index;\n      var prevIndex = Controller2.getPrev();\n      var nextIndex = Controller2.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  return {\n    arrows,\n    mount,\n    destroy,\n    update\n  };\n}\nvar INTERVAL_DATA_ATTRIBUTE = DATA_ATTRIBUTE + \"-interval\";\nfunction Autoplay(Splide2, Components2, options) {\n  var _EventInterface6 = EventInterface(Splide2), on = _EventInterface6.on, bind = _EventInterface6.bind, emit = _EventInterface6.emit;\n  var interval = RequestInterval(options.interval, Splide2.go.bind(Splide2, \">\"), onAnimationFrame);\n  var isPaused = interval.isPaused;\n  var Elements2 = Components2.Elements, _Components2$Elements4 = Components2.Elements, root = _Components2$Elements4.root, toggle = _Components2$Elements4.toggle;\n  var autoplay = options.autoplay;\n  var hovered;\n  var focused;\n  var stopped = autoplay === \"pause\";\n  function mount() {\n    if (autoplay) {\n      listen();\n      toggle && setAttribute(toggle, ARIA_CONTROLS, Elements2.track.id);\n      stopped || play();\n      update();\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    if (options.pauseOnFocus) {\n      bind(root, \"focusin focusout\", function(e) {\n        focused = e.type === \"focusin\";\n        autoToggle();\n      });\n    }\n    if (toggle) {\n      bind(toggle, \"click\", function() {\n        stopped ? play() : pause(true);\n      });\n    }\n    on([EVENT_MOVE, EVENT_SCROLL, EVENT_REFRESH], interval.rewind);\n    on(EVENT_MOVE, onMove);\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  function pause(stop) {\n    if (stop === void 0) {\n      stop = true;\n    }\n    stopped = !!stop;\n    update();\n    if (!isPaused()) {\n      interval.pause();\n      emit(EVENT_AUTOPLAY_PAUSE);\n    }\n  }\n  function autoToggle() {\n    if (!stopped) {\n      hovered || focused ? pause(false) : play();\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  function onAnimationFrame(rate) {\n    var bar = Elements2.bar;\n    bar && style(bar, \"width\", rate * 100 + \"%\");\n    emit(EVENT_AUTOPLAY_PLAYING, rate);\n  }\n  function onMove(index) {\n    var Slide2 = Components2.Slides.getAt(index);\n    interval.set(Slide2 && +getAttribute(Slide2.slide, INTERVAL_DATA_ATTRIBUTE) || options.interval);\n  }\n  return {\n    mount,\n    destroy: interval.cancel,\n    play,\n    pause,\n    isPaused\n  };\n}\nfunction Cover(Splide2, Components2, options) {\n  var _EventInterface7 = EventInterface(Splide2), on = _EventInterface7.on;\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  function cover(cover2) {\n    Components2.Slides.forEach(function(Slide2) {\n      var img = child(Slide2.container || Slide2.slide, \"img\");\n      if (img && img.src) {\n        toggle(cover2, img, Slide2);\n      }\n    });\n  }\n  function toggle(cover2, img, Slide2) {\n    Slide2.style(\"background\", cover2 ? 'center/cover no-repeat url(\"' + img.src + '\")' : \"\", true);\n    display(img, cover2 ? \"none\" : \"\");\n  }\n  return {\n    mount,\n    destroy: apply(cover, false)\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;\nfunction Scroll(Splide2, Components2, options) {\n  var _EventInterface8 = EventInterface(Splide2), on = _EventInterface8.on, emit = _EventInterface8.emit;\n  var set = Splide2.state.set;\n  var Move2 = Components2.Move;\n  var getPosition = Move2.getPosition, getLimit = Move2.getLimit, exceededLimit = Move2.exceededLimit, translate = Move2.translate;\n  var isSlide = Splide2.is(SLIDE);\n  var interval;\n  var callback;\n  var friction = 1;\n  function mount() {\n    on(EVENT_MOVE, clear);\n    on([EVENT_UPDATED, EVENT_REFRESH], cancel);\n  }\n  function scroll(destination, duration, snap, onScrolled, noConstrain) {\n    var from = getPosition();\n    clear();\n    if (snap && (!isSlide || !exceededLimit())) {\n      var size = Components2.Layout.sliderSize();\n      var offset = sign(destination) * size * floor(abs(destination) / size) || 0;\n      destination = Move2.toPosition(Components2.Controller.toDest(destination % size)) + offset;\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  function onEnd() {\n    set(IDLE);\n    callback && callback();\n    emit(EVENT_SCROLLED);\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    if (isSlide && !noConstrain && exceededLimit()) {\n      friction *= FRICTION_FACTOR;\n      if (abs(diff) < BOUNCE_DIFF_THRESHOLD) {\n        scroll(getLimit(exceededLimit(true)), BOUNCE_DURATION, false, callback, true);\n      }\n    }\n  }\n  function clear() {\n    if (interval) {\n      interval.cancel();\n    }\n  }\n  function cancel() {\n    if (interval && !interval.isPaused()) {\n      clear();\n      onEnd();\n    }\n  }\n  function easing(t) {\n    var easingFunc = options.easingFunc;\n    return easingFunc ? easingFunc(t) : 1 - Math.pow(1 - t, 4);\n  }\n  return {\n    mount,\n    destroy: clear,\n    scroll,\n    cancel\n  };\n}\nvar SCROLL_LISTENER_OPTIONS = {\n  passive: false,\n  capture: true\n};\nfunction Drag(Splide2, Components2, options) {\n  var _EventInterface9 = EventInterface(Splide2), on = _EventInterface9.on, emit = _EventInterface9.emit, bind = _EventInterface9.bind, unbind = _EventInterface9.unbind;\n  var state = Splide2.state;\n  var Move2 = Components2.Move, Scroll2 = Components2.Scroll, Controller2 = Components2.Controller, track = Components2.Elements.track, reduce = Components2.Media.reduce;\n  var _Components2$Directio2 = Components2.Direction, resolve = _Components2$Directio2.resolve, orient = _Components2$Directio2.orient;\n  var getPosition = Move2.getPosition, exceededLimit = Move2.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  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  function init() {\n    var drag = options.drag;\n    disable(!drag);\n    isFree = drag === \"free\";\n  }\n  function onPointerDown(e) {\n    clickPrevented = false;\n    if (!disabled) {\n      var isTouch = isTouchEvent(e);\n      if (isDraggable(e.target) && (isTouch || !e.button)) {\n        if (!Controller2.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          Move2.cancel();\n          Scroll2.cancel();\n          save(e);\n        } else {\n          prevent(e, true);\n        }\n      }\n    }\n  }\n  function onPointerMove(e) {\n    if (!state.is(DRAGGING)) {\n      state.set(DRAGGING);\n      emit(EVENT_DRAG);\n    }\n    if (e.cancelable) {\n      if (dragging) {\n        Move2.translate(basePosition + constrain(diffCoord(e)));\n        var expired = diffTime(e) > LOG_INTERVAL;\n        var hasExceeded = exceeded !== (exceeded = exceededLimit());\n        if (expired || hasExceeded) {\n          save(e);\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  function onPointerUp(e) {\n    if (state.is(DRAGGING)) {\n      state.set(IDLE);\n      emit(EVENT_DRAGGED);\n    }\n    if (dragging) {\n      move(e);\n      prevent(e);\n    }\n    unbind(target, POINTER_MOVE_EVENTS, onPointerMove);\n    unbind(target, POINTER_UP_EVENTS, onPointerUp);\n    dragging = false;\n  }\n  function onClick(e) {\n    if (!disabled && clickPrevented) {\n      prevent(e, true);\n    }\n  }\n  function save(e) {\n    prevBaseEvent = baseEvent;\n    baseEvent = e;\n    basePosition = getPosition();\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    if (isFree) {\n      Controller2.scroll(destination, 0, options.snap);\n    } else if (Splide2.is(FADE)) {\n      Controller2.go(orient(sign(velocity)) < 0 ? rewind ? \"<\" : \"-\" : rewind ? \">\" : \"+\");\n    } else if (Splide2.is(SLIDE) && exceeded && rewind) {\n      Controller2.go(exceededLimit(true) ? \">\" : \"<\");\n    } else {\n      Controller2.go(Controller2.toDest(destination), true);\n    }\n    reduce(true);\n  }\n  function shouldStart(e) {\n    var thresholds = options.dragMinThreshold;\n    var isObj = isObject$1(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  function isSliderDirection(e) {\n    return abs(diffCoord(e)) > abs(diffCoord(e, true));\n  }\n  function computeVelocity(e) {\n    if (Splide2.is(LOOP) || !exceeded) {\n      var time = diffTime(e);\n      if (time && time < LOG_INTERVAL) {\n        return diffCoord(e) / time;\n      }\n    }\n    return 0;\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  function diffCoord(e, orthogonal) {\n    return coordOf(e, orthogonal) - coordOf(getBaseEvent(e), orthogonal);\n  }\n  function diffTime(e) {\n    return timeOf(e) - timeOf(getBaseEvent(e));\n  }\n  function getBaseEvent(e) {\n    return baseEvent === e && prevBaseEvent || baseEvent;\n  }\n  function coordOf(e, orthogonal) {\n    return (isTouchEvent(e) ? e.changedTouches[0] : e)[\"page\" + resolve(orthogonal ? \"Y\" : \"X\")];\n  }\n  function constrain(diff) {\n    return diff / (exceeded && Splide2.is(SLIDE) ? FRICTION : 1);\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  function isTouchEvent(e) {\n    return typeof TouchEvent !== \"undefined\" && e instanceof TouchEvent;\n  }\n  function isDragging() {\n    return dragging;\n  }\n  function disable(value) {\n    disabled = value;\n  }\n  return {\n    mount,\n    disable,\n    isDragging\n  };\n}\nvar NORMALIZATION_MAP = {\n  Spacebar: \" \",\n  Right: ARROW_RIGHT,\n  Left: ARROW_LEFT,\n  Up: ARROW_UP,\n  Down: ARROW_DOWN\n};\nfunction normalizeKey(key) {\n  key = isString(key) ? key : key.key;\n  return NORMALIZATION_MAP[key] || key;\n}\nvar KEYBOARD_EVENT = \"keydown\";\nfunction Keyboard(Splide2, Components2, options) {\n  var _EventInterface10 = EventInterface(Splide2), on = _EventInterface10.on, bind = _EventInterface10.bind, unbind = _EventInterface10.unbind;\n  var root = Splide2.root;\n  var resolve = Components2.Direction.resolve;\n  var target;\n  var disabled;\n  function mount() {\n    init();\n    on(EVENT_UPDATED, destroy);\n    on(EVENT_UPDATED, init);\n    on(EVENT_MOVE, onMove);\n  }\n  function init() {\n    var keyboard = options.keyboard;\n    if (keyboard) {\n      target = keyboard === \"global\" ? window : root;\n      bind(target, KEYBOARD_EVENT, onKeydown);\n    }\n  }\n  function destroy() {\n    unbind(target, KEYBOARD_EVENT);\n  }\n  function disable(value) {\n    disabled = value;\n  }\n  function onMove() {\n    var _disabled = disabled;\n    disabled = true;\n    nextTick(function() {\n      disabled = _disabled;\n    });\n  }\n  function onKeydown(e) {\n    if (!disabled) {\n      var key = normalizeKey(e);\n      if (key === resolve(ARROW_LEFT)) {\n        Splide2.go(\"<\");\n      } else if (key === resolve(ARROW_RIGHT)) {\n        Splide2.go(\">\");\n      }\n    }\n  }\n  return {\n    mount,\n    destroy,\n    disable\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 + \"]\";\nfunction LazyLoad(Splide2, Components2, options) {\n  var _EventInterface11 = EventInterface(Splide2), on = _EventInterface11.on, off = _EventInterface11.off, bind = _EventInterface11.bind, emit = _EventInterface11.emit;\n  var isSequential = options.lazyLoad === \"sequential\";\n  var events = [EVENT_MOVED, EVENT_SCROLLED];\n  var entries = [];\n  function mount() {\n    if (options.lazyLoad) {\n      init();\n      on(EVENT_REFRESH, init);\n    }\n  }\n  function init() {\n    empty(entries);\n    register();\n    if (isSequential) {\n      loadNext();\n    } else {\n      off(events);\n      on(events, check);\n      check();\n    }\n  }\n  function register() {\n    Components2.Slides.forEach(function(Slide2) {\n      queryAll(Slide2.slide, IMAGE_SELECTOR).forEach(function(img) {\n        var src = getAttribute(img, SRC_DATA_ATTRIBUTE);\n        var srcset = getAttribute(img, SRCSET_DATA_ATTRIBUTE);\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, Slide2, spinner]);\n          img.src || display(img, \"none\");\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  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  function onLoad(data, e) {\n    var img = data[0], Slide2 = data[1];\n    removeClass(Slide2.slide, CLASS_LOADING);\n    if (e.type !== \"error\") {\n      remove(data[2]);\n      display(img, \"\");\n      emit(EVENT_LAZYLOAD_LOADED, img, Slide2);\n      emit(EVENT_RESIZE);\n    }\n    isSequential && loadNext();\n  }\n  function loadNext() {\n    entries.length && load(entries.shift());\n  }\n  return {\n    mount,\n    destroy: apply(empty, entries),\n    check\n  };\n}\nfunction Pagination(Splide2, Components2, options) {\n  var event = EventInterface(Splide2);\n  var on = event.on, emit = event.emit, bind = event.bind;\n  var Slides2 = Components2.Slides, Elements2 = Components2.Elements, Controller2 = Components2.Controller;\n  var hasFocus = Controller2.hasFocus, getIndex = Controller2.getIndex, go = Controller2.go;\n  var resolve = Components2.Direction.resolve;\n  var placeholder = Elements2.pagination;\n  var items = [];\n  var list;\n  var paginationClasses;\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    if (enabled) {\n      on([EVENT_MOVE, EVENT_SCROLL, EVENT_SCROLLED], update);\n      createPagination();\n      update();\n      emit(EVENT_PAGINATION_MOUNTED, {\n        list,\n        items\n      }, getAt(Splide2.index));\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    event.destroy();\n  }\n  function createPagination() {\n    var length = Splide2.length;\n    var classes = options.classes, i18n = options.i18n, perPage = options.perPage;\n    var max2 = hasFocus() ? Controller2.getEnd() + 1 : ceil(length / perPage);\n    list = placeholder || create(\"ul\", classes.pagination, Elements2.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    for (var i = 0; i < max2; 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 = Slides2.getIn(i).map(function(Slide2) {\n        return Slide2.slide.id;\n      });\n      var text = !hasFocus() && perPage > 1 ? i18n.pageX : i18n.slideX;\n      bind(button, \"click\", apply(onClick, i));\n      if (options.paginationKeyboard) {\n        bind(button, \"keydown\", apply(onKeydown, i));\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,\n        button,\n        page: i\n      });\n    }\n  }\n  function onClick(page) {\n    go(\">\" + page, true);\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    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    var item = items[nextPage];\n    if (item) {\n      focus(item.button);\n      go(\">\" + nextPage);\n      prevent(e, true);\n    }\n  }\n  function getDirection() {\n    return options.paginationDirection || options.direction;\n  }\n  function getAt(index) {\n    return items[Controller2.toPage(index)];\n  }\n  function update() {\n    var prev = getAt(getIndex(true));\n    var curr = getAt(getIndex());\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    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    emit(EVENT_PAGINATION_UPDATED, {\n      list,\n      items\n    }, prev, curr);\n  }\n  return {\n    items,\n    mount,\n    destroy,\n    getAt,\n    update\n  };\n}\nvar TRIGGER_KEYS = [\" \", \"Enter\"];\nfunction Sync(Splide2, Components2, options) {\n  var isNavigation = options.isNavigation, slideFocus = options.slideFocus;\n  var events = [];\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    if (isNavigation) {\n      navigate();\n    }\n  }\n  function destroy() {\n    events.forEach(function(event) {\n      event.destroy();\n    });\n    empty(events);\n  }\n  function remount() {\n    destroy();\n    mount();\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  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  function update() {\n    setAttribute(Components2.Elements.list, ARIA_ORIENTATION, options.direction === TTB ? \"vertical\" : \"\");\n  }\n  function onClick(Slide2) {\n    Splide2.go(Slide2.index);\n  }\n  function onKeydown(Slide2, e) {\n    if (includes(TRIGGER_KEYS, normalizeKey(e))) {\n      onClick(Slide2);\n      prevent(e);\n    }\n  }\n  return {\n    setup: apply(Components2.Media.set, {\n      slideFocus: isUndefined(slideFocus) ? isNavigation : slideFocus\n    }, true),\n    mount,\n    destroy,\n    remount\n  };\n}\nfunction Wheel(Splide2, Components2, options) {\n  var _EventInterface12 = EventInterface(Splide2), bind = _EventInterface12.bind;\n  var lastTime = 0;\n  function mount() {\n    if (options.wheel) {\n      bind(Components2.Elements.track, \"wheel\", onWheel, SCROLL_LISTENER_OPTIONS);\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      var _min = options.wheelMinThreshold || 0;\n      var sleep = options.wheelSleep || 0;\n      if (abs(deltaY) > _min && timeStamp - lastTime > sleep) {\n        Splide2.go(backwards ? \"<\" : \">\");\n        lastTime = timeStamp;\n      }\n      shouldPrevent(backwards) && prevent(e);\n    }\n  }\n  function shouldPrevent(backwards) {\n    return !options.releaseWheel || Splide2.state.is(MOVING) || Components2.Controller.getAdjacent(backwards) !== -1;\n  }\n  return {\n    mount\n  };\n}\nvar SR_REMOVAL_DELAY = 90;\nfunction Live(Splide2, Components2, options) {\n  var _EventInterface13 = EventInterface(Splide2), on = _EventInterface13.on;\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  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  function toggle(active) {\n    setAttribute(track, ARIA_BUSY, active);\n    if (active) {\n      append(track, sr);\n      interval.start();\n    } else {\n      remove(sr);\n      interval.cancel();\n    }\n  }\n  function destroy() {\n    removeAttribute(track, [ARIA_LIVE, ARIA_ATOMIC, ARIA_BUSY]);\n    remove(sr);\n  }\n  function disable(disabled) {\n    if (enabled) {\n      setAttribute(track, ARIA_LIVE, disabled ? \"off\" : \"polite\");\n    }\n  }\n  return {\n    mount,\n    disable,\n    destroy\n  };\n}\nvar ComponentConstructors = /* @__PURE__ */ Object.freeze({\n  __proto__: null,\n  Media,\n  Direction,\n  Elements,\n  Slides,\n  Layout,\n  Clones,\n  Move,\n  Controller,\n  Arrows,\n  Autoplay,\n  Cover,\n  Scroll,\n  Drag,\n  Keyboard,\n  LazyLoad,\n  Pagination,\n  Sync,\n  Wheel,\n  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};\nfunction Fade(Splide2, Components2, options) {\n  var Slides2 = Components2.Slides;\n  function mount() {\n    EventInterface(Splide2).on([EVENT_MOUNTED, EVENT_REFRESH], init);\n  }\n  function init() {\n    Slides2.forEach(function(Slide2) {\n      Slide2.style(\"transform\", \"translateX(-\" + 100 * Slide2.index + \"%)\");\n    });\n  }\n  function start(index, done) {\n    Slides2.style(\"transition\", \"opacity \" + options.speed + \"ms \" + options.easing);\n    nextTick(done);\n  }\n  return {\n    mount,\n    start,\n    cancel: noop\n  };\n}\nfunction Slide(Splide2, Components2, options) {\n  var Move2 = Components2.Move, Controller2 = Components2.Controller, Scroll2 = Components2.Scroll;\n  var list = Components2.Elements.list;\n  var transition = apply(style, list, \"transition\");\n  var endCallback;\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  function start(index, done) {\n    var destination = Move2.toPosition(index, true);\n    var position = Move2.getPosition();\n    var speed = getSpeed(index);\n    if (abs(destination - position) >= 1 && speed >= 1) {\n      if (options.useScroll) {\n        Scroll2.scroll(destination, speed, false, done);\n      } else {\n        transition(\"transform \" + speed + \"ms \" + options.easing);\n        Move2.translate(destination, true);\n        endCallback = done;\n      }\n    } else {\n      Move2.jump(index);\n      done();\n    }\n  }\n  function cancel() {\n    transition(\"\");\n    Scroll2.cancel();\n  }\n  function getSpeed(index) {\n    var rewindSpeed = options.rewindSpeed;\n    if (Splide2.is(SLIDE) && rewindSpeed) {\n      var prev = Controller2.getIndex(true);\n      var end = Controller2.getEnd();\n      if (prev === 0 && index >= end || prev >= end && index === 0) {\n        return rewindSpeed;\n      }\n    }\n    return options.speed;\n  }\n  return {\n    mount,\n    start,\n    cancel\n  };\n}\nvar _Splide = /* @__PURE__ */ function() {\n  function _Splide2(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$1({\n      label: getAttribute(root, ARIA_LABEL) || \"\",\n      labelledby: getAttribute(root, ARIA_LABELLEDBY) || \"\"\n    }, DEFAULTS, _Splide2.defaults, options || {});\n    try {\n      merge$1(options, JSON.parse(getAttribute(root, DATA_ATTRIBUTE)));\n    } catch (e) {\n      assert(false, \"Invalid JSON\");\n    }\n    this._o = Object.create(merge$1({}, options));\n  }\n  var _proto = _Splide2.prototype;\n  _proto.mount = function mount(Extensions, Transition) {\n    var _this = this;\n    var state = this.state, 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$1(Constructors, function(Component, key) {\n      var component = Component(_this, Components2, _this._o);\n      Components2[key] = component;\n      component.setup && component.setup();\n    });\n    forOwn$1(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  _proto.sync = function sync(splide) {\n    this.splides.push({\n      splide\n    });\n    splide.splides.push({\n      splide: this,\n      isParent: true\n    });\n    if (this.state.is(IDLE)) {\n      this._C.Sync.remount();\n      splide.Components.Sync.remount();\n    }\n    return this;\n  };\n  _proto.go = function go(control) {\n    this._C.Controller.go(control);\n    return this;\n  };\n  _proto.on = function on(events, callback) {\n    this.event.on(events, callback);\n    return this;\n  };\n  _proto.off = function off(events) {\n    this.event.off(events);\n    return this;\n  };\n  _proto.emit = function emit(event) {\n    var _this$event;\n    (_this$event = this.event).emit.apply(_this$event, [event].concat(slice(arguments, 1)));\n    return this;\n  };\n  _proto.add = function add(slides, index) {\n    this._C.Slides.add(slides, index);\n    return this;\n  };\n  _proto.remove = function remove2(matcher) {\n    this._C.Slides.remove(matcher);\n    return this;\n  };\n  _proto.is = function is(type) {\n    return this._o.type === type;\n  };\n  _proto.refresh = function refresh() {\n    this.emit(EVENT_REFRESH);\n    return this;\n  };\n  _proto.destroy = function destroy(completely) {\n    if (completely === void 0) {\n      completely = true;\n    }\n    var event = this.event, state = this.state;\n    if (state.is(CREATED)) {\n      EventInterface(this).on(EVENT_READY, this.destroy.bind(this, completely));\n    } else {\n      forOwn$1(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    return this;\n  };\n  _createClass(_Splide2, [{\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  return _Splide2;\n}();\nvar Splide$1 = _Splide;\nSplide$1.defaults = {};\nSplide$1.STATES = STATES;\nconst EVENTS = [\n  EVENT_ACTIVE,\n  EVENT_ARROWS_MOUNTED,\n  EVENT_ARROWS_UPDATED,\n  EVENT_AUTOPLAY_PAUSE,\n  EVENT_AUTOPLAY_PLAY,\n  EVENT_AUTOPLAY_PLAYING,\n  EVENT_CLICK,\n  EVENT_DESTROY,\n  EVENT_DRAG,\n  EVENT_DRAGGED,\n  EVENT_DRAGGING,\n  EVENT_HIDDEN,\n  EVENT_INACTIVE,\n  EVENT_LAZYLOAD_LOADED,\n  EVENT_MOUNTED,\n  EVENT_MOVE,\n  EVENT_MOVED,\n  EVENT_NAVIGATION_MOUNTED,\n  EVENT_PAGINATION_MOUNTED,\n  EVENT_PAGINATION_UPDATED,\n  EVENT_REFRESH,\n  EVENT_RESIZE,\n  EVENT_RESIZED,\n  EVENT_SCROLL,\n  EVENT_SCROLLED,\n  EVENT_UPDATED,\n  EVENT_VISIBLE\n];\nconst SPLIDE_INJECTION_KEY = \"splide\";\nfunction isObject(subject) {\n  return subject !== null && typeof subject === \"object\";\n}\nfunction forOwn(object, iteratee) {\n  if (object) {\n    const keys = Object.keys(object);\n    for (let i = 0; i < keys.length; i++) {\n      const key = keys[i];\n      if (key !== \"__proto__\") {\n        if (iteratee(object[key], key) === false) {\n          break;\n        }\n      }\n    }\n  }\n  return object;\n}\nfunction merge(object, source) {\n  const merged = object;\n  forOwn(source, (value, key) => {\n    if (Array.isArray(value)) {\n      merged[key] = value.slice();\n    } else if (isObject(value)) {\n      merged[key] = merge(isObject(merged[key]) ? merged[key] : {}, value);\n    } else {\n      merged[key] = value;\n    }\n  });\n  return merged;\n}\nconst _sfc_main$2 = vue.defineComponent({\n  name: \"SplideTrack\",\n  setup() {\n    vue.onUpdated(() => {\n      var _a;\n      const splide = vue.inject(SPLIDE_INJECTION_KEY);\n      (_a = splide == null ? void 0 : splide.value) == null ? void 0 : _a.refresh();\n    });\n  }\n});\nconst _export_sfc = (sfc, props) => {\n  const target = sfc.__vccOpts || sfc;\n  for (const [key, val] of props) {\n    target[key] = val;\n  }\n  return target;\n};\nconst _hoisted_1$1 = { class: \"splide__track\" };\nconst _hoisted_2 = { class: \"splide__list\" };\nfunction _sfc_render$2(_ctx, _cache, $props, $setup, $data, $options) {\n  return vue.openBlock(), vue.createElementBlock(\"div\", _hoisted_1$1, [\n    vue.createElementVNode(\"ul\", _hoisted_2, [\n      vue.renderSlot(_ctx.$slots, \"default\")\n    ])\n  ]);\n}\nconst SplideTrack = /* @__PURE__ */ _export_sfc(_sfc_main$2, [[\"render\", _sfc_render$2]]);\nconst _sfc_main$1 = vue.defineComponent({\n  name: \"Splide\",\n  emits: EVENTS.map((event) => `splide:${event}`),\n  components: { SplideTrack },\n  props: {\n    tag: {\n      default: \"div\",\n      type: String\n    },\n    options: {\n      default: {},\n      type: Object\n    },\n    extensions: Object,\n    transition: Function,\n    hasTrack: {\n      default: true,\n      type: Boolean\n    }\n  },\n  setup(props, context) {\n    const splide = vue.ref();\n    const root = vue.ref();\n    vue.onMounted(() => {\n      if (root.value) {\n        splide.value = new Splide$1(root.value, props.options);\n        bind(splide.value);\n        splide.value.mount(props.extensions, props.transition);\n      }\n    });\n    vue.onBeforeUnmount(() => {\n      var _a;\n      (_a = splide.value) == null ? void 0 : _a.destroy();\n    });\n    vue.watch(() => merge({}, props.options), (options) => {\n      if (splide.value) {\n        splide.value.options = options;\n      }\n    }, { deep: true });\n    vue.provide(SPLIDE_INJECTION_KEY, splide);\n    const index = vue.computed(() => {\n      var _a;\n      return ((_a = splide.value) == null ? void 0 : _a.index) || 0;\n    });\n    const length = vue.computed(() => {\n      var _a;\n      return ((_a = splide.value) == null ? void 0 : _a.length) || 0;\n    });\n    function go(control) {\n      var _a;\n      (_a = splide.value) == null ? void 0 : _a.go(control);\n    }\n    function sync(target) {\n      var _a;\n      (_a = splide.value) == null ? void 0 : _a.sync(target);\n    }\n    function bind(splide2) {\n      EVENTS.forEach((event) => {\n        splide2.on(event, (...args) => {\n          context.emit(`splide:${event}`, splide2, ...args);\n        });\n      });\n    }\n    return {\n      splide,\n      root,\n      index,\n      length,\n      go,\n      sync\n    };\n  }\n});\nfunction _sfc_render$1(_ctx, _cache, $props, $setup, $data, $options) {\n  const _component_SplideTrack = vue.resolveComponent(\"SplideTrack\");\n  return vue.openBlock(), vue.createBlock(vue.resolveDynamicComponent(_ctx.tag), {\n    class: \"splide\",\n    ref: \"root\"\n  }, {\n    default: vue.withCtx(() => [\n      _ctx.hasTrack ? (vue.openBlock(), vue.createBlock(_component_SplideTrack, { key: 0 }, {\n        default: vue.withCtx(() => [\n          vue.renderSlot(_ctx.$slots, \"default\")\n        ]),\n        _: 3\n      })) : vue.renderSlot(_ctx.$slots, \"default\", { key: 1 })\n    ]),\n    _: 3\n  }, 512);\n}\nconst Splide = /* @__PURE__ */ _export_sfc(_sfc_main$1, [[\"render\", _sfc_render$1]]);\nconst _sfc_main = vue.defineComponent({\n  name: \"SplideSlide\"\n});\nconst _hoisted_1 = { class: \"splide__slide\" };\nfunction _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {\n  return vue.openBlock(), vue.createElementBlock(\"li\", _hoisted_1, [\n    vue.renderSlot(_ctx.$slots, \"default\")\n  ]);\n}\nconst SplideSlide = /* @__PURE__ */ _export_sfc(_sfc_main, [[\"render\", _sfc_render]]);\nconst VueSplide = {\n  install(app) {\n    app.component(Splide.name, Splide);\n    app.component(SplideSlide.name, SplideSlide);\n  }\n};\nexports.Splide = Splide;\nexports.SplideSlide = SplideSlide;\nexports.SplideTrack = SplideTrack;\nexports.default = VueSplide;\n"
  },
  {
    "path": "dist/js/vue-splide.esm.js",
    "content": "import { defineComponent, onUpdated, inject, openBlock, createElementBlock, createElementVNode, renderSlot, ref, onMounted, onBeforeUnmount, watch, provide, computed, resolveComponent, createBlock, resolveDynamicComponent, withCtx } from \"vue\";\nfunction _defineProperties(target, props) {\n  for (var i = 0; i < props.length; i++) {\n    var descriptor = props[i];\n    descriptor.enumerable = descriptor.enumerable || false;\n    descriptor.configurable = true;\n    if (\"value\" in descriptor)\n      descriptor.writable = true;\n    Object.defineProperty(target, descriptor.key, descriptor);\n  }\n}\nfunction _createClass(Constructor, protoProps, staticProps) {\n  if (protoProps)\n    _defineProperties(Constructor.prototype, protoProps);\n  if (staticProps)\n    _defineProperties(Constructor, staticProps);\n  Object.defineProperty(Constructor, \"prototype\", { writable: false });\n  return Constructor;\n}\n/*!\n * Splide.js\n * Version  : 4.1.3\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,\n  MOUNTED,\n  IDLE,\n  MOVING,\n  SCROLLING,\n  DRAGGING,\n  DESTROYED\n};\nfunction empty(array) {\n  array.length = 0;\n}\nfunction slice(arrayLike, start, end) {\n  return Array.prototype.slice.call(arrayLike, start, end);\n}\nfunction apply(func) {\n  return func.bind.apply(func, [null].concat(slice(arguments, 1)));\n}\nvar nextTick = setTimeout;\nvar noop = function noop2() {\n};\nfunction raf(func) {\n  return requestAnimationFrame(func);\n}\nfunction typeOf(type, subject) {\n  return typeof subject === type;\n}\nfunction isObject$1(subject) {\n  return !isNull(subject) && typeOf(\"object\", subject);\n}\nvar isArray = Array.isArray;\nvar isFunction = apply(typeOf, \"function\");\nvar isString = apply(typeOf, \"string\");\nvar isUndefined = apply(typeOf, \"undefined\");\nfunction isNull(subject) {\n  return subject === null;\n}\nfunction isHTMLElement(subject) {\n  try {\n    return subject instanceof (subject.ownerDocument.defaultView || window).HTMLElement;\n  } catch (e) {\n    return false;\n  }\n}\nfunction toArray(value) {\n  return isArray(value) ? value : [value];\n}\nfunction forEach(values, iteratee) {\n  toArray(values).forEach(iteratee);\n}\nfunction includes(array, value) {\n  return array.indexOf(value) > -1;\n}\nfunction push(array, items) {\n  array.push.apply(array, toArray(items));\n  return array;\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}\nfunction addClass(elm, classes) {\n  toggleClass(elm, isString(classes) ? classes.split(\" \") : classes, true);\n}\nfunction append(parent, children2) {\n  forEach(children2, parent.appendChild.bind(parent));\n}\nfunction before(nodes, ref2) {\n  forEach(nodes, function(node) {\n    var parent = (ref2 || node).parentNode;\n    if (parent) {\n      parent.insertBefore(node, ref2);\n    }\n  });\n}\nfunction matches(elm, selector) {\n  return isHTMLElement(elm) && (elm[\"msMatchesSelector\"] || elm.matches).call(elm, selector);\n}\nfunction children(parent, selector) {\n  var children2 = parent ? slice(parent.children) : [];\n  return selector ? children2.filter(function(child2) {\n    return matches(child2, selector);\n  }) : children2;\n}\nfunction child(parent, selector) {\n  return selector ? children(parent, selector)[0] : parent.firstElementChild;\n}\nvar ownKeys = Object.keys;\nfunction forOwn$1(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  return object;\n}\nfunction assign(object) {\n  slice(arguments, 1).forEach(function(source) {\n    forOwn$1(source, function(value, key) {\n      object[key] = source[key];\n    });\n  });\n  return object;\n}\nfunction merge$1(object) {\n  slice(arguments, 1).forEach(function(source) {\n    forOwn$1(source, function(value, key) {\n      if (isArray(value)) {\n        object[key] = value.slice();\n      } else if (isObject$1(value)) {\n        object[key] = merge$1({}, isObject$1(object[key]) ? object[key] : {}, value);\n      } else {\n        object[key] = value;\n      }\n    });\n  });\n  return object;\n}\nfunction omit(object, keys) {\n  forEach(keys || ownKeys(object), function(key) {\n    delete object[key];\n  });\n}\nfunction removeAttribute(elms, attrs) {\n  forEach(elms, function(elm) {\n    forEach(attrs, function(attr) {\n      elm && elm.removeAttribute(attr);\n    });\n  });\n}\nfunction setAttribute(elms, attrs, value) {\n  if (isObject$1(attrs)) {\n    forOwn$1(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}\nfunction create(tag, attrs, parent) {\n  var elm = document.createElement(tag);\n  if (attrs) {\n    isString(attrs) ? addClass(elm, attrs) : setAttribute(elm, attrs);\n  }\n  parent && append(parent, elm);\n  return elm;\n}\nfunction style(elm, prop, value) {\n  if (isUndefined(value)) {\n    return getComputedStyle(elm)[prop];\n  }\n  if (!isNull(value)) {\n    elm.style[prop] = \"\" + value;\n  }\n}\nfunction display(elm, display2) {\n  style(elm, \"display\", display2);\n}\nfunction focus(elm) {\n  elm[\"setActive\"] && elm[\"setActive\"]() || elm.focus({\n    preventScroll: true\n  });\n}\nfunction getAttribute(elm, attr) {\n  return elm.getAttribute(attr);\n}\nfunction hasClass(elm, className) {\n  return elm && elm.classList.contains(className);\n}\nfunction rect(target) {\n  return target.getBoundingClientRect();\n}\nfunction remove(nodes) {\n  forEach(nodes, function(node) {\n    if (node && node.parentNode) {\n      node.parentNode.removeChild(node);\n    }\n  });\n}\nfunction parseHtml(html) {\n  return child(new DOMParser().parseFromString(html, \"text/html\").body);\n}\nfunction prevent(e, stopPropagation) {\n  e.preventDefault();\n  if (stopPropagation) {\n    e.stopPropagation();\n    e.stopImmediatePropagation();\n  }\n}\nfunction query(parent, selector) {\n  return parent && parent.querySelector(selector);\n}\nfunction queryAll(parent, selector) {\n  return selector ? slice(parent.querySelectorAll(selector)) : [];\n}\nfunction removeClass(elm, classes) {\n  toggleClass(elm, classes, false);\n}\nfunction timeOf(e) {\n  return e.timeStamp;\n}\nfunction unit(value) {\n  return isString(value) ? value : value ? value + \"px\" : \"\";\n}\nvar PROJECT_CODE = \"splide\";\nvar DATA_ATTRIBUTE = \"data-\" + PROJECT_CODE;\nfunction assert(condition, message) {\n  if (!condition) {\n    throw new Error(\"[\" + PROJECT_CODE + \"] \" + (message || \"\"));\n  }\n}\nvar min = Math.min, max = Math.max, floor = Math.floor, ceil = Math.ceil, abs = Math.abs;\nfunction approximatelyEqual(x, y, epsilon) {\n  return abs(x - y) < epsilon;\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}\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}\nfunction sign(x) {\n  return +(x > 0) - +(x < 0);\n}\nfunction format(string, replacements) {\n  forEach(replacements, function(replacement) {\n    string = string.replace(\"%s\", \"\" + replacement);\n  });\n  return string;\n}\nfunction pad(number) {\n  return number < 10 ? \"0\" + number : \"\" + number;\n}\nvar ids = {};\nfunction uniqueId(prefix) {\n  return \"\" + prefix + pad(ids[prefix] = (ids[prefix] || 0) + 1);\n}\nfunction EventBinder() {\n  var listeners = [];\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  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        return true;\n      });\n    });\n  }\n  function dispatch(target, type, detail) {\n    var e;\n    var bubbles = true;\n    if (typeof CustomEvent === \"function\") {\n      e = new CustomEvent(type, {\n        bubbles,\n        detail\n      });\n    } else {\n      e = document.createEvent(\"CustomEvent\");\n      e.initCustomEvent(type, bubbles, false, detail);\n    }\n    target.dispatchEvent(e);\n    return e;\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  function destroy() {\n    listeners.forEach(function(data) {\n      data[4]();\n    });\n    empty(listeners);\n  }\n  return {\n    bind,\n    unbind,\n    dispatch,\n    destroy\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\";\nfunction EventInterface(Splide2) {\n  var bus = Splide2 ? Splide2.event.bus : document.createDocumentFragment();\n  var binder = EventBinder();\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  function emit(event) {\n    binder.dispatch(bus, event, slice(arguments, 1));\n  }\n  if (Splide2) {\n    Splide2.event.on(EVENT_DESTROY, binder.destroy);\n  }\n  return assign(binder, {\n    bus,\n    on,\n    off: apply(binder.unbind, bus),\n    emit\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  function update() {\n    if (!paused) {\n      rate = interval ? min((now() - startTime) / interval, 1) : 1;\n      onUpdate && onUpdate(rate);\n      if (rate >= 1) {\n        onInterval();\n        startTime = now();\n        if (limit && ++count >= limit) {\n          return pause();\n        }\n      }\n      id = raf(update);\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  function pause() {\n    paused = true;\n  }\n  function rewind() {\n    startTime = now();\n    rate = 0;\n    if (onUpdate) {\n      onUpdate(rate);\n    }\n  }\n  function cancel() {\n    id && cancelAnimationFrame(id);\n    rate = 0;\n    id = 0;\n    paused = true;\n  }\n  function set(time) {\n    interval = time;\n  }\n  function isPaused() {\n    return paused;\n  }\n  return {\n    start,\n    rewind,\n    pause,\n    cancel,\n    set,\n    isPaused\n  };\n}\nfunction State(initialState) {\n  var state = initialState;\n  function set(value) {\n    state = value;\n  }\n  function is(states) {\n    return includes(toArray(states), state);\n  }\n  return {\n    set,\n    is\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}\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  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  function destroy(completely) {\n    if (completely) {\n      binder.destroy();\n    }\n  }\n  function register(options2, query2) {\n    var queryList = matchMedia(query2);\n    binder.bind(queryList, \"change\", update);\n    queries.push([options2, queryList]);\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$1(merged2, entry[1].matches ? entry[0] : {});\n    }, {});\n    omit(options);\n    set(merged);\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  function reduce(enable) {\n    if (matchMedia(MEDIA_PREFERS_REDUCED_MOTION).matches) {\n      enable ? merge$1(options, reducedMotion) : omit(options, ownKeys(reducedMotion));\n    }\n  }\n  function set(opts, base, notify) {\n    merge$1(options, opts);\n    base && merge$1(Object.getPrototypeOf(options), opts);\n    if (notify || !state.is(CREATED)) {\n      Splide2.emit(EVENT_UPDATED, options);\n    }\n  }\n  return {\n    setup,\n    destroy,\n    reduce,\n    set\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 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};\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  function orient(value) {\n    return value * (options.direction === RTL ? 1 : -1);\n  }\n  return {\n    resolve,\n    orient\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_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};\nfunction closest(from, selector) {\n  if (isFunction(from.closest)) {\n    return from.closest(selector);\n  }\n  var elm = from;\n  while (elm && elm.nodeType === 1) {\n    if (matches(elm, selector)) {\n      break;\n    }\n    elm = elm.parentElement;\n  }\n  return elm;\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\";\nfunction Elements(Splide2, Components2, options) {\n  var _EventInterface = EventInterface(Splide2), on = _EventInterface.on, bind = _EventInterface.bind;\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  function setup() {\n    collect();\n    init();\n    update();\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  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  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  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$1({\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,\n      track,\n      list,\n      slides\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    if (!getAttribute(root, ROLE) && root.tagName !== \"SECTION\" && role) {\n      setAttribute(root, ROLE, role);\n    }\n    setAttribute(root, ARIA_ROLEDESCRIPTION, i18n.carousel);\n    setAttribute(list, ROLE, \"presentation\");\n  }\n  function find(selector) {\n    var elm = query(root, selector);\n    return elm && closest(elm, \".\" + CLASS_ROOT) === root ? elm : void 0;\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  return assign(elements, {\n    setup,\n    mount,\n    destroy\n  });\n}\nvar SLIDE = \"slide\";\nvar LOOP = \"loop\";\nvar FADE = \"fade\";\nfunction Slide$1(Splide2, index, slideIndex, slide) {\n  var event = EventInterface(Splide2);\n  var on = event.on, emit = event.emit, bind = event.bind;\n  var Components = Splide2.Components, root = Splide2.root, options = Splide2.options;\n  var isNavigation = options.isNavigation, updateOnMove = options.updateOnMove, i18n = options.i18n, pagination = options.pagination, 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  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    listen();\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    if (updateOnMove) {\n      on(EVENT_MOVE, onMove);\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  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  function onMove() {\n    if (!destroyed) {\n      update();\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  function updateActivity() {\n    var active = isActive();\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  function updateVisibility() {\n    var visible = isVisible();\n    var hidden = !visible && (!isActive() || isClone);\n    if (!Splide2.state.is([MOVING, SCROLLING])) {\n      setAttribute(slide, ARIA_HIDDEN, hidden || \"\");\n    }\n    setAttribute(queryAll(slide, options.focusableNodes || \"\"), TAB_INDEX, hidden ? -1 : \"\");\n    if (slideFocus) {\n      setAttribute(slide, TAB_INDEX, hidden ? -1 : 0);\n    }\n    if (visible !== hasClass(slide, CLASS_VISIBLE)) {\n      toggleClass(slide, CLASS_VISIBLE, visible);\n      emit(visible ? EVENT_VISIBLE : EVENT_HIDDEN, self);\n    }\n    if (!visible && document.activeElement === slide) {\n      var Slide2 = Components.Slides.getAt(Splide2.index);\n      Slide2 && focus(Slide2.slide);\n    }\n  }\n  function style$1(prop, value, useContainer) {\n    style(useContainer && container || slide, prop, value);\n  }\n  function isActive() {\n    var curr = Splide2.index;\n    return curr === index || options.cloneStatus && curr === slideIndex;\n  }\n  function isVisible() {\n    if (Splide2.is(FADE)) {\n      return isActive();\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  function isWithin(from, distance) {\n    var diff = abs(from - index);\n    if (!isClone && (options.rewind || Splide2.is(LOOP))) {\n      diff = min(diff, Splide2.length - diff);\n    }\n    return diff <= distance;\n  }\n  var self = {\n    index,\n    slideIndex,\n    slide,\n    container,\n    isClone,\n    mount,\n    destroy,\n    update,\n    style: style$1,\n    isWithin\n  };\n  return self;\n}\nfunction Slides(Splide2, Components2, options) {\n  var _EventInterface2 = EventInterface(Splide2), on = _EventInterface2.on, emit = _EventInterface2.emit, bind = _EventInterface2.bind;\n  var _Components2$Elements = Components2.Elements, slides = _Components2$Elements.slides, list = _Components2$Elements.list;\n  var Slides2 = [];\n  function mount() {\n    init();\n    on(EVENT_REFRESH, destroy);\n    on(EVENT_REFRESH, init);\n  }\n  function init() {\n    slides.forEach(function(slide, index) {\n      register(slide, index, -1);\n    });\n  }\n  function destroy() {\n    forEach$1(function(Slide2) {\n      Slide2.destroy();\n    });\n    empty(Slides2);\n  }\n  function update() {\n    forEach$1(function(Slide2) {\n      Slide2.update();\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  function get(excludeClones) {\n    return excludeClones ? filter(function(Slide2) {\n      return !Slide2.isClone;\n    }) : Slides2;\n  }\n  function getIn(page) {\n    var Controller2 = Components2.Controller;\n    var index = Controller2.toIndex(page);\n    var max2 = Controller2.hasFocus() ? 1 : options.perPage;\n    return filter(function(Slide2) {\n      return between(Slide2.index, index, index + max2 - 1);\n    });\n  }\n  function getAt(index) {\n    return filter(index)[0];\n  }\n  function add(items, index) {\n    forEach(items, function(slide) {\n      if (isString(slide)) {\n        slide = parseHtml(slide);\n      }\n      if (isHTMLElement(slide)) {\n        var ref2 = slides[index];\n        ref2 ? before(slide, ref2) : append(list, slide);\n        addClass(slide, options.classes.slide);\n        observeImages(slide, apply(emit, EVENT_RESIZE));\n      }\n    });\n    emit(EVENT_REFRESH);\n  }\n  function remove$1(matcher) {\n    remove(filter(matcher).map(function(Slide2) {\n      return Slide2.slide;\n    }));\n    emit(EVENT_REFRESH);\n  }\n  function forEach$1(iteratee, excludeClones) {\n    get(excludeClones).forEach(iteratee);\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  function style2(prop, value, useContainer) {\n    forEach$1(function(Slide2) {\n      Slide2.style(prop, value, useContainer);\n    });\n  }\n  function observeImages(elm, callback) {\n    var images = queryAll(elm, \"img\");\n    var length = images.length;\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  function getLength(excludeClones) {\n    return excludeClones ? slides.length : Slides2.length;\n  }\n  function isEnough() {\n    return Slides2.length > options.perPage;\n  }\n  return {\n    mount,\n    destroy,\n    update,\n    register,\n    get,\n    getIn,\n    getAt,\n    add,\n    remove: remove$1,\n    forEach: forEach$1,\n    filter,\n    style: style2,\n    getLength,\n    isEnough\n  };\n}\nfunction Layout(Splide2, Components2, options) {\n  var _EventInterface3 = EventInterface(Splide2), on = _EventInterface3.on, bind = _EventInterface3.bind, emit = _EventInterface3.emit;\n  var Slides2 = Components2.Slides;\n  var resolve = Components2.Direction.resolve;\n  var _Components2$Elements2 = Components2.Elements, root = _Components2$Elements2.root, track = _Components2$Elements2.track, list = _Components2$Elements2.list;\n  var getAt = Slides2.getAt, styleSlides = Slides2.style;\n  var vertical;\n  var rootRect;\n  var overflow;\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  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  function resize(force) {\n    var newRect = rect(root);\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      if (overflow !== (overflow = isOverflow())) {\n        toggleClass(root, CLASS_OVERFLOW, overflow);\n        emit(EVENT_OVERFLOW, overflow);\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$1(padding) ? 0 : padding)) || \"0px\";\n  }\n  function cssTrackHeight() {\n    var height = \"\";\n    if (vertical) {\n      height = cssHeight();\n      assert(height, \"height or heightRatio is missing.\");\n      height = \"calc(\" + height + \" - \" + cssPadding(false) + \" - \" + cssPadding(true) + \")\";\n    }\n    return height;\n  }\n  function cssHeight() {\n    return unit(options.height || rect(list).width * options.heightRatio);\n  }\n  function cssSlideWidth() {\n    return options.autoWidth ? null : unit(options.fixedWidth) || (vertical ? \"\" : cssSlideSize());\n  }\n  function cssSlideHeight() {\n    return unit(options.fixedHeight) || (vertical ? options.autoHeight ? null : cssSlideSize() : cssHeight());\n  }\n  function cssSlideSize() {\n    var gap = unit(options.gap);\n    return \"calc((100%\" + (gap && \" + \" + gap) + \")/\" + (options.perPage || 1) + (gap && \" - \" + gap) + \")\";\n  }\n  function listSize() {\n    return rect(list)[resolve(\"width\")];\n  }\n  function slideSize(index, withoutGap) {\n    var Slide2 = getAt(index || 0);\n    return Slide2 ? rect(Slide2.slide)[resolve(\"width\")] + (withoutGap ? 0 : getGap()) : 0;\n  }\n  function totalSize(index, withoutGap) {\n    var Slide2 = getAt(index);\n    if (Slide2) {\n      var right = rect(Slide2.slide)[resolve(\"right\")];\n      var left = rect(list)[resolve(\"left\")];\n      return abs(right - left) + (withoutGap ? 0 : getGap());\n    }\n    return 0;\n  }\n  function sliderSize(withoutGap) {\n    return totalSize(Splide2.length - 1) - totalSize(0) + slideSize(0, withoutGap);\n  }\n  function getGap() {\n    var Slide2 = getAt(0);\n    return Slide2 && parseFloat(style(Slide2.slide, resolve(\"marginRight\"))) || 0;\n  }\n  function getPadding(right) {\n    return parseFloat(style(track, resolve(\"padding\" + (right ? \"Right\" : \"Left\")))) || 0;\n  }\n  function isOverflow() {\n    return Splide2.is(FADE) || sliderSize(true) > listSize();\n  }\n  return {\n    mount,\n    resize,\n    listSize,\n    slideSize,\n    sliderSize,\n    totalSize,\n    getPadding,\n    isOverflow\n  };\n}\nvar MULTIPLIER = 2;\nfunction Clones(Splide2, Components2, options) {\n  var event = EventInterface(Splide2);\n  var on = event.on;\n  var Elements2 = Components2.Elements, Slides2 = Components2.Slides;\n  var resolve = Components2.Direction.resolve;\n  var clones = [];\n  var cloneCount;\n  function mount() {\n    on(EVENT_REFRESH, remount);\n    on([EVENT_UPDATED, EVENT_RESIZE], observe);\n    if (cloneCount = computeCloneCount()) {\n      generate(cloneCount);\n      Components2.Layout.resize(true);\n    }\n  }\n  function remount() {\n    destroy();\n    mount();\n  }\n  function destroy() {\n    remove(clones);\n    empty(clones);\n    event.destroy();\n  }\n  function observe() {\n    var count = computeCloneCount();\n    if (cloneCount !== count) {\n      if (cloneCount < count || !count) {\n        event.emit(EVENT_REFRESH);\n      }\n    }\n  }\n  function generate(count) {\n    var slides = Slides2.get().slice();\n    var length = slides.length;\n    if (length) {\n      while (slides.length < count) {\n        push(slides, slides);\n      }\n      push(slides.slice(-count), slides.slice(0, count)).forEach(function(Slide2, index) {\n        var isHead = index < count;\n        var clone = cloneDeep(Slide2.slide, index);\n        isHead ? before(clone, slides[0].slide) : append(Elements2.list, clone);\n        push(clones, clone);\n        Slides2.register(clone, index - count + (isHead ? 0 : length), Slide2.index);\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  function computeCloneCount() {\n    var clones2 = options.clones;\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(Elements2.track)[resolve(\"width\")] / fixedSize);\n      clones2 = fixedCount || options[resolve(\"autoWidth\")] && Splide2.length || options.perPage * MULTIPLIER;\n    }\n    return clones2;\n  }\n  return {\n    mount,\n    destroy\n  };\n}\nfunction Move(Splide2, Components2, options) {\n  var _EventInterface4 = EventInterface(Splide2), on = _EventInterface4.on, emit = _EventInterface4.emit;\n  var set = Splide2.state.set;\n  var _Components2$Layout = Components2.Layout, slideSize = _Components2$Layout.slideSize, getPadding = _Components2$Layout.getPadding, totalSize = _Components2$Layout.totalSize, listSize = _Components2$Layout.listSize, sliderSize = _Components2$Layout.sliderSize;\n  var _Components2$Directio = Components2.Direction, resolve = _Components2$Directio.resolve, orient = _Components2$Directio.orient;\n  var _Components2$Elements3 = Components2.Elements, list = _Components2$Elements3.list, track = _Components2$Elements3.track;\n  var Transition;\n  function mount() {\n    Transition = Components2.Transition;\n    on([EVENT_MOUNTED, EVENT_RESIZED, EVENT_UPDATED, EVENT_REFRESH], reposition);\n  }\n  function reposition() {\n    if (!Components2.Controller.isBusy()) {\n      Components2.Scroll.cancel();\n      jump(Splide2.index);\n      Components2.Slides.update();\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    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  function jump(index) {\n    translate(toPosition(index, true));\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  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      if (exceededMin || exceededMax) {\n        position = shift(position, exceededMax);\n      }\n    }\n    return position;\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  function cancel() {\n    translate(getPosition(), true);\n    Transition.cancel();\n  }\n  function toIndex(position) {\n    var Slides2 = Components2.Slides.get();\n    var index = 0;\n    var minDistance = Infinity;\n    for (var i = 0; i < Slides2.length; i++) {\n      var slideIndex = Slides2[i].index;\n      var distance = abs(toPosition(slideIndex, true) - position);\n      if (distance <= minDistance) {\n        minDistance = distance;\n        index = slideIndex;\n      } else {\n        break;\n      }\n    }\n    return index;\n  }\n  function toPosition(index, trimming) {\n    var position = orient(totalSize(index - 1) - offset(index));\n    return trimming ? trim(position) : position;\n  }\n  function getPosition() {\n    var left = resolve(\"left\");\n    return rect(list)[left] - rect(track)[left] + orient(getPadding(false));\n  }\n  function trim(position) {\n    if (options.trimSpace && Splide2.is(SLIDE)) {\n      position = clamp(position, 0, orient(sliderSize(true) - listSize()));\n    }\n    return position;\n  }\n  function offset(index) {\n    var focus2 = options.focus;\n    return focus2 === \"center\" ? (listSize() - slideSize(index, true)) / 2 : +focus2 * slideSize(index) || 0;\n  }\n  function getLimit(max2) {\n    return toPosition(max2 ? Components2.Controller.getEnd() : 0, !!options.trimSpace);\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  function exceededLimit(max2, position) {\n    position = isUndefined(position) ? getPosition() : position;\n    var exceededMin = max2 !== true && orient(position) < orient(getLimit(false));\n    var exceededMax = max2 !== false && orient(position) > orient(getLimit(true));\n    return exceededMin || exceededMax;\n  }\n  return {\n    mount,\n    move,\n    jump,\n    translate,\n    shift,\n    cancel,\n    toIndex,\n    toPosition,\n    getPosition,\n    getLimit,\n    exceededLimit,\n    reposition\n  };\n}\nfunction Controller(Splide2, Components2, options) {\n  var _EventInterface5 = EventInterface(Splide2), on = _EventInterface5.on, emit = _EventInterface5.emit;\n  var Move2 = Components2.Move;\n  var getPosition = Move2.getPosition, getLimit = Move2.getLimit, toPosition = Move2.toPosition;\n  var _Components2$Slides = Components2.Slides, isEnough = _Components2$Slides.isEnough, 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  function mount() {\n    init();\n    on([EVENT_UPDATED, EVENT_REFRESH, EVENT_END_INDEX_CHANGED], init);\n    on(EVENT_RESIZED, onResized);\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    if (index !== currIndex) {\n      currIndex = index;\n      Move2.reposition();\n    }\n  }\n  function onResized() {\n    if (endIndex !== getEnd()) {\n      emit(EVENT_END_INDEX_CHANGED);\n    }\n  }\n  function go(control, allowSameIndex, callback) {\n    if (!isBusy()) {\n      var dest = parse(control);\n      var index = loop(dest);\n      if (index > -1 && (allowSameIndex || index !== currIndex)) {\n        setIndex(index);\n        Move2.move(dest, index, prevIndex, callback);\n      }\n    }\n  }\n  function scroll(destination, duration, snap, callback) {\n    Components2.Scroll.scroll(destination, duration, snap, function() {\n      var index = loop(Move2.toIndex(getPosition()));\n      setIndex(omitEnd ? min(index, endIndex) : index);\n      callback && callback();\n    });\n  }\n  function parse(control) {\n    var index = currIndex;\n    if (isString(control)) {\n      var _ref = control.match(/([+\\-<>])(\\d+)?/) || [], indicator = _ref[1], number = _ref[2];\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    return index;\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    if (dest === -1 && isSlide) {\n      if (!approximatelyEqual(getPosition(), getLimit(!prev), 1)) {\n        return prev ? 0 : endIndex;\n      }\n    }\n    return destination ? dest : loop(dest);\n  }\n  function computeDestIndex(dest, from, snapPage) {\n    if (isEnough() || hasFocus()) {\n      var index = computeMovableDestIndex(dest);\n      if (index !== dest) {\n        from = dest;\n        dest = index;\n        snapPage = false;\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    return dest;\n  }\n  function computeMovableDestIndex(dest) {\n    if (isSlide && options.trimSpace === \"move\" && dest !== currIndex) {\n      var position = getPosition();\n      while (position === toPosition(dest, true) && between(dest, 0, Splide2.length - 1, !options.rewind)) {\n        dest < currIndex ? --dest : ++dest;\n      }\n    }\n    return dest;\n  }\n  function loop(index) {\n    return isLoop ? (index + slideCount) % slideCount || 0 : index;\n  }\n  function getEnd() {\n    var end = slideCount - (hasFocus() || isLoop && perMove ? 1 : perPage);\n    while (omitEnd && end-- > 0) {\n      if (toPosition(slideCount - 1, true) !== toPosition(end, true)) {\n        end++;\n        break;\n      }\n    }\n    return clamp(end, 0, slideCount - 1);\n  }\n  function toIndex(page) {\n    return clamp(hasFocus() ? page : perPage * page, 0, endIndex);\n  }\n  function toPage(index) {\n    return hasFocus() ? min(index, endIndex) : floor((index >= endIndex ? slideCount - 1 : index) / perPage);\n  }\n  function toDest(destination) {\n    var closest2 = Move2.toIndex(destination);\n    return isSlide ? clamp(closest2, 0, endIndex) : closest2;\n  }\n  function setIndex(index) {\n    if (index !== currIndex) {\n      prevIndex = currIndex;\n      currIndex = index;\n    }\n  }\n  function getIndex(prev) {\n    return prev ? prevIndex : currIndex;\n  }\n  function hasFocus() {\n    return !isUndefined(options.focus) || options.isNavigation;\n  }\n  function isBusy() {\n    return Splide2.state.is([MOVING, SCROLLING]) && !!options.waitForTransition;\n  }\n  return {\n    mount,\n    go,\n    scroll,\n    getNext,\n    getPrev,\n    getAdjacent,\n    getEnd,\n    setIndex,\n    getIndex,\n    toIndex,\n    toPage,\n    toDest,\n    hasFocus,\n    isBusy\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;\nfunction Arrows(Splide2, Components2, options) {\n  var event = EventInterface(Splide2);\n  var on = event.on, bind = event.bind, emit = event.emit;\n  var classes = options.classes, i18n = options.i18n;\n  var Elements2 = Components2.Elements, Controller2 = Components2.Controller;\n  var placeholder = Elements2.arrows, track = Elements2.track;\n  var wrapper = placeholder;\n  var prev = Elements2.prev;\n  var next = Elements2.next;\n  var created;\n  var wrapperClasses;\n  var arrows = {};\n  function mount() {\n    init();\n    on(EVENT_UPDATED, remount);\n  }\n  function remount() {\n    destroy();\n    mount();\n  }\n  function init() {\n    var enabled = options.arrows;\n    if (enabled && !(prev && next)) {\n      createArrows();\n    }\n    if (prev && next) {\n      assign(arrows, {\n        prev,\n        next\n      });\n      display(wrapper, enabled ? \"\" : \"none\");\n      addClass(wrapper, wrapperClasses = CLASS_ARROWS + \"--\" + options.direction);\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  function destroy() {\n    event.destroy();\n    removeClass(wrapper, wrapperClasses);\n    if (created) {\n      remove(placeholder ? [prev, next] : wrapper);\n      prev = next = null;\n    } else {\n      removeAttribute([prev, next], ALL_ATTRIBUTES);\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  function go(control) {\n    Controller2.go(control, true);\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  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  function update() {\n    if (prev && next) {\n      var index = Splide2.index;\n      var prevIndex = Controller2.getPrev();\n      var nextIndex = Controller2.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  return {\n    arrows,\n    mount,\n    destroy,\n    update\n  };\n}\nvar INTERVAL_DATA_ATTRIBUTE = DATA_ATTRIBUTE + \"-interval\";\nfunction Autoplay(Splide2, Components2, options) {\n  var _EventInterface6 = EventInterface(Splide2), on = _EventInterface6.on, bind = _EventInterface6.bind, emit = _EventInterface6.emit;\n  var interval = RequestInterval(options.interval, Splide2.go.bind(Splide2, \">\"), onAnimationFrame);\n  var isPaused = interval.isPaused;\n  var Elements2 = Components2.Elements, _Components2$Elements4 = Components2.Elements, root = _Components2$Elements4.root, toggle = _Components2$Elements4.toggle;\n  var autoplay = options.autoplay;\n  var hovered;\n  var focused;\n  var stopped = autoplay === \"pause\";\n  function mount() {\n    if (autoplay) {\n      listen();\n      toggle && setAttribute(toggle, ARIA_CONTROLS, Elements2.track.id);\n      stopped || play();\n      update();\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    if (options.pauseOnFocus) {\n      bind(root, \"focusin focusout\", function(e) {\n        focused = e.type === \"focusin\";\n        autoToggle();\n      });\n    }\n    if (toggle) {\n      bind(toggle, \"click\", function() {\n        stopped ? play() : pause(true);\n      });\n    }\n    on([EVENT_MOVE, EVENT_SCROLL, EVENT_REFRESH], interval.rewind);\n    on(EVENT_MOVE, onMove);\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  function pause(stop) {\n    if (stop === void 0) {\n      stop = true;\n    }\n    stopped = !!stop;\n    update();\n    if (!isPaused()) {\n      interval.pause();\n      emit(EVENT_AUTOPLAY_PAUSE);\n    }\n  }\n  function autoToggle() {\n    if (!stopped) {\n      hovered || focused ? pause(false) : play();\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  function onAnimationFrame(rate) {\n    var bar = Elements2.bar;\n    bar && style(bar, \"width\", rate * 100 + \"%\");\n    emit(EVENT_AUTOPLAY_PLAYING, rate);\n  }\n  function onMove(index) {\n    var Slide2 = Components2.Slides.getAt(index);\n    interval.set(Slide2 && +getAttribute(Slide2.slide, INTERVAL_DATA_ATTRIBUTE) || options.interval);\n  }\n  return {\n    mount,\n    destroy: interval.cancel,\n    play,\n    pause,\n    isPaused\n  };\n}\nfunction Cover(Splide2, Components2, options) {\n  var _EventInterface7 = EventInterface(Splide2), on = _EventInterface7.on;\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  function cover(cover2) {\n    Components2.Slides.forEach(function(Slide2) {\n      var img = child(Slide2.container || Slide2.slide, \"img\");\n      if (img && img.src) {\n        toggle(cover2, img, Slide2);\n      }\n    });\n  }\n  function toggle(cover2, img, Slide2) {\n    Slide2.style(\"background\", cover2 ? 'center/cover no-repeat url(\"' + img.src + '\")' : \"\", true);\n    display(img, cover2 ? \"none\" : \"\");\n  }\n  return {\n    mount,\n    destroy: apply(cover, false)\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;\nfunction Scroll(Splide2, Components2, options) {\n  var _EventInterface8 = EventInterface(Splide2), on = _EventInterface8.on, emit = _EventInterface8.emit;\n  var set = Splide2.state.set;\n  var Move2 = Components2.Move;\n  var getPosition = Move2.getPosition, getLimit = Move2.getLimit, exceededLimit = Move2.exceededLimit, translate = Move2.translate;\n  var isSlide = Splide2.is(SLIDE);\n  var interval;\n  var callback;\n  var friction = 1;\n  function mount() {\n    on(EVENT_MOVE, clear);\n    on([EVENT_UPDATED, EVENT_REFRESH], cancel);\n  }\n  function scroll(destination, duration, snap, onScrolled, noConstrain) {\n    var from = getPosition();\n    clear();\n    if (snap && (!isSlide || !exceededLimit())) {\n      var size = Components2.Layout.sliderSize();\n      var offset = sign(destination) * size * floor(abs(destination) / size) || 0;\n      destination = Move2.toPosition(Components2.Controller.toDest(destination % size)) + offset;\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  function onEnd() {\n    set(IDLE);\n    callback && callback();\n    emit(EVENT_SCROLLED);\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    if (isSlide && !noConstrain && exceededLimit()) {\n      friction *= FRICTION_FACTOR;\n      if (abs(diff) < BOUNCE_DIFF_THRESHOLD) {\n        scroll(getLimit(exceededLimit(true)), BOUNCE_DURATION, false, callback, true);\n      }\n    }\n  }\n  function clear() {\n    if (interval) {\n      interval.cancel();\n    }\n  }\n  function cancel() {\n    if (interval && !interval.isPaused()) {\n      clear();\n      onEnd();\n    }\n  }\n  function easing(t) {\n    var easingFunc = options.easingFunc;\n    return easingFunc ? easingFunc(t) : 1 - Math.pow(1 - t, 4);\n  }\n  return {\n    mount,\n    destroy: clear,\n    scroll,\n    cancel\n  };\n}\nvar SCROLL_LISTENER_OPTIONS = {\n  passive: false,\n  capture: true\n};\nfunction Drag(Splide2, Components2, options) {\n  var _EventInterface9 = EventInterface(Splide2), on = _EventInterface9.on, emit = _EventInterface9.emit, bind = _EventInterface9.bind, unbind = _EventInterface9.unbind;\n  var state = Splide2.state;\n  var Move2 = Components2.Move, Scroll2 = Components2.Scroll, Controller2 = Components2.Controller, track = Components2.Elements.track, reduce = Components2.Media.reduce;\n  var _Components2$Directio2 = Components2.Direction, resolve = _Components2$Directio2.resolve, orient = _Components2$Directio2.orient;\n  var getPosition = Move2.getPosition, exceededLimit = Move2.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  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  function init() {\n    var drag = options.drag;\n    disable(!drag);\n    isFree = drag === \"free\";\n  }\n  function onPointerDown(e) {\n    clickPrevented = false;\n    if (!disabled) {\n      var isTouch = isTouchEvent(e);\n      if (isDraggable(e.target) && (isTouch || !e.button)) {\n        if (!Controller2.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          Move2.cancel();\n          Scroll2.cancel();\n          save(e);\n        } else {\n          prevent(e, true);\n        }\n      }\n    }\n  }\n  function onPointerMove(e) {\n    if (!state.is(DRAGGING)) {\n      state.set(DRAGGING);\n      emit(EVENT_DRAG);\n    }\n    if (e.cancelable) {\n      if (dragging) {\n        Move2.translate(basePosition + constrain(diffCoord(e)));\n        var expired = diffTime(e) > LOG_INTERVAL;\n        var hasExceeded = exceeded !== (exceeded = exceededLimit());\n        if (expired || hasExceeded) {\n          save(e);\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  function onPointerUp(e) {\n    if (state.is(DRAGGING)) {\n      state.set(IDLE);\n      emit(EVENT_DRAGGED);\n    }\n    if (dragging) {\n      move(e);\n      prevent(e);\n    }\n    unbind(target, POINTER_MOVE_EVENTS, onPointerMove);\n    unbind(target, POINTER_UP_EVENTS, onPointerUp);\n    dragging = false;\n  }\n  function onClick(e) {\n    if (!disabled && clickPrevented) {\n      prevent(e, true);\n    }\n  }\n  function save(e) {\n    prevBaseEvent = baseEvent;\n    baseEvent = e;\n    basePosition = getPosition();\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    if (isFree) {\n      Controller2.scroll(destination, 0, options.snap);\n    } else if (Splide2.is(FADE)) {\n      Controller2.go(orient(sign(velocity)) < 0 ? rewind ? \"<\" : \"-\" : rewind ? \">\" : \"+\");\n    } else if (Splide2.is(SLIDE) && exceeded && rewind) {\n      Controller2.go(exceededLimit(true) ? \">\" : \"<\");\n    } else {\n      Controller2.go(Controller2.toDest(destination), true);\n    }\n    reduce(true);\n  }\n  function shouldStart(e) {\n    var thresholds = options.dragMinThreshold;\n    var isObj = isObject$1(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  function isSliderDirection(e) {\n    return abs(diffCoord(e)) > abs(diffCoord(e, true));\n  }\n  function computeVelocity(e) {\n    if (Splide2.is(LOOP) || !exceeded) {\n      var time = diffTime(e);\n      if (time && time < LOG_INTERVAL) {\n        return diffCoord(e) / time;\n      }\n    }\n    return 0;\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  function diffCoord(e, orthogonal) {\n    return coordOf(e, orthogonal) - coordOf(getBaseEvent(e), orthogonal);\n  }\n  function diffTime(e) {\n    return timeOf(e) - timeOf(getBaseEvent(e));\n  }\n  function getBaseEvent(e) {\n    return baseEvent === e && prevBaseEvent || baseEvent;\n  }\n  function coordOf(e, orthogonal) {\n    return (isTouchEvent(e) ? e.changedTouches[0] : e)[\"page\" + resolve(orthogonal ? \"Y\" : \"X\")];\n  }\n  function constrain(diff) {\n    return diff / (exceeded && Splide2.is(SLIDE) ? FRICTION : 1);\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  function isTouchEvent(e) {\n    return typeof TouchEvent !== \"undefined\" && e instanceof TouchEvent;\n  }\n  function isDragging() {\n    return dragging;\n  }\n  function disable(value) {\n    disabled = value;\n  }\n  return {\n    mount,\n    disable,\n    isDragging\n  };\n}\nvar NORMALIZATION_MAP = {\n  Spacebar: \" \",\n  Right: ARROW_RIGHT,\n  Left: ARROW_LEFT,\n  Up: ARROW_UP,\n  Down: ARROW_DOWN\n};\nfunction normalizeKey(key) {\n  key = isString(key) ? key : key.key;\n  return NORMALIZATION_MAP[key] || key;\n}\nvar KEYBOARD_EVENT = \"keydown\";\nfunction Keyboard(Splide2, Components2, options) {\n  var _EventInterface10 = EventInterface(Splide2), on = _EventInterface10.on, bind = _EventInterface10.bind, unbind = _EventInterface10.unbind;\n  var root = Splide2.root;\n  var resolve = Components2.Direction.resolve;\n  var target;\n  var disabled;\n  function mount() {\n    init();\n    on(EVENT_UPDATED, destroy);\n    on(EVENT_UPDATED, init);\n    on(EVENT_MOVE, onMove);\n  }\n  function init() {\n    var keyboard = options.keyboard;\n    if (keyboard) {\n      target = keyboard === \"global\" ? window : root;\n      bind(target, KEYBOARD_EVENT, onKeydown);\n    }\n  }\n  function destroy() {\n    unbind(target, KEYBOARD_EVENT);\n  }\n  function disable(value) {\n    disabled = value;\n  }\n  function onMove() {\n    var _disabled = disabled;\n    disabled = true;\n    nextTick(function() {\n      disabled = _disabled;\n    });\n  }\n  function onKeydown(e) {\n    if (!disabled) {\n      var key = normalizeKey(e);\n      if (key === resolve(ARROW_LEFT)) {\n        Splide2.go(\"<\");\n      } else if (key === resolve(ARROW_RIGHT)) {\n        Splide2.go(\">\");\n      }\n    }\n  }\n  return {\n    mount,\n    destroy,\n    disable\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 + \"]\";\nfunction LazyLoad(Splide2, Components2, options) {\n  var _EventInterface11 = EventInterface(Splide2), on = _EventInterface11.on, off = _EventInterface11.off, bind = _EventInterface11.bind, emit = _EventInterface11.emit;\n  var isSequential = options.lazyLoad === \"sequential\";\n  var events = [EVENT_MOVED, EVENT_SCROLLED];\n  var entries = [];\n  function mount() {\n    if (options.lazyLoad) {\n      init();\n      on(EVENT_REFRESH, init);\n    }\n  }\n  function init() {\n    empty(entries);\n    register();\n    if (isSequential) {\n      loadNext();\n    } else {\n      off(events);\n      on(events, check);\n      check();\n    }\n  }\n  function register() {\n    Components2.Slides.forEach(function(Slide2) {\n      queryAll(Slide2.slide, IMAGE_SELECTOR).forEach(function(img) {\n        var src = getAttribute(img, SRC_DATA_ATTRIBUTE);\n        var srcset = getAttribute(img, SRCSET_DATA_ATTRIBUTE);\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, Slide2, spinner]);\n          img.src || display(img, \"none\");\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  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  function onLoad(data, e) {\n    var img = data[0], Slide2 = data[1];\n    removeClass(Slide2.slide, CLASS_LOADING);\n    if (e.type !== \"error\") {\n      remove(data[2]);\n      display(img, \"\");\n      emit(EVENT_LAZYLOAD_LOADED, img, Slide2);\n      emit(EVENT_RESIZE);\n    }\n    isSequential && loadNext();\n  }\n  function loadNext() {\n    entries.length && load(entries.shift());\n  }\n  return {\n    mount,\n    destroy: apply(empty, entries),\n    check\n  };\n}\nfunction Pagination(Splide2, Components2, options) {\n  var event = EventInterface(Splide2);\n  var on = event.on, emit = event.emit, bind = event.bind;\n  var Slides2 = Components2.Slides, Elements2 = Components2.Elements, Controller2 = Components2.Controller;\n  var hasFocus = Controller2.hasFocus, getIndex = Controller2.getIndex, go = Controller2.go;\n  var resolve = Components2.Direction.resolve;\n  var placeholder = Elements2.pagination;\n  var items = [];\n  var list;\n  var paginationClasses;\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    if (enabled) {\n      on([EVENT_MOVE, EVENT_SCROLL, EVENT_SCROLLED], update);\n      createPagination();\n      update();\n      emit(EVENT_PAGINATION_MOUNTED, {\n        list,\n        items\n      }, getAt(Splide2.index));\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    event.destroy();\n  }\n  function createPagination() {\n    var length = Splide2.length;\n    var classes = options.classes, i18n = options.i18n, perPage = options.perPage;\n    var max2 = hasFocus() ? Controller2.getEnd() + 1 : ceil(length / perPage);\n    list = placeholder || create(\"ul\", classes.pagination, Elements2.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    for (var i = 0; i < max2; 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 = Slides2.getIn(i).map(function(Slide2) {\n        return Slide2.slide.id;\n      });\n      var text = !hasFocus() && perPage > 1 ? i18n.pageX : i18n.slideX;\n      bind(button, \"click\", apply(onClick, i));\n      if (options.paginationKeyboard) {\n        bind(button, \"keydown\", apply(onKeydown, i));\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,\n        button,\n        page: i\n      });\n    }\n  }\n  function onClick(page) {\n    go(\">\" + page, true);\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    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    var item = items[nextPage];\n    if (item) {\n      focus(item.button);\n      go(\">\" + nextPage);\n      prevent(e, true);\n    }\n  }\n  function getDirection() {\n    return options.paginationDirection || options.direction;\n  }\n  function getAt(index) {\n    return items[Controller2.toPage(index)];\n  }\n  function update() {\n    var prev = getAt(getIndex(true));\n    var curr = getAt(getIndex());\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    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    emit(EVENT_PAGINATION_UPDATED, {\n      list,\n      items\n    }, prev, curr);\n  }\n  return {\n    items,\n    mount,\n    destroy,\n    getAt,\n    update\n  };\n}\nvar TRIGGER_KEYS = [\" \", \"Enter\"];\nfunction Sync(Splide2, Components2, options) {\n  var isNavigation = options.isNavigation, slideFocus = options.slideFocus;\n  var events = [];\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    if (isNavigation) {\n      navigate();\n    }\n  }\n  function destroy() {\n    events.forEach(function(event) {\n      event.destroy();\n    });\n    empty(events);\n  }\n  function remount() {\n    destroy();\n    mount();\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  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  function update() {\n    setAttribute(Components2.Elements.list, ARIA_ORIENTATION, options.direction === TTB ? \"vertical\" : \"\");\n  }\n  function onClick(Slide2) {\n    Splide2.go(Slide2.index);\n  }\n  function onKeydown(Slide2, e) {\n    if (includes(TRIGGER_KEYS, normalizeKey(e))) {\n      onClick(Slide2);\n      prevent(e);\n    }\n  }\n  return {\n    setup: apply(Components2.Media.set, {\n      slideFocus: isUndefined(slideFocus) ? isNavigation : slideFocus\n    }, true),\n    mount,\n    destroy,\n    remount\n  };\n}\nfunction Wheel(Splide2, Components2, options) {\n  var _EventInterface12 = EventInterface(Splide2), bind = _EventInterface12.bind;\n  var lastTime = 0;\n  function mount() {\n    if (options.wheel) {\n      bind(Components2.Elements.track, \"wheel\", onWheel, SCROLL_LISTENER_OPTIONS);\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      var _min = options.wheelMinThreshold || 0;\n      var sleep = options.wheelSleep || 0;\n      if (abs(deltaY) > _min && timeStamp - lastTime > sleep) {\n        Splide2.go(backwards ? \"<\" : \">\");\n        lastTime = timeStamp;\n      }\n      shouldPrevent(backwards) && prevent(e);\n    }\n  }\n  function shouldPrevent(backwards) {\n    return !options.releaseWheel || Splide2.state.is(MOVING) || Components2.Controller.getAdjacent(backwards) !== -1;\n  }\n  return {\n    mount\n  };\n}\nvar SR_REMOVAL_DELAY = 90;\nfunction Live(Splide2, Components2, options) {\n  var _EventInterface13 = EventInterface(Splide2), on = _EventInterface13.on;\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  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  function toggle(active) {\n    setAttribute(track, ARIA_BUSY, active);\n    if (active) {\n      append(track, sr);\n      interval.start();\n    } else {\n      remove(sr);\n      interval.cancel();\n    }\n  }\n  function destroy() {\n    removeAttribute(track, [ARIA_LIVE, ARIA_ATOMIC, ARIA_BUSY]);\n    remove(sr);\n  }\n  function disable(disabled) {\n    if (enabled) {\n      setAttribute(track, ARIA_LIVE, disabled ? \"off\" : \"polite\");\n    }\n  }\n  return {\n    mount,\n    disable,\n    destroy\n  };\n}\nvar ComponentConstructors = /* @__PURE__ */ Object.freeze({\n  __proto__: null,\n  Media,\n  Direction,\n  Elements,\n  Slides,\n  Layout,\n  Clones,\n  Move,\n  Controller,\n  Arrows,\n  Autoplay,\n  Cover,\n  Scroll,\n  Drag,\n  Keyboard,\n  LazyLoad,\n  Pagination,\n  Sync,\n  Wheel,\n  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};\nfunction Fade(Splide2, Components2, options) {\n  var Slides2 = Components2.Slides;\n  function mount() {\n    EventInterface(Splide2).on([EVENT_MOUNTED, EVENT_REFRESH], init);\n  }\n  function init() {\n    Slides2.forEach(function(Slide2) {\n      Slide2.style(\"transform\", \"translateX(-\" + 100 * Slide2.index + \"%)\");\n    });\n  }\n  function start(index, done) {\n    Slides2.style(\"transition\", \"opacity \" + options.speed + \"ms \" + options.easing);\n    nextTick(done);\n  }\n  return {\n    mount,\n    start,\n    cancel: noop\n  };\n}\nfunction Slide(Splide2, Components2, options) {\n  var Move2 = Components2.Move, Controller2 = Components2.Controller, Scroll2 = Components2.Scroll;\n  var list = Components2.Elements.list;\n  var transition = apply(style, list, \"transition\");\n  var endCallback;\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  function start(index, done) {\n    var destination = Move2.toPosition(index, true);\n    var position = Move2.getPosition();\n    var speed = getSpeed(index);\n    if (abs(destination - position) >= 1 && speed >= 1) {\n      if (options.useScroll) {\n        Scroll2.scroll(destination, speed, false, done);\n      } else {\n        transition(\"transform \" + speed + \"ms \" + options.easing);\n        Move2.translate(destination, true);\n        endCallback = done;\n      }\n    } else {\n      Move2.jump(index);\n      done();\n    }\n  }\n  function cancel() {\n    transition(\"\");\n    Scroll2.cancel();\n  }\n  function getSpeed(index) {\n    var rewindSpeed = options.rewindSpeed;\n    if (Splide2.is(SLIDE) && rewindSpeed) {\n      var prev = Controller2.getIndex(true);\n      var end = Controller2.getEnd();\n      if (prev === 0 && index >= end || prev >= end && index === 0) {\n        return rewindSpeed;\n      }\n    }\n    return options.speed;\n  }\n  return {\n    mount,\n    start,\n    cancel\n  };\n}\nvar _Splide = /* @__PURE__ */ function() {\n  function _Splide2(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$1({\n      label: getAttribute(root, ARIA_LABEL) || \"\",\n      labelledby: getAttribute(root, ARIA_LABELLEDBY) || \"\"\n    }, DEFAULTS, _Splide2.defaults, options || {});\n    try {\n      merge$1(options, JSON.parse(getAttribute(root, DATA_ATTRIBUTE)));\n    } catch (e) {\n      assert(false, \"Invalid JSON\");\n    }\n    this._o = Object.create(merge$1({}, options));\n  }\n  var _proto = _Splide2.prototype;\n  _proto.mount = function mount(Extensions, Transition) {\n    var _this = this;\n    var state = this.state, 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$1(Constructors, function(Component, key) {\n      var component = Component(_this, Components2, _this._o);\n      Components2[key] = component;\n      component.setup && component.setup();\n    });\n    forOwn$1(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  _proto.sync = function sync(splide) {\n    this.splides.push({\n      splide\n    });\n    splide.splides.push({\n      splide: this,\n      isParent: true\n    });\n    if (this.state.is(IDLE)) {\n      this._C.Sync.remount();\n      splide.Components.Sync.remount();\n    }\n    return this;\n  };\n  _proto.go = function go(control) {\n    this._C.Controller.go(control);\n    return this;\n  };\n  _proto.on = function on(events, callback) {\n    this.event.on(events, callback);\n    return this;\n  };\n  _proto.off = function off(events) {\n    this.event.off(events);\n    return this;\n  };\n  _proto.emit = function emit(event) {\n    var _this$event;\n    (_this$event = this.event).emit.apply(_this$event, [event].concat(slice(arguments, 1)));\n    return this;\n  };\n  _proto.add = function add(slides, index) {\n    this._C.Slides.add(slides, index);\n    return this;\n  };\n  _proto.remove = function remove2(matcher) {\n    this._C.Slides.remove(matcher);\n    return this;\n  };\n  _proto.is = function is(type) {\n    return this._o.type === type;\n  };\n  _proto.refresh = function refresh() {\n    this.emit(EVENT_REFRESH);\n    return this;\n  };\n  _proto.destroy = function destroy(completely) {\n    if (completely === void 0) {\n      completely = true;\n    }\n    var event = this.event, state = this.state;\n    if (state.is(CREATED)) {\n      EventInterface(this).on(EVENT_READY, this.destroy.bind(this, completely));\n    } else {\n      forOwn$1(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    return this;\n  };\n  _createClass(_Splide2, [{\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  return _Splide2;\n}();\nvar Splide$1 = _Splide;\nSplide$1.defaults = {};\nSplide$1.STATES = STATES;\nconst EVENTS = [\n  EVENT_ACTIVE,\n  EVENT_ARROWS_MOUNTED,\n  EVENT_ARROWS_UPDATED,\n  EVENT_AUTOPLAY_PAUSE,\n  EVENT_AUTOPLAY_PLAY,\n  EVENT_AUTOPLAY_PLAYING,\n  EVENT_CLICK,\n  EVENT_DESTROY,\n  EVENT_DRAG,\n  EVENT_DRAGGED,\n  EVENT_DRAGGING,\n  EVENT_HIDDEN,\n  EVENT_INACTIVE,\n  EVENT_LAZYLOAD_LOADED,\n  EVENT_MOUNTED,\n  EVENT_MOVE,\n  EVENT_MOVED,\n  EVENT_NAVIGATION_MOUNTED,\n  EVENT_PAGINATION_MOUNTED,\n  EVENT_PAGINATION_UPDATED,\n  EVENT_REFRESH,\n  EVENT_RESIZE,\n  EVENT_RESIZED,\n  EVENT_SCROLL,\n  EVENT_SCROLLED,\n  EVENT_UPDATED,\n  EVENT_VISIBLE\n];\nconst SPLIDE_INJECTION_KEY = \"splide\";\nfunction isObject(subject) {\n  return subject !== null && typeof subject === \"object\";\n}\nfunction forOwn(object, iteratee) {\n  if (object) {\n    const keys = Object.keys(object);\n    for (let i = 0; i < keys.length; i++) {\n      const key = keys[i];\n      if (key !== \"__proto__\") {\n        if (iteratee(object[key], key) === false) {\n          break;\n        }\n      }\n    }\n  }\n  return object;\n}\nfunction merge(object, source) {\n  const merged = object;\n  forOwn(source, (value, key) => {\n    if (Array.isArray(value)) {\n      merged[key] = value.slice();\n    } else if (isObject(value)) {\n      merged[key] = merge(isObject(merged[key]) ? merged[key] : {}, value);\n    } else {\n      merged[key] = value;\n    }\n  });\n  return merged;\n}\nconst _sfc_main$2 = defineComponent({\n  name: \"SplideTrack\",\n  setup() {\n    onUpdated(() => {\n      var _a;\n      const splide = inject(SPLIDE_INJECTION_KEY);\n      (_a = splide == null ? void 0 : splide.value) == null ? void 0 : _a.refresh();\n    });\n  }\n});\nconst _export_sfc = (sfc, props) => {\n  const target = sfc.__vccOpts || sfc;\n  for (const [key, val] of props) {\n    target[key] = val;\n  }\n  return target;\n};\nconst _hoisted_1$1 = { class: \"splide__track\" };\nconst _hoisted_2 = { class: \"splide__list\" };\nfunction _sfc_render$2(_ctx, _cache, $props, $setup, $data, $options) {\n  return openBlock(), createElementBlock(\"div\", _hoisted_1$1, [\n    createElementVNode(\"ul\", _hoisted_2, [\n      renderSlot(_ctx.$slots, \"default\")\n    ])\n  ]);\n}\nconst SplideTrack = /* @__PURE__ */ _export_sfc(_sfc_main$2, [[\"render\", _sfc_render$2]]);\nconst _sfc_main$1 = defineComponent({\n  name: \"Splide\",\n  emits: EVENTS.map((event) => `splide:${event}`),\n  components: { SplideTrack },\n  props: {\n    tag: {\n      default: \"div\",\n      type: String\n    },\n    options: {\n      default: {},\n      type: Object\n    },\n    extensions: Object,\n    transition: Function,\n    hasTrack: {\n      default: true,\n      type: Boolean\n    }\n  },\n  setup(props, context) {\n    const splide = ref();\n    const root = ref();\n    onMounted(() => {\n      if (root.value) {\n        splide.value = new Splide$1(root.value, props.options);\n        bind(splide.value);\n        splide.value.mount(props.extensions, props.transition);\n      }\n    });\n    onBeforeUnmount(() => {\n      var _a;\n      (_a = splide.value) == null ? void 0 : _a.destroy();\n    });\n    watch(() => merge({}, props.options), (options) => {\n      if (splide.value) {\n        splide.value.options = options;\n      }\n    }, { deep: true });\n    provide(SPLIDE_INJECTION_KEY, splide);\n    const index = computed(() => {\n      var _a;\n      return ((_a = splide.value) == null ? void 0 : _a.index) || 0;\n    });\n    const length = computed(() => {\n      var _a;\n      return ((_a = splide.value) == null ? void 0 : _a.length) || 0;\n    });\n    function go(control) {\n      var _a;\n      (_a = splide.value) == null ? void 0 : _a.go(control);\n    }\n    function sync(target) {\n      var _a;\n      (_a = splide.value) == null ? void 0 : _a.sync(target);\n    }\n    function bind(splide2) {\n      EVENTS.forEach((event) => {\n        splide2.on(event, (...args) => {\n          context.emit(`splide:${event}`, splide2, ...args);\n        });\n      });\n    }\n    return {\n      splide,\n      root,\n      index,\n      length,\n      go,\n      sync\n    };\n  }\n});\nfunction _sfc_render$1(_ctx, _cache, $props, $setup, $data, $options) {\n  const _component_SplideTrack = resolveComponent(\"SplideTrack\");\n  return openBlock(), createBlock(resolveDynamicComponent(_ctx.tag), {\n    class: \"splide\",\n    ref: \"root\"\n  }, {\n    default: withCtx(() => [\n      _ctx.hasTrack ? (openBlock(), createBlock(_component_SplideTrack, { key: 0 }, {\n        default: withCtx(() => [\n          renderSlot(_ctx.$slots, \"default\")\n        ]),\n        _: 3\n      })) : renderSlot(_ctx.$slots, \"default\", { key: 1 })\n    ]),\n    _: 3\n  }, 512);\n}\nconst Splide = /* @__PURE__ */ _export_sfc(_sfc_main$1, [[\"render\", _sfc_render$1]]);\nconst _sfc_main = defineComponent({\n  name: \"SplideSlide\"\n});\nconst _hoisted_1 = { class: \"splide__slide\" };\nfunction _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {\n  return openBlock(), createElementBlock(\"li\", _hoisted_1, [\n    renderSlot(_ctx.$slots, \"default\")\n  ]);\n}\nconst SplideSlide = /* @__PURE__ */ _export_sfc(_sfc_main, [[\"render\", _sfc_render]]);\nconst VueSplide = {\n  install(app) {\n    app.component(Splide.name, Splide);\n    app.component(SplideSlide.name, SplideSlide);\n  }\n};\nexport {\n  Splide,\n  SplideSlide,\n  SplideTrack,\n  VueSplide as default\n};\n"
  },
  {
    "path": "examples/.gitignore",
    "content": "node_modules\n.DS_Store\ndist\ndist-ssr\n*.local\n"
  },
  {
    "path": "examples/README.md",
    "content": "Examples for [Vue Splide](https://github.com/Splidejs/vue-splide).\n"
  },
  {
    "path": "examples/index.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\">\n  <head>\n    <meta charset=\"UTF-8\" />\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" />\n    <link rel=\"preconnect\" href=\"https://fonts.googleapis.com\">\n    <link rel=\"preconnect\" href=\"https://fonts.gstatic.com\" crossorigin>\n    <link rel=\"icon\" type=\"image/png\" href=\"./src/assets/favicon.png\">\n    <link href=\"https://fonts.googleapis.com/css2?family=Poppins:wght@400;700&display=swap\" rel=\"stylesheet\">\n    <title>Vue Splide Example</title>\n  </head>\n  <body>\n    <div id=\"app\"></div>\n    <script type=\"module\" src=\"/src/main.ts\"></script>\n  </body>\n</html>\n"
  },
  {
    "path": "examples/package.json",
    "content": "{\n  \"name\": \"vue-splide-example\",\n  \"version\": \"1.0.0\",\n  \"private\": true,\n  \"dependencies\": {\n    \"@splidejs/splide-extension-video\": \"^0.7.1\",\n    \"@splidejs/vue-splide\": \"file:..\",\n    \"vue\": \"^3.2.38\"\n  },\n  \"devDependencies\": {\n    \"@types/node\": \"^18.7.14\",\n    \"@vitejs/plugin-vue\": \"^3.0.3\",\n    \"typescript\": \"^4.8.2\",\n    \"vite\": \"^3.0.9\",\n    \"vue-tsc\": \"^0.40.5\"\n  },\n  \"scripts\": {\n    \"develop\": \"vite\",\n    \"build\": \"vite build\",\n    \"build:all\": \"vue-tsc --noEmit && vite build\",\n    \"serve\": \"vite preview\"\n  }\n}\n"
  },
  {
    "path": "examples/src/App.vue",
    "content": "<template>\n  <BasicExample />\n  <hr>\n  <AutoplayExample />\n  <hr>\n  <ReactivityExample />\n  <hr>\n  <DynamicSlidesExample />\n  <hr>\n  <ThumbnailsExample />\n  <hr>\n  <VideoExample />\n</template>\n\n<script setup lang=\"ts\">\nimport AutoplayExample from './components/AutoplayExample.vue';\nimport BasicExample from './components/BasicExample.vue';\nimport DynamicSlidesExample from './components/DynamicSlideExample.vue';\nimport ReactivityExample from './components/ReactivityExample.vue';\nimport ThumbnailsExample from './components/ThumbnailsExample.vue';\nimport VideoExample from './components/VideoExample.vue';\nimport '@splidejs/vue-splide/css';\n</script>\n\n<style>\nbody {\n  font-family: 'Poppins', sans-serif;\n  padding: 5rem 0;\n}\n\nh1 {\n  text-align: center;\n}\n\nhr {\n  width: 200px;\n  max-width: 50%;\n  margin: 4rem auto;\n}\n\nbutton {\n  font-family: inherit;\n}\n\n.wrapper {\n  max-width: 600px;\n  margin: 0 auto;\n}\n\n.splide__slide {\n  background: #eee;\n}\n\n.splide__slide img {\n  width: 100%;\n  height: 100%;\n  object-fit: cover;\n}\n\n.splide--nav {\n  margin-top: 1rem;\n}\n</style>\n"
  },
  {
    "path": "examples/src/components/AutoplayExample.vue",
    "content": "<template>\n  <div class=\"wrapper\">\n    <h2 id=\"autoplay-example-heading\">Autoplay</h2>\n\n    <Splide\n      aria-labelledby=\"autoplay-example-heading\"\n      :options=\"options\"\n      :has-track=\"false\"\n    >\n      <div style=\"position: relative\">\n        <SplideTrack>\n          <SplideSlide v-for=\"slide in slides\" :key=\"slide.alt\">\n            <img :src=\"slide.src\" :alt=\"slide.alt\">\n          </SplideSlide>\n        </SplideTrack>\n      </div>\n\n      <div class=\"splide__progress\">\n        <div class=\"splide__progress__bar\">\n        </div>\n      </div>\n\n      <button class=\"splide__toggle\">\n        <span class=\"splide__toggle__play\">Play</span>\n        <span class=\"splide__toggle__pause\">Pause</span>\n      </button>\n    </Splide>\n  </div>\n</template>\n\n<script lang=\"ts\">\nimport { Splide, SplideSlide, SplideTrack, Options } from '@splidejs/vue-splide';\nimport { defineComponent } from 'vue';\nimport { generateSlides } from '../utils';\n\nexport default defineComponent( {\n  name: 'AutoplayExample',\n\n  components: {\n    Splide,\n    SplideTrack,\n    SplideSlide,\n  },\n\n  setup() {\n    const slides = generateSlides();\n    const options: Options = {\n      rewind  : true,\n      gap     : '1rem',\n      autoplay: true,\n      height  : '15rem',\n    };\n\n    return {\n      slides,\n      options,\n    }\n  },\n} );\n</script>\n"
  },
  {
    "path": "examples/src/components/BasicExample.vue",
    "content": "<template>\n  <div class=\"wrapper\">\n    <h2 id=\"basic-example-heading\">Basic</h2>\n\n    <Splide\n      aria-labelledby=\"basic-example-heading\"\n      v-if=\"enabled\"\n      :options=\"options\"\n      @splide:mounted=\"onSplideMounted\"\n      @splide:move=\"onSplideMove\"\n    >\n      <SplideSlide v-for=\"slide in slides\" :key=\"slide.alt\">\n        <img :src=\"slide.src\" :alt=\"slide.alt\">\n      </SplideSlide>\n    </Splide>\n\n    <button @click=\"enabled = ! enabled\">\n      {{ enabled ? 'Hide Slider' : 'Show Slider' }}\n    </button>\n  </div>\n</template>\n\n<script lang=\"ts\">\nimport { Splide as Core } from '@splidejs/splide';\nimport { Splide, SplideSlide } from '@splidejs/vue-splide'\nimport { defineComponent, ref } from 'vue';\nimport { generateSlides } from '../utils';\n\n\nexport default defineComponent( {\n  name: 'BasicExample',\n\n  components: {\n    Splide,\n    SplideSlide,\n  },\n\n  setup() {\n    const slides = generateSlides();\n    const options = {\n      rewind : true,\n      perPage: 2,\n      gap    : '1rem',\n      height : '15rem',\n      breakpoints: {\n        1000: {\n          perPage: 1,\n        },\n      },\n    };\n\n    const enabled         = ref<boolean>( true );\n    const onSplideMounted = ( splide: Core ) => console.log( splide.length );\n    const onSplideMove    = ( splide: Core, index: number ) => console.log( 'move to', index );\n\n    return {\n      slides,\n      options,\n      onSplideMounted,\n      onSplideMove,\n      enabled,\n    }\n  },\n} );\n</script>\n\n"
  },
  {
    "path": "examples/src/components/DynamicSlideExample.vue",
    "content": "<template>\n  <div class=\"wrapper\">\n    <h2 id=\"dynamic-slides-example-heading\">Dynamic Slides</h2>\n\n    <Splide\n      class=\"splide--dynamic\"\n      aria-labelledby=\"dynamic-slides-example-heading\"\n      :options=\"options\"\n      :has-track=\"false\"\n    >\n      <div style=\"position: relative\">\n        <SplideTrack>\n          <SplideSlide v-for=\"slide in slides\" :key=\"slide.alt\">\n            <img :src=\"slide.src\" :alt=\"slide.alt\">\n          </SplideSlide>\n        </SplideTrack>\n      </div>\n\n      <div class=\"controls\">\n        <button @click=\"add\">Add</button>\n        <button @click=\"remove\">Remove</button>\n      </div>\n    </Splide>\n  </div>\n</template>\n\n<script lang=\"ts\">\nimport { Options, Splide, SplideSlide, SplideTrack } from '@splidejs/vue-splide';\nimport { defineComponent, ref } from 'vue';\nimport { generateSlides } from '../utils';\n\n\nexport default defineComponent( {\n  name: 'DynamicSlidesExample',\n\n  components: {\n    Splide,\n    SplideTrack,\n    SplideSlide,\n  },\n\n  setup() {\n    const slides = ref<ReturnType<typeof generateSlides>>( generateSlides( 1 ) );\n\n    const options: Options = {\n      rewind : true,\n      perPage: 3,\n      gap    : '1rem',\n      height : '15rem',\n    };\n\n    function add(): void {\n      slides.value.push( ...generateSlides( 1, slides.value.length ) );\n    }\n\n    function remove(): void {\n      --slides.value.length;\n    }\n\n    return {\n      slides,\n      options,\n      add,\n      remove,\n    }\n  },\n} );\n</script>\n\n<style>\n.splide--dynamic .splide__list {\n  min-height: 15rem;\n}\n</style>\n"
  },
  {
    "path": "examples/src/components/ReactivityExample.vue",
    "content": "<template>\n  <div class=\"wrapper\">\n    <h2 id=\"reactivity-example-heading\">Reactivity Example</h2>\n\n    <div style=\"margin-bottom: 1rem\">\n      <label>\n        <span>gap:</span>\n        <input type=\"number\" min=\"0\" max=\"20\" v-model=\"options.gap\"/>\n        px\n      </label>\n\n      <label>\n        <span>perPage:</span>\n        <input type=\"number\" min=\"1\" max=\"5\" v-model=\"options.perPage\"/>\n      </label>\n\n      <label>\n        <span>height:</span>\n        <input\n          type=\"number\"\n          min=\"5\"\n          max=\"20\"\n          :value=\"typeof options.height === 'string' ? parseInt( options.height ) : 5\"\n          @input=\"onHeightChange\"\n        />\n        rem\n      </label>\n    </div>\n\n    <Splide :options=\"options\" aria-labelledby=\"reactivity-example-heading\">\n      <SplideSlide v-for=\"slide in slides\" :key=\"slide.alt\">\n        <img :src=\"slide.src\" :alt=\"slide.alt\">\n      </SplideSlide>\n    </Splide>\n  </div>\n</template>\n\n<script lang=\"ts\">\nimport { Options, Splide, SplideSlide } from '@splidejs/vue-splide';\nimport { defineComponent, reactive, ref } from 'vue';\nimport { generateSlides } from '../utils';\n\n\nexport default defineComponent( {\n  name: 'ReactiveExample',\n\n  components: {\n    Splide,\n    SplideSlide,\n  },\n\n  setup() {\n    // Do not change readonly options later, such as `type`, `preloadPages`, etc.\n    const options = reactive<Options>( {\n      perPage: 2,\n      gap    : 0,\n      height : '10rem',\n      rewind : true,\n    } );\n\n    function onHeightChange( e: Event ): void {\n      options.height = `${ ( e.target as HTMLInputElement ).value || 5 }rem`;\n    }\n\n    return {\n      slides: generateSlides(),\n      options,\n      onHeightChange,\n    }\n  },\n} );\n</script>\n\n<style scoped>\nlabel span {\n  margin-right: .5rem;\n}\n\ninput {\n  height: 1.5rem;\n  width: 4rem;\n  font-family: inherit;\n}\n\nlabel {\n  margin-right: 1rem;\n}\n</style>\n\n"
  },
  {
    "path": "examples/src/components/ThumbnailsExample.vue",
    "content": "<template>\n  <div class=\"wrapper\">\n    <h2 id=\"thumbnail-example-heading\">Thumbnails</h2>\n\n    <Splide\n      aria-labelledby=\"thumbnail-example-heading\"\n      :options=\"mainOptions\"\n      ref=\"main\"\n    >\n      <SplideSlide v-for=\"slide in slides\" :key=\"slide.alt\">\n        <img :src=\"slide.src\" :alt=\"slide.alt\">\n      </SplideSlide>\n    </Splide>\n\n    <Splide\n      aria-label=\"The carousel with thumbnails. Selecting a thumbnail will change the main carousel\"\n      :options=\"thumbsOptions\"\n      ref=\"thumbs\"\n    >\n      <SplideSlide v-for=\"slide in slides\" :key=\"slide.alt\">\n        <img :src=\"slide.src\" :alt=\"slide.alt\">\n      </SplideSlide>\n    </Splide>\n  </div>\n</template>\n\n<script lang=\"ts\">\nimport { Splide, SplideSlide, Options } from '@splidejs/vue-splide';\nimport { defineComponent, onMounted, ref } from 'vue';\nimport { generateSlides } from '../utils';\n\n\nexport default defineComponent( {\n  name: 'ThumbnailsExample',\n\n  components: {\n    Splide,\n    SplideSlide,\n  },\n\n  setup() {\n    const main   = ref<InstanceType<typeof Splide>>();\n    const thumbs = ref<InstanceType<typeof Splide>>();\n    const slides = generateSlides();\n\n    const mainOptions: Options = {\n      type      : 'loop',\n      perPage   : 2,\n      perMove   : 1,\n      gap       : '1rem',\n      pagination: false,\n    };\n\n    const thumbsOptions: Options = {\n      type        : 'slide',\n      rewind      : true,\n      gap         : '1rem',\n      pagination  : false,\n      fixedWidth  : 110,\n      fixedHeight : 70,\n      cover       : true,\n      focus       : 'center',\n      isNavigation: true,\n      updateOnMove: true,\n    };\n\n    onMounted( () => {\n      const thumbsSplide = thumbs.value?.splide;\n\n      if ( thumbsSplide ) {\n        main.value?.sync( thumbsSplide );\n      }\n    } );\n\n    return {\n      slides,\n      main,\n      thumbs,\n      mainOptions,\n      thumbsOptions,\n    }\n  },\n} );\n</script>\n"
  },
  {
    "path": "examples/src/components/VideoExample.vue",
    "content": "<template>\n  <div class=\"wrapper\">\n    <h2 id=\"video-example-heading\">Video</h2>\n\n    <Splide\n      aria-labelledby=\"video-example-heading\"\n      :options=\"options\"\n      :extensions=\"extensions\"\n    >\n      <SplideSlide v-for=\"( id, index ) in videos\" :key=\"id\" :data-splide-youtube=\"id\">\n        <img\n          :src=\"`https://i3.ytimg.com/vi/${ id }/maxresdefault.jpg`\"\n          :alt=\"`YouTube Sample ${ index + 1 }`\"\n        >\n      </SplideSlide>\n    </Splide>\n  </div>\n</template>\n\n<script lang=\"ts\">\nimport { Splide, SplideSlide } from '@splidejs/vue-splide';\nimport { Video } from '@splidejs/splide-extension-video';\nimport { defineComponent } from 'vue';\nimport '@splidejs/splide-extension-video/dist/css/splide-extension-video.min.css';\n\n\nexport default defineComponent( {\n  name: 'VideoExample',\n\n  components: {\n    Splide,\n    SplideSlide,\n  },\n\n  setup() {\n    const videos = [ '3GNQL3alB-Y', 'xLJ2QQDrN9k', 'cdz__ojQOuU', 'oS6N_ZBFDZE' ];\n\n    const options = {\n      rewind     : true,\n      heightRatio: 0.5625,\n    };\n\n    return {\n      videos,\n      options,\n      extensions: { Video },\n    }\n  },\n} );\n</script>\n"
  },
  {
    "path": "examples/src/env.d.ts",
    "content": "/// <reference types=\"vite/client\" />\n\ndeclare module '*.vue' {\n  import { DefineComponent } from 'vue'\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/ban-types\n  const component: DefineComponent<{}, {}, any>\n  export default component\n}\n"
  },
  {
    "path": "examples/src/main.ts",
    "content": "import { createApp } from 'vue';\nimport App from './App.vue';\n// import VueSplide from '@splidejs/vue-splide';\n\n\nconst app = createApp( App );\n// For global install\n// app.use( VueSplide );\napp.mount( '#app' );\n"
  },
  {
    "path": "examples/src/utils/generateSlides/generateSlides.ts",
    "content": "/**\n * Return an array with objects containing data of sample images.\n *\n * @param length - Optional. A number of slides.\n * @param sig    - Optional. The signature for getting a different image.\n *\n * @return An array with objects for sample images.\n */\nexport function generateSlides( length = 10, sig = 0 ): Array<{ src: string, alt: string }> {\n  return Array.from( { length } ).map( ( value, index ) => {\n    index = sig || index;\n\n    return {\n      src: `https://source.unsplash.com/random/800x450?sig=${ index }`,\n      alt: `Image ${ index }`,\n    };\n  } );\n}\n"
  },
  {
    "path": "examples/src/utils/index.ts",
    "content": "export { generateSlides } from './generateSlides/generateSlides';\n"
  },
  {
    "path": "examples/tsconfig.json",
    "content": "{\n\t\"compilerOptions\": {\n\t\t\"target\": \"esnext\",\n\t\t\"useDefineForClassFields\": true,\n\t\t\"module\": \"esnext\",\n\t\t\"moduleResolution\": \"node\",\n\t\t\"strict\": true,\n\t\t\"jsx\": \"preserve\",\n    \"skipLibCheck\": true,\n\t\t\"sourceMap\": true,\n\t\t\"resolveJsonModule\": true,\n\t\t\"esModuleInterop\": true,\n    \"allowJs\": true,\n\t\t\"lib\": [\n\t\t\t\"esnext\",\n\t\t\t\"dom\"\n\t\t]\n\t},\n\t\"include\": [\n\t\t\"src/**/*.ts\",\n\t\t\"src/**/*.d.ts\",\n\t\t\"src/**/*.tsx\",\n\t\t\"src/**/*.vue\"\n\t]\n}\n"
  },
  {
    "path": "examples/vite.config.ts",
    "content": "import { defineConfig } from 'vite';\nimport vue from '@vitejs/plugin-vue';\nimport path from 'path';\n\n\nexport default defineConfig( {\n  base: './',\n\tplugins: [ vue() ],\n  resolve: {\n    alias: [\n      { find: 'vue', replacement: path.resolve( './node_modules/vue' ) },\n    ],\n  }\n} );\n"
  },
  {
    "path": "jest.config.js",
    "content": "module.exports = {\n  rootDir: './src',\n  transform: {\n    '^.+\\\\.[tj]s$': 'ts-jest',\n  },\n  testEnvironment: 'jsdom',\n};\n"
  },
  {
    "path": "package.json",
    "content": "{\n  \"name\": \"@splidejs/vue-splide\",\n  \"version\": \"0.6.12\",\n  \"description\": \"The Splide component for Vue.\",\n  \"author\": \"Naotoshi Fujita\",\n  \"license\": \"MIT\",\n  \"main\": \"dist/js/vue-splide.cjs.js\",\n  \"module\": \"dist/js/vue-splide.esm.js\",\n  \"types\": \"src/js/index.ts\",\n  \"keywords\": [\n    \"splide\",\n    \"slider\",\n    \"carousel\",\n    \"slideshow\",\n    \"lightweight\",\n    \"touch\",\n    \"responsive\",\n    \"vue\"\n  ],\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"https://github.com/Splidejs/vue-splide.git\"\n  },\n  \"bugs\": {\n    \"url\": \"https://github.com/Splidejs/vue-splide/issues\"\n  },\n  \"devDependencies\": {\n    \"@types/jest\": \"^29.0.0\",\n    \"@typescript-eslint/eslint-plugin\": \"^5.36.2\",\n    \"@typescript-eslint/parser\": \"^5.36.2\",\n    \"@vitejs/plugin-vue\": \"^3.1.0\",\n    \"eslint\": \"^8.23.0\",\n    \"eslint-plugin-vue\": \"^9.4.0\",\n    \"fs-extra\": \"^10.1.0\",\n    \"gh-pages\": \"^4.0.0\",\n    \"jest\": \"^29.0.2\",\n    \"ts-jest\": \"next\",\n    \"typescript\": \"^4.8.2\",\n    \"vite\": \"^3.1.0\",\n    \"vue\": \"^3.2.38\",\n    \"vue-tsc\": \"^0.40.9\"\n  },\n  \"scripts\": {\n    \"develop\": \"vite build\",\n    \"check:type\": \"vue-tsc --noEmit\",\n    \"build\": \"vite build --watch false\",\n    \"build:all\": \"npm run check:type && npm run build && node scripts/copy-css.js\",\n    \"test\": \"jest\",\n    \"eslint\": \"eslint src\",\n    \"deploy\": \"gh-pages -d examples/dist\"\n  },\n  \"exports\": {\n    \".\": {\n      \"require\": \"./dist/js/vue-splide.cjs.js\",\n      \"import\": \"./dist/js/vue-splide.esm.js\",\n      \"default\": \"./dist/js/vue-splide.esm.js\"\n    },\n    \"./css\": \"./dist/css/splide.min.css\",\n    \"./css/core\": \"./dist/css/splide-core.min.css\",\n    \"./css/*\": \"./dist/css/themes/splide-*.min.css\"\n  },\n  \"dependencies\": {\n    \"@splidejs/splide\": \"^4.1.3\"\n  }\n}\n"
  },
  {
    "path": "scripts/copy-css.js",
    "content": "const fs = require( 'fs-extra' );\n\nasync function copy() {\n  await fs.copy( './node_modules/@splidejs/splide/dist/css', './dist/css', { overwrite: true } );\n}\n\ncopy().catch( console.error )\n"
  },
  {
    "path": "src/js/build/iife.ts",
    "content": "export { VueSplide as default } from '../plugin/plugin';\n"
  },
  {
    "path": "src/js/components/Splide/Splide.vue",
    "content": "<template>\n  <component :is=\"tag\" class=\"splide\" ref=\"root\">\n    <SplideTrack v-if=\"hasTrack\">\n      <slot></slot>\n    </SplideTrack>\n\n    <slot v-else></slot>\n  </component>\n</template>\n\n<script lang=\"ts\">\nimport { ComponentConstructor, Options, Splide } from '@splidejs/splide';\nimport { computed, defineComponent, onBeforeUnmount, onMounted, PropType, provide, Ref, ref, watch } from 'vue';\nimport { EVENTS } from '../../constants/events';\nimport { SPLIDE_INJECTION_KEY } from '../../constants/keys';\nimport { merge } from '../../utils';\nimport SplideTrack from '../SplideTrack/SplideTrack.vue';\n\n\n/**\n * The component for the Splide root element.\n *\n * @since 0.4.0\n */\nexport default defineComponent( {\n  name: 'Splide',\n  emits: EVENTS.map( event => `splide:${ event }` ),\n  components: { SplideTrack },\n\n  props: {\n    /**\n     * Changes the tag name.\n     */\n    tag: {\n      default: 'div',\n      type   : String,\n    },\n\n    /**\n     * Options for Splide instance.\n     */\n    options: {\n      default: {},\n      type   : Object as PropType<Options>,\n    },\n\n    /**\n     * Registers extension components.\n     */\n    extensions: Object as PropType<Record<string, ComponentConstructor>>,\n\n    /**\n     * Registers a transition component.\n     */\n    transition: Function as PropType<ComponentConstructor>,\n\n    /**\n     * Determines whether to render a track element or not.\n     */\n    hasTrack: {\n      default: true,\n      type   : Boolean,\n    },\n  },\n\n  setup( props, context ) {\n    const splide = ref<Splide>();\n    const root   = ref<HTMLElement>();\n\n    onMounted( () => {\n      if ( root.value ) {\n        splide.value = new Splide( root.value, props.options );\n        bind( splide.value );\n        splide.value.mount( props.extensions, props.transition );\n      }\n    } );\n\n    onBeforeUnmount( () => {\n      splide.value?.destroy();\n    } );\n\n    watch( () => merge( {}, props.options ), options => {\n      if ( splide.value ) {\n        splide.value.options = options;\n      }\n    }, { deep: true } );\n\n    provide<Ref<Splide | undefined>>( SPLIDE_INJECTION_KEY, splide );\n\n    /**\n     * Returns the current index.\n     */\n    const index = computed( () => splide.value?.index || 0 );\n\n    /**\n     * Returns the latest number of slides.\n     */\n    const length = computed( () => splide.value?.length || 0 );\n\n    /**\n     * Goes to the slide specified by the control.\n     *\n     * @see `Splide#go()`\n     *\n     * @param control - A control pattern.\n     */\n    function go( control: number | string ): void {\n      splide.value?.go( control );\n    }\n\n    /**\n     * Registers another splide instance to sync.\n     *\n     * @param target - A target to sync.\n     */\n    function sync( target: Splide ): void {\n      splide.value?.sync( target );\n    }\n\n    /**\n     * Listens to splide events and propagates them as Vue events.\n     *\n     * @private\n     *\n     * @param splide - A splide instance.\n     */\n    function bind( splide: Splide ): void {\n      EVENTS.forEach( event => {\n        splide.on( event, ( ...args: any[] ) => {\n          context.emit( `splide:${ event }`, splide, ...args );\n        } );\n      } );\n    }\n\n    return {\n      splide,\n      root,\n      index,\n      length,\n      go,\n      sync,\n    }\n  },\n} );\n</script>\n"
  },
  {
    "path": "src/js/components/SplideSlide/SplideSlide.vue",
    "content": "<template>\n  <li class=\"splide__slide\">\n    <slot></slot>\n  </li>\n</template>\n\n<script lang=\"ts\">\nimport { defineComponent } from 'vue';\n\n\n/**\n * The component for each slide.\n *\n * @since 0.4.0\n */\nexport default defineComponent( {\n  name: 'SplideSlide',\n} );\n</script>\n"
  },
  {
    "path": "src/js/components/SplideTrack/SplideTrack.vue",
    "content": "<template>\n  <div class=\"splide__track\">\n    <ul class=\"splide__list\">\n      <slot></slot>\n    </ul>\n  </div>\n</template>\n\n<script lang=\"ts\">\nimport { defineComponent, onUpdated, inject, Ref } from 'vue';\nimport { SPLIDE_INJECTION_KEY } from '../../constants/keys';\nimport { Splide } from '@splidejs/splide';\n\n/**\n * The component for the Splide track element.\n *\n * @since 0.6.0\n */\nexport default defineComponent( {\n  name: 'SplideTrack',\n\n  setup() {\n    onUpdated( () => {\n      const splide = inject<Ref<Splide | undefined>>( SPLIDE_INJECTION_KEY );\n      splide?.value?.refresh();\n    } );\n  }\n} );\n</script>\n"
  },
  {
    "path": "src/js/components/index.ts",
    "content": "export { default as Splide } from './Splide/Splide.vue';\nexport { default as SplideTrack } from './SplideTrack/SplideTrack.vue';\nexport { default as SplideSlide } from './SplideSlide/SplideSlide.vue';\n"
  },
  {
    "path": "src/js/constants/events.ts",
    "content": "import {\n  EVENT_ACTIVE,\n  EVENT_ARROWS_MOUNTED,\n  EVENT_ARROWS_UPDATED,\n  EVENT_AUTOPLAY_PAUSE,\n  EVENT_AUTOPLAY_PLAY,\n  EVENT_AUTOPLAY_PLAYING,\n  EVENT_CLICK,\n  EVENT_DESTROY,\n  EVENT_DRAG,\n  EVENT_DRAGGED,\n  EVENT_DRAGGING,\n  EVENT_HIDDEN,\n  EVENT_INACTIVE,\n  EVENT_LAZYLOAD_LOADED,\n  EVENT_MOUNTED,\n  EVENT_MOVE,\n  EVENT_MOVED,\n  EVENT_NAVIGATION_MOUNTED,\n  EVENT_PAGINATION_MOUNTED,\n  EVENT_PAGINATION_UPDATED,\n  EVENT_REFRESH,\n  EVENT_RESIZE,\n  EVENT_RESIZED,\n  EVENT_SCROLL,\n  EVENT_SCROLLED,\n  EVENT_UPDATED,\n  EVENT_VISIBLE,\n  EventMap,\n} from '@splidejs/splide';\n\n\nexport const EVENTS: Array<keyof EventMap> = [\n  EVENT_ACTIVE,\n  EVENT_ARROWS_MOUNTED,\n  EVENT_ARROWS_UPDATED,\n  EVENT_AUTOPLAY_PAUSE,\n  EVENT_AUTOPLAY_PLAY,\n  EVENT_AUTOPLAY_PLAYING,\n  EVENT_CLICK,\n  EVENT_DESTROY,\n  EVENT_DRAG,\n  EVENT_DRAGGED,\n  EVENT_DRAGGING,\n  EVENT_HIDDEN,\n  EVENT_INACTIVE,\n  EVENT_LAZYLOAD_LOADED,\n  EVENT_MOUNTED,\n  EVENT_MOVE,\n  EVENT_MOVED,\n  EVENT_NAVIGATION_MOUNTED,\n  EVENT_PAGINATION_MOUNTED,\n  EVENT_PAGINATION_UPDATED,\n  EVENT_REFRESH,\n  EVENT_RESIZE,\n  EVENT_RESIZED,\n  EVENT_SCROLL,\n  EVENT_SCROLLED,\n  EVENT_UPDATED,\n  EVENT_VISIBLE,\n];\n"
  },
  {
    "path": "src/js/constants/keys.ts",
    "content": "/**\n * The injection key for a splide instance.\n *\n * @since 0.6.0\n */\nexport const SPLIDE_INJECTION_KEY = 'splide';\n"
  },
  {
    "path": "src/js/env.d.ts",
    "content": "/// <reference types=\"vite/client\" />\n\ndeclare module '*.vue' {\n  import { DefineComponent } from 'vue';\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/ban-types\n  const component: DefineComponent<{}, {}, any>;\n  export default component;\n}\n"
  },
  {
    "path": "src/js/index.ts",
    "content": "export * from './components';\nexport { VueSplide as default } from './plugin/plugin';\nexport type { Options } from '@splidejs/splide';\n"
  },
  {
    "path": "src/js/plugin/plugin.ts",
    "content": "import { App } from 'vue';\nimport { Splide, SplideSlide } from '../components';\n\n\nexport const VueSplide = {\n  install( app: App ): void {\n    app.component( Splide.name, Splide );\n    app.component( SplideSlide.name, SplideSlide );\n  },\n};\n"
  },
  {
    "path": "src/js/utils/forOwn/forOwn.ts",
    "content": "/**\n * Iterates over the provided object by own enumerable keys with calling the iteratee function.\n *\n * @param object   - An object to iterate over.\n * @param iteratee - An iteratee function that takes the value and key as arguments.\n *\n * @return A provided object itself.\n */\nexport function forOwn<T extends object>(\n  object: T,\n  iteratee: ( value: T[ keyof T ], key: keyof T ) => boolean | void\n): T {\n  if ( object ) {\n    const keys = Object.keys( object ) as Array<keyof T>;\n\n    for ( let i = 0; i < keys.length; i++ ) {\n      const key = keys[ i ];\n\n      if ( key !== '__proto__' ) {\n        if ( iteratee( object[ key ], key ) === false ) {\n          break;\n        }\n      }\n    }\n  }\n\n  return object;\n}\n"
  },
  {
    "path": "src/js/utils/forOwn/test/forOwn.test.ts",
    "content": ""
  },
  {
    "path": "src/js/utils/index.ts",
    "content": "export { isEqualShallow } from './isEqualShallow/isEqualShallow';\nexport { isObject }       from './isObject/isObject';\nexport { merge }          from './merge/merge';\nexport { forOwn }         from './forOwn/forOwn';\n"
  },
  {
    "path": "src/js/utils/isEqualShallow/isEqualShallow.ts",
    "content": "/**\n * Checks if provided two arrays are shallowly equal or not.\n *\n * @param array1 - An array to test.\n * @param array2 - Anther array to test.\n *\n * @return `true` if they are considered as equal, or otherwise `false`.\n */\nexport function isEqualShallow( array1: unknown[], array2: unknown[] ): boolean {\n  return array1.length === array2.length\n    && ! array1.some( ( elm, index ) => elm !== array2[ index ] );\n}\n"
  },
  {
    "path": "src/js/utils/isEqualShallow/test/isEqualShallow.test.ts",
    "content": "import { isEqualShallow } from '../isEqualShallow';\n\n\ndescribe( 'isEqualShallow', () => {\n  test( 'can check if 2 arrays with primitives are shallowly equal or not.', () => {\n    const array1 = [ 1, true, '1' ];\n    const array2 = [ 1, true, '1' ];\n    const array3 = [ 1, true, '3' ];\n\n    expect( isEqualShallow( array1, array2 ) ).toBe( true );\n    expect( isEqualShallow( array1, array3 ) ).toBe( false );\n  } );\n\n  test( 'can check if 2 arrays with objects are shallowly equal or not.', () => {\n    const object1 = {};\n    const object2 = {};\n\n    const array1 = [ object1, object2 ];\n    const array2 = [ object1, object2 ];\n    const array3 = [ object2, object2 ];\n\n    expect( isEqualShallow( array1, array2 ) ).toBe( true );\n    expect( isEqualShallow( array1, array3 ) ).toBe( false );\n  } );\n\n  test( 'should return false if length of testing arrays are different.', () => {\n    const array1 = [ 1, 1 ];\n    const array2 = [ 1, 1, 1 ];\n\n    expect( isEqualShallow( array1, array2 ) ).toBe( false );\n  } );\n} );\n"
  },
  {
    "path": "src/js/utils/isObject/isObject.ts",
    "content": "/**\n * Checks if the given subject is an object or not.\n *\n * @param subject - A subject to check.\n *\n * @return `true` if the subject is an object, or otherwise `false`.\n */\nexport function isObject( subject: unknown ): subject is object {\n  return subject !== null && typeof subject === 'object';\n}\n"
  },
  {
    "path": "src/js/utils/isObject/test/isObject.test.ts",
    "content": "import { isObject } from '../isObject';\n\n\ndescribe( 'isObject', () => {\n  test( 'can return `true` if the subject is an object.', () => {\n    [ {}, { a: 1 }, new Map(), [] ].forEach( subject => {\n      expect( isObject( subject ) ).toBe( true );\n    } );\n  } );\n\n  test( 'can return `false` if the subject is not an object.', () => {\n    [ 1, true, '1', () => 1, null, undefined, NaN, BigInt( 1 ) ].forEach( subject => {\n      expect( isObject( subject ) ).toBe( false );\n    } );\n  } );\n} );\n"
  },
  {
    "path": "src/js/utils/merge/merge.test.ts",
    "content": ""
  },
  {
    "path": "src/js/utils/merge/merge.ts",
    "content": "import { forOwn } from '../forOwn/forOwn';\nimport { isObject } from '../isObject/isObject';\n\n\n/**\n * Merges U to T.\n *\n * @typeParam T - An object to merge U into.\n * @typeParam U - An object to merge properties from.\n *\n * @return An merged object type.\n */\nexport type Merge<T extends object, U extends object> = Omit<T, keyof U> & {\n  [ K in ( keyof T & keyof U ) ]: U[ K ] extends object\n    ? U[ K ] extends any[]\n      ? U[ K ]\n      : T[ K ] extends object\n        ? Merge<T[ K ], U[ K ]> extends infer A ? Cast<A, object> : never\n        : U[ K ]\n    : U[ K ];\n} & Omit<U, keyof T>;\n\ntype Cast<T, U> = T extends U ? T : U;\n\n/**\n * Recursively merges source properties to the object.\n * Be aware that this method does not merge arrays. They are just duplicated by `slice()`.\n *\n * @param object - An object to merge properties to.\n * @param source - A source object to merge properties from.\n *\n * @return A new object with merged properties.\n */\nexport function merge<T extends object, U extends object>( object: T, source: U ): Merge<T, U> {\n  const merged = object as any;\n\n  forOwn( source, ( value, key ) => {\n    if ( Array.isArray( value ) ) {\n      merged[ key ] = value.slice();\n    } else if ( isObject( value ) ) {\n      merged[ key ] = merge( isObject( merged[ key ] ) ? merged[ key ] : {}, value );\n    } else {\n      merged[ key ] = value;\n    }\n  } );\n\n  return merged as Merge<T, U>;\n}\n"
  },
  {
    "path": "tsconfig.json",
    "content": "{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"useDefineForClassFields\": true,\n    \"strict\": true,\n    \"jsx\": \"preserve\",\n    \"esModuleInterop\": true,\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"declarationDir\": \"./dist/types\",\n    \"declaration\": true,\n    \"declarationMap\": true,\n    \"mapRoot\": \"./\",\n    \"skipLibCheck\": true,\n    \"lib\": [\n      \"esnext\",\n      \"dom\"\n    ]\n  },\n  \"include\": [\n    \"src/js/**/*.ts\",\n    \"src/**/*.d.ts\",\n    \"src/**/*.vue\"\n  ],\n  \"exclude\": [\n    \"node_modules\",\n    \"src/js/**/*.test.ts\"\n  ]\n}\n"
  },
  {
    "path": "vite/vite.config.iife.ts",
    "content": "import { defineConfig } from 'vite';\nimport vue from '@vitejs/plugin-vue';\nimport babel from '@rollup/plugin-babel';\n\n\nexport default defineConfig( {\n  build: {\n\t\tlib: {\n\t\t\tname    : 'VueSplide',\n\t\t\tentry   : './src/js/build/iife.ts',\n      formats : [ 'iife' ],\n\t\t\tfileName: format => `js/vue-splide.min.js`,\n\t\t},\n    rollupOptions: {\n      external: [ 'vue' ],\n      output: {\n        globals: {\n          vue: 'Vue',\n        },\n      },\n      plugins: [\n        babel( {\n          configFile  : './.babelrc',\n          include: [ './src/**'],\n        } ),\n      ],\n    },\n    // Preserves the global variable name.\n    minify: 'terser',\n    emptyOutDir: false,\n\t},\n  plugins: [\n    vue(),\n  ],\n} );\n"
  },
  {
    "path": "vite.config.ts",
    "content": "import { defineConfig } from 'vite';\nimport vue from '@vitejs/plugin-vue';\n\n\nexport default defineConfig( {\n  build: {\n\t\tlib: {\n\t\t\tname    : 'VueSplide',\n\t\t\tentry   : './src/js/index.ts',\n      formats : [ 'es', 'cjs' ],\n\t\t\tfileName: format => {\n        let suffix: string = format;\n\n        if ( format === 'es' ) {\n          suffix = 'esm';\n        }\n\n        return `js/vue-splide.${ suffix }.js`;\n      },\n\t\t},\n    emptyOutDir: false,\n    watch: {\n\t\t\tinclude: 'src/**'\n\t\t},\n    rollupOptions: {\n      external: [ 'vue' ],\n      output: {\n        globals: {\n          vue: 'Vue',\n        },\n        exports: 'named',\n      },\n    },\n    minify: false,\n\t},\n  plugins: [ vue() ],\n} );\n"
  }
]