{"version":3,"file":"splide-extension-grid.min.js","sources":["../../node_modules/@splidejs/splide/dist/js/splide.esm.js","../../node_modules/@splidejs/splide/dist/js/utils/splide-utils.esm.js","../../src/js/constants/classes.ts","../../src/js/constants/defaults.ts","../../src/js/extensions/Grid/Dimension.ts","../../src/js/extensions/Grid/Layout.ts","../../src/js/extensions/Grid/Grid.ts","../../src/js/build/default.ts"],"sourcesContent":["function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\n\n/*!\n * Splide.js\n * Version : 4.0.7\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 focusableNodes = queryAll(slide, options.focusableNodes || \"\");\n var destroyed;\n\n function mount() {\n if (!isClone) {\n slide.id = root.id + \"-slide\" + pad(index + 1);\n setAttribute(slide, ROLE, pagination ? \"tabpanel\" : \"group\");\n setAttribute(slide, ARIA_ROLEDESCRIPTION, i18n.slide);\n setAttribute(slide, ARIA_LABEL, label || format(i18n.slideLabel, [index + 1, Splide2.length]));\n }\n\n listen();\n }\n\n function listen() {\n bind(slide, \"click\", apply(emit, EVENT_CLICK, self));\n bind(slide, \"keydown\", apply(emit, EVENT_SLIDE_KEYDOWN, self));\n on([EVENT_MOVED, EVENT_SHIFTED, EVENT_SCROLLED], update);\n on(EVENT_NAVIGATION_MOUNTED, initNavigation);\n\n if (updateOnMove) {\n on(EVENT_MOVE, onMove);\n }\n }\n\n function destroy() {\n destroyed = true;\n event.destroy();\n removeClass(slide, STATUS_CLASSES);\n removeAttribute(slide, ALL_ATTRIBUTES);\n setAttribute(slide, \"style\", styles);\n setAttribute(slide, ARIA_LABEL, label || \"\");\n }\n\n function initNavigation() {\n var controls = Splide2.splides.map(function (target) {\n var Slide2 = target.splide.Components.Slides.getAt(index);\n return Slide2 ? Slide2.slide.id : \"\";\n }).join(\" \");\n setAttribute(slide, ARIA_LABEL, format(i18n.slideX, (isClone ? slideIndex : index) + 1));\n setAttribute(slide, ARIA_CONTROLS, controls);\n setAttribute(slide, ROLE, slideFocus ? \"button\" : \"\");\n slideFocus && removeAttribute(slide, ARIA_ROLEDESCRIPTION);\n }\n\n function onMove() {\n if (!destroyed) {\n update();\n }\n }\n\n function update() {\n if (!destroyed) {\n var curr = Splide2.index;\n updateActivity();\n updateVisibility();\n toggleClass(slide, CLASS_PREV, index === curr - 1);\n toggleClass(slide, CLASS_NEXT, index === curr + 1);\n }\n }\n\n function updateActivity() {\n var active = isActive();\n\n if (active !== hasClass(slide, CLASS_ACTIVE)) {\n toggleClass(slide, CLASS_ACTIVE, active);\n setAttribute(slide, ARIA_CURRENT, isNavigation && active || \"\");\n emit(active ? EVENT_ACTIVE : EVENT_INACTIVE, self);\n }\n }\n\n function updateVisibility() {\n var visible = isVisible();\n var hidden = !visible && (!isActive() || isClone);\n\n if (!Splide2.state.is([MOVING, SCROLLING])) {\n setAttribute(slide, ARIA_HIDDEN, hidden || \"\");\n }\n\n setAttribute(focusableNodes, TAB_INDEX, hidden ? -1 : \"\");\n\n if (slideFocus) {\n setAttribute(slide, TAB_INDEX, hidden ? -1 : 0);\n }\n\n if (visible !== hasClass(slide, CLASS_VISIBLE)) {\n toggleClass(slide, CLASS_VISIBLE, visible);\n emit(visible ? EVENT_VISIBLE : EVENT_HIDDEN, self);\n }\n\n if (!visible && document.activeElement === slide) {\n var Slide2 = Components.Slides.getAt(Splide2.index);\n Slide2 && focus(Slide2.slide);\n }\n }\n\n function style$1(prop, value, useContainer) {\n style(useContainer && container || slide, prop, value);\n }\n\n function isActive() {\n var curr = Splide2.index;\n return curr === index || options.cloneStatus && curr === slideIndex;\n }\n\n function isVisible() {\n if (Splide2.is(FADE)) {\n return isActive();\n }\n\n var trackRect = rect(Components.Elements.track);\n var slideRect = rect(slide);\n var left = resolve(\"left\", 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 on([EVENT_MOUNTED, EVENT_REFRESH], function () {\n Slides2.sort(function (Slide1, Slide2) {\n return Slide1.index - Slide2.index;\n });\n });\n }\n\n function init() {\n slides.forEach(function (slide, index) {\n register(slide, index, -1);\n });\n }\n\n function destroy() {\n forEach$1(function (Slide2) {\n Slide2.destroy();\n });\n empty(Slides2);\n }\n\n function update() {\n forEach$1(function (Slide2) {\n Slide2.update();\n });\n }\n\n function register(slide, index, slideIndex) {\n var object = Slide$1(Splide2, index, slideIndex, slide);\n object.mount();\n Slides2.push(object);\n }\n\n function get(excludeClones) {\n return excludeClones ? filter(function (Slide2) {\n return !Slide2.isClone;\n }) : Slides2;\n }\n\n function getIn(page) {\n var Controller = Components2.Controller;\n var index = Controller.toIndex(page);\n var max = Controller.hasFocus() ? 1 : options.perPage;\n return filter(function (Slide2) {\n return between(Slide2.index, index, index + max - 1);\n });\n }\n\n function getAt(index) {\n return filter(index)[0];\n }\n\n function add(items, index) {\n forEach(items, function (slide) {\n if (isString(slide)) {\n slide = parseHtml(slide);\n }\n\n if (isHTMLElement(slide)) {\n var ref = slides[index];\n ref ? before(slide, ref) : append(list, slide);\n addClass(slide, options.classes.slide);\n observeImages(slide, apply(emit, EVENT_RESIZE));\n }\n });\n emit(EVENT_REFRESH);\n }\n\n function remove$1(matcher) {\n remove(filter(matcher).map(function (Slide2) {\n return Slide2.slide;\n }));\n emit(EVENT_REFRESH);\n }\n\n function forEach$1(iteratee, excludeClones) {\n get(excludeClones).forEach(iteratee);\n }\n\n function filter(matcher) {\n return Slides2.filter(isFunction(matcher) ? matcher : function (Slide2) {\n return isString(matcher) ? matches(Slide2.slide, matcher) : includes(toArray(matcher), Slide2.index);\n });\n }\n\n function style(prop, value, useContainer) {\n forEach$1(function (Slide2) {\n Slide2.style(prop, value, useContainer);\n });\n }\n\n function observeImages(elm, callback) {\n var images = queryAll(elm, \"img\");\n var length = images.length;\n\n if (length) {\n images.forEach(function (img) {\n bind(img, \"load error\", function () {\n if (! --length) {\n callback();\n }\n });\n });\n } else {\n callback();\n }\n }\n\n function getLength(excludeClones) {\n return excludeClones ? slides.length : Slides2.length;\n }\n\n function isEnough() {\n return Slides2.length > options.perPage;\n }\n\n return {\n mount: mount,\n destroy: destroy,\n update: update,\n register: register,\n get: get,\n getIn: getIn,\n getAt: getAt,\n add: add,\n remove: remove$1,\n forEach: forEach$1,\n filter: filter,\n style: style,\n getLength: getLength,\n isEnough: isEnough\n };\n}\n\nfunction Layout(Splide2, Components2, options) {\n var _EventInterface3 = EventInterface(Splide2),\n on = _EventInterface3.on,\n bind = _EventInterface3.bind,\n emit = _EventInterface3.emit;\n\n var Slides = Components2.Slides;\n var resolve = Components2.Direction.resolve;\n var _Components2$Elements2 = Components2.Elements,\n root = _Components2$Elements2.root,\n track = _Components2$Elements2.track,\n list = _Components2$Elements2.list;\n var getAt = Slides.getAt,\n styleSlides = Slides.style;\n var vertical;\n var rootRect;\n\n function mount() {\n init();\n bind(window, \"resize load\", Throttle(apply(emit, EVENT_RESIZE)));\n on([EVENT_UPDATED, EVENT_REFRESH], init);\n on(EVENT_RESIZE, resize);\n }\n\n function init() {\n rootRect = null;\n vertical = options.direction === TTB;\n style(root, \"maxWidth\", unit(options.width));\n style(track, resolve(\"paddingLeft\"), cssPadding(false));\n style(track, resolve(\"paddingRight\"), cssPadding(true));\n resize();\n }\n\n function resize() {\n var newRect = rect(root);\n\n if (!rootRect || rootRect.width !== newRect.width || rootRect.height !== newRect.height) {\n style(track, \"height\", cssTrackHeight());\n styleSlides(resolve(\"marginRight\"), unit(options.gap));\n styleSlides(\"width\", cssSlideWidth());\n styleSlides(\"height\", cssSlideHeight(), true);\n rootRect = newRect;\n emit(EVENT_RESIZED);\n }\n }\n\n function cssPadding(right) {\n var padding = options.padding;\n var prop = resolve(right ? \"right\" : \"left\");\n return padding && unit(padding[prop] || (isObject(padding) ? 0 : padding)) || \"0px\";\n }\n\n function cssTrackHeight() {\n var height = \"\";\n\n if (vertical) {\n height = cssHeight();\n assert(height, \"height or heightRatio is missing.\");\n height = \"calc(\" + height + \" - \" + cssPadding(false) + \" - \" + cssPadding(true) + \")\";\n }\n\n return height;\n }\n\n function cssHeight() {\n return unit(options.height || rect(list).width * options.heightRatio);\n }\n\n function cssSlideWidth() {\n return options.autoWidth ? null : unit(options.fixedWidth) || (vertical ? \"\" : cssSlideSize());\n }\n\n function cssSlideHeight() {\n return unit(options.fixedHeight) || (vertical ? options.autoHeight ? null : cssSlideSize() : cssHeight());\n }\n\n function cssSlideSize() {\n var gap = unit(options.gap);\n return \"calc((100%\" + (gap && \" + \" + gap) + \")/\" + (options.perPage || 1) + (gap && \" - \" + gap) + \")\";\n }\n\n function listSize() {\n return rect(list)[resolve(\"width\")];\n }\n\n function slideSize(index, withoutGap) {\n var Slide = getAt(index || 0);\n return Slide ? rect(Slide.slide)[resolve(\"width\")] + (withoutGap ? 0 : getGap()) : 0;\n }\n\n function totalSize(index, withoutGap) {\n var Slide = getAt(index);\n\n if (Slide) {\n var right = rect(Slide.slide)[resolve(\"right\")];\n var left = rect(list)[resolve(\"left\")];\n return abs(right - left) + (withoutGap ? 0 : getGap());\n }\n\n return 0;\n }\n\n function sliderSize() {\n return totalSize(Splide2.length - 1, true) - totalSize(-1, true);\n }\n\n function getGap() {\n var Slide = getAt(0);\n return Slide && parseFloat(style(Slide.slide, resolve(\"marginRight\"))) || 0;\n }\n\n function getPadding(right) {\n return parseFloat(style(track, resolve(\"padding\" + (right ? \"Right\" : \"Left\")))) || 0;\n }\n\n return {\n mount: mount,\n listSize: listSize,\n slideSize: slideSize,\n sliderSize: sliderSize,\n totalSize: totalSize,\n getPadding: getPadding\n };\n}\n\nvar MULTIPLIER = 2;\n\nfunction Clones(Splide2, Components2, options) {\n var _EventInterface4 = EventInterface(Splide2),\n on = _EventInterface4.on,\n emit = _EventInterface4.emit;\n\n var Elements = Components2.Elements,\n Slides = Components2.Slides;\n var resolve = Components2.Direction.resolve;\n var clones = [];\n var cloneCount;\n\n function mount() {\n init();\n on(EVENT_REFRESH, destroy);\n on(EVENT_REFRESH, init);\n on([EVENT_UPDATED, EVENT_RESIZE], observe);\n }\n\n function init() {\n if (cloneCount = computeCloneCount()) {\n generate(cloneCount);\n emit(EVENT_RESIZE);\n }\n }\n\n function destroy() {\n remove(clones);\n empty(clones);\n }\n\n function observe() {\n if (cloneCount < computeCloneCount()) {\n emit(EVENT_REFRESH);\n }\n }\n\n function generate(count) {\n var slides = Slides.get().slice();\n var length = slides.length;\n\n if (length) {\n while (slides.length < count) {\n push(slides, slides);\n }\n\n push(slides.slice(-count), slides.slice(0, count)).forEach(function (Slide, index) {\n var isHead = index < count;\n var clone = cloneDeep(Slide.slide, index);\n isHead ? before(clone, slides[0].slide) : append(Elements.list, clone);\n push(clones, clone);\n Slides.register(clone, index - count + (isHead ? 0 : length), Slide.index);\n });\n }\n }\n\n function cloneDeep(elm, index) {\n var clone = elm.cloneNode(true);\n addClass(clone, options.classes.clone);\n clone.id = Splide2.root.id + \"-clone\" + pad(index + 1);\n return clone;\n }\n\n function computeCloneCount() {\n var clones2 = options.clones;\n\n if (!Splide2.is(LOOP)) {\n clones2 = 0;\n } else if (!clones2) {\n var fixedSize = options[resolve(\"fixedWidth\")] && Components2.Layout.slideSize(0);\n var fixedCount = fixedSize && ceil(rect(Elements.track)[resolve(\"width\")] / fixedSize);\n clones2 = fixedCount || options[resolve(\"autoWidth\")] && Splide2.length || options.perPage * MULTIPLIER;\n }\n\n return clones2;\n }\n\n return {\n mount: mount,\n destroy: destroy\n };\n}\n\nfunction Move(Splide2, Components2, options) {\n var _EventInterface5 = EventInterface(Splide2),\n on = _EventInterface5.on,\n emit = _EventInterface5.emit;\n\n var set = Splide2.state.set;\n var _Components2$Layout = Components2.Layout,\n slideSize = _Components2$Layout.slideSize,\n getPadding = _Components2$Layout.getPadding,\n totalSize = _Components2$Layout.totalSize,\n listSize = _Components2$Layout.listSize,\n sliderSize = _Components2$Layout.sliderSize;\n var _Components2$Directio = Components2.Direction,\n resolve = _Components2$Directio.resolve,\n orient = _Components2$Directio.orient;\n var _Components2$Elements3 = Components2.Elements,\n list = _Components2$Elements3.list,\n track = _Components2$Elements3.track;\n var Transition;\n\n function mount() {\n Transition = Components2.Transition;\n on([EVENT_MOUNTED, EVENT_RESIZED, EVENT_UPDATED, EVENT_REFRESH], reposition);\n }\n\n function reposition() {\n if (!Components2.Controller.isBusy()) {\n Components2.Scroll.cancel();\n jump(Splide2.index);\n Components2.Slides.update();\n }\n }\n\n function move(dest, index, prev, callback) {\n 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()) {\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 userArrows = Elements.arrows,\n track = Elements.track;\n var wrapper = userArrows;\n var prev = Elements.prev;\n var next = Elements.next;\n var created;\n var wrapperClasses;\n var arrows = {};\n\n function mount() {\n init();\n on(EVENT_UPDATED, remount);\n }\n\n function remount() {\n destroy();\n mount();\n }\n\n function init() {\n var enabled = options.arrows;\n\n if (enabled && !(prev && next)) {\n createArrows();\n }\n\n if (prev && next) {\n assign(arrows, {\n prev: prev,\n next: next\n });\n display(wrapper, enabled ? \"\" : \"none\");\n addClass(wrapper, wrapperClasses = CLASS_ARROWS + \"--\" + options.direction);\n\n if (enabled) {\n listen();\n update();\n setAttribute([prev, next], ARIA_CONTROLS, track.id);\n emit(EVENT_ARROWS_MOUNTED, prev, next);\n }\n }\n }\n\n function destroy() {\n event.destroy();\n removeClass(wrapper, wrapperClasses);\n\n if (created) {\n remove(userArrows ? [prev, next] : wrapper);\n prev = next = null;\n } else {\n removeAttribute([prev, next], ALL_ATTRIBUTES);\n }\n }\n\n function listen() {\n on([EVENT_MOVED, EVENT_REFRESH, EVENT_SCROLLED], update);\n bind(next, \"click\", apply(go, \">\"));\n bind(prev, \"click\", apply(go, \"<\"));\n }\n\n function go(control) {\n Controller.go(control, true);\n }\n\n function createArrows() {\n wrapper = userArrows || create(\"div\", classes.arrows);\n prev = createArrow(true);\n next = createArrow(false);\n created = true;\n append(wrapper, [prev, next]);\n !userArrows && before(wrapper, track);\n }\n\n function createArrow(prev2) {\n var arrow = \"\";\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 { CLASS_SLIDE } from '@splidejs/splide';\r\n\r\n\r\nexport const CLASS_SLIDE_ROW = `${ CLASS_SLIDE }__row`;\r\nexport const CLASS_SLIDE_COL = `${ CLASS_SLIDE }--col`;\r\n","import { GridOptions } from '../types/options';\r\n\r\n\r\n/**\r\n * Default options.\r\n *\r\n * @since 0.3.0\r\n */\r\nexport const DEFAULTS: GridOptions = {\r\n rows : 1,\r\n cols : 1,\r\n dimensions: [],\r\n gap : {},\r\n};\r\n","import { isArray, min, assert } from '@splidejs/splide/src/js/utils';\nimport { GridOptions } from '../../types/options';\n\n\n/**\n * The interface for the Dimension subcomponent.\n *\n * @since 0.3.0\n */\nexport interface DimensionComponent {\n get( index: number ): [ number, number ];\n getAt( index: number ): [ number, number ];\n}\n\n/**\n * The subcomponent to calculate dimension at the specific index.\n *\n * @param options - Initialized grid options.\n *\n * @return A Dimension sub-component.\n */\nexport function Dimension( options: GridOptions ): DimensionComponent {\n /**\n * Retrieves the dimension array from options.\n * If it is not available, returns [ [ options.rows, options.cols ] ].\n *\n * @return An array with dimensions.\n */\n function normalize(): [ number, number ][] {\n const { rows, cols, dimensions } = options;\n return isArray( dimensions ) && dimensions.length ? dimensions : [ [ rows, cols ] ];\n }\n\n /**\n * Returns the dimension (`[ row, col ]`) at the specified index.\n *\n * @param index - An index.\n *\n * @return A tuple with rows and cols.\n */\n function get( index: number ): [ number, number ] {\n const dimensions = normalize();\n return dimensions[ min( index, dimensions.length - 1 ) ];\n }\n\n /**\n * Returns the dimension (`[ row, col ]`) where the slide at the specified index should belong.\n *\n * @param index - A slide index (before they are assigned to cols).\n *\n * @return A tuple with rows and cols.\n */\n function getAt( index: number ): [ number, number ] {\n const dimensions = normalize();\n\n let rows, cols, aggregator = 0;\n\n for ( let i = 0; i < dimensions.length; i++ ) {\n const dimension = dimensions[ i ];\n rows = dimension[ 0 ] || 1;\n cols = dimension[ 1 ] || 1;\n\n aggregator += rows * cols;\n\n if ( index < aggregator ) {\n break;\n }\n }\n\n assert( rows && cols, 'Invalid dimension' );\n\n return [ rows, cols ];\n }\n\n return {\n get,\n getAt,\n };\n}\n","import { CLASS_CONTAINER, EVENT_HIDDEN, EVENT_VISIBLE, EventInterface, SlideComponent, Splide } from '@splidejs/splide';\nimport { child, pad, queryAll, removeAttribute, setAttribute, style, unit } from '@splidejs/splide/src/js/utils';\nimport { CLASS_SLIDE_COL, CLASS_SLIDE_ROW } from '../../constants/classes';\nimport { GridOptions } from '../../types/options';\nimport { DimensionComponent } from './Dimension';\n\n\n/**\n * The interface for the Layout subcomponent.\n *\n * @since 0.5.0\n */\nexport interface LayoutComponent {\n mount(): void;\n destroy(): void;\n}\n\n/**\n * The subcomponent to layout grids.\n *\n * @since 0.5.0\n *\n * @param Splide - A Splide instance.\n * @param gridOptions - Initialized grid options.\n * @param Dimension - A Dimension subcomponent.\n *\n * @return A Layout subcomponent object.\n */\nexport function Layout( Splide: Splide, gridOptions: GridOptions, Dimension: DimensionComponent ): LayoutComponent {\n const { on, destroy: destroyEvent } = EventInterface( Splide );\n const { Components, options } = Splide;\n const { resolve } = Components.Direction;\n const { forEach } = Components.Slides;\n\n /**\n * Initializes the component.\n */\n function mount(): void {\n layout();\n\n if ( options.slideFocus ) {\n on( EVENT_VISIBLE, onVisible );\n on( EVENT_HIDDEN, onHidden );\n }\n }\n\n /**\n * Destroys the component.\n */\n function destroy(): void {\n forEach( Slide => {\n const { slide } = Slide;\n toggleTabIndex( slide, false );\n\n getRowsIn( slide ).forEach( cell => {\n removeAttribute( cell, 'style' );\n } );\n\n getColsIn( slide ).forEach( colSlide => {\n cover( colSlide, true );\n removeAttribute( colSlide, 'style' );\n } );\n } );\n\n destroyEvent();\n }\n\n /**\n * Layouts grid elements.\n */\n function layout(): void {\n forEach( Slide => {\n const { slide } = Slide;\n const [ rows, cols ] = Dimension.get( Slide.isClone ? Slide.slideIndex : Slide.index );\n\n layoutRow( rows, slide );\n layoutCol( cols, slide );\n\n getColsIn( Slide.slide ).forEach( ( colSlide, index ) => {\n colSlide.id = `${ Slide.slide.id }-col${ pad( index + 1 ) }`;\n\n if ( Splide.options.cover ) {\n cover( colSlide );\n }\n } );\n } );\n }\n\n /**\n * Layouts row elements by CSS.\n *\n * @param rows - A number of rows.\n * @param slide - A slide element.\n */\n function layoutRow( rows: number, slide: HTMLElement ): void {\n const { row: rowGap } = gridOptions.gap;\n const height = `calc(${ 100 / rows }%${ rowGap ? ` - ${ unit( rowGap ) } * ${ ( rows - 1 ) / rows }` : '' })`;\n\n getRowsIn( slide ).forEach( ( rowElm, index, rowElms ) => {\n style( rowElm, 'height', height );\n style( rowElm, 'display', 'flex' );\n style( rowElm, 'margin', `0 0 ${ unit( rowGap ) } 0` );\n style( rowElm, 'padding', 0 );\n\n if ( index === rowElms.length - 1 ) {\n style( rowElm, 'marginBottom', 0 );\n }\n } );\n }\n\n /**\n * Layouts col elements by CSS.\n *\n * @param cols - A number of cols.\n * @param slide - A slide element.\n */\n function layoutCol( cols: number, slide: HTMLElement ): void {\n const { col: colGap } = gridOptions.gap;\n const width = `calc(${ 100 / cols }%${ colGap ? ` - ${ unit( colGap ) } * ${ ( cols - 1 ) / cols }` : '' })`;\n\n getColsIn( slide ).forEach( ( colElm, index, colElms ) => {\n style( colElm, 'width', width );\n\n if ( index !== colElms.length - 1 ) {\n style( colElm, resolve( 'marginRight' ), unit( colGap ) );\n }\n } );\n }\n\n /**\n * Sets the background image to the col element by its own image element.\n *\n * @param colSlide - A col slide element.\n * @param uncover - Optional. If `true`, reset the cover mode.\n */\n function cover( colSlide: HTMLElement, uncover?: boolean ): void {\n const container = child( colSlide, `.${ CLASS_CONTAINER }` );\n const img = child( container || colSlide, 'img' );\n\n if ( img && img.src ) {\n style( container || colSlide, 'background', uncover ? '' : `center/cover no-repeat url(\"${ img.src }\")` );\n style( img, 'display', uncover ? '' : 'none' );\n }\n }\n\n /**\n * Returns row elements in the provided slide.\n *\n * @param slide - A slide element.\n *\n * @return An array with row elements.\n */\n function getRowsIn( slide: HTMLElement ): HTMLElement[] {\n return queryAll( slide, `.${ CLASS_SLIDE_ROW }` );\n }\n\n /**\n * Returns col elements in the provided slide.\n *\n * @param slide - A slide element.\n *\n * @return An array with col elements.\n */\n function getColsIn( slide: HTMLElement ): HTMLElement[] {\n return queryAll( slide, `.${ CLASS_SLIDE_COL }` );\n }\n\n /**\n * Toggles the tab index of col elements.\n *\n * @param slide - A slide element.\n * @param add - Optional. Determines whether to add or remove tab index.\n */\n function toggleTabIndex( slide: HTMLElement, add?: boolean ): void {\n getColsIn( slide ).forEach( colSlide => {\n setAttribute( colSlide, 'tabindex', add ? 0 : null );\n } );\n }\n\n /**\n * Called when any slide becomes visible.\n *\n * @param Slide - A Slide component.\n */\n function onVisible( Slide: SlideComponent ): void {\n toggleTabIndex( Slide.slide, true );\n }\n\n /**\n * Called when any slide gets hidden.\n *\n * @param Slide - A Slide component.\n */\n function onHidden( Slide: SlideComponent ): void {\n toggleTabIndex( Slide.slide, false );\n }\n\n return {\n mount,\n destroy,\n };\n}\n","import {\n BaseComponent,\n CLASS_ROOT,\n CLASS_SLIDE,\n Components,\n EVENT_REFRESH,\n EVENT_UPDATED,\n EventInterface,\n Options,\n Splide,\n} from '@splidejs/splide';\nimport {\n addClass,\n append,\n assign,\n create,\n empty,\n hasClass,\n isArray,\n omit,\n push,\n remove,\n removeClass,\n} from '@splidejs/splide/src/js/utils';\nimport { CLASS_SLIDE_COL, CLASS_SLIDE_ROW } from '../../constants/classes';\nimport { DEFAULTS } from '../../constants/defaults';\nimport { GridOptions } from '../../types/options';\nimport { Dimension as DimensionConstructor } from './Dimension';\nimport { Layout as LayoutConstructor } from './Layout';\n\n\n/**\n * Lets the compiler know the Grid component.\n */\ndeclare module '@splidejs/splide' {\n interface Options {\n grid?: GridOptions | null | false;\n }\n\n interface Components {\n Grid?: GridComponent;\n }\n}\n\n/**\n * The interface for the Grid component.\n *\n * @since 0.3.14\n */\nexport interface GridComponent extends BaseComponent {\n}\n\n/**\n * The extension for the grid slider.\n *\n * @since 0.5.0\n *\n * @param Splide - A Splide instance.\n * @param Components - A collection of components.\n * @param options - Options.\n *\n * @return A Video component object.\n */\nexport function Grid( Splide: Splide, Components: Components, options: Options ): GridComponent {\n const { on, off } = EventInterface( Splide );\n const { Elements } = Components;\n\n /**\n * Options for the extension.\n */\n const gridOptions: GridOptions = {};\n\n /**\n * The Dimension subcomponent.\n */\n const Dimension = DimensionConstructor( gridOptions );\n\n /**\n * The Layout subcomponent.\n */\n const Layout = LayoutConstructor( Splide, gridOptions, Dimension );\n\n /**\n * The modifier class to add to the root element.\n */\n const modifier = `${ CLASS_ROOT }--grid`;\n\n /**\n * Keeps original slides for restoration.\n */\n const originalSlides: HTMLElement[] = [];\n\n /**\n * Called when the extension is mounted.\n */\n function mount(): void {\n init();\n on( EVENT_UPDATED, init );\n }\n\n /**\n * Initializes the extension when the slider gets active, or options are updated.\n */\n function init(): void {\n omit( gridOptions );\n assign( gridOptions, DEFAULTS, options.grid || {} );\n\n if ( shouldBuild() ) {\n destroy();\n push( originalSlides, Elements.slides );\n addClass( Splide.root, modifier );\n append( Elements.list, build() );\n off( EVENT_REFRESH );\n on( EVENT_REFRESH, layout );\n refresh();\n } else if ( isActive() ) {\n destroy();\n refresh();\n }\n }\n\n /**\n * Destroys the extension.\n * Deconstructs grid and restores original slides to the list element.\n */\n function destroy(): void {\n if ( isActive() ) {\n const { slides } = Elements;\n\n Layout.destroy();\n\n originalSlides.forEach( slide => {\n removeClass( slide, CLASS_SLIDE_COL );\n append( Elements.list, slide );\n } );\n\n remove( slides );\n removeClass( Splide.root, modifier );\n empty( slides );\n push( slides, originalSlides );\n empty( originalSlides );\n off( EVENT_REFRESH );\n }\n }\n\n /**\n * Requests to refresh the slider.\n */\n function refresh(): void {\n Splide.refresh();\n }\n\n /**\n * Layouts row and col slides via the Layout subcomponent.\n * The extension calls this after requesting ths slider to refresh it.\n */\n function layout(): void {\n if ( isActive() ) {\n Layout.mount();\n }\n }\n\n /**\n * Builds grid and returns created outer slide elements.\n *\n * @return An array with outer slides.\n */\n function build(): HTMLElement[] {\n const outerSlides: HTMLElement[] = [];\n\n let row = 0, col = 0;\n let outerSlide: HTMLElement, rowSlide: HTMLElement;\n\n originalSlides.forEach( ( slide, index ) => {\n const [ rows, cols ] = Dimension.getAt( index );\n\n if ( ! col ) {\n if ( ! row ) {\n outerSlide = create( slide.tagName, CLASS_SLIDE );\n outerSlides.push( outerSlide );\n }\n\n rowSlide = buildRow( rows, slide, outerSlide );\n }\n\n buildCol( cols, slide, rowSlide );\n\n if ( ++col >= cols ) {\n col = 0;\n row = ++row >= rows ? 0 : row;\n }\n } );\n\n return outerSlides;\n }\n\n /**\n * Creates an element for a row.\n *\n * @param rows - A number of rows.\n * @param slide - An original slide element.\n * @param outerSlide - An outer slide element.\n *\n * A created element.\n */\n function buildRow( rows: number, slide: HTMLElement, outerSlide: HTMLElement ): HTMLElement {\n const tag = slide.tagName.toLowerCase() === 'li' ? 'ul' : 'div';\n return create( tag, CLASS_SLIDE_ROW, outerSlide );\n }\n\n /**\n * Creates an element for a col.\n * Currently, uses the original slide element itself.\n *\n * @param cols - A number of cols.\n * @param slide - An original slide element.\n * @param rowSlide - A row slide element.\n *\n * @return A created element.\n */\n function buildCol( cols: number, slide: HTMLElement, rowSlide: HTMLElement ): HTMLElement {\n addClass( slide, CLASS_SLIDE_COL );\n append( rowSlide, slide );\n return slide;\n }\n\n /**\n * Tells if the extension should make grids or not by checking the current options.\n *\n * @return `true` if the extension should init grids, or otherwise `false`.\n */\n function shouldBuild(): boolean {\n if ( options.grid ) {\n const { rows, cols, dimensions } = gridOptions;\n return rows > 1 || cols > 1 || ( isArray( dimensions ) && dimensions.length > 0 );\n }\n\n return false;\n }\n\n /**\n * Checks if the grid mode is active or not.\n *\n * @return `true` if the grid extension is active, or `false` if not.\n */\n function isActive(): boolean {\n return hasClass( Splide.root, modifier );\n }\n\n return {\n mount,\n destroy,\n };\n}\n","import { Grid } from '../extensions';\n\n\ndeclare global {\n interface Window {\n splide: Record;\n }\n}\n\nif ( typeof window !== 'undefined' ) {\n window.splide = window.splide || {};\n window.splide.Extensions = window.splide.Extensions || {};\n window.splide.Extensions.Grid = Grid;\n}\n"],"names":["empty","array","length","slice","arrayLike","start","end","Array","prototype","call","apply","func","bind","concat","arguments","typeOf","type","subject","isArray","toArray","value","forEach","values","iteratee","ownKeys","Object","keys","forOwn","object","right","reverse","i","key","assign","source","PROJECT_CODE","EventBinder","listeners","targets","events","callback","options","forEachEvent","target","event","namespace","isEventTarget","remover","removeEventListener","addEventListener","push","unbind","filter","listener","dispatch","detail","e","bubbles","CustomEvent","document","createEvent","initCustomEvent","dispatchEvent","events2","split","eventNS","fragment","destroy","data","EVENT_VISIBLE","EVENT_HIDDEN","EVENT_REFRESH","EVENT_UPDATED","EVENT_DESTROY","EventInterface","Splide2","bus","createDocumentFragment","binder","on","join","emit","off","CLASS_ROOT","CLASS_SLIDE","CLASS_CONTAINER","isObject","isNull","isString","isUndefined","isHTMLElement","HTMLElement","items","toggleClass","elm","classes","add","name","classList","addClass","append","parent","children","appendChild","matches","selector","children2","child","firstElementChild","omit","removeAttribute","elms","attrs","attr","setAttribute","value2","String","create","tag","createElement","style","prop","getComputedStyle","hasClass","className","contains","remove","nodes","node","parentNode","removeChild","queryAll","querySelectorAll","removeClass","unit","assert","condition","message","Error","min","Math","max","floor","ceil","abs","pad","number","CLASS_SLIDE_ROW","CLASS_SLIDE_COL","DEFAULTS","rows","cols","dimensions","gap","Dimension","normalize","get","index","getAt","aggregator","dimension","Layout","Splide","gridOptions","destroyEvent","Components","resolve","Direction","Slides","mount","layout","slideFocus","onVisible","onHidden","Slide","slide","toggleTabIndex","getRowsIn","cell","getColsIn","colSlide","cover","_C$get","isClone","slideIndex","layoutRow","layoutCol","id","rowGap","row","height","rowElm","rowElms","colGap","col","width","colElm","colElms","uncover","container","img","src","Grid","Elements","DimensionConstructor","LayoutConstructor","modifier","originalSlides","init","grid","shouldBuild","slides","root","list","build","refresh","isActive","outerSlides","outerSlide","rowSlide","_S$getAt","tagName","buildRow","buildCol","toLowerCase","window","splide","Extensions"],"mappings":"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"}