/*! UIkit 3.6.22 | https://www.getuikit.com | (c) 2014 - 2021 YOOtheme | MIT License */ (function (global, factory) { typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : typeof define === 'function' && define.amd ? define('uikit', factory) : (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.UIkit = factory()); }(this, (function () { 'use strict'; var objPrototype = Object.prototype; var hasOwnProperty = objPrototype.hasOwnProperty; function hasOwn(obj, key) { return hasOwnProperty.call(obj, key); } var hyphenateRe = /\B([A-Z])/g; var hyphenate = memoize(function (str) { return str .replace(hyphenateRe, '-$1') .toLowerCase(); } ); var camelizeRe = /-(\w)/g; var camelize = memoize(function (str) { return str.replace(camelizeRe, toUpper); } ); var ucfirst = memoize(function (str) { return str.length ? toUpper(null, str.charAt(0)) + str.slice(1) : ''; } ); function toUpper(_, c) { return c ? c.toUpperCase() : ''; } var strPrototype = String.prototype; var startsWithFn = strPrototype.startsWith || function (search) { return this.lastIndexOf(search, 0) === 0; }; function startsWith(str, search) { return startsWithFn.call(str, search); } var endsWithFn = strPrototype.endsWith || function (search) { return this.substr(-search.length) === search; }; function endsWith(str, search) { return endsWithFn.call(str, search); } var arrPrototype = Array.prototype; var includesFn = function (search, i) { return !!~this.indexOf(search, i); }; var includesStr = strPrototype.includes || includesFn; var includesArray = arrPrototype.includes || includesFn; function includes(obj, search) { return obj && (isString(obj) ? includesStr : includesArray).call(obj, search); } var findIndexFn = arrPrototype.findIndex || function (predicate) { var arguments$1 = arguments; for (var i = 0; i < this.length; i++) { if (predicate.call(arguments$1[1], this[i], i, this)) { return i; } } return -1; }; function findIndex(array, predicate) { return findIndexFn.call(array, predicate); } var isArray = Array.isArray; function isFunction(obj) { return typeof obj === 'function'; } function isObject(obj) { return obj !== null && typeof obj === 'object'; } var toString = objPrototype.toString; function isPlainObject(obj) { return toString.call(obj) === '[object Object]'; } function isWindow(obj) { return isObject(obj) && obj === obj.window; } function isDocument(obj) { return nodeType(obj) === 9; } function isNode(obj) { return nodeType(obj) >= 1; } function isElement(obj) { return nodeType(obj) === 1; } function nodeType(obj) { return !isWindow(obj) && isObject(obj) && obj.nodeType; } function isBoolean(value) { return typeof value === 'boolean'; } function isString(value) { return typeof value === 'string'; } function isNumber(value) { return typeof value === 'number'; } function isNumeric(value) { return isNumber(value) || isString(value) && !isNaN(value - parseFloat(value)); } function isEmpty(obj) { return !(isArray(obj) ? obj.length : isObject(obj) ? Object.keys(obj).length : false ); } function isUndefined(value) { return value === void 0; } function toBoolean(value) { return isBoolean(value) ? value : value === 'true' || value === '1' || value === '' ? true : value === 'false' || value === '0' ? false : value; } function toNumber(value) { var number = Number(value); return !isNaN(number) ? number : false; } function toFloat(value) { return parseFloat(value) || 0; } var toArray = Array.from || (function (value) { return arrPrototype.slice.call(value); }); function toNode(element) { return toNodes(element)[0]; } function toNodes(element) { return element && (isNode(element) ? [element] : toArray(element).filter(isNode)) || []; } function toWindow(element) { if (isWindow(element)) { return element; } element = toNode(element); return element ? (isDocument(element) ? element : element.ownerDocument ).defaultView : window; } function toMs(time) { return !time ? 0 : endsWith(time, 'ms') ? toFloat(time) : toFloat(time) * 1000; } function isEqual(value, other) { return value === other || isObject(value) && isObject(other) && Object.keys(value).length === Object.keys(other).length && each(value, function (val, key) { return val === other[key]; }); } function swap(value, a, b) { return value.replace( new RegExp((a + "|" + b), 'g'), function (match) { return match === a ? b : a; } ); } var assign = Object.assign || function (target) { var args = [], len = arguments.length - 1; while ( len-- > 0 ) args[ len ] = arguments[ len + 1 ]; target = Object(target); for (var i = 0; i < args.length; i++) { var source = args[i]; if (source !== null) { for (var key in source) { if (hasOwn(source, key)) { target[key] = source[key]; } } } } return target; }; function last(array) { return array[array.length - 1]; } function each(obj, cb) { for (var key in obj) { if (false === cb(obj[key], key)) { return false; } } return true; } function sortBy$1(array, prop) { return array.slice().sort(function (ref, ref$1) { var propA = ref[prop]; if ( propA === void 0 ) propA = 0; var propB = ref$1[prop]; if ( propB === void 0 ) propB = 0; return propA > propB ? 1 : propB > propA ? -1 : 0; } ); } function uniqueBy(array, prop) { var seen = new Set(); return array.filter(function (ref) { var check = ref[prop]; return seen.has(check) ? false : seen.add(check) || true; } // IE 11 does not return the Set object ); } function clamp(number, min, max) { if ( min === void 0 ) min = 0; if ( max === void 0 ) max = 1; return Math.min(Math.max(toNumber(number) || 0, min), max); } function noop() {} function intersectRect() { var rects = [], len = arguments.length; while ( len-- ) rects[ len ] = arguments[ len ]; return [['bottom', 'top'], ['right', 'left']].every(function (ref) { var minProp = ref[0]; var maxProp = ref[1]; return Math.min.apply(Math, rects.map(function (ref) { var min = ref[minProp]; return min; })) - Math.max.apply(Math, rects.map(function (ref) { var max = ref[maxProp]; return max; })) > 0; } ); } function pointInRect(point, rect) { return point.x <= rect.right && point.x >= rect.left && point.y <= rect.bottom && point.y >= rect.top; } var Dimensions = { ratio: function(dimensions, prop, value) { var obj; var aProp = prop === 'width' ? 'height' : 'width'; return ( obj = {}, obj[aProp] = dimensions[prop] ? Math.round(value * dimensions[aProp] / dimensions[prop]) : dimensions[aProp], obj[prop] = value, obj ); }, contain: function(dimensions, maxDimensions) { var this$1 = this; dimensions = assign({}, dimensions); each(dimensions, function (_, prop) { return dimensions = dimensions[prop] > maxDimensions[prop] ? this$1.ratio(dimensions, prop, maxDimensions[prop]) : dimensions; } ); return dimensions; }, cover: function(dimensions, maxDimensions) { var this$1 = this; dimensions = this.contain(dimensions, maxDimensions); each(dimensions, function (_, prop) { return dimensions = dimensions[prop] < maxDimensions[prop] ? this$1.ratio(dimensions, prop, maxDimensions[prop]) : dimensions; } ); return dimensions; } }; function getIndex(i, elements, current, finite) { if ( current === void 0 ) current = 0; if ( finite === void 0 ) finite = false; elements = toNodes(elements); var length = elements.length; i = isNumeric(i) ? toNumber(i) : i === 'next' ? current + 1 : i === 'previous' ? current - 1 : elements.indexOf(toNode(i)); if (finite) { return clamp(i, 0, length - 1); } i %= length; return i < 0 ? i + length : i; } function memoize(fn) { var cache = Object.create(null); return function (key) { return cache[key] || (cache[key] = fn(key)); }; } function attr(element, name, value) { if (isObject(name)) { for (var key in name) { attr(element, key, name[key]); } return; } if (isUndefined(value)) { element = toNode(element); return element && element.getAttribute(name); } else { toNodes(element).forEach(function (element) { if (isFunction(value)) { value = value.call(element, attr(element, name)); } if (value === null) { removeAttr(element, name); } else { element.setAttribute(name, value); } }); } } function hasAttr(element, name) { return toNodes(element).some(function (element) { return element.hasAttribute(name); }); } function removeAttr(element, name) { element = toNodes(element); name.split(' ').forEach(function (name) { return element.forEach(function (element) { return element.hasAttribute(name) && element.removeAttribute(name); } ); } ); } function data(element, attribute) { for (var i = 0, attrs = [attribute, ("data-" + attribute)]; i < attrs.length; i++) { if (hasAttr(element, attrs[i])) { return attr(element, attrs[i]); } } } /* global DocumentTouch */ var inBrowser = typeof window !== 'undefined'; var isIE = inBrowser && /msie|trident/i.test(window.navigator.userAgent); var isRtl = inBrowser && attr(document.documentElement, 'dir') === 'rtl'; var hasTouchEvents = inBrowser && 'ontouchstart' in window; var hasPointerEvents = inBrowser && window.PointerEvent; var hasTouch = inBrowser && (hasTouchEvents || window.DocumentTouch && document instanceof DocumentTouch || navigator.maxTouchPoints); // IE >=11 var pointerDown = hasPointerEvents ? 'pointerdown' : hasTouchEvents ? 'touchstart' : 'mousedown'; var pointerMove = hasPointerEvents ? 'pointermove' : hasTouchEvents ? 'touchmove' : 'mousemove'; var pointerUp = hasPointerEvents ? 'pointerup' : hasTouchEvents ? 'touchend' : 'mouseup'; var pointerEnter = hasPointerEvents ? 'pointerenter' : hasTouchEvents ? '' : 'mouseenter'; var pointerLeave = hasPointerEvents ? 'pointerleave' : hasTouchEvents ? '' : 'mouseleave'; var pointerCancel = hasPointerEvents ? 'pointercancel' : 'touchcancel'; var voidElements = { area: true, base: true, br: true, col: true, embed: true, hr: true, img: true, input: true, keygen: true, link: true, menuitem: true, meta: true, param: true, source: true, track: true, wbr: true }; function isVoidElement(element) { return toNodes(element).some(function (element) { return voidElements[element.tagName.toLowerCase()]; }); } function isVisible(element) { return toNodes(element).some(function (element) { return element.offsetWidth || element.offsetHeight || element.getClientRects().length; }); } var selInput = 'input,select,textarea,button'; function isInput(element) { return toNodes(element).some(function (element) { return matches(element, selInput); }); } function isFocusable(element) { return isInput(element) || matches(element, 'a[href],button') || hasAttr(element, 'tabindex'); } function parent(element) { element = toNode(element); return element && isElement(element.parentNode) && element.parentNode; } function filter$1(element, selector) { return toNodes(element).filter(function (element) { return matches(element, selector); }); } var elProto = inBrowser ? Element.prototype : {}; var matchesFn = elProto.matches || elProto.webkitMatchesSelector || elProto.msMatchesSelector || noop; function matches(element, selector) { return toNodes(element).some(function (element) { return matchesFn.call(element, selector); }); } var closestFn = elProto.closest || function (selector) { var ancestor = this; do { if (matches(ancestor, selector)) { return ancestor; } } while ((ancestor = parent(ancestor))); }; function closest(element, selector) { if (startsWith(selector, '>')) { selector = selector.slice(1); } return isElement(element) ? closestFn.call(element, selector) : toNodes(element).map(function (element) { return closest(element, selector); }).filter(Boolean); } function within(element, selector) { return !isString(selector) ? element === selector || (isDocument(selector) ? selector.documentElement : toNode(selector)).contains(toNode(element)) // IE 11 document does not implement contains : matches(element, selector) || !!closest(element, selector); } function parents(element, selector) { var elements = []; while ((element = parent(element))) { if (!selector || matches(element, selector)) { elements.push(element); } } return elements; } function children(element, selector) { element = toNode(element); var children = element ? toNodes(element.children) : []; return selector ? filter$1(children, selector) : children; } function index(element, ref) { return ref ? toNodes(element).indexOf(toNode(ref)) : children(parent(element)).indexOf(element); } function query(selector, context) { return toNode(selector) || find(selector, getContext(selector, context)); } function queryAll(selector, context) { var nodes = toNodes(selector); return nodes.length && nodes || findAll(selector, getContext(selector, context)); } function getContext(selector, context) { if ( context === void 0 ) context = document; return isString(selector) && isContextSelector(selector) || isDocument(context) ? context : context.ownerDocument; } function find(selector, context) { return toNode(_query(selector, context, 'querySelector')); } function findAll(selector, context) { return toNodes(_query(selector, context, 'querySelectorAll')); } function _query(selector, context, queryFn) { if ( context === void 0 ) context = document; if (!selector || !isString(selector)) { return null; } selector = selector.replace(contextSanitizeRe, '$1 *'); if (isContextSelector(selector)) { selector = splitSelector(selector).map(function (selector, i) { var ctx = context; if (selector[0] === '!') { var selectors = selector.substr(1).trim().split(' '); ctx = closest(parent(context), selectors[0]); selector = selectors.slice(1).join(' ').trim(); } if (selector[0] === '-') { var selectors$1 = selector.substr(1).trim().split(' '); var prev = (ctx || context).previousElementSibling; ctx = matches(prev, selector.substr(1)) ? prev : null; selector = selectors$1.slice(1).join(' '); } if (!ctx) { return null; } return ((domPath(ctx)) + " " + selector); }).filter(Boolean).join(','); context = document; } try { return context[queryFn](selector); } catch (e) { return null; } } var contextSelectorRe = /(^|[^\\],)\s*[!>+~-]/; var contextSanitizeRe = /([!>+~-])(?=\s+[!>+~-]|\s*$)/g; var isContextSelector = memoize(function (selector) { return selector.match(contextSelectorRe); }); var selectorRe = /.*?[^\\](?:,|$)/g; var splitSelector = memoize(function (selector) { return selector.match(selectorRe).map(function (selector) { return selector.replace(/,$/, '').trim(); } ); } ); function domPath(element) { var names = []; while (element.parentNode) { if (element.id) { names.unshift(("#" + (escape(element.id)))); break; } else { var tagName = element.tagName; if (tagName !== 'HTML') { tagName += ":nth-child(" + (index(element) + 1) + ")"; } names.unshift(tagName); element = element.parentNode; } } return names.join(' > '); } var escapeFn = inBrowser && window.CSS && CSS.escape || function (css) { return css.replace(/([^\x7f-\uFFFF\w-])/g, function (match) { return ("\\" + match); }); }; function escape(css) { return isString(css) ? escapeFn.call(null, css) : ''; } function on() { var args = [], len = arguments.length; while ( len-- ) args[ len ] = arguments[ len ]; var ref = getArgs(args); var targets = ref[0]; var type = ref[1]; var selector = ref[2]; var listener = ref[3]; var useCapture = ref[4]; targets = toEventTargets(targets); if (listener.length > 1) { listener = detail(listener); } if (useCapture && useCapture.self) { listener = selfFilter(listener); } if (selector) { listener = delegate(selector, listener); } useCapture = useCaptureFilter(useCapture); type.split(' ').forEach(function (type) { return targets.forEach(function (target) { return target.addEventListener(type, listener, useCapture); } ); } ); return function () { return off(targets, type, listener, useCapture); }; } function off(targets, type, listener, useCapture) { if ( useCapture === void 0 ) useCapture = false; useCapture = useCaptureFilter(useCapture); targets = toEventTargets(targets); type.split(' ').forEach(function (type) { return targets.forEach(function (target) { return target.removeEventListener(type, listener, useCapture); } ); } ); } function once() { var args = [], len = arguments.length; while ( len-- ) args[ len ] = arguments[ len ]; var ref = getArgs(args); var element = ref[0]; var type = ref[1]; var selector = ref[2]; var listener = ref[3]; var useCapture = ref[4]; var condition = ref[5]; var off = on(element, type, selector, function (e) { var result = !condition || condition(e); if (result) { off(); listener(e, result); } }, useCapture); return off; } function trigger(targets, event, detail) { return toEventTargets(targets).reduce(function (notCanceled, target) { return notCanceled && target.dispatchEvent(createEvent(event, true, true, detail)); } , true); } function createEvent(e, bubbles, cancelable, detail) { if ( bubbles === void 0 ) bubbles = true; if ( cancelable === void 0 ) cancelable = false; if (isString(e)) { var event = document.createEvent('CustomEvent'); // IE 11 event.initCustomEvent(e, bubbles, cancelable, detail); e = event; } return e; } function getArgs(args) { if (isFunction(args[2])) { args.splice(2, 0, false); } return args; } function delegate(selector, listener) { var this$1 = this; return function (e) { var current = selector[0] === '>' ? findAll(selector, e.currentTarget).reverse().filter(function (element) { return within(e.target, element); })[0] : closest(e.target, selector); if (current) { e.current = current; listener.call(this$1, e); } }; } function detail(listener) { return function (e) { return isArray(e.detail) ? listener.apply(void 0, [ e ].concat( e.detail )) : listener(e); }; } function selfFilter(listener) { return function (e) { if (e.target === e.currentTarget || e.target === e.current) { return listener.call(null, e); } }; } function useCaptureFilter(options) { return options && isIE && !isBoolean(options) ? !!options.capture : options; } function isEventTarget(target) { return target && 'addEventListener' in target; } function toEventTarget(target) { return isEventTarget(target) ? target : toNode(target); } function toEventTargets(target) { return isArray(target) ? target.map(toEventTarget).filter(Boolean) : isString(target) ? findAll(target) : isEventTarget(target) ? [target] : toNodes(target); } function isTouch(e) { return e.pointerType === 'touch' || !!e.touches; } function getEventPos(e) { var touches = e.touches; var changedTouches = e.changedTouches; var ref = touches && touches[0] || changedTouches && changedTouches[0] || e; var x = ref.clientX; var y = ref.clientY; return {x: x, y: y}; } /* global setImmediate */ var Promise$1 = inBrowser && window.Promise || PromiseFn; var Deferred = function() { var this$1 = this; this.promise = new Promise$1(function (resolve, reject) { this$1.reject = reject; this$1.resolve = resolve; }); }; /** * Promises/A+ polyfill v1.1.4 (https://github.com/bramstein/promis) */ var RESOLVED = 0; var REJECTED = 1; var PENDING = 2; var async = inBrowser && window.setImmediate || setTimeout; function PromiseFn(executor) { this.state = PENDING; this.value = undefined; this.deferred = []; var promise = this; try { executor( function (x) { promise.resolve(x); }, function (r) { promise.reject(r); } ); } catch (e) { promise.reject(e); } } PromiseFn.reject = function (r) { return new PromiseFn(function (resolve, reject) { reject(r); }); }; PromiseFn.resolve = function (x) { return new PromiseFn(function (resolve, reject) { resolve(x); }); }; PromiseFn.all = function all(iterable) { return new PromiseFn(function (resolve, reject) { var result = []; var count = 0; if (iterable.length === 0) { resolve(result); } function resolver(i) { return function (x) { result[i] = x; count += 1; if (count === iterable.length) { resolve(result); } }; } for (var i = 0; i < iterable.length; i += 1) { PromiseFn.resolve(iterable[i]).then(resolver(i), reject); } }); }; PromiseFn.race = function race(iterable) { return new PromiseFn(function (resolve, reject) { for (var i = 0; i < iterable.length; i += 1) { PromiseFn.resolve(iterable[i]).then(resolve, reject); } }); }; var p = PromiseFn.prototype; p.resolve = function resolve(x) { var promise = this; if (promise.state === PENDING) { if (x === promise) { throw new TypeError('Promise settled with itself.'); } var called = false; try { var then = x && x.then; if (x !== null && isObject(x) && isFunction(then)) { then.call( x, function (x) { if (!called) { promise.resolve(x); } called = true; }, function (r) { if (!called) { promise.reject(r); } called = true; } ); return; } } catch (e) { if (!called) { promise.reject(e); } return; } promise.state = RESOLVED; promise.value = x; promise.notify(); } }; p.reject = function reject(reason) { var promise = this; if (promise.state === PENDING) { if (reason === promise) { throw new TypeError('Promise settled with itself.'); } promise.state = REJECTED; promise.value = reason; promise.notify(); } }; p.notify = function notify() { var this$1 = this; async(function () { if (this$1.state !== PENDING) { while (this$1.deferred.length) { var ref = this$1.deferred.shift(); var onResolved = ref[0]; var onRejected = ref[1]; var resolve = ref[2]; var reject = ref[3]; try { if (this$1.state === RESOLVED) { if (isFunction(onResolved)) { resolve(onResolved.call(undefined, this$1.value)); } else { resolve(this$1.value); } } else if (this$1.state === REJECTED) { if (isFunction(onRejected)) { resolve(onRejected.call(undefined, this$1.value)); } else { reject(this$1.value); } } } catch (e) { reject(e); } } } }); }; p.then = function then(onResolved, onRejected) { var this$1 = this; return new PromiseFn(function (resolve, reject) { this$1.deferred.push([onResolved, onRejected, resolve, reject]); this$1.notify(); }); }; p.catch = function (onRejected) { return this.then(undefined, onRejected); }; function ajax(url, options) { var env = assign({ data: null, method: 'GET', headers: {}, xhr: new XMLHttpRequest(), beforeSend: noop, responseType: '' }, options); return Promise$1.resolve() .then(function () { return env.beforeSend(env); }) .then(function () { return send(url, env); }); } function send(url, env) { return new Promise$1(function (resolve, reject) { var xhr = env.xhr; for (var prop in env) { if (prop in xhr) { try { xhr[prop] = env[prop]; } catch (e) {} } } xhr.open(env.method.toUpperCase(), url); for (var header in env.headers) { xhr.setRequestHeader(header, env.headers[header]); } on(xhr, 'load', function () { if (xhr.status === 0 || xhr.status >= 200 && xhr.status < 300 || xhr.status === 304) { // IE 11 does not support responseType 'json' if (env.responseType === 'json' && isString(xhr.response)) { xhr = assign(copyXhr(xhr), {response: JSON.parse(xhr.response)}); } resolve(xhr); } else { reject(assign(Error(xhr.statusText), { xhr: xhr, status: xhr.status })); } }); on(xhr, 'error', function () { return reject(assign(Error('Network Error'), {xhr: xhr})); }); on(xhr, 'timeout', function () { return reject(assign(Error('Network Timeout'), {xhr: xhr})); }); xhr.send(env.data); }); } function getImage(src, srcset, sizes) { return new Promise$1(function (resolve, reject) { var img = new Image(); img.onerror = function (e) { return reject(e); }; img.onload = function () { return resolve(img); }; sizes && (img.sizes = sizes); srcset && (img.srcset = srcset); img.src = src; }); } function copyXhr(source) { var target = {}; for (var key in source) { target[key] = source[key]; } return target; } function ready(fn) { if (document.readyState !== 'loading') { fn(); return; } var unbind = on(document, 'DOMContentLoaded', function () { unbind(); fn(); }); } function empty(element) { element = $(element); element.innerHTML = ''; return element; } function html(parent, html) { parent = $(parent); return isUndefined(html) ? parent.innerHTML : append(parent.hasChildNodes() ? empty(parent) : parent, html); } function prepend(parent, element) { parent = $(parent); if (!parent.hasChildNodes()) { return append(parent, element); } else { return insertNodes(element, function (element) { return parent.insertBefore(element, parent.firstChild); }); } } function append(parent, element) { parent = $(parent); return insertNodes(element, function (element) { return parent.appendChild(element); }); } function before(ref, element) { ref = $(ref); return insertNodes(element, function (element) { return ref.parentNode.insertBefore(element, ref); }); } function after(ref, element) { ref = $(ref); return insertNodes(element, function (element) { return ref.nextSibling ? before(ref.nextSibling, element) : append(ref.parentNode, element); } ); } function insertNodes(element, fn) { element = isString(element) ? fragment(element) : element; return element ? 'length' in element ? toNodes(element).map(fn) : fn(element) : null; } function remove$1(element) { toNodes(element).forEach(function (element) { return element.parentNode && element.parentNode.removeChild(element); }); } function wrapAll(element, structure) { structure = toNode(before(element, structure)); while (structure.firstChild) { structure = structure.firstChild; } append(structure, element); return structure; } function wrapInner(element, structure) { return toNodes(toNodes(element).map(function (element) { return element.hasChildNodes ? wrapAll(toNodes(element.childNodes), structure) : append(element, structure); } )); } function unwrap(element) { toNodes(element) .map(parent) .filter(function (value, index, self) { return self.indexOf(value) === index; }) .forEach(function (parent) { before(parent, parent.childNodes); remove$1(parent); }); } var fragmentRe = /^\s*<(\w+|!)[^>]*>/; var singleTagRe = /^<(\w+)\s*\/?>(?:<\/\1>)?$/; function fragment(html) { var matches = singleTagRe.exec(html); if (matches) { return document.createElement(matches[1]); } var container = document.createElement('div'); if (fragmentRe.test(html)) { container.insertAdjacentHTML('beforeend', html.trim()); } else { container.textContent = html; } return container.childNodes.length > 1 ? toNodes(container.childNodes) : container.firstChild; } function apply$1(node, fn) { if (!isElement(node)) { return; } fn(node); node = node.firstElementChild; while (node) { var next = node.nextElementSibling; apply$1(node, fn); node = next; } } function $(selector, context) { return !isString(selector) ? toNode(selector) : isHtml(selector) ? toNode(fragment(selector)) : find(selector, context); } function $$(selector, context) { return !isString(selector) ? toNodes(selector) : isHtml(selector) ? toNodes(fragment(selector)) : findAll(selector, context); } function isHtml(str) { return str[0] === '<' || str.match(/^\s*); } function addClass(element) { var args = [], len = arguments.length - 1; while ( len-- > 0 ) args[ len ] = arguments[ len + 1 ]; apply(element, args, 'add'); } function removeClass(element) { var args = [], len = arguments.length - 1; while ( len-- > 0 ) args[ len ] = arguments[ len + 1 ]; apply(element, args, 'remove'); } function removeClasses(element, cls) { attr(element, 'class', function (value) { return (value || '').replace(new RegExp(("\\b" + cls + "\\b"), 'g'), ''); }); } function replaceClass(element) { var args = [], len = arguments.length - 1; while ( len-- > 0 ) args[ len ] = arguments[ len + 1 ]; args[0] && removeClass(element, args[0]); args[1] && addClass(element, args[1]); } function hasClass(element, cls) { var assign; (assign = getClasses(cls), cls = assign[0]); var nodes = toNodes(element); for (var n = 0; n < nodes.length; n++) { if (cls && nodes[n].classList.contains(cls)) { return true; } } return false; } function toggleClass(element, cls, force) { cls = getClasses(cls); var nodes = toNodes(element); for (var n = 0; n < nodes.length; n++) { var list = nodes[n].classList; for (var i = 0; i < cls.length; i++) { if (isUndefined(force)) { list.toggle(cls[i]); } else if (supports.Force) { list.toggle(cls[i], !!force); } else { list[force ? 'add' : 'remove'](cls[i]); } } } } function apply(element, args, fn) { var ref; args = args.reduce(function (args, arg) { return args.concat(getClasses(arg)); }, []); var nodes = toNodes(element); var loop = function ( n ) { if (supports.Multiple) { (ref = nodes[n].classList)[fn].apply(ref, args); } else { args.forEach(function (cls) { return nodes[n].classList[fn](cls); }); } }; for (var n = 0; n < nodes.length; n++) loop( n ); } function getClasses(str) { return String(str).split(/\s|,/).filter(Boolean); } // IE 11 var supports = { get Multiple() { return this.get('Multiple'); }, get Force() { return this.get('Force'); }, get: function(key) { var ref = document.createElement('_'); var classList = ref.classList; classList.add('a', 'b'); classList.toggle('c', false); supports = { Multiple: classList.contains('b'), Force: !classList.contains('c') }; return supports[key]; } }; var cssNumber = { 'animation-iteration-count': true, 'column-count': true, 'fill-opacity': true, 'flex-grow': true, 'flex-shrink': true, 'font-weight': true, 'line-height': true, 'opacity': true, 'order': true, 'orphans': true, 'stroke-dasharray': true, 'stroke-dashoffset': true, 'widows': true, 'z-index': true, 'zoom': true }; function css(element, property, value, priority) { if ( priority === void 0 ) priority = ''; return toNodes(element).map(function (element) { if (isString(property)) { property = propName(property); if (isUndefined(value)) { return getStyle(element, property); } else if (!value && !isNumber(value)) { element.style.removeProperty(property); } else { element.style.setProperty(property, isNumeric(value) && !cssNumber[property] ? (value + "px") : value, priority); } } else if (isArray(property)) { var styles = getStyles(element); return property.reduce(function (props, property) { props[property] = styles[propName(property)]; return props; }, {}); } else if (isObject(property)) { priority = value; each(property, function (value, property) { return css(element, property, value, priority); }); } return element; })[0]; } function getStyles(element, pseudoElt) { return toWindow(element).getComputedStyle(element, pseudoElt); } function getStyle(element, property, pseudoElt) { return getStyles(element, pseudoElt)[property]; } var parseCssVar = memoize(function (name) { /* usage in css: .uk-name:before { content:"xyz" } */ var element = append(document.documentElement, document.createElement('div')); addClass(element, ("uk-" + name)); name = getStyle(element, 'content', ':before').replace(/^["'](.*)["']$/, '$1'); remove$1(element); return name; }); function getCssVar(name) { return !isIE ? getStyles(document.documentElement).getPropertyValue(("--uk-" + name)) : parseCssVar(name); } // https://drafts.csswg.org/cssom/#dom-cssstyledeclaration-setproperty var propName = memoize(function (name) { return vendorPropName(name); }); var cssPrefixes = ['webkit', 'moz', 'ms']; function vendorPropName(name) { name = hyphenate(name); var ref = document.documentElement; var style = ref.style; if (name in style) { return name; } var i = cssPrefixes.length, prefixedName; while (i--) { prefixedName = "-" + (cssPrefixes[i]) + "-" + name; if (prefixedName in style) { return prefixedName; } } } function transition(element, props, duration, timing) { if ( duration === void 0 ) duration = 400; if ( timing === void 0 ) timing = 'linear'; return Promise$1.all(toNodes(element).map(function (element) { return new Promise$1(function (resolve, reject) { for (var name in props) { var value = css(element, name); if (value === '') { css(element, name, value); } } var timer = setTimeout(function () { return trigger(element, 'transitionend'); }, duration); once(element, 'transitionend transitioncanceled', function (ref) { var type = ref.type; clearTimeout(timer); removeClass(element, 'uk-transition'); css(element, { transitionProperty: '', transitionDuration: '', transitionTimingFunction: '' }); type === 'transitioncanceled' ? reject() : resolve(element); }, {self: true}); addClass(element, 'uk-transition'); css(element, assign({ transitionProperty: Object.keys(props).map(propName).join(','), transitionDuration: (duration + "ms"), transitionTimingFunction: timing }, props)); }); } )); } var Transition = { start: transition, stop: function(element) { trigger(element, 'transitionend'); return Promise$1.resolve(); }, cancel: function(element) { trigger(element, 'transitioncanceled'); }, inProgress: function(element) { return hasClass(element, 'uk-transition'); } }; var animationPrefix = 'uk-animation-'; function animate$1(element, animation, duration, origin, out) { if ( duration === void 0 ) duration = 200; return Promise$1.all(toNodes(element).map(function (element) { return new Promise$1(function (resolve, reject) { trigger(element, 'animationcanceled'); var timer = setTimeout(function () { return trigger(element, 'animationend'); }, duration); once(element, 'animationend animationcanceled', function (ref) { var type = ref.type; clearTimeout(timer); type === 'animationcanceled' ? reject() : resolve(element); css(element, 'animationDuration', ''); removeClasses(element, (animationPrefix + "\\S*")); }, {self: true}); css(element, 'animationDuration', (duration + "ms")); addClass(element, animation, animationPrefix + (out ? 'leave' : 'enter')); if (startsWith(animation, animationPrefix)) { origin && addClass(element, ("uk-transform-origin-" + origin)); out && addClass(element, (animationPrefix + "reverse")); } }); } )); } var inProgress = new RegExp((animationPrefix + "(enter|leave)")); var Animation = { in: animate$1, out: function(element, animation, duration, origin) { return animate$1(element, animation, duration, origin, true); }, inProgress: function(element) { return inProgress.test(attr(element, 'class')); }, cancel: function(element) { trigger(element, 'animationcanceled'); } }; var dirs$1 = { width: ['left', 'right'], height: ['top', 'bottom'] }; function dimensions(element) { var rect = isElement(element) ? toNode(element).getBoundingClientRect() : {height: height(element), width: width(element), top: 0, left: 0}; return { height: rect.height, width: rect.width, top: rect.top, left: rect.left, bottom: rect.top + rect.height, right: rect.left + rect.width }; } function offset(element, coordinates) { var currentOffset = dimensions(element); var ref = toWindow(element); var pageYOffset = ref.pageYOffset; var pageXOffset = ref.pageXOffset; var offsetBy = {height: pageYOffset, width: pageXOffset}; for (var dir in dirs$1) { for (var i in dirs$1[dir]) { currentOffset[dirs$1[dir][i]] += offsetBy[dir]; } } if (!coordinates) { return currentOffset; } var pos = css(element, 'position'); each(css(element, ['left', 'top']), function (value, prop) { return css(element, prop, coordinates[prop] - currentOffset[prop] + toFloat(pos === 'absolute' && value === 'auto' ? position(element)[prop] : value) ); } ); } function position(element) { var ref = offset(element); var top = ref.top; var left = ref.left; var ref$1 = toNode(element); var ref$1_ownerDocument = ref$1.ownerDocument; var body = ref$1_ownerDocument.body; var documentElement = ref$1_ownerDocument.documentElement; var offsetParent = ref$1.offsetParent; var parent = offsetParent || documentElement; while (parent && (parent === body || parent === documentElement) && css(parent, 'position') === 'static') { parent = parent.parentNode; } if (isElement(parent)) { var parentOffset = offset(parent); top -= parentOffset.top + toFloat(css(parent, 'borderTopWidth')); left -= parentOffset.left + toFloat(css(parent, 'borderLeftWidth')); } return { top: top - toFloat(css(element, 'marginTop')), left: left - toFloat(css(element, 'marginLeft')) }; } function offsetPosition(element) { var offset = [0, 0]; element = toNode(element); do { offset[0] += element.offsetTop; offset[1] += element.offsetLeft; if (css(element, 'position') === 'fixed') { var win = toWindow(element); offset[0] += win.pageYOffset; offset[1] += win.pageXOffset; return offset; } } while ((element = element.offsetParent)); return offset; } var height = dimension('height'); var width = dimension('width'); function dimension(prop) { var propName = ucfirst(prop); return function (element, value) { if (isUndefined(value)) { if (isWindow(element)) { return element[("inner" + propName)]; } if (isDocument(element)) { var doc = element.documentElement; return Math.max(doc[("offset" + propName)], doc[("scroll" + propName)]); } element = toNode(element); value = css(element, prop); value = value === 'auto' ? element[("offset" + propName)] : toFloat(value) || 0; return value - boxModelAdjust(element, prop); } else { return css(element, prop, !value && value !== 0 ? '' : +value + boxModelAdjust(element, prop) + 'px' ); } }; } function boxModelAdjust(element, prop, sizing) { if ( sizing === void 0 ) sizing = 'border-box'; return css(element, 'boxSizing') === sizing ? dirs$1[prop].map(ucfirst).reduce(function (value, prop) { return value + toFloat(css(element, ("padding" + prop))) + toFloat(css(element, ("border" + prop + "Width"))); } , 0) : 0; } function flipPosition(pos) { for (var dir in dirs$1) { for (var i in dirs$1[dir]) { if (dirs$1[dir][i] === pos) { return dirs$1[dir][1 - i]; } } } return pos; } function toPx(value, property, element) { if ( property === void 0 ) property = 'width'; if ( element === void 0 ) element = window; return isNumeric(value) ? +value : endsWith(value, 'vh') ? percent(height(toWindow(element)), value) : endsWith(value, 'vw') ? percent(width(toWindow(element)), value) : endsWith(value, '%') ? percent(dimensions(element)[property], value) : toFloat(value); } function percent(base, value) { return base * toFloat(value) / 100; } /* Based on: Copyright (c) 2016 Wilson Page wilsonpage@me.com https://github.com/wilsonpage/fastdom */ var fastdom = { reads: [], writes: [], read: function(task) { this.reads.push(task); scheduleFlush(); return task; }, write: function(task) { this.writes.push(task); scheduleFlush(); return task; }, clear: function(task) { remove(this.reads, task); remove(this.writes, task); }, flush: flush }; function flush(recursion) { if ( recursion === void 0 ) recursion = 1; runTasks(fastdom.reads); runTasks(fastdom.writes.splice(0)); fastdom.scheduled = false; if (fastdom.reads.length || fastdom.writes.length) { scheduleFlush(recursion + 1); } } var RECURSION_LIMIT = 4; function scheduleFlush(recursion) { if (fastdom.scheduled) { return; } fastdom.scheduled = true; if (recursion && recursion < RECURSION_LIMIT) { Promise$1.resolve().then(function () { return flush(recursion); }); } else { requestAnimationFrame(function () { return flush(); }); } } function runTasks(tasks) { var task; while ((task = tasks.shift())) { try { task(); } catch (e) { console.error(e); } } } function remove(array, item) { var index = array.indexOf(item); return ~index && array.splice(index, 1); } function MouseTracker() {} MouseTracker.prototype = { positions: [], init: function() { var this$1 = this; this.positions = []; var position; this.unbind = on(document, 'mousemove', function (e) { return position = getEventPos(e); }); this.interval = setInterval(function () { if (!position) { return; } this$1.positions.push(position); if (this$1.positions.length > 5) { this$1.positions.shift(); } }, 50); }, cancel: function() { this.unbind && this.unbind(); this.interval && clearInterval(this.interval); }, movesTo: function(target) { if (this.positions.length < 2) { return false; } var p = target.getBoundingClientRect(); var left = p.left; var right = p.right; var top = p.top; var bottom = p.bottom; var ref = this.positions; var prevPosition = ref[0]; var position = last(this.positions); var path = [prevPosition, position]; if (pointInRect(position, p)) { return false; } var diagonals = [[{x: left, y: top}, {x: right, y: bottom}], [{x: left, y: bottom}, {x: right, y: top}]]; return diagonals.some(function (diagonal) { var intersection = intersect(path, diagonal); return intersection && pointInRect(intersection, p); }); } }; // Inspired by http://paulbourke.net/geometry/pointlineplane/ function intersect(ref, ref$1) { var ref_0 = ref[0]; var x1 = ref_0.x; var y1 = ref_0.y; var ref_1 = ref[1]; var x2 = ref_1.x; var y2 = ref_1.y; var ref$1_0 = ref$1[0]; var x3 = ref$1_0.x; var y3 = ref$1_0.y; var ref$1_1 = ref$1[1]; var x4 = ref$1_1.x; var y4 = ref$1_1.y; var denominator = (y4 - y3) * (x2 - x1) - (x4 - x3) * (y2 - y1); // Lines are parallel if (denominator === 0) { return false; } var ua = ((x4 - x3) * (y1 - y3) - (y4 - y3) * (x1 - x3)) / denominator; if (ua < 0) { return false; } // Return an object with the x and y coordinates of the intersection return {x: x1 + ua * (x2 - x1), y: y1 + ua * (y2 - y1)}; } var strats = {}; strats.events = strats.created = strats.beforeConnect = strats.connected = strats.beforeDisconnect = strats.disconnected = strats.destroy = concatStrat; // args strategy strats.args = function (parentVal, childVal) { return childVal !== false && concatStrat(childVal || parentVal); }; // update strategy strats.update = function (parentVal, childVal) { return sortBy$1(concatStrat(parentVal, isFunction(childVal) ? {read: childVal} : childVal), 'order'); }; // property strategy strats.props = function (parentVal, childVal) { if (isArray(childVal)) { childVal = childVal.reduce(function (value, key) { value[key] = String; return value; }, {}); } return strats.methods(parentVal, childVal); }; // extend strategy strats.computed = strats.methods = function (parentVal, childVal) { return childVal ? parentVal ? assign({}, parentVal, childVal) : childVal : parentVal; }; // data strategy strats.data = function (parentVal, childVal, vm) { if (!vm) { if (!childVal) { return parentVal; } if (!parentVal) { return childVal; } return function (vm) { return mergeFnData(parentVal, childVal, vm); }; } return mergeFnData(parentVal, childVal, vm); }; function mergeFnData(parentVal, childVal, vm) { return strats.computed( isFunction(parentVal) ? parentVal.call(vm, vm) : parentVal, isFunction(childVal) ? childVal.call(vm, vm) : childVal ); } // concat strategy function concatStrat(parentVal, childVal) { parentVal = parentVal && !isArray(parentVal) ? [parentVal] : parentVal; return childVal ? parentVal ? parentVal.concat(childVal) : isArray(childVal) ? childVal : [childVal] : parentVal; } // default strategy function defaultStrat(parentVal, childVal) { return isUndefined(childVal) ? parentVal : childVal; } function mergeOptions(parent, child, vm) { var options = {}; if (isFunction(child)) { child = child.options; } if (child.extends) { parent = mergeOptions(parent, child.extends, vm); } if (child.mixins) { for (var i = 0, l = child.mixins.length; i < l; i++) { parent = mergeOptions(parent, child.mixins[i], vm); } } for (var key in parent) { mergeKey(key); } for (var key$1 in child) { if (!hasOwn(parent, key$1)) { mergeKey(key$1); } } function mergeKey(key) { options[key] = (strats[key] || defaultStrat)(parent[key], child[key], vm); } return options; } function parseOptions(options, args) { var obj; if ( args === void 0 ) args = []; try { return !options ? {} : startsWith(options, '{') ? JSON.parse(options) : args.length && !includes(options, ':') ? (( obj = {}, obj[args[0]] = options, obj )) : options.split(';').reduce(function (options, option) { var ref = option.split(/:(.*)/); var key = ref[0]; var value = ref[1]; if (key && !isUndefined(value)) { options[key.trim()] = value.trim(); } return options; }, {}); } catch (e) { return {}; } } function play(el) { if (isIFrame(el)) { call(el, {func: 'playVideo', method: 'play'}); } if (isHTML5(el)) { try { el.play().catch(noop); } catch (e) {} } } function pause(el) { if (isIFrame(el)) { call(el, {func: 'pauseVideo', method: 'pause'}); } if (isHTML5(el)) { el.pause(); } } function mute(el) { if (isIFrame(el)) { call(el, {func: 'mute', method: 'setVolume', value: 0}); } if (isHTML5(el)) { el.muted = true; } } function isHTML5(el) { return el && el.tagName === 'VIDEO'; } function isIFrame(el) { return el && el.tagName === 'IFRAME' && (isYoutube(el) || isVimeo(el)); } function isYoutube(el) { return !!el.src.match(/\/\/.*?youtube(-nocookie)?\.[a-z]+\/(watch\?v=[^&\s]+|embed)|youtu\.be\/.*/); } function isVimeo(el) { return !!el.src.match(/vimeo\.com\/video\/.*/); } function call(el, cmd) { enableApi(el).then(function () { return post(el, cmd); }); } function post(el, cmd) { try { el.contentWindow.postMessage(JSON.stringify(assign({event: 'command'}, cmd)), '*'); } catch (e) {} } var stateKey$1 = '_ukPlayer'; var counter = 0; function enableApi(el) { if (el[stateKey$1]) { return el[stateKey$1]; } var youtube = isYoutube(el); var vimeo = isVimeo(el); var id = ++counter; var poller; return el[stateKey$1] = new Promise$1(function (resolve) { youtube && once(el, 'load', function () { var listener = function () { return post(el, {event: 'listening', id: id}); }; poller = setInterval(listener, 100); listener(); }); once(window, 'message', resolve, false, function (ref) { var data = ref.data; try { data = JSON.parse(data); return data && (youtube && data.id === id && data.event === 'onReady' || vimeo && Number(data.player_id) === id); } catch (e) {} }); el.src = "" + (el.src) + (includes(el.src, '?') ? '&' : '?') + (youtube ? 'enablejsapi=1' : ("api=1&player_id=" + id)); }).then(function () { return clearInterval(poller); }); } function isInView(element, offsetTop, offsetLeft) { if ( offsetTop === void 0 ) offsetTop = 0; if ( offsetLeft === void 0 ) offsetLeft = 0; if (!isVisible(element)) { return false; } return intersectRect.apply(void 0, scrollParents(element).map(function (parent) { var ref = offset(getViewport$1(parent)); var top = ref.top; var left = ref.left; var bottom = ref.bottom; var right = ref.right; return { top: top - offsetTop, left: left - offsetLeft, bottom: bottom + offsetTop, right: right + offsetLeft }; }).concat(offset(element))); } function scrollTop(element, top) { if (isWindow(element) || isDocument(element)) { element = getScrollingElement(element); } else { element = toNode(element); } element.scrollTop = top; } function scrollIntoView(element, ref) { if ( ref === void 0 ) ref = {}; var offsetBy = ref.offset; if ( offsetBy === void 0 ) offsetBy = 0; if (!isVisible(element)) { return; } var parents = scrollParents(element); var diff = 0; return parents.reduce(function (fn, scrollElement, i) { var scrollTop = scrollElement.scrollTop; var scrollHeight = scrollElement.scrollHeight; var maxScroll = scrollHeight - getViewportClientHeight(scrollElement); var top = Math.ceil( offset(parents[i - 1] || element).top - offset(getViewport$1(scrollElement)).top - offsetBy + diff + scrollTop ); if (top > maxScroll) { diff = top - maxScroll; top = maxScroll; } else { diff = 0; } return function () { return scrollTo(scrollElement, top - scrollTop).then(fn); }; }, function () { return Promise$1.resolve(); })(); function scrollTo(element, top) { return new Promise$1(function (resolve) { var scroll = element.scrollTop; var duration = getDuration(Math.abs(top)); var start = Date.now(); (function step() { var percent = ease(clamp((Date.now() - start) / duration)); scrollTop(element, scroll + top * percent); // scroll more if we have not reached our destination if (percent !== 1) { requestAnimationFrame(step); } else { resolve(); } })(); }); } function getDuration(dist) { return 40 * Math.pow(dist, .375); } function ease(k) { return 0.5 * (1 - Math.cos(Math.PI * k)); } } function scrolledOver(element, heightOffset) { if ( heightOffset === void 0 ) heightOffset = 0; if (!isVisible(element)) { return 0; } var ref = scrollParents(element, /auto|scroll/, true); var scrollElement = ref[0]; var scrollHeight = scrollElement.scrollHeight; var scrollTop = scrollElement.scrollTop; var clientHeight = getViewportClientHeight(scrollElement); var viewportTop = offsetPosition(element)[0] - scrollTop - offsetPosition(scrollElement)[0]; var viewportDist = Math.min(clientHeight, viewportTop + scrollTop); var top = viewportTop - viewportDist; var dist = Math.min( element.offsetHeight + heightOffset + viewportDist, scrollHeight - (viewportTop + scrollTop), scrollHeight - clientHeight ); return clamp(-1 * top / dist); } function scrollParents(element, overflowRe, scrollable) { if ( overflowRe === void 0 ) overflowRe = /auto|scroll|hidden/; if ( scrollable === void 0 ) scrollable = false; var scrollEl = getScrollingElement(element); var ancestors = parents(element).reverse(); ancestors = ancestors.slice(ancestors.indexOf(scrollEl) + 1); var fixedIndex = findIndex(ancestors, function (el) { return css(el, 'position') === 'fixed'; }); if (~fixedIndex) { ancestors = ancestors.slice(fixedIndex); } return [scrollEl].concat(ancestors.filter(function (parent) { return overflowRe.test(css(parent, 'overflow')) && (!scrollable || parent.scrollHeight > getViewportClientHeight(parent)); }) ).reverse(); } function getViewport$1(scrollElement) { return scrollElement === getScrollingElement(scrollElement) ? window : scrollElement; } // iOS 12 returns
as scrollingElement function getViewportClientHeight(scrollElement) { return (scrollElement === getScrollingElement(scrollElement) ? document.documentElement : scrollElement).clientHeight; } function getScrollingElement(element) { var ref = toWindow(element); var document = ref.document; return document.scrollingElement || document.documentElement; } var dirs = { width: ['x', 'left', 'right'], height: ['y', 'top', 'bottom'] }; function positionAt(element, target, elAttach, targetAttach, elOffset, targetOffset, flip, boundary) { elAttach = getPos(elAttach); targetAttach = getPos(targetAttach); var flipped = {element: elAttach, target: targetAttach}; if (!element || !target) { return flipped; } var dim = offset(element); var targetDim = offset(target); var position = targetDim; moveTo(position, elAttach, dim, -1); moveTo(position, targetAttach, targetDim, 1); elOffset = getOffsets(elOffset, dim.width, dim.height); targetOffset = getOffsets(targetOffset, targetDim.width, targetDim.height); elOffset['x'] += targetOffset['x']; elOffset['y'] += targetOffset['y']; position.left += elOffset['x']; position.top += elOffset['y']; if (flip) { var boundaries = scrollParents(element).map(getViewport$1); if (boundary && !includes(boundaries, boundary)) { boundaries.unshift(boundary); } boundaries = boundaries.map(function (el) { return offset(el); }); each(dirs, function (ref, prop) { var dir = ref[0]; var align = ref[1]; var alignFlip = ref[2]; if (!(flip === true || includes(flip, dir))) { return; } boundaries.some(function (boundary) { var elemOffset = elAttach[dir] === align ? -dim[prop] : elAttach[dir] === alignFlip ? dim[prop] : 0; var targetOffset = targetAttach[dir] === align ? targetDim[prop] : targetAttach[dir] === alignFlip ? -targetDim[prop] : 0; if (position[align] < boundary[align] || position[align] + dim[prop] > boundary[alignFlip]) { var centerOffset = dim[prop] / 2; var centerTargetOffset = targetAttach[dir] === 'center' ? -targetDim[prop] / 2 : 0; return elAttach[dir] === 'center' && ( apply(centerOffset, centerTargetOffset) || apply(-centerOffset, -centerTargetOffset) ) || apply(elemOffset, targetOffset); } function apply(elemOffset, targetOffset) { var newVal = toFloat((position[align] + elemOffset + targetOffset - elOffset[dir] * 2).toFixed(4)); if (newVal >= boundary[align] && newVal + dim[prop] <= boundary[alignFlip]) { position[align] = newVal; ['element', 'target'].forEach(function (el) { flipped[el][dir] = !elemOffset ? flipped[el][dir] : flipped[el][dir] === dirs[prop][1] ? dirs[prop][2] : dirs[prop][1]; }); return true; } } }); }); } offset(element, position); return flipped; } function moveTo(position, attach, dim, factor) { each(dirs, function (ref, prop) { var dir = ref[0]; var align = ref[1]; var alignFlip = ref[2]; if (attach[dir] === alignFlip) { position[align] += dim[prop] * factor; } else if (attach[dir] === 'center') { position[align] += dim[prop] * factor / 2; } }); } function getPos(pos) { var x = /left|center|right/; var y = /top|center|bottom/; pos = (pos || '').split(' '); if (pos.length === 1) { pos = x.test(pos[0]) ? pos.concat('center') : y.test(pos[0]) ? ['center'].concat(pos) : ['center', 'center']; } return { x: x.test(pos[0]) ? pos[0] : 'center', y: y.test(pos[1]) ? pos[1] : 'center' }; } function getOffsets(offsets, width, height) { var ref = (offsets || '').split(' '); var x = ref[0]; var y = ref[1]; return { x: x ? toFloat(x) * (endsWith(x, '%') ? width / 100 : 1) : 0, y: y ? toFloat(y) * (endsWith(y, '%') ? height / 100 : 1) : 0 }; } var util = /*#__PURE__*/Object.freeze({ __proto__: null, ajax: ajax, getImage: getImage, transition: transition, Transition: Transition, animate: animate$1, Animation: Animation, attr: attr, hasAttr: hasAttr, removeAttr: removeAttr, data: data, addClass: addClass, removeClass: removeClass, removeClasses: removeClasses, replaceClass: replaceClass, hasClass: hasClass, toggleClass: toggleClass, dimensions: dimensions, offset: offset, position: position, offsetPosition: offsetPosition, height: height, width: width, boxModelAdjust: boxModelAdjust, flipPosition: flipPosition, toPx: toPx, ready: ready, empty: empty, html: html, prepend: prepend, append: append, before: before, after: after, remove: remove$1, wrapAll: wrapAll, wrapInner: wrapInner, unwrap: unwrap, fragment: fragment, apply: apply$1, $: $, $$: $$, inBrowser: inBrowser, isIE: isIE, isRtl: isRtl, hasTouch: hasTouch, pointerDown: pointerDown, pointerMove: pointerMove, pointerUp: pointerUp, pointerEnter: pointerEnter, pointerLeave: pointerLeave, pointerCancel: pointerCancel, on: on, off: off, once: once, trigger: trigger, createEvent: createEvent, toEventTargets: toEventTargets, isTouch: isTouch, getEventPos: getEventPos, fastdom: fastdom, isVoidElement: isVoidElement, isVisible: isVisible, selInput: selInput, isInput: isInput, isFocusable: isFocusable, parent: parent, filter: filter$1, matches: matches, closest: closest, within: within, parents: parents, children: children, index: index, hasOwn: hasOwn, hyphenate: hyphenate, camelize: camelize, ucfirst: ucfirst, startsWith: startsWith, endsWith: endsWith, includes: includes, findIndex: findIndex, isArray: isArray, isFunction: isFunction, isObject: isObject, isPlainObject: isPlainObject, isWindow: isWindow, isDocument: isDocument, isNode: isNode, isElement: isElement, isBoolean: isBoolean, isString: isString, isNumber: isNumber, isNumeric: isNumeric, isEmpty: isEmpty, isUndefined: isUndefined, toBoolean: toBoolean, toNumber: toNumber, toFloat: toFloat, toArray: toArray, toNode: toNode, toNodes: toNodes, toWindow: toWindow, toMs: toMs, isEqual: isEqual, swap: swap, assign: assign, last: last, each: each, sortBy: sortBy$1, uniqueBy: uniqueBy, clamp: clamp, noop: noop, intersectRect: intersectRect, pointInRect: pointInRect, Dimensions: Dimensions, getIndex: getIndex, memoize: memoize, MouseTracker: MouseTracker, mergeOptions: mergeOptions, parseOptions: parseOptions, play: play, pause: pause, mute: mute, positionAt: positionAt, Promise: Promise$1, Deferred: Deferred, query: query, queryAll: queryAll, find: find, findAll: findAll, escape: escape, css: css, getCssVar: getCssVar, propName: propName, isInView: isInView, scrollTop: scrollTop, scrollIntoView: scrollIntoView, scrolledOver: scrolledOver, scrollParents: scrollParents, getViewport: getViewport$1, getViewportClientHeight: getViewportClientHeight }); function globalAPI (UIkit) { var DATA = UIkit.data; UIkit.use = function (plugin) { if (plugin.installed) { return; } plugin.call(null, this); plugin.installed = true; return this; }; UIkit.mixin = function (mixin, component) { component = (isString(component) ? UIkit.component(component) : component) || this; component.options = mergeOptions(component.options, mixin); }; UIkit.extend = function (options) { options = options || {}; var Super = this; var Sub = function UIkitComponent(options) { this._init(options); }; Sub.prototype = Object.create(Super.prototype); Sub.prototype.constructor = Sub; Sub.options = mergeOptions(Super.options, options); Sub.super = Super; Sub.extend = Super.extend; return Sub; }; UIkit.update = function (element, e) { element = element ? toNode(element) : document.body; parents(element).reverse().forEach(function (element) { return update(element[DATA], e); }); apply$1(element, function (element) { return update(element[DATA], e); }); }; var container; Object.defineProperty(UIkit, 'container', { get: function() { return container || document.body; }, set: function(element) { container = $(element); } }); function update(data, e) { if (!data) { return; } for (var name in data) { if (data[name]._connected) { data[name]._callUpdate(e); } } } } function hooksAPI (UIkit) { UIkit.prototype._callHook = function (hook) { var this$1 = this; var handlers = this.$options[hook]; if (handlers) { handlers.forEach(function (handler) { return handler.call(this$1); }); } }; UIkit.prototype._callConnected = function () { if (this._connected) { return; } this._data = {}; this._computeds = {}; this._initProps(); this._callHook('beforeConnect'); this._connected = true; this._initEvents(); this._initObservers(); this._callHook('connected'); this._callUpdate(); }; UIkit.prototype._callDisconnected = function () { if (!this._connected) { return; } this._callHook('beforeDisconnect'); this._disconnectObservers(); this._unbindEvents(); this._callHook('disconnected'); this._connected = false; delete this._watch; }; UIkit.prototype._callUpdate = function (e) { var this$1 = this; if ( e === void 0 ) e = 'update'; if (!this._connected) { return; } if (e === 'update' || e === 'resize') { this._callWatches(); } if (!this.$options.update) { return; } if (!this._updates) { this._updates = new Set(); fastdom.read(function () { runUpdates.call(this$1, this$1._updates); delete this$1._updates; }); } this._updates.add(e.type || e); }; UIkit.prototype._callWatches = function () { var this$1 = this; if (this._watch) { return; } var initital = !hasOwn(this, '_watch'); this._watch = fastdom.read(function () { var ref = this$1; var computed = ref.$options.computed; var _computeds = ref._computeds; for (var key in computed) { var hasPrev = hasOwn(_computeds, key); var prev = _computeds[key]; delete _computeds[key]; var ref$1 = computed[key]; var watch = ref$1.watch; var immediate = ref$1.immediate; if (watch && ( initital && immediate || hasPrev && !isEqual(prev, this$1[key]) )) { watch.call(this$1, this$1[key], prev); } } this$1._watch = null; }); }; function runUpdates(types) { var this$1 = this; var updates = this.$options.update; var loop = function ( i ) { var ref = updates[i]; var read = ref.read; var write = ref.write; var events = ref.events; if (!types.has('update') && (!events || !events.some(function (type) { return types.has(type); }))) { return; } var result = (void 0); if (read) { result = read.call(this$1, this$1._data, types); if (result && isPlainObject(result)) { assign(this$1._data, result); } } if (write && result !== false) { fastdom.write(function () { return write.call(this$1, this$1._data, types); }); } }; for (var i = 0; i < updates.length; i++) loop( i ); } } function stateAPI (UIkit) { var uid = 0; UIkit.prototype._init = function (options) { options = options || {}; options.data = normalizeData(options, this.constructor.options); this.$options = mergeOptions(this.constructor.options, options, this); this.$el = null; this.$props = {}; this._uid = uid++; this._initData(); this._initMethods(); this._initComputeds(); this._callHook('created'); if (options.el) { this.$mount(options.el); } }; UIkit.prototype._initData = function () { var ref = this.$options; var data = ref.data; if ( data === void 0 ) data = {}; for (var key in data) { this.$props[key] = this[key] = data[key]; } }; UIkit.prototype._initMethods = function () { var ref = this.$options; var methods = ref.methods; if (methods) { for (var key in methods) { this[key] = methods[key].bind(this); } } }; UIkit.prototype._initComputeds = function () { var ref = this.$options; var computed = ref.computed; this._computeds = {}; if (computed) { for (var key in computed) { registerComputed(this, key, computed[key]); } } }; UIkit.prototype._initProps = function (props) { var key; props = props || getProps(this.$options, this.$name); for (key in props) { if (!isUndefined(props[key])) { this.$props[key] = props[key]; } } var exclude = [this.$options.computed, this.$options.methods]; for (key in this.$props) { if (key in props && notIn(exclude, key)) { this[key] = this.$props[key]; } } }; UIkit.prototype._initEvents = function () { var this$1 = this; this._events = []; var ref = this.$options; var events = ref.events; if (events) { events.forEach(function (event) { if (!hasOwn(event, 'handler')) { for (var key in event) { registerEvent(this$1, event[key], key); } } else { registerEvent(this$1, event); } }); } }; UIkit.prototype._unbindEvents = function () { this._events.forEach(function (unbind) { return unbind(); }); delete this._events; }; UIkit.prototype._initObservers = function () { this._observers = [ initChildListObserver(this), initPropsObserver(this) ]; }; UIkit.prototype._disconnectObservers = function () { this._observers.forEach(function (observer) { return observer && observer.disconnect(); } ); }; function getProps(opts, name) { var data$1 = {}; var args = opts.args; if ( args === void 0 ) args = []; var props = opts.props; if ( props === void 0 ) props = {}; var el = opts.el; if (!props) { return data$1; } for (var key in props) { var prop = hyphenate(key); var value = data(el, prop); if (isUndefined(value)) { continue; } value = props[key] === Boolean && value === '' ? true : coerce(props[key], value); if (prop === 'target' && (!value || startsWith(value, '_'))) { continue; } data$1[key] = value; } var options = parseOptions(data(el, name), args); for (var key$1 in options) { var prop$1 = camelize(key$1); if (props[prop$1] !== undefined) { data$1[prop$1] = coerce(props[prop$1], options[key$1]); } } return data$1; } function registerComputed(component, key, cb) { Object.defineProperty(component, key, { enumerable: true, get: function() { var _computeds = component._computeds; var $props = component.$props; var $el = component.$el; if (!hasOwn(_computeds, key)) { _computeds[key] = (cb.get || cb).call(component, $props, $el); } return _computeds[key]; }, set: function(value) { var _computeds = component._computeds; _computeds[key] = cb.set ? cb.set.call(component, value) : value; if (isUndefined(_computeds[key])) { delete _computeds[key]; } } }); } function registerEvent(component, event, key) { if (!isPlainObject(event)) { event = ({name: key, handler: event}); } var name = event.name; var el = event.el; var handler = event.handler; var capture = event.capture; var passive = event.passive; var delegate = event.delegate; var filter = event.filter; var self = event.self; el = isFunction(el) ? el.call(component) : el || component.$el; if (isArray(el)) { el.forEach(function (el) { return registerEvent(component, assign({}, event, {el: el}), key); }); return; } if (!el || filter && !filter.call(component)) { return; } component._events.push( on( el, name, !delegate ? null : isString(delegate) ? delegate : delegate.call(component), isString(handler) ? component[handler] : handler.bind(component), {passive: passive, capture: capture, self: self} ) ); } function notIn(options, key) { return options.every(function (arr) { return !arr || !hasOwn(arr, key); }); } function coerce(type, value) { if (type === Boolean) { return toBoolean(value); } else if (type === Number) { return toNumber(value); } else if (type === 'list') { return toList(value); } return type ? type(value) : value; } function toList(value) { return isArray(value) ? value : isString(value) ? value.split(/,(?![^(]*\))/).map(function (value) { return isNumeric(value) ? toNumber(value) : toBoolean(value.trim()); }) : [value]; } function normalizeData(ref, ref$1) { var data = ref.data; var args = ref$1.args; var props = ref$1.props; if ( props === void 0 ) props = {}; data = isArray(data) ? !isEmpty(args) ? data.slice(0, args.length).reduce(function (data, value, index) { if (isPlainObject(value)) { assign(data, value); } else { data[args[index]] = value; } return data; }, {}) : undefined : data; if (data) { for (var key in data) { if (isUndefined(data[key])) { delete data[key]; } else { data[key] = props[key] ? coerce(props[key], data[key]) : data[key]; } } } return data; } function initChildListObserver(component) { var ref = component.$options; var el = ref.el; var observer = new MutationObserver(function () { return component.$emit(); }); observer.observe(el, { childList: true, subtree: true }); return observer; } function initPropsObserver(component) { var $name = component.$name; var $options = component.$options; var $props = component.$props; var attrs = $options.attrs; var props = $options.props; var el = $options.el; if (!props || attrs === false) { return; } var attributes = isArray(attrs) ? attrs : Object.keys(props); var filter = attributes.map(function (key) { return hyphenate(key); }).concat($name); var observer = new MutationObserver(function (records) { var data = getProps($options, $name); if (records.some(function (ref) { var attributeName = ref.attributeName; var prop = attributeName.replace('data-', ''); return (prop === $name ? attributes : [camelize(prop), camelize(attributeName)]).some(function (prop) { return !isUndefined(data[prop]) && data[prop] !== $props[prop]; } ); })) { component.$reset(); } }); observer.observe(el, { attributes: true, attributeFilter: filter.concat(filter.map(function (key) { return ("data-" + key); })) }); return observer; } } function instanceAPI (UIkit) { var DATA = UIkit.data; UIkit.prototype.$create = function (component, element, data) { return UIkit[component](element, data); }; UIkit.prototype.$mount = function (el) { var ref = this.$options; var name = ref.name; if (!el[DATA]) { el[DATA] = {}; } if (el[DATA][name]) { return; } el[DATA][name] = this; this.$el = this.$options.el = this.$options.el || el; if (within(el, document)) { this._callConnected(); } }; UIkit.prototype.$reset = function () { this._callDisconnected(); this._callConnected(); }; UIkit.prototype.$destroy = function (removeEl) { if ( removeEl === void 0 ) removeEl = false; var ref = this.$options; var el = ref.el; var name = ref.name; if (el) { this._callDisconnected(); } this._callHook('destroy'); if (!el || !el[DATA]) { return; } delete el[DATA][name]; if (!isEmpty(el[DATA])) { delete el[DATA]; } if (removeEl) { remove$1(this.$el); } }; UIkit.prototype.$emit = function (e) { this._callUpdate(e); }; UIkit.prototype.$update = function (element, e) { if ( element === void 0 ) element = this.$el; UIkit.update(element, e); }; UIkit.prototype.$getComponent = UIkit.getComponent; var componentName = memoize(function (name) { return UIkit.prefix + hyphenate(name); }); Object.defineProperties(UIkit.prototype, { $container: Object.getOwnPropertyDescriptor(UIkit, 'container'), $name: { get: function() { return componentName(this.$options.name); } } }); } function componentAPI (UIkit) { var DATA = UIkit.data; var components = {}; UIkit.component = function (name, options) { var id = hyphenate(name); name = camelize(id); if (!options) { if (isPlainObject(components[name])) { components[name] = UIkit.extend(components[name]); } return components[name]; } UIkit[name] = function (element, data) { var i = arguments.length, argsArray = Array(i); while ( i-- ) argsArray[i] = arguments[i]; var component = UIkit.component(name); return component.options.functional ? new component({data: isPlainObject(element) ? element : [].concat( argsArray )}) : !element ? init(element) : $$(element).map(init)[0]; function init(element) { var instance = UIkit.getComponent(element, name); if (instance) { if (!data) { return instance; } else { instance.$destroy(); } } return new component({el: element, data: data}); } }; var opt = isPlainObject(options) ? assign({}, options) : options.options; opt.name = name; if (opt.install) { opt.install(UIkit, opt, name); } if (UIkit._initialized && !opt.functional) { fastdom.read(function () { return UIkit[name](("[uk-" + id + "],[data-uk-" + id + "]")); }); } return components[name] = isPlainObject(options) ? opt : options; }; UIkit.getComponents = function (element) { return element && element[DATA] || {}; }; UIkit.getComponent = function (element, name) { return UIkit.getComponents(element)[name]; }; UIkit.connect = function (node) { if (node[DATA]) { for (var name in node[DATA]) { node[DATA][name]._callConnected(); } } for (var i = 0; i < node.attributes.length; i++) { var name$1 = getComponentName(node.attributes[i].name); if (name$1 && name$1 in components) { UIkit[name$1](node); } } }; UIkit.disconnect = function (node) { for (var name in node[DATA]) { node[DATA][name]._callDisconnected(); } }; } var getComponentName = memoize(function (attribute) { return startsWith(attribute, 'uk-') || startsWith(attribute, 'data-uk-') ? camelize(attribute.replace('data-uk-', '').replace('uk-', '')) : false; }); var UIkit = function (options) { this._init(options); }; UIkit.util = util; UIkit.data = '__uikit__'; UIkit.prefix = 'uk-'; UIkit.options = {}; UIkit.version = '3.6.22'; globalAPI(UIkit); hooksAPI(UIkit); stateAPI(UIkit); componentAPI(UIkit); instanceAPI(UIkit); function Core (UIkit) { if (!inBrowser) { return; } // throttle 'resize' var pendingResize; var handleResize = function () { if (pendingResize) { return; } pendingResize = true; fastdom.write(function () { return pendingResize = false; }); UIkit.update(null, 'resize'); }; on(window, 'load resize', handleResize); on(document, 'loadedmetadata load', handleResize, true); if ('ResizeObserver' in window) { (new ResizeObserver(handleResize)).observe(document.documentElement); } // throttle `scroll` event (Safari triggers multiple `scroll` events per frame) var pending; on(window, 'scroll', function (e) { if (pending) { return; } pending = true; fastdom.write(function () { return pending = false; }); UIkit.update(null, e.type); }, {passive: true, capture: true}); var started = 0; on(document, 'animationstart', function (ref) { var target = ref.target; if ((css(target, 'animationName') || '').match(/^uk-.*(left|right)/)) { started++; css(document.documentElement, 'overflowX', 'hidden'); setTimeout(function () { if (!--started) { css(document.documentElement, 'overflowX', ''); } }, toMs(css(target, 'animationDuration')) + 100); } }, true); on(document, pointerDown, function (e) { if (!isTouch(e)) { return; } // Handle Swipe Gesture var pos = getEventPos(e); var target = 'tagName' in e.target ? e.target : parent(e.target); once(document, (pointerUp + " " + pointerCancel + " scroll"), function (e) { var ref = getEventPos(e); var x = ref.x; var y = ref.y; // swipe if (e.type !== 'scroll' && target && x && Math.abs(pos.x - x) > 100 || y && Math.abs(pos.y - y) > 100) { setTimeout(function () { trigger(target, 'swipe'); trigger(target, ("swipe" + (swipeDirection(pos.x, pos.y, x, y)))); }); } }); }, {passive: true}); } function swipeDirection(x1, y1, x2, y2) { return Math.abs(x1 - x2) >= Math.abs(y1 - y2) ? x1 - x2 > 0 ? 'Left' : 'Right' : y1 - y2 > 0 ? 'Up' : 'Down'; } function boot (UIkit) { var connect = UIkit.connect; var disconnect = UIkit.disconnect; if (!inBrowser || !window.MutationObserver) { return; } fastdom.read(function () { if (document.body) { apply$1(document.body, connect); } new MutationObserver(function (records) { return records.forEach(applyChildListMutation); } ).observe(document, { childList: true, subtree: true }); new MutationObserver(function (records) { return records.forEach(applyAttributeMutation); } ).observe(document, { attributes: true, subtree: true }); UIkit._initialized = true; }); function applyChildListMutation(ref) { var addedNodes = ref.addedNodes; var removedNodes = ref.removedNodes; for (var i = 0; i < addedNodes.length; i++) { apply$1(addedNodes[i], connect); } for (var i$1 = 0; i$1 < removedNodes.length; i$1++) { apply$1(removedNodes[i$1], disconnect); } } function applyAttributeMutation(ref) { var target = ref.target; var attributeName = ref.attributeName; var name = getComponentName(attributeName); if (!name || !(name in UIkit)) { return; } if (hasAttr(target, attributeName)) { UIkit[name](target); return; } var component = UIkit.getComponent(target, name); if (component) { component.$destroy(); } } } var Class = { connected: function() { !hasClass(this.$el, this.$name) && addClass(this.$el, this.$name); } }; var Togglable = { props: { cls: Boolean, animation: 'list', duration: Number, origin: String, transition: String }, data: { cls: false, animation: [false], duration: 200, origin: false, transition: 'linear', clsEnter: 'uk-togglabe-enter', clsLeave: 'uk-togglabe-leave', initProps: { overflow: '', height: '', paddingTop: '', paddingBottom: '', marginTop: '', marginBottom: '' }, hideProps: { overflow: 'hidden', height: 0, paddingTop: 0, paddingBottom: 0, marginTop: 0, marginBottom: 0 } }, computed: { hasAnimation: function(ref) { var animation = ref.animation; return !!animation[0]; }, hasTransition: function(ref) { var animation = ref.animation; return this.hasAnimation && animation[0] === true; } }, methods: { toggleElement: function(targets, toggle, animate) { var this$1 = this; return new Promise$1(function (resolve) { return Promise$1.all(toNodes(targets).map(function (el) { var show = isBoolean(toggle) ? toggle : !this$1.isToggled(el); if (!trigger(el, ("before" + (show ? 'show' : 'hide')), [this$1])) { return Promise$1.reject(); } var promise = ( isFunction(animate) ? animate : animate === false || !this$1.hasAnimation ? this$1._toggle : this$1.hasTransition ? toggleHeight(this$1) : toggleAnimation(this$1) )(el, show); var cls = show ? this$1.clsEnter : this$1.clsLeave; addClass(el, cls); trigger(el, show ? 'show' : 'hide', [this$1]); var done = function () { removeClass(el, cls); trigger(el, show ? 'shown' : 'hidden', [this$1]); this$1.$update(el); }; return promise ? promise.then(done, function () { removeClass(el, cls); return Promise$1.reject(); }) : done(); })).then(resolve, noop); } ); }, isToggled: function(el) { if ( el === void 0 ) el = this.$el; return hasClass(el, this.clsEnter) ? true : hasClass(el, this.clsLeave) ? false : this.cls ? hasClass(el, this.cls.split(' ')[0]) : !hasAttr(el, 'hidden'); }, _toggle: function(el, toggled) { if (!el) { return; } toggled = Boolean(toggled); var changed; if (this.cls) { changed = includes(this.cls, ' ') || toggled !== hasClass(el, this.cls); changed && toggleClass(el, this.cls, includes(this.cls, ' ') ? undefined : toggled); } else { changed = toggled === el.hidden; changed && (el.hidden = !toggled); } $$('[autofocus]', el).some(function (el) { return isVisible(el) ? el.focus() || true : el.blur(); }); if (changed) { trigger(el, 'toggled', [toggled, this]); this.$update(el); } } } }; function toggleHeight(ref) { var isToggled = ref.isToggled; var duration = ref.duration; var initProps = ref.initProps; var hideProps = ref.hideProps; var transition = ref.transition; var _toggle = ref._toggle; return function (el, show) { var inProgress = Transition.inProgress(el); var inner = el.hasChildNodes ? toFloat(css(el.firstElementChild, 'marginTop')) + toFloat(css(el.lastElementChild, 'marginBottom')) : 0; var currentHeight = isVisible(el) ? height(el) + (inProgress ? 0 : inner) : 0; Transition.cancel(el); if (!isToggled(el)) { _toggle(el, true); } height(el, ''); // Update child components first fastdom.flush(); var endHeight = height(el) + (inProgress ? 0 : inner); height(el, currentHeight); return (show ? Transition.start(el, assign({}, initProps, {overflow: 'hidden', height: endHeight}), Math.round(duration * (1 - currentHeight / endHeight)), transition) : Transition.start(el, hideProps, Math.round(duration * (currentHeight / endHeight)), transition).then(function () { return _toggle(el, false); }) ).then(function () { return css(el, initProps); }); }; } function toggleAnimation(cmp) { return function (el, show) { Animation.cancel(el); var animation = cmp.animation; var duration = cmp.duration; var _toggle = cmp._toggle; if (show) { _toggle(el, true); return Animation.in(el, animation[0], duration, cmp.origin); } return Animation.out(el, animation[1] || animation[0], duration, cmp.origin).then(function () { return _toggle(el, false); }); }; } var Accordion = { mixins: [Class, Togglable], props: { targets: String, active: null, collapsible: Boolean, multiple: Boolean, toggle: String, content: String, transition: String, offset: Number }, data: { targets: '> *', active: false, animation: [true], collapsible: true, multiple: false, clsOpen: 'uk-open', toggle: '> .uk-accordion-title', content: '> .uk-accordion-content', transition: 'ease', offset: 0 }, computed: { items: { get: function(ref, $el) { var targets = ref.targets; return $$(targets, $el); }, watch: function(items, prev) { var this$1 = this; items.forEach(function (el) { return hide($(this$1.content, el), !hasClass(el, this$1.clsOpen)); }); if (prev || hasClass(items, this.clsOpen)) { return; } var active = this.active !== false && items[Number(this.active)] || !this.collapsible && items[0]; if (active) { this.toggle(active, false); } }, immediate: true }, toggles: function(ref) { var toggle = ref.toggle; return this.items.map(function (item) { return $(toggle, item); }); } }, events: [ { name: 'click', delegate: function() { return ((this.targets) + " " + (this.$props.toggle)); }, handler: function(e) { e.preventDefault(); this.toggle(index(this.toggles, e.current)); } } ], methods: { toggle: function(item, animate) { var this$1 = this; var items = [this.items[getIndex(item, this.items)]]; var activeItems = filter$1(this.items, ("." + (this.clsOpen))); if (!this.multiple && !includes(activeItems, items[0])) { items = items.concat(activeItems); } if (!this.collapsible && activeItems.length < 2 && !filter$1(items, (":not(." + (this.clsOpen) + ")")).length) { return; } items.forEach(function (el) { return this$1.toggleElement(el, !hasClass(el, this$1.clsOpen), function (el, show) { toggleClass(el, this$1.clsOpen, show); attr($(this$1.$props.toggle, el), 'aria-expanded', show); var content = $(("" + (el._wrapper ? '> * ' : '') + (this$1.content)), el); if (animate === false || !this$1.hasTransition) { hide(content, !show); return; } if (!el._wrapper) { el._wrapper = wrapAll(content, ("