{"version":3,"file":"splide-extension-grid.min.js","sources":["../../node_modules/@splidejs/splide/dist/js/splide.esm.js","../../node_modules/@splidejs/splide/dist/js/utils/splide-utils.esm.js","../../src/js/constants/classes.ts","../../src/js/constants/defaults.ts","../../src/js/extensions/Grid/Dimension.ts","../../src/js/extensions/Grid/Layout.ts","../../src/js/extensions/Grid/Grid.ts","../../src/js/build/default.ts"],"sourcesContent":["function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\n\n/*!\n * Splide.js\n * Version  : 4.0.1\n * License  : MIT\n * Copyright: 2022 Naotoshi Fujita\n */\nvar MEDIA_PREFERS_REDUCED_MOTION = \"(prefers-reduced-motion: reduce)\";\nvar CREATED = 1;\nvar MOUNTED = 2;\nvar IDLE = 3;\nvar MOVING = 4;\nvar SCROLLING = 5;\nvar DRAGGING = 6;\nvar DESTROYED = 7;\nvar STATES = {\n  CREATED: CREATED,\n  MOUNTED: MOUNTED,\n  IDLE: IDLE,\n  MOVING: MOVING,\n  SCROLLING: SCROLLING,\n  DRAGGING: DRAGGING,\n  DESTROYED: DESTROYED\n};\n\nfunction empty(array) {\n  array.length = 0;\n}\n\nfunction slice(arrayLike, start, end) {\n  return Array.prototype.slice.call(arrayLike, start, end);\n}\n\nfunction apply(func) {\n  return func.bind.apply(func, [null].concat(slice(arguments, 1)));\n}\n\nvar nextTick = setTimeout;\n\nvar noop = function noop() {};\n\nfunction raf(func) {\n  return requestAnimationFrame(func);\n}\n\nfunction typeOf(type, subject) {\n  return typeof subject === type;\n}\n\nfunction isObject(subject) {\n  return !isNull(subject) && typeOf(\"object\", subject);\n}\n\nvar isArray = Array.isArray;\nvar isFunction = apply(typeOf, \"function\");\nvar isString = apply(typeOf, \"string\");\nvar isUndefined = apply(typeOf, \"undefined\");\n\nfunction isNull(subject) {\n  return subject === null;\n}\n\nfunction isHTMLElement(subject) {\n  return subject instanceof HTMLElement;\n}\n\nfunction toArray(value) {\n  return isArray(value) ? value : [value];\n}\n\nfunction forEach(values, iteratee) {\n  toArray(values).forEach(iteratee);\n}\n\nfunction includes(array, value) {\n  return array.indexOf(value) > -1;\n}\n\nfunction push(array, items) {\n  array.push.apply(array, toArray(items));\n  return array;\n}\n\nfunction toggleClass(elm, classes, add) {\n  if (elm) {\n    forEach(classes, function (name) {\n      if (name) {\n        elm.classList[add ? \"add\" : \"remove\"](name);\n      }\n    });\n  }\n}\n\nfunction addClass(elm, classes) {\n  toggleClass(elm, isString(classes) ? classes.split(\" \") : classes, true);\n}\n\nfunction append(parent, children) {\n  forEach(children, parent.appendChild.bind(parent));\n}\n\nfunction before(nodes, ref) {\n  forEach(nodes, function (node) {\n    var parent = (ref || node).parentNode;\n\n    if (parent) {\n      parent.insertBefore(node, ref);\n    }\n  });\n}\n\nfunction matches(elm, selector) {\n  return isHTMLElement(elm) && (elm[\"msMatchesSelector\"] || elm.matches).call(elm, selector);\n}\n\nfunction children(parent, selector) {\n  var children2 = parent ? slice(parent.children) : [];\n  return selector ? children2.filter(function (child) {\n    return matches(child, selector);\n  }) : children2;\n}\n\nfunction child(parent, selector) {\n  return selector ? children(parent, selector)[0] : parent.firstElementChild;\n}\n\nvar ownKeys = Object.keys;\n\nfunction forOwn(object, iteratee, right) {\n  if (object) {\n    var keys = ownKeys(object);\n    keys = right ? keys.reverse() : keys;\n\n    for (var i = 0; i < keys.length; i++) {\n      var 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\nfunction assign(object) {\n  slice(arguments, 1).forEach(function (source) {\n    forOwn(source, function (value, key) {\n      object[key] = source[key];\n    });\n  });\n  return object;\n}\n\nfunction merge(object) {\n  slice(arguments, 1).forEach(function (source) {\n    forOwn(source, function (value, key) {\n      if (isArray(value)) {\n        object[key] = value.slice();\n      } else if (isObject(value)) {\n        object[key] = merge({}, isObject(object[key]) ? object[key] : {}, value);\n      } else {\n        object[key] = value;\n      }\n    });\n  });\n  return object;\n}\n\nfunction omit(object, keys) {\n  toArray(keys || ownKeys(object)).forEach(function (key) {\n    delete object[key];\n  });\n}\n\nfunction removeAttribute(elms, attrs) {\n  forEach(elms, function (elm) {\n    forEach(attrs, function (attr) {\n      elm && elm.removeAttribute(attr);\n    });\n  });\n}\n\nfunction setAttribute(elms, attrs, value) {\n  if (isObject(attrs)) {\n    forOwn(attrs, function (value2, name) {\n      setAttribute(elms, name, value2);\n    });\n  } else {\n    forEach(elms, function (elm) {\n      isNull(value) || value === \"\" ? removeAttribute(elm, attrs) : elm.setAttribute(attrs, String(value));\n    });\n  }\n}\n\nfunction create(tag, attrs, parent) {\n  var elm = document.createElement(tag);\n\n  if (attrs) {\n    isString(attrs) ? addClass(elm, attrs) : setAttribute(elm, attrs);\n  }\n\n  parent && append(parent, elm);\n  return elm;\n}\n\nfunction style(elm, prop, value) {\n  if (isUndefined(value)) {\n    return getComputedStyle(elm)[prop];\n  }\n\n  if (!isNull(value)) {\n    elm.style[prop] = \"\" + value;\n  }\n}\n\nfunction display(elm, display2) {\n  style(elm, \"display\", display2);\n}\n\nfunction focus(elm) {\n  elm[\"setActive\"] && elm[\"setActive\"]() || elm.focus({\n    preventScroll: true\n  });\n}\n\nfunction getAttribute(elm, attr) {\n  return elm.getAttribute(attr);\n}\n\nfunction hasClass(elm, className) {\n  return elm && elm.classList.contains(className);\n}\n\nfunction rect(target) {\n  return target.getBoundingClientRect();\n}\n\nfunction remove(nodes) {\n  forEach(nodes, function (node) {\n    if (node && node.parentNode) {\n      node.parentNode.removeChild(node);\n    }\n  });\n}\n\nfunction parseHtml(html) {\n  return child(new DOMParser().parseFromString(html, \"text/html\").body);\n}\n\nfunction prevent(e, stopPropagation) {\n  e.preventDefault();\n\n  if (stopPropagation) {\n    e.stopPropagation();\n    e.stopImmediatePropagation();\n  }\n}\n\nfunction query(parent, selector) {\n  return parent && parent.querySelector(selector);\n}\n\nfunction queryAll(parent, selector) {\n  return selector ? slice(parent.querySelectorAll(selector)) : [];\n}\n\nfunction removeClass(elm, classes) {\n  toggleClass(elm, classes, false);\n}\n\nfunction timeOf(e) {\n  return e.timeStamp;\n}\n\nfunction unit(value) {\n  return isString(value) ? value : value ? value + \"px\" : \"\";\n}\n\nvar PROJECT_CODE = \"splide\";\nvar DATA_ATTRIBUTE = \"data-\" + PROJECT_CODE;\n\nfunction assert(condition, message) {\n  if (!condition) {\n    throw new Error(\"[\" + PROJECT_CODE + \"] \" + (message || \"\"));\n  }\n}\n\nvar min = Math.min,\n    max = Math.max,\n    floor = Math.floor,\n    ceil = Math.ceil,\n    abs = Math.abs;\n\nfunction approximatelyEqual(x, y, epsilon) {\n  return abs(x - y) < epsilon;\n}\n\nfunction between(number, minOrMax, maxOrMin, exclusive) {\n  var minimum = min(minOrMax, maxOrMin);\n  var maximum = max(minOrMax, maxOrMin);\n  return exclusive ? minimum < number && number < maximum : minimum <= number && number <= maximum;\n}\n\nfunction clamp(number, x, y) {\n  var minimum = min(x, y);\n  var maximum = max(x, y);\n  return min(max(minimum, number), maximum);\n}\n\nfunction sign(x) {\n  return +(x > 0) - +(x < 0);\n}\n\nfunction camelToKebab(string) {\n  return string.replace(/([a-z0-9])([A-Z])/g, \"$1-$2\").toLowerCase();\n}\n\nfunction format(string, replacements) {\n  forEach(replacements, function (replacement) {\n    string = string.replace(\"%s\", \"\" + replacement);\n  });\n  return string;\n}\n\nfunction pad(number) {\n  return number < 10 ? \"0\" + number : \"\" + number;\n}\n\nvar ids = {};\n\nfunction uniqueId(prefix) {\n  return \"\" + prefix + pad(ids[prefix] = (ids[prefix] || 0) + 1);\n}\n\nfunction EventBinder() {\n  var listeners = [];\n\n  function bind(targets, events, callback, options) {\n    forEachEvent(targets, events, function (target, event, namespace) {\n      var isEventTarget = (\"addEventListener\" in target);\n      var remover = isEventTarget ? target.removeEventListener.bind(target, event, callback, options) : target[\"removeListener\"].bind(target, callback);\n      isEventTarget ? target.addEventListener(event, callback, options) : target[\"addListener\"](callback);\n      listeners.push([target, event, namespace, callback, remover]);\n    });\n  }\n\n  function unbind(targets, events, callback) {\n    forEachEvent(targets, events, function (target, event, namespace) {\n      listeners = listeners.filter(function (listener) {\n        if (listener[0] === target && listener[1] === event && listener[2] === namespace && (!callback || listener[3] === callback)) {\n          listener[4]();\n          return false;\n        }\n\n        return true;\n      });\n    });\n  }\n\n  function dispatch(target, type, detail) {\n    var e;\n    var bubbles = true;\n\n    if (typeof CustomEvent === \"function\") {\n      e = new CustomEvent(type, {\n        bubbles: bubbles,\n        detail: detail\n      });\n    } else {\n      e = document.createEvent(\"CustomEvent\");\n      e.initCustomEvent(type, bubbles, false, detail);\n    }\n\n    target.dispatchEvent(e);\n    return e;\n  }\n\n  function forEachEvent(targets, events, iteratee) {\n    forEach(targets, function (target) {\n      target && forEach(events, function (events2) {\n        events2.split(\" \").forEach(function (eventNS) {\n          var fragment = eventNS.split(\".\");\n          iteratee(target, fragment[0], fragment[1]);\n        });\n      });\n    });\n  }\n\n  function destroy() {\n    listeners.forEach(function (data) {\n      data[4]();\n    });\n    empty(listeners);\n  }\n\n  return {\n    bind: bind,\n    unbind: unbind,\n    dispatch: dispatch,\n    destroy: destroy\n  };\n}\n\nvar EVENT_MOUNTED = \"mounted\";\nvar EVENT_READY = \"ready\";\nvar EVENT_MOVE = \"move\";\nvar EVENT_MOVED = \"moved\";\nvar EVENT_SHIFTED = \"shifted\";\nvar EVENT_CLICK = \"click\";\nvar EVENT_ACTIVE = \"active\";\nvar EVENT_INACTIVE = \"inactive\";\nvar EVENT_VISIBLE = \"visible\";\nvar EVENT_HIDDEN = \"hidden\";\nvar EVENT_SLIDE_KEYDOWN = \"slide:keydown\";\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_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\";\n\nfunction EventInterface(Splide2) {\n  var bus = Splide2 ? Splide2.event.bus : document.createDocumentFragment();\n  var binder = EventBinder();\n\n  function on(events, callback) {\n    binder.bind(bus, toArray(events).join(\" \"), function (e) {\n      callback.apply(callback, isArray(e.detail) ? e.detail : []);\n    });\n  }\n\n  function emit(event) {\n    binder.dispatch(bus, event, slice(arguments, 1));\n  }\n\n  if (Splide2) {\n    Splide2.event.on(EVENT_DESTROY, binder.destroy);\n  }\n\n  return assign(binder, {\n    bus: bus,\n    on: on,\n    off: apply(binder.unbind, bus),\n    emit: emit\n  });\n}\n\nfunction RequestInterval(interval, onInterval, onUpdate, limit) {\n  var now = Date.now;\n  var startTime;\n  var rate = 0;\n  var id;\n  var paused = true;\n  var count = 0;\n\n  function update() {\n    if (!paused) {\n      rate = interval ? min((now() - startTime) / interval, 1) : 1;\n      onUpdate && onUpdate(rate);\n\n      if (rate >= 1) {\n        onInterval();\n        startTime = now();\n\n        if (limit && ++count >= limit) {\n          return pause();\n        }\n      }\n\n      raf(update);\n    }\n  }\n\n  function start(resume) {\n    !resume && cancel();\n    startTime = now() - (resume ? rate * interval : 0);\n    paused = false;\n    raf(update);\n  }\n\n  function pause() {\n    paused = true;\n  }\n\n  function rewind() {\n    startTime = now();\n    rate = 0;\n\n    if (onUpdate) {\n      onUpdate(rate);\n    }\n  }\n\n  function cancel() {\n    id && cancelAnimationFrame(id);\n    rate = 0;\n    id = 0;\n    paused = true;\n  }\n\n  function set(time) {\n    interval = time;\n  }\n\n  function isPaused() {\n    return paused;\n  }\n\n  return {\n    start: start,\n    rewind: rewind,\n    pause: pause,\n    cancel: cancel,\n    set: set,\n    isPaused: isPaused\n  };\n}\n\nfunction State(initialState) {\n  var state = initialState;\n\n  function set(value) {\n    state = value;\n  }\n\n  function is(states) {\n    return includes(toArray(states), state);\n  }\n\n  return {\n    set: set,\n    is: is\n  };\n}\n\nfunction Throttle(func, duration) {\n  var interval;\n\n  function throttled() {\n    if (!interval) {\n      interval = RequestInterval(duration || 0, function () {\n        func();\n        interval = null;\n      }, null, 1);\n      interval.start();\n    }\n  }\n\n  return throttled;\n}\n\nfunction Media(Splide2, Components2, options) {\n  var state = Splide2.state;\n  var breakpoints = options.breakpoints || {};\n  var reducedMotion = options.reducedMotion || {};\n  var binder = EventBinder();\n  var queries = [];\n\n  function setup() {\n    var isMin = options.mediaQuery === \"min\";\n    ownKeys(breakpoints).sort(function (n, m) {\n      return isMin ? +n - +m : +m - +n;\n    }).forEach(function (key) {\n      register(breakpoints[key], \"(\" + (isMin ? \"min\" : \"max\") + \"-width:\" + key + \"px)\");\n    });\n    register(reducedMotion, MEDIA_PREFERS_REDUCED_MOTION);\n    update();\n  }\n\n  function destroy(completely) {\n    if (completely) {\n      binder.destroy();\n    }\n  }\n\n  function register(options2, query) {\n    var queryList = matchMedia(query);\n    binder.bind(queryList, \"change\", update);\n    queries.push([options2, queryList]);\n  }\n\n  function update() {\n    var destroyed = state.is(DESTROYED);\n    var direction = options.direction;\n    var merged = queries.reduce(function (merged2, entry) {\n      return merge(merged2, entry[1].matches ? entry[0] : {});\n    }, {});\n    omit(options);\n    set(merged);\n\n    if (options.destroy) {\n      Splide2.destroy(options.destroy === \"completely\");\n    } else if (destroyed) {\n      destroy(true);\n      Splide2.mount();\n    } else {\n      direction !== options.direction && Splide2.refresh();\n    }\n  }\n\n  function reduce(enable) {\n    if (matchMedia(MEDIA_PREFERS_REDUCED_MOTION).matches) {\n      enable ? merge(options, reducedMotion) : omit(options, ownKeys(reducedMotion));\n    }\n  }\n\n  function set(opts, user) {\n    merge(options, opts);\n    user && merge(Object.getPrototypeOf(options), opts);\n\n    if (!state.is(CREATED)) {\n      Splide2.emit(EVENT_UPDATED, options);\n    }\n  }\n\n  return {\n    setup: setup,\n    destroy: destroy,\n    reduce: reduce,\n    set: set\n  };\n}\n\nvar ARROW = \"Arrow\";\nvar ARROW_LEFT = ARROW + \"Left\";\nvar ARROW_RIGHT = ARROW + \"Right\";\nvar ARROW_UP = ARROW + \"Up\";\nvar ARROW_DOWN = ARROW + \"Down\";\nvar LTR = \"ltr\";\nvar RTL = \"rtl\";\nvar TTB = \"ttb\";\nvar ORIENTATION_MAP = {\n  width: [\"height\"],\n  left: [\"top\", \"right\"],\n  right: [\"bottom\", \"left\"],\n  x: [\"y\"],\n  X: [\"Y\"],\n  Y: [\"X\"],\n  ArrowLeft: [ARROW_UP, ARROW_RIGHT],\n  ArrowRight: [ARROW_DOWN, ARROW_LEFT]\n};\n\nfunction Direction(Splide2, Components2, options) {\n  function resolve(prop, axisOnly, direction) {\n    direction = direction || options.direction;\n    var index = direction === RTL && !axisOnly ? 1 : direction === TTB ? 0 : -1;\n    return ORIENTATION_MAP[prop] && ORIENTATION_MAP[prop][index] || prop.replace(/width|left|right/i, function (match, offset) {\n      var replacement = ORIENTATION_MAP[match.toLowerCase()][index] || match;\n      return offset > 0 ? replacement.charAt(0).toUpperCase() + replacement.slice(1) : replacement;\n    });\n  }\n\n  function orient(value) {\n    return value * (options.direction === RTL ? 1 : -1);\n  }\n\n  return {\n    resolve: resolve,\n    orient: orient\n  };\n}\n\nvar ROLE = \"role\";\nvar TAB_INDEX = \"tabindex\";\nvar DISABLED = \"disabled\";\nvar ARIA_PREFIX = \"aria-\";\nvar ARIA_CONTROLS = ARIA_PREFIX + \"controls\";\nvar ARIA_CURRENT = ARIA_PREFIX + \"current\";\nvar ARIA_SELECTED = ARIA_PREFIX + \"selected\";\nvar ARIA_LABEL = ARIA_PREFIX + \"label\";\nvar ARIA_LABELLEDBY = ARIA_PREFIX + \"labelledby\";\nvar ARIA_HIDDEN = ARIA_PREFIX + \"hidden\";\nvar ARIA_ORIENTATION = ARIA_PREFIX + \"orientation\";\nvar ARIA_ROLEDESCRIPTION = ARIA_PREFIX + \"roledescription\";\nvar ARIA_LIVE = ARIA_PREFIX + \"live\";\nvar ARIA_RELEVANT = ARIA_PREFIX + \"relevant\";\nvar ALL_ATTRIBUTES = [ROLE, TAB_INDEX, DISABLED, ARIA_CONTROLS, ARIA_CURRENT, ARIA_LABEL, ARIA_LABELLEDBY, ARIA_HIDDEN, ARIA_ORIENTATION, ARIA_ROLEDESCRIPTION];\nvar CLASS_ROOT = PROJECT_CODE;\nvar CLASS_TRACK = PROJECT_CODE + \"__track\";\nvar CLASS_LIST = PROJECT_CODE + \"__list\";\nvar CLASS_SLIDE = PROJECT_CODE + \"__slide\";\nvar CLASS_CLONE = CLASS_SLIDE + \"--clone\";\nvar CLASS_CONTAINER = CLASS_SLIDE + \"__container\";\nvar CLASS_ARROWS = PROJECT_CODE + \"__arrows\";\nvar CLASS_ARROW = PROJECT_CODE + \"__arrow\";\nvar CLASS_ARROW_PREV = CLASS_ARROW + \"--prev\";\nvar CLASS_ARROW_NEXT = CLASS_ARROW + \"--next\";\nvar CLASS_PAGINATION = PROJECT_CODE + \"__pagination\";\nvar CLASS_PAGINATION_PAGE = CLASS_PAGINATION + \"__page\";\nvar CLASS_PROGRESS = PROJECT_CODE + \"__progress\";\nvar CLASS_PROGRESS_BAR = CLASS_PROGRESS + \"__bar\";\nvar CLASS_TOGGLE = PROJECT_CODE + \"__toggle\";\nvar CLASS_TOGGLE_PLAY = CLASS_TOGGLE + \"__play\";\nvar CLASS_TOGGLE_PAUSE = CLASS_TOGGLE + \"__pause\";\nvar CLASS_SPINNER = PROJECT_CODE + \"__spinner\";\nvar CLASS_SR = PROJECT_CODE + \"__sr\";\nvar CLASS_INITIALIZED = \"is-initialized\";\nvar CLASS_ACTIVE = \"is-active\";\nvar CLASS_PREV = \"is-prev\";\nvar CLASS_NEXT = \"is-next\";\nvar CLASS_VISIBLE = \"is-visible\";\nvar CLASS_LOADING = \"is-loading\";\nvar CLASS_FOCUS_IN = \"is-focus-in\";\nvar STATUS_CLASSES = [CLASS_ACTIVE, CLASS_VISIBLE, CLASS_PREV, CLASS_NEXT, CLASS_LOADING, CLASS_FOCUS_IN];\nvar CLASSES = {\n  slide: CLASS_SLIDE,\n  clone: CLASS_CLONE,\n  arrows: CLASS_ARROWS,\n  arrow: CLASS_ARROW,\n  prev: CLASS_ARROW_PREV,\n  next: CLASS_ARROW_NEXT,\n  pagination: CLASS_PAGINATION,\n  page: CLASS_PAGINATION_PAGE,\n  spinner: CLASS_SPINNER\n};\n\nfunction closest(from, selector) {\n  if (isFunction(from.closest)) {\n    return from.closest(selector);\n  }\n\n  var elm = from;\n\n  while (elm && elm.nodeType === 1) {\n    if (matches(elm, selector)) {\n      break;\n    }\n\n    elm = elm.parentElement;\n  }\n\n  return elm;\n}\n\nvar FRICTION = 5;\nvar LOG_INTERVAL = 200;\nvar POINTER_DOWN_EVENTS = \"touchstart mousedown\";\nvar POINTER_MOVE_EVENTS = \"touchmove mousemove\";\nvar POINTER_UP_EVENTS = \"touchend touchcancel mouseup\";\n\nfunction Elements(Splide2, Components2, options) {\n  var _EventInterface = EventInterface(Splide2),\n      on = _EventInterface.on,\n      bind = _EventInterface.bind;\n\n  var root = Splide2.root;\n  var i18n = options.i18n;\n  var elements = {};\n  var slides = [];\n  var rootClasses = [];\n  var trackClasses = [];\n  var track;\n  var list;\n  var isUsingKey;\n\n  function setup() {\n    collect();\n    init();\n    update();\n  }\n\n  function mount() {\n    on(EVENT_REFRESH, destroy);\n    on(EVENT_REFRESH, setup);\n    on(EVENT_UPDATED, update);\n    bind(document, POINTER_DOWN_EVENTS + \" keydown\", function (e) {\n      isUsingKey = e.type === \"keydown\";\n    }, {\n      capture: true\n    });\n    bind(root, \"focusin\", function () {\n      toggleClass(root, CLASS_FOCUS_IN, !!isUsingKey);\n    });\n  }\n\n  function destroy(completely) {\n    var attrs = ALL_ATTRIBUTES.concat(\"style\");\n    empty(slides);\n    removeClass(root, rootClasses);\n    removeClass(track, trackClasses);\n    removeAttribute([track, list], attrs);\n    removeAttribute(root, completely ? attrs : [\"style\", ARIA_ROLEDESCRIPTION]);\n  }\n\n  function update() {\n    removeClass(root, rootClasses);\n    removeClass(track, trackClasses);\n    rootClasses = getClasses(CLASS_ROOT);\n    trackClasses = getClasses(CLASS_TRACK);\n    addClass(root, rootClasses);\n    addClass(track, trackClasses);\n    setAttribute(root, ARIA_LABEL, options.label);\n    setAttribute(root, ARIA_LABELLEDBY, options.labelledby);\n  }\n\n  function collect() {\n    track = find(\".\" + CLASS_TRACK);\n    list = child(track, \".\" + CLASS_LIST);\n    assert(track && list, \"A track/list element is missing.\");\n    push(slides, children(list, \".\" + CLASS_SLIDE + \":not(.\" + CLASS_CLONE + \")\"));\n    forOwn({\n      arrows: CLASS_ARROWS,\n      pagination: CLASS_PAGINATION,\n      prev: CLASS_ARROW_PREV,\n      next: CLASS_ARROW_NEXT,\n      bar: CLASS_PROGRESS_BAR,\n      toggle: CLASS_TOGGLE\n    }, function (className, key) {\n      elements[key] = find(\".\" + className);\n    });\n    assign(elements, {\n      root: root,\n      track: track,\n      list: list,\n      slides: slides\n    });\n  }\n\n  function init() {\n    var id = root.id || uniqueId(PROJECT_CODE);\n    var role = options.role;\n    root.id = id;\n    track.id = track.id || id + \"-track\";\n    list.id = list.id || id + \"-list\";\n\n    if (!getAttribute(root, ROLE) && root.tagName !== \"SECTION\" && role) {\n      setAttribute(root, ROLE, role);\n    }\n\n    setAttribute(root, ARIA_ROLEDESCRIPTION, i18n.carousel);\n    setAttribute(list, ROLE, \"presentation\");\n  }\n\n  function find(selector) {\n    var elm = query(root, selector);\n    return elm && closest(elm, \".\" + CLASS_ROOT) === root ? elm : void 0;\n  }\n\n  function getClasses(base) {\n    return [base + \"--\" + options.type, base + \"--\" + options.direction, options.drag && base + \"--draggable\", options.isNavigation && base + \"--nav\", base === CLASS_ROOT && CLASS_ACTIVE];\n  }\n\n  return assign(elements, {\n    setup: setup,\n    mount: mount,\n    destroy: destroy\n  });\n}\n\nvar SLIDE = \"slide\";\nvar LOOP = \"loop\";\nvar FADE = \"fade\";\n\nfunction Slide$1(Splide2, index, slideIndex, slide) {\n  var event = EventInterface(Splide2);\n  var on = event.on,\n      emit = event.emit,\n      bind = event.bind;\n  var Components = Splide2.Components,\n      root = Splide2.root,\n      options = Splide2.options;\n  var isNavigation = options.isNavigation,\n      updateOnMove = options.updateOnMove,\n      i18n = options.i18n,\n      pagination = options.pagination,\n      slideFocus = options.slideFocus;\n  var resolve = Components.Direction.resolve;\n  var styles = getAttribute(slide, \"style\");\n  var label = getAttribute(slide, ARIA_LABEL);\n  var isClone = slideIndex > -1;\n  var container = child(slide, \".\" + CLASS_CONTAINER);\n  var focusableNodes = queryAll(slide, options.focusableNodes || \"\");\n  var destroyed;\n\n  function mount() {\n    if (!isClone) {\n      slide.id = root.id + \"-slide\" + pad(index + 1);\n      setAttribute(slide, ROLE, pagination ? \"tabpanel\" : \"group\");\n      setAttribute(slide, ARIA_ROLEDESCRIPTION, i18n.slide);\n      setAttribute(slide, ARIA_LABEL, label || format(i18n.slideLabel, [index + 1, Splide2.length]));\n    }\n\n    listen();\n  }\n\n  function listen() {\n    bind(slide, \"click\", apply(emit, EVENT_CLICK, self));\n    bind(slide, \"keydown\", apply(emit, EVENT_SLIDE_KEYDOWN, self));\n    on([EVENT_MOVED, EVENT_SHIFTED, EVENT_SCROLLED], update);\n    on(EVENT_NAVIGATION_MOUNTED, initNavigation);\n\n    if (updateOnMove) {\n      on(EVENT_MOVE, onMove);\n    }\n  }\n\n  function destroy() {\n    destroyed = true;\n    event.destroy();\n    removeClass(slide, STATUS_CLASSES);\n    removeAttribute(slide, ALL_ATTRIBUTES);\n    setAttribute(slide, \"style\", styles);\n    setAttribute(slide, ARIA_LABEL, label || \"\");\n  }\n\n  function initNavigation() {\n    var controls = Splide2.splides.map(function (target) {\n      var Slide2 = target.splide.Components.Slides.getAt(index);\n      return Slide2 ? Slide2.slide.id : \"\";\n    }).join(\" \");\n    setAttribute(slide, ARIA_LABEL, format(i18n.slideX, (isClone ? slideIndex : index) + 1));\n    setAttribute(slide, ARIA_CONTROLS, controls);\n    setAttribute(slide, ROLE, slideFocus ? \"button\" : \"\");\n    slideFocus && removeAttribute(slide, ARIA_ROLEDESCRIPTION);\n  }\n\n  function onMove() {\n    if (!destroyed) {\n      update();\n    }\n  }\n\n  function update() {\n    if (!destroyed) {\n      var curr = Splide2.index;\n      updateActivity();\n      updateVisibility();\n      toggleClass(slide, CLASS_PREV, index === curr - 1);\n      toggleClass(slide, CLASS_NEXT, index === curr + 1);\n    }\n  }\n\n  function updateActivity() {\n    var active = isActive();\n\n    if (active !== hasClass(slide, CLASS_ACTIVE)) {\n      toggleClass(slide, CLASS_ACTIVE, active);\n      setAttribute(slide, ARIA_CURRENT, isNavigation && active || \"\");\n      emit(active ? EVENT_ACTIVE : EVENT_INACTIVE, self);\n    }\n  }\n\n  function updateVisibility() {\n    var visible = isVisible();\n    var hidden = !visible && (!isActive() || isClone);\n\n    if (!Splide2.state.is([MOVING, SCROLLING])) {\n      setAttribute(slide, ARIA_HIDDEN, hidden || \"\");\n    }\n\n    setAttribute(focusableNodes, TAB_INDEX, hidden ? -1 : \"\");\n\n    if (slideFocus) {\n      setAttribute(slide, TAB_INDEX, hidden ? -1 : 0);\n    }\n\n    if (visible !== hasClass(slide, CLASS_VISIBLE)) {\n      toggleClass(slide, CLASS_VISIBLE, visible);\n      emit(visible ? EVENT_VISIBLE : EVENT_HIDDEN, self);\n    }\n\n    if (!visible && document.activeElement === slide) {\n      var Slide2 = Components.Slides.getAt(Splide2.index);\n      Slide2 && focus(Slide2.slide);\n    }\n  }\n\n  function style$1(prop, value, useContainer) {\n    style(useContainer && container || slide, prop, value);\n  }\n\n  function isActive() {\n    var curr = Splide2.index;\n    return curr === index || options.cloneStatus && curr === slideIndex;\n  }\n\n  function isVisible() {\n    if (Splide2.is(FADE)) {\n      return isActive();\n    }\n\n    var trackRect = rect(Components.Elements.track);\n    var slideRect = rect(slide);\n    var left = resolve(\"left\");\n    var right = resolve(\"right\");\n    return floor(trackRect[left]) <= ceil(slideRect[left]) && floor(slideRect[right]) <= ceil(trackRect[right]);\n  }\n\n  function isWithin(from, distance) {\n    var diff = abs(from - index);\n\n    if (!isClone && (options.rewind || Splide2.is(LOOP))) {\n      diff = min(diff, Splide2.length - diff);\n    }\n\n    return diff <= distance;\n  }\n\n  var self = {\n    index: index,\n    slideIndex: slideIndex,\n    slide: slide,\n    container: container,\n    isClone: isClone,\n    mount: mount,\n    destroy: destroy,\n    update: update,\n    style: style$1,\n    isWithin: isWithin\n  };\n  return self;\n}\n\nfunction Slides(Splide2, Components2, options) {\n  var _EventInterface2 = EventInterface(Splide2),\n      on = _EventInterface2.on,\n      emit = _EventInterface2.emit,\n      bind = _EventInterface2.bind;\n\n  var _Components2$Elements = Components2.Elements,\n      slides = _Components2$Elements.slides,\n      list = _Components2$Elements.list;\n  var Slides2 = [];\n\n  function mount() {\n    init();\n    on(EVENT_REFRESH, destroy);\n    on(EVENT_REFRESH, init);\n    on([EVENT_MOUNTED, EVENT_REFRESH], function () {\n      Slides2.sort(function (Slide1, Slide2) {\n        return Slide1.index - Slide2.index;\n      });\n    });\n  }\n\n  function init() {\n    slides.forEach(function (slide, index) {\n      register(slide, index, -1);\n    });\n  }\n\n  function destroy() {\n    forEach$1(function (Slide2) {\n      Slide2.destroy();\n    });\n    empty(Slides2);\n  }\n\n  function update() {\n    forEach$1(function (Slide2) {\n      Slide2.update();\n    });\n  }\n\n  function register(slide, index, slideIndex) {\n    var object = Slide$1(Splide2, index, slideIndex, slide);\n    object.mount();\n    Slides2.push(object);\n  }\n\n  function get(excludeClones) {\n    return excludeClones ? filter(function (Slide2) {\n      return !Slide2.isClone;\n    }) : Slides2;\n  }\n\n  function getIn(page) {\n    var Controller = Components2.Controller;\n    var index = Controller.toIndex(page);\n    var max = Controller.hasFocus() ? 1 : options.perPage;\n    return filter(function (Slide2) {\n      return between(Slide2.index, index, index + max - 1);\n    });\n  }\n\n  function getAt(index) {\n    return filter(index)[0];\n  }\n\n  function add(items, index) {\n    forEach(items, function (slide) {\n      if (isString(slide)) {\n        slide = parseHtml(slide);\n      }\n\n      if (isHTMLElement(slide)) {\n        var ref = slides[index];\n        ref ? before(slide, ref) : append(list, slide);\n        addClass(slide, options.classes.slide);\n        observeImages(slide, apply(emit, EVENT_RESIZE));\n      }\n    });\n    emit(EVENT_REFRESH);\n  }\n\n  function remove$1(matcher) {\n    remove(filter(matcher).map(function (Slide2) {\n      return Slide2.slide;\n    }));\n    emit(EVENT_REFRESH);\n  }\n\n  function forEach$1(iteratee, excludeClones) {\n    get(excludeClones).forEach(iteratee);\n  }\n\n  function filter(matcher) {\n    return Slides2.filter(isFunction(matcher) ? matcher : function (Slide2) {\n      return isString(matcher) ? matches(Slide2.slide, matcher) : includes(toArray(matcher), Slide2.index);\n    });\n  }\n\n  function style(prop, value, useContainer) {\n    forEach$1(function (Slide2) {\n      Slide2.style(prop, value, useContainer);\n    });\n  }\n\n  function observeImages(elm, callback) {\n    var images = queryAll(elm, \"img\");\n    var length = images.length;\n\n    if (length) {\n      images.forEach(function (img) {\n        bind(img, \"load error\", function () {\n          if (! --length) {\n            callback();\n          }\n        });\n      });\n    } else {\n      callback();\n    }\n  }\n\n  function getLength(excludeClones) {\n    return excludeClones ? slides.length : Slides2.length;\n  }\n\n  function isEnough() {\n    return Slides2.length > options.perPage;\n  }\n\n  return {\n    mount: mount,\n    destroy: destroy,\n    update: update,\n    register: register,\n    get: get,\n    getIn: getIn,\n    getAt: getAt,\n    add: add,\n    remove: remove$1,\n    forEach: forEach$1,\n    filter: filter,\n    style: style,\n    getLength: getLength,\n    isEnough: isEnough\n  };\n}\n\nfunction Layout(Splide2, Components2, options) {\n  var _EventInterface3 = EventInterface(Splide2),\n      on = _EventInterface3.on,\n      bind = _EventInterface3.bind,\n      emit = _EventInterface3.emit;\n\n  var Slides = Components2.Slides;\n  var resolve = Components2.Direction.resolve;\n  var _Components2$Elements2 = Components2.Elements,\n      root = _Components2$Elements2.root,\n      track = _Components2$Elements2.track,\n      list = _Components2$Elements2.list;\n  var getAt = Slides.getAt,\n      styleSlides = Slides.style;\n  var vertical;\n  var rootRect;\n\n  function mount() {\n    init();\n    bind(window, \"resize load\", Throttle(apply(emit, EVENT_RESIZE)));\n    on([EVENT_UPDATED, EVENT_REFRESH], init);\n    on(EVENT_RESIZE, resize);\n  }\n\n  function init() {\n    rootRect = null;\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();\n  }\n\n  function resize() {\n    var newRect = rect(root);\n\n    if (!rootRect || rootRect.width !== newRect.width || rootRect.height !== newRect.height) {\n      style(track, \"height\", cssTrackHeight());\n      styleSlides(resolve(\"marginRight\"), unit(options.gap));\n      styleSlides(\"width\", cssSlideWidth());\n      styleSlides(\"height\", cssSlideHeight(), true);\n      rootRect = newRect;\n      emit(EVENT_RESIZED);\n    }\n  }\n\n  function cssPadding(right) {\n    var padding = options.padding;\n    var prop = resolve(right ? \"right\" : \"left\");\n    return padding && unit(padding[prop] || (isObject(padding) ? 0 : padding)) || \"0px\";\n  }\n\n  function cssTrackHeight() {\n    var height = \"\";\n\n    if (vertical) {\n      height = cssHeight();\n      assert(height, \"height or heightRatio is missing.\");\n      height = \"calc(\" + height + \" - \" + cssPadding(false) + \" - \" + cssPadding(true) + \")\";\n    }\n\n    return height;\n  }\n\n  function cssHeight() {\n    return unit(options.height || rect(list).width * options.heightRatio);\n  }\n\n  function cssSlideWidth() {\n    return options.autoWidth ? null : unit(options.fixedWidth) || (vertical ? \"\" : cssSlideSize());\n  }\n\n  function cssSlideHeight() {\n    return unit(options.fixedHeight) || (vertical ? options.autoHeight ? null : cssSlideSize() : cssHeight());\n  }\n\n  function cssSlideSize() {\n    var gap = unit(options.gap);\n    return \"calc((100%\" + (gap && \" + \" + gap) + \")/\" + (options.perPage || 1) + (gap && \" - \" + gap) + \")\";\n  }\n\n  function listSize() {\n    return rect(list)[resolve(\"width\")];\n  }\n\n  function slideSize(index, withoutGap) {\n    var Slide = getAt(index || 0);\n    return Slide ? rect(Slide.slide)[resolve(\"width\")] + (withoutGap ? 0 : getGap()) : 0;\n  }\n\n  function totalSize(index, withoutGap) {\n    var Slide = getAt(index);\n\n    if (Slide) {\n      var right = rect(Slide.slide)[resolve(\"right\")];\n      var left = rect(list)[resolve(\"left\")];\n      return abs(right - left) + (withoutGap ? 0 : getGap());\n    }\n\n    return 0;\n  }\n\n  function sliderSize() {\n    return totalSize(Splide2.length - 1, true) - totalSize(-1, true);\n  }\n\n  function getGap() {\n    var Slide = getAt(0);\n    return Slide && parseFloat(style(Slide.slide, resolve(\"marginRight\"))) || 0;\n  }\n\n  function getPadding(right) {\n    return parseFloat(style(track, resolve(\"padding\" + (right ? \"Right\" : \"Left\")))) || 0;\n  }\n\n  return {\n    mount: mount,\n    listSize: listSize,\n    slideSize: slideSize,\n    sliderSize: sliderSize,\n    totalSize: totalSize,\n    getPadding: getPadding\n  };\n}\n\nvar MULTIPLIER = 2;\n\nfunction Clones(Splide2, Components2, options) {\n  var _EventInterface4 = EventInterface(Splide2),\n      on = _EventInterface4.on,\n      emit = _EventInterface4.emit;\n\n  var Elements = Components2.Elements,\n      Slides = Components2.Slides;\n  var resolve = Components2.Direction.resolve;\n  var clones = [];\n  var cloneCount;\n\n  function mount() {\n    init();\n    on(EVENT_REFRESH, destroy);\n    on(EVENT_REFRESH, init);\n    on([EVENT_UPDATED, EVENT_RESIZE], observe);\n  }\n\n  function init() {\n    if (cloneCount = computeCloneCount()) {\n      generate(cloneCount);\n      emit(EVENT_RESIZE);\n    }\n  }\n\n  function destroy() {\n    remove(clones);\n    empty(clones);\n  }\n\n  function observe() {\n    if (cloneCount < computeCloneCount()) {\n      emit(EVENT_REFRESH);\n    }\n  }\n\n  function generate(count) {\n    var slides = Slides.get().slice();\n    var length = slides.length;\n\n    if (length) {\n      while (slides.length < count) {\n        push(slides, slides);\n      }\n\n      push(slides.slice(-count), slides.slice(0, count)).forEach(function (Slide, index) {\n        var isHead = index < count;\n        var clone = cloneDeep(Slide.slide, index);\n        isHead ? before(clone, slides[0].slide) : append(Elements.list, clone);\n        push(clones, clone);\n        Slides.register(clone, index - count + (isHead ? 0 : length), Slide.index);\n      });\n    }\n  }\n\n  function cloneDeep(elm, index) {\n    var clone = elm.cloneNode(true);\n    addClass(clone, options.classes.clone);\n    clone.id = Splide2.root.id + \"-clone\" + pad(index + 1);\n    return clone;\n  }\n\n  function computeCloneCount() {\n    var clones2 = options.clones;\n\n    if (!Splide2.is(LOOP)) {\n      clones2 = 0;\n    } else if (!clones2) {\n      var fixedSize = options[resolve(\"fixedWidth\")] && Components2.Layout.slideSize(0);\n      var fixedCount = fixedSize && ceil(rect(Elements.track)[resolve(\"width\")] / fixedSize);\n      clones2 = fixedCount || options[resolve(\"autoWidth\")] && Splide2.length || options.perPage * MULTIPLIER;\n    }\n\n    return clones2;\n  }\n\n  return {\n    mount: mount,\n    destroy: destroy\n  };\n}\n\nfunction Move(Splide2, Components2, options) {\n  var _EventInterface5 = EventInterface(Splide2),\n      on = _EventInterface5.on,\n      emit = _EventInterface5.emit;\n\n  var set = Splide2.state.set;\n  var _Components2$Layout = Components2.Layout,\n      slideSize = _Components2$Layout.slideSize,\n      getPadding = _Components2$Layout.getPadding,\n      totalSize = _Components2$Layout.totalSize,\n      listSize = _Components2$Layout.listSize,\n      sliderSize = _Components2$Layout.sliderSize;\n  var _Components2$Directio = Components2.Direction,\n      resolve = _Components2$Directio.resolve,\n      orient = _Components2$Directio.orient;\n  var _Components2$Elements3 = Components2.Elements,\n      list = _Components2$Elements3.list,\n      track = _Components2$Elements3.track;\n  var Transition;\n\n  function mount() {\n    Transition = Components2.Transition;\n    on([EVENT_MOUNTED, EVENT_RESIZED, EVENT_UPDATED, EVENT_REFRESH], reposition);\n  }\n\n  function reposition() {\n    if (!Components2.Controller.isBusy()) {\n      Components2.Scroll.cancel();\n      jump(Splide2.index);\n      Components2.Slides.update();\n    }\n  }\n\n  function move(dest, index, prev, callback) {\n    var position = getPosition();\n\n    if (dest !== index && canShift(dest > index)) {\n      cancel();\n      translate(shift(position, dest > index), true);\n    }\n\n    set(MOVING);\n    emit(EVENT_MOVE, index, prev, dest);\n    Transition.start(index, function () {\n      set(IDLE);\n      emit(EVENT_MOVED, index, prev, dest);\n      callback && callback();\n    });\n  }\n\n  function jump(index) {\n    translate(toPosition(index, true));\n  }\n\n  function translate(position, preventLoop) {\n    if (!Splide2.is(FADE)) {\n      var destination = preventLoop ? position : loop(position);\n      style(list, \"transform\", \"translate\" + resolve(\"X\") + \"(\" + destination + \"px)\");\n      position !== destination && emit(EVENT_SHIFTED);\n    }\n  }\n\n  function loop(position) {\n    if (Splide2.is(LOOP)) {\n      var diff = orient(position - getPosition());\n      var exceededMin = exceededLimit(false, position) && diff < 0;\n      var exceededMax = exceededLimit(true, position) && diff > 0;\n\n      if (exceededMin || exceededMax) {\n        position = shift(position, exceededMax);\n      }\n    }\n\n    return position;\n  }\n\n  function shift(position, backwards) {\n    var excess = position - getLimit(backwards);\n    var size = sliderSize();\n    position -= orient(size * (ceil(abs(excess) / size) || 1)) * (backwards ? 1 : -1);\n    return position;\n  }\n\n  function cancel() {\n    translate(getPosition());\n    Transition.cancel();\n  }\n\n  function toIndex(position) {\n    var Slides = Components2.Slides.get();\n    var index = 0;\n    var minDistance = Infinity;\n\n    for (var i = 0; i < Slides.length; i++) {\n      var slideIndex = Slides[i].index;\n      var distance = abs(toPosition(slideIndex, true) - position);\n\n      if (distance <= minDistance) {\n        minDistance = distance;\n        index = slideIndex;\n      } else {\n        break;\n      }\n    }\n\n    return index;\n  }\n\n  function toPosition(index, trimming) {\n    var position = orient(totalSize(index - 1) - offset(index));\n    return trimming ? trim(position) : position;\n  }\n\n  function getPosition() {\n    var left = resolve(\"left\");\n    return rect(list)[left] - rect(track)[left] + orient(getPadding(false));\n  }\n\n  function trim(position) {\n    if (options.trimSpace && Splide2.is(SLIDE)) {\n      position = clamp(position, 0, orient(sliderSize() - listSize()));\n    }\n\n    return position;\n  }\n\n  function offset(index) {\n    var focus = options.focus;\n    return focus === \"center\" ? (listSize() - slideSize(index, true)) / 2 : +focus * slideSize(index) || 0;\n  }\n\n  function getLimit(max) {\n    return toPosition(max ? Components2.Controller.getEnd() : 0, !!options.trimSpace);\n  }\n\n  function canShift(backwards) {\n    var shifted = orient(shift(getPosition(), backwards));\n    return backwards ? shifted >= 0 : shifted <= list[\"scroll\" + resolve(\"Width\")] - rect(track)[resolve(\"width\")];\n  }\n\n  function exceededLimit(max, position) {\n    position = isUndefined(position) ? getPosition() : position;\n    var exceededMin = max !== true && orient(position) < orient(getLimit(false));\n    var exceededMax = max !== false && orient(position) > orient(getLimit(true));\n    return exceededMin || exceededMax;\n  }\n\n  return {\n    mount: mount,\n    move: move,\n    jump: jump,\n    translate: translate,\n    shift: shift,\n    cancel: cancel,\n    toIndex: toIndex,\n    toPosition: toPosition,\n    getPosition: getPosition,\n    getLimit: getLimit,\n    exceededLimit: exceededLimit,\n    reposition: reposition\n  };\n}\n\nfunction Controller(Splide2, Components2, options) {\n  var _EventInterface6 = EventInterface(Splide2),\n      on = _EventInterface6.on;\n\n  var Move = Components2.Move;\n  var getPosition = Move.getPosition,\n      getLimit = Move.getLimit,\n      toPosition = Move.toPosition;\n  var _Components2$Slides = Components2.Slides,\n      isEnough = _Components2$Slides.isEnough,\n      getLength = _Components2$Slides.getLength;\n  var 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 prevIndex = currIndex;\n  var slideCount;\n  var perMove;\n  var perPage;\n\n  function mount() {\n    init();\n    on([EVENT_UPDATED, EVENT_REFRESH], init);\n  }\n\n  function init() {\n    slideCount = getLength(true);\n    perMove = options.perMove;\n    perPage = options.perPage;\n    var index = clamp(currIndex, 0, slideCount - 1);\n\n    if (index !== currIndex) {\n      currIndex = index;\n      Move.reposition();\n    }\n  }\n\n  function go(control, allowSameIndex, callback) {\n    if (!isBusy()) {\n      var dest = parse(control);\n      var index = loop(dest);\n\n      if (index > -1 && (allowSameIndex || index !== currIndex)) {\n        setIndex(index);\n        Move.move(dest, index, prevIndex, callback);\n      }\n    }\n  }\n\n  function scroll(destination, duration, snap, callback) {\n    Components2.Scroll.scroll(destination, duration, snap, function () {\n      setIndex(loop(Move.toIndex(Move.getPosition())));\n      callback && callback();\n    });\n  }\n\n  function parse(control) {\n    var index = currIndex;\n\n    if (isString(control)) {\n      var _ref = control.match(/([+\\-<>])(\\d+)?/) || [],\n          indicator = _ref[1],\n          number = _ref[2];\n\n      if (indicator === \"+\" || indicator === \"-\") {\n        index = computeDestIndex(currIndex + +(\"\" + indicator + (+number || 1)), currIndex);\n      } else if (indicator === \">\") {\n        index = number ? toIndex(+number) : getNext(true);\n      } else if (indicator === \"<\") {\n        index = getPrev(true);\n      }\n    } else {\n      index = isLoop ? control : clamp(control, 0, getEnd());\n    }\n\n    return index;\n  }\n\n  function getAdjacent(prev, destination) {\n    var number = perMove || (hasFocus() ? 1 : perPage);\n    var dest = computeDestIndex(currIndex + number * (prev ? -1 : 1), currIndex, !(perMove || hasFocus()));\n\n    if (dest === -1 && isSlide) {\n      if (!approximatelyEqual(getPosition(), getLimit(!prev), 1)) {\n        return prev ? 0 : getEnd();\n      }\n    }\n\n    return destination ? dest : loop(dest);\n  }\n\n  function computeDestIndex(dest, from, snapPage) {\n    if (isEnough()) {\n      var end = getEnd();\n      var index = computeMovableDestIndex(dest);\n\n      if (index !== dest) {\n        from = dest;\n        dest = index;\n        snapPage = false;\n      }\n\n      if (dest < 0 || dest > end) {\n        if (between(0, dest, from, true) || between(end, 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 ? end : 0;\n          } else {\n            dest = -1;\n          }\n        }\n      } else {\n        if (snapPage && dest !== from) {\n          dest = toIndex(toPage(from) + (dest < from ? -1 : 1));\n        }\n      }\n    } else {\n      dest = -1;\n    }\n\n    return dest;\n  }\n\n  function computeMovableDestIndex(dest) {\n    if (isSlide && options.trimSpace === \"move\" && dest !== currIndex) {\n      var position = getPosition();\n\n      while (position === toPosition(dest, true) && between(dest, 0, Splide2.length - 1, !options.rewind)) {\n        dest < currIndex ? --dest : ++dest;\n      }\n    }\n\n    return dest;\n  }\n\n  function loop(index) {\n    return isLoop ? (index + slideCount) % slideCount || 0 : index;\n  }\n\n  function getEnd() {\n    return max(slideCount - (hasFocus() || isLoop && perMove ? 1 : perPage), 0);\n  }\n\n  function toIndex(page) {\n    return clamp(hasFocus() ? page : perPage * page, 0, getEnd());\n  }\n\n  function toPage(index) {\n    return hasFocus() ? index : floor((index >= getEnd() ? slideCount - 1 : index) / perPage);\n  }\n\n  function toDest(destination) {\n    var closest = Move.toIndex(destination);\n    return isSlide ? clamp(closest, 0, getEnd()) : closest;\n  }\n\n  function setIndex(index) {\n    if (index !== currIndex) {\n      prevIndex = currIndex;\n      currIndex = index;\n    }\n  }\n\n  function getIndex(prev) {\n    return prev ? prevIndex : currIndex;\n  }\n\n  function hasFocus() {\n    return !isUndefined(options.focus) || options.isNavigation;\n  }\n\n  function isBusy() {\n    return Splide2.state.is([MOVING, SCROLLING]) && !!options.waitForTransition;\n  }\n\n  return {\n    mount: mount,\n    go: go,\n    scroll: scroll,\n    getNext: getNext,\n    getPrev: getPrev,\n    getAdjacent: getAdjacent,\n    getEnd: getEnd,\n    setIndex: setIndex,\n    getIndex: getIndex,\n    toIndex: toIndex,\n    toPage: toPage,\n    toDest: toDest,\n    hasFocus: hasFocus,\n    isBusy: isBusy\n  };\n}\n\nvar XML_NAME_SPACE = \"http://www.w3.org/2000/svg\";\nvar PATH = \"m15.5 0.932-4.3 4.38 14.5 14.6-14.5 14.5 4.3 4.4 14.6-14.6 4.4-4.3-4.4-4.4-14.6-14.6z\";\nvar SIZE = 40;\n\nfunction Arrows(Splide2, Components2, options) {\n  var event = EventInterface(Splide2);\n  var on = event.on,\n      bind = event.bind,\n      emit = event.emit;\n  var classes = options.classes,\n      i18n = options.i18n;\n  var Elements = Components2.Elements,\n      Controller = Components2.Controller;\n  var userArrows = Elements.arrows,\n      track = Elements.track;\n  var wrapper = userArrows;\n  var prev = Elements.prev;\n  var next = Elements.next;\n  var created;\n  var wrapperClasses;\n  var arrows = {};\n\n  function mount() {\n    init();\n    on(EVENT_UPDATED, remount);\n  }\n\n  function remount() {\n    destroy();\n    mount();\n  }\n\n  function init() {\n    var enabled = options.arrows;\n\n    if (enabled && !(prev && next)) {\n      createArrows();\n    }\n\n    if (prev && next) {\n      assign(arrows, {\n        prev: prev,\n        next: next\n      });\n      display(wrapper, enabled ? \"\" : \"none\");\n      addClass(wrapper, wrapperClasses = CLASS_ARROWS + \"--\" + options.direction);\n\n      if (enabled) {\n        listen();\n        update();\n        setAttribute([prev, next], ARIA_CONTROLS, track.id);\n        emit(EVENT_ARROWS_MOUNTED, prev, next);\n      }\n    }\n  }\n\n  function destroy() {\n    event.destroy();\n    removeClass(wrapper, wrapperClasses);\n\n    if (created) {\n      remove(userArrows ? [prev, next] : wrapper);\n      prev = next = null;\n    } else {\n      removeAttribute([prev, next], ALL_ATTRIBUTES);\n    }\n  }\n\n  function listen() {\n    on([EVENT_MOVED, EVENT_REFRESH, EVENT_SCROLLED], update);\n    bind(next, \"click\", apply(go, \">\"));\n    bind(prev, \"click\", apply(go, \"<\"));\n  }\n\n  function go(control) {\n    Controller.go(control, true);\n  }\n\n  function createArrows() {\n    wrapper = userArrows || create(\"div\", classes.arrows);\n    prev = createArrow(true);\n    next = createArrow(false);\n    created = true;\n    append(wrapper, [prev, next]);\n    !userArrows && before(wrapper, track);\n  }\n\n  function createArrow(prev2) {\n    var arrow = \"<button class=\\\"\" + classes.arrow + \" \" + (prev2 ? classes.prev : classes.next) + \"\\\" type=\\\"button\\\"><svg xmlns=\\\"\" + XML_NAME_SPACE + \"\\\" viewBox=\\\"0 0 \" + SIZE + \" \" + SIZE + \"\\\" width=\\\"\" + SIZE + \"\\\" height=\\\"\" + SIZE + \"\\\" focusable=\\\"false\\\"><path d=\\\"\" + (options.arrowPath || PATH) + \"\\\" />\";\n    return parseHtml(arrow);\n  }\n\n  function update() {\n    var index = Splide2.index;\n    var prevIndex = Controller.getPrev();\n    var nextIndex = Controller.getNext();\n    var prevLabel = prevIndex > -1 && index < prevIndex ? i18n.last : i18n.prev;\n    var nextLabel = nextIndex > -1 && index > nextIndex ? i18n.first : i18n.next;\n    prev.disabled = prevIndex < 0;\n    next.disabled = nextIndex < 0;\n    setAttribute(prev, ARIA_LABEL, prevLabel);\n    setAttribute(next, ARIA_LABEL, nextLabel);\n    emit(EVENT_ARROWS_UPDATED, prev, next, prevIndex, nextIndex);\n  }\n\n  return {\n    arrows: arrows,\n    mount: mount,\n    destroy: destroy\n  };\n}\n\nvar INTERVAL_DATA_ATTRIBUTE = DATA_ATTRIBUTE + \"-interval\";\n\nfunction Autoplay(Splide2, Components2, options) {\n  var _EventInterface7 = EventInterface(Splide2),\n      on = _EventInterface7.on,\n      bind = _EventInterface7.bind,\n      emit = _EventInterface7.emit;\n\n  var interval = RequestInterval(options.interval, Splide2.go.bind(Splide2, \">\"), onAnimationFrame);\n  var isPaused = interval.isPaused;\n  var Elements = Components2.Elements,\n      _Components2$Elements4 = Components2.Elements,\n      root = _Components2$Elements4.root,\n      toggle = _Components2$Elements4.toggle;\n  var autoplay = options.autoplay;\n  var hovered;\n  var focused;\n  var stopped = autoplay === \"pause\";\n\n  function mount() {\n    if (autoplay) {\n      listen();\n      toggle && setAttribute(toggle, ARIA_CONTROLS, Elements.track.id);\n      stopped || play();\n      update();\n    }\n  }\n\n  function listen() {\n    if (options.pauseOnHover) {\n      bind(root, \"mouseenter mouseleave\", function (e) {\n        hovered = e.type === \"mouseenter\";\n        autoToggle();\n      });\n    }\n\n    if (options.pauseOnFocus) {\n      bind(root, \"focusin focusout\", function (e) {\n        focused = e.type === \"focusin\";\n        autoToggle();\n      });\n    }\n\n    if (toggle) {\n      bind(toggle, \"click\", function () {\n        stopped ? play() : pause(true);\n      });\n    }\n\n    on([EVENT_MOVE, EVENT_SCROLL, EVENT_REFRESH], interval.rewind);\n    on(EVENT_MOVE, onMove);\n  }\n\n  function play() {\n    if (isPaused() && Components2.Slides.isEnough()) {\n      interval.start(!options.resetProgress);\n      focused = hovered = stopped = false;\n      update();\n      emit(EVENT_AUTOPLAY_PLAY);\n    }\n  }\n\n  function pause(stop) {\n    if (stop === void 0) {\n      stop = true;\n    }\n\n    stopped = !!stop;\n    update();\n\n    if (!isPaused()) {\n      interval.pause();\n      emit(EVENT_AUTOPLAY_PAUSE);\n    }\n  }\n\n  function autoToggle() {\n    if (!stopped) {\n      hovered || focused ? pause(false) : play();\n    }\n  }\n\n  function update() {\n    if (toggle) {\n      toggleClass(toggle, CLASS_ACTIVE, !stopped);\n      setAttribute(toggle, ARIA_LABEL, options.i18n[stopped ? \"play\" : \"pause\"]);\n    }\n  }\n\n  function onAnimationFrame(rate) {\n    var bar = Elements.bar;\n    bar && style(bar, \"width\", rate * 100 + \"%\");\n    emit(EVENT_AUTOPLAY_PLAYING, rate);\n  }\n\n  function onMove(index) {\n    var Slide = Components2.Slides.getAt(index);\n    interval.set(Slide && +getAttribute(Slide.slide, INTERVAL_DATA_ATTRIBUTE) || options.interval);\n  }\n\n  return {\n    mount: mount,\n    destroy: interval.cancel,\n    play: play,\n    pause: pause,\n    isPaused: isPaused\n  };\n}\n\nfunction Cover(Splide2, Components2, options) {\n  var _EventInterface8 = EventInterface(Splide2),\n      on = _EventInterface8.on;\n\n  function mount() {\n    if (options.cover) {\n      on(EVENT_LAZYLOAD_LOADED, apply(toggle, true));\n      on([EVENT_MOUNTED, EVENT_UPDATED, EVENT_REFRESH], apply(cover, true));\n    }\n  }\n\n  function cover(cover2) {\n    Components2.Slides.forEach(function (Slide) {\n      var img = child(Slide.container || Slide.slide, \"img\");\n\n      if (img && img.src) {\n        toggle(cover2, img, Slide);\n      }\n    });\n  }\n\n  function toggle(cover2, img, Slide) {\n    Slide.style(\"background\", cover2 ? \"center/cover no-repeat url(\\\"\" + img.src + \"\\\")\" : \"\", true);\n    display(img, cover2 ? \"none\" : \"\");\n  }\n\n  return {\n    mount: mount,\n    destroy: apply(cover, false)\n  };\n}\n\nvar BOUNCE_DIFF_THRESHOLD = 10;\nvar BOUNCE_DURATION = 600;\nvar FRICTION_FACTOR = 0.6;\nvar BASE_VELOCITY = 1.5;\nvar MIN_DURATION = 800;\n\nfunction Scroll(Splide2, Components2, options) {\n  var _EventInterface9 = EventInterface(Splide2),\n      on = _EventInterface9.on,\n      emit = _EventInterface9.emit;\n\n  var set = Splide2.state.set;\n  var Move = Components2.Move;\n  var getPosition = Move.getPosition,\n      getLimit = Move.getLimit,\n      exceededLimit = Move.exceededLimit,\n      translate = Move.translate;\n  var interval;\n  var callback;\n  var friction = 1;\n\n  function mount() {\n    on(EVENT_MOVE, clear);\n    on([EVENT_UPDATED, EVENT_REFRESH], cancel);\n  }\n\n  function scroll(destination, duration, snap, onScrolled, noConstrain) {\n    var from = getPosition();\n    clear();\n\n    if (snap) {\n      var size = Components2.Layout.sliderSize();\n      var offset = sign(destination) * size * floor(abs(destination) / size) || 0;\n      destination = Move.toPosition(Components2.Controller.toDest(destination % size)) + offset;\n    }\n\n    var noDistance = approximatelyEqual(from, destination, 1);\n    friction = 1;\n    duration = noDistance ? 0 : duration || max(abs(destination - from) / BASE_VELOCITY, MIN_DURATION);\n    callback = onScrolled;\n    interval = RequestInterval(duration, onEnd, apply(update, from, destination, noConstrain), 1);\n    set(SCROLLING);\n    emit(EVENT_SCROLL);\n    interval.start();\n  }\n\n  function onEnd() {\n    set(IDLE);\n    callback && callback();\n    emit(EVENT_SCROLLED);\n  }\n\n  function update(from, to, noConstrain, rate) {\n    var position = getPosition();\n    var target = from + (to - from) * easing(rate);\n    var diff = (target - position) * friction;\n    translate(position + diff);\n\n    if (Splide2.is(SLIDE) && !noConstrain && exceededLimit()) {\n      friction *= FRICTION_FACTOR;\n\n      if (abs(diff) < BOUNCE_DIFF_THRESHOLD) {\n        scroll(getLimit(exceededLimit(true)), BOUNCE_DURATION, false, void 0, true);\n      }\n    }\n  }\n\n  function clear() {\n    if (interval) {\n      interval.cancel();\n    }\n  }\n\n  function cancel() {\n    if (interval && !interval.isPaused()) {\n      clear();\n      onEnd();\n    }\n  }\n\n  function easing(t) {\n    var easingFunc = options.easingFunc;\n    return easingFunc ? easingFunc(t) : 1 - Math.pow(1 - t, 4);\n  }\n\n  return {\n    mount: mount,\n    destroy: clear,\n    scroll: scroll,\n    cancel: cancel\n  };\n}\n\nvar SCROLL_LISTENER_OPTIONS = {\n  passive: false,\n  capture: true\n};\n\nfunction Drag(Splide2, Components2, options) {\n  var _EventInterface10 = EventInterface(Splide2),\n      on = _EventInterface10.on,\n      emit = _EventInterface10.emit,\n      bind = _EventInterface10.bind,\n      unbind = _EventInterface10.unbind;\n\n  var state = Splide2.state;\n  var Move = Components2.Move,\n      Scroll = Components2.Scroll,\n      Controller = Components2.Controller,\n      track = Components2.Elements.track,\n      reduce = Components2.Media.reduce;\n  var _Components2$Directio2 = Components2.Direction,\n      resolve = _Components2$Directio2.resolve,\n      orient = _Components2$Directio2.orient;\n  var getPosition = Move.getPosition,\n      exceededLimit = Move.exceededLimit;\n  var basePosition;\n  var baseEvent;\n  var prevBaseEvent;\n  var isFree;\n  var dragging;\n  var exceeded = false;\n  var clickPrevented;\n  var disabled;\n  var target;\n\n  function mount() {\n    bind(track, POINTER_MOVE_EVENTS, noop, SCROLL_LISTENER_OPTIONS);\n    bind(track, POINTER_UP_EVENTS, noop, SCROLL_LISTENER_OPTIONS);\n    bind(track, POINTER_DOWN_EVENTS, onPointerDown, SCROLL_LISTENER_OPTIONS);\n    bind(track, \"click\", onClick, {\n      capture: true\n    });\n    bind(track, \"dragstart\", prevent);\n    on([EVENT_MOUNTED, EVENT_UPDATED], init);\n  }\n\n  function init() {\n    var drag = options.drag;\n    disable(!drag);\n    isFree = drag === \"free\";\n  }\n\n  function onPointerDown(e) {\n    clickPrevented = false;\n\n    if (!disabled) {\n      var isTouch = isTouchEvent(e);\n\n      if (isDraggable(e.target) && (isTouch || !e.button)) {\n        if (!Controller.isBusy()) {\n          target = isTouch ? track : window;\n          dragging = state.is([MOVING, SCROLLING]);\n          prevBaseEvent = null;\n          bind(target, POINTER_MOVE_EVENTS, onPointerMove, SCROLL_LISTENER_OPTIONS);\n          bind(target, POINTER_UP_EVENTS, onPointerUp, SCROLL_LISTENER_OPTIONS);\n          Move.cancel();\n          Scroll.cancel();\n          save(e);\n        } else {\n          prevent(e, true);\n        }\n      }\n    }\n  }\n\n  function onPointerMove(e) {\n    if (!state.is(DRAGGING)) {\n      state.set(DRAGGING);\n      emit(EVENT_DRAG);\n    }\n\n    if (e.cancelable) {\n      if (dragging) {\n        Move.translate(basePosition + constrain(diffCoord(e)));\n        var expired = diffTime(e) > LOG_INTERVAL;\n        var hasExceeded = exceeded !== (exceeded = exceededLimit());\n\n        if (expired || hasExceeded) {\n          save(e);\n        }\n\n        clickPrevented = true;\n        emit(EVENT_DRAGGING);\n        prevent(e);\n      } else if (isSliderDirection(e)) {\n        dragging = shouldStart(e);\n        prevent(e);\n      }\n    }\n  }\n\n  function onPointerUp(e) {\n    if (state.is(DRAGGING)) {\n      state.set(IDLE);\n      emit(EVENT_DRAGGED);\n    }\n\n    if (dragging) {\n      move(e);\n      prevent(e);\n    }\n\n    unbind(target, POINTER_MOVE_EVENTS, onPointerMove);\n    unbind(target, POINTER_UP_EVENTS, onPointerUp);\n    dragging = false;\n  }\n\n  function onClick(e) {\n    if (!disabled && clickPrevented) {\n      prevent(e, true);\n    }\n  }\n\n  function save(e) {\n    prevBaseEvent = baseEvent;\n    baseEvent = e;\n    basePosition = getPosition();\n  }\n\n  function move(e) {\n    var velocity = computeVelocity(e);\n    var destination = computeDestination(velocity);\n    var rewind = options.rewind && options.rewindByDrag;\n    reduce(false);\n\n    if (isFree) {\n      Controller.scroll(destination, 0, options.snap);\n    } else if (Splide2.is(FADE)) {\n      Controller.go(orient(sign(velocity)) < 0 ? rewind ? \"<\" : \"-\" : rewind ? \">\" : \"+\");\n    } else if (Splide2.is(SLIDE) && exceeded && rewind) {\n      Controller.go(exceededLimit(true) ? \">\" : \"<\");\n    } else {\n      Controller.go(Controller.toDest(destination), true);\n    }\n\n    reduce(true);\n  }\n\n  function shouldStart(e) {\n    var thresholds = options.dragMinThreshold;\n    var isObj = isObject(thresholds);\n    var mouse = isObj && thresholds.mouse || 0;\n    var touch = (isObj ? thresholds.touch : +thresholds) || 10;\n    return abs(diffCoord(e)) > (isTouchEvent(e) ? touch : mouse);\n  }\n\n  function isSliderDirection(e) {\n    return abs(diffCoord(e)) > abs(diffCoord(e, true));\n  }\n\n  function computeVelocity(e) {\n    if (Splide2.is(LOOP) || !exceeded) {\n      var time = diffTime(e);\n\n      if (time && time < LOG_INTERVAL) {\n        return diffCoord(e) / time;\n      }\n    }\n\n    return 0;\n  }\n\n  function computeDestination(velocity) {\n    return getPosition() + sign(velocity) * min(abs(velocity) * (options.flickPower || 600), isFree ? Infinity : Components2.Layout.listSize() * (options.flickMaxPages || 1));\n  }\n\n  function diffCoord(e, orthogonal) {\n    return coordOf(e, orthogonal) - coordOf(getBaseEvent(e), orthogonal);\n  }\n\n  function diffTime(e) {\n    return timeOf(e) - timeOf(getBaseEvent(e));\n  }\n\n  function getBaseEvent(e) {\n    return baseEvent === e && prevBaseEvent || baseEvent;\n  }\n\n  function coordOf(e, orthogonal) {\n    return (isTouchEvent(e) ? e.changedTouches[0] : e)[\"page\" + resolve(orthogonal ? \"Y\" : \"X\")];\n  }\n\n  function constrain(diff) {\n    return diff / (exceeded && Splide2.is(SLIDE) ? FRICTION : 1);\n  }\n\n  function isDraggable(target2) {\n    var noDrag = options.noDrag;\n    return !matches(target2, \".\" + CLASS_PAGINATION_PAGE + \", .\" + CLASS_ARROW) && (!noDrag || !matches(target2, noDrag));\n  }\n\n  function isTouchEvent(e) {\n    return typeof TouchEvent !== \"undefined\" && e instanceof TouchEvent;\n  }\n\n  function isDragging() {\n    return dragging;\n  }\n\n  function disable(value) {\n    disabled = value;\n  }\n\n  return {\n    mount: mount,\n    disable: disable,\n    isDragging: isDragging\n  };\n}\n\nvar NORMALIZATION_MAP = {\n  Spacebar: \" \",\n  Right: ARROW_RIGHT,\n  Left: ARROW_LEFT,\n  Up: ARROW_UP,\n  Down: ARROW_DOWN\n};\n\nfunction normalizeKey(key) {\n  key = isString(key) ? key : key.key;\n  return NORMALIZATION_MAP[key] || key;\n}\n\nvar KEYBOARD_EVENT = \"keydown\";\n\nfunction Keyboard(Splide2, Components2, options) {\n  var _EventInterface11 = EventInterface(Splide2),\n      on = _EventInterface11.on,\n      bind = _EventInterface11.bind,\n      unbind = _EventInterface11.unbind;\n\n  var root = Splide2.root;\n  var resolve = Components2.Direction.resolve;\n  var target;\n  var disabled;\n\n  function mount() {\n    init();\n    on(EVENT_UPDATED, destroy);\n    on(EVENT_UPDATED, init);\n    on(EVENT_MOVE, onMove);\n  }\n\n  function init() {\n    var keyboard = options.keyboard;\n\n    if (keyboard) {\n      target = keyboard === \"global\" ? window : root;\n      bind(target, KEYBOARD_EVENT, onKeydown);\n    }\n  }\n\n  function destroy() {\n    unbind(target, KEYBOARD_EVENT);\n  }\n\n  function disable(value) {\n    disabled = value;\n  }\n\n  function onMove() {\n    var _disabled = disabled;\n    disabled = true;\n    nextTick(function () {\n      disabled = _disabled;\n    });\n  }\n\n  function onKeydown(e) {\n    if (!disabled) {\n      var key = normalizeKey(e);\n\n      if (key === resolve(ARROW_LEFT)) {\n        Splide2.go(\"<\");\n      } else if (key === resolve(ARROW_RIGHT)) {\n        Splide2.go(\">\");\n      }\n    }\n  }\n\n  return {\n    mount: mount,\n    destroy: destroy,\n    disable: disable\n  };\n}\n\nvar SRC_DATA_ATTRIBUTE = DATA_ATTRIBUTE + \"-lazy\";\nvar SRCSET_DATA_ATTRIBUTE = SRC_DATA_ATTRIBUTE + \"-srcset\";\nvar IMAGE_SELECTOR = \"[\" + SRC_DATA_ATTRIBUTE + \"], [\" + SRCSET_DATA_ATTRIBUTE + \"]\";\n\nfunction LazyLoad(Splide2, Components2, options) {\n  var _EventInterface12 = EventInterface(Splide2),\n      on = _EventInterface12.on,\n      off = _EventInterface12.off,\n      bind = _EventInterface12.bind,\n      emit = _EventInterface12.emit;\n\n  var isSequential = options.lazyLoad === \"sequential\";\n  var events = [EVENT_MOUNTED, EVENT_REFRESH, EVENT_MOVED, EVENT_SCROLLED];\n  var entries = [];\n\n  function mount() {\n    if (options.lazyLoad) {\n      init();\n      on(EVENT_REFRESH, init);\n      isSequential || on(events, observe);\n    }\n  }\n\n  function init() {\n    empty(entries);\n    Components2.Slides.forEach(function (Slide) {\n      queryAll(Slide.slide, IMAGE_SELECTOR).forEach(function (img) {\n        var src = getAttribute(img, SRC_DATA_ATTRIBUTE);\n        var srcset = getAttribute(img, SRCSET_DATA_ATTRIBUTE);\n\n        if (src !== img.src || srcset !== img.srcset) {\n          var className = options.classes.spinner;\n          var parent = img.parentElement;\n          var spinner = child(parent, \".\" + className) || create(\"span\", className, parent);\n          entries.push([img, Slide, spinner]);\n          img.src || display(img, \"none\");\n        }\n      });\n    });\n    isSequential && loadNext();\n  }\n\n  function observe() {\n    entries = entries.filter(function (data) {\n      var distance = options.perPage * ((options.preloadPages || 1) + 1) - 1;\n      return data[1].isWithin(Splide2.index, distance) ? load(data) : true;\n    });\n    entries.length || off(events);\n  }\n\n  function load(data) {\n    var img = data[0];\n    addClass(data[1].slide, CLASS_LOADING);\n    bind(img, \"load error\", apply(onLoad, data));\n    setAttribute(img, \"src\", getAttribute(img, SRC_DATA_ATTRIBUTE));\n    setAttribute(img, \"srcset\", getAttribute(img, SRCSET_DATA_ATTRIBUTE));\n    removeAttribute(img, SRC_DATA_ATTRIBUTE);\n    removeAttribute(img, SRCSET_DATA_ATTRIBUTE);\n  }\n\n  function onLoad(data, e) {\n    var img = data[0],\n        Slide = data[1];\n    removeClass(Slide.slide, CLASS_LOADING);\n\n    if (e.type !== \"error\") {\n      remove(data[2]);\n      display(img, \"\");\n      emit(EVENT_LAZYLOAD_LOADED, img, Slide);\n      emit(EVENT_RESIZE);\n    }\n\n    isSequential && loadNext();\n  }\n\n  function loadNext() {\n    entries.length && load(entries.shift());\n  }\n\n  return {\n    mount: mount,\n    destroy: apply(empty, entries)\n  };\n}\n\nfunction Pagination(Splide2, Components2, options) {\n  var event = EventInterface(Splide2);\n  var on = event.on,\n      emit = event.emit,\n      bind = event.bind;\n  var Slides = Components2.Slides,\n      Elements = Components2.Elements,\n      Controller = Components2.Controller;\n  var hasFocus = Controller.hasFocus,\n      getIndex = Controller.getIndex,\n      go = Controller.go;\n  var resolve = Components2.Direction.resolve;\n  var items = [];\n  var list;\n  var paginationClasses;\n\n  function mount() {\n    destroy();\n    on([EVENT_UPDATED, EVENT_REFRESH], mount);\n\n    if (options.pagination && Slides.isEnough()) {\n      on([EVENT_MOVE, EVENT_SCROLL, EVENT_SCROLLED], update);\n      createPagination();\n      update();\n      emit(EVENT_PAGINATION_MOUNTED, {\n        list: list,\n        items: items\n      }, getAt(Splide2.index));\n    }\n  }\n\n  function destroy() {\n    if (list) {\n      remove(Elements.pagination ? slice(list.children) : list);\n      removeClass(list, paginationClasses);\n      empty(items);\n      list = null;\n    }\n\n    event.destroy();\n  }\n\n  function createPagination() {\n    var length = Splide2.length;\n    var classes = options.classes,\n        i18n = options.i18n,\n        perPage = options.perPage;\n    var max = hasFocus() ? length : ceil(length / perPage);\n    list = Elements.pagination || create(\"ul\", classes.pagination, Elements.track.parentElement);\n    addClass(list, paginationClasses = CLASS_PAGINATION + \"--\" + getDirection());\n    setAttribute(list, ROLE, \"tablist\");\n    setAttribute(list, ARIA_LABEL, i18n.select);\n    setAttribute(list, ARIA_ORIENTATION, getDirection() === TTB ? \"vertical\" : \"\");\n\n    for (var i = 0; i < max; i++) {\n      var li = create(\"li\", null, list);\n      var button = create(\"button\", {\n        class: classes.page,\n        type: \"button\"\n      }, li);\n      var controls = Slides.getIn(i).map(function (Slide) {\n        return Slide.slide.id;\n      });\n      var text = !hasFocus() && perPage > 1 ? i18n.pageX : i18n.slideX;\n      bind(button, \"click\", apply(onClick, i));\n\n      if (options.paginationKeyboard) {\n        bind(button, \"keydown\", apply(onKeydown, i));\n      }\n\n      setAttribute(li, ROLE, \"presentation\");\n      setAttribute(button, ROLE, \"tab\");\n      setAttribute(button, ARIA_CONTROLS, controls.join(\" \"));\n      setAttribute(button, ARIA_LABEL, format(text, i + 1));\n      setAttribute(button, TAB_INDEX, -1);\n      items.push({\n        li: li,\n        button: button,\n        page: i\n      });\n    }\n  }\n\n  function onClick(page) {\n    go(\">\" + page, true);\n  }\n\n  function onKeydown(page, e) {\n    var length = items.length;\n    var key = normalizeKey(e);\n    var dir = getDirection();\n    var nextPage = -1;\n\n    if (key === resolve(ARROW_RIGHT, false, dir)) {\n      nextPage = ++page % length;\n    } else if (key === resolve(ARROW_LEFT, false, dir)) {\n      nextPage = (--page + length) % length;\n    } else if (key === \"Home\") {\n      nextPage = 0;\n    } else if (key === \"End\") {\n      nextPage = length - 1;\n    }\n\n    var item = items[nextPage];\n\n    if (item) {\n      focus(item.button);\n      go(\">\" + nextPage);\n      prevent(e, true);\n    }\n  }\n\n  function getDirection() {\n    return options.paginationDirection || options.direction;\n  }\n\n  function getAt(index) {\n    return items[Controller.toPage(index)];\n  }\n\n  function update() {\n    var prev = getAt(getIndex(true));\n    var curr = getAt(getIndex());\n\n    if (prev) {\n      var button = prev.button;\n      removeClass(button, CLASS_ACTIVE);\n      removeAttribute(button, ARIA_SELECTED);\n      setAttribute(button, TAB_INDEX, -1);\n    }\n\n    if (curr) {\n      var _button = curr.button;\n      addClass(_button, CLASS_ACTIVE);\n      setAttribute(_button, ARIA_SELECTED, true);\n      setAttribute(_button, TAB_INDEX, \"\");\n    }\n\n    emit(EVENT_PAGINATION_UPDATED, {\n      list: list,\n      items: items\n    }, prev, curr);\n  }\n\n  return {\n    items: items,\n    mount: mount,\n    destroy: destroy,\n    getAt: getAt,\n    update: update\n  };\n}\n\nvar TRIGGER_KEYS = [\" \", \"Enter\"];\n\nfunction Sync(Splide2, Components2, options) {\n  var isNavigation = options.isNavigation,\n      slideFocus = options.slideFocus;\n  var events = [];\n\n  function setup() {\n    Splide2.options = {\n      slideFocus: isUndefined(slideFocus) ? isNavigation : slideFocus\n    };\n  }\n\n  function mount() {\n    Splide2.splides.forEach(function (target) {\n      if (!target.isParent) {\n        sync(Splide2, target.splide);\n        sync(target.splide, Splide2);\n      }\n    });\n\n    if (isNavigation) {\n      navigate();\n    }\n  }\n\n  function destroy() {\n    events.forEach(function (event) {\n      event.destroy();\n    });\n    empty(events);\n  }\n\n  function remount() {\n    destroy();\n    mount();\n  }\n\n  function sync(splide, target) {\n    var event = EventInterface(splide);\n    event.on(EVENT_MOVE, function (index, prev, dest) {\n      target.go(target.is(LOOP) ? dest : index);\n    });\n    events.push(event);\n  }\n\n  function navigate() {\n    var event = EventInterface(Splide2);\n    var on = event.on;\n    on(EVENT_CLICK, onClick);\n    on(EVENT_SLIDE_KEYDOWN, onKeydown);\n    on([EVENT_MOUNTED, EVENT_UPDATED], update);\n    events.push(event);\n    event.emit(EVENT_NAVIGATION_MOUNTED, Splide2.splides);\n  }\n\n  function update() {\n    setAttribute(Components2.Elements.list, ARIA_ORIENTATION, options.direction === TTB ? \"vertical\" : \"\");\n  }\n\n  function onClick(Slide) {\n    Splide2.go(Slide.index);\n  }\n\n  function onKeydown(Slide, e) {\n    if (includes(TRIGGER_KEYS, normalizeKey(e))) {\n      onClick(Slide);\n      prevent(e);\n    }\n  }\n\n  return {\n    setup: setup,\n    mount: mount,\n    destroy: destroy,\n    remount: remount\n  };\n}\n\nfunction Wheel(Splide2, Components2, options) {\n  var _EventInterface13 = EventInterface(Splide2),\n      bind = _EventInterface13.bind;\n\n  var lastTime = 0;\n\n  function mount() {\n    if (options.wheel) {\n      bind(Components2.Elements.track, \"wheel\", onWheel, SCROLL_LISTENER_OPTIONS);\n    }\n  }\n\n  function onWheel(e) {\n    if (e.cancelable) {\n      var deltaY = e.deltaY;\n      var backwards = deltaY < 0;\n      var timeStamp = timeOf(e);\n\n      var _min = options.wheelMinThreshold || 0;\n\n      var sleep = options.wheelSleep || 0;\n\n      if (abs(deltaY) > _min && timeStamp - lastTime > sleep) {\n        Splide2.go(backwards ? \"<\" : \">\");\n        lastTime = timeStamp;\n      }\n\n      shouldPrevent(backwards) && prevent(e);\n    }\n  }\n\n  function shouldPrevent(backwards) {\n    return !options.releaseWheel || Splide2.state.is(MOVING) || Components2.Controller.getAdjacent(backwards) !== -1;\n  }\n\n  return {\n    mount: mount\n  };\n}\n\nfunction Live(Splide2, Components2, options) {\n  var _EventInterface14 = EventInterface(Splide2),\n      on = _EventInterface14.on;\n\n  var track = Components2.Elements.track;\n  var live = options.live;\n  var enabled = live && !options.isNavigation;\n  var sr = create(\"span\", CLASS_SR);\n\n  function mount() {\n    if (enabled) {\n      disable(!Components2.Autoplay.isPaused());\n      setAttribute(track, ARIA_RELEVANT, \"additions\");\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(append, track, sr));\n    }\n  }\n\n  function destroy() {\n    removeAttribute(track, [ARIA_LIVE, ARIA_RELEVANT]);\n    remove(sr);\n  }\n\n  function disable(disabled) {\n    if (enabled) {\n      setAttribute(track, ARIA_LIVE, disabled ? \"off\" : \"polite\");\n    }\n  }\n\n  return {\n    mount: mount,\n    disable: disable,\n    destroy: destroy\n  };\n}\n\nvar ComponentConstructors = /*#__PURE__*/Object.freeze({\n  __proto__: null,\n  Media: Media,\n  Direction: Direction,\n  Elements: Elements,\n  Slides: Slides,\n  Layout: Layout,\n  Clones: Clones,\n  Move: Move,\n  Controller: Controller,\n  Arrows: Arrows,\n  Autoplay: Autoplay,\n  Cover: Cover,\n  Scroll: Scroll,\n  Drag: Drag,\n  Keyboard: Keyboard,\n  LazyLoad: LazyLoad,\n  Pagination: Pagination,\n  Sync: Sync,\n  Wheel: Wheel,\n  Live: Live\n});\nvar I18N = {\n  prev: \"Previous slide\",\n  next: \"Next slide\",\n  first: \"Go to first slide\",\n  last: \"Go to last slide\",\n  slideX: \"Go to slide %s\",\n  pageX: \"Go to page %s\",\n  play: \"Start autoplay\",\n  pause: \"Pause autoplay\",\n  carousel: \"carousel\",\n  slide: \"slide\",\n  select: \"Select a slide to show\",\n  slideLabel: \"%s of %s\"\n};\nvar DEFAULTS = {\n  type: \"slide\",\n  role: \"region\",\n  speed: 400,\n  perPage: 1,\n  cloneStatus: true,\n  arrows: true,\n  pagination: true,\n  paginationKeyboard: true,\n  interval: 5e3,\n  pauseOnHover: true,\n  pauseOnFocus: true,\n  resetProgress: true,\n  easing: \"cubic-bezier(0.25, 1, 0.5, 1)\",\n  drag: true,\n  direction: \"ltr\",\n  trimSpace: true,\n  focusableNodes: \"a, button, textarea, input, select, iframe\",\n  live: true,\n  classes: CLASSES,\n  i18n: I18N,\n  reducedMotion: {\n    speed: 0,\n    rewindSpeed: 0,\n    autoplay: \"pause\"\n  }\n};\n\nfunction Fade(Splide2, Components2, options) {\n  var _EventInterface15 = EventInterface(Splide2),\n      on = _EventInterface15.on;\n\n  function mount() {\n    on([EVENT_MOUNTED, EVENT_REFRESH], function () {\n      nextTick(function () {\n        Components2.Slides.style(\"transition\", \"opacity \" + options.speed + \"ms \" + options.easing);\n      });\n    });\n  }\n\n  function start(index, done) {\n    var track = Components2.Elements.track;\n    style(track, \"height\", unit(rect(track).height));\n    nextTick(function () {\n      done();\n      style(track, \"height\", \"\");\n    });\n  }\n\n  return {\n    mount: mount,\n    start: start,\n    cancel: noop\n  };\n}\n\nfunction Slide(Splide2, Components2, options) {\n  var _EventInterface16 = EventInterface(Splide2),\n      bind = _EventInterface16.bind;\n\n  var Move = Components2.Move,\n      Controller = Components2.Controller,\n      Scroll = Components2.Scroll;\n  var list = Components2.Elements.list;\n  var transition = apply(style, list, \"transition\");\n  var endCallback;\n\n  function mount() {\n    bind(list, \"transitionend\", function (e) {\n      if (e.target === list && endCallback) {\n        cancel();\n        endCallback();\n      }\n    });\n  }\n\n  function start(index, done) {\n    var destination = Move.toPosition(index, true);\n    var position = Move.getPosition();\n    var speed = getSpeed(index);\n\n    if (abs(destination - position) >= 1 && speed >= 1) {\n      if (options.useScroll) {\n        Scroll.scroll(destination, speed, false, done);\n      } else {\n        transition(\"transform \" + speed + \"ms \" + options.easing);\n        Move.translate(destination, true);\n        endCallback = done;\n      }\n    } else {\n      Move.jump(index);\n      done();\n    }\n  }\n\n  function cancel() {\n    transition(\"\");\n    Scroll.cancel();\n  }\n\n  function getSpeed(index) {\n    var rewindSpeed = options.rewindSpeed;\n\n    if (Splide2.is(SLIDE) && rewindSpeed) {\n      var prev = Controller.getIndex(true);\n      var end = Controller.getEnd();\n\n      if (prev === 0 && index >= end || prev >= end && index === 0) {\n        return rewindSpeed;\n      }\n    }\n\n    return options.speed;\n  }\n\n  return {\n    mount: mount,\n    start: start,\n    cancel: cancel\n  };\n}\n\nvar _Splide = /*#__PURE__*/function () {\n  function _Splide(target, options) {\n    this.event = EventInterface();\n    this.Components = {};\n    this.state = State(CREATED);\n    this.splides = [];\n    this._o = {};\n    this._E = {};\n    var root = isString(target) ? query(document, target) : target;\n    assert(root, root + \" is invalid.\");\n    this.root = root;\n    options = merge({\n      label: getAttribute(root, ARIA_LABEL) || \"\",\n      labelledby: getAttribute(root, ARIA_LABELLEDBY) || \"\"\n    }, DEFAULTS, _Splide.defaults, options || {});\n\n    try {\n      merge(options, JSON.parse(getAttribute(root, DATA_ATTRIBUTE)));\n    } catch (e) {\n      assert(false, \"Invalid JSON\");\n    }\n\n    this._o = Object.create(merge({}, options));\n  }\n\n  var _proto = _Splide.prototype;\n\n  _proto.mount = function mount(Extensions, Transition) {\n    var _this = this;\n\n    var state = this.state,\n        Components2 = this.Components;\n    assert(state.is([CREATED, DESTROYED]), \"Already mounted!\");\n    state.set(CREATED);\n    this._C = Components2;\n    this._T = Transition || this._T || (this.is(FADE) ? Fade : Slide);\n    this._E = Extensions || this._E;\n    var Constructors = assign({}, ComponentConstructors, this._E, {\n      Transition: this._T\n    });\n    forOwn(Constructors, function (Component, key) {\n      var component = Component(_this, Components2, _this._o);\n      Components2[key] = component;\n      component.setup && component.setup();\n    });\n    forOwn(Components2, function (component) {\n      component.mount && component.mount();\n    });\n    this.emit(EVENT_MOUNTED);\n    addClass(this.root, CLASS_INITIALIZED);\n    state.set(IDLE);\n    this.emit(EVENT_READY);\n    return this;\n  };\n\n  _proto.sync = function sync(splide) {\n    this.splides.push({\n      splide: splide\n    });\n    splide.splides.push({\n      splide: this,\n      isParent: true\n    });\n\n    if (this.state.is(IDLE)) {\n      this._C.Sync.remount();\n\n      splide.Components.Sync.remount();\n    }\n\n    return this;\n  };\n\n  _proto.go = function go(control) {\n    this._C.Controller.go(control);\n\n    return this;\n  };\n\n  _proto.on = function on(events, callback) {\n    this.event.on(events, callback);\n    return this;\n  };\n\n  _proto.off = function off(events) {\n    this.event.off(events);\n    return this;\n  };\n\n  _proto.emit = function emit(event) {\n    var _this$event;\n\n    (_this$event = this.event).emit.apply(_this$event, [event].concat(slice(arguments, 1)));\n\n    return this;\n  };\n\n  _proto.add = function add(slides, index) {\n    this._C.Slides.add(slides, index);\n\n    return this;\n  };\n\n  _proto.remove = function remove(matcher) {\n    this._C.Slides.remove(matcher);\n\n    return this;\n  };\n\n  _proto.is = function is(type) {\n    return this._o.type === type;\n  };\n\n  _proto.refresh = function refresh() {\n    this.emit(EVENT_REFRESH);\n    return this;\n  };\n\n  _proto.destroy = function destroy(completely) {\n    if (completely === void 0) {\n      completely = true;\n    }\n\n    var event = this.event,\n        state = this.state;\n\n    if (state.is(CREATED)) {\n      EventInterface(this).on(EVENT_READY, this.destroy.bind(this, completely));\n    } else {\n      forOwn(this._C, function (component) {\n        component.destroy && component.destroy(completely);\n      }, true);\n      event.emit(EVENT_DESTROY);\n      event.destroy();\n      completely && empty(this.splides);\n      state.set(DESTROYED);\n    }\n\n    return this;\n  };\n\n  _createClass(_Splide, [{\n    key: \"options\",\n    get: function get() {\n      return this._o;\n    },\n    set: function set(options) {\n      this._C.Media.set(options, true);\n    }\n  }, {\n    key: \"length\",\n    get: function get() {\n      return this._C.Slides.getLength(true);\n    }\n  }, {\n    key: \"index\",\n    get: function get() {\n      return this._C.Controller.getIndex();\n    }\n  }]);\n\n  return _Splide;\n}();\n\nvar Splide = _Splide;\nSplide.defaults = {};\nSplide.STATES = STATES;\nvar CLASS_RENDERED = \"is-rendered\";\nvar RENDERER_DEFAULT_CONFIG = {\n  listTag: \"ul\",\n  slideTag: \"li\"\n};\n\nvar Style = /*#__PURE__*/function () {\n  function Style(id, options) {\n    this.styles = {};\n    this.id = id;\n    this.options = options;\n  }\n\n  var _proto2 = Style.prototype;\n\n  _proto2.rule = function rule(selector, prop, value, breakpoint) {\n    breakpoint = breakpoint || \"default\";\n    var selectors = this.styles[breakpoint] = this.styles[breakpoint] || {};\n    var styles = selectors[selector] = selectors[selector] || {};\n    styles[prop] = value;\n  };\n\n  _proto2.build = function build() {\n    var _this2 = this;\n\n    var css = \"\";\n\n    if (this.styles.default) {\n      css += this.buildSelectors(this.styles.default);\n    }\n\n    Object.keys(this.styles).sort(function (n, m) {\n      return _this2.options.mediaQuery === \"min\" ? +n - +m : +m - +n;\n    }).forEach(function (breakpoint) {\n      if (breakpoint !== \"default\") {\n        css += \"@media screen and (max-width: \" + breakpoint + \"px) {\";\n        css += _this2.buildSelectors(_this2.styles[breakpoint]);\n        css += \"}\";\n      }\n    });\n    return css;\n  };\n\n  _proto2.buildSelectors = function buildSelectors(selectors) {\n    var _this3 = this;\n\n    var css = \"\";\n    forOwn(selectors, function (styles, selector) {\n      selector = (\"#\" + _this3.id + \" \" + selector).trim();\n      css += selector + \" {\";\n      forOwn(styles, function (value, prop) {\n        if (value || value === 0) {\n          css += prop + \": \" + value + \";\";\n        }\n      });\n      css += \"}\";\n    });\n    return css;\n  };\n\n  return Style;\n}();\n\nvar SplideRenderer = /*#__PURE__*/function () {\n  function SplideRenderer(contents, options, config, defaults) {\n    this.slides = [];\n    this.options = {};\n    this.breakpoints = [];\n    merge(DEFAULTS, defaults || {});\n    merge(merge(this.options, DEFAULTS), options || {});\n    this.contents = contents;\n    this.config = assign({}, RENDERER_DEFAULT_CONFIG, config || {});\n    this.id = this.config.id || uniqueId(\"splide\");\n    this.Style = new Style(this.id, this.options);\n    this.Direction = Direction(null, null, this.options);\n    assert(this.contents.length, \"Provide at least 1 content.\");\n    this.init();\n  }\n\n  SplideRenderer.clean = function clean(splide) {\n    var _EventInterface17 = EventInterface(splide),\n        on = _EventInterface17.on;\n\n    var root = splide.root;\n    var clones = queryAll(root, \".\" + CLASS_CLONE);\n    on(EVENT_MOUNTED, function () {\n      remove(child(root, \"style\"));\n    });\n    remove(clones);\n  };\n\n  var _proto3 = SplideRenderer.prototype;\n\n  _proto3.init = function init() {\n    this.parseBreakpoints();\n    this.initSlides();\n    this.registerRootStyles();\n    this.registerTrackStyles();\n    this.registerSlideStyles();\n    this.registerListStyles();\n  };\n\n  _proto3.initSlides = function initSlides() {\n    var _this4 = this;\n\n    push(this.slides, this.contents.map(function (content, index) {\n      content = isString(content) ? {\n        html: content\n      } : content;\n      content.styles = content.styles || {};\n      content.attrs = content.attrs || {};\n\n      _this4.cover(content);\n\n      var classes = _this4.options.classes.slide + \" \" + (index === 0 ? CLASS_ACTIVE : \"\");\n      assign(content.attrs, {\n        class: (classes + \" \" + (content.attrs.class || \"\")).trim(),\n        style: _this4.buildStyles(content.styles)\n      });\n      return content;\n    }));\n\n    if (this.isLoop()) {\n      this.generateClones(this.slides);\n    }\n  };\n\n  _proto3.registerRootStyles = function registerRootStyles() {\n    var _this5 = this;\n\n    this.breakpoints.forEach(function (_ref2) {\n      var width = _ref2[0],\n          options = _ref2[1];\n\n      _this5.Style.rule(\" \", \"max-width\", unit(options.width), width);\n    });\n  };\n\n  _proto3.registerTrackStyles = function registerTrackStyles() {\n    var _this6 = this;\n\n    var Style2 = this.Style;\n    var selector = \".\" + CLASS_TRACK;\n    this.breakpoints.forEach(function (_ref3) {\n      var width = _ref3[0],\n          options = _ref3[1];\n      Style2.rule(selector, _this6.resolve(\"paddingLeft\"), _this6.cssPadding(options, false), width);\n      Style2.rule(selector, _this6.resolve(\"paddingRight\"), _this6.cssPadding(options, true), width);\n      Style2.rule(selector, \"height\", _this6.cssTrackHeight(options), width);\n    });\n  };\n\n  _proto3.registerListStyles = function registerListStyles() {\n    var _this7 = this;\n\n    var Style2 = this.Style;\n    var selector = \".\" + CLASS_LIST;\n    this.breakpoints.forEach(function (_ref4) {\n      var width = _ref4[0],\n          options = _ref4[1];\n      Style2.rule(selector, \"transform\", _this7.buildTranslate(options), width);\n\n      if (!_this7.cssSlideHeight(options)) {\n        Style2.rule(selector, \"aspect-ratio\", _this7.cssAspectRatio(options), width);\n      }\n    });\n  };\n\n  _proto3.registerSlideStyles = function registerSlideStyles() {\n    var _this8 = this;\n\n    var Style2 = this.Style;\n    var selector = \".\" + CLASS_SLIDE;\n    this.breakpoints.forEach(function (_ref5) {\n      var width = _ref5[0],\n          options = _ref5[1];\n      Style2.rule(selector, \"width\", _this8.cssSlideWidth(options), width);\n      Style2.rule(selector, \"height\", _this8.cssSlideHeight(options) || \"100%\", width);\n      Style2.rule(selector, _this8.resolve(\"marginRight\"), unit(options.gap) || \"0px\", width);\n      Style2.rule(selector + \" > img\", \"display\", options.cover ? \"none\" : \"inline\", width);\n    });\n  };\n\n  _proto3.buildTranslate = function buildTranslate(options) {\n    var _this$Direction = this.Direction,\n        resolve = _this$Direction.resolve,\n        orient = _this$Direction.orient;\n    var values = [];\n    values.push(this.cssOffsetClones(options));\n    values.push(this.cssOffsetGaps(options));\n\n    if (this.isCenter(options)) {\n      values.push(this.buildCssValue(orient(-50), \"%\"));\n      values.push.apply(values, this.cssOffsetCenter(options));\n    }\n\n    return values.filter(Boolean).map(function (value) {\n      return \"translate\" + resolve(\"X\") + \"(\" + value + \")\";\n    }).join(\" \");\n  };\n\n  _proto3.cssOffsetClones = function cssOffsetClones(options) {\n    var _this$Direction2 = this.Direction,\n        resolve = _this$Direction2.resolve,\n        orient = _this$Direction2.orient;\n    var cloneCount = this.getCloneCount();\n\n    if (this.isFixedWidth(options)) {\n      var _this$parseCssValue = this.parseCssValue(options[resolve(\"fixedWidth\")]),\n          value = _this$parseCssValue.value,\n          unit2 = _this$parseCssValue.unit;\n\n      return this.buildCssValue(orient(value) * cloneCount, unit2);\n    }\n\n    var percent = 100 * cloneCount / options.perPage;\n    return orient(percent) + \"%\";\n  };\n\n  _proto3.cssOffsetCenter = function cssOffsetCenter(options) {\n    var _this$Direction3 = this.Direction,\n        resolve = _this$Direction3.resolve,\n        orient = _this$Direction3.orient;\n\n    if (this.isFixedWidth(options)) {\n      var _this$parseCssValue2 = this.parseCssValue(options[resolve(\"fixedWidth\")]),\n          value = _this$parseCssValue2.value,\n          unit2 = _this$parseCssValue2.unit;\n\n      return [this.buildCssValue(orient(value / 2), unit2)];\n    }\n\n    var values = [];\n    var perPage = options.perPage,\n        gap = options.gap;\n    values.push(orient(50 / perPage) + \"%\");\n\n    if (gap) {\n      var _this$parseCssValue3 = this.parseCssValue(gap),\n          _value = _this$parseCssValue3.value,\n          _unit = _this$parseCssValue3.unit;\n\n      var gapOffset = (_value / perPage - _value) / 2;\n      values.push(this.buildCssValue(orient(gapOffset), _unit));\n    }\n\n    return values;\n  };\n\n  _proto3.cssOffsetGaps = function cssOffsetGaps(options) {\n    var cloneCount = this.getCloneCount();\n\n    if (cloneCount && options.gap) {\n      var orient = this.Direction.orient;\n\n      var _this$parseCssValue4 = this.parseCssValue(options.gap),\n          value = _this$parseCssValue4.value,\n          unit2 = _this$parseCssValue4.unit;\n\n      if (this.isFixedWidth(options)) {\n        return this.buildCssValue(orient(value * cloneCount), unit2);\n      }\n\n      var perPage = options.perPage;\n      var gaps = cloneCount / perPage;\n      return this.buildCssValue(orient(gaps * value), unit2);\n    }\n\n    return \"\";\n  };\n\n  _proto3.resolve = function resolve(prop) {\n    return camelToKebab(this.Direction.resolve(prop));\n  };\n\n  _proto3.cssPadding = function cssPadding(options, right) {\n    var padding = options.padding;\n    var prop = this.Direction.resolve(right ? \"right\" : \"left\", true);\n    return padding && unit(padding[prop] || (isObject(padding) ? 0 : padding)) || \"0px\";\n  };\n\n  _proto3.cssTrackHeight = function cssTrackHeight(options) {\n    var height = \"\";\n\n    if (this.isVertical()) {\n      height = this.cssHeight(options);\n      assert(height, '\"height\" is missing.');\n      height = \"calc(\" + height + \" - \" + this.cssPadding(options, false) + \" - \" + this.cssPadding(options, true) + \")\";\n    }\n\n    return height;\n  };\n\n  _proto3.cssHeight = function cssHeight(options) {\n    return unit(options.height);\n  };\n\n  _proto3.cssSlideWidth = function cssSlideWidth(options) {\n    return options.autoWidth ? \"\" : unit(options.fixedWidth) || (this.isVertical() ? \"\" : this.cssSlideSize(options));\n  };\n\n  _proto3.cssSlideHeight = function cssSlideHeight(options) {\n    return unit(options.fixedHeight) || (this.isVertical() ? options.autoHeight ? \"\" : this.cssSlideSize(options) : this.cssHeight(options));\n  };\n\n  _proto3.cssSlideSize = function cssSlideSize(options) {\n    var gap = unit(options.gap);\n    return \"calc((100%\" + (gap && \" + \" + gap) + \")/\" + (options.perPage || 1) + (gap && \" - \" + gap) + \")\";\n  };\n\n  _proto3.cssAspectRatio = function cssAspectRatio(options) {\n    var heightRatio = options.heightRatio;\n    return heightRatio ? \"\" + 1 / heightRatio : \"\";\n  };\n\n  _proto3.buildCssValue = function buildCssValue(value, unit2) {\n    return \"\" + value + unit2;\n  };\n\n  _proto3.parseCssValue = function parseCssValue(value) {\n    if (isString(value)) {\n      var number = parseFloat(value) || 0;\n      var unit2 = value.replace(/\\d*(\\.\\d*)?/, \"\") || \"px\";\n      return {\n        value: number,\n        unit: unit2\n      };\n    }\n\n    return {\n      value: value,\n      unit: \"px\"\n    };\n  };\n\n  _proto3.parseBreakpoints = function parseBreakpoints() {\n    var _this9 = this;\n\n    var breakpoints = this.options.breakpoints;\n    this.breakpoints.push([\"default\", this.options]);\n\n    if (breakpoints) {\n      forOwn(breakpoints, function (options, width) {\n        _this9.breakpoints.push([width, merge(merge({}, _this9.options), options)]);\n      });\n    }\n  };\n\n  _proto3.isFixedWidth = function isFixedWidth(options) {\n    return !!options[this.Direction.resolve(\"fixedWidth\")];\n  };\n\n  _proto3.isLoop = function isLoop() {\n    return this.options.type === LOOP;\n  };\n\n  _proto3.isCenter = function isCenter(options) {\n    if (options.focus === \"center\") {\n      if (this.isLoop()) {\n        return true;\n      }\n\n      if (this.options.type === SLIDE) {\n        return !this.options.trimSpace;\n      }\n    }\n\n    return false;\n  };\n\n  _proto3.isVertical = function isVertical() {\n    return this.options.direction === TTB;\n  };\n\n  _proto3.buildClasses = function buildClasses() {\n    var options = this.options;\n    return [CLASS_ROOT, CLASS_ROOT + \"--\" + options.type, CLASS_ROOT + \"--\" + options.direction, options.drag && CLASS_ROOT + \"--draggable\", options.isNavigation && CLASS_ROOT + \"--nav\", CLASS_ACTIVE, !this.config.hidden && CLASS_RENDERED].filter(Boolean).join(\" \");\n  };\n\n  _proto3.buildAttrs = function buildAttrs(attrs) {\n    var attr = \"\";\n    forOwn(attrs, function (value, key) {\n      attr += value ? \" \" + camelToKebab(key) + \"=\\\"\" + value + \"\\\"\" : \"\";\n    });\n    return attr.trim();\n  };\n\n  _proto3.buildStyles = function buildStyles(styles) {\n    var style = \"\";\n    forOwn(styles, function (value, key) {\n      style += \" \" + camelToKebab(key) + \":\" + value + \";\";\n    });\n    return style.trim();\n  };\n\n  _proto3.renderSlides = function renderSlides() {\n    var _this10 = this;\n\n    var tag = this.config.slideTag;\n    return this.slides.map(function (content) {\n      return \"<\" + tag + \" \" + _this10.buildAttrs(content.attrs) + \">\" + (content.html || \"\") + \"</\" + tag + \">\";\n    }).join(\"\");\n  };\n\n  _proto3.cover = function cover(content) {\n    var styles = content.styles,\n        _content$html = content.html,\n        html = _content$html === void 0 ? \"\" : _content$html;\n\n    if (this.options.cover && !this.options.lazyLoad) {\n      var src = html.match(/<img.*?src\\s*=\\s*(['\"])(.+?)\\1.*?>/);\n\n      if (src && src[2]) {\n        styles.background = \"center/cover no-repeat url('\" + src[2] + \"')\";\n      }\n    }\n  };\n\n  _proto3.generateClones = function generateClones(contents) {\n    var classes = this.options.classes;\n    var count = this.getCloneCount();\n    var slides = contents.slice();\n\n    while (slides.length < count) {\n      push(slides, slides);\n    }\n\n    push(slides.slice(-count).reverse(), slides.slice(0, count)).forEach(function (content, index) {\n      var attrs = assign({}, content.attrs, {\n        class: content.attrs.class + \" \" + classes.clone\n      });\n      var clone = assign({}, content, {\n        attrs: attrs\n      });\n      index < count ? contents.unshift(clone) : contents.push(clone);\n    });\n  };\n\n  _proto3.getCloneCount = function getCloneCount() {\n    if (this.isLoop()) {\n      var options = this.options;\n\n      if (options.clones) {\n        return options.clones;\n      }\n\n      var perPage = max.apply(void 0, this.breakpoints.map(function (_ref6) {\n        var options2 = _ref6[1];\n        return options2.perPage;\n      }));\n      return perPage * ((options.flickMaxPages || 1) + 1);\n    }\n\n    return 0;\n  };\n\n  _proto3.renderArrows = function renderArrows() {\n    var html = \"\";\n    html += \"<div class=\\\"\" + this.options.classes.arrows + \"\\\">\";\n    html += this.renderArrow(true);\n    html += this.renderArrow(false);\n    html += \"</div>\";\n    return html;\n  };\n\n  _proto3.renderArrow = function renderArrow(prev) {\n    var _this$options = this.options,\n        classes = _this$options.classes,\n        i18n = _this$options.i18n;\n    var attrs = {\n      class: classes.arrow + \" \" + (prev ? classes.prev : classes.next),\n      type: \"button\",\n      ariaLabel: prev ? i18n.prev : i18n.next\n    };\n    return \"<button \" + this.buildAttrs(attrs) + \"><svg xmlns=\\\"\" + XML_NAME_SPACE + \"\\\" viewBox=\\\"0 0 \" + SIZE + \" \" + SIZE + \"\\\" width=\\\"\" + SIZE + \"\\\" height=\\\"\" + SIZE + \"\\\"><path d=\\\"\" + (this.options.arrowPath || PATH) + \"\\\" /></svg></button>\";\n  };\n\n  _proto3.html = function html() {\n    var _this$config = this.config,\n        rootClass = _this$config.rootClass,\n        listTag = _this$config.listTag,\n        arrows = _this$config.arrows,\n        beforeTrack = _this$config.beforeTrack,\n        afterTrack = _this$config.afterTrack,\n        slider = _this$config.slider,\n        beforeSlider = _this$config.beforeSlider,\n        afterSlider = _this$config.afterSlider;\n    var html = \"\";\n    html += \"<div id=\\\"\" + this.id + \"\\\" class=\\\"\" + this.buildClasses() + \" \" + (rootClass || \"\") + \"\\\">\";\n    html += \"<style>\" + this.Style.build() + \"</style>\";\n\n    if (slider) {\n      html += beforeSlider || \"\";\n      html += \"<div class=\\\"splide__slider\\\">\";\n    }\n\n    html += beforeTrack || \"\";\n\n    if (arrows) {\n      html += this.renderArrows();\n    }\n\n    html += \"<div class=\\\"splide__track\\\">\";\n    html += \"<\" + listTag + \" class=\\\"splide__list\\\">\";\n    html += this.renderSlides();\n    html += \"</\" + listTag + \">\";\n    html += \"</div>\";\n    html += afterTrack || \"\";\n\n    if (slider) {\n      html += \"</div>\";\n      html += afterSlider || \"\";\n    }\n\n    html += \"</div>\";\n    return html;\n  };\n\n  return SplideRenderer;\n}();\n\nexport { CLASSES, CLASS_ACTIVE, CLASS_ARROW, CLASS_ARROWS, CLASS_ARROW_NEXT, CLASS_ARROW_PREV, CLASS_CLONE, CLASS_CONTAINER, CLASS_FOCUS_IN, CLASS_INITIALIZED, CLASS_LIST, CLASS_LOADING, CLASS_NEXT, CLASS_PAGINATION, CLASS_PAGINATION_PAGE, CLASS_PREV, CLASS_PROGRESS, CLASS_PROGRESS_BAR, CLASS_ROOT, CLASS_SLIDE, CLASS_SPINNER, CLASS_SR, CLASS_TOGGLE, CLASS_TOGGLE_PAUSE, CLASS_TOGGLE_PLAY, CLASS_TRACK, CLASS_VISIBLE, DEFAULTS, EVENT_ACTIVE, EVENT_ARROWS_MOUNTED, EVENT_ARROWS_UPDATED, EVENT_AUTOPLAY_PAUSE, EVENT_AUTOPLAY_PLAY, EVENT_AUTOPLAY_PLAYING, EVENT_CLICK, EVENT_DESTROY, EVENT_DRAG, EVENT_DRAGGED, EVENT_DRAGGING, EVENT_HIDDEN, EVENT_INACTIVE, EVENT_LAZYLOAD_LOADED, EVENT_MOUNTED, EVENT_MOVE, EVENT_MOVED, EVENT_NAVIGATION_MOUNTED, EVENT_PAGINATION_MOUNTED, EVENT_PAGINATION_UPDATED, EVENT_READY, EVENT_REFRESH, EVENT_RESIZE, EVENT_RESIZED, EVENT_SCROLL, EVENT_SCROLLED, EVENT_SHIFTED, EVENT_SLIDE_KEYDOWN, EVENT_UPDATED, EVENT_VISIBLE, EventBinder, EventInterface, FADE, LOOP, LTR, RTL, RequestInterval, SLIDE, STATUS_CLASSES, Splide, SplideRenderer, State, TTB, Throttle, Splide as default };\n","function empty(array) {\n  array.length = 0;\n}\n\nfunction slice(arrayLike, start, end) {\n  return Array.prototype.slice.call(arrayLike, start, end);\n}\n\nfunction find(arrayLike, predicate) {\n  return slice(arrayLike).filter(predicate)[0];\n}\n\nfunction apply(func) {\n  return func.bind(null, ...slice(arguments, 1));\n}\n\nconst nextTick = setTimeout;\n\nconst noop = () => {\n};\n\nfunction raf(func) {\n  return requestAnimationFrame(func);\n}\n\nfunction typeOf(type, subject) {\n  return typeof subject === type;\n}\nfunction isObject(subject) {\n  return !isNull(subject) && typeOf(\"object\", subject);\n}\nconst isArray = Array.isArray;\nconst isFunction = apply(typeOf, \"function\");\nconst isString = apply(typeOf, \"string\");\nconst isUndefined = apply(typeOf, \"undefined\");\nfunction isNull(subject) {\n  return subject === null;\n}\nfunction isHTMLElement(subject) {\n  return subject instanceof HTMLElement;\n}\nfunction isHTMLButtonElement(subject) {\n  return subject instanceof HTMLButtonElement;\n}\n\nfunction toArray(value) {\n  return isArray(value) ? value : [value];\n}\n\nfunction forEach(values, iteratee) {\n  toArray(values).forEach(iteratee);\n}\n\nfunction includes(array, value) {\n  return array.indexOf(value) > -1;\n}\n\nfunction push(array, items) {\n  array.push(...toArray(items));\n  return array;\n}\n\nfunction toggleClass(elm, classes, add) {\n  if (elm) {\n    forEach(classes, (name) => {\n      if (name) {\n        elm.classList[add ? \"add\" : \"remove\"](name);\n      }\n    });\n  }\n}\n\nfunction addClass(elm, classes) {\n  toggleClass(elm, isString(classes) ? classes.split(\" \") : classes, true);\n}\n\nfunction append(parent, children) {\n  forEach(children, parent.appendChild.bind(parent));\n}\n\nfunction before(nodes, ref) {\n  forEach(nodes, (node) => {\n    const parent = (ref || node).parentNode;\n    if (parent) {\n      parent.insertBefore(node, ref);\n    }\n  });\n}\n\nfunction matches(elm, selector) {\n  return isHTMLElement(elm) && (elm[\"msMatchesSelector\"] || elm.matches).call(elm, selector);\n}\n\nfunction children(parent, selector) {\n  const children2 = parent ? slice(parent.children) : [];\n  return selector ? children2.filter((child) => matches(child, selector)) : children2;\n}\n\nfunction child(parent, selector) {\n  return selector ? children(parent, selector)[0] : parent.firstElementChild;\n}\n\nconst ownKeys = Object.keys;\n\nfunction forOwn(object, iteratee, right) {\n  if (object) {\n    let keys = ownKeys(object);\n    keys = right ? keys.reverse() : keys;\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}\n\nfunction assign(object) {\n  slice(arguments, 1).forEach((source) => {\n    forOwn(source, (value, key) => {\n      object[key] = source[key];\n    });\n  });\n  return object;\n}\n\nfunction merge(object) {\n  slice(arguments, 1).forEach((source) => {\n    forOwn(source, (value, key) => {\n      if (isArray(value)) {\n        object[key] = value.slice();\n      } else if (isObject(value)) {\n        object[key] = merge({}, isObject(object[key]) ? object[key] : {}, value);\n      } else {\n        object[key] = value;\n      }\n    });\n  });\n  return object;\n}\n\nfunction omit(object, keys) {\n  toArray(keys || ownKeys(object)).forEach((key) => {\n    delete object[key];\n  });\n}\n\nfunction removeAttribute(elms, attrs) {\n  forEach(elms, (elm) => {\n    forEach(attrs, (attr) => {\n      elm && elm.removeAttribute(attr);\n    });\n  });\n}\n\nfunction setAttribute(elms, attrs, value) {\n  if (isObject(attrs)) {\n    forOwn(attrs, (value2, name) => {\n      setAttribute(elms, name, value2);\n    });\n  } else {\n    forEach(elms, (elm) => {\n      isNull(value) || value === \"\" ? removeAttribute(elm, attrs) : elm.setAttribute(attrs, String(value));\n    });\n  }\n}\n\nfunction create(tag, attrs, parent) {\n  const 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}\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}\n\nfunction display(elm, display2) {\n  style(elm, \"display\", display2);\n}\n\nfunction focus(elm) {\n  elm[\"setActive\"] && elm[\"setActive\"]() || elm.focus({ preventScroll: true });\n}\n\nfunction getAttribute(elm, attr) {\n  return elm.getAttribute(attr);\n}\n\nfunction hasClass(elm, className) {\n  return elm && elm.classList.contains(className);\n}\n\nfunction rect(target) {\n  return target.getBoundingClientRect();\n}\n\nfunction remove(nodes) {\n  forEach(nodes, (node) => {\n    if (node && node.parentNode) {\n      node.parentNode.removeChild(node);\n    }\n  });\n}\n\nfunction measure(parent, value) {\n  if (isString(value)) {\n    const div = create(\"div\", { style: `width: ${value}; position: absolute;` }, parent);\n    value = rect(div).width;\n    remove(div);\n  }\n  return value;\n}\n\nfunction parseHtml(html) {\n  return child(new DOMParser().parseFromString(html, \"text/html\").body);\n}\n\nfunction prevent(e, stopPropagation) {\n  e.preventDefault();\n  if (stopPropagation) {\n    e.stopPropagation();\n    e.stopImmediatePropagation();\n  }\n}\n\nfunction query(parent, selector) {\n  return parent && parent.querySelector(selector);\n}\n\nfunction queryAll(parent, selector) {\n  return selector ? slice(parent.querySelectorAll(selector)) : [];\n}\n\nfunction removeClass(elm, classes) {\n  toggleClass(elm, classes, false);\n}\n\nfunction timeOf(e) {\n  return e.timeStamp;\n}\n\nfunction unit(value) {\n  return isString(value) ? value : value ? `${value}px` : \"\";\n}\n\nconst PROJECT_CODE = \"splide\";\n\nfunction assert(condition, message) {\n  if (!condition) {\n    throw new Error(`[${PROJECT_CODE}] ${message || \"\"}`);\n  }\n}\n\nfunction error(message) {\n  console.error(`[${PROJECT_CODE}] ${message}`);\n}\n\nconst { min, max, floor, ceil, abs } = Math;\n\nfunction approximatelyEqual(x, y, epsilon) {\n  return abs(x - y) < epsilon;\n}\n\nfunction between(number, minOrMax, maxOrMin, exclusive) {\n  const minimum = min(minOrMax, maxOrMin);\n  const maximum = max(minOrMax, maxOrMin);\n  return exclusive ? minimum < number && number < maximum : minimum <= number && number <= maximum;\n}\n\nfunction clamp(number, x, y) {\n  const minimum = min(x, y);\n  const maximum = max(x, y);\n  return min(max(minimum, number), maximum);\n}\n\nfunction sign(x) {\n  return +(x > 0) - +(x < 0);\n}\n\nfunction camelToKebab(string) {\n  return string.replace(/([a-z0-9])([A-Z])/g, \"$1-$2\").toLowerCase();\n}\n\nfunction format(string, replacements) {\n  forEach(replacements, (replacement) => {\n    string = string.replace(\"%s\", `${replacement}`);\n  });\n  return string;\n}\n\nfunction pad(number) {\n  return number < 10 ? `0${number}` : `${number}`;\n}\n\nconst ids = {};\nfunction uniqueId(prefix) {\n  return `${prefix}${pad(ids[prefix] = (ids[prefix] || 0) + 1)}`;\n}\n\nexport { abs, addClass, append, apply, approximatelyEqual, assert, assign, before, between, camelToKebab, ceil, child, children, clamp, create, display, empty, error, find, floor, focus, forEach, forOwn, format, getAttribute, hasClass, includes, isArray, isFunction, isHTMLButtonElement, isHTMLElement, isNull, isObject, isString, isUndefined, matches, max, measure, merge, min, nextTick, noop, omit, ownKeys, pad, parseHtml, prevent, push, query, queryAll, raf, rect, remove, removeAttribute, removeClass, setAttribute, sign, slice, style, timeOf, toArray, toggleClass, uniqueId, unit };\n","import { CLASS_SLIDE } from '@splidejs/splide';\r\n\r\n\r\nexport const CLASS_SLIDE_ROW = `${ CLASS_SLIDE }__row`;\r\nexport const CLASS_SLIDE_COL = `${ CLASS_SLIDE }--col`;\r\n","import { GridOptions } from '../types/options';\r\n\r\n\r\n/**\r\n * Default options.\r\n *\r\n * @since 0.3.0\r\n */\r\nexport const DEFAULTS: GridOptions = {\r\n  rows      : 1,\r\n  cols      : 1,\r\n  dimensions: [],\r\n  gap       : {},\r\n};\r\n","import { isArray, min, assert } from '@splidejs/splide/src/js/utils';\nimport { GridOptions } from '../../types/options';\n\n\n/**\n * The interface for the Dimension subcomponent.\n *\n * @since 0.3.0\n */\nexport interface DimensionComponent {\n  get( index: number ): [ number, number ];\n  getAt( index: number ): [ number, number ];\n}\n\n/**\n * The subcomponent to calculate dimension at the specific index.\n *\n * @param options - Initialized grid options.\n *\n * @return A Dimension sub-component.\n */\nexport function Dimension( options: GridOptions ): DimensionComponent {\n  /**\n   * Retrieves the dimension array from options.\n   * If it is not available, returns [ [ options.rows, options.cols ] ].\n   *\n   * @return An array with dimensions.\n   */\n  function normalize(): [ number, number ][] {\n    const { rows, cols, dimensions } = options;\n    return isArray( dimensions ) && dimensions.length ? dimensions : [ [ rows, cols ] ];\n  }\n\n  /**\n   * Returns the dimension (`[ row, col ]`) at the specified index.\n   *\n   * @param index - An index.\n   *\n   * @return A tuple with rows and cols.\n   */\n  function get( index: number ): [ number, number ] {\n    const dimensions = normalize();\n    return dimensions[ min( index, dimensions.length - 1 ) ];\n  }\n\n  /**\n   * Returns the dimension (`[ row, col ]`) where the slide at the specified index should belong.\n   *\n   * @param index - A slide index (before they are assigned to cols).\n   *\n   * @return A tuple with rows and cols.\n   */\n  function getAt( index: number ): [ number, number ] {\n    const dimensions = normalize();\n\n    let rows, cols, aggregator = 0;\n\n    for ( let i = 0; i < dimensions.length; i++ ) {\n      const dimension = dimensions[ i ];\n      rows = dimension[ 0 ] || 1;\n      cols = dimension[ 1 ] || 1;\n\n      aggregator += rows * cols;\n\n      if ( index < aggregator ) {\n        break;\n      }\n    }\n\n    assert( rows && cols, 'Invalid dimension' );\n\n    return [ rows, cols ];\n  }\n\n  return {\n    get,\n    getAt,\n  };\n}\n","import { CLASS_CONTAINER, EVENT_HIDDEN, EVENT_VISIBLE, EventInterface, SlideComponent, Splide } from '@splidejs/splide';\nimport { child, pad, queryAll, removeAttribute, setAttribute, style, unit } from '@splidejs/splide/src/js/utils';\nimport { CLASS_SLIDE_COL, CLASS_SLIDE_ROW } from '../../constants/classes';\nimport { GridOptions } from '../../types/options';\nimport { DimensionComponent } from './Dimension';\n\n\n/**\n * The interface for the Layout subcomponent.\n *\n * @since 0.5.0\n */\nexport interface LayoutComponent {\n  mount(): void;\n  destroy(): void;\n}\n\n/**\n * The subcomponent to layout grids.\n *\n * @since 0.5.0\n *\n * @param Splide      - A Splide instance.\n * @param gridOptions - Initialized grid options.\n * @param Dimension   - A Dimension subcomponent.\n *\n * @return A Layout subcomponent object.\n */\nexport function Layout( Splide: Splide, gridOptions: GridOptions, Dimension: DimensionComponent ): LayoutComponent {\n  const { on, destroy: destroyEvent } = EventInterface( Splide );\n  const { Components, options } = Splide;\n  const { resolve } = Components.Direction;\n  const { forEach } = Components.Slides;\n\n  /**\n   * Initializes the component.\n   */\n  function mount(): void {\n    layout();\n\n    if ( options.slideFocus ) {\n      on( EVENT_VISIBLE, onVisible );\n      on( EVENT_HIDDEN, onHidden );\n    }\n  }\n\n  /**\n   * Destroys the component.\n   */\n  function destroy(): void {\n    forEach( Slide => {\n      const { slide } = Slide;\n      toggleTabIndex( slide, false );\n\n      getRowsIn( slide ).forEach( cell => {\n        removeAttribute( cell, 'style' );\n      } );\n\n      getColsIn( slide ).forEach( colSlide => {\n        cover( colSlide, true );\n        removeAttribute( colSlide, 'style' );\n      } );\n    } );\n\n    destroyEvent();\n  }\n\n  /**\n   * Layouts grid elements.\n   */\n  function layout(): void {\n    forEach( Slide => {\n      const { slide } = Slide;\n      const [ rows, cols ] = Dimension.get( Slide.isClone ? Slide.slideIndex : Slide.index );\n\n      layoutRow( rows, slide );\n      layoutCol( cols, slide );\n\n      getColsIn( Slide.slide ).forEach( ( colSlide, index ) => {\n        colSlide.id = `${ Slide.slide.id }-col${ pad( index + 1 ) }`;\n\n        if ( Splide.options.cover ) {\n          cover( colSlide );\n        }\n      } );\n    } );\n  }\n\n  /**\n   * Layouts row elements by CSS.\n   *\n   * @param rows  - A number of rows.\n   * @param slide - A slide element.\n   */\n  function layoutRow( rows: number, slide: HTMLElement ): void {\n    const { row: rowGap } = gridOptions.gap;\n    const height  = `calc(${ 100 / rows }%${ rowGap ? ` - ${ unit( rowGap ) } * ${ ( rows - 1 ) / rows }` : '' })`;\n\n    getRowsIn( slide ).forEach( ( rowElm, index, rowElms ) => {\n      style( rowElm, 'height', height );\n      style( rowElm, 'display', 'flex' );\n      style( rowElm, 'margin', `0 0 ${ unit( rowGap ) } 0` );\n      style( rowElm, 'padding', 0 );\n\n      if ( index === rowElms.length - 1 ) {\n        style( rowElm, 'marginBottom', 0 );\n      }\n    } );\n  }\n\n  /**\n   * Layouts col elements by CSS.\n   *\n   * @param cols  - A number of cols.\n   * @param slide - A slide element.\n   */\n  function layoutCol( cols: number, slide: HTMLElement ): void {\n    const { col: colGap } = gridOptions.gap;\n    const width = `calc(${ 100 / cols }%${ colGap ? ` - ${ unit( colGap ) } * ${ ( cols - 1 ) / cols }` : '' })`;\n\n    getColsIn( slide ).forEach( ( colElm, index, colElms ) => {\n      style( colElm, 'width', width );\n\n      if ( index !== colElms.length - 1 ) {\n        style( colElm, resolve( 'marginRight' ), unit( colGap ) );\n      }\n    } );\n  }\n\n  /**\n   * Sets the background image to the col element by its own image element.\n   *\n   * @param colSlide - A col slide element.\n   * @param uncover  - Optional. If `true`, reset the cover mode.\n   */\n  function cover( colSlide: HTMLElement, uncover?: boolean ): void {\n    const container = child( colSlide, `.${ CLASS_CONTAINER }` );\n    const img       = child<HTMLImageElement>( container || colSlide, 'img' );\n\n    if ( img && img.src ) {\n      style( container || colSlide, 'background', uncover ? '' : `center/cover no-repeat url(\"${ img.src }\")` );\n      style( img, 'display', uncover ? '' : 'none' );\n    }\n  }\n\n  /**\n   * Returns row elements in the provided slide.\n   *\n   * @param slide - A slide element.\n   *\n   * @return An array with row elements.\n   */\n  function getRowsIn( slide: HTMLElement ): HTMLElement[] {\n    return queryAll<HTMLElement>( slide, `.${ CLASS_SLIDE_ROW }` );\n  }\n\n  /**\n   * Returns col elements in the provided slide.\n   *\n   * @param slide - A slide element.\n   *\n   * @return An array with col elements.\n   */\n  function getColsIn( slide: HTMLElement ): HTMLElement[] {\n    return queryAll<HTMLElement>( slide, `.${ CLASS_SLIDE_COL }` );\n  }\n\n  /**\n   * Toggles the tab index of col elements.\n   *\n   * @param slide - A slide element.\n   * @param add   - Optional. Determines whether to add or remove tab index.\n   */\n  function toggleTabIndex( slide: HTMLElement, add?: boolean ): void {\n    getColsIn( slide ).forEach( colSlide => {\n      setAttribute( colSlide, 'tabindex', add ? 0 : null );\n    } );\n  }\n\n  /**\n   * Called when any slide becomes visible.\n   *\n   * @param Slide - A Slide component.\n   */\n  function onVisible( Slide: SlideComponent ): void {\n    toggleTabIndex( Slide.slide, true );\n  }\n\n  /**\n   * Called when any slide gets hidden.\n   *\n   * @param Slide - A Slide component.\n   */\n  function onHidden( Slide: SlideComponent ): void {\n    toggleTabIndex( Slide.slide, false );\n  }\n\n  return {\n    mount,\n    destroy,\n  };\n}\n","import {\n  BaseComponent,\n  CLASS_ROOT,\n  CLASS_SLIDE,\n  Components,\n  EVENT_REFRESH,\n  EVENT_UPDATED,\n  EventInterface,\n  Options,\n  Splide,\n} from '@splidejs/splide';\nimport {\n  addClass,\n  append,\n  assign,\n  create,\n  empty,\n  hasClass,\n  isArray,\n  omit,\n  push,\n  remove,\n  removeClass,\n} from '@splidejs/splide/src/js/utils';\nimport { CLASS_SLIDE_COL, CLASS_SLIDE_ROW } from '../../constants/classes';\nimport { DEFAULTS } from '../../constants/defaults';\nimport { GridOptions } from '../../types/options';\nimport { Dimension as DimensionConstructor } from './Dimension';\nimport { Layout as LayoutConstructor } from './Layout';\n\n\n/**\n * Lets the compiler know the Grid component.\n */\ndeclare module '@splidejs/splide' {\n  interface Options {\n    grid?: GridOptions | null | false;\n  }\n\n  interface Components {\n    Grid?: GridComponent;\n  }\n}\n\n/**\n * The interface for the Grid component.\n *\n * @since 0.3.14\n */\nexport interface GridComponent extends BaseComponent {\n}\n\n/**\n * The extension for the grid slider.\n *\n * @since 0.5.0\n *\n * @param Splide     - A Splide instance.\n * @param Components - A collection of components.\n * @param options    - Options.\n *\n * @return A Video component object.\n */\nexport function Grid( Splide: Splide, Components: Components, options: Options ): GridComponent {\n  const { on, off } = EventInterface( Splide );\n  const { Elements } = Components;\n\n  /**\n   * Options for the extension.\n   */\n  const gridOptions: GridOptions = {};\n\n  /**\n   * The Dimension subcomponent.\n   */\n  const Dimension = DimensionConstructor( gridOptions );\n\n  /**\n   * The Layout subcomponent.\n   */\n  const Layout = LayoutConstructor( Splide, gridOptions, Dimension );\n\n  /**\n   * The modifier class to add to the root element.\n   */\n  const modifier = `${ CLASS_ROOT }--grid`;\n\n  /**\n   * Keeps original slides for restoration.\n   */\n  const originalSlides: HTMLElement[] = [];\n\n  /**\n   * Called when the extension is mounted.\n   */\n  function mount(): void {\n    init();\n    on( EVENT_UPDATED, init );\n  }\n\n  /**\n   * Initializes the extension when the slider gets active, or options are updated.\n   */\n  function init(): void {\n    omit( gridOptions );\n    assign( gridOptions, DEFAULTS, options.grid || {} );\n\n    if ( shouldBuild() ) {\n      destroy();\n      push( originalSlides, Elements.slides );\n      addClass( Splide.root, modifier );\n      append( Elements.list, build() );\n      off( EVENT_REFRESH );\n      on( EVENT_REFRESH, layout );\n      refresh();\n    } else if ( isActive() ) {\n      destroy();\n      refresh();\n    }\n  }\n\n  /**\n   * Destroys the extension.\n   * Deconstructs grid and restores original slides to the list element.\n   */\n  function destroy(): void {\n    if ( isActive() ) {\n      const { slides } = Elements;\n\n      Layout.destroy();\n\n      originalSlides.forEach( slide => {\n        removeClass( slide, CLASS_SLIDE_COL );\n        append( Elements.list, slide );\n      } );\n\n      remove( slides );\n      removeClass( Splide.root, modifier );\n      empty( slides );\n      push( slides, originalSlides );\n      empty( originalSlides );\n      off( EVENT_REFRESH );\n    }\n  }\n\n  /**\n   * Requests to refresh the slider.\n   */\n  function refresh(): void {\n    Splide.refresh();\n  }\n\n  /**\n   * Layouts row and col slides via the Layout subcomponent.\n   * The extension calls this after requesting ths slider to refresh it.\n   */\n  function layout(): void {\n    if ( isActive() ) {\n      Layout.mount();\n    }\n  }\n\n  /**\n   * Builds grid and returns created outer slide elements.\n   *\n   * @return An array with outer slides.\n   */\n  function build(): HTMLElement[] {\n    const outerSlides: HTMLElement[] = [];\n\n    let row = 0, col = 0;\n    let outerSlide: HTMLElement, rowSlide: HTMLElement;\n\n    originalSlides.forEach( ( slide, index ) => {\n      const [ rows, cols ] = Dimension.getAt( index );\n\n      if ( ! col ) {\n        if ( ! row ) {\n          outerSlide = create( slide.tagName, CLASS_SLIDE );\n          outerSlides.push( outerSlide );\n        }\n\n        rowSlide = buildRow( rows, slide, outerSlide );\n      }\n\n      buildCol( cols, slide, rowSlide );\n\n      if ( ++col >= cols ) {\n        col = 0;\n        row = ++row >= rows ? 0 : row;\n      }\n    } );\n\n    return outerSlides;\n  }\n\n  /**\n   * Creates an element for a row.\n   *\n   * @param rows       - A number of rows.\n   * @param slide      - An original slide element.\n   * @param outerSlide - An outer slide element.\n   *\n   * A created element.\n   */\n  function buildRow( rows: number, slide: HTMLElement, outerSlide: HTMLElement ): HTMLElement {\n    const tag = slide.tagName.toLowerCase() === 'li' ? 'ul' : 'div';\n    return create( tag, CLASS_SLIDE_ROW, outerSlide );\n  }\n\n  /**\n   * Creates an element for a col.\n   * Currently, uses the original slide element itself.\n   *\n   * @param cols     - A number of cols.\n   * @param slide    - An original slide element.\n   * @param rowSlide - A row slide element.\n   *\n   * @return A created element.\n   */\n  function buildCol( cols: number, slide: HTMLElement, rowSlide: HTMLElement ): HTMLElement {\n    addClass( slide, CLASS_SLIDE_COL );\n    append( rowSlide, slide );\n    return slide;\n  }\n\n  /**\n   * Tells if the extension should make grids or not by checking the current options.\n   *\n   * @return `true` if the extension should init grids, or otherwise `false`.\n   */\n  function shouldBuild(): boolean {\n    if ( options.grid ) {\n      const { rows, cols, dimensions } = gridOptions;\n      return rows > 1 || cols > 1 || ( isArray( dimensions ) && dimensions.length > 0 );\n    }\n\n    return false;\n  }\n\n  /**\n   * Checks if the grid mode is active or not.\n   *\n   * @return `true` if the grid extension is active, or `false` if not.\n   */\n  function isActive(): boolean {\n    return hasClass( Splide.root, modifier );\n  }\n\n  return {\n    mount,\n    destroy,\n  };\n}\n","import { Grid } from '../extensions';\n\n\ndeclare global {\n  interface Window {\n    splide: Record<string, any>;\n  }\n}\n\nif ( typeof window !== 'undefined' ) {\n  window.splide = window.splide || {};\n  window.splide.Extensions = window.splide.Extensions || {};\n  window.splide.Extensions.Grid = Grid;\n}\n"],"names":["empty","array","length","slice","arrayLike","start","end","Array","prototype","call","apply","func","bind","concat","arguments","typeOf","type","subject","isArray","toArray","value","forEach","values","iteratee","ownKeys","Object","keys","forOwn","object","right","reverse","i","key","assign","source","PROJECT_CODE","EventBinder","listeners","targets","events","callback","options","forEachEvent","target","event","namespace","isEventTarget","remover","removeEventListener","addEventListener","push","unbind","filter","listener","dispatch","detail","e","bubbles","CustomEvent","document","createEvent","initCustomEvent","dispatchEvent","events2","split","eventNS","fragment","destroy","data","EVENT_VISIBLE","EVENT_HIDDEN","EVENT_REFRESH","EVENT_UPDATED","EVENT_DESTROY","EventInterface","Splide2","bus","createDocumentFragment","binder","on","join","emit","off","CLASS_ROOT","CLASS_SLIDE","CLASS_CONTAINER","isObject","isNull","isString","isUndefined","isHTMLElement","HTMLElement","items","toggleClass","elm","classes","add","name","classList","addClass","append","parent","children","appendChild","matches","selector","children2","child","firstElementChild","omit","removeAttribute","elms","attrs","attr","setAttribute","value2","String","create","tag","createElement","style","prop","getComputedStyle","hasClass","className","contains","remove","nodes","node","parentNode","removeChild","queryAll","querySelectorAll","removeClass","unit","assert","condition","message","Error","min","Math","max","floor","ceil","abs","pad","number","CLASS_SLIDE_ROW","CLASS_SLIDE_COL","DEFAULTS","rows","cols","dimensions","gap","Dimension","normalize","get","index","getAt","aggregator","dimension","Layout","gridOptions","destroyEvent","Components","resolve","Direction","Slides","mount","layout","slideFocus","onVisible","onHidden","Slide","slide","toggleTabIndex","getRowsIn","cell","getColsIn","colSlide","cover","isClone","slideIndex","layoutRow","layoutCol","id","rowGap","row","height","rowElm","rowElms","colGap","col","width","colElm","colElms","uncover","container","img","src","Grid","Components2","Elements","DimensionConstructor","LayoutConstructor","modifier","originalSlides","init","grid","shouldBuild","slides","root","list","build","refresh","isActive","outerSlides","outerSlide","rowSlide","tagName","buildRow","buildCol","toLowerCase","window","splide","Extensions"],"mappings":"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"}