{"version":3,"file":"splide.min.js","sources":["scripts/splide/js/splide.min.js"],"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); } }\r\n\r\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\r\n\r\n/*!\r\n * Splide.js\r\n * Version : 4.1.2\r\n * License : MIT\r\n * Copyright: 2022 Naotoshi Fujita\r\n */\r\n(function (global, factory) {\r\n typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : typeof define === 'function' && define.amd ? define(factory) : (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.Splide = factory());\r\n})(this, function () {\r\n 'use strict';\r\n\r\n var MEDIA_PREFERS_REDUCED_MOTION = \"(prefers-reduced-motion: reduce)\";\r\n var CREATED = 1;\r\n var MOUNTED = 2;\r\n var IDLE = 3;\r\n var MOVING = 4;\r\n var SCROLLING = 5;\r\n var DRAGGING = 6;\r\n var DESTROYED = 7;\r\n var STATES = {\r\n CREATED: CREATED,\r\n MOUNTED: MOUNTED,\r\n IDLE: IDLE,\r\n MOVING: MOVING,\r\n SCROLLING: SCROLLING,\r\n DRAGGING: DRAGGING,\r\n DESTROYED: DESTROYED\r\n };\r\n\r\n function empty(array) {\r\n array.length = 0;\r\n }\r\n\r\n function slice(arrayLike, start, end) {\r\n return Array.prototype.slice.call(arrayLike, start, end);\r\n }\r\n\r\n function apply(func) {\r\n return func.bind.apply(func, [null].concat(slice(arguments, 1)));\r\n }\r\n\r\n var nextTick = setTimeout;\r\n\r\n var noop = function noop() {};\r\n\r\n function raf(func) {\r\n return requestAnimationFrame(func);\r\n }\r\n\r\n function typeOf(type, subject) {\r\n return typeof subject === type;\r\n }\r\n\r\n function isObject(subject) {\r\n return !isNull(subject) && typeOf(\"object\", subject);\r\n }\r\n\r\n var isArray = Array.isArray;\r\n var isFunction = apply(typeOf, \"function\");\r\n var isString = apply(typeOf, \"string\");\r\n var isUndefined = apply(typeOf, \"undefined\");\r\n\r\n function isNull(subject) {\r\n return subject === null;\r\n }\r\n\r\n function isHTMLElement(subject) {\r\n try {\r\n return subject instanceof (subject.ownerDocument.defaultView || window).HTMLElement;\r\n } catch (e) {\r\n return false;\r\n }\r\n }\r\n\r\n function toArray(value) {\r\n return isArray(value) ? value : [value];\r\n }\r\n\r\n function forEach(values, iteratee) {\r\n toArray(values).forEach(iteratee);\r\n }\r\n\r\n function includes(array, value) {\r\n return array.indexOf(value) > -1;\r\n }\r\n\r\n function push(array, items) {\r\n array.push.apply(array, toArray(items));\r\n return array;\r\n }\r\n\r\n function toggleClass(elm, classes, add) {\r\n if (elm) {\r\n forEach(classes, function (name) {\r\n if (name) {\r\n elm.classList[add ? \"add\" : \"remove\"](name);\r\n }\r\n });\r\n }\r\n }\r\n\r\n function addClass(elm, classes) {\r\n toggleClass(elm, isString(classes) ? classes.split(\" \") : classes, true);\r\n }\r\n\r\n function append(parent, children) {\r\n forEach(children, parent.appendChild.bind(parent));\r\n }\r\n\r\n function before(nodes, ref) {\r\n forEach(nodes, function (node) {\r\n var parent = (ref || node).parentNode;\r\n\r\n if (parent) {\r\n parent.insertBefore(node, ref);\r\n }\r\n });\r\n }\r\n\r\n function matches(elm, selector) {\r\n return isHTMLElement(elm) && (elm[\"msMatchesSelector\"] || elm.matches).call(elm, selector);\r\n }\r\n\r\n function children(parent, selector) {\r\n var children2 = parent ? slice(parent.children) : [];\r\n return selector ? children2.filter(function (child) {\r\n return matches(child, selector);\r\n }) : children2;\r\n }\r\n\r\n function child(parent, selector) {\r\n return selector ? children(parent, selector)[0] : parent.firstElementChild;\r\n }\r\n\r\n var ownKeys = Object.keys;\r\n\r\n function forOwn(object, iteratee, right) {\r\n if (object) {\r\n (right ? ownKeys(object).reverse() : ownKeys(object)).forEach(function (key) {\r\n key !== \"__proto__\" && iteratee(object[key], key);\r\n });\r\n }\r\n\r\n return object;\r\n }\r\n\r\n function assign(object) {\r\n slice(arguments, 1).forEach(function (source) {\r\n forOwn(source, function (value, key) {\r\n object[key] = source[key];\r\n });\r\n });\r\n return object;\r\n }\r\n\r\n function merge(object) {\r\n slice(arguments, 1).forEach(function (source) {\r\n forOwn(source, function (value, key) {\r\n if (isArray(value)) {\r\n object[key] = value.slice();\r\n } else if (isObject(value)) {\r\n object[key] = merge({}, isObject(object[key]) ? object[key] : {}, value);\r\n } else {\r\n object[key] = value;\r\n }\r\n });\r\n });\r\n return object;\r\n }\r\n\r\n function omit(object, keys) {\r\n forEach(keys || ownKeys(object), function (key) {\r\n delete object[key];\r\n });\r\n }\r\n\r\n function removeAttribute(elms, attrs) {\r\n forEach(elms, function (elm) {\r\n forEach(attrs, function (attr) {\r\n elm && elm.removeAttribute(attr);\r\n });\r\n });\r\n }\r\n\r\n function setAttribute(elms, attrs, value) {\r\n if (isObject(attrs)) {\r\n forOwn(attrs, function (value2, name) {\r\n setAttribute(elms, name, value2);\r\n });\r\n } else {\r\n forEach(elms, function (elm) {\r\n isNull(value) || value === \"\" ? removeAttribute(elm, attrs) : elm.setAttribute(attrs, String(value));\r\n });\r\n }\r\n }\r\n\r\n function create(tag, attrs, parent) {\r\n var elm = document.createElement(tag);\r\n\r\n if (attrs) {\r\n isString(attrs) ? addClass(elm, attrs) : setAttribute(elm, attrs);\r\n }\r\n\r\n parent && append(parent, elm);\r\n return elm;\r\n }\r\n\r\n function style(elm, prop, value) {\r\n if (isUndefined(value)) {\r\n return getComputedStyle(elm)[prop];\r\n }\r\n\r\n if (!isNull(value)) {\r\n elm.style[prop] = \"\" + value;\r\n }\r\n }\r\n\r\n function display(elm, display2) {\r\n style(elm, \"display\", display2);\r\n }\r\n\r\n function focus(elm) {\r\n elm[\"setActive\"] && elm[\"setActive\"]() || elm.focus({\r\n preventScroll: true\r\n });\r\n }\r\n\r\n function getAttribute(elm, attr) {\r\n return elm.getAttribute(attr);\r\n }\r\n\r\n function hasClass(elm, className) {\r\n return elm && elm.classList.contains(className);\r\n }\r\n\r\n function rect(target) {\r\n return target.getBoundingClientRect();\r\n }\r\n\r\n function remove(nodes) {\r\n forEach(nodes, function (node) {\r\n if (node && node.parentNode) {\r\n node.parentNode.removeChild(node);\r\n }\r\n });\r\n }\r\n\r\n function parseHtml(html) {\r\n return child(new DOMParser().parseFromString(html, \"text/html\").body);\r\n }\r\n\r\n function prevent(e, stopPropagation) {\r\n e.preventDefault();\r\n\r\n if (stopPropagation) {\r\n e.stopPropagation();\r\n e.stopImmediatePropagation();\r\n }\r\n }\r\n\r\n function query(parent, selector) {\r\n return parent && parent.querySelector(selector);\r\n }\r\n\r\n function queryAll(parent, selector) {\r\n return selector ? slice(parent.querySelectorAll(selector)) : [];\r\n }\r\n\r\n function removeClass(elm, classes) {\r\n toggleClass(elm, classes, false);\r\n }\r\n\r\n function timeOf(e) {\r\n return e.timeStamp;\r\n }\r\n\r\n function unit(value) {\r\n return isString(value) ? value : value ? value + \"px\" : \"\";\r\n }\r\n\r\n var PROJECT_CODE = \"splide\";\r\n var DATA_ATTRIBUTE = \"data-\" + PROJECT_CODE;\r\n\r\n function assert(condition, message) {\r\n if (!condition) {\r\n throw new Error(\"[\" + PROJECT_CODE + \"] \" + (message || \"\"));\r\n }\r\n }\r\n\r\n var min = Math.min,\r\n max = Math.max,\r\n floor = Math.floor,\r\n ceil = Math.ceil,\r\n abs = Math.abs;\r\n\r\n function approximatelyEqual(x, y, epsilon) {\r\n return abs(x - y) < epsilon;\r\n }\r\n\r\n function between(number, x, y, exclusive) {\r\n var minimum = min(x, y);\r\n var maximum = max(x, y);\r\n return exclusive ? minimum < number && number < maximum : minimum <= number && number <= maximum;\r\n }\r\n\r\n function clamp(number, x, y) {\r\n var minimum = min(x, y);\r\n var maximum = max(x, y);\r\n return min(max(minimum, number), maximum);\r\n }\r\n\r\n function sign(x) {\r\n return +(x > 0) - +(x < 0);\r\n }\r\n\r\n function format(string, replacements) {\r\n forEach(replacements, function (replacement) {\r\n string = string.replace(\"%s\", \"\" + replacement);\r\n });\r\n return string;\r\n }\r\n\r\n function pad(number) {\r\n return number < 10 ? \"0\" + number : \"\" + number;\r\n }\r\n\r\n var ids = {};\r\n\r\n function uniqueId(prefix) {\r\n return \"\" + prefix + pad(ids[prefix] = (ids[prefix] || 0) + 1);\r\n }\r\n\r\n function EventBinder() {\r\n var listeners = [];\r\n\r\n function bind(targets, events, callback, options) {\r\n forEachEvent(targets, events, function (target, event, namespace) {\r\n var isEventTarget = (\"addEventListener\" in target);\r\n var remover = isEventTarget ? target.removeEventListener.bind(target, event, callback, options) : target[\"removeListener\"].bind(target, callback);\r\n isEventTarget ? target.addEventListener(event, callback, options) : target[\"addListener\"](callback);\r\n listeners.push([target, event, namespace, callback, remover]);\r\n });\r\n }\r\n\r\n function unbind(targets, events, callback) {\r\n forEachEvent(targets, events, function (target, event, namespace) {\r\n listeners = listeners.filter(function (listener) {\r\n if (listener[0] === target && listener[1] === event && listener[2] === namespace && (!callback || listener[3] === callback)) {\r\n listener[4]();\r\n return false;\r\n }\r\n\r\n return true;\r\n });\r\n });\r\n }\r\n\r\n function dispatch(target, type, detail) {\r\n var e;\r\n var bubbles = true;\r\n\r\n if (typeof CustomEvent === \"function\") {\r\n e = new CustomEvent(type, {\r\n bubbles: bubbles,\r\n detail: detail\r\n });\r\n } else {\r\n e = document.createEvent(\"CustomEvent\");\r\n e.initCustomEvent(type, bubbles, false, detail);\r\n }\r\n\r\n target.dispatchEvent(e);\r\n return e;\r\n }\r\n\r\n function forEachEvent(targets, events, iteratee) {\r\n forEach(targets, function (target) {\r\n target && forEach(events, function (events2) {\r\n events2.split(\" \").forEach(function (eventNS) {\r\n var fragment = eventNS.split(\".\");\r\n iteratee(target, fragment[0], fragment[1]);\r\n });\r\n });\r\n });\r\n }\r\n\r\n function destroy() {\r\n listeners.forEach(function (data) {\r\n data[4]();\r\n });\r\n empty(listeners);\r\n }\r\n\r\n return {\r\n bind: bind,\r\n unbind: unbind,\r\n dispatch: dispatch,\r\n destroy: destroy\r\n };\r\n }\r\n\r\n var EVENT_MOUNTED = \"mounted\";\r\n var EVENT_READY = \"ready\";\r\n var EVENT_MOVE = \"move\";\r\n var EVENT_MOVED = \"moved\";\r\n var EVENT_CLICK = \"click\";\r\n var EVENT_ACTIVE = \"active\";\r\n var EVENT_INACTIVE = \"inactive\";\r\n var EVENT_VISIBLE = \"visible\";\r\n var EVENT_HIDDEN = \"hidden\";\r\n var EVENT_REFRESH = \"refresh\";\r\n var EVENT_UPDATED = \"updated\";\r\n var EVENT_RESIZE = \"resize\";\r\n var EVENT_RESIZED = \"resized\";\r\n var EVENT_DRAG = \"drag\";\r\n var EVENT_DRAGGING = \"dragging\";\r\n var EVENT_DRAGGED = \"dragged\";\r\n var EVENT_SCROLL = \"scroll\";\r\n var EVENT_SCROLLED = \"scrolled\";\r\n var EVENT_OVERFLOW = \"overflow\";\r\n var EVENT_DESTROY = \"destroy\";\r\n var EVENT_ARROWS_MOUNTED = \"arrows:mounted\";\r\n var EVENT_ARROWS_UPDATED = \"arrows:updated\";\r\n var EVENT_PAGINATION_MOUNTED = \"pagination:mounted\";\r\n var EVENT_PAGINATION_UPDATED = \"pagination:updated\";\r\n var EVENT_NAVIGATION_MOUNTED = \"navigation:mounted\";\r\n var EVENT_AUTOPLAY_PLAY = \"autoplay:play\";\r\n var EVENT_AUTOPLAY_PLAYING = \"autoplay:playing\";\r\n var EVENT_AUTOPLAY_PAUSE = \"autoplay:pause\";\r\n var EVENT_LAZYLOAD_LOADED = \"lazyload:loaded\";\r\n var EVENT_SLIDE_KEYDOWN = \"sk\";\r\n var EVENT_SHIFTED = \"sh\";\r\n var EVENT_END_INDEX_CHANGED = \"ei\";\r\n\r\n function EventInterface(Splide2) {\r\n var bus = Splide2 ? Splide2.event.bus : document.createDocumentFragment();\r\n var binder = EventBinder();\r\n\r\n function on(events, callback) {\r\n binder.bind(bus, toArray(events).join(\" \"), function (e) {\r\n callback.apply(callback, isArray(e.detail) ? e.detail : []);\r\n });\r\n }\r\n\r\n function emit(event) {\r\n binder.dispatch(bus, event, slice(arguments, 1));\r\n }\r\n\r\n if (Splide2) {\r\n Splide2.event.on(EVENT_DESTROY, binder.destroy);\r\n }\r\n\r\n return assign(binder, {\r\n bus: bus,\r\n on: on,\r\n off: apply(binder.unbind, bus),\r\n emit: emit\r\n });\r\n }\r\n\r\n function RequestInterval(interval, onInterval, onUpdate, limit) {\r\n var now = Date.now;\r\n var startTime;\r\n var rate = 0;\r\n var id;\r\n var paused = true;\r\n var count = 0;\r\n\r\n function update() {\r\n if (!paused) {\r\n rate = interval ? min((now() - startTime) / interval, 1) : 1;\r\n onUpdate && onUpdate(rate);\r\n\r\n if (rate >= 1) {\r\n onInterval();\r\n startTime = now();\r\n\r\n if (limit && ++count >= limit) {\r\n return pause();\r\n }\r\n }\r\n\r\n id = raf(update);\r\n }\r\n }\r\n\r\n function start(resume) {\r\n resume || cancel();\r\n startTime = now() - (resume ? rate * interval : 0);\r\n paused = false;\r\n id = raf(update);\r\n }\r\n\r\n function pause() {\r\n paused = true;\r\n }\r\n\r\n function rewind() {\r\n startTime = now();\r\n rate = 0;\r\n\r\n if (onUpdate) {\r\n onUpdate(rate);\r\n }\r\n }\r\n\r\n function cancel() {\r\n id && cancelAnimationFrame(id);\r\n rate = 0;\r\n id = 0;\r\n paused = true;\r\n }\r\n\r\n function set(time) {\r\n interval = time;\r\n }\r\n\r\n function isPaused() {\r\n return paused;\r\n }\r\n\r\n return {\r\n start: start,\r\n rewind: rewind,\r\n pause: pause,\r\n cancel: cancel,\r\n set: set,\r\n isPaused: isPaused\r\n };\r\n }\r\n\r\n function State(initialState) {\r\n var state = initialState;\r\n\r\n function set(value) {\r\n state = value;\r\n }\r\n\r\n function is(states) {\r\n return includes(toArray(states), state);\r\n }\r\n\r\n return {\r\n set: set,\r\n is: is\r\n };\r\n }\r\n\r\n function Throttle(func, duration) {\r\n var interval = RequestInterval(duration || 0, func, null, 1);\r\n return function () {\r\n interval.isPaused() && interval.start();\r\n };\r\n }\r\n\r\n function Media(Splide2, Components2, options) {\r\n var state = Splide2.state;\r\n var breakpoints = options.breakpoints || {};\r\n var reducedMotion = options.reducedMotion || {};\r\n var binder = EventBinder();\r\n var queries = [];\r\n\r\n function setup() {\r\n var isMin = options.mediaQuery === \"min\";\r\n ownKeys(breakpoints).sort(function (n, m) {\r\n return isMin ? +n - +m : +m - +n;\r\n }).forEach(function (key) {\r\n register(breakpoints[key], \"(\" + (isMin ? \"min\" : \"max\") + \"-width:\" + key + \"px)\");\r\n });\r\n register(reducedMotion, MEDIA_PREFERS_REDUCED_MOTION);\r\n update();\r\n }\r\n\r\n function destroy(completely) {\r\n if (completely) {\r\n binder.destroy();\r\n }\r\n }\r\n\r\n function register(options2, query) {\r\n var queryList = matchMedia(query);\r\n binder.bind(queryList, \"change\", update);\r\n queries.push([options2, queryList]);\r\n }\r\n\r\n function update() {\r\n var destroyed = state.is(DESTROYED);\r\n var direction = options.direction;\r\n var merged = queries.reduce(function (merged2, entry) {\r\n return merge(merged2, entry[1].matches ? entry[0] : {});\r\n }, {});\r\n omit(options);\r\n set(merged);\r\n\r\n if (options.destroy) {\r\n Splide2.destroy(options.destroy === \"completely\");\r\n } else if (destroyed) {\r\n destroy(true);\r\n Splide2.mount();\r\n } else {\r\n direction !== options.direction && Splide2.refresh();\r\n }\r\n }\r\n\r\n function reduce(enable) {\r\n if (matchMedia(MEDIA_PREFERS_REDUCED_MOTION).matches) {\r\n enable ? merge(options, reducedMotion) : omit(options, ownKeys(reducedMotion));\r\n }\r\n }\r\n\r\n function set(opts, base, notify) {\r\n merge(options, opts);\r\n base && merge(Object.getPrototypeOf(options), opts);\r\n\r\n if (notify || !state.is(CREATED)) {\r\n Splide2.emit(EVENT_UPDATED, options);\r\n }\r\n }\r\n\r\n return {\r\n setup: setup,\r\n destroy: destroy,\r\n reduce: reduce,\r\n set: set\r\n };\r\n }\r\n\r\n var ARROW = \"Arrow\";\r\n var ARROW_LEFT = ARROW + \"Left\";\r\n var ARROW_RIGHT = ARROW + \"Right\";\r\n var ARROW_UP = ARROW + \"Up\";\r\n var ARROW_DOWN = ARROW + \"Down\";\r\n var RTL = \"rtl\";\r\n var TTB = \"ttb\";\r\n var ORIENTATION_MAP = {\r\n width: [\"height\"],\r\n left: [\"top\", \"right\"],\r\n right: [\"bottom\", \"left\"],\r\n x: [\"y\"],\r\n X: [\"Y\"],\r\n Y: [\"X\"],\r\n ArrowLeft: [ARROW_UP, ARROW_RIGHT],\r\n ArrowRight: [ARROW_DOWN, ARROW_LEFT]\r\n };\r\n\r\n function Direction(Splide2, Components2, options) {\r\n function resolve(prop, axisOnly, direction) {\r\n direction = direction || options.direction;\r\n var index = direction === RTL && !axisOnly ? 1 : direction === TTB ? 0 : -1;\r\n return ORIENTATION_MAP[prop] && ORIENTATION_MAP[prop][index] || prop.replace(/width|left|right/i, function (match, offset) {\r\n var replacement = ORIENTATION_MAP[match.toLowerCase()][index] || match;\r\n return offset > 0 ? replacement.charAt(0).toUpperCase() + replacement.slice(1) : replacement;\r\n });\r\n }\r\n\r\n function orient(value) {\r\n return value * (options.direction === RTL ? 1 : -1);\r\n }\r\n\r\n return {\r\n resolve: resolve,\r\n orient: orient\r\n };\r\n }\r\n\r\n var ROLE = \"role\";\r\n var TAB_INDEX = \"tabindex\";\r\n var DISABLED = \"disabled\";\r\n var ARIA_PREFIX = \"aria-\";\r\n var ARIA_CONTROLS = ARIA_PREFIX + \"controls\";\r\n var ARIA_CURRENT = ARIA_PREFIX + \"current\";\r\n var ARIA_SELECTED = ARIA_PREFIX + \"selected\";\r\n var ARIA_LABEL = ARIA_PREFIX + \"label\";\r\n var ARIA_LABELLEDBY = ARIA_PREFIX + \"labelledby\";\r\n var ARIA_HIDDEN = ARIA_PREFIX + \"hidden\";\r\n var ARIA_ORIENTATION = ARIA_PREFIX + \"orientation\";\r\n var ARIA_ROLEDESCRIPTION = ARIA_PREFIX + \"roledescription\";\r\n var ARIA_LIVE = ARIA_PREFIX + \"live\";\r\n var ARIA_BUSY = ARIA_PREFIX + \"busy\";\r\n var ARIA_ATOMIC = ARIA_PREFIX + \"atomic\";\r\n var ALL_ATTRIBUTES = [ROLE, TAB_INDEX, DISABLED, ARIA_CONTROLS, ARIA_CURRENT, ARIA_LABEL, ARIA_LABELLEDBY, ARIA_HIDDEN, ARIA_ORIENTATION, ARIA_ROLEDESCRIPTION];\r\n var CLASS_PREFIX = PROJECT_CODE + \"__\";\r\n var STATUS_CLASS_PREFIX = \"is-\";\r\n var CLASS_ROOT = PROJECT_CODE;\r\n var CLASS_TRACK = CLASS_PREFIX + \"track\";\r\n var CLASS_LIST = CLASS_PREFIX + \"list\";\r\n var CLASS_SLIDE = CLASS_PREFIX + \"slide\";\r\n var CLASS_CLONE = CLASS_SLIDE + \"--clone\";\r\n var CLASS_CONTAINER = CLASS_SLIDE + \"__container\";\r\n var CLASS_ARROWS = CLASS_PREFIX + \"arrows\";\r\n var CLASS_ARROW = CLASS_PREFIX + \"arrow\";\r\n var CLASS_ARROW_PREV = CLASS_ARROW + \"--prev\";\r\n var CLASS_ARROW_NEXT = CLASS_ARROW + \"--next\";\r\n var CLASS_PAGINATION = CLASS_PREFIX + \"pagination\";\r\n var CLASS_PAGINATION_PAGE = CLASS_PAGINATION + \"__page\";\r\n var CLASS_PROGRESS = CLASS_PREFIX + \"progress\";\r\n var CLASS_PROGRESS_BAR = CLASS_PROGRESS + \"__bar\";\r\n var CLASS_TOGGLE = CLASS_PREFIX + \"toggle\";\r\n var CLASS_SPINNER = CLASS_PREFIX + \"spinner\";\r\n var CLASS_SR = CLASS_PREFIX + \"sr\";\r\n var CLASS_INITIALIZED = STATUS_CLASS_PREFIX + \"initialized\";\r\n var CLASS_ACTIVE = STATUS_CLASS_PREFIX + \"active\";\r\n var CLASS_PREV = STATUS_CLASS_PREFIX + \"prev\";\r\n var CLASS_NEXT = STATUS_CLASS_PREFIX + \"next\";\r\n var CLASS_VISIBLE = STATUS_CLASS_PREFIX + \"visible\";\r\n var CLASS_LOADING = STATUS_CLASS_PREFIX + \"loading\";\r\n var CLASS_FOCUS_IN = STATUS_CLASS_PREFIX + \"focus-in\";\r\n var CLASS_OVERFLOW = STATUS_CLASS_PREFIX + \"overflow\";\r\n var STATUS_CLASSES = [CLASS_ACTIVE, CLASS_VISIBLE, CLASS_PREV, CLASS_NEXT, CLASS_LOADING, CLASS_FOCUS_IN, CLASS_OVERFLOW];\r\n var CLASSES = {\r\n slide: CLASS_SLIDE,\r\n clone: CLASS_CLONE,\r\n arrows: CLASS_ARROWS,\r\n arrow: CLASS_ARROW,\r\n prev: CLASS_ARROW_PREV,\r\n next: CLASS_ARROW_NEXT,\r\n pagination: CLASS_PAGINATION,\r\n page: CLASS_PAGINATION_PAGE,\r\n spinner: CLASS_SPINNER\r\n };\r\n\r\n function closest(from, selector) {\r\n if (isFunction(from.closest)) {\r\n return from.closest(selector);\r\n }\r\n\r\n var elm = from;\r\n\r\n while (elm && elm.nodeType === 1) {\r\n if (matches(elm, selector)) {\r\n break;\r\n }\r\n\r\n elm = elm.parentElement;\r\n }\r\n\r\n return elm;\r\n }\r\n\r\n var FRICTION = 5;\r\n var LOG_INTERVAL = 200;\r\n var POINTER_DOWN_EVENTS = \"touchstart mousedown\";\r\n var POINTER_MOVE_EVENTS = \"touchmove mousemove\";\r\n var POINTER_UP_EVENTS = \"touchend touchcancel mouseup click\";\r\n\r\n function Elements(Splide2, Components2, options) {\r\n var _EventInterface = EventInterface(Splide2),\r\n on = _EventInterface.on,\r\n bind = _EventInterface.bind;\r\n\r\n var root = Splide2.root;\r\n var i18n = options.i18n;\r\n var elements = {};\r\n var slides = [];\r\n var rootClasses = [];\r\n var trackClasses = [];\r\n var track;\r\n var list;\r\n var isUsingKey;\r\n\r\n function setup() {\r\n collect();\r\n init();\r\n update();\r\n }\r\n\r\n function mount() {\r\n on(EVENT_REFRESH, destroy);\r\n on(EVENT_REFRESH, setup);\r\n on(EVENT_UPDATED, update);\r\n bind(document, POINTER_DOWN_EVENTS + \" keydown\", function (e) {\r\n isUsingKey = e.type === \"keydown\";\r\n }, {\r\n capture: true\r\n });\r\n bind(root, \"focusin\", function () {\r\n toggleClass(root, CLASS_FOCUS_IN, !!isUsingKey);\r\n });\r\n }\r\n\r\n function destroy(completely) {\r\n var attrs = ALL_ATTRIBUTES.concat(\"style\");\r\n empty(slides);\r\n removeClass(root, rootClasses);\r\n removeClass(track, trackClasses);\r\n removeAttribute([track, list], attrs);\r\n removeAttribute(root, completely ? attrs : [\"style\", ARIA_ROLEDESCRIPTION]);\r\n }\r\n\r\n function update() {\r\n removeClass(root, rootClasses);\r\n removeClass(track, trackClasses);\r\n rootClasses = getClasses(CLASS_ROOT);\r\n trackClasses = getClasses(CLASS_TRACK);\r\n addClass(root, rootClasses);\r\n addClass(track, trackClasses);\r\n setAttribute(root, ARIA_LABEL, options.label);\r\n setAttribute(root, ARIA_LABELLEDBY, options.labelledby);\r\n }\r\n\r\n function collect() {\r\n track = find(\".\" + CLASS_TRACK);\r\n list = child(track, \".\" + CLASS_LIST);\r\n assert(track && list, \"A track/list element is missing.\");\r\n push(slides, children(list, \".\" + CLASS_SLIDE + \":not(.\" + CLASS_CLONE + \")\"));\r\n forOwn({\r\n arrows: CLASS_ARROWS,\r\n pagination: CLASS_PAGINATION,\r\n prev: CLASS_ARROW_PREV,\r\n next: CLASS_ARROW_NEXT,\r\n bar: CLASS_PROGRESS_BAR,\r\n toggle: CLASS_TOGGLE\r\n }, function (className, key) {\r\n elements[key] = find(\".\" + className);\r\n });\r\n assign(elements, {\r\n root: root,\r\n track: track,\r\n list: list,\r\n slides: slides\r\n });\r\n }\r\n\r\n function init() {\r\n var id = root.id || uniqueId(PROJECT_CODE);\r\n var role = options.role;\r\n root.id = id;\r\n track.id = track.id || id + \"-track\";\r\n list.id = list.id || id + \"-list\";\r\n\r\n if (!getAttribute(root, ROLE) && root.tagName !== \"SECTION\" && role) {\r\n setAttribute(root, ROLE, role);\r\n }\r\n\r\n setAttribute(root, ARIA_ROLEDESCRIPTION, i18n.carousel);\r\n setAttribute(list, ROLE, \"presentation\");\r\n }\r\n\r\n function find(selector) {\r\n var elm = query(root, selector);\r\n return elm && closest(elm, \".\" + CLASS_ROOT) === root ? elm : void 0;\r\n }\r\n\r\n function getClasses(base) {\r\n return [base + \"--\" + options.type, base + \"--\" + options.direction, options.drag && base + \"--draggable\", options.isNavigation && base + \"--nav\", base === CLASS_ROOT && CLASS_ACTIVE];\r\n }\r\n\r\n return assign(elements, {\r\n setup: setup,\r\n mount: mount,\r\n destroy: destroy\r\n });\r\n }\r\n\r\n var SLIDE = \"slide\";\r\n var LOOP = \"loop\";\r\n var FADE = \"fade\";\r\n\r\n function Slide$1(Splide2, index, slideIndex, slide) {\r\n var event = EventInterface(Splide2);\r\n var on = event.on,\r\n emit = event.emit,\r\n bind = event.bind;\r\n var Components = Splide2.Components,\r\n root = Splide2.root,\r\n options = Splide2.options;\r\n var isNavigation = options.isNavigation,\r\n updateOnMove = options.updateOnMove,\r\n i18n = options.i18n,\r\n pagination = options.pagination,\r\n slideFocus = options.slideFocus;\r\n var resolve = Components.Direction.resolve;\r\n var styles = getAttribute(slide, \"style\");\r\n var label = getAttribute(slide, ARIA_LABEL);\r\n var isClone = slideIndex > -1;\r\n var container = child(slide, \".\" + CLASS_CONTAINER);\r\n var destroyed;\r\n\r\n function mount() {\r\n if (!isClone) {\r\n slide.id = root.id + \"-slide\" + pad(index + 1);\r\n setAttribute(slide, ROLE, pagination ? \"tabpanel\" : \"group\");\r\n setAttribute(slide, ARIA_ROLEDESCRIPTION, i18n.slide);\r\n setAttribute(slide, ARIA_LABEL, label || format(i18n.slideLabel, [index + 1, Splide2.length]));\r\n }\r\n\r\n listen();\r\n }\r\n\r\n function listen() {\r\n bind(slide, \"click\", apply(emit, EVENT_CLICK, self));\r\n bind(slide, \"keydown\", apply(emit, EVENT_SLIDE_KEYDOWN, self));\r\n on([EVENT_MOVED, EVENT_SHIFTED, EVENT_SCROLLED], update);\r\n on(EVENT_NAVIGATION_MOUNTED, initNavigation);\r\n\r\n if (updateOnMove) {\r\n on(EVENT_MOVE, onMove);\r\n }\r\n }\r\n\r\n function destroy() {\r\n destroyed = true;\r\n event.destroy();\r\n removeClass(slide, STATUS_CLASSES);\r\n removeAttribute(slide, ALL_ATTRIBUTES);\r\n setAttribute(slide, \"style\", styles);\r\n setAttribute(slide, ARIA_LABEL, label || \"\");\r\n }\r\n\r\n function initNavigation() {\r\n var controls = Splide2.splides.map(function (target) {\r\n var Slide2 = target.splide.Components.Slides.getAt(index);\r\n return Slide2 ? Slide2.slide.id : \"\";\r\n }).join(\" \");\r\n setAttribute(slide, ARIA_LABEL, format(i18n.slideX, (isClone ? slideIndex : index) + 1));\r\n setAttribute(slide, ARIA_CONTROLS, controls);\r\n setAttribute(slide, ROLE, slideFocus ? \"button\" : \"\");\r\n slideFocus && removeAttribute(slide, ARIA_ROLEDESCRIPTION);\r\n }\r\n\r\n function onMove() {\r\n if (!destroyed) {\r\n update();\r\n }\r\n }\r\n\r\n function update() {\r\n if (!destroyed) {\r\n var curr = Splide2.index;\r\n updateActivity();\r\n updateVisibility();\r\n toggleClass(slide, CLASS_PREV, index === curr - 1);\r\n toggleClass(slide, CLASS_NEXT, index === curr + 1);\r\n }\r\n }\r\n\r\n function updateActivity() {\r\n var active = isActive();\r\n\r\n if (active !== hasClass(slide, CLASS_ACTIVE)) {\r\n toggleClass(slide, CLASS_ACTIVE, active);\r\n setAttribute(slide, ARIA_CURRENT, isNavigation && active || \"\");\r\n emit(active ? EVENT_ACTIVE : EVENT_INACTIVE, self);\r\n }\r\n }\r\n\r\n function updateVisibility() {\r\n var visible = isVisible();\r\n var hidden = !visible && (!isActive() || isClone);\r\n\r\n if (!Splide2.state.is([MOVING, SCROLLING])) {\r\n setAttribute(slide, ARIA_HIDDEN, hidden || \"\");\r\n }\r\n\r\n setAttribute(queryAll(slide, options.focusableNodes || \"\"), TAB_INDEX, hidden ? -1 : \"\");\r\n\r\n if (slideFocus) {\r\n setAttribute(slide, TAB_INDEX, hidden ? -1 : 0);\r\n }\r\n\r\n if (visible !== hasClass(slide, CLASS_VISIBLE)) {\r\n toggleClass(slide, CLASS_VISIBLE, visible);\r\n emit(visible ? EVENT_VISIBLE : EVENT_HIDDEN, self);\r\n }\r\n\r\n if (!visible && document.activeElement === slide) {\r\n var Slide2 = Components.Slides.getAt(Splide2.index);\r\n Slide2 && focus(Slide2.slide);\r\n }\r\n }\r\n\r\n function style$1(prop, value, useContainer) {\r\n style(useContainer && container || slide, prop, value);\r\n }\r\n\r\n function isActive() {\r\n var curr = Splide2.index;\r\n return curr === index || options.cloneStatus && curr === slideIndex;\r\n }\r\n\r\n function isVisible() {\r\n if (Splide2.is(FADE)) {\r\n return isActive();\r\n }\r\n\r\n var trackRect = rect(Components.Elements.track);\r\n var slideRect = rect(slide);\r\n var left = resolve(\"left\", true);\r\n var right = resolve(\"right\", true);\r\n return floor(trackRect[left]) <= ceil(slideRect[left]) && floor(slideRect[right]) <= ceil(trackRect[right]);\r\n }\r\n\r\n function isWithin(from, distance) {\r\n var diff = abs(from - index);\r\n\r\n if (!isClone && (options.rewind || Splide2.is(LOOP))) {\r\n diff = min(diff, Splide2.length - diff);\r\n }\r\n\r\n return diff <= distance;\r\n }\r\n\r\n var self = {\r\n index: index,\r\n slideIndex: slideIndex,\r\n slide: slide,\r\n container: container,\r\n isClone: isClone,\r\n mount: mount,\r\n destroy: destroy,\r\n update: update,\r\n style: style$1,\r\n isWithin: isWithin\r\n };\r\n return self;\r\n }\r\n\r\n function Slides(Splide2, Components2, options) {\r\n var _EventInterface2 = EventInterface(Splide2),\r\n on = _EventInterface2.on,\r\n emit = _EventInterface2.emit,\r\n bind = _EventInterface2.bind;\r\n\r\n var _Components2$Elements = Components2.Elements,\r\n slides = _Components2$Elements.slides,\r\n list = _Components2$Elements.list;\r\n var Slides2 = [];\r\n\r\n function mount() {\r\n init();\r\n on(EVENT_REFRESH, destroy);\r\n on(EVENT_REFRESH, init);\r\n }\r\n\r\n function init() {\r\n slides.forEach(function (slide, index) {\r\n register(slide, index, -1);\r\n });\r\n }\r\n\r\n function destroy() {\r\n forEach$1(function (Slide2) {\r\n Slide2.destroy();\r\n });\r\n empty(Slides2);\r\n }\r\n\r\n function update() {\r\n forEach$1(function (Slide2) {\r\n Slide2.update();\r\n });\r\n }\r\n\r\n function register(slide, index, slideIndex) {\r\n var object = Slide$1(Splide2, index, slideIndex, slide);\r\n object.mount();\r\n Slides2.push(object);\r\n Slides2.sort(function (Slide1, Slide2) {\r\n return Slide1.index - Slide2.index;\r\n });\r\n }\r\n\r\n function get(excludeClones) {\r\n return excludeClones ? filter(function (Slide2) {\r\n return !Slide2.isClone;\r\n }) : Slides2;\r\n }\r\n\r\n function getIn(page) {\r\n var Controller = Components2.Controller;\r\n var index = Controller.toIndex(page);\r\n var max = Controller.hasFocus() ? 1 : options.perPage;\r\n return filter(function (Slide2) {\r\n return between(Slide2.index, index, index + max - 1);\r\n });\r\n }\r\n\r\n function getAt(index) {\r\n return filter(index)[0];\r\n }\r\n\r\n function add(items, index) {\r\n forEach(items, function (slide) {\r\n if (isString(slide)) {\r\n slide = parseHtml(slide);\r\n }\r\n\r\n if (isHTMLElement(slide)) {\r\n var ref = slides[index];\r\n ref ? before(slide, ref) : append(list, slide);\r\n addClass(slide, options.classes.slide);\r\n observeImages(slide, apply(emit, EVENT_RESIZE));\r\n }\r\n });\r\n emit(EVENT_REFRESH);\r\n }\r\n\r\n function remove$1(matcher) {\r\n remove(filter(matcher).map(function (Slide2) {\r\n return Slide2.slide;\r\n }));\r\n emit(EVENT_REFRESH);\r\n }\r\n\r\n function forEach$1(iteratee, excludeClones) {\r\n get(excludeClones).forEach(iteratee);\r\n }\r\n\r\n function filter(matcher) {\r\n return Slides2.filter(isFunction(matcher) ? matcher : function (Slide2) {\r\n return isString(matcher) ? matches(Slide2.slide, matcher) : includes(toArray(matcher), Slide2.index);\r\n });\r\n }\r\n\r\n function style(prop, value, useContainer) {\r\n forEach$1(function (Slide2) {\r\n Slide2.style(prop, value, useContainer);\r\n });\r\n }\r\n\r\n function observeImages(elm, callback) {\r\n var images = queryAll(elm, \"img\");\r\n var length = images.length;\r\n\r\n if (length) {\r\n images.forEach(function (img) {\r\n bind(img, \"load error\", function () {\r\n if (! --length) {\r\n callback();\r\n }\r\n });\r\n });\r\n } else {\r\n callback();\r\n }\r\n }\r\n\r\n function getLength(excludeClones) {\r\n return excludeClones ? slides.length : Slides2.length;\r\n }\r\n\r\n function isEnough() {\r\n return Slides2.length > options.perPage;\r\n }\r\n\r\n return {\r\n mount: mount,\r\n destroy: destroy,\r\n update: update,\r\n register: register,\r\n get: get,\r\n getIn: getIn,\r\n getAt: getAt,\r\n add: add,\r\n remove: remove$1,\r\n forEach: forEach$1,\r\n filter: filter,\r\n style: style,\r\n getLength: getLength,\r\n isEnough: isEnough\r\n };\r\n }\r\n\r\n function Layout(Splide2, Components2, options) {\r\n var _EventInterface3 = EventInterface(Splide2),\r\n on = _EventInterface3.on,\r\n bind = _EventInterface3.bind,\r\n emit = _EventInterface3.emit;\r\n\r\n var Slides = Components2.Slides;\r\n var resolve = Components2.Direction.resolve;\r\n var _Components2$Elements2 = Components2.Elements,\r\n root = _Components2$Elements2.root,\r\n track = _Components2$Elements2.track,\r\n list = _Components2$Elements2.list;\r\n var getAt = Slides.getAt,\r\n styleSlides = Slides.style;\r\n var vertical;\r\n var rootRect;\r\n var overflow;\r\n\r\n function mount() {\r\n init();\r\n bind(window, \"resize load\", Throttle(apply(emit, EVENT_RESIZE)));\r\n on([EVENT_UPDATED, EVENT_REFRESH], init);\r\n on(EVENT_RESIZE, resize);\r\n }\r\n\r\n function init() {\r\n vertical = options.direction === TTB;\r\n style(root, \"maxWidth\", unit(options.width));\r\n style(track, resolve(\"paddingLeft\"), cssPadding(false));\r\n style(track, resolve(\"paddingRight\"), cssPadding(true));\r\n resize(true);\r\n }\r\n\r\n function resize(force) {\r\n var newRect = rect(root);\r\n\r\n if (force || rootRect.width !== newRect.width || rootRect.height !== newRect.height) {\r\n style(track, \"height\", cssTrackHeight());\r\n styleSlides(resolve(\"marginRight\"), unit(options.gap));\r\n styleSlides(\"width\", cssSlideWidth());\r\n styleSlides(\"height\", cssSlideHeight(), true);\r\n rootRect = newRect;\r\n emit(EVENT_RESIZED);\r\n\r\n if (overflow !== (overflow = isOverflow())) {\r\n toggleClass(root, CLASS_OVERFLOW, overflow);\r\n emit(EVENT_OVERFLOW, overflow);\r\n }\r\n }\r\n }\r\n\r\n function cssPadding(right) {\r\n var padding = options.padding;\r\n var prop = resolve(right ? \"right\" : \"left\");\r\n return padding && unit(padding[prop] || (isObject(padding) ? 0 : padding)) || \"0px\";\r\n }\r\n\r\n function cssTrackHeight() {\r\n var height = \"\";\r\n\r\n if (vertical) {\r\n height = cssHeight();\r\n assert(height, \"height or heightRatio is missing.\");\r\n height = \"calc(\" + height + \" - \" + cssPadding(false) + \" - \" + cssPadding(true) + \")\";\r\n }\r\n\r\n return height;\r\n }\r\n\r\n function cssHeight() {\r\n return unit(options.height || rect(list).width * options.heightRatio);\r\n }\r\n\r\n function cssSlideWidth() {\r\n return options.autoWidth ? null : unit(options.fixedWidth) || (vertical ? \"\" : cssSlideSize());\r\n }\r\n\r\n function cssSlideHeight() {\r\n return unit(options.fixedHeight) || (vertical ? options.autoHeight ? null : cssSlideSize() : cssHeight());\r\n }\r\n\r\n function cssSlideSize() {\r\n var gap = unit(options.gap);\r\n return \"calc((100%\" + (gap && \" + \" + gap) + \")/\" + (options.perPage || 1) + (gap && \" - \" + gap) + \")\";\r\n }\r\n\r\n function listSize() {\r\n return rect(list)[resolve(\"width\")];\r\n }\r\n\r\n function slideSize(index, withoutGap) {\r\n var Slide = getAt(index || 0);\r\n return Slide ? rect(Slide.slide)[resolve(\"width\")] + (withoutGap ? 0 : getGap()) : 0;\r\n }\r\n\r\n function totalSize(index, withoutGap) {\r\n var Slide = getAt(index);\r\n\r\n if (Slide) {\r\n var right = rect(Slide.slide)[resolve(\"right\")];\r\n var left = rect(list)[resolve(\"left\")];\r\n return abs(right - left) + (withoutGap ? 0 : getGap());\r\n }\r\n\r\n return 0;\r\n }\r\n\r\n function sliderSize(withoutGap) {\r\n return totalSize(Splide2.length - 1) - totalSize(0) + slideSize(0, withoutGap);\r\n }\r\n\r\n function getGap() {\r\n var Slide = getAt(0);\r\n return Slide && parseFloat(style(Slide.slide, resolve(\"marginRight\"))) || 0;\r\n }\r\n\r\n function getPadding(right) {\r\n return parseFloat(style(track, resolve(\"padding\" + (right ? \"Right\" : \"Left\")))) || 0;\r\n }\r\n\r\n function isOverflow() {\r\n return Splide2.is(FADE) || sliderSize(true) > listSize();\r\n }\r\n\r\n return {\r\n mount: mount,\r\n resize: resize,\r\n listSize: listSize,\r\n slideSize: slideSize,\r\n sliderSize: sliderSize,\r\n totalSize: totalSize,\r\n getPadding: getPadding,\r\n isOverflow: isOverflow\r\n };\r\n }\r\n\r\n var MULTIPLIER = 2;\r\n\r\n function Clones(Splide2, Components2, options) {\r\n var event = EventInterface(Splide2);\r\n var on = event.on;\r\n var Elements = Components2.Elements,\r\n Slides = Components2.Slides;\r\n var resolve = Components2.Direction.resolve;\r\n var clones = [];\r\n var cloneCount;\r\n\r\n function mount() {\r\n on(EVENT_REFRESH, remount);\r\n on([EVENT_UPDATED, EVENT_RESIZE], observe);\r\n\r\n if (cloneCount = computeCloneCount()) {\r\n generate(cloneCount);\r\n Components2.Layout.resize(true);\r\n }\r\n }\r\n\r\n function remount() {\r\n destroy();\r\n mount();\r\n }\r\n\r\n function destroy() {\r\n remove(clones);\r\n empty(clones);\r\n event.destroy();\r\n }\r\n\r\n function observe() {\r\n var count = computeCloneCount();\r\n\r\n if (cloneCount !== count) {\r\n if (cloneCount < count || !count) {\r\n event.emit(EVENT_REFRESH);\r\n }\r\n }\r\n }\r\n\r\n function generate(count) {\r\n var slides = Slides.get().slice();\r\n var length = slides.length;\r\n\r\n if (length) {\r\n while (slides.length < count) {\r\n push(slides, slides);\r\n }\r\n\r\n push(slides.slice(-count), slides.slice(0, count)).forEach(function (Slide, index) {\r\n var isHead = index < count;\r\n var clone = cloneDeep(Slide.slide, index);\r\n isHead ? before(clone, slides[0].slide) : append(Elements.list, clone);\r\n push(clones, clone);\r\n Slides.register(clone, index - count + (isHead ? 0 : length), Slide.index);\r\n });\r\n }\r\n }\r\n\r\n function cloneDeep(elm, index) {\r\n var clone = elm.cloneNode(true);\r\n addClass(clone, options.classes.clone);\r\n clone.id = Splide2.root.id + \"-clone\" + pad(index + 1);\r\n return clone;\r\n }\r\n\r\n function computeCloneCount() {\r\n var clones2 = options.clones;\r\n\r\n if (!Splide2.is(LOOP)) {\r\n clones2 = 0;\r\n } else if (isUndefined(clones2)) {\r\n var fixedSize = options[resolve(\"fixedWidth\")] && Components2.Layout.slideSize(0);\r\n var fixedCount = fixedSize && ceil(rect(Elements.track)[resolve(\"width\")] / fixedSize);\r\n clones2 = fixedCount || options[resolve(\"autoWidth\")] && Splide2.length || options.perPage * MULTIPLIER;\r\n }\r\n\r\n return clones2;\r\n }\r\n\r\n return {\r\n mount: mount,\r\n destroy: destroy\r\n };\r\n }\r\n\r\n function Move(Splide2, Components2, options) {\r\n var _EventInterface4 = EventInterface(Splide2),\r\n on = _EventInterface4.on,\r\n emit = _EventInterface4.emit;\r\n\r\n var set = Splide2.state.set;\r\n var _Components2$Layout = Components2.Layout,\r\n slideSize = _Components2$Layout.slideSize,\r\n getPadding = _Components2$Layout.getPadding,\r\n totalSize = _Components2$Layout.totalSize,\r\n listSize = _Components2$Layout.listSize,\r\n sliderSize = _Components2$Layout.sliderSize;\r\n var _Components2$Directio = Components2.Direction,\r\n resolve = _Components2$Directio.resolve,\r\n orient = _Components2$Directio.orient;\r\n var _Components2$Elements3 = Components2.Elements,\r\n list = _Components2$Elements3.list,\r\n track = _Components2$Elements3.track;\r\n var Transition;\r\n\r\n function mount() {\r\n Transition = Components2.Transition;\r\n on([EVENT_MOUNTED, EVENT_RESIZED, EVENT_UPDATED, EVENT_REFRESH], reposition);\r\n }\r\n\r\n function reposition() {\r\n if (!Components2.Controller.isBusy()) {\r\n Components2.Scroll.cancel();\r\n jump(Splide2.index);\r\n Components2.Slides.update();\r\n }\r\n }\r\n\r\n function move(dest, index, prev, callback) {\r\n if (dest !== index && canShift(dest > prev)) {\r\n cancel();\r\n translate(shift(getPosition(), dest > prev), true);\r\n }\r\n\r\n set(MOVING);\r\n emit(EVENT_MOVE, index, prev, dest);\r\n Transition.start(index, function () {\r\n set(IDLE);\r\n emit(EVENT_MOVED, index, prev, dest);\r\n callback && callback();\r\n });\r\n }\r\n\r\n function jump(index) {\r\n translate(toPosition(index, true));\r\n }\r\n\r\n function translate(position, preventLoop) {\r\n if (!Splide2.is(FADE)) {\r\n var destination = preventLoop ? position : loop(position);\r\n style(list, \"transform\", \"translate\" + resolve(\"X\") + \"(\" + destination + \"px)\");\r\n position !== destination && emit(EVENT_SHIFTED);\r\n }\r\n }\r\n\r\n function loop(position) {\r\n if (Splide2.is(LOOP)) {\r\n var index = toIndex(position);\r\n var exceededMax = index > Components2.Controller.getEnd();\r\n var exceededMin = index < 0;\r\n\r\n if (exceededMin || exceededMax) {\r\n position = shift(position, exceededMax);\r\n }\r\n }\r\n\r\n return position;\r\n }\r\n\r\n function shift(position, backwards) {\r\n var excess = position - getLimit(backwards);\r\n var size = sliderSize();\r\n position -= orient(size * (ceil(abs(excess) / size) || 1)) * (backwards ? 1 : -1);\r\n return position;\r\n }\r\n\r\n function cancel() {\r\n translate(getPosition(), true);\r\n Transition.cancel();\r\n }\r\n\r\n function toIndex(position) {\r\n var Slides = Components2.Slides.get();\r\n var index = 0;\r\n var minDistance = Infinity;\r\n\r\n for (var i = 0; i < Slides.length; i++) {\r\n var slideIndex = Slides[i].index;\r\n var distance = abs(toPosition(slideIndex, true) - position);\r\n\r\n if (distance <= minDistance) {\r\n minDistance = distance;\r\n index = slideIndex;\r\n } else {\r\n break;\r\n }\r\n }\r\n\r\n return index;\r\n }\r\n\r\n function toPosition(index, trimming) {\r\n var position = orient(totalSize(index - 1) - offset(index));\r\n return trimming ? trim(position) : position;\r\n }\r\n\r\n function getPosition() {\r\n var left = resolve(\"left\");\r\n return rect(list)[left] - rect(track)[left] + orient(getPadding(false));\r\n }\r\n\r\n function trim(position) {\r\n if (options.trimSpace && Splide2.is(SLIDE)) {\r\n position = clamp(position, 0, orient(sliderSize(true) - listSize()));\r\n }\r\n\r\n return position;\r\n }\r\n\r\n function offset(index) {\r\n var focus = options.focus;\r\n return focus === \"center\" ? (listSize() - slideSize(index, true)) / 2 : +focus * slideSize(index) || 0;\r\n }\r\n\r\n function getLimit(max) {\r\n return toPosition(max ? Components2.Controller.getEnd() : 0, !!options.trimSpace);\r\n }\r\n\r\n function canShift(backwards) {\r\n var shifted = orient(shift(getPosition(), backwards));\r\n return backwards ? shifted >= 0 : shifted <= list[resolve(\"scrollWidth\")] - rect(track)[resolve(\"width\")];\r\n }\r\n\r\n function exceededLimit(max, position) {\r\n position = isUndefined(position) ? getPosition() : position;\r\n var exceededMin = max !== true && orient(position) < orient(getLimit(false));\r\n var exceededMax = max !== false && orient(position) > orient(getLimit(true));\r\n return exceededMin || exceededMax;\r\n }\r\n\r\n return {\r\n mount: mount,\r\n move: move,\r\n jump: jump,\r\n translate: translate,\r\n shift: shift,\r\n cancel: cancel,\r\n toIndex: toIndex,\r\n toPosition: toPosition,\r\n getPosition: getPosition,\r\n getLimit: getLimit,\r\n exceededLimit: exceededLimit,\r\n reposition: reposition\r\n };\r\n }\r\n\r\n function Controller(Splide2, Components2, options) {\r\n var _EventInterface5 = EventInterface(Splide2),\r\n on = _EventInterface5.on,\r\n emit = _EventInterface5.emit;\r\n\r\n var Move = Components2.Move;\r\n var getPosition = Move.getPosition,\r\n getLimit = Move.getLimit,\r\n toPosition = Move.toPosition;\r\n var _Components2$Slides = Components2.Slides,\r\n isEnough = _Components2$Slides.isEnough,\r\n getLength = _Components2$Slides.getLength;\r\n var omitEnd = options.omitEnd;\r\n var isLoop = Splide2.is(LOOP);\r\n var isSlide = Splide2.is(SLIDE);\r\n var getNext = apply(getAdjacent, false);\r\n var getPrev = apply(getAdjacent, true);\r\n var currIndex = options.start || 0;\r\n var endIndex;\r\n var prevIndex = currIndex;\r\n var slideCount;\r\n var perMove;\r\n var perPage;\r\n\r\n function mount() {\r\n init();\r\n on([EVENT_UPDATED, EVENT_REFRESH, EVENT_END_INDEX_CHANGED], init);\r\n on(EVENT_RESIZED, onResized);\r\n }\r\n\r\n function init() {\r\n slideCount = getLength(true);\r\n perMove = options.perMove;\r\n perPage = options.perPage;\r\n endIndex = getEnd();\r\n var index = clamp(currIndex, 0, omitEnd ? endIndex : slideCount - 1);\r\n\r\n if (index !== currIndex) {\r\n currIndex = index;\r\n Move.reposition();\r\n }\r\n }\r\n\r\n function onResized() {\r\n if (endIndex !== getEnd()) {\r\n emit(EVENT_END_INDEX_CHANGED);\r\n }\r\n }\r\n\r\n function go(control, allowSameIndex, callback) {\r\n if (!isBusy()) {\r\n var dest = parse(control);\r\n var index = loop(dest);\r\n\r\n if (index > -1 && (allowSameIndex || index !== currIndex)) {\r\n setIndex(index);\r\n Move.move(dest, index, prevIndex, callback);\r\n }\r\n }\r\n }\r\n\r\n function scroll(destination, duration, snap, callback) {\r\n Components2.Scroll.scroll(destination, duration, snap, function () {\r\n var index = loop(Move.toIndex(getPosition()));\r\n setIndex(omitEnd ? min(index, endIndex) : index);\r\n callback && callback();\r\n });\r\n }\r\n\r\n function parse(control) {\r\n var index = currIndex;\r\n\r\n if (isString(control)) {\r\n var _ref = control.match(/([+\\-<>])(\\d+)?/) || [],\r\n indicator = _ref[1],\r\n number = _ref[2];\r\n\r\n if (indicator === \"+\" || indicator === \"-\") {\r\n index = computeDestIndex(currIndex + +(\"\" + indicator + (+number || 1)), currIndex);\r\n } else if (indicator === \">\") {\r\n index = number ? toIndex(+number) : getNext(true);\r\n } else if (indicator === \"<\") {\r\n index = getPrev(true);\r\n }\r\n } else {\r\n index = isLoop ? control : clamp(control, 0, endIndex);\r\n }\r\n\r\n return index;\r\n }\r\n\r\n function getAdjacent(prev, destination) {\r\n var number = perMove || (hasFocus() ? 1 : perPage);\r\n var dest = computeDestIndex(currIndex + number * (prev ? -1 : 1), currIndex, !(perMove || hasFocus()));\r\n\r\n if (dest === -1 && isSlide) {\r\n if (!approximatelyEqual(getPosition(), getLimit(!prev), 1)) {\r\n return prev ? 0 : endIndex;\r\n }\r\n }\r\n\r\n return destination ? dest : loop(dest);\r\n }\r\n\r\n function computeDestIndex(dest, from, snapPage) {\r\n if (isEnough() || hasFocus()) {\r\n var index = computeMovableDestIndex(dest);\r\n\r\n if (index !== dest) {\r\n from = dest;\r\n dest = index;\r\n snapPage = false;\r\n }\r\n\r\n if (dest < 0 || dest > endIndex) {\r\n if (!perMove && (between(0, dest, from, true) || between(endIndex, from, dest, true))) {\r\n dest = toIndex(toPage(dest));\r\n } else {\r\n if (isLoop) {\r\n dest = snapPage ? dest < 0 ? -(slideCount % perPage || perPage) : slideCount : dest;\r\n } else if (options.rewind) {\r\n dest = dest < 0 ? endIndex : 0;\r\n } else {\r\n dest = -1;\r\n }\r\n }\r\n } else {\r\n if (snapPage && dest !== from) {\r\n dest = toIndex(toPage(from) + (dest < from ? -1 : 1));\r\n }\r\n }\r\n } else {\r\n dest = -1;\r\n }\r\n\r\n return dest;\r\n }\r\n\r\n function computeMovableDestIndex(dest) {\r\n if (isSlide && options.trimSpace === \"move\" && dest !== currIndex) {\r\n var position = getPosition();\r\n\r\n while (position === toPosition(dest, true) && between(dest, 0, Splide2.length - 1, !options.rewind)) {\r\n dest < currIndex ? --dest : ++dest;\r\n }\r\n }\r\n\r\n return dest;\r\n }\r\n\r\n function loop(index) {\r\n return isLoop ? (index + slideCount) % slideCount || 0 : index;\r\n }\r\n\r\n function getEnd() {\r\n var end = slideCount - (hasFocus() || isLoop && perMove ? 1 : perPage);\r\n\r\n while (omitEnd && end-- > 0) {\r\n if (toPosition(slideCount - 1, true) !== toPosition(end, true)) {\r\n end++;\r\n break;\r\n }\r\n }\r\n\r\n return clamp(end, 0, slideCount - 1);\r\n }\r\n\r\n function toIndex(page) {\r\n return clamp(hasFocus() ? page : perPage * page, 0, endIndex);\r\n }\r\n\r\n function toPage(index) {\r\n return hasFocus() ? min(index, endIndex) : floor((index >= endIndex ? slideCount - 1 : index) / perPage);\r\n }\r\n\r\n function toDest(destination) {\r\n var closest = Move.toIndex(destination);\r\n return isSlide ? clamp(closest, 0, endIndex) : closest;\r\n }\r\n\r\n function setIndex(index) {\r\n if (index !== currIndex) {\r\n prevIndex = currIndex;\r\n currIndex = index;\r\n }\r\n }\r\n\r\n function getIndex(prev) {\r\n return prev ? prevIndex : currIndex;\r\n }\r\n\r\n function hasFocus() {\r\n return !isUndefined(options.focus) || options.isNavigation;\r\n }\r\n\r\n function isBusy() {\r\n return Splide2.state.is([MOVING, SCROLLING]) && !!options.waitForTransition;\r\n }\r\n\r\n return {\r\n mount: mount,\r\n go: go,\r\n scroll: scroll,\r\n getNext: getNext,\r\n getPrev: getPrev,\r\n getAdjacent: getAdjacent,\r\n getEnd: getEnd,\r\n setIndex: setIndex,\r\n getIndex: getIndex,\r\n toIndex: toIndex,\r\n toPage: toPage,\r\n toDest: toDest,\r\n hasFocus: hasFocus,\r\n isBusy: isBusy\r\n };\r\n }\r\n\r\n var XML_NAME_SPACE = \"http://www.w3.org/2000/svg\";\r\n var 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\";\r\n var SIZE = 40;\r\n\r\n function Arrows(Splide2, Components2, options) {\r\n var event = EventInterface(Splide2);\r\n var on = event.on,\r\n bind = event.bind,\r\n emit = event.emit;\r\n var classes = options.classes,\r\n i18n = options.i18n;\r\n var Elements = Components2.Elements,\r\n Controller = Components2.Controller;\r\n var placeholder = Elements.arrows,\r\n track = Elements.track;\r\n var wrapper = placeholder;\r\n var prev = Elements.prev;\r\n var next = Elements.next;\r\n var created;\r\n var wrapperClasses;\r\n var arrows = {};\r\n\r\n function mount() {\r\n init();\r\n on(EVENT_UPDATED, remount);\r\n }\r\n\r\n function remount() {\r\n destroy();\r\n mount();\r\n }\r\n\r\n function init() {\r\n var enabled = options.arrows;\r\n\r\n if (enabled && !(prev && next)) {\r\n createArrows();\r\n }\r\n\r\n if (prev && next) {\r\n assign(arrows, {\r\n prev: prev,\r\n next: next\r\n });\r\n display(wrapper, enabled ? \"\" : \"none\");\r\n addClass(wrapper, wrapperClasses = CLASS_ARROWS + \"--\" + options.direction);\r\n\r\n if (enabled) {\r\n listen();\r\n update();\r\n setAttribute([prev, next], ARIA_CONTROLS, track.id);\r\n emit(EVENT_ARROWS_MOUNTED, prev, next);\r\n }\r\n }\r\n }\r\n\r\n function destroy() {\r\n event.destroy();\r\n removeClass(wrapper, wrapperClasses);\r\n\r\n if (created) {\r\n remove(placeholder ? [prev, next] : wrapper);\r\n prev = next = null;\r\n } else {\r\n removeAttribute([prev, next], ALL_ATTRIBUTES);\r\n }\r\n }\r\n\r\n function listen() {\r\n on([EVENT_MOUNTED, EVENT_MOVED, EVENT_REFRESH, EVENT_SCROLLED, EVENT_END_INDEX_CHANGED], update);\r\n bind(next, \"click\", apply(go, \">\"));\r\n bind(prev, \"click\", apply(go, \"<\"));\r\n }\r\n\r\n function go(control) {\r\n Controller.go(control, true);\r\n }\r\n\r\n function createArrows() {\r\n wrapper = placeholder || create(\"div\", classes.arrows);\r\n prev = createArrow(true);\r\n next = createArrow(false);\r\n created = true;\r\n append(wrapper, [prev, next]);\r\n !placeholder && before(wrapper, track);\r\n }\r\n\r\n function createArrow(prev2) {\r\n var arrow = \"