(function(global, factory) { typeof exports === "object" && typeof module !== "undefined" ? module.exports = factory() : typeof define === "function" && define.amd ? define("uikit", factory) : global.UIkit = factory(); })(this, function() { "use strict"; function bind(fn, context) { return function(a) { var l = arguments.length; return l ? l > 1 ? fn.apply(context, arguments) : fn.call(context, a) : fn.call(context); }; } var objPrototype = Object.prototype; var hasOwnProperty = objPrototype.hasOwnProperty; function hasOwn(obj, key) { return hasOwnProperty.call(obj, key); } var hyphenateCache = {}; var hyphenateRe = /([a-z\d])([A-Z])/g; function hyphenate(str) { if (!(str in hyphenateCache)) { hyphenateCache[str] = str.replace(hyphenateRe, "$1-$2").toLowerCase(); } return hyphenateCache[str]; } var camelizeRe = /-(\w)/g; function camelize(str) { return str.replace(camelizeRe, toUpper); } function toUpper(_, c) { return c ? c.toUpperCase() : ""; } function ucfirst(str) { return str.length ? toUpper(null, str.charAt(0)) + str.slice(1) : ""; } 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 includesFn = function(search) { return ~this.indexOf(search); }; var includesStr = strPrototype.includes || includesFn; var includesArray = Array.prototype.includes || includesFn; function includes(obj, search) { return obj && (isString(obj) ? includesStr : includesArray).call(obj, search); } var isArray = Array.isArray; function isFunction(obj) { return typeof obj === "function"; } function isObject(obj) { return obj !== null && typeof obj === "object"; } function isPlainObject(obj) { return isObject(obj) && Object.getPrototypeOf(obj) === objPrototype; } function isWindow(obj) { return isObject(obj) && obj === obj.window; } function isDocument(obj) { return isObject(obj) && obj.nodeType === 9; } function isJQuery(obj) { return isObject(obj) && !!obj.jquery; } function isNode(obj) { return obj instanceof Node || isObject(obj) && obj.nodeType >= 1; } var toString = objPrototype.toString; function isNodeCollection(obj) { return toString.call(obj).match(/^\[object (NodeList|HTMLCollection)\]$/); } 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 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; } function toNode(element) { return isNode(element) || isWindow(element) || isDocument(element) ? element : isNodeCollection(element) || isJQuery(element) ? element[0] : isArray(element) ? toNode(element[0]) : null; } var arrayProto = Array.prototype; function toNodes(element) { return isNode(element) ? [ element ] : isNodeCollection(element) ? arrayProto.slice.call(element) : isArray(element) ? element.map(toNode).filter(Boolean) : isJQuery(element) ? element.toArray() : []; } function toList(value) { return isArray(value) ? value : isString(value) ? value.split(/,(?![^(]*\))/).map(function(value) { return isNumeric(value) ? toNumber(value) : toBoolean(value.trim()); }) : [ value ]; } function toMs(time) { return !time ? 0 : endsWith(time, "ms") ? toFloat(time) : toFloat(time) * 1e3; } function swap(value, a, b) { return value.replace(new RegExp(a + "|" + b, "mg"), 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 each(obj, cb) { for (var key in obj) { cb.call(obj[key], obj[key], key); } } function sortBy(collection, prop) { return collection.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 clamp(number, min, max) { if (min === void 0) min = 0; if (max === void 0) max = 1; return Math.min(Math.max(number, min), max); } function noop() {} function intersectRect(r1, r2) { return r1.left < r2.right && r1.right > r2.left && r1.top < r2.bottom && r1.bottom > r2.top; } 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 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.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]); } } } 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 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 *"); var removes; if (isContextSelector(selector)) { removes = []; selector = selector.split(",").map(function(selector, i) { var ctx = context; selector = selector.trim(); if (selector[0] === "!") { var selectors = selector.substr(1).trim().split(" "); ctx = closest(context.parentNode, 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; } if (!ctx.id) { ctx.id = "uk-" + Date.now() + i; removes.push(function() { return removeAttr(ctx, "id"); }); } return "#" + escape(ctx.id) + " " + selector; }).filter(Boolean).join(","); context = document; } try { return context[queryFn](selector); } catch (e) { return null; } finally { removes && removes.forEach(function(remove) { return remove(); }); } } var contextSelectorRe = /(^|,)\s*[!>+~-]/; var contextSanitizeRe = /([!>+~-])(?=\s+[!>+~-]|\s*$)/g; function isContextSelector(selector) { return isString(selector) && selector.match(contextSelectorRe); } var elProto = Element.prototype; var matchesFn = elProto.matches || elProto.webkitMatchesSelector || elProto.msMatchesSelector; 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; } ancestor = ancestor.parentNode; } while (ancestor && ancestor.nodeType === 1); }; function closest(element, selector) { if (startsWith(selector, ">")) { selector = selector.slice(1); } return isNode(element) ? element.parentNode && closestFn.call(element, selector) : toNodes(element).map(function(element) { return element.parentNode && closestFn.call(element, selector); }).filter(Boolean); } function parents(element, selector) { var elements = []; var parent = toNode(element).parentNode; while (parent && parent.nodeType === 1) { if (matches(parent, selector)) { elements.push(parent); } parent = parent.parentNode; } return elements; } var escapeFn = 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) : ""; } 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 filter(element, selector) { return toNodes(element).filter(function(element) { return matches(element, selector); }); } function within(element, selector) { return !isString(selector) ? element === selector || (isDocument(selector) ? selector.documentElement : toNode(selector)).contains(toNode(element)) : matches(element, selector) || closest(element, selector); } 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 (selector) { listener = delegate(targets, selector, listener); } if (listener.length > 1) { listener = detail(listener); } 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; 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"); 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(delegates, selector, listener) { var this$1 = this; return function(e) { delegates.forEach(function(delegate) { var current = selector[0] === ">" ? findAll(selector, delegate).reverse().filter(function(element) { return within(e.target, element); })[0] : closest(e.target, selector); if (current) { e.delegate = delegate; 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 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 preventClick() { var timer = setTimeout(once(document, "click", function(e) { e.preventDefault(); e.stopImmediatePropagation(); clearTimeout(timer); }, true)); trigger(document, "touchcancel"); } var Promise = "Promise" in window ? window.Promise : PromiseFn; var Deferred = function() { var this$1 = this; this.promise = new Promise(function(resolve, reject) { this$1.reject = reject; this$1.resolve = resolve; }); }; var RESOLVED = 0; var REJECTED = 1; var PENDING = 2; var async = "setImmediate" in 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) { return new Promise(function(resolve, reject) { var env = assign({ data: null, method: "GET", headers: {}, xhr: new XMLHttpRequest(), beforeSend: noop, responseType: "" }, options); env.beforeSend(env); 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) { 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(function(resolve, reject) { var img = new Image(); img.onerror = reject; img.onload = function() { return resolve(img); }; sizes && (img.sizes = sizes); srcset && (img.srcset = srcset); img.src = src; }); } var isIE = /msie|trident/i.test(window.navigator.userAgent); var isRtl = attr(document.documentElement, "dir") === "rtl"; var hasTouchEvents = "ontouchstart" in window; var hasPointerEvents = window.PointerEvent; var hasTouch = hasTouchEvents || window.DocumentTouch && document instanceof DocumentTouch || navigator.maxTouchPoints; var pointerDown = !hasTouch ? "mousedown" : "mousedown " + (hasTouchEvents ? "touchstart" : "pointerdown"); var pointerMove = !hasTouch ? "mousemove" : "mousemove " + (hasTouchEvents ? "touchmove" : "pointermove"); var pointerUp = !hasTouch ? "mouseup" : "mouseup " + (hasTouchEvents ? "touchend" : "pointerup"); var pointerEnter = hasTouch && hasPointerEvents ? "pointerenter" : "mouseenter"; var pointerLeave = hasTouch && hasPointerEvents ? "pointerleave" : "mouseleave"; function isReady() { return document.readyState === "complete" || document.readyState !== "loading" && !document.documentElement.doScroll; } function ready(fn) { if (isReady()) { fn(); return; } var handle = function() { unbind1(); unbind2(); fn(); }; var unbind1 = on(document, "DOMContentLoaded", handle); var unbind2 = on(window, "load", handle); } function index(element, ref) { return ref ? toNodes(element).indexOf(toNode(ref)) : toNodes((element = toNode(element)) && element.parentNode.children).indexOf(element); } 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 : index(elements, i); if (finite) { return clamp(i, 0, length - 1); } i %= length; return i < 0 ? i + length : i; } 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(element) { toNodes(element).map(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(function(element) { return element.parentNode; }).filter(function(value, index, self) { return self.indexOf(value) === index; }).forEach(function(parent) { before(parent, parent.childNodes); remove(parent); }); } var fragmentRe = /^\s*<(\w+|!)[^>]*>/; var singleTagRe = /^<(\w+)\s*\/?>(?:<\/\1>)?$/; function fragment(html) { var matches$$1 = singleTagRe.exec(html); if (matches$$1) { return document.createElement(matches$$1[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(node, fn) { if (!node || node.nodeType !== 1) { return; } fn(node); node = node.firstElementChild; while (node) { apply(node, fn); node = node.nextElementSibling; } } 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$1(element, args, "add"); } function removeClass(element) { var args = [], len = arguments.length - 1; while (len-- > 0) args[len] = arguments[len + 1]; apply$1(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) { return toNodes(element).some(function(element) { return element.classList.contains(cls); }); } function toggleClass(element) { var args = [], len = arguments.length - 1; while (len-- > 0) args[len] = arguments[len + 1]; if (!args.length) { return; } args = getArgs$1(args); var force = !isString(args[args.length - 1]) ? args.pop() : []; args = args.filter(Boolean); toNodes(element).forEach(function(ref) { var classList = ref.classList; for (var i = 0; i < args.length; i++) { supports.Force ? classList.toggle.apply(classList, [ args[i] ].concat(force)) : classList[(!isUndefined(force) ? force : !classList.contains(args[i])) ? "add" : "remove"](args[i]); } }); } function apply$1(element, args, fn) { args = getArgs$1(args).filter(Boolean); args.length && toNodes(element).forEach(function(ref) { var classList = ref.classList; supports.Multiple ? classList[fn].apply(classList, args) : args.forEach(function(cls) { return classList[fn](cls); }); }); } function getArgs$1(args) { return args.reduce(function(args, arg) { return args.concat.call(args, isString(arg) && includes(arg, " ") ? arg.trim().split(" ") : arg); }, []); } var supports = {}; (function() { var list = document.createElement("_").classList; if (list) { list.add("a", "b"); list.toggle("c", false); supports.Multiple = list.contains("b"); supports.Force = !list.contains("c"); } list = null; })(); 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, widows: true, "z-index": true, zoom: true }; function css(element, property, value) { return toNodes(element).map(function(element) { if (isString(property)) { property = propName(property); if (isUndefined(value)) { return getStyle(element, property); } else if (!value && value !== 0) { element.style.removeProperty(property); } else { element.style[property] = isNumeric(value) && !cssNumber[property] ? value + "px" : value; } } 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)) { each(property, function(value, property) { return css(element, property, value); }); } return element; })[0]; } function getStyles(element, pseudoElt) { element = toNode(element); return element.ownerDocument.defaultView.getComputedStyle(element, pseudoElt); } function getStyle(element, property, pseudoElt) { return getStyles(element, pseudoElt)[property]; } var vars = {}; function getCssVar(name) { var docEl = document.documentElement; if (!isIE) { return getStyles(docEl).getPropertyValue("--uk-" + name); } if (!(name in vars)) { var element = append(docEl, document.createElement("div")); addClass(element, "uk-" + name); vars[name] = getStyle(element, "content", ":before").replace(/^["'](.*)["']$/, "$1"); remove(element); } return vars[name]; } var cssProps = {}; function propName(name) { var ret = cssProps[name]; if (!ret) { ret = cssProps[name] = vendorPropName(name) || name; } return ret; } var cssPrefixes = [ "webkit", "moz", "ms" ]; var ref = document.createElement("_"); var style = ref.style; function vendorPropName(name) { name = hyphenate(name); 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.all(toNodes(element).map(function(element) { return new Promise(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, { "transition-property": "", "transition-duration": "", "transition-timing-function": "" }); type === "transitioncanceled" ? reject() : resolve(); }, false, function(ref) { var target = ref.target; return element === target; }); addClass(element, "uk-transition"); css(element, assign({ "transition-property": Object.keys(props).map(propName).join(","), "transition-duration": duration + "ms", "transition-timing-function": timing }, props)); }); })); } var Transition = { start: transition, stop: function(element) { trigger(element, "transitionend"); return Promise.resolve(); }, cancel: function(element) { trigger(element, "transitioncanceled"); }, inProgress: function(element) { return hasClass(element, "uk-transition"); } }; var animationPrefix = "uk-animation-"; var clsCancelAnimation = "uk-cancel-animation"; function animate(element, animation, duration, origin, out) { var arguments$1 = arguments; if (duration === void 0) duration = 200; return Promise.all(toNodes(element).map(function(element) { return new Promise(function(resolve, reject) { if (hasClass(element, clsCancelAnimation)) { requestAnimationFrame(function() { return Promise.resolve().then(function() { return animate.apply(void 0, arguments$1).then(resolve, reject); }); }); return; } var cls = animation + " " + animationPrefix + (out ? "leave" : "enter"); if (startsWith(animation, animationPrefix)) { if (origin) { cls += " uk-transform-origin-" + origin; } if (out) { cls += " " + animationPrefix + "reverse"; } } reset(); once(element, "animationend animationcancel", function(ref) { var type = ref.type; var hasReset = false; if (type === "animationcancel") { reject(); reset(); } else { resolve(); Promise.resolve().then(function() { hasReset = true; reset(); }); } requestAnimationFrame(function() { if (!hasReset) { addClass(element, clsCancelAnimation); requestAnimationFrame(function() { return removeClass(element, clsCancelAnimation); }); } }); }, false, function(ref) { var target = ref.target; return element === target; }); css(element, "animationDuration", duration + "ms"); addClass(element, cls); function reset() { css(element, "animationDuration", ""); removeClasses(element, animationPrefix + "\\S*"); } }); })); } var inProgress = new RegExp(animationPrefix + "(enter|leave)"); var Animation = { in: function(element, animation, duration, origin) { return animate(element, animation, duration, origin, false); }, out: function(element, animation, duration, origin) { return animate(element, animation, duration, origin, true); }, inProgress: function(element) { return inProgress.test(attr(element, "class")); }, cancel: function(element) { trigger(element, "animationcancel"); } }; 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 = getDimensions(element); var targetDim = getDimensions(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"]; boundary = getDimensions(boundary || window$1(element)); if (flip) { each(dirs, function(ref, prop) { var dir = ref[0]; var align = ref[1]; var alignFlip = ref[2]; if (!(flip === true || includes(flip, dir))) { return; } 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; elAttach[dir] === "center" && (apply(centerOffset, centerTargetOffset) || apply(-centerOffset, -centerTargetOffset)) || apply(elemOffset, targetOffset); } function apply(elemOffset, targetOffset) { var newVal = position[align] + elemOffset + targetOffset - elOffset[dir] * 2; 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 offset(element, coordinates) { element = toNode(element); if (coordinates) { var currentOffset = offset(element); var pos = css(element, "position"); [ "left", "top" ].forEach(function(prop) { if (prop in coordinates) { var value = css(element, prop); css(element, prop, coordinates[prop] - currentOffset[prop] + toFloat(pos === "absolute" && value === "auto" ? position(element)[prop] : value)); } }); return; } return getDimensions(element); } function getDimensions(element) { element = toNode(element); var ref = window$1(element); var top = ref.pageYOffset; var left = ref.pageXOffset; if (isWindow(element)) { var height = element.innerHeight; var width = element.innerWidth; return { top: top, left: left, height: height, width: width, bottom: top + height, right: left + width }; } var style, hidden; if (!isVisible(element)) { style = attr(element, "style"); hidden = attr(element, "hidden"); attr(element, { style: (style || "") + ";display:block !important;", hidden: null }); } var rect = element.getBoundingClientRect(); if (!isUndefined(style)) { attr(element, { style: style, hidden: hidden }); } return { height: rect.height, width: rect.width, top: rect.top + top, left: rect.left + left, bottom: rect.bottom + top, right: rect.right + left }; } function position(element) { element = toNode(element); var parent = element.offsetParent || docEl(element); var parentOffset = offset(parent); var ref = [ "top", "left" ].reduce(function(props, prop) { var propName$$1 = ucfirst(prop); props[prop] -= parentOffset[prop] + toFloat(css(element, "margin" + propName$$1)) + toFloat(css(parent, "border" + propName$$1 + "Width")); return props; }, offset(element)); var top = ref.top; var left = ref.left; return { top: top, left: left }; } var height = dimension("height"); var width = dimension("width"); function dimension(prop) { var propName$$1 = ucfirst(prop); return function(element, value) { element = toNode(element); if (isUndefined(value)) { if (isWindow(element)) { return element["inner" + propName$$1]; } if (isDocument(element)) { var doc = element.documentElement; return Math.max(doc["offset" + propName$$1], doc["scroll" + propName$$1]); } value = css(element, prop); value = value === "auto" ? element["offset" + propName$$1] : toFloat(value) || 0; return value - boxModelAdjust(prop, element); } else { css(element, prop, !value && value !== 0 ? "" : +value + boxModelAdjust(prop, element) + "px"); } }; } function boxModelAdjust(prop, element, sizing) { if (sizing === void 0) sizing = "border-box"; return css(element, "boxSizing") === sizing ? dirs[prop].slice(1).map(ucfirst).reduce(function(value, prop) { return value + toFloat(css(element, "padding" + prop)) + toFloat(css(element, "border" + prop + "Width")); }, 0) : 0; } 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 }; } function flipPosition(pos) { switch (pos) { case "left": return "right"; case "right": return "left"; case "top": return "bottom"; case "bottom": return "top"; default: return pos; } } function isInView(element, topOffset, leftOffset, relativeToViewport) { if (topOffset === void 0) topOffset = 0; if (leftOffset === void 0) leftOffset = 0; if (!isVisible(element)) { return false; } element = toNode(element); var win = window$1(element); var client, bounding; if (relativeToViewport) { client = element.getBoundingClientRect(); bounding = { top: -topOffset, left: -leftOffset, bottom: topOffset + height(win), right: leftOffset + width(win) }; } else { var ref = offsetPosition(element); var elTop = ref[0]; var elLeft = ref[1]; var top = win.pageYOffset; var left = win.pageXOffset; client = { top: elTop, left: elLeft, bottom: elTop + element.offsetHeight, right: elTop + element.offsetWidth }; bounding = { top: top - topOffset, left: left - leftOffset, bottom: top + topOffset + height(win), right: left + leftOffset + width(win) }; } return intersectRect(client, bounding) || pointInRect({ x: client.left, y: client.top }, bounding); } function scrolledOver(element, heightOffset) { if (heightOffset === void 0) heightOffset = 0; if (!isVisible(element)) { return 0; } element = toNode(element); var win = window$1(element); var doc = document$1(element); var elHeight = element.offsetHeight + heightOffset; var ref = offsetPosition(element); var top = ref[0]; var vp = height(win); var vh = vp + Math.min(0, top - vp); var diff = Math.max(0, vp - (height(doc) + heightOffset - (top + elHeight))); return clamp((vh + win.pageYOffset - top) / ((vh + (elHeight - (diff < vp ? diff : 0))) / 100) / 100); } function scrollTop(element, top) { element = toNode(element); if (isWindow(element) || isDocument(element)) { var ref = window$1(element); var scrollTo = ref.scrollTo; var pageXOffset = ref.pageXOffset; scrollTo(pageXOffset, top); } else { element.scrollTop = top; } } function offsetPosition(element) { var offset = [ 0, 0 ]; do { offset[0] += element.offsetTop; offset[1] += element.offsetLeft; if (css(element, "position") === "fixed") { var win = window$1(element); offset[0] += win.pageYOffset; offset[1] += win.pageXOffset; return offset; } } while (element = element.offsetParent); return offset; } function window$1(element) { return isWindow(element) ? element : document$1(element).defaultView; } function document$1(element) { return toNode(element).ownerDocument; } function docEl(element) { return document$1(element).documentElement; } 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) { return remove$1(this.reads, task) || remove$1(this.writes, task); }, flush: function() { runTasks(this.reads); runTasks(this.writes.splice(0, this.writes.length)); this.scheduled = false; if (this.reads.length || this.writes.length) { scheduleFlush(); } } }; function scheduleFlush() { if (!fastdom.scheduled) { fastdom.scheduled = true; requestAnimationFrame(fastdom.flush.bind(fastdom)); } } function runTasks(tasks) { var task; while (task = tasks.shift()) { task(); } } function remove$1(array, item) { var index = array.indexOf(item); return !!~index && !!array.splice(index, 1); } function MouseTracker() {} MouseTracker.prototype = { positions: [], position: null, init: function() { var this$1 = this; this.positions = []; this.position = null; var ticking = false; this.unbind = on(document, "mousemove", function(e) { if (ticking) { return; } setTimeout(function() { var time = Date.now(); var ref = this$1.positions; var length = ref.length; if (length && time - this$1.positions[length - 1].time > 100) { this$1.positions.splice(0, length); } this$1.positions.push({ time: time, x: e.pageX, y: e.pageY }); if (this$1.positions.length > 5) { this$1.positions.shift(); } ticking = false; }, 5); ticking = true; }); }, cancel: function() { if (this.unbind) { this.unbind(); } }, movesTo: function(target) { if (this.positions.length < 2) { return false; } var p = offset(target); var position$$1 = this.positions[this.positions.length - 1]; var ref = this.positions; var prevPos = ref[0]; if (p.left <= position$$1.x && position$$1.x <= p.right && p.top <= position$$1.y && position$$1.y <= p.bottom) { return false; } var points = [ [ { x: p.left, y: p.top }, { x: p.right, y: p.bottom } ], [ { x: p.right, y: p.top }, { x: p.left, y: p.bottom } ] ]; if (p.right <= position$$1.x) ; else if (p.left >= position$$1.x) { points[0].reverse(); points[1].reverse(); } else if (p.bottom <= position$$1.y) { points[0].reverse(); } else if (p.top >= position$$1.y) { points[1].reverse(); } return !!points.reduce(function(result, point) { return result + (slope(prevPos, point[0]) < slope(position$$1, point[0]) && slope(prevPos, point[1]) > slope(position$$1, point[1])); }, 0); } }; function slope(a, b) { return (b.y - a.y) / (b.x - a.x); } var strats = {}; strats.args = strats.events = strats.created = strats.beforeConnect = strats.connected = strats.beforeDisconnect = strats.disconnected = strats.destroy = function(parentVal, childVal) { parentVal = parentVal && !isArray(parentVal) ? [ parentVal ] : parentVal; return childVal ? parentVal ? parentVal.concat(childVal) : isArray(childVal) ? childVal : [ childVal ] : parentVal; }; strats.update = function(parentVal, childVal) { return sortBy(strats.args(parentVal, isFunction(childVal) ? { read: childVal } : childVal), "order"); }; strats.props = function(parentVal, childVal) { if (isArray(childVal)) { childVal = childVal.reduce(function(value, key) { value[key] = String; return value; }, {}); } return strats.methods(parentVal, childVal); }; strats.computed = strats.methods = function(parentVal, childVal) { return childVal ? parentVal ? assign({}, parentVal, childVal) : childVal : parentVal; }; 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); } var defaultStrat = function(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 {}; } } var id = 0; var Player = function(el) { this.id = ++id; this.el = toNode(el); }; Player.prototype.isVideo = function() { return this.isYoutube() || this.isVimeo() || this.isHTML5(); }; Player.prototype.isHTML5 = function() { return this.el.tagName === "VIDEO"; }; Player.prototype.isIFrame = function() { return this.el.tagName === "IFRAME"; }; Player.prototype.isYoutube = function() { return this.isIFrame() && !!this.el.src.match(/\/\/.*?youtube(-nocookie)?\.[a-z]+\/(watch\?v=[^&\s]+|embed)|youtu\.be\/.*/); }; Player.prototype.isVimeo = function() { return this.isIFrame() && !!this.el.src.match(/vimeo\.com\/video\/.*/); }; Player.prototype.enableApi = function() { var this$1 = this; if (this.ready) { return this.ready; } var youtube = this.isYoutube(); var vimeo = this.isVimeo(); var poller; if (youtube || vimeo) { return this.ready = new Promise(function(resolve) { once(this$1.el, "load", function() { if (youtube) { var listener = function() { return post(this$1.el, { event: "listening", id: this$1.id }); }; poller = setInterval(listener, 100); listener(); } }); listen(function(data$$1) { return youtube && data$$1.id === this$1.id && data$$1.event === "onReady" || vimeo && Number(data$$1.player_id) === this$1.id; }).then(function() { resolve(); poller && clearInterval(poller); }); attr(this$1.el, "src", "" + this$1.el.src + (includes(this$1.el.src, "?") ? "&" : "?") + (youtube ? "enablejsapi=1" : "api=1&player_id=" + this$1.id)); }); } return Promise.resolve(); }; Player.prototype.play = function() { var this$1 = this; if (!this.isVideo()) { return; } if (this.isIFrame()) { this.enableApi().then(function() { return post(this$1.el, { func: "playVideo", method: "play" }); }); } else if (this.isHTML5()) { try { var promise = this.el.play(); if (promise) { promise.catch(noop); } } catch (e) {} } }; Player.prototype.pause = function() { var this$1 = this; if (!this.isVideo()) { return; } if (this.isIFrame()) { this.enableApi().then(function() { return post(this$1.el, { func: "pauseVideo", method: "pause" }); }); } else if (this.isHTML5()) { this.el.pause(); } }; Player.prototype.mute = function() { var this$1 = this; if (!this.isVideo()) { return; } if (this.isIFrame()) { this.enableApi().then(function() { return post(this$1.el, { func: "mute", method: "setVolume", value: 0 }); }); } else if (this.isHTML5()) { this.el.muted = true; attr(this.el, "muted", ""); } }; function post(el, cmd) { try { el.contentWindow.postMessage(JSON.stringify(assign({ event: "command" }, cmd)), "*"); } catch (e) {} } function listen(cb) { return new Promise(function(resolve) { once(window, "message", function(_, data$$1) { return resolve(data$$1); }, false, function(ref) { var data$$1 = ref.data; if (!data$$1 || !isString(data$$1)) { return; } try { data$$1 = JSON.parse(data$$1); } catch (e) { return; } return data$$1 && cb(data$$1); }); }); } var touch = {}, clickTimeout, swipeTimeout, tapTimeout, clicked; function swipeDirection(ref) { var x1 = ref.x1; var x2 = ref.x2; var y1 = ref.y1; var y2 = ref.y2; return Math.abs(x1 - x2) >= Math.abs(y1 - y2) ? x1 - x2 > 0 ? "Left" : "Right" : y1 - y2 > 0 ? "Up" : "Down"; } function cancelAll() { clickTimeout && clearTimeout(clickTimeout); swipeTimeout && clearTimeout(swipeTimeout); tapTimeout && clearTimeout(tapTimeout); clickTimeout = swipeTimeout = tapTimeout = null; touch = {}; } ready(function() { on(document, "click", function() { return clicked = true; }, true); on(document, pointerDown, function(e) { var target = e.target; var ref = getPos$1(e); var x = ref.x; var y = ref.y; var now = Date.now(); var type = getType(e.type); if (touch.type && touch.type !== type) { return; } touch.el = "tagName" in target ? target : target.parentNode; clickTimeout && clearTimeout(clickTimeout); touch.x1 = x; touch.y1 = y; if (touch.last && now - touch.last <= 250) { touch = {}; } touch.type = type; touch.last = now; clicked = e.button > 0; }); on(document, pointerMove, function(e) { if (e.defaultPrevented) { return; } var ref = getPos$1(e); var x = ref.x; var y = ref.y; touch.x2 = x; touch.y2 = y; }); on(document, pointerUp, function(ref) { var type = ref.type; var target = ref.target; if (touch.type !== getType(type)) { return; } if (touch.x2 && Math.abs(touch.x1 - touch.x2) > 30 || touch.y2 && Math.abs(touch.y1 - touch.y2) > 30) { swipeTimeout = setTimeout(function() { if (touch.el) { trigger(touch.el, "swipe"); trigger(touch.el, "swipe" + swipeDirection(touch)); } touch = {}; }); } else if ("last" in touch) { tapTimeout = setTimeout(function() { return trigger(touch.el, "tap"); }); if (touch.el && type !== "mouseup" && within(target, touch.el)) { clickTimeout = setTimeout(function() { clickTimeout = null; if (touch.el && !clicked) { trigger(touch.el, "click"); } touch = {}; }, 350); } } else { touch = {}; } }); on(document, "touchcancel", cancelAll); on(window, "scroll", cancelAll); }); var touching = false; on(document, "touchstart", function() { return touching = true; }, true); on(document, "click", function() { touching = false; }); on(document, "touchcancel", function() { return touching = false; }, true); function isTouch(e) { return touching || e.pointerType === "touch"; } function getPos$1(e) { var touches = e.touches; var changedTouches = e.changedTouches; var ref = touches && touches[0] || changedTouches && changedTouches[0] || e; var x = ref.pageX; var y = ref.pageY; return { x: x, y: y }; } function getType(type) { return type.slice(0, 5); } var util = Object.freeze({ ajax: ajax, getImage: getImage, transition: transition, Transition: Transition, animate: animate, Animation: Animation, attr: attr, hasAttr: hasAttr, removeAttr: removeAttr, data: data, addClass: addClass, removeClass: removeClass, removeClasses: removeClasses, replaceClass: replaceClass, hasClass: hasClass, toggleClass: toggleClass, positionAt: positionAt, offset: offset, position: position, height: height, width: width, boxModelAdjust: boxModelAdjust, flipPosition: flipPosition, isInView: isInView, scrolledOver: scrolledOver, scrollTop: scrollTop, isReady: isReady, ready: ready, index: index, getIndex: getIndex, empty: empty, html: html, prepend: prepend, append: append, before: before, after: after, remove: remove, wrapAll: wrapAll, wrapInner: wrapInner, unwrap: unwrap, fragment: fragment, apply: apply, $: $, $$: $$, isIE: isIE, isRtl: isRtl, hasTouch: hasTouch, pointerDown: pointerDown, pointerMove: pointerMove, pointerUp: pointerUp, pointerEnter: pointerEnter, pointerLeave: pointerLeave, on: on, off: off, once: once, trigger: trigger, createEvent: createEvent, toEventTargets: toEventTargets, preventClick: preventClick, fastdom: fastdom, isVoidElement: isVoidElement, isVisible: isVisible, selInput: selInput, isInput: isInput, filter: filter, within: within, bind: bind, hasOwn: hasOwn, hyphenate: hyphenate, camelize: camelize, ucfirst: ucfirst, startsWith: startsWith, endsWith: endsWith, includes: includes, isArray: isArray, isFunction: isFunction, isObject: isObject, isPlainObject: isPlainObject, isWindow: isWindow, isDocument: isDocument, isJQuery: isJQuery, isNode: isNode, isNodeCollection: isNodeCollection, isBoolean: isBoolean, isString: isString, isNumber: isNumber, isNumeric: isNumeric, isUndefined: isUndefined, toBoolean: toBoolean, toNumber: toNumber, toFloat: toFloat, toNode: toNode, toNodes: toNodes, toList: toList, toMs: toMs, swap: swap, assign: assign, each: each, sortBy: sortBy, clamp: clamp, noop: noop, intersectRect: intersectRect, pointInRect: pointInRect, Dimensions: Dimensions, MouseTracker: MouseTracker, mergeOptions: mergeOptions, parseOptions: parseOptions, Player: Player, Promise: Promise, Deferred: Deferred, query: query, queryAll: queryAll, find: find, findAll: findAll, matches: matches, closest: closest, parents: parents, escape: escape, css: css, getStyles: getStyles, getStyle: getStyle, getCssVar: getCssVar, propName: propName, isTouch: isTouch, getPos: getPos$1 }); function componentAPI(UIkit) { var DATA = UIkit.data; var components = {}; UIkit.component = function(name, options) { if (!options) { if (isPlainObject(components[name])) { components[name] = UIkit.extend(components[name]); } return components[name]; } UIkit[name] = function(element, data$$1) { var i = arguments.length, argsArray = Array(i); while (i--) argsArray[i] = arguments[i]; var component = UIkit.component(name); if (isPlainObject(element)) { return new component({ data: element }); } if (component.options.functional) { return new component({ data: [].concat(argsArray) }); } return element && element.nodeType ? init(element) : $$(element).map(init)[0]; function init(element) { var instance = UIkit.getComponent(element, name); if (instance) { if (!data$$1) { return instance; } else { instance.$destroy(); } } return new component({ el: element, data: data$$1 }); } }; var opt = isPlainObject(options) ? assign({}, options) : options.options; opt.name = name; if (opt.install) { opt.install(UIkit, opt, name); } if (UIkit._initialized && !opt.functional) { var id = hyphenate(name); 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(); } }; } function getComponentName(attribute) { return startsWith(attribute, "uk-") || startsWith(attribute, "data-uk-") ? camelize(attribute.replace("data-uk-", "").replace("uk-", "")) : false; } function boot(UIkit) { var connect = UIkit.connect; var disconnect = UIkit.disconnect; if (!("MutationObserver" in window)) { return; } if (document.body) { init(); } else { new MutationObserver(function() { if (document.body) { this.disconnect(); init(); } }).observe(document, { childList: true, subtree: true }); } function init() { apply$$1(document.body, connect); fastdom.flush(); new MutationObserver(function(mutations) { return mutations.forEach(applyMutation); }).observe(document, { childList: true, subtree: true, characterData: true, attributes: true }); UIkit._initialized = true; } function applyMutation(mutation) { var target = mutation.target; var type = mutation.type; var update = type !== "attributes" ? applyChildList(mutation) : applyAttribute(mutation); update && UIkit.update(target); } function applyAttribute(ref) { var target = ref.target; var attributeName = ref.attributeName; if (attributeName === "href") { return true; } var name = getComponentName(attributeName); if (!name || !(name in UIkit)) { return; } if (hasAttr(target, attributeName)) { UIkit[name](target); return true; } var component = UIkit.getComponent(target, name); if (component) { component.$destroy(); return true; } } function applyChildList(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); } return true; } function apply$$1(node, fn) { if (node.nodeType !== 1 || hasAttr(node, "uk-no-boot")) { return; } fn(node); node = node.firstElementChild; while (node) { var next = node.nextElementSibling; apply$$1(node, fn); node = next; } } } 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) { e = createEvent(e || "update"); element = element ? toNode(element) : document.body; path(element).map(function(element) { return update(element[DATA], e); }); apply(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$$1, e) { if (!data$$1) { return; } for (var name in data$$1) { if (data$$1[name]._connected) { data$$1[name]._callUpdate(e); } } } function path(element) { var path = []; while (element && element !== document.body && element.parentNode) { element = element.parentNode; path.unshift(element); } return path; } } 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._initProps(); this._callHook("beforeConnect"); this._connected = true; this._initEvents(); this._initObserver(); this._callHook("connected"); this._callUpdate(); }; UIkit.prototype._callDisconnected = function() { if (!this._connected) { return; } this._callHook("beforeDisconnect"); if (this._observer) { this._observer.disconnect(); this._observer = null; } this._unbindEvents(); this._callHook("disconnected"); this._connected = false; }; UIkit.prototype._callUpdate = function(e) { var this$1 = this; e = createEvent(e || "update"); var type = e.type; if (includes([ "update", "load", "resize" ], type)) { this._resetComputeds(); } var updates = this.$options.update; var ref = this._frames; var reads = ref.reads; var writes = ref.writes; if (!updates) { return; } updates.forEach(function(ref, i) { var read = ref.read; var write = ref.write; var events = ref.events; if (type !== "update" && !includes(events, type)) { return; } if (read && !includes(fastdom.reads, reads[i])) { reads[i] = fastdom.read(function() { var result = this$1._connected && read.call(this$1, this$1._data, e); if (result === false && write) { fastdom.clear(writes[i]); delete writes[i]; } else if (isPlainObject(result)) { assign(this$1._data, result); } delete reads[i]; }); } if (write && !includes(fastdom.writes, writes[i])) { writes[i] = fastdom.write(function() { this$1._connected && write.call(this$1, this$1._data, e); delete writes[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._frames = { reads: {}, writes: {} }; this._events = []; this._uid = uid++; this._initData(); this._initMethods(); this._initComputeds(); this._callHook("created"); if (options.el) { this.$mount(options.el); } }; UIkit.prototype._initData = function() { var this$1 = this; var ref = this.$options; var data$$1 = ref.data; if (data$$1 === void 0) data$$1 = {}; for (var key in data$$1) { this$1.$props[key] = this$1[key] = data$$1[key]; } }; UIkit.prototype._initMethods = function() { var this$1 = this; var ref = this.$options; var methods = ref.methods; if (methods) { for (var key in methods) { this$1[key] = bind(methods[key], this$1); } } }; UIkit.prototype._initComputeds = function() { var this$1 = this; var ref = this.$options; var computed = ref.computed; this._resetComputeds(); if (computed) { for (var key in computed) { registerComputed(this$1, key, computed[key]); } } }; UIkit.prototype._resetComputeds = function() { this._computeds = {}; }; UIkit.prototype._initProps = function(props) { var this$1 = this; var key; this._resetComputeds(); props = props || getProps(this.$options, this.$name); for (key in props) { if (!isUndefined(props[key])) { this$1.$props[key] = props[key]; } } var exclude = [ this.$options.computed, this.$options.methods ]; for (key in this$1.$props) { if (key in props && notIn(exclude, key)) { this$1[key] = this$1.$props[key]; } } }; UIkit.prototype._initEvents = function() { var this$1 = this; 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(); }); this._events = []; }; UIkit.prototype._initObserver = function() { var this$1 = this; var ref = this.$options; var attrs = ref.attrs; var props = ref.props; var el = ref.el; if (this._observer || !props || attrs === false) { return; } attrs = isArray(attrs) ? attrs : Object.keys(props); this._observer = new MutationObserver(function() { var data$$1 = getProps(this$1.$options, this$1.$name); if (attrs.some(function(key) { return !isUndefined(data$$1[key]) && data$$1[key] !== this$1.$props[key]; })) { this$1.$reset(); } }); var filter$$1 = attrs.map(function(key) { return hyphenate(key); }).concat(this.$name); this._observer.observe(el, { attributes: true, attributeFilter: filter$$1.concat(filter$$1.map(function(key) { return "data-" + key; })) }); }; 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)) { 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.call(component, $props, $el); } return _computeds[key]; }, set: function(value) { component._computeds[key] = value; } }); } 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$$1 = 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$$1 && !filter$$1.call(component)) { return; } handler = detail(isString(handler) ? component[handler] : bind(handler, component)); if (self) { handler = selfFilter(handler); } component._events.push(on(el, name, !delegate ? null : isString(delegate) ? delegate : delegate.call(component), handler, isBoolean(passive) ? { passive: passive, capture: capture } : capture)); } function selfFilter(handler) { return function selfHandler(e) { if (e.target === e.currentTarget || e.target === e.current) { return handler.call(null, e); } }; } function notIn(options, key) { return options.every(function(arr) { return !arr || !hasOwn(arr, key); }); } function detail(listener) { return function(e) { return isArray(e.detail) ? listener.apply(void 0, [ e ].concat(e.detail)) : listener(e); }; } 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 normalizeData(ref, ref$1) { var data$$1 = ref.data; var el = ref.el; var args = ref$1.args; var props = ref$1.props; if (props === void 0) props = {}; data$$1 = isArray(data$$1) ? args && args.length ? data$$1.slice(0, args.length).reduce(function(data$$1, value, index$$1) { if (isPlainObject(value)) { assign(data$$1, value); } else { data$$1[args[index$$1]] = value; } return data$$1; }, {}) : undefined : data$$1; if (data$$1) { for (var key in data$$1) { if (isUndefined(data$$1[key])) { delete data$$1[key]; } else { data$$1[key] = props[key] ? coerce(props[key], data$$1[key], el) : data$$1[key]; } } } return data$$1; } } function instanceAPI(UIkit) { var DATA = UIkit.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.$emit = function(e) { this._callUpdate(e); }; 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 (!Object.keys(el[DATA]).length) { delete el[DATA]; } if (removeEl) { remove(this.$el); } }; UIkit.prototype.$create = function(component, element, data$$1) { return UIkit[component](element, data$$1); }; UIkit.prototype.$update = UIkit.update; UIkit.prototype.$getComponent = UIkit.getComponent; var names = {}; Object.defineProperties(UIkit.prototype, { $container: Object.getOwnPropertyDescriptor(UIkit, "container"), $name: { get: function() { var ref = this.$options; var name = ref.name; if (!names[name]) { names[name] = UIkit.prefix + hyphenate(name); } return names[name]; } } }); } var UIkit = function(options) { this._init(options); }; UIkit.util = util; UIkit.data = "__uikit__"; UIkit.prefix = "uk-"; UIkit.options = {}; globalAPI(UIkit); hooksAPI(UIkit); stateAPI(UIkit); componentAPI(UIkit); instanceAPI(UIkit); var Class = { connected: function() { addClass(this.$el, this.$name); } }; var Togglable = { props: { cls: Boolean, animation: "list", duration: Number, origin: String, transition: String, queued: Boolean }, data: { cls: false, animation: [ false ], duration: 200, origin: false, transition: "linear", queued: false, 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, show, animate$$1) { var this$1 = this; return new Promise(function(resolve) { targets = toNodes(targets); var all = function(targets) { return Promise.all(targets.map(function(el) { return this$1._toggleElement(el, show, animate$$1); })); }; var toggled = targets.filter(function(el) { return this$1.isToggled(el); }); var untoggled = targets.filter(function(el) { return !includes(toggled, el); }); var p; if (!this$1.queued || !isUndefined(animate$$1) || !isUndefined(show) || !this$1.hasAnimation || targets.length < 2) { p = all(untoggled.concat(toggled)); } else { var body = document.body; var scroll = body.scrollTop; var el = toggled[0]; var inProgress = Animation.inProgress(el) && hasClass(el, "uk-animation-leave") || Transition.inProgress(el) && el.style.height === "0px"; p = all(toggled); if (!inProgress) { p = p.then(function() { var p = all(untoggled); body.scrollTop = scroll; return p; }); } } p.then(resolve, noop); }); }, toggleNow: function(targets, show) { var this$1 = this; return new Promise(function(resolve) { return Promise.all(toNodes(targets).map(function(el) { return this$1._toggleElement(el, show, false); })).then(resolve, noop); }); }, isToggled: function(el) { var nodes = toNodes(el || this.$el); return this.cls ? hasClass(nodes, this.cls.split(" ")[0]) : !hasAttr(nodes, "hidden"); }, updateAria: function(el) { if (this.cls === false) { attr(el, "aria-hidden", !this.isToggled(el)); } }, _toggleElement: function(el, show, animate$$1) { var this$1 = this; show = isBoolean(show) ? show : Animation.inProgress(el) ? hasClass(el, "uk-animation-leave") : Transition.inProgress(el) ? el.style.height === "0px" : !this.isToggled(el); if (!trigger(el, "before" + (show ? "show" : "hide"), [ this ])) { return Promise.reject(); } var promise = (animate$$1 === false || !this.hasAnimation ? this._toggleImmediate : this.hasTransition ? this._toggleHeight : this._toggleAnimation)(el, show); trigger(el, show ? "show" : "hide", [ this ]); return promise.then(function() { trigger(el, show ? "shown" : "hidden", [ this$1 ]); this$1.$update(el); }); }, _toggle: function(el, toggled) { if (!el) { return; } var changed; if (this.cls) { changed = includes(this.cls, " ") || Boolean(toggled) !== hasClass(el, this.cls); changed && toggleClass(el, this.cls, includes(this.cls, " ") ? undefined : toggled); } else { changed = Boolean(toggled) === hasAttr(el, "hidden"); changed && attr(el, "hidden", !toggled ? "" : null); } $$("[autofocus]", el).some(function(el) { return isVisible(el) && (el.focus() || true); }); this.updateAria(el); changed && this.$update(el); }, _toggleImmediate: function(el, show) { this._toggle(el, show); return Promise.resolve(); }, _toggleHeight: function(el, show) { var this$1 = this; 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 (!this.isToggled(el)) { this._toggle(el, true); } height(el, ""); fastdom.flush(); var endHeight = height(el) + (inProgress ? 0 : inner); height(el, currentHeight); return (show ? Transition.start(el, assign({}, this.initProps, { overflow: "hidden", height: endHeight }), Math.round(this.duration * (1 - currentHeight / endHeight)), this.transition) : Transition.start(el, this.hideProps, Math.round(this.duration * (currentHeight / endHeight)), this.transition).then(function() { return this$1._toggle(el, false); })).then(function() { return css(el, this$1.initProps); }); }, _toggleAnimation: function(el, show) { var this$1 = this; Animation.cancel(el); if (show) { this._toggle(el, true); return Animation.in(el, this.animation[0], this.duration, this.origin); } return Animation.out(el, this.animation[1] || this.animation[0], this.duration, this.origin).then(function() { return this$1._toggle(el, false); }); } } }; var Accordion = { mixins: [ Class, Togglable ], props: { targets: String, active: null, collapsible: Boolean, multiple: Boolean, toggle: String, content: String, transition: String }, data: { targets: "> *", active: false, animation: [ true ], collapsible: true, multiple: false, clsOpen: "uk-open", toggle: "> .uk-accordion-title", content: "> .uk-accordion-content", transition: "ease" }, computed: { items: function(ref, $el) { var targets = ref.targets; return $$(targets, $el); } }, events: [ { name: "click", delegate: function() { return this.targets + " " + this.$props.toggle; }, handler: function(e) { e.preventDefault(); this.toggle(index($$(this.targets + " " + this.$props.toggle, this.$el), e.current)); } } ], connected: function() { if (this.active === false) { return; } var active = this.items[Number(this.active)]; if (active && !hasClass(active, this.clsOpen)) { this.toggle(active, false); } }, update: function() { var this$1 = this; this.items.forEach(function(el) { return this$1._toggleImmediate($(this$1.content, el), hasClass(el, this$1.clsOpen)); }); var active = !this.collapsible && !hasClass(this.items, this.clsOpen) && this.items[0]; if (active) { this.toggle(active, false); } }, methods: { toggle: function(item, animate$$1) { var this$1 = this; var index$$1 = getIndex(item, this.items); var active = filter(this.items, "." + this.clsOpen); item = this.items[index$$1]; item && [ item ].concat(!this.multiple && !includes(active, item) && active || []).forEach(function(el) { var isItem = el === item; var state = isItem && !hasClass(el, this$1.clsOpen); if (!state && isItem && !this$1.collapsible && active.length < 2) { return; } toggleClass(el, this$1.clsOpen, state); var content = el._wrapper ? el._wrapper.firstElementChild : $(this$1.content, el); if (!el._wrapper) { el._wrapper = wrapAll(content, "