diff --git a/dist/js/splide-extension-auto-scroll.cjs.js b/dist/js/splide-extension-auto-scroll.cjs.js index 62089b7..b25cb3e 100644 --- a/dist/js/splide-extension-auto-scroll.cjs.js +++ b/dist/js/splide-extension-auto-scroll.cjs.js @@ -2,7 +2,7 @@ * @splidejs/splide-extension-auto-scroll * Version : 0.5.3 * License : MIT - * Copyright: 2022 Naotoshi Fujita + * Copyright: 2023 Naotoshi Fujita */ 'use strict'; @@ -380,6 +380,7 @@ function AutoScroll(Splide2, Components2, options) { const { setIndex, getIndex } = Components2.Controller; const { orient } = Components2.Direction; const { toggle } = Components2.Elements; + const { listSize } = Components2.Layout; const { Live } = Components2; const { root } = Splide2; const throttledUpdateArrows = Throttle(Components2.Arrows.update, 500); @@ -390,9 +391,14 @@ function AutoScroll(Splide2, Components2, options) { let focused; let busy; let currPosition; + let baseTime; + let basePosition; + let lastRenderTime; + let msPerFrame; function setup() { const { autoScroll } = options; autoScrollOptions = assign({}, DEFAULTS, isObject(autoScroll) ? autoScroll : {}); + msPerFrame = autoScrollOptions.fpsLock ? 1e3 / autoScrollOptions.fpsLock : void 0; } function mount() { if (!Splide2.is(FADE)) { @@ -468,6 +474,9 @@ function AutoScroll(Splide2, Components2, options) { Live.disable(true); focused = hovered = stopped = false; updateButton(); + baseTime = Date.now(); + basePosition = getPosition(); + lastRenderTime = void 0; } } function pause(stop = true) { @@ -488,6 +497,8 @@ function AutoScroll(Splide2, Components2, options) { function move() { const position = getPosition(); const destination = computeDestination(position); + if (destination === null) + return; if (position !== destination) { translate(destination); updateIndex(currPosition = getPosition()); @@ -500,8 +511,28 @@ function AutoScroll(Splide2, Components2, options) { throttledUpdateArrows(); } function computeDestination(position) { + const currentTimestamp = Date.now(); + if (autoScrollOptions.fpsLock && lastRenderTime && currentTimestamp - lastRenderTime < msPerFrame / 2) { + return null; + } const speed = autoScrollOptions.speed || 1; - position += orient(speed); + const virtualViewportSize = autoScrollOptions.virtualViewportSize || 1e3; + const realViewportSize = listSize(); + const virtualToRealScale = realViewportSize / virtualViewportSize; + const speedScale = autoScrollOptions.virtualSpeed ? virtualToRealScale : 1; + if (autoScrollOptions.fpsLock) { + const timePassed = currentTimestamp - baseTime; + const framesPassed = timePassed * autoScrollOptions.fpsLock / 1e3; + const expectedPositionAtPassedFrames = orient(framesPassed * speed * speedScale) + basePosition; + if (expectedPositionAtPassedFrames !== position) { + position = expectedPositionAtPassedFrames; + lastRenderTime = currentTimestamp; + } else { + return null; + } + } else { + position += orient(speed * speedScale); + } if (Splide2.is(SLIDE)) { position = clamp(position, getLimit(false), getLimit(true)); } diff --git a/dist/js/splide-extension-auto-scroll.esm.js b/dist/js/splide-extension-auto-scroll.esm.js index 0348b83..f1d3b7f 100644 --- a/dist/js/splide-extension-auto-scroll.esm.js +++ b/dist/js/splide-extension-auto-scroll.esm.js @@ -2,7 +2,7 @@ * @splidejs/splide-extension-auto-scroll * Version : 0.5.3 * License : MIT - * Copyright: 2022 Naotoshi Fujita + * Copyright: 2023 Naotoshi Fujita */ function empty(array) { array.length = 0; @@ -376,6 +376,7 @@ function AutoScroll(Splide2, Components2, options) { const { setIndex, getIndex } = Components2.Controller; const { orient } = Components2.Direction; const { toggle } = Components2.Elements; + const { listSize } = Components2.Layout; const { Live } = Components2; const { root } = Splide2; const throttledUpdateArrows = Throttle(Components2.Arrows.update, 500); @@ -386,9 +387,14 @@ function AutoScroll(Splide2, Components2, options) { let focused; let busy; let currPosition; + let baseTime; + let basePosition; + let lastRenderTime; + let msPerFrame; function setup() { const { autoScroll } = options; autoScrollOptions = assign({}, DEFAULTS, isObject(autoScroll) ? autoScroll : {}); + msPerFrame = autoScrollOptions.fpsLock ? 1e3 / autoScrollOptions.fpsLock : void 0; } function mount() { if (!Splide2.is(FADE)) { @@ -464,6 +470,9 @@ function AutoScroll(Splide2, Components2, options) { Live.disable(true); focused = hovered = stopped = false; updateButton(); + baseTime = Date.now(); + basePosition = getPosition(); + lastRenderTime = void 0; } } function pause(stop = true) { @@ -484,6 +493,8 @@ function AutoScroll(Splide2, Components2, options) { function move() { const position = getPosition(); const destination = computeDestination(position); + if (destination === null) + return; if (position !== destination) { translate(destination); updateIndex(currPosition = getPosition()); @@ -496,8 +507,28 @@ function AutoScroll(Splide2, Components2, options) { throttledUpdateArrows(); } function computeDestination(position) { + const currentTimestamp = Date.now(); + if (autoScrollOptions.fpsLock && lastRenderTime && currentTimestamp - lastRenderTime < msPerFrame / 2) { + return null; + } const speed = autoScrollOptions.speed || 1; - position += orient(speed); + const virtualViewportSize = autoScrollOptions.virtualViewportSize || 1e3; + const realViewportSize = listSize(); + const virtualToRealScale = realViewportSize / virtualViewportSize; + const speedScale = autoScrollOptions.virtualSpeed ? virtualToRealScale : 1; + if (autoScrollOptions.fpsLock) { + const timePassed = currentTimestamp - baseTime; + const framesPassed = timePassed * autoScrollOptions.fpsLock / 1e3; + const expectedPositionAtPassedFrames = orient(framesPassed * speed * speedScale) + basePosition; + if (expectedPositionAtPassedFrames !== position) { + position = expectedPositionAtPassedFrames; + lastRenderTime = currentTimestamp; + } else { + return null; + } + } else { + position += orient(speed * speedScale); + } if (Splide2.is(SLIDE)) { position = clamp(position, getLimit(false), getLimit(true)); } diff --git a/dist/js/splide-extension-auto-scroll.js b/dist/js/splide-extension-auto-scroll.js index 1033ae4..83ea148 100644 --- a/dist/js/splide-extension-auto-scroll.js +++ b/dist/js/splide-extension-auto-scroll.js @@ -1,8 +1,8 @@ /*! * @splidejs/splide-extension-auto-scroll - * Version : 0.5.2 + * Version : 0.5.3 * License : MIT - * Copyright: 2022 Naotoshi Fujita + * Copyright: 2023 Naotoshi Fujita */ (function (factory) { typeof define === 'function' && define.amd ? define(factory) : factory(); @@ -402,6 +402,7 @@ getIndex = _Components2$Controll.getIndex; var orient = Components2.Direction.orient; var toggle = Components2.Elements.toggle; + var listSize = Components2.Layout.listSize; var Live = Components2.Live; var root = Splide2.root; var throttledUpdateArrows = Throttle(Components2.Arrows.update, 500); @@ -412,10 +413,15 @@ var focused; var busy; var currPosition; + var baseTime; + var basePosition; + var lastRenderTime; + var msPerFrame; function setup() { var autoScroll = options.autoScroll; autoScrollOptions = assign({}, DEFAULTS, isObject(autoScroll) ? autoScroll : {}); + msPerFrame = autoScrollOptions.fpsLock ? 1e3 / autoScrollOptions.fpsLock : void 0; } function mount() { @@ -502,6 +508,9 @@ Live.disable(true); focused = hovered = stopped = false; updateButton(); + baseTime = Date.now(); + basePosition = getPosition(); + lastRenderTime = void 0; } } @@ -530,6 +539,7 @@ function move() { var position = getPosition(); var destination = computeDestination(position); + if (destination === null) return; if (position !== destination) { translate(destination); @@ -546,8 +556,32 @@ } function computeDestination(position) { + var currentTimestamp = Date.now(); + + if (autoScrollOptions.fpsLock && lastRenderTime && currentTimestamp - lastRenderTime < msPerFrame / 2) { + return null; + } + var speed = autoScrollOptions.speed || 1; - position += orient(speed); + var virtualViewportSize = autoScrollOptions.virtualViewportSize || 1e3; + var realViewportSize = listSize(); + var virtualToRealScale = realViewportSize / virtualViewportSize; + var speedScale = autoScrollOptions.virtualSpeed ? virtualToRealScale : 1; + + if (autoScrollOptions.fpsLock) { + var timePassed = currentTimestamp - baseTime; + var framesPassed = timePassed * autoScrollOptions.fpsLock / 1e3; + var expectedPositionAtPassedFrames = orient(framesPassed * speed * speedScale) + basePosition; + + if (expectedPositionAtPassedFrames !== position) { + position = expectedPositionAtPassedFrames; + lastRenderTime = currentTimestamp; + } else { + return null; + } + } else { + position += orient(speed * speedScale); + } if (Splide2.is(SLIDE)) { position = clamp(position, getLimit(false), getLimit(true)); diff --git a/dist/js/splide-extension-auto-scroll.js.map b/dist/js/splide-extension-auto-scroll.js.map index ccbf5c0..ba04b56 100644 --- a/dist/js/splide-extension-auto-scroll.js.map +++ b/dist/js/splide-extension-auto-scroll.js.map @@ -1 +1 @@ -{"version":3,"file":"splide-extension-auto-scroll.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/defaults.ts","../../src/js/constants/i18n.ts","../../src/js/extensions/AutoScroll/AutoScroll.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.17\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_BUSY = ARIA_PREFIX + \"busy\";\nvar ARIA_ATOMIC = ARIA_PREFIX + \"atomic\";\nvar ALL_ATTRIBUTES = [ROLE, TAB_INDEX, DISABLED, ARIA_CONTROLS, ARIA_CURRENT, ARIA_LABEL, ARIA_LABELLEDBY, ARIA_HIDDEN, ARIA_ORIENTATION, ARIA_ROLEDESCRIPTION];\nvar CLASS_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 click\";\n\nfunction Elements(Splide2, Components2, options) {\n var _EventInterface = EventInterface(Splide2),\n on = _EventInterface.on,\n bind = _EventInterface.bind;\n\n var root = Splide2.root;\n var i18n = options.i18n;\n var elements = {};\n var slides = [];\n var rootClasses = [];\n var trackClasses = [];\n var track;\n var list;\n var isUsingKey;\n\n function setup() {\n collect();\n init();\n update();\n }\n\n function mount() {\n on(EVENT_REFRESH, destroy);\n on(EVENT_REFRESH, setup);\n on(EVENT_UPDATED, update);\n bind(document, POINTER_DOWN_EVENTS + \" keydown\", function (e) {\n isUsingKey = e.type === \"keydown\";\n }, {\n capture: true\n });\n bind(root, \"focusin\", function () {\n toggleClass(root, CLASS_FOCUS_IN, !!isUsingKey);\n });\n }\n\n function destroy(completely) {\n var attrs = ALL_ATTRIBUTES.concat(\"style\");\n empty(slides);\n removeClass(root, rootClasses);\n removeClass(track, trackClasses);\n removeAttribute([track, list], attrs);\n removeAttribute(root, completely ? attrs : [\"style\", ARIA_ROLEDESCRIPTION]);\n }\n\n function update() {\n removeClass(root, rootClasses);\n removeClass(track, trackClasses);\n rootClasses = getClasses(CLASS_ROOT);\n trackClasses = getClasses(CLASS_TRACK);\n addClass(root, rootClasses);\n addClass(track, trackClasses);\n setAttribute(root, ARIA_LABEL, options.label);\n setAttribute(root, ARIA_LABELLEDBY, options.labelledby);\n }\n\n function collect() {\n track = find(\".\" + CLASS_TRACK);\n list = child(track, \".\" + CLASS_LIST);\n assert(track && list, \"A track/list element is missing.\");\n push(slides, children(list, \".\" + CLASS_SLIDE + \":not(.\" + CLASS_CLONE + \")\"));\n forOwn({\n arrows: CLASS_ARROWS,\n pagination: CLASS_PAGINATION,\n prev: CLASS_ARROW_PREV,\n next: CLASS_ARROW_NEXT,\n bar: CLASS_PROGRESS_BAR,\n toggle: CLASS_TOGGLE\n }, function (className, key) {\n elements[key] = find(\".\" + className);\n });\n assign(elements, {\n root: root,\n track: track,\n list: list,\n slides: slides\n });\n }\n\n function init() {\n var id = root.id || uniqueId(PROJECT_CODE);\n var role = options.role;\n root.id = id;\n track.id = track.id || id + \"-track\";\n list.id = list.id || id + \"-list\";\n\n if (!getAttribute(root, ROLE) && root.tagName !== \"SECTION\" && role) {\n setAttribute(root, ROLE, role);\n }\n\n setAttribute(root, ARIA_ROLEDESCRIPTION, i18n.carousel);\n setAttribute(list, ROLE, \"presentation\");\n }\n\n function find(selector) {\n var elm = query(root, selector);\n return elm && closest(elm, \".\" + CLASS_ROOT) === root ? elm : void 0;\n }\n\n function getClasses(base) {\n return [base + \"--\" + options.type, base + \"--\" + options.direction, options.drag && base + \"--draggable\", options.isNavigation && base + \"--nav\", base === CLASS_ROOT && CLASS_ACTIVE];\n }\n\n return assign(elements, {\n setup: setup,\n mount: mount,\n destroy: destroy\n });\n}\n\nvar SLIDE = \"slide\";\nvar LOOP = \"loop\";\nvar FADE = \"fade\";\n\nfunction Slide$1(Splide2, index, slideIndex, slide) {\n var event = EventInterface(Splide2);\n var on = event.on,\n emit = event.emit,\n bind = event.bind;\n var Components = Splide2.Components,\n root = Splide2.root,\n options = Splide2.options;\n var isNavigation = options.isNavigation,\n updateOnMove = options.updateOnMove,\n i18n = options.i18n,\n pagination = options.pagination,\n slideFocus = options.slideFocus;\n var resolve = Components.Direction.resolve;\n var styles = getAttribute(slide, \"style\");\n var label = getAttribute(slide, ARIA_LABEL);\n var isClone = slideIndex > -1;\n var container = child(slide, \".\" + CLASS_CONTAINER);\n var destroyed;\n\n function mount() {\n if (!isClone) {\n slide.id = root.id + \"-slide\" + pad(index + 1);\n setAttribute(slide, ROLE, pagination ? \"tabpanel\" : \"group\");\n setAttribute(slide, ARIA_ROLEDESCRIPTION, i18n.slide);\n setAttribute(slide, ARIA_LABEL, label || format(i18n.slideLabel, [index + 1, Splide2.length]));\n }\n\n listen();\n }\n\n function listen() {\n bind(slide, \"click\", apply(emit, EVENT_CLICK, self));\n bind(slide, \"keydown\", apply(emit, EVENT_SLIDE_KEYDOWN, self));\n on([EVENT_MOVED, EVENT_SHIFTED, EVENT_SCROLLED], update);\n on(EVENT_NAVIGATION_MOUNTED, initNavigation);\n\n if (updateOnMove) {\n on(EVENT_MOVE, onMove);\n }\n }\n\n function destroy() {\n destroyed = true;\n event.destroy();\n removeClass(slide, STATUS_CLASSES);\n removeAttribute(slide, ALL_ATTRIBUTES);\n setAttribute(slide, \"style\", styles);\n setAttribute(slide, ARIA_LABEL, label || \"\");\n }\n\n function initNavigation() {\n var controls = Splide2.splides.map(function (target) {\n var Slide2 = target.splide.Components.Slides.getAt(index);\n return Slide2 ? Slide2.slide.id : \"\";\n }).join(\" \");\n setAttribute(slide, ARIA_LABEL, format(i18n.slideX, (isClone ? slideIndex : index) + 1));\n setAttribute(slide, ARIA_CONTROLS, controls);\n setAttribute(slide, ROLE, slideFocus ? \"button\" : \"\");\n slideFocus && removeAttribute(slide, ARIA_ROLEDESCRIPTION);\n }\n\n function onMove() {\n if (!destroyed) {\n update();\n }\n }\n\n function update() {\n if (!destroyed) {\n var curr = Splide2.index;\n updateActivity();\n updateVisibility();\n toggleClass(slide, CLASS_PREV, index === curr - 1);\n toggleClass(slide, CLASS_NEXT, index === curr + 1);\n }\n }\n\n function updateActivity() {\n var active = isActive();\n\n if (active !== hasClass(slide, CLASS_ACTIVE)) {\n toggleClass(slide, CLASS_ACTIVE, active);\n setAttribute(slide, ARIA_CURRENT, isNavigation && active || \"\");\n emit(active ? EVENT_ACTIVE : EVENT_INACTIVE, self);\n }\n }\n\n function updateVisibility() {\n var visible = isVisible();\n var hidden = !visible && (!isActive() || isClone);\n\n if (!Splide2.state.is([MOVING, SCROLLING])) {\n setAttribute(slide, ARIA_HIDDEN, hidden || \"\");\n }\n\n setAttribute(queryAll(slide, options.focusableNodes || \"\"), TAB_INDEX, hidden ? -1 : \"\");\n\n if (slideFocus) {\n setAttribute(slide, TAB_INDEX, hidden ? -1 : 0);\n }\n\n if (visible !== hasClass(slide, CLASS_VISIBLE)) {\n toggleClass(slide, CLASS_VISIBLE, visible);\n emit(visible ? EVENT_VISIBLE : EVENT_HIDDEN, self);\n }\n\n if (!visible && document.activeElement === slide) {\n var Slide2 = Components.Slides.getAt(Splide2.index);\n Slide2 && focus(Slide2.slide);\n }\n }\n\n function style$1(prop, value, useContainer) {\n style(useContainer && container || slide, prop, value);\n }\n\n function isActive() {\n var curr = Splide2.index;\n return curr === index || options.cloneStatus && curr === slideIndex;\n }\n\n function isVisible() {\n if (Splide2.is(FADE)) {\n return isActive();\n }\n\n var trackRect = rect(Components.Elements.track);\n var slideRect = rect(slide);\n var left = resolve(\"left\", true);\n var right = resolve(\"right\", true);\n return floor(trackRect[left]) <= ceil(slideRect[left]) && floor(slideRect[right]) <= ceil(trackRect[right]);\n }\n\n function isWithin(from, distance) {\n var diff = abs(from - index);\n\n if (!isClone && (options.rewind || Splide2.is(LOOP))) {\n diff = min(diff, Splide2.length - diff);\n }\n\n return diff <= distance;\n }\n\n var self = {\n index: index,\n slideIndex: slideIndex,\n slide: slide,\n container: container,\n isClone: isClone,\n mount: mount,\n destroy: destroy,\n update: update,\n style: style$1,\n isWithin: isWithin\n };\n return self;\n}\n\nfunction Slides(Splide2, Components2, options) {\n var _EventInterface2 = EventInterface(Splide2),\n on = _EventInterface2.on,\n emit = _EventInterface2.emit,\n bind = _EventInterface2.bind;\n\n var _Components2$Elements = Components2.Elements,\n slides = _Components2$Elements.slides,\n list = _Components2$Elements.list;\n var Slides2 = [];\n\n function mount() {\n init();\n on(EVENT_REFRESH, destroy);\n on(EVENT_REFRESH, init);\n }\n\n function init() {\n slides.forEach(function (slide, index) {\n register(slide, index, -1);\n });\n }\n\n function destroy() {\n forEach$1(function (Slide2) {\n Slide2.destroy();\n });\n empty(Slides2);\n }\n\n function update() {\n forEach$1(function (Slide2) {\n Slide2.update();\n });\n }\n\n function register(slide, index, slideIndex) {\n var object = Slide$1(Splide2, index, slideIndex, slide);\n object.mount();\n Slides2.push(object);\n Slides2.sort(function (Slide1, Slide2) {\n return Slide1.index - Slide2.index;\n });\n }\n\n function get(excludeClones) {\n return excludeClones ? filter(function (Slide2) {\n return !Slide2.isClone;\n }) : Slides2;\n }\n\n function getIn(page) {\n var Controller = Components2.Controller;\n var index = Controller.toIndex(page);\n var max = Controller.hasFocus() ? 1 : options.perPage;\n return filter(function (Slide2) {\n return between(Slide2.index, index, index + max - 1);\n });\n }\n\n function getAt(index) {\n return filter(index)[0];\n }\n\n function add(items, index) {\n forEach(items, function (slide) {\n if (isString(slide)) {\n slide = parseHtml(slide);\n }\n\n if (isHTMLElement(slide)) {\n var ref = slides[index];\n ref ? before(slide, ref) : append(list, slide);\n addClass(slide, options.classes.slide);\n observeImages(slide, apply(emit, EVENT_RESIZE));\n }\n });\n emit(EVENT_REFRESH);\n }\n\n function remove$1(matcher) {\n remove(filter(matcher).map(function (Slide2) {\n return Slide2.slide;\n }));\n emit(EVENT_REFRESH);\n }\n\n function forEach$1(iteratee, excludeClones) {\n get(excludeClones).forEach(iteratee);\n }\n\n function filter(matcher) {\n return Slides2.filter(isFunction(matcher) ? matcher : function (Slide2) {\n return isString(matcher) ? matches(Slide2.slide, matcher) : includes(toArray(matcher), Slide2.index);\n });\n }\n\n function style(prop, value, useContainer) {\n forEach$1(function (Slide2) {\n Slide2.style(prop, value, useContainer);\n });\n }\n\n function observeImages(elm, callback) {\n var images = queryAll(elm, \"img\");\n var length = images.length;\n\n if (length) {\n images.forEach(function (img) {\n bind(img, \"load error\", function () {\n if (! --length) {\n callback();\n }\n });\n });\n } else {\n callback();\n }\n }\n\n function getLength(excludeClones) {\n return excludeClones ? slides.length : Slides2.length;\n }\n\n function isEnough() {\n return Slides2.length > options.perPage;\n }\n\n return {\n mount: mount,\n destroy: destroy,\n update: update,\n register: register,\n get: get,\n getIn: getIn,\n getAt: getAt,\n add: add,\n remove: remove$1,\n forEach: forEach$1,\n filter: filter,\n style: style,\n getLength: getLength,\n isEnough: isEnough\n };\n}\n\nfunction Layout(Splide2, Components2, options) {\n var _EventInterface3 = EventInterface(Splide2),\n on = _EventInterface3.on,\n bind = _EventInterface3.bind,\n emit = _EventInterface3.emit;\n\n var Slides = Components2.Slides;\n var resolve = Components2.Direction.resolve;\n var _Components2$Elements2 = Components2.Elements,\n root = _Components2$Elements2.root,\n track = _Components2$Elements2.track,\n list = _Components2$Elements2.list;\n var getAt = Slides.getAt,\n styleSlides = Slides.style;\n var vertical;\n var rootRect;\n\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 if (dest !== index && canShift(dest > prev)) {\n cancel();\n translate(shift(getPosition(), dest > prev), true);\n }\n\n set(MOVING);\n emit(EVENT_MOVE, index, prev, dest);\n Transition.start(index, function () {\n set(IDLE);\n emit(EVENT_MOVED, index, prev, dest);\n callback && callback();\n });\n }\n\n function jump(index) {\n translate(toPosition(index, true));\n }\n\n function translate(position, preventLoop) {\n if (!Splide2.is(FADE)) {\n var destination = preventLoop ? position : loop(position);\n style(list, \"transform\", \"translate\" + resolve(\"X\") + \"(\" + destination + \"px)\");\n position !== destination && emit(EVENT_SHIFTED);\n }\n }\n\n function loop(position) {\n if (Splide2.is(LOOP)) {\n var index = toIndex(position);\n var exceededMax = index > Components2.Controller.getEnd();\n var exceededMin = index < 0;\n\n if (exceededMin || exceededMax) {\n position = shift(position, exceededMax);\n }\n }\n\n return position;\n }\n\n function shift(position, backwards) {\n var excess = position - getLimit(backwards);\n var size = sliderSize();\n position -= orient(size * (ceil(abs(excess) / size) || 1)) * (backwards ? 1 : -1);\n return position;\n }\n\n function cancel() {\n translate(getPosition());\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[resolve(\"scrollWidth\")] - rect(track)[resolve(\"width\")];\n }\n\n function exceededLimit(max, position) {\n position = isUndefined(position) ? getPosition() : position;\n var exceededMin = max !== true && orient(position) < orient(getLimit(false));\n var exceededMax = max !== false && orient(position) > orient(getLimit(true));\n return exceededMin || exceededMax;\n }\n\n return {\n mount: mount,\n move: move,\n jump: jump,\n translate: translate,\n shift: shift,\n cancel: cancel,\n toIndex: toIndex,\n toPosition: toPosition,\n getPosition: getPosition,\n getLimit: getLimit,\n exceededLimit: exceededLimit,\n reposition: reposition\n };\n}\n\nfunction Controller(Splide2, Components2, options) {\n var _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(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() || hasFocus()) {\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 (!perMove && (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 placeholder = Elements.arrows,\n track = Elements.track;\n var wrapper = placeholder;\n var prev = Elements.prev;\n var next = Elements.next;\n var created;\n var wrapperClasses;\n var arrows = {};\n\n function mount() {\n init();\n on(EVENT_UPDATED, remount);\n }\n\n function remount() {\n destroy();\n mount();\n }\n\n function init() {\n var enabled = options.arrows;\n\n if (enabled && !(prev && next)) {\n createArrows();\n }\n\n if (prev && next) {\n assign(arrows, {\n prev: prev,\n next: next\n });\n display(wrapper, enabled ? \"\" : \"none\");\n addClass(wrapper, wrapperClasses = CLASS_ARROWS + \"--\" + options.direction);\n\n if (enabled) {\n listen();\n update();\n setAttribute([prev, next], ARIA_CONTROLS, track.id);\n emit(EVENT_ARROWS_MOUNTED, prev, next);\n }\n }\n }\n\n function destroy() {\n event.destroy();\n removeClass(wrapper, wrapperClasses);\n\n if (created) {\n remove(placeholder ? [prev, next] : wrapper);\n prev = next = null;\n } else {\n removeAttribute([prev, next], ALL_ATTRIBUTES);\n }\n }\n\n function listen() {\n on([EVENT_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 = placeholder || create(\"div\", classes.arrows);\n prev = createArrow(true);\n next = createArrow(false);\n created = true;\n append(wrapper, [prev, next]);\n !placeholder && before(wrapper, track);\n }\n\n function createArrow(prev2) {\n var arrow = \"\";\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 += \"
\";\n html += \"\";\n\n if (slider) {\n html += beforeSlider || \"\";\n html += \"
\";\n }\n\n html += beforeTrack || \"\";\n\n if (arrows) {\n html += this.renderArrows();\n }\n\n html += \"
\";\n html += \"<\" + listTag + \" class=\\\"splide__list\\\">\";\n html += this.renderSlides();\n html += \"\";\n html += \"
\";\n html += afterTrack || \"\";\n\n if (slider) {\n html += \"
\";\n html += afterSlider || \"\";\n }\n\n html += \"
\";\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 { AutoScrollOptions } from '../types/options';\r\n\r\n\r\n/**\r\n * Default options for the AutoScroll extension.\r\n *\r\n * @since 0.1.0\r\n */\r\nexport const DEFAULTS: AutoScrollOptions = {\r\n speed : 1,\r\n autoStart : true,\r\n pauseOnHover: true,\r\n pauseOnFocus: true,\r\n};","export const I18N = {\r\n startScroll: 'Start auto scroll',\r\n pauseScroll: 'Pause auto scroll',\r\n};","import {\r\n BaseComponent,\r\n CLASS_ACTIVE,\r\n Components,\r\n EVENT_DRAG, EVENT_DRAGGED,\r\n EVENT_MOVE,\r\n EVENT_MOVED,\r\n EVENT_SCROLL,\r\n EVENT_SCROLLED,\r\n EVENT_UPDATED,\r\n EventInterface,\r\n FADE,\r\n Options,\r\n RequestInterval,\r\n Throttle,\r\n RequestIntervalInterface,\r\n SLIDE,\r\n Splide,\r\n} from '@splidejs/splide';\r\nimport { assign, clamp, isObject, isUndefined, setAttribute, toggleClass } from '@splidejs/splide/src/js/utils';\r\nimport { DEFAULTS } from '../../constants/defaults';\r\nimport { AutoScrollOptions } from '../../types/options';\r\nimport { I18N } from \"../../constants/i18n\";\r\n\r\n\r\n/**\r\n * Lets the compiler know this component.\r\n */\r\ndeclare module '@splidejs/splide' {\r\n interface Options {\r\n autoScroll?: AutoScrollOptions | boolean;\r\n }\r\n\r\n interface Components {\r\n AutoScroll?: AutoScrollComponent;\r\n }\r\n}\r\n\r\n/**\r\n * The interface for the AutoScroll component.\r\n *\r\n * @since 0.1.0\r\n */\r\nexport interface AutoScrollComponent extends BaseComponent {\r\n play(): void;\r\n pause(): void;\r\n isPaused(): boolean;\r\n}\r\n\r\n/**\r\n * The extension for continuously scrolling the slider.\r\n *\r\n * @since 0.1.0\r\n *\r\n * @param Splide - A Splide instance.\r\n * @param Components - A collection of components.\r\n * @param options - Options.\r\n *\r\n * @return An AutoScroll component object.\r\n */\r\nexport function AutoScroll( Splide: Splide, Components: Components, options: Options ): AutoScrollComponent {\r\n const { on, off, bind, unbind } = EventInterface( Splide );\r\n const { translate, getPosition, toIndex, getLimit } = Components.Move;\r\n const { setIndex, getIndex } = Components.Controller;\r\n const { orient } = Components.Direction;\r\n const { toggle } = Components.Elements;\r\n const { Live } = Components;\r\n const { root } = Splide;\r\n\r\n /**\r\n * The throttled function to update arrows.\r\n */\r\n const throttledUpdateArrows = Throttle( Components.Arrows.update, 500 );\r\n\r\n /**\r\n * Keeps the latest options.\r\n */\r\n let autoScrollOptions: AutoScrollOptions = {};\r\n\r\n /**\r\n * The RequestInterval object.\r\n */\r\n let interval: RequestIntervalInterface;\r\n\r\n /**\r\n * Turns into `true` when the auto scroll is manually paused.\r\n */\r\n let stopped: boolean;\r\n\r\n /**\r\n * Indicates whether the mouse cursor is on the slider or not.\r\n */\r\n let hovered: boolean;\r\n\r\n /**\r\n * Indicates whether the slider contains active element or not.\r\n */\r\n let focused: boolean;\r\n\r\n /**\r\n * Indicates whether the slider is currently busy or not.\r\n */\r\n let busy: boolean;\r\n\r\n /**\r\n * Keeps the current position to restore.\r\n */\r\n let currPosition: number;\r\n\r\n /**\r\n * Sets up the component.\r\n */\r\n function setup(): void {\r\n const { autoScroll } = options;\r\n autoScrollOptions = assign( {}, DEFAULTS, isObject( autoScroll ) ? autoScroll : {} );\r\n }\r\n\r\n /**\r\n * Called when the component is mounted.\r\n */\r\n function mount(): void {\r\n if ( ! Splide.is( FADE ) ) {\r\n if ( ! interval && options.autoScroll !== false ) {\r\n interval = RequestInterval( 0, move );\r\n listen();\r\n autoStart();\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Destroys the component.\r\n */\r\n function destroy(): void {\r\n if ( interval ) {\r\n interval.cancel();\r\n interval = null;\r\n\r\n currPosition = undefined;\r\n\r\n off( [ EVENT_MOVE, EVENT_DRAG, EVENT_SCROLL, EVENT_MOVED, EVENT_SCROLLED ] );\r\n unbind( root, 'mouseenter mouseleave focusin focusout' );\r\n unbind( toggle, 'click' );\r\n }\r\n }\r\n\r\n /**\r\n * Listens to some events.\r\n */\r\n function listen(): void {\r\n if ( autoScrollOptions.pauseOnHover ) {\r\n bind( root, 'mouseenter mouseleave', e => {\r\n hovered = e.type === 'mouseenter';\r\n autoToggle();\r\n } );\r\n }\r\n\r\n if ( autoScrollOptions.pauseOnFocus ) {\r\n bind( root, 'focusin focusout', e => {\r\n focused = e.type === 'focusin';\r\n autoToggle();\r\n } );\r\n }\r\n\r\n if ( autoScrollOptions.useToggleButton ) {\r\n bind( toggle, 'click', () => {\r\n stopped ? play() : pause();\r\n } );\r\n }\r\n\r\n on( EVENT_UPDATED, update );\r\n\r\n on( [ EVENT_MOVE, EVENT_DRAG, EVENT_SCROLL ], () => {\r\n busy = true;\r\n pause( false );\r\n } );\r\n\r\n on( [ EVENT_MOVED, EVENT_DRAGGED, EVENT_SCROLLED ], () => {\r\n busy = false;\r\n autoToggle();\r\n } );\r\n }\r\n\r\n /**\r\n * Called when the slider is updated.\r\n * Attempts to keep continuous scrolling with the current position\r\n * since the update event makes the slider jump to the current index.\r\n */\r\n function update(): void {\r\n const { autoScroll } = options;\r\n\r\n if ( autoScroll !== false ) {\r\n autoScrollOptions = assign( {}, autoScrollOptions, isObject( autoScroll ) ? autoScroll : {} );\r\n mount();\r\n } else {\r\n destroy();\r\n }\r\n\r\n if ( interval && ! isUndefined( currPosition ) ) {\r\n translate( currPosition );\r\n }\r\n }\r\n\r\n /**\r\n * Starts scrolling the slider on the proper timing.\r\n */\r\n function autoStart(): void {\r\n if ( autoScrollOptions.autoStart ) {\r\n if ( document.readyState === 'complete' ) {\r\n play();\r\n } else {\r\n bind( window, 'load', play );\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Starts auto scroll.\r\n */\r\n function play(): void {\r\n if ( isPaused() ) {\r\n interval.start( true );\r\n Live.disable( true );\r\n focused = hovered = stopped = false;\r\n updateButton();\r\n }\r\n }\r\n\r\n /**\r\n * Pauses auto scroll.\r\n *\r\n * @param stop - Optional. If `true`, auto scroll will never restart without calling `play()`.\r\n */\r\n function pause( stop = true ): void {\r\n if ( ! stopped ) {\r\n stopped = stop;\r\n updateButton();\r\n\r\n if ( ! isPaused() ) {\r\n interval.pause();\r\n Live.disable( false );\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Automatically plays or pauses scrolling.\r\n */\r\n function autoToggle(): void {\r\n if ( ! stopped ) {\r\n hovered || focused || busy ? pause( false ) : play();\r\n }\r\n }\r\n\r\n /**\r\n * Called on every animation frame while the auto scroll is active.\r\n */\r\n function move(): void {\r\n const position = getPosition();\r\n const destination = computeDestination( position );\r\n\r\n if ( position !== destination ) {\r\n translate( destination );\r\n updateIndex( ( currPosition = getPosition() ) );\r\n } else {\r\n pause( false );\r\n\r\n if ( autoScrollOptions.rewind ) {\r\n Splide.go( autoScrollOptions.speed > 0 ? 0 : Components.Controller.getEnd() );\r\n }\r\n }\r\n\r\n throttledUpdateArrows();\r\n }\r\n\r\n /**\r\n * Returns the position to move.\r\n *\r\n * @param position - The current position.\r\n *\r\n * @return A computed destination.\r\n */\r\n function computeDestination( position: number ): number {\r\n const speed = autoScrollOptions.speed || 1;\r\n position += orient( speed );\r\n\r\n if ( Splide.is( SLIDE ) ) {\r\n position = clamp( position, getLimit( false ), getLimit( true ) );\r\n }\r\n\r\n return position;\r\n }\r\n\r\n /**\r\n * Updates index and notify them to other components.\r\n * - Slides: Activity and visibility\r\n * - Pagination: Updates the active item\r\n * - LazyLoad: Load close images if necessary\r\n *\r\n * @param position - A current position.\r\n */\r\n function updateIndex( position: number ): void {\r\n const { length } = Splide;\r\n const index = ( toIndex( position ) + length ) % length;\r\n\r\n if ( index !== getIndex() ) {\r\n setIndex( index );\r\n Components.Slides.update();\r\n Components.Pagination.update();\r\n options.lazyLoad === 'nearby' && Components.LazyLoad.check();\r\n }\r\n }\r\n\r\n /**\r\n * Updates the toggle button status.\r\n */\r\n function updateButton(): void {\r\n if ( toggle ) {\r\n const key = stopped ? 'startScroll' : 'pauseScroll';\r\n toggleClass( toggle, CLASS_ACTIVE, ! stopped );\r\n setAttribute( toggle, 'aria-label', options.i18n[ key ] || I18N[ key ] );\r\n }\r\n }\r\n\r\n /**\r\n * Checks if the auto scroll is paused or not.\r\n *\r\n * @return `true` if it's paused, or otherwise `false`.\r\n */\r\n function isPaused(): boolean {\r\n return ! interval || interval.isPaused();\r\n }\r\n\r\n return {\r\n setup,\r\n mount,\r\n destroy,\r\n play,\r\n pause,\r\n isPaused,\r\n };\r\n}\r\n","import { AutoScroll } from '../extensions';\r\n\r\n\r\ndeclare global {\r\n interface Window {\r\n splide: Record;\r\n }\r\n}\r\n\r\nif ( typeof window !== 'undefined' ) {\r\n window.splide = window.splide || {};\r\n window.splide.Extensions = window.splide.Extensions || {};\r\n window.splide.Extensions.AutoScroll = AutoScroll;\r\n}\r\n"],"names":["empty","array","length","slice","arrayLike","start","end","Array","prototype","call","apply","func","bind","concat","arguments","raf","requestAnimationFrame","typeOf","type","subject","isArray","toArray","value","forEach","values","iteratee","ownKeys","Object","keys","forOwn","object","right","reverse","i","key","assign","source","min","Math","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_MOVE","EVENT_MOVED","EVENT_UPDATED","EVENT_DRAG","EVENT_DRAGGED","EVENT_SCROLL","EVENT_SCROLLED","EVENT_DESTROY","EventInterface","Splide2","bus","createDocumentFragment","binder","on","join","emit","off","RequestInterval","interval","onInterval","onUpdate","limit","now","Date","startTime","rate","id","paused","count","update","pause","resume","cancel","rewind","cancelAnimationFrame","set","time","isPaused","Throttle","duration","throttled","CLASS_ACTIVE","SLIDE","FADE","isObject","isNull","isUndefined","toggleClass","elm","classes","add","name","classList","removeAttribute","elms","attrs","attr","setAttribute","value2","String","max","floor","ceil","abs","clamp","number","x","y","minimum","maximum","DEFAULTS","speed","autoStart","pauseOnHover","pauseOnFocus","I18N","startScroll","pauseScroll","AutoScroll","Splide","Components","Move","translate","getPosition","toIndex","getLimit","Controller","setIndex","getIndex","orient","Direction","toggle","Elements","Live","root","throttledUpdateArrows","Arrows","autoScrollOptions","stopped","hovered","focused","busy","currPosition","setup","autoScroll","mount","is","move","listen","autoToggle","useToggleButton","play","readyState","window","disable","updateButton","stop","position","destination","computeDestination","updateIndex","go","getEnd","index","Slides","Pagination","lazyLoad","LazyLoad","check","i18n","splide","Extensions"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"splide-extension-auto-scroll.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/defaults.ts","../../src/js/constants/i18n.ts","../../src/js/extensions/AutoScroll/AutoScroll.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.17\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_BUSY = ARIA_PREFIX + \"busy\";\nvar ARIA_ATOMIC = ARIA_PREFIX + \"atomic\";\nvar ALL_ATTRIBUTES = [ROLE, TAB_INDEX, DISABLED, ARIA_CONTROLS, ARIA_CURRENT, ARIA_LABEL, ARIA_LABELLEDBY, ARIA_HIDDEN, ARIA_ORIENTATION, ARIA_ROLEDESCRIPTION];\nvar CLASS_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 click\";\n\nfunction Elements(Splide2, Components2, options) {\n var _EventInterface = EventInterface(Splide2),\n on = _EventInterface.on,\n bind = _EventInterface.bind;\n\n var root = Splide2.root;\n var i18n = options.i18n;\n var elements = {};\n var slides = [];\n var rootClasses = [];\n var trackClasses = [];\n var track;\n var list;\n var isUsingKey;\n\n function setup() {\n collect();\n init();\n update();\n }\n\n function mount() {\n on(EVENT_REFRESH, destroy);\n on(EVENT_REFRESH, setup);\n on(EVENT_UPDATED, update);\n bind(document, POINTER_DOWN_EVENTS + \" keydown\", function (e) {\n isUsingKey = e.type === \"keydown\";\n }, {\n capture: true\n });\n bind(root, \"focusin\", function () {\n toggleClass(root, CLASS_FOCUS_IN, !!isUsingKey);\n });\n }\n\n function destroy(completely) {\n var attrs = ALL_ATTRIBUTES.concat(\"style\");\n empty(slides);\n removeClass(root, rootClasses);\n removeClass(track, trackClasses);\n removeAttribute([track, list], attrs);\n removeAttribute(root, completely ? attrs : [\"style\", ARIA_ROLEDESCRIPTION]);\n }\n\n function update() {\n removeClass(root, rootClasses);\n removeClass(track, trackClasses);\n rootClasses = getClasses(CLASS_ROOT);\n trackClasses = getClasses(CLASS_TRACK);\n addClass(root, rootClasses);\n addClass(track, trackClasses);\n setAttribute(root, ARIA_LABEL, options.label);\n setAttribute(root, ARIA_LABELLEDBY, options.labelledby);\n }\n\n function collect() {\n track = find(\".\" + CLASS_TRACK);\n list = child(track, \".\" + CLASS_LIST);\n assert(track && list, \"A track/list element is missing.\");\n push(slides, children(list, \".\" + CLASS_SLIDE + \":not(.\" + CLASS_CLONE + \")\"));\n forOwn({\n arrows: CLASS_ARROWS,\n pagination: CLASS_PAGINATION,\n prev: CLASS_ARROW_PREV,\n next: CLASS_ARROW_NEXT,\n bar: CLASS_PROGRESS_BAR,\n toggle: CLASS_TOGGLE\n }, function (className, key) {\n elements[key] = find(\".\" + className);\n });\n assign(elements, {\n root: root,\n track: track,\n list: list,\n slides: slides\n });\n }\n\n function init() {\n var id = root.id || uniqueId(PROJECT_CODE);\n var role = options.role;\n root.id = id;\n track.id = track.id || id + \"-track\";\n list.id = list.id || id + \"-list\";\n\n if (!getAttribute(root, ROLE) && root.tagName !== \"SECTION\" && role) {\n setAttribute(root, ROLE, role);\n }\n\n setAttribute(root, ARIA_ROLEDESCRIPTION, i18n.carousel);\n setAttribute(list, ROLE, \"presentation\");\n }\n\n function find(selector) {\n var elm = query(root, selector);\n return elm && closest(elm, \".\" + CLASS_ROOT) === root ? elm : void 0;\n }\n\n function getClasses(base) {\n return [base + \"--\" + options.type, base + \"--\" + options.direction, options.drag && base + \"--draggable\", options.isNavigation && base + \"--nav\", base === CLASS_ROOT && CLASS_ACTIVE];\n }\n\n return assign(elements, {\n setup: setup,\n mount: mount,\n destroy: destroy\n });\n}\n\nvar SLIDE = \"slide\";\nvar LOOP = \"loop\";\nvar FADE = \"fade\";\n\nfunction Slide$1(Splide2, index, slideIndex, slide) {\n var event = EventInterface(Splide2);\n var on = event.on,\n emit = event.emit,\n bind = event.bind;\n var Components = Splide2.Components,\n root = Splide2.root,\n options = Splide2.options;\n var isNavigation = options.isNavigation,\n updateOnMove = options.updateOnMove,\n i18n = options.i18n,\n pagination = options.pagination,\n slideFocus = options.slideFocus;\n var resolve = Components.Direction.resolve;\n var styles = getAttribute(slide, \"style\");\n var label = getAttribute(slide, ARIA_LABEL);\n var isClone = slideIndex > -1;\n var container = child(slide, \".\" + CLASS_CONTAINER);\n var destroyed;\n\n function mount() {\n if (!isClone) {\n slide.id = root.id + \"-slide\" + pad(index + 1);\n setAttribute(slide, ROLE, pagination ? \"tabpanel\" : \"group\");\n setAttribute(slide, ARIA_ROLEDESCRIPTION, i18n.slide);\n setAttribute(slide, ARIA_LABEL, label || format(i18n.slideLabel, [index + 1, Splide2.length]));\n }\n\n listen();\n }\n\n function listen() {\n bind(slide, \"click\", apply(emit, EVENT_CLICK, self));\n bind(slide, \"keydown\", apply(emit, EVENT_SLIDE_KEYDOWN, self));\n on([EVENT_MOVED, EVENT_SHIFTED, EVENT_SCROLLED], update);\n on(EVENT_NAVIGATION_MOUNTED, initNavigation);\n\n if (updateOnMove) {\n on(EVENT_MOVE, onMove);\n }\n }\n\n function destroy() {\n destroyed = true;\n event.destroy();\n removeClass(slide, STATUS_CLASSES);\n removeAttribute(slide, ALL_ATTRIBUTES);\n setAttribute(slide, \"style\", styles);\n setAttribute(slide, ARIA_LABEL, label || \"\");\n }\n\n function initNavigation() {\n var controls = Splide2.splides.map(function (target) {\n var Slide2 = target.splide.Components.Slides.getAt(index);\n return Slide2 ? Slide2.slide.id : \"\";\n }).join(\" \");\n setAttribute(slide, ARIA_LABEL, format(i18n.slideX, (isClone ? slideIndex : index) + 1));\n setAttribute(slide, ARIA_CONTROLS, controls);\n setAttribute(slide, ROLE, slideFocus ? \"button\" : \"\");\n slideFocus && removeAttribute(slide, ARIA_ROLEDESCRIPTION);\n }\n\n function onMove() {\n if (!destroyed) {\n update();\n }\n }\n\n function update() {\n if (!destroyed) {\n var curr = Splide2.index;\n updateActivity();\n updateVisibility();\n toggleClass(slide, CLASS_PREV, index === curr - 1);\n toggleClass(slide, CLASS_NEXT, index === curr + 1);\n }\n }\n\n function updateActivity() {\n var active = isActive();\n\n if (active !== hasClass(slide, CLASS_ACTIVE)) {\n toggleClass(slide, CLASS_ACTIVE, active);\n setAttribute(slide, ARIA_CURRENT, isNavigation && active || \"\");\n emit(active ? EVENT_ACTIVE : EVENT_INACTIVE, self);\n }\n }\n\n function updateVisibility() {\n var visible = isVisible();\n var hidden = !visible && (!isActive() || isClone);\n\n if (!Splide2.state.is([MOVING, SCROLLING])) {\n setAttribute(slide, ARIA_HIDDEN, hidden || \"\");\n }\n\n setAttribute(queryAll(slide, options.focusableNodes || \"\"), TAB_INDEX, hidden ? -1 : \"\");\n\n if (slideFocus) {\n setAttribute(slide, TAB_INDEX, hidden ? -1 : 0);\n }\n\n if (visible !== hasClass(slide, CLASS_VISIBLE)) {\n toggleClass(slide, CLASS_VISIBLE, visible);\n emit(visible ? EVENT_VISIBLE : EVENT_HIDDEN, self);\n }\n\n if (!visible && document.activeElement === slide) {\n var Slide2 = Components.Slides.getAt(Splide2.index);\n Slide2 && focus(Slide2.slide);\n }\n }\n\n function style$1(prop, value, useContainer) {\n style(useContainer && container || slide, prop, value);\n }\n\n function isActive() {\n var curr = Splide2.index;\n return curr === index || options.cloneStatus && curr === slideIndex;\n }\n\n function isVisible() {\n if (Splide2.is(FADE)) {\n return isActive();\n }\n\n var trackRect = rect(Components.Elements.track);\n var slideRect = rect(slide);\n var left = resolve(\"left\", true);\n var right = resolve(\"right\", true);\n return floor(trackRect[left]) <= ceil(slideRect[left]) && floor(slideRect[right]) <= ceil(trackRect[right]);\n }\n\n function isWithin(from, distance) {\n var diff = abs(from - index);\n\n if (!isClone && (options.rewind || Splide2.is(LOOP))) {\n diff = min(diff, Splide2.length - diff);\n }\n\n return diff <= distance;\n }\n\n var self = {\n index: index,\n slideIndex: slideIndex,\n slide: slide,\n container: container,\n isClone: isClone,\n mount: mount,\n destroy: destroy,\n update: update,\n style: style$1,\n isWithin: isWithin\n };\n return self;\n}\n\nfunction Slides(Splide2, Components2, options) {\n var _EventInterface2 = EventInterface(Splide2),\n on = _EventInterface2.on,\n emit = _EventInterface2.emit,\n bind = _EventInterface2.bind;\n\n var _Components2$Elements = Components2.Elements,\n slides = _Components2$Elements.slides,\n list = _Components2$Elements.list;\n var Slides2 = [];\n\n function mount() {\n init();\n on(EVENT_REFRESH, destroy);\n on(EVENT_REFRESH, init);\n }\n\n function init() {\n slides.forEach(function (slide, index) {\n register(slide, index, -1);\n });\n }\n\n function destroy() {\n forEach$1(function (Slide2) {\n Slide2.destroy();\n });\n empty(Slides2);\n }\n\n function update() {\n forEach$1(function (Slide2) {\n Slide2.update();\n });\n }\n\n function register(slide, index, slideIndex) {\n var object = Slide$1(Splide2, index, slideIndex, slide);\n object.mount();\n Slides2.push(object);\n Slides2.sort(function (Slide1, Slide2) {\n return Slide1.index - Slide2.index;\n });\n }\n\n function get(excludeClones) {\n return excludeClones ? filter(function (Slide2) {\n return !Slide2.isClone;\n }) : Slides2;\n }\n\n function getIn(page) {\n var Controller = Components2.Controller;\n var index = Controller.toIndex(page);\n var max = Controller.hasFocus() ? 1 : options.perPage;\n return filter(function (Slide2) {\n return between(Slide2.index, index, index + max - 1);\n });\n }\n\n function getAt(index) {\n return filter(index)[0];\n }\n\n function add(items, index) {\n forEach(items, function (slide) {\n if (isString(slide)) {\n slide = parseHtml(slide);\n }\n\n if (isHTMLElement(slide)) {\n var ref = slides[index];\n ref ? before(slide, ref) : append(list, slide);\n addClass(slide, options.classes.slide);\n observeImages(slide, apply(emit, EVENT_RESIZE));\n }\n });\n emit(EVENT_REFRESH);\n }\n\n function remove$1(matcher) {\n remove(filter(matcher).map(function (Slide2) {\n return Slide2.slide;\n }));\n emit(EVENT_REFRESH);\n }\n\n function forEach$1(iteratee, excludeClones) {\n get(excludeClones).forEach(iteratee);\n }\n\n function filter(matcher) {\n return Slides2.filter(isFunction(matcher) ? matcher : function (Slide2) {\n return isString(matcher) ? matches(Slide2.slide, matcher) : includes(toArray(matcher), Slide2.index);\n });\n }\n\n function style(prop, value, useContainer) {\n forEach$1(function (Slide2) {\n Slide2.style(prop, value, useContainer);\n });\n }\n\n function observeImages(elm, callback) {\n var images = queryAll(elm, \"img\");\n var length = images.length;\n\n if (length) {\n images.forEach(function (img) {\n bind(img, \"load error\", function () {\n if (! --length) {\n callback();\n }\n });\n });\n } else {\n callback();\n }\n }\n\n function getLength(excludeClones) {\n return excludeClones ? slides.length : Slides2.length;\n }\n\n function isEnough() {\n return Slides2.length > options.perPage;\n }\n\n return {\n mount: mount,\n destroy: destroy,\n update: update,\n register: register,\n get: get,\n getIn: getIn,\n getAt: getAt,\n add: add,\n remove: remove$1,\n forEach: forEach$1,\n filter: filter,\n style: style,\n getLength: getLength,\n isEnough: isEnough\n };\n}\n\nfunction Layout(Splide2, Components2, options) {\n var _EventInterface3 = EventInterface(Splide2),\n on = _EventInterface3.on,\n bind = _EventInterface3.bind,\n emit = _EventInterface3.emit;\n\n var Slides = Components2.Slides;\n var resolve = Components2.Direction.resolve;\n var _Components2$Elements2 = Components2.Elements,\n root = _Components2$Elements2.root,\n track = _Components2$Elements2.track,\n list = _Components2$Elements2.list;\n var getAt = Slides.getAt,\n styleSlides = Slides.style;\n var vertical;\n var rootRect;\n\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 if (dest !== index && canShift(dest > prev)) {\n cancel();\n translate(shift(getPosition(), dest > prev), true);\n }\n\n set(MOVING);\n emit(EVENT_MOVE, index, prev, dest);\n Transition.start(index, function () {\n set(IDLE);\n emit(EVENT_MOVED, index, prev, dest);\n callback && callback();\n });\n }\n\n function jump(index) {\n translate(toPosition(index, true));\n }\n\n function translate(position, preventLoop) {\n if (!Splide2.is(FADE)) {\n var destination = preventLoop ? position : loop(position);\n style(list, \"transform\", \"translate\" + resolve(\"X\") + \"(\" + destination + \"px)\");\n position !== destination && emit(EVENT_SHIFTED);\n }\n }\n\n function loop(position) {\n if (Splide2.is(LOOP)) {\n var index = toIndex(position);\n var exceededMax = index > Components2.Controller.getEnd();\n var exceededMin = index < 0;\n\n if (exceededMin || exceededMax) {\n position = shift(position, exceededMax);\n }\n }\n\n return position;\n }\n\n function shift(position, backwards) {\n var excess = position - getLimit(backwards);\n var size = sliderSize();\n position -= orient(size * (ceil(abs(excess) / size) || 1)) * (backwards ? 1 : -1);\n return position;\n }\n\n function cancel() {\n translate(getPosition());\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[resolve(\"scrollWidth\")] - rect(track)[resolve(\"width\")];\n }\n\n function exceededLimit(max, position) {\n position = isUndefined(position) ? getPosition() : position;\n var exceededMin = max !== true && orient(position) < orient(getLimit(false));\n var exceededMax = max !== false && orient(position) > orient(getLimit(true));\n return exceededMin || exceededMax;\n }\n\n return {\n mount: mount,\n move: move,\n jump: jump,\n translate: translate,\n shift: shift,\n cancel: cancel,\n toIndex: toIndex,\n toPosition: toPosition,\n getPosition: getPosition,\n getLimit: getLimit,\n exceededLimit: exceededLimit,\n reposition: reposition\n };\n}\n\nfunction Controller(Splide2, Components2, options) {\n var _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(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() || hasFocus()) {\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 (!perMove && (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 placeholder = Elements.arrows,\n track = Elements.track;\n var wrapper = placeholder;\n var prev = Elements.prev;\n var next = Elements.next;\n var created;\n var wrapperClasses;\n var arrows = {};\n\n function mount() {\n init();\n on(EVENT_UPDATED, remount);\n }\n\n function remount() {\n destroy();\n mount();\n }\n\n function init() {\n var enabled = options.arrows;\n\n if (enabled && !(prev && next)) {\n createArrows();\n }\n\n if (prev && next) {\n assign(arrows, {\n prev: prev,\n next: next\n });\n display(wrapper, enabled ? \"\" : \"none\");\n addClass(wrapper, wrapperClasses = CLASS_ARROWS + \"--\" + options.direction);\n\n if (enabled) {\n listen();\n update();\n setAttribute([prev, next], ARIA_CONTROLS, track.id);\n emit(EVENT_ARROWS_MOUNTED, prev, next);\n }\n }\n }\n\n function destroy() {\n event.destroy();\n removeClass(wrapper, wrapperClasses);\n\n if (created) {\n remove(placeholder ? [prev, next] : wrapper);\n prev = next = null;\n } else {\n removeAttribute([prev, next], ALL_ATTRIBUTES);\n }\n }\n\n function listen() {\n on([EVENT_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 = placeholder || create(\"div\", classes.arrows);\n prev = createArrow(true);\n next = createArrow(false);\n created = true;\n append(wrapper, [prev, next]);\n !placeholder && before(wrapper, track);\n }\n\n function createArrow(prev2) {\n var arrow = \"\";\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 += \"
\";\n html += \"\";\n\n if (slider) {\n html += beforeSlider || \"\";\n html += \"
\";\n }\n\n html += beforeTrack || \"\";\n\n if (arrows) {\n html += this.renderArrows();\n }\n\n html += \"
\";\n html += \"<\" + listTag + \" class=\\\"splide__list\\\">\";\n html += this.renderSlides();\n html += \"\";\n html += \"
\";\n html += afterTrack || \"\";\n\n if (slider) {\n html += \"
\";\n html += afterSlider || \"\";\n }\n\n html += \"
\";\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 { AutoScrollOptions } from '../types/options';\n\n\n/**\n * Default options for the AutoScroll extension.\n *\n * @since 0.1.0\n */\nexport const DEFAULTS: AutoScrollOptions = {\n speed : 1,\n autoStart : true,\n pauseOnHover: true,\n pauseOnFocus: true,\n};","export const I18N = {\n startScroll: 'Start auto scroll',\n pauseScroll: 'Pause auto scroll',\n};","import {\n BaseComponent,\n CLASS_ACTIVE,\n Components,\n EVENT_DRAG, EVENT_DRAGGED,\n EVENT_MOVE,\n EVENT_MOVED,\n EVENT_SCROLL,\n EVENT_SCROLLED,\n EVENT_UPDATED,\n EventInterface,\n FADE,\n Options,\n RequestInterval,\n Throttle,\n RequestIntervalInterface,\n SLIDE,\n Splide,\n} from '@splidejs/splide';\nimport { assign, clamp, isObject, isUndefined, setAttribute, toggleClass } from '@splidejs/splide/src/js/utils';\nimport { DEFAULTS } from '../../constants/defaults';\nimport { AutoScrollOptions } from '../../types/options';\nimport { I18N } from \"../../constants/i18n\";\n\n\n/**\n * Lets the compiler know this component.\n */\ndeclare module '@splidejs/splide' {\n interface Options {\n autoScroll?: AutoScrollOptions | boolean;\n }\n\n interface Components {\n AutoScroll?: AutoScrollComponent;\n }\n}\n\n/**\n * The interface for the AutoScroll component.\n *\n * @since 0.1.0\n */\nexport interface AutoScrollComponent extends BaseComponent {\n play(): void;\n pause(): void;\n isPaused(): boolean;\n}\n\n/**\n * The extension for continuously scrolling the slider.\n *\n * @since 0.1.0\n *\n * @param Splide - A Splide instance.\n * @param Components - A collection of components.\n * @param options - Options.\n *\n * @return An AutoScroll component object.\n */\nexport function AutoScroll( Splide: Splide, Components: Components, options: Options ): AutoScrollComponent {\n const { on, off, bind, unbind } = EventInterface( Splide );\n const { translate, getPosition, toIndex, getLimit } = Components.Move;\n const { setIndex, getIndex } = Components.Controller;\n const { orient } = Components.Direction;\n const { toggle } = Components.Elements;\n const { listSize } = Components.Layout;\n const { Live } = Components;\n const { root } = Splide;\n\n /**\n * The throttled function to update arrows.\n */\n const throttledUpdateArrows = Throttle( Components.Arrows.update, 500 );\n\n /**\n * Keeps the latest options.\n */\n let autoScrollOptions: AutoScrollOptions = {};\n\n /**\n * The RequestInterval object.\n */\n let interval: RequestIntervalInterface;\n\n /**\n * Turns into `true` when the auto scroll is manually paused.\n */\n let stopped: boolean;\n\n /**\n * Indicates whether the mouse cursor is on the slider or not.\n */\n let hovered: boolean;\n\n /**\n * Indicates whether the slider contains active element or not.\n */\n let focused: boolean;\n\n /**\n * Indicates whether the slider is currently busy or not.\n */\n let busy: boolean;\n\n /**\n * Keeps the current position to restore.\n */\n let currPosition: number;\n\n /**\n * Keeps the time when play() is called to adjust position calculations in case of fpsLock option\n */\n let baseTime: number;\n\n /**\n * Keeps the position at which play() is called to adjust position calculations in case of fpsLock option\n */\n let basePosition: number;\n\n /**\n * Keeps the last render time to skip frames in case it is called to frequent for a specified fpsLock value\n */\n let lastRenderTime: number | undefined;\n\n /**\n * Keeps the amount of ms that should pass between renders to reduce extra calculations when fpsLock is set\n */\n let msPerFrame: number | undefined;\n\n /**\n * Sets up the component.\n */\n function setup(): void {\n const { autoScroll } = options;\n autoScrollOptions = assign( {}, DEFAULTS, isObject( autoScroll ) ? autoScroll : {} );\n msPerFrame = autoScrollOptions.fpsLock ? ( 1000 / autoScrollOptions.fpsLock ) : undefined;\n }\n\n /**\n * Called when the component is mounted.\n */\n function mount(): void {\n if ( ! Splide.is( FADE ) ) {\n if ( ! interval && options.autoScroll !== false ) {\n interval = RequestInterval( 0, move );\n listen();\n autoStart();\n }\n }\n }\n\n /**\n * Destroys the component.\n */\n function destroy(): void {\n if ( interval ) {\n interval.cancel();\n interval = null;\n\n currPosition = undefined;\n\n off( [ EVENT_MOVE, EVENT_DRAG, EVENT_SCROLL, EVENT_MOVED, EVENT_SCROLLED ] );\n unbind( root, 'mouseenter mouseleave focusin focusout' );\n unbind( toggle, 'click' );\n }\n }\n\n /**\n * Listens to some events.\n */\n function listen(): void {\n if ( autoScrollOptions.pauseOnHover ) {\n bind( root, 'mouseenter mouseleave', e => {\n hovered = e.type === 'mouseenter';\n autoToggle();\n } );\n }\n\n if ( autoScrollOptions.pauseOnFocus ) {\n bind( root, 'focusin focusout', e => {\n focused = e.type === 'focusin';\n autoToggle();\n } );\n }\n\n if ( autoScrollOptions.useToggleButton ) {\n bind( toggle, 'click', () => {\n stopped ? play() : pause();\n } );\n }\n\n on( EVENT_UPDATED, update );\n\n on( [ EVENT_MOVE, EVENT_DRAG, EVENT_SCROLL ], () => {\n busy = true;\n pause( false );\n } );\n\n on( [ EVENT_MOVED, EVENT_DRAGGED, EVENT_SCROLLED ], () => {\n busy = false;\n autoToggle();\n } );\n }\n\n /**\n * Called when the slider is updated.\n * Attempts to keep continuous scrolling with the current position\n * since the update event makes the slider jump to the current index.\n */\n function update(): void {\n const { autoScroll } = options;\n\n if ( autoScroll !== false ) {\n autoScrollOptions = assign( {}, autoScrollOptions, isObject( autoScroll ) ? autoScroll : {} );\n mount();\n } else {\n destroy();\n }\n\n if ( interval && ! isUndefined( currPosition ) ) {\n translate( currPosition );\n }\n }\n\n /**\n * Starts scrolling the slider on the proper timing.\n */\n function autoStart(): void {\n if ( autoScrollOptions.autoStart ) {\n if ( document.readyState === 'complete' ) {\n play();\n } else {\n bind( window, 'load', play );\n }\n }\n }\n\n /**\n * Starts auto scroll.\n */\n function play(): void {\n if ( isPaused() ) {\n interval.start( true );\n Live.disable( true );\n focused = hovered = stopped = false;\n updateButton();\n baseTime = Date.now();\n basePosition = getPosition();\n lastRenderTime = undefined;\n }\n }\n\n /**\n * Pauses auto scroll.\n *\n * @param stop - Optional. If `true`, auto scroll will never restart without calling `play()`.\n */\n function pause( stop = true ): void {\n if ( ! stopped ) {\n stopped = stop;\n updateButton();\n\n if ( ! isPaused() ) {\n interval.pause();\n Live.disable( false );\n }\n }\n }\n\n /**\n * Automatically plays or pauses scrolling.\n */\n function autoToggle(): void {\n if ( ! stopped ) {\n hovered || focused || busy ? pause( false ) : play();\n }\n }\n\n /**\n * Called on every animation frame while the auto scroll is active.\n */\n function move(): void {\n const position = getPosition();\n const destination = computeDestination( position );\n\n // null value means this frame should be skipped\n if (destination === null) return;\n\n if ( position !== destination ) {\n translate( destination );\n updateIndex( ( currPosition = getPosition() ) );\n } else {\n pause( false );\n\n if ( autoScrollOptions.rewind ) {\n Splide.go( autoScrollOptions.speed > 0 ? 0 : Components.Controller.getEnd() );\n }\n }\n\n throttledUpdateArrows();\n }\n\n /**\n * Returns the position to move.\n *\n * @param position - The current position.\n *\n * @return A computed destination or null if frame transition should be skipped\n */\n function computeDestination( position: number ): number | null {\n const currentTimestamp = Date.now();\n if (autoScrollOptions.fpsLock\n // always render first frame after play()\n && lastRenderTime\n // extra tolerance for a smoother experience\n && (currentTimestamp - lastRenderTime) < msPerFrame / 2) {\n // not enough time has passed since last render and this frame must be skipped\n return null;\n }\n const speed = autoScrollOptions.speed || 1;\n const virtualViewportSize = autoScrollOptions.virtualViewportSize || 1000;\n const realViewportSize = listSize();\n const virtualToRealScale = realViewportSize / virtualViewportSize;\n const speedScale = autoScrollOptions.virtualSpeed ? virtualToRealScale : 1;\n if (autoScrollOptions.fpsLock) {\n const timePassed = currentTimestamp - baseTime;\n const framesPassed = timePassed * autoScrollOptions.fpsLock / 1000.0;\n const expectedPositionAtPassedFrames = orient(framesPassed * speed * speedScale) + basePosition;\n if (expectedPositionAtPassedFrames !== position) {\n position = expectedPositionAtPassedFrames;\n lastRenderTime = currentTimestamp;\n } else {\n // position change is too small and this frame must be skipped\n return null;\n }\n } else {\n position += orient(speed * speedScale);\n }\n\n if ( Splide.is( SLIDE ) ) {\n position = clamp( position, getLimit( false ), getLimit( true ) );\n }\n\n return position;\n }\n\n /**\n * Updates index and notify them to other components.\n * - Slides: Activity and visibility\n * - Pagination: Updates the active item\n * - LazyLoad: Load close images if necessary\n *\n * @param position - A current position.\n */\n function updateIndex( position: number ): void {\n const { length } = Splide;\n const index = ( toIndex( position ) + length ) % length;\n\n if ( index !== getIndex() ) {\n setIndex( index );\n Components.Slides.update();\n Components.Pagination.update();\n options.lazyLoad === 'nearby' && Components.LazyLoad.check();\n }\n }\n\n /**\n * Updates the toggle button status.\n */\n function updateButton(): void {\n if ( toggle ) {\n const key = stopped ? 'startScroll' : 'pauseScroll';\n toggleClass( toggle, CLASS_ACTIVE, ! stopped );\n setAttribute( toggle, 'aria-label', options.i18n[ key ] || I18N[ key ] );\n }\n }\n\n /**\n * Checks if the auto scroll is paused or not.\n *\n * @return `true` if it's paused, or otherwise `false`.\n */\n function isPaused(): boolean {\n return ! interval || interval.isPaused();\n }\n\n return {\n setup,\n mount,\n destroy,\n play,\n pause,\n isPaused,\n };\n}\n","import { AutoScroll } from '../extensions';\n\n\ndeclare global {\n interface Window {\n splide: Record;\n }\n}\n\nif ( typeof window !== 'undefined' ) {\n window.splide = window.splide || {};\n window.splide.Extensions = window.splide.Extensions || {};\n window.splide.Extensions.AutoScroll = AutoScroll;\n}\n"],"names":["empty","array","length","slice","arrayLike","start","end","Array","prototype","call","apply","func","bind","concat","arguments","raf","requestAnimationFrame","typeOf","type","subject","isArray","toArray","value","forEach","values","iteratee","ownKeys","Object","keys","forOwn","object","right","reverse","i","key","assign","source","min","Math","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_MOVE","EVENT_MOVED","EVENT_UPDATED","EVENT_DRAG","EVENT_DRAGGED","EVENT_SCROLL","EVENT_SCROLLED","EVENT_DESTROY","EventInterface","Splide2","bus","createDocumentFragment","binder","on","join","emit","off","RequestInterval","interval","onInterval","onUpdate","limit","now","Date","startTime","rate","id","paused","count","update","pause","resume","cancel","rewind","cancelAnimationFrame","set","time","isPaused","Throttle","duration","throttled","CLASS_ACTIVE","SLIDE","FADE","isObject","isNull","isUndefined","toggleClass","elm","classes","add","name","classList","removeAttribute","elms","attrs","attr","setAttribute","value2","String","max","floor","ceil","abs","clamp","number","x","y","minimum","maximum","DEFAULTS","speed","autoStart","pauseOnHover","pauseOnFocus","I18N","startScroll","pauseScroll","AutoScroll","Splide","Components","Move","translate","getPosition","toIndex","getLimit","Controller","setIndex","getIndex","orient","Direction","toggle","Elements","listSize","Layout","Live","root","throttledUpdateArrows","Arrows","autoScrollOptions","stopped","hovered","focused","busy","currPosition","baseTime","basePosition","lastRenderTime","msPerFrame","setup","autoScroll","fpsLock","mount","is","move","listen","autoToggle","useToggleButton","play","readyState","window","disable","updateButton","stop","position","destination","computeDestination","updateIndex","go","getEnd","currentTimestamp","virtualViewportSize","realViewportSize","virtualToRealScale","speedScale","virtualSpeed","timePassed","framesPassed","expectedPositionAtPassedFrames","index","Slides","Pagination","lazyLoad","LazyLoad","check","i18n","splide","Extensions"],"mappings":"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"} \ No newline at end of file diff --git a/dist/js/splide-extension-auto-scroll.min.js b/dist/js/splide-extension-auto-scroll.min.js index d72a504..e063a46 100644 --- a/dist/js/splide-extension-auto-scroll.min.js +++ b/dist/js/splide-extension-auto-scroll.min.js @@ -2,5 +2,5 @@ * @splidejs/splide-extension-auto-scroll * Version : 0.5.3 * License : MIT - * Copyright: 2022 Naotoshi Fujita - */(function(S){typeof define=="function"&&define.amd?define(S):S()})(function(){"use strict";function S(n){n.length=0}function D(n,t,r){return Array.prototype.slice.call(n,t,r)}function _(n){return n.bind.apply(n,[null].concat(D(arguments,1)))}function q(n){return requestAnimationFrame(n)}function C(n,t){return typeof t===n}var z=Array.isArray;_(C,"function"),_(C,"string"),_(C,"undefined");function B(n){return z(n)?n:[n]}function H(n,t){B(n).forEach(t)}var cn=Object.keys;function sn(n,t,r){if(n){var e=cn(n);e=r?e.reverse():e;for(var o=0;o=1&&(t(),c=o(),e&&++d>=e))return l();q(f)}}function v(E){!E&&w(),c=o()-(E?u*n:0),a=!1,q(f)}function l(){a=!0}function h(){c=o(),u=0,r&&r(u)}function w(){s&&cancelAnimationFrame(s),u=0,s=0,a=!0}function M(E){n=E}function N(){return a}return{start:v,rewind:h,pause:l,cancel:w,set:M,isPaused:N}}function An(n,t){var r;function e(){r||(r=Y(t||0,function(){n(),r=null},null,1),r.start())}return e}var gn="is-active",wn="slide",yn="fade";function X(n,t,r){return Array.prototype.slice.call(n,t,r)}function V(n){return n.bind.apply(n,[null].concat(X(arguments,1)))}function L(n,t){return typeof t===n}function $(n){return!Z(n)&&L("object",n)}var bn=Array.isArray;V(L,"function"),V(L,"string");var Sn=V(L,"undefined");function Z(n){return n===null}function _n(n){return bn(n)?n:[n]}function O(n,t){_n(n).forEach(t)}function Ln(n,t,r){n&&O(t,function(e){e&&n.classList[r?"add":"remove"](e)})}var On=Object.keys;function j(n,t,r){if(n){var e=On(n);e=r?e.reverse():e;for(var o=0;o0?0:t.Controller.getEnd())),Mn()}function Rn(i){var g=p.speed||1;return i+=N(g),n.is(wn)&&(i=Dn(i,l(!1),l(!0))),i}function Gn(i){var g=n.length,fn=(v(i)+g)%g;fn!==M()&&(w(fn),t.Slides.update(),t.Pagination.update(),r.lazyLoad==="nearby"&&t.LazyLoad.check())}function an(){if(E){var i=A?"startScroll":"pauseScroll";Ln(E,gn,!A),nn(E,"aria-label",r.i18n[i]||Vn[i])}}function G(){return!m||m.isPaused()}return{setup:Nn,mount:on,destroy:un,play:y,pause:b,isPaused:G}}typeof window<"u"&&(window.splide=window.splide||{},window.splide.Extensions=window.splide.Extensions||{},window.splide.Extensions.AutoScroll=$n)}); + * Copyright: 2023 Naotoshi Fujita + */(function(S){typeof define=="function"&&define.amd?define(S):S()})(function(){"use strict";function S(n){n.length=0}function $(n,t,e){return Array.prototype.slice.call(n,t,e)}function _(n){return n.bind.apply(n,[null].concat($(arguments,1)))}function H(n){return requestAnimationFrame(n)}function N(n,t){return typeof t===n}var K=Array.isArray;_(N,"function"),_(N,"string"),_(N,"undefined");function B(n){return K(n)?n:[n]}function Y(n,t){B(n).forEach(t)}var En=Object.keys;function mn(n,t,e){if(n){var r=En(n);r=e?r.reverse():r;for(var o=0;o=1&&(t(),c=o(),r&&++d>=r))return v();H(f)}}function p(E){!E&&y(),c=o()-(E?u*n:0),a=!1,H(f)}function v(){a=!0}function h(){c=o(),u=0,e&&e(u)}function y(){s&&cancelAnimationFrame(s),u=0,s=0,a=!0}function x(E){n=E}function T(){return a}return{start:p,rewind:h,pause:v,cancel:y,set:x,isPaused:T}}function Sn(n,t){var e;function r(){e||(e=U(t||0,function(){n(),e=null},null,1),e.start())}return r}var _n="is-active",Dn="slide",On="fade";function j(n,t,e){return Array.prototype.slice.call(n,t,e)}function I(n){return n.bind.apply(n,[null].concat(j(arguments,1)))}function D(n,t){return typeof t===n}function M(n){return!k(n)&&D("object",n)}var Tn=Array.isArray;I(D,"function"),I(D,"string");var Cn=I(D,"undefined");function k(n){return n===null}function Vn(n){return Tn(n)?n:[n]}function O(n,t){Vn(n).forEach(t)}function $n(n,t,e){n&&O(t,function(r){r&&n.classList[e?"add":"remove"](r)})}var Nn=Object.keys;function nn(n,t,e){if(n){var r=Nn(n);r=e?r.reverse():r;for(var o=0;o0?0:t.Controller.getEnd())),Rn())}function Yn(i){var w=Date.now();if(l.fpsLock&&V&&w-V