(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, "<div>");
                        attr(el._wrapper, "hidden", state ? "" : null);
                    }
                    this$1._toggleImmediate(content, true);
                    this$1.toggleElement(el._wrapper, state, animate$$1).then(function() {
                        if (hasClass(el, this$1.clsOpen) === state) {
                            if (!state) {
                                this$1._toggleImmediate(content, false);
                            }
                            el._wrapper = null;
                            unwrap(content);
                        }
                    });
                });
            }
        }
    };
    var Alert = {
        mixins: [ Class, Togglable ],
        args: "animation",
        props: {
            close: String
        },
        data: {
            animation: [ true ],
            selClose: ".uk-alert-close",
            duration: 150,
            hideProps: assign({
                opacity: 0
            }, Togglable.data.hideProps)
        },
        events: [ {
            name: "click",
            delegate: function() {
                return this.selClose;
            },
            handler: function(e) {
                e.preventDefault();
                this.close();
            }
        } ],
        methods: {
            close: function() {
                var this$1 = this;
                this.toggleElement(this.$el).then(function() {
                    return this$1.$destroy(true);
                });
            }
        }
    };
    function Core(UIkit) {
        ready(function() {
            UIkit.update();
            var scroll = 0;
            var started = 0;
            on(window, "load resize", function(e) {
                return UIkit.update(null, e);
            });
            on(window, "scroll", function(e) {
                var target = e.target;
                e.dir = scroll <= window.pageYOffset ? "down" : "up";
                e.pageYOffset = scroll = window.pageYOffset;
                UIkit.update(target.nodeType !== 1 ? document.body : target, e);
            }, {
                passive: true,
                capture: true
            });
            on(document, "loadedmetadata load", function(ref) {
                var target = ref.target;
                return UIkit.update(target, "load");
            }, true);
            on(document, "animationstart", function(ref) {
                var target = ref.target;
                if ((css(target, "animationName") || "").match(/^uk-.*(left|right)/)) {
                    started++;
                    css(document.body, "overflowX", "hidden");
                    setTimeout(function() {
                        if (!--started) {
                            css(document.body, "overflowX", "");
                        }
                    }, toMs(css(target, "animationDuration")) + 100);
                }
            }, true);
            if (!hasTouch) {
                return;
            }
            var cls = "uk-hover";
            on(document, "tap", function(ref) {
                var target = ref.target;
                return $$("." + cls).forEach(function(el) {
                    return !within(target, el) && removeClass(el, cls);
                });
            });
            Object.defineProperty(UIkit, "hoverSelector", {
                set: function(selector) {
                    on(document, "tap", selector, function(ref) {
                        var current = ref.current;
                        return addClass(current, cls);
                    });
                }
            });
            UIkit.hoverSelector = ".uk-animation-toggle, .uk-transition-toggle, [uk-hover]";
        });
    }
    var Video = {
        args: "autoplay",
        props: {
            automute: Boolean,
            autoplay: Boolean
        },
        data: {
            automute: false,
            autoplay: true
        },
        computed: {
            inView: function(ref) {
                var autoplay = ref.autoplay;
                return autoplay === "inview";
            }
        },
        connected: function() {
            if (this.inView && !hasAttr(this.$el, "preload")) {
                this.$el.preload = "none";
            }
            this.player = new Player(this.$el);
            if (this.automute) {
                this.player.mute();
            }
        },
        update: {
            read: function(_, ref) {
                var type = ref.type;
                return !this.player || (type === "scroll" || type === "resize") && !this.inView ? false : {
                    visible: isVisible(this.$el) && css(this.$el, "visibility") !== "hidden",
                    inView: this.inView && isInView(this.$el)
                };
            },
            write: function(ref) {
                var visible = ref.visible;
                var inView = ref.inView;
                if (!visible || this.inView && !inView) {
                    this.player.pause();
                } else if (this.autoplay === true || this.inView && inView) {
                    this.player.play();
                }
            },
            events: [ "load", "resize", "scroll" ]
        }
    };
    var Cover = {
        mixins: [ Class, Video ],
        props: {
            width: Number,
            height: Number
        },
        data: {
            automute: true
        },
        update: {
            read: function() {
                var el = this.$el;
                if (!isVisible(el)) {
                    return false;
                }
                var ref = el.parentNode;
                var height$$1 = ref.offsetHeight;
                var width$$1 = ref.offsetWidth;
                return {
                    height: height$$1,
                    width: width$$1
                };
            },
            write: function(ref) {
                var height$$1 = ref.height;
                var width$$1 = ref.width;
                var el = this.$el;
                var elWidth = this.width || el.naturalWidth || el.videoWidth || el.clientWidth;
                var elHeight = this.height || el.naturalHeight || el.videoHeight || el.clientHeight;
                if (!elWidth || !elHeight) {
                    return;
                }
                css(el, Dimensions.cover({
                    width: elWidth,
                    height: elHeight
                }, {
                    width: width$$1 + (width$$1 % 2 ? 1 : 0),
                    height: height$$1 + (height$$1 % 2 ? 1 : 0)
                }));
            },
            events: [ "load", "resize" ]
        }
    };
    var Position = {
        props: {
            pos: String,
            offset: null,
            flip: Boolean,
            clsPos: String
        },
        data: {
            pos: "bottom-" + (!isRtl ? "left" : "right"),
            flip: true,
            offset: false,
            clsPos: ""
        },
        computed: {
            pos: function(ref) {
                var pos = ref.pos;
                return (pos + (!includes(pos, "-") ? "-center" : "")).split("-");
            },
            dir: function() {
                return this.pos[0];
            },
            align: function() {
                return this.pos[1];
            }
        },
        methods: {
            positionAt: function(element, target, boundary) {
                removeClasses(element, this.clsPos + "-(top|bottom|left|right)(-[a-z]+)?");
                css(element, {
                    top: "",
                    left: ""
                });
                var node;
                var ref = this;
                var offset$$1 = ref.offset;
                offset$$1 = isNumeric(offset$$1) ? offset$$1 : (node = $(offset$$1)) ? offset(node)[axis === "x" ? "left" : "top"] - offset(target)[axis === "x" ? "right" : "bottom"] : 0;
                var axis = this.getAxis();
                var ref$1 = positionAt(element, target, axis === "x" ? flipPosition(this.dir) + " " + this.align : this.align + " " + flipPosition(this.dir), axis === "x" ? this.dir + " " + this.align : this.align + " " + this.dir, axis === "x" ? "" + (this.dir === "left" ? -offset$$1 : offset$$1) : " " + (this.dir === "top" ? -offset$$1 : offset$$1), null, this.flip, boundary).target;
                var x = ref$1.x;
                var y = ref$1.y;
                this.dir = axis === "x" ? x : y;
                this.align = axis === "x" ? y : x;
                toggleClass(element, this.clsPos + "-" + this.dir + "-" + this.align, this.offset === false);
            },
            getAxis: function() {
                return this.dir === "top" || this.dir === "bottom" ? "y" : "x";
            }
        }
    };
    var active;
    var Drop = {
        mixins: [ Position, Togglable ],
        args: "pos",
        props: {
            mode: "list",
            toggle: Boolean,
            boundary: Boolean,
            boundaryAlign: Boolean,
            delayShow: Number,
            delayHide: Number,
            clsDrop: String
        },
        data: {
            mode: [ "click", "hover" ],
            toggle: "- *",
            boundary: window,
            boundaryAlign: false,
            delayShow: 0,
            delayHide: 800,
            clsDrop: false,
            hoverIdle: 200,
            animation: [ "uk-animation-fade" ],
            cls: "uk-open"
        },
        computed: {
            boundary: function(ref, $el) {
                var boundary = ref.boundary;
                return query(boundary, $el);
            },
            clsDrop: function(ref) {
                var clsDrop = ref.clsDrop;
                return clsDrop || "uk-" + this.$options.name;
            },
            clsPos: function() {
                return this.clsDrop;
            }
        },
        created: function() {
            this.tracker = new MouseTracker();
        },
        connected: function() {
            addClass(this.$el, this.clsDrop);
            var ref = this.$props;
            var toggle = ref.toggle;
            this.toggle = toggle && this.$create("toggle", query(toggle, this.$el), {
                target: this.$el,
                mode: this.mode
            });
            this.updateAria(this.$el);
        },
        events: [ {
            name: "click",
            delegate: function() {
                return "." + this.clsDrop + "-close";
            },
            handler: function(e) {
                e.preventDefault();
                this.hide(false);
            }
        }, {
            name: "click",
            delegate: function() {
                return 'a[href^="#"]';
            },
            handler: function(e) {
                if (e.defaultPrevented) {
                    return;
                }
                var id = e.target.hash;
                if (!id) {
                    e.preventDefault();
                }
                if (!id || !within(id, this.$el)) {
                    this.hide(false);
                }
            }
        }, {
            name: "beforescroll",
            handler: function() {
                this.hide(false);
            }
        }, {
            name: "toggle",
            self: true,
            handler: function(e, toggle) {
                e.preventDefault();
                if (this.isToggled()) {
                    this.hide(false);
                } else {
                    this.show(toggle, false);
                }
            }
        }, {
            name: pointerEnter,
            filter: function() {
                return includes(this.mode, "hover");
            },
            handler: function(e) {
                if (isTouch(e)) {
                    return;
                }
                if (active && active !== this && active.toggle && includes(active.toggle.mode, "hover") && !within(e.target, active.toggle.$el) && !pointInRect({
                    x: e.pageX,
                    y: e.pageY
                }, offset(active.$el))) {
                    active.hide(false);
                }
                e.preventDefault();
                this.show(this.toggle);
            }
        }, {
            name: "toggleshow",
            handler: function(e, toggle) {
                if (toggle && !includes(toggle.target, this.$el)) {
                    return;
                }
                e.preventDefault();
                this.show(toggle || this.toggle);
            }
        }, {
            name: "togglehide " + pointerLeave,
            handler: function(e, toggle) {
                if (isTouch(e) || toggle && !includes(toggle.target, this.$el)) {
                    return;
                }
                e.preventDefault();
                if (this.toggle && includes(this.toggle.mode, "hover")) {
                    this.hide();
                }
            }
        }, {
            name: "beforeshow",
            self: true,
            handler: function() {
                this.clearTimers();
                Animation.cancel(this.$el);
                this.position();
            }
        }, {
            name: "show",
            self: true,
            handler: function() {
                this.tracker.init();
                if (this.toggle) {
                    addClass(this.toggle.$el, this.cls);
                    attr(this.toggle.$el, "aria-expanded", "true");
                }
                registerEvent();
            }
        }, {
            name: "beforehide",
            self: true,
            handler: function() {
                this.clearTimers();
            }
        }, {
            name: "hide",
            handler: function(ref) {
                var target = ref.target;
                if (this.$el !== target) {
                    active = active === null && within(target, this.$el) && this.isToggled() ? this : active;
                    return;
                }
                active = this.isActive() ? null : active;
                if (this.toggle) {
                    removeClass(this.toggle.$el, this.cls);
                    attr(this.toggle.$el, "aria-expanded", "false");
                    this.toggle.$el.blur();
                    $$("a, button", this.toggle.$el).forEach(function(el) {
                        return el.blur();
                    });
                }
                this.tracker.cancel();
            }
        } ],
        update: {
            write: function() {
                if (this.isToggled() && !Animation.inProgress(this.$el)) {
                    this.position();
                }
            },
            events: [ "resize" ]
        },
        methods: {
            show: function(toggle, delay) {
                var this$1 = this;
                if (delay === void 0) delay = true;
                var show = function() {
                    return !this$1.isToggled() && this$1.toggleElement(this$1.$el, true);
                };
                var tryShow = function() {
                    this$1.toggle = toggle || this$1.toggle;
                    this$1.clearTimers();
                    if (this$1.isActive()) {
                        return;
                    } else if (delay && active && active !== this$1 && active.isDelaying) {
                        this$1.showTimer = setTimeout(this$1.show, 10);
                        return;
                    } else if (this$1.isParentOf(active)) {
                        if (active.hideTimer) {
                            active.hide(false);
                        } else {
                            return;
                        }
                    } else if (active && !this$1.isChildOf(active) && !this$1.isParentOf(active)) {
                        var prev;
                        while (active && active !== prev && !this$1.isChildOf(active)) {
                            prev = active;
                            active.hide(false);
                        }
                    }
                    if (delay && this$1.delayShow) {
                        this$1.showTimer = setTimeout(show, this$1.delayShow);
                    } else {
                        show();
                    }
                    active = this$1;
                };
                if (toggle && this.toggle && toggle.$el !== this.toggle.$el) {
                    once(this.$el, "hide", tryShow);
                    this.hide(false);
                } else {
                    tryShow();
                }
            },
            hide: function(delay) {
                var this$1 = this;
                if (delay === void 0) delay = true;
                var hide = function() {
                    return this$1.toggleNow(this$1.$el, false);
                };
                this.clearTimers();
                this.isDelaying = this.tracker.movesTo(this.$el);
                if (delay && this.isDelaying) {
                    this.hideTimer = setTimeout(this.hide, this.hoverIdle);
                } else if (delay && this.delayHide) {
                    this.hideTimer = setTimeout(hide, this.delayHide);
                } else {
                    hide();
                }
            },
            clearTimers: function() {
                clearTimeout(this.showTimer);
                clearTimeout(this.hideTimer);
                this.showTimer = null;
                this.hideTimer = null;
                this.isDelaying = false;
            },
            isActive: function() {
                return active === this;
            },
            isChildOf: function(drop) {
                return drop && drop !== this && within(this.$el, drop.$el);
            },
            isParentOf: function(drop) {
                return drop && drop !== this && within(drop.$el, this.$el);
            },
            position: function() {
                removeClasses(this.$el, this.clsDrop + "-(stack|boundary)");
                css(this.$el, {
                    top: "",
                    left: "",
                    display: "block"
                });
                toggleClass(this.$el, this.clsDrop + "-boundary", this.boundaryAlign);
                var boundary = offset(this.boundary);
                var alignTo = this.boundaryAlign ? boundary : offset(this.toggle.$el);
                if (this.align === "justify") {
                    var prop = this.getAxis() === "y" ? "width" : "height";
                    css(this.$el, prop, alignTo[prop]);
                } else if (this.$el.offsetWidth > Math.max(boundary.right - alignTo.left, alignTo.right - boundary.left)) {
                    addClass(this.$el, this.clsDrop + "-stack");
                }
                this.positionAt(this.$el, this.boundaryAlign ? this.boundary : this.toggle.$el, this.boundary);
                css(this.$el, "display", "");
            }
        }
    };
    var registered;
    function registerEvent() {
        if (registered) {
            return;
        }
        registered = true;
        on(document, "click", function(ref) {
            var target = ref.target;
            var defaultPrevented = ref.defaultPrevented;
            var prev;
            if (defaultPrevented) {
                return;
            }
            while (active && active !== prev && !within(target, active.$el) && !(active.toggle && within(target, active.toggle.$el))) {
                prev = active;
                active.hide(false);
            }
        });
    }
    var Dropdown = {
        extends: Drop
    };
    var FormCustom = {
        mixins: [ Class ],
        args: "target",
        props: {
            target: Boolean
        },
        data: {
            target: false
        },
        computed: {
            input: function(_, $el) {
                return $(selInput, $el);
            },
            state: function() {
                return this.input.nextElementSibling;
            },
            target: function(ref, $el) {
                var target = ref.target;
                return target && (target === true && this.input.parentNode === $el && this.input.nextElementSibling || query(target, $el));
            }
        },
        update: function() {
            var ref = this;
            var target = ref.target;
            var input = ref.input;
            if (!target) {
                return;
            }
            var option;
            var prop = isInput(target) ? "value" : "textContent";
            var prev = target[prop];
            var value = input.files && input.files[0] ? input.files[0].name : matches(input, "select") && (option = $$("option", input).filter(function(el) {
                return el.selected;
            })[0]) ? option.textContent : input.value;
            if (prev !== value) {
                target[prop] = value;
            }
        },
        events: [ {
            name: "focusin focusout mouseenter mouseleave",
            delegate: selInput,
            handler: function(ref) {
                var type = ref.type;
                var current = ref.current;
                if (current === this.input) {
                    toggleClass(this.state, "uk-" + (includes(type, "focus") ? "focus" : "hover"), includes([ "focusin", "mouseenter" ], type));
                }
            }
        }, {
            name: "change",
            handler: function() {
                this.$emit();
            }
        } ]
    };
    var Gif = {
        update: {
            read: function(data$$1) {
                var inview = isInView(this.$el);
                if (!inview || data$$1.isInView === inview) {
                    return false;
                }
                data$$1.isInView = inview;
            },
            write: function() {
                this.$el.src = this.$el.src;
            },
            events: [ "scroll", "load", "resize" ]
        }
    };
    var Margin = {
        props: {
            margin: String,
            firstColumn: Boolean
        },
        data: {
            margin: "uk-margin-small-top",
            firstColumn: "uk-first-column"
        },
        update: {
            read: function(data$$1) {
                var items = this.$el.children;
                var rows = [ [] ];
                if (!items.length || !isVisible(this.$el)) {
                    return data$$1.rows = rows;
                }
                data$$1.rows = getRows(items);
                data$$1.stacks = !data$$1.rows.some(function(row) {
                    return row.length > 1;
                });
            },
            write: function(ref) {
                var this$1 = this;
                var rows = ref.rows;
                rows.forEach(function(row, i) {
                    return row.forEach(function(el, j) {
                        toggleClass(el, this$1.margin, i !== 0);
                        toggleClass(el, this$1.firstColumn, j === 0);
                    });
                });
            },
            events: [ "load", "resize" ]
        }
    };
    function getRows(items) {
        var rows = [ [] ];
        for (var i = 0; i < items.length; i++) {
            var el = items[i];
            var dim = getOffset(el);
            if (!dim.height) {
                continue;
            }
            for (var j = rows.length - 1; j >= 0; j--) {
                var row = rows[j];
                if (!row[0]) {
                    row.push(el);
                    break;
                }
                var leftDim = getOffset(row[0]);
                if (dim.top >= leftDim.bottom - 1) {
                    rows.push([ el ]);
                    break;
                }
                if (dim.bottom > leftDim.top) {
                    if (dim.left < leftDim.left && !isRtl) {
                        row.unshift(el);
                        break;
                    }
                    row.push(el);
                    break;
                }
                if (j === 0) {
                    rows.unshift([ el ]);
                    break;
                }
            }
        }
        return rows;
    }
    function getOffset(element) {
        var offsetTop = element.offsetTop;
        var offsetLeft = element.offsetLeft;
        var offsetHeight = element.offsetHeight;
        return {
            top: offsetTop,
            left: offsetLeft,
            height: offsetHeight,
            bottom: offsetTop + offsetHeight
        };
    }
    var Grid = {
        extends: Margin,
        mixins: [ Class ],
        name: "grid",
        props: {
            masonry: Boolean,
            parallax: Number
        },
        data: {
            margin: "uk-grid-margin",
            clsStack: "uk-grid-stack",
            masonry: false,
            parallax: 0
        },
        computed: {
            length: function(_, $el) {
                return $el.children.length;
            },
            parallax: function(ref) {
                var parallax = ref.parallax;
                return parallax && this.length ? Math.abs(parallax) : "";
            }
        },
        connected: function() {
            this.masonry && addClass(this.$el, "uk-flex-top uk-flex-wrap-top");
        },
        update: [ {
            read: function(ref) {
                var rows = ref.rows;
                if (this.masonry || this.parallax) {
                    rows = rows.map(function(elements) {
                        return sortBy(elements, "offsetLeft");
                    });
                }
                var hasStaticContent = rows.some(function(elements) {
                    return elements.some(function(element) {
                        return css(element, "position") === "static";
                    });
                });
                var translates = false;
                var elHeight = "";
                if (this.masonry && this.length) {
                    var height$$1 = 0;
                    translates = rows.reduce(function(translates, row, i) {
                        translates[i] = row.map(function(_, j) {
                            return i === 0 ? 0 : toFloat(translates[i - 1][j]) + (height$$1 - toFloat(rows[i - 1][j] && rows[i - 1][j].offsetHeight));
                        });
                        height$$1 = row.reduce(function(height$$1, el) {
                            return Math.max(height$$1, el.offsetHeight);
                        }, 0);
                        return translates;
                    }, []);
                    elHeight = maxColumnHeight(rows) + getMarginTop(this.$el, this.margin) * (rows.length - 1);
                }
                return {
                    rows: rows,
                    translates: translates,
                    height: hasStaticContent ? elHeight : false
                };
            },
            write: function(ref) {
                var stacks = ref.stacks;
                var height$$1 = ref.height;
                toggleClass(this.$el, this.clsStack, stacks);
                css(this.$el, "paddingBottom", this.parallax);
                height$$1 !== false && css(this.$el, "height", height$$1);
            },
            events: [ "load", "resize" ]
        }, {
            read: function(ref) {
                var height$$1 = ref.height;
                return {
                    scrolled: this.parallax ? scrolledOver(this.$el, height$$1 ? height$$1 - height(this.$el) : 0) * this.parallax : false
                };
            },
            write: function(ref) {
                var rows = ref.rows;
                var scrolled = ref.scrolled;
                var translates = ref.translates;
                if (scrolled === false && !translates) {
                    return;
                }
                rows.forEach(function(row, i) {
                    return row.forEach(function(el, j) {
                        return css(el, "transform", !scrolled && !translates ? "" : "translateY(" + ((translates && -translates[i][j]) + (scrolled ? j % 2 ? scrolled : scrolled / 8 : 0)) + "px)");
                    });
                });
            },
            events: [ "scroll", "load", "resize" ]
        } ]
    };
    function getMarginTop(root, cls) {
        var nodes = toNodes(root.children);
        var ref = nodes.filter(function(el) {
            return hasClass(el, cls);
        });
        var node = ref[0];
        return toFloat(node ? css(node, "marginTop") : css(nodes[0], "paddingLeft"));
    }
    function maxColumnHeight(rows) {
        return Math.max.apply(Math, rows.reduce(function(sum, row) {
            row.forEach(function(el, i) {
                return sum[i] = (sum[i] || 0) + el.offsetHeight;
            });
            return sum;
        }, []));
    }
    var FlexBug = isIE ? {
        data: {
            selMinHeight: false,
            forceHeight: false
        },
        computed: {
            elements: function(ref, $el) {
                var selMinHeight = ref.selMinHeight;
                return selMinHeight ? $$(selMinHeight, $el) : [ $el ];
            }
        },
        update: [ {
            read: function() {
                css(this.elements, "height", "");
            },
            order: -5,
            events: [ "load", "resize" ]
        }, {
            write: function() {
                var this$1 = this;
                this.elements.forEach(function(el) {
                    var height$$1 = toFloat(css(el, "minHeight"));
                    if (height$$1 && (this$1.forceHeight || Math.round(height$$1) >= height(el))) {
                        css(el, "height", height$$1);
                    }
                });
            },
            order: 5,
            events: [ "load", "resize" ]
        } ]
    } : {};
    var HeightMatch = {
        mixins: [ FlexBug ],
        args: "target",
        props: {
            target: String,
            row: Boolean
        },
        data: {
            target: "> *",
            row: true,
            forceHeight: true
        },
        computed: {
            elements: function(ref, $el) {
                var target = ref.target;
                return $$(target, $el);
            }
        },
        update: {
            read: function() {
                return {
                    rows: (this.row ? getRows(this.elements) : [ this.elements ]).map(match)
                };
            },
            write: function(ref) {
                var rows = ref.rows;
                rows.forEach(function(ref) {
                    var heights = ref.heights;
                    var elements = ref.elements;
                    return elements.forEach(function(el, i) {
                        return css(el, "minHeight", heights[i]);
                    });
                });
            },
            events: [ "load", "resize" ]
        }
    };
    function match(elements) {
        var assign$$1;
        if (elements.length < 2) {
            return {
                heights: [ "" ],
                elements: elements
            };
        }
        var ref = getHeights(elements);
        var heights = ref.heights;
        var max = ref.max;
        var hasMinHeight = elements.some(function(el) {
            return el.style.minHeight;
        });
        var hasShrunk = elements.some(function(el, i) {
            return !el.style.minHeight && heights[i] < max;
        });
        if (hasMinHeight && hasShrunk) {
            css(elements, "minHeight", "");
            assign$$1 = getHeights(elements), heights = assign$$1.heights, max = assign$$1.max;
        }
        heights = elements.map(function(el, i) {
            return heights[i] === max && toFloat(el.style.minHeight) !== max ? "" : max;
        });
        return {
            heights: heights,
            elements: elements
        };
    }
    function getHeights(elements) {
        var heights = elements.map(function(el) {
            return offset(el).height - boxModelAdjust("height", el, "content-box");
        });
        var max = Math.max.apply(null, heights);
        return {
            heights: heights,
            max: max
        };
    }
    var HeightViewport = {
        mixins: [ FlexBug ],
        props: {
            expand: Boolean,
            offsetTop: Boolean,
            offsetBottom: Boolean,
            minHeight: Number
        },
        data: {
            expand: false,
            offsetTop: false,
            offsetBottom: false,
            minHeight: 0
        },
        update: {
            read: function() {
                var minHeight = "";
                var box = boxModelAdjust("height", this.$el, "content-box");
                if (this.expand) {
                    minHeight = height(window) - (offsetHeight(document.documentElement) - offsetHeight(this.$el)) - box || "";
                } else {
                    minHeight = "calc(100vh";
                    if (this.offsetTop) {
                        var ref = offset(this.$el);
                        var top = ref.top;
                        minHeight += top < height(window) / 2 ? " - " + top + "px" : "";
                    }
                    if (this.offsetBottom === true) {
                        minHeight += " - " + offsetHeight(this.$el.nextElementSibling) + "px";
                    } else if (isNumeric(this.offsetBottom)) {
                        minHeight += " - " + this.offsetBottom + "vh";
                    } else if (this.offsetBottom && endsWith(this.offsetBottom, "px")) {
                        minHeight += " - " + toFloat(this.offsetBottom) + "px";
                    } else if (isString(this.offsetBottom)) {
                        minHeight += " - " + offsetHeight(query(this.offsetBottom, this.$el)) + "px";
                    }
                    minHeight += (box ? " - " + box + "px" : "") + ")";
                }
                return {
                    minHeight: minHeight
                };
            },
            write: function(ref) {
                var minHeight = ref.minHeight;
                css(this.$el, {
                    minHeight: minHeight
                });
                if (this.minHeight && toFloat(css(this.$el, "minHeight")) < this.minHeight) {
                    css(this.$el, "minHeight", this.minHeight);
                }
            },
            events: [ "load", "resize" ]
        }
    };
    function offsetHeight(el) {
        return el && el.offsetHeight || 0;
    }
    var svgs = {};
    var SVG = {
        props: {
            id: String,
            icon: String,
            src: String,
            style: String,
            width: Number,
            height: Number,
            ratio: Number,
            class: String
        },
        data: {
            ratio: 1,
            id: false,
            exclude: [ "ratio", "src", "icon" ],
            class: ""
        },
        connected: function() {
            var this$1 = this;
            var assign$$1;
            this.class += " uk-svg";
            if (!this.icon && includes(this.src, "#")) {
                var parts = this.src.split("#");
                if (parts.length > 1) {
                    assign$$1 = parts, this.src = assign$$1[0], this.icon = assign$$1[1];
                }
            }
            this.svg = this.getSvg().then(function(svg) {
                var el;
                if (isString(svg)) {
                    if (this$1.icon && includes(svg, "<symbol")) {
                        svg = parseSymbols(svg, this$1.icon) || svg;
                    }
                    el = $(svg.substr(svg.indexOf("<svg")));
                } else {
                    el = svg.cloneNode(true);
                }
                if (!el) {
                    return Promise.reject("SVG not found.");
                }
                var dimensions = attr(el, "viewBox");
                if (dimensions) {
                    dimensions = dimensions.split(" ");
                    this$1.width = this$1.$props.width || dimensions[2];
                    this$1.height = this$1.$props.height || dimensions[3];
                }
                this$1.width *= this$1.ratio;
                this$1.height *= this$1.ratio;
                for (var prop in this$1.$options.props) {
                    if (this$1[prop] && !includes(this$1.exclude, prop)) {
                        attr(el, prop, this$1[prop]);
                    }
                }
                if (!this$1.id) {
                    removeAttr(el, "id");
                }
                if (this$1.width && !this$1.height) {
                    removeAttr(el, "height");
                }
                if (this$1.height && !this$1.width) {
                    removeAttr(el, "width");
                }
                var root = this$1.$el;
                if (isVoidElement(root) || root.tagName === "CANVAS") {
                    attr(root, {
                        hidden: true,
                        id: null
                    });
                    var next = root.nextElementSibling;
                    if (next && el.isEqualNode(next)) {
                        el = next;
                    } else {
                        after(root, el);
                    }
                } else {
                    var last = root.lastElementChild;
                    if (last && el.isEqualNode(last)) {
                        el = last;
                    } else {
                        append(root, el);
                    }
                }
                this$1.svgEl = el;
                return el;
            }, noop);
        },
        disconnected: function() {
            var this$1 = this;
            if (isVoidElement(this.$el)) {
                attr(this.$el, {
                    hidden: null,
                    id: this.id || null
                });
            }
            if (this.svg) {
                this.svg.then(function(svg) {
                    return (!this$1._connected || svg !== this$1.svgEl) && remove(svg);
                }, noop);
            }
            this.svg = this.svgEl = null;
        },
        methods: {
            getSvg: function() {
                var this$1 = this;
                if (!this.src) {
                    return Promise.reject();
                }
                if (svgs[this.src]) {
                    return svgs[this.src];
                }
                svgs[this.src] = new Promise(function(resolve, reject) {
                    if (startsWith(this$1.src, "data:")) {
                        resolve(decodeURIComponent(this$1.src.split(",")[1]));
                    } else {
                        ajax(this$1.src).then(function(xhr) {
                            return resolve(xhr.response);
                        }, function() {
                            return reject("SVG not found.");
                        });
                    }
                });
                return svgs[this.src];
            }
        }
    };
    var symbolRe = /<symbol(.*?id=(['"])(.*?)\2[^]*?<\/)symbol>/g;
    var symbols = {};
    function parseSymbols(svg, icon) {
        if (!symbols[svg]) {
            symbols[svg] = {};
            var match;
            while (match = symbolRe.exec(svg)) {
                symbols[svg][match[3]] = '<svg xmlns="http://www.w3.org/2000/svg"' + match[1] + "svg>";
            }
            symbolRe.lastIndex = 0;
        }
        return symbols[svg][icon];
    }
    var closeIcon = '<svg width="14" height="14" viewBox="0 0 14 14" xmlns="http://www.w3.org/2000/svg"><line fill="none" stroke="#000" stroke-width="1.1" x1="1" y1="1" x2="13" y2="13"/><line fill="none" stroke="#000" stroke-width="1.1" x1="13" y1="1" x2="1" y2="13"/></svg>';
    var closeLarge = '<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg"><line fill="none" stroke="#000" stroke-width="1.4" x1="1" y1="1" x2="19" y2="19"/><line fill="none" stroke="#000" stroke-width="1.4" x1="19" y1="1" x2="1" y2="19"/></svg>';
    var marker = '<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg"><rect x="9" y="4" width="1" height="11"/><rect x="4" y="9" width="11" height="1"/></svg>';
    var navbarToggleIcon = '<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg"><rect y="9" width="20" height="2"/><rect y="3" width="20" height="2"/><rect y="15" width="20" height="2"/></svg>';
    var overlayIcon = '<svg width="40" height="40" viewBox="0 0 40 40" xmlns="http://www.w3.org/2000/svg"><rect x="19" y="0" width="1" height="40"/><rect x="0" y="19" width="40" height="1"/></svg>';
    var paginationNext = '<svg width="7" height="12" viewBox="0 0 7 12" xmlns="http://www.w3.org/2000/svg"><polyline fill="none" stroke="#000" stroke-width="1.2" points="1 1 6 6 1 11"/></svg>';
    var paginationPrevious = '<svg width="7" height="12" viewBox="0 0 7 12" xmlns="http://www.w3.org/2000/svg"><polyline fill="none" stroke="#000" stroke-width="1.2" points="6 1 1 6 6 11"/></svg>';
    var searchIcon = '<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg"><circle fill="none" stroke="#000" stroke-width="1.1" cx="9" cy="9" r="7"/><path fill="none" stroke="#000" stroke-width="1.1" d="M14,14 L18,18 L14,14 Z"/></svg>';
    var searchLarge = '<svg width="40" height="40" viewBox="0 0 40 40" xmlns="http://www.w3.org/2000/svg"><circle fill="none" stroke="#000" stroke-width="1.8" cx="17.5" cy="17.5" r="16.5"/><line fill="none" stroke="#000" stroke-width="1.8" x1="38" y1="39" x2="29" y2="30"/></svg>';
    var searchNavbar = '<svg width="24" height="24" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><circle fill="none" stroke="#000" stroke-width="1.1" cx="10.5" cy="10.5" r="9.5"/><line fill="none" stroke="#000" stroke-width="1.1" x1="23" y1="23" x2="17" y2="17"/></svg>';
    var slidenavNext = '<svg width="14px" height="24px" viewBox="0 0 14 24" xmlns="http://www.w3.org/2000/svg"><polyline fill="none" stroke="#000" stroke-width="1.4" points="1.225,23 12.775,12 1.225,1 "/></svg>';
    var slidenavNextLarge = '<svg width="25px" height="40px" viewBox="0 0 25 40" xmlns="http://www.w3.org/2000/svg"><polyline fill="none" stroke="#000" stroke-width="2" points="4.002,38.547 22.527,20.024 4,1.5 "/></svg>';
    var slidenavPrevious = '<svg width="14px" height="24px" viewBox="0 0 14 24" xmlns="http://www.w3.org/2000/svg"><polyline fill="none" stroke="#000" stroke-width="1.4" points="12.775,1 1.225,12 12.775,23 "/></svg>';
    var slidenavPreviousLarge = '<svg width="25px" height="40px" viewBox="0 0 25 40" xmlns="http://www.w3.org/2000/svg"><polyline fill="none" stroke="#000" stroke-width="2" points="20.527,1.5 2,20.024 20.525,38.547 "/></svg>';
    var spinner = '<svg width="30" height="30" viewBox="0 0 30 30" xmlns="http://www.w3.org/2000/svg"><circle fill="none" stroke="#000" cx="15" cy="15" r="14"/></svg>';
    var totop = '<svg width="18" height="10" viewBox="0 0 18 10" xmlns="http://www.w3.org/2000/svg"><polyline fill="none" stroke="#000" stroke-width="1.2" points="1 9 9 1 17 9 "/></svg>';
    var parsed = {};
    var icons = {
        spinner: spinner,
        totop: totop,
        marker: marker,
        "close-icon": closeIcon,
        "close-large": closeLarge,
        "navbar-toggle-icon": navbarToggleIcon,
        "overlay-icon": overlayIcon,
        "pagination-next": paginationNext,
        "pagination-previous": paginationPrevious,
        "search-icon": searchIcon,
        "search-large": searchLarge,
        "search-navbar": searchNavbar,
        "slidenav-next": slidenavNext,
        "slidenav-next-large": slidenavNextLarge,
        "slidenav-previous": slidenavPrevious,
        "slidenav-previous-large": slidenavPreviousLarge
    };
    var Icon = {
        install: install,
        attrs: [ "icon", "ratio" ],
        mixins: [ Class, SVG ],
        args: "icon",
        props: [ "icon" ],
        data: {
            exclude: [ "id", "style", "class", "src", "icon", "ratio" ]
        },
        isIcon: true,
        connected: function() {
            addClass(this.$el, "uk-icon");
        },
        methods: {
            getSvg: function() {
                var icon = getIcon(applyRtl(this.icon));
                if (!icon) {
                    return Promise.reject("Icon not found.");
                }
                return Promise.resolve(icon);
            }
        }
    };
    var IconComponent = {
        extends: Icon,
        data: function(vm) {
            return {
                icon: hyphenate(vm.constructor.options.name)
            };
        }
    };
    var Slidenav = {
        extends: IconComponent,
        connected: function() {
            addClass(this.$el, "uk-slidenav");
        },
        computed: {
            icon: function(ref, $el) {
                var icon = ref.icon;
                return hasClass($el, "uk-slidenav-large") ? icon + "-large" : icon;
            }
        }
    };
    var Search = {
        extends: IconComponent,
        computed: {
            icon: function(ref, $el) {
                var icon = ref.icon;
                return hasClass($el, "uk-search-icon") && parents($el, ".uk-search-large").length ? "search-large" : parents($el, ".uk-search-navbar").length ? "search-navbar" : icon;
            }
        }
    };
    var Close = {
        extends: IconComponent,
        computed: {
            icon: function() {
                return "close-" + (hasClass(this.$el, "uk-close-large") ? "large" : "icon");
            }
        }
    };
    var Spinner = {
        extends: IconComponent,
        connected: function() {
            var this$1 = this;
            this.svg.then(function(svg) {
                return this$1.ratio !== 1 && css($("circle", svg), "strokeWidth", 1 / this$1.ratio);
            }, noop);
        }
    };
    function install(UIkit) {
        UIkit.icon.add = function(name, svg) {
            var obj;
            var added = isString(name) ? (obj = {}, obj[name] = svg, obj) : name;
            each(added, function(svg, name) {
                icons[name] = svg;
                delete parsed[name];
            });
            if (UIkit._initialized) {
                apply(document.body, function(el) {
                    return each(UIkit.getComponents(el), function(cmp) {
                        return cmp.$options.isIcon && cmp.icon in added && cmp.$reset();
                    });
                });
            }
        };
    }
    function getIcon(icon) {
        if (!icons[icon]) {
            return null;
        }
        if (!parsed[icon]) {
            parsed[icon] = $(icons[icon].trim());
        }
        return parsed[icon];
    }
    function applyRtl(icon) {
        return isRtl ? swap(swap(icon, "left", "right"), "previous", "next") : icon;
    }
    var Img = {
        props: {
            dataSrc: String,
            dataSrcset: Boolean,
            sizes: String,
            width: Number,
            height: Number,
            offsetTop: String,
            offsetLeft: String,
            target: String
        },
        data: {
            dataSrc: "",
            dataSrcset: false,
            sizes: false,
            width: false,
            height: false,
            offsetTop: "50vh",
            offsetLeft: 0,
            target: false
        },
        computed: {
            cacheKey: function(ref) {
                var dataSrc = ref.dataSrc;
                return this.$name + "." + dataSrc;
            },
            width: function(ref) {
                var width$$1 = ref.width;
                var dataWidth = ref.dataWidth;
                return width$$1 || dataWidth;
            },
            height: function(ref) {
                var height$$1 = ref.height;
                var dataHeight = ref.dataHeight;
                return height$$1 || dataHeight;
            },
            sizes: function(ref) {
                var sizes = ref.sizes;
                var dataSizes = ref.dataSizes;
                return sizes || dataSizes;
            },
            isImg: function(_, $el) {
                return isImg($el);
            },
            target: function(ref) {
                var target = ref.target;
                return [ this.$el ].concat(queryAll(target, this.$el));
            },
            offsetTop: function(ref) {
                var offsetTop = ref.offsetTop;
                return toPx(offsetTop, "height");
            },
            offsetLeft: function(ref) {
                var offsetLeft = ref.offsetLeft;
                return toPx(offsetLeft, "width");
            }
        },
        connected: function() {
            if (storage[this.cacheKey]) {
                setSrcAttrs(this.$el, storage[this.cacheKey] || this.dataSrc, this.dataSrcset, this.sizes);
            } else if (this.isImg && this.width && this.height) {
                setSrcAttrs(this.$el, getPlaceholderImage(this.width, this.height, this.sizes));
            }
        },
        update: {
            read: function(ref) {
                var this$1 = this;
                var delay = ref.delay;
                var image = ref.image;
                if (!delay) {
                    return;
                }
                if (image || !this.target.some(function(el) {
                    return isInView(el, this$1.offsetTop, this$1.offsetLeft, true);
                })) {
                    if (!this.isImg && image) {
                        image.then(function(img) {
                            return img && setSrcAttrs(this$1.$el, currentSrc(img));
                        });
                    }
                    return;
                }
                return {
                    image: getImage(this.dataSrc, this.dataSrcset, this.sizes).then(function(img) {
                        setSrcAttrs(this$1.$el, currentSrc(img), img.srcset, img.sizes);
                        storage[this$1.cacheKey] = currentSrc(img);
                        return img;
                    }, noop)
                };
            },
            write: function(data$$1) {
                if (!data$$1.delay) {
                    this.$emit();
                    return data$$1.delay = true;
                }
            },
            events: [ "scroll", "load", "resize" ]
        }
    };
    function setSrcAttrs(el, src, srcset, sizes) {
        if (isImg(el)) {
            sizes && (el.sizes = sizes);
            srcset && (el.srcset = srcset);
            src && (el.src = src);
        } else if (src) {
            var change = !includes(el.style.backgroundImage, src);
            css(el, "backgroundImage", "url(" + src + ")");
            if (change) {
                trigger(el, createEvent("load", false));
            }
        }
    }
    var sizesRe = /\s*(.*?)\s*(\w+|calc\(.*?\))\s*(?:,|$)/g;
    function getPlaceholderImage(width$$1, height$$1, sizes) {
        var assign$$1;
        if (sizes) {
            var matches$$1;
            while (matches$$1 = sizesRe.exec(sizes)) {
                if (!matches$$1[1] || window.matchMedia(matches$$1[1]).matches) {
                    matches$$1 = evaluateSize(matches$$1[2]);
                    break;
                }
            }
            sizesRe.lastIndex = 0;
            assign$$1 = Dimensions.ratio({
                width: width$$1,
                height: height$$1
            }, "width", toPx(matches$$1 || "100vw")), width$$1 = assign$$1.width, height$$1 = assign$$1.height;
        }
        return 'data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" width="' + width$$1 + '" height="' + height$$1 + '"></svg>';
    }
    var sizeRe = /\d+(?:\w+|%)/g;
    var additionRe = /[+-]?(\d+)/g;
    function evaluateSize(size) {
        return startsWith(size, "calc") ? size.substring(5, size.length - 1).replace(sizeRe, function(size) {
            return toPx(size);
        }).replace(/ /g, "").match(additionRe).reduce(function(a, b) {
            return a + +b;
        }, 0) : size;
    }
    function toPx(value, property, element) {
        if (property === void 0) property = "width";
        if (element === void 0) element = window;
        return isNumeric(value) ? +value : endsWith(value, "vw") ? percent(element, "width", value) : endsWith(value, "vh") ? percent(element, "height", value) : endsWith(value, "%") ? percent(element, property, value) : toFloat(value);
    }
    var dimensions = {
        height: height,
        width: width
    };
    function percent(element, property, value) {
        return dimensions[property](element) * toFloat(value) / 100;
    }
    function isImg(el) {
        return el.tagName === "IMG";
    }
    function currentSrc(el) {
        return el.currentSrc || el.src;
    }
    var key = "__test__";
    var storage;
    try {
        storage = window.sessionStorage || {};
        storage[key] = 1;
        delete storage[key];
    } catch (e) {
        storage = {};
    }
    var Media = {
        props: {
            media: Boolean
        },
        data: {
            media: false
        },
        computed: {
            matchMedia: function() {
                var media = toMedia(this.media);
                return !media || window.matchMedia(media).matches;
            }
        }
    };
    function toMedia(value) {
        if (isString(value)) {
            if (value[0] === "@") {
                var name = "breakpoint-" + value.substr(1);
                value = toFloat(getCssVar(name));
            } else if (isNaN(value)) {
                return value;
            }
        }
        return value && !isNaN(value) ? "(min-width: " + value + "px)" : false;
    }
    var Leader = {
        mixins: [ Class, Media ],
        props: {
            fill: String
        },
        data: {
            fill: "",
            clsWrapper: "uk-leader-fill",
            clsHide: "uk-leader-hide",
            attrFill: "data-fill"
        },
        computed: {
            fill: function(ref) {
                var fill = ref.fill;
                return fill || getCssVar("leader-fill-content");
            }
        },
        connected: function() {
            var assign$$1;
            assign$$1 = wrapInner(this.$el, '<span class="' + this.clsWrapper + '">'), this.wrapper = assign$$1[0];
        },
        disconnected: function() {
            unwrap(this.wrapper.childNodes);
        },
        update: {
            read: function(ref) {
                var changed = ref.changed;
                var width$$1 = ref.width;
                var prev = width$$1;
                width$$1 = Math.floor(this.$el.offsetWidth / 2);
                return {
                    width: width$$1,
                    changed: changed || prev !== width$$1,
                    hide: !this.matchMedia
                };
            },
            write: function(data$$1) {
                toggleClass(this.wrapper, this.clsHide, data$$1.hide);
                if (data$$1.changed) {
                    data$$1.changed = false;
                    attr(this.wrapper, this.attrFill, new Array(data$$1.width).join(this.fill));
                }
            },
            events: [ "load", "resize" ]
        }
    };
    var Container = {
        props: {
            container: Boolean
        },
        data: {
            container: true
        },
        computed: {
            container: function(ref) {
                var container = ref.container;
                return container === true && this.$container || container && $(container);
            }
        }
    };
    var active$1;
    var Modal = {
        mixins: [ Class, Container, Togglable ],
        props: {
            selPanel: String,
            selClose: String,
            escClose: Boolean,
            bgClose: Boolean,
            stack: Boolean
        },
        data: {
            cls: "uk-open",
            escClose: true,
            bgClose: true,
            overlay: true,
            stack: false
        },
        computed: {
            panel: function(ref, $el) {
                var selPanel = ref.selPanel;
                return $(selPanel, $el);
            },
            transitionElement: function() {
                return this.panel;
            },
            transitionDuration: function() {
                return toMs(css(this.transitionElement, "transitionDuration"));
            },
            bgClose: function(ref) {
                var bgClose = ref.bgClose;
                return bgClose && this.panel;
            }
        },
        events: [ {
            name: "click",
            delegate: function() {
                return this.selClose;
            },
            handler: function(e) {
                e.preventDefault();
                this.hide();
            }
        }, {
            name: "toggle",
            self: true,
            handler: function(e) {
                if (e.defaultPrevented) {
                    return;
                }
                e.preventDefault();
                this.toggle();
            }
        }, {
            name: "beforeshow",
            self: true,
            handler: function(e) {
                var prev = active$1 && active$1 !== this && active$1;
                active$1 = this;
                if (prev) {
                    if (this.stack) {
                        this.prev = prev;
                    } else {
                        prev.hide().then(this.show);
                        e.preventDefault();
                        return;
                    }
                }
                registerEvents();
            }
        }, {
            name: "beforehide",
            self: true,
            handler: function() {
                active$1 = active$1 && active$1 !== this && active$1 || this.prev;
                if (!active$1) {
                    deregisterEvents();
                }
            }
        }, {
            name: "show",
            self: true,
            handler: function() {
                if (!hasClass(document.documentElement, this.clsPage)) {
                    this.scrollbarWidth = width(window) - width(document);
                    css(document.body, "overflowY", this.scrollbarWidth && this.overlay ? "scroll" : "");
                }
                addClass(document.documentElement, this.clsPage);
            }
        }, {
            name: "hidden",
            self: true,
            handler: function() {
                var this$1 = this;
                var found;
                var ref = this;
                var prev = ref.prev;
                while (prev) {
                    if (prev.clsPage === this$1.clsPage) {
                        found = true;
                        break;
                    }
                    prev = prev.prev;
                }
                if (!found) {
                    removeClass(document.documentElement, this.clsPage);
                }
                !this.prev && css(document.body, "overflowY", "");
            }
        } ],
        methods: {
            toggle: function() {
                return this.isToggled() ? this.hide() : this.show();
            },
            show: function() {
                if (this.isToggled()) {
                    return Promise.resolve();
                }
                if (this.container && this.$el.parentNode !== this.container) {
                    append(this.container, this.$el);
                    this._callConnected();
                }
                return this.toggleNow(this.$el, true);
            },
            hide: function() {
                return this.isToggled() ? this.toggleNow(this.$el, false) : Promise.resolve();
            },
            getActive: function() {
                return active$1;
            },
            _toggleImmediate: function(el, show) {
                var this$1 = this;
                return new Promise(function(resolve) {
                    return requestAnimationFrame(function() {
                        this$1._toggle(el, show);
                        if (this$1.transitionDuration) {
                            once(this$1.transitionElement, "transitionend", resolve, false, function(e) {
                                return e.target === this$1.transitionElement;
                            });
                        } else {
                            resolve();
                        }
                    });
                });
            }
        }
    };
    var events;
    function registerEvents() {
        if (events) {
            return;
        }
        events = [ on(document, "click", function(ref) {
            var target = ref.target;
            var defaultPrevented = ref.defaultPrevented;
            if (active$1 && active$1.bgClose && !defaultPrevented && (!active$1.overlay || within(target, active$1.$el)) && !within(target, active$1.panel)) {
                active$1.hide();
            }
        }), on(document, "keydown", function(e) {
            if (e.keyCode === 27 && active$1 && active$1.escClose) {
                e.preventDefault();
                active$1.hide();
            }
        }) ];
    }
    function deregisterEvents() {
        events && events.forEach(function(unbind) {
            return unbind();
        });
        events = null;
    }
    var Modal$1 = {
        install: install$1,
        mixins: [ Modal ],
        data: {
            clsPage: "uk-modal-page",
            selPanel: ".uk-modal-dialog",
            selClose: ".uk-modal-close, .uk-modal-close-default, .uk-modal-close-outside, .uk-modal-close-full"
        },
        events: [ {
            name: "show",
            self: true,
            handler: function() {
                if (hasClass(this.panel, "uk-margin-auto-vertical")) {
                    addClass(this.$el, "uk-flex");
                } else {
                    css(this.$el, "display", "block");
                }
                height(this.$el);
            }
        }, {
            name: "hidden",
            self: true,
            handler: function() {
                css(this.$el, "display", "");
                removeClass(this.$el, "uk-flex");
            }
        } ]
    };
    function install$1(UIkit) {
        UIkit.modal.dialog = function(content, options) {
            var dialog = UIkit.modal(' <div class="uk-modal"> <div class="uk-modal-dialog">' + content + "</div> </div> ", options);
            dialog.show();
            on(dialog.$el, "hidden", function(ref) {
                var target = ref.target;
                var currentTarget = ref.currentTarget;
                if (target === currentTarget) {
                    dialog.$destroy(true);
                }
            });
            return dialog;
        };
        UIkit.modal.alert = function(message, options) {
            options = assign({
                bgClose: false,
                escClose: false,
                labels: UIkit.modal.labels
            }, options);
            return new Promise(function(resolve) {
                return on(UIkit.modal.dialog(' <div class="uk-modal-body">' + (isString(message) ? message : html(message)) + '</div> <div class="uk-modal-footer uk-text-right"> <button class="uk-button uk-button-primary uk-modal-close" autofocus>' + options.labels.ok + "</button> </div> ", options).$el, "hide", resolve);
            });
        };
        UIkit.modal.confirm = function(message, options) {
            options = assign({
                bgClose: false,
                escClose: true,
                labels: UIkit.modal.labels
            }, options);
            return new Promise(function(resolve, reject) {
                var confirm = UIkit.modal.dialog(' <form> <div class="uk-modal-body">' + (isString(message) ? message : html(message)) + '</div> <div class="uk-modal-footer uk-text-right"> <button class="uk-button uk-button-default uk-modal-close" type="button">' + options.labels.cancel + '</button> <button class="uk-button uk-button-primary" autofocus>' + options.labels.ok + "</button> </div> </form> ", options);
                var resolved = false;
                on(confirm.$el, "submit", "form", function(e) {
                    e.preventDefault();
                    resolve();
                    resolved = true;
                    confirm.hide();
                });
                on(confirm.$el, "hide", function() {
                    if (!resolved) {
                        reject();
                    }
                });
            });
        };
        UIkit.modal.prompt = function(message, value, options) {
            options = assign({
                bgClose: false,
                escClose: true,
                labels: UIkit.modal.labels
            }, options);
            return new Promise(function(resolve) {
                var prompt = UIkit.modal.dialog(' <form class="uk-form-stacked"> <div class="uk-modal-body"> <label>' + (isString(message) ? message : html(message)) + '</label> <input class="uk-input" autofocus> </div> <div class="uk-modal-footer uk-text-right"> <button class="uk-button uk-button-default uk-modal-close" type="button">' + options.labels.cancel + '</button> <button class="uk-button uk-button-primary">' + options.labels.ok + "</button> </div> </form> ", options), input = $("input", prompt.$el);
                input.value = value;
                var resolved = false;
                on(prompt.$el, "submit", "form", function(e) {
                    e.preventDefault();
                    resolve(input.value);
                    resolved = true;
                    prompt.hide();
                });
                on(prompt.$el, "hide", function() {
                    if (!resolved) {
                        resolve(null);
                    }
                });
            });
        };
        UIkit.modal.labels = {
            ok: "Ok",
            cancel: "Cancel"
        };
    }
    var Nav = {
        extends: Accordion,
        data: {
            targets: "> .uk-parent",
            toggle: "> a",
            content: "> ul"
        }
    };
    var Navbar = {
        mixins: [ Class, FlexBug ],
        props: {
            dropdown: String,
            mode: "list",
            align: String,
            offset: Number,
            boundary: Boolean,
            boundaryAlign: Boolean,
            clsDrop: String,
            delayShow: Number,
            delayHide: Number,
            dropbar: Boolean,
            dropbarMode: String,
            dropbarAnchor: Boolean,
            duration: Number
        },
        data: {
            dropdown: ".uk-navbar-nav > li",
            align: !isRtl ? "left" : "right",
            clsDrop: "uk-navbar-dropdown",
            mode: undefined,
            offset: undefined,
            delayShow: undefined,
            delayHide: undefined,
            boundaryAlign: undefined,
            flip: "x",
            boundary: true,
            dropbar: false,
            dropbarMode: "slide",
            dropbarAnchor: false,
            duration: 200,
            forceHeight: true,
            selMinHeight: ".uk-navbar-nav > li > a, .uk-navbar-item, .uk-navbar-toggle"
        },
        computed: {
            boundary: function(ref, $el) {
                var boundary = ref.boundary;
                var boundaryAlign = ref.boundaryAlign;
                return boundary === true || boundaryAlign ? $el : boundary;
            },
            dropbarAnchor: function(ref, $el) {
                var dropbarAnchor = ref.dropbarAnchor;
                return query(dropbarAnchor, $el);
            },
            pos: function(ref) {
                var align = ref.align;
                return "bottom-" + align;
            },
            dropdowns: function(ref, $el) {
                var dropdown = ref.dropdown;
                var clsDrop = ref.clsDrop;
                return $$(dropdown + " ." + clsDrop, $el);
            }
        },
        beforeConnect: function() {
            var ref = this.$props;
            var dropbar = ref.dropbar;
            this.dropbar = dropbar && (query(dropbar, this.$el) || $("+ .uk-navbar-dropbar", this.$el) || $("<div></div>"));
            if (this.dropbar) {
                addClass(this.dropbar, "uk-navbar-dropbar");
                if (this.dropbarMode === "slide") {
                    addClass(this.dropbar, "uk-navbar-dropbar-slide");
                }
            }
        },
        disconnected: function() {
            this.dropbar && remove(this.dropbar);
        },
        update: function() {
            var this$1 = this;
            this.$create("drop", this.dropdowns.filter(function(el) {
                return !this$1.getDropdown(el);
            }), assign({}, this.$props, {
                boundary: this.boundary,
                pos: this.pos,
                offset: this.dropbar || this.offset
            }));
        },
        events: [ {
            name: "mouseover",
            delegate: function() {
                return this.dropdown;
            },
            handler: function(ref) {
                var current = ref.current;
                var active = this.getActive();
                if (active && active.toggle && !within(active.toggle.$el, current) && !active.tracker.movesTo(active.$el)) {
                    active.hide(false);
                }
            }
        }, {
            name: "mouseleave",
            el: function() {
                return this.dropbar;
            },
            handler: function() {
                var active = this.getActive();
                if (active && !matches(this.dropbar, ":hover")) {
                    active.hide();
                }
            }
        }, {
            name: "beforeshow",
            capture: true,
            filter: function() {
                return this.dropbar;
            },
            handler: function() {
                if (!this.dropbar.parentNode) {
                    after(this.dropbarAnchor || this.$el, this.dropbar);
                }
            }
        }, {
            name: "show",
            capture: true,
            filter: function() {
                return this.dropbar;
            },
            handler: function(_, drop) {
                var $el = drop.$el;
                var dir = drop.dir;
                this.clsDrop && addClass($el, this.clsDrop + "-dropbar");
                if (dir === "bottom") {
                    this.transitionTo($el.offsetHeight + toFloat(css($el, "marginTop")) + toFloat(css($el, "marginBottom")), $el);
                }
            }
        }, {
            name: "beforehide",
            filter: function() {
                return this.dropbar;
            },
            handler: function(e, ref) {
                var $el = ref.$el;
                var active = this.getActive();
                if (matches(this.dropbar, ":hover") && active && active.$el === $el) {
                    e.preventDefault();
                }
            }
        }, {
            name: "hide",
            filter: function() {
                return this.dropbar;
            },
            handler: function(_, ref) {
                var $el = ref.$el;
                var active = this.getActive();
                if (!active || active && active.$el === $el) {
                    this.transitionTo(0);
                }
            }
        } ],
        methods: {
            getActive: function() {
                var ref = this.dropdowns.map(this.getDropdown).filter(function(drop) {
                    return drop.isActive();
                });
                var active = ref[0];
                return active && includes(active.mode, "hover") && within(active.toggle.$el, this.$el) && active;
            },
            transitionTo: function(newHeight, el) {
                var this$1 = this;
                var ref = this;
                var dropbar = ref.dropbar;
                var oldHeight = isVisible(dropbar) ? height(dropbar) : 0;
                el = oldHeight < newHeight && el;
                css(el, "clip", "rect(0," + el.offsetWidth + "px," + oldHeight + "px,0)");
                height(dropbar, oldHeight);
                Transition.cancel([ el, dropbar ]);
                return Promise.all([ Transition.start(dropbar, {
                    height: newHeight
                }, this.duration), Transition.start(el, {
                    clip: "rect(0," + el.offsetWidth + "px," + newHeight + "px,0)"
                }, this.duration) ]).catch(noop).then(function() {
                    css(el, {
                        clip: ""
                    });
                    this$1.$update(dropbar);
                });
            },
            getDropdown: function(el) {
                return this.$getComponent(el, "drop") || this.$getComponent(el, "dropdown");
            }
        }
    };
    var scroll;
    var Offcanvas = {
        mixins: [ Modal ],
        args: "mode",
        props: {
            content: String,
            mode: String,
            flip: Boolean,
            overlay: Boolean
        },
        data: {
            content: ".uk-offcanvas-content",
            mode: "slide",
            flip: false,
            overlay: false,
            clsPage: "uk-offcanvas-page",
            clsContainer: "uk-offcanvas-container",
            selPanel: ".uk-offcanvas-bar",
            clsFlip: "uk-offcanvas-flip",
            clsContent: "uk-offcanvas-content",
            clsContentAnimation: "uk-offcanvas-content-animation",
            clsSidebarAnimation: "uk-offcanvas-bar-animation",
            clsMode: "uk-offcanvas",
            clsOverlay: "uk-offcanvas-overlay",
            selClose: ".uk-offcanvas-close"
        },
        computed: {
            content: function(ref) {
                var content = ref.content;
                return $(content) || document.body;
            },
            clsFlip: function(ref) {
                var flip = ref.flip;
                var clsFlip = ref.clsFlip;
                return flip ? clsFlip : "";
            },
            clsOverlay: function(ref) {
                var overlay = ref.overlay;
                var clsOverlay = ref.clsOverlay;
                return overlay ? clsOverlay : "";
            },
            clsMode: function(ref) {
                var mode = ref.mode;
                var clsMode = ref.clsMode;
                return clsMode + "-" + mode;
            },
            clsSidebarAnimation: function(ref) {
                var mode = ref.mode;
                var clsSidebarAnimation = ref.clsSidebarAnimation;
                return mode === "none" || mode === "reveal" ? "" : clsSidebarAnimation;
            },
            clsContentAnimation: function(ref) {
                var mode = ref.mode;
                var clsContentAnimation = ref.clsContentAnimation;
                return mode !== "push" && mode !== "reveal" ? "" : clsContentAnimation;
            },
            transitionElement: function(ref) {
                var mode = ref.mode;
                return mode === "reveal" ? this.panel.parentNode : this.panel;
            }
        },
        update: {
            write: function() {
                if (this.getActive() === this) {
                    if (this.overlay || this.clsContentAnimation) {
                        width(this.content, width(window) - this.scrollbarWidth);
                    }
                    if (this.overlay) {
                        height(this.content, height(window));
                        if (scroll) {
                            this.content.scrollTop = scroll.y;
                        }
                    }
                }
            },
            events: [ "resize" ]
        },
        events: [ {
            name: "click",
            delegate: function() {
                return 'a[href^="#"]';
            },
            handler: function(ref) {
                var current = ref.current;
                if (current.hash && $(current.hash, this.content)) {
                    scroll = null;
                    this.hide();
                }
            }
        }, {
            name: "beforescroll",
            filter: function() {
                return this.overlay;
            },
            handler: function(e, scroll, target) {
                if (scroll && target && this.isToggled() && $(target, this.content)) {
                    once(this.$el, "hidden", function() {
                        return scroll.scrollTo(target);
                    });
                    e.preventDefault();
                }
            }
        }, {
            name: "show",
            self: true,
            handler: function() {
                scroll = scroll || {
                    x: window.pageXOffset,
                    y: window.pageYOffset
                };
                if (this.mode === "reveal" && !hasClass(this.panel, this.clsMode)) {
                    wrapAll(this.panel, "<div>");
                    addClass(this.panel.parentNode, this.clsMode);
                }
                css(document.documentElement, "overflowY", (!this.clsContentAnimation || this.flip) && this.scrollbarWidth && this.overlay ? "scroll" : "");
                addClass(document.body, this.clsContainer, this.clsFlip, this.clsOverlay);
                height(document.body);
                addClass(this.content, this.clsContentAnimation);
                addClass(this.panel, this.clsSidebarAnimation, this.mode !== "reveal" ? this.clsMode : "");
                addClass(this.$el, this.clsOverlay);
                css(this.$el, "display", "block");
                height(this.$el);
            }
        }, {
            name: "hide",
            self: true,
            handler: function() {
                removeClass(this.content, this.clsContentAnimation);
                var active = this.getActive();
                if (this.mode === "none" || active && active !== this && active !== this.prev) {
                    trigger(this.panel, "transitionend");
                }
            }
        }, {
            name: "hidden",
            self: true,
            handler: function() {
                if (this.mode === "reveal") {
                    unwrap(this.panel);
                }
                if (!this.overlay) {
                    scroll = {
                        x: window.pageXOffset,
                        y: window.pageYOffset
                    };
                } else if (!scroll) {
                    var ref = this.content;
                    var x = ref.scrollLeft;
                    var y = ref.scrollTop;
                    scroll = {
                        x: x,
                        y: y
                    };
                }
                removeClass(this.panel, this.clsSidebarAnimation, this.clsMode);
                removeClass(this.$el, this.clsOverlay);
                css(this.$el, "display", "");
                removeClass(document.body, this.clsContainer, this.clsFlip, this.clsOverlay);
                document.body.scrollTop = scroll.y;
                css(document.documentElement, "overflowY", "");
                width(this.content, "");
                height(this.content, "");
                window.scroll(scroll.x, scroll.y);
                scroll = null;
            }
        }, {
            name: "swipeLeft swipeRight",
            handler: function(e) {
                if (this.isToggled() && isTouch(e) && (e.type === "swipeLeft" && !this.flip || e.type === "swipeRight" && this.flip)) {
                    this.hide();
                }
            }
        } ]
    };
    var OverflowAuto = {
        mixins: [ Class ],
        props: {
            selContainer: String,
            selContent: String
        },
        data: {
            selContainer: ".uk-modal",
            selContent: ".uk-modal-dialog"
        },
        computed: {
            container: function(ref, $el) {
                var selContainer = ref.selContainer;
                return closest($el, selContainer);
            },
            content: function(ref, $el) {
                var selContent = ref.selContent;
                return closest($el, selContent);
            }
        },
        connected: function() {
            css(this.$el, "minHeight", 150);
        },
        update: {
            read: function() {
                if (!this.content || !this.container) {
                    return false;
                }
                return {
                    current: toFloat(css(this.$el, "maxHeight")),
                    max: Math.max(150, height(this.container) - (offset(this.content).height - height(this.$el)))
                };
            },
            write: function(ref) {
                var current = ref.current;
                var max = ref.max;
                css(this.$el, "maxHeight", max);
                if (Math.round(current) !== Math.round(max)) {
                    trigger(this.$el, "resize");
                }
            },
            events: [ "load", "resize" ]
        }
    };
    var Responsive = {
        props: [ "width", "height" ],
        connected: function() {
            addClass(this.$el, "uk-responsive-width");
        },
        update: {
            read: function() {
                return isVisible(this.$el) && this.width && this.height ? {
                    width: width(this.$el.parentNode),
                    height: this.height
                } : false;
            },
            write: function(dim) {
                height(this.$el, Dimensions.contain({
                    height: this.height,
                    width: this.width
                }, dim).height);
            },
            events: [ "load", "resize" ]
        }
    };
    var Scroll = {
        props: {
            duration: Number,
            offset: Number
        },
        data: {
            duration: 1e3,
            offset: 0
        },
        methods: {
            scrollTo: function(el) {
                var this$1 = this;
                el = el && $(el) || document.body;
                var docHeight = height(document);
                var winHeight = height(window);
                var target = offset(el).top - this.offset;
                if (target + winHeight > docHeight) {
                    target = docHeight - winHeight;
                }
                if (!trigger(this.$el, "beforescroll", [ this, el ])) {
                    return;
                }
                var start = Date.now();
                var startY = window.pageYOffset;
                var step = function() {
                    var currentY = startY + (target - startY) * ease(clamp((Date.now() - start) / this$1.duration));
                    scrollTop(window, currentY);
                    if (currentY !== target) {
                        requestAnimationFrame(step);
                    } else {
                        trigger(this$1.$el, "scrolled", [ this$1, el ]);
                    }
                };
                step();
            }
        },
        events: {
            click: function(e) {
                if (e.defaultPrevented) {
                    return;
                }
                e.preventDefault();
                this.scrollTo(escape(decodeURIComponent(this.$el.hash)).substr(1));
            }
        }
    };
    function ease(k) {
        return .5 * (1 - Math.cos(Math.PI * k));
    }
    var Scrollspy = {
        args: "cls",
        props: {
            cls: "list",
            target: String,
            hidden: Boolean,
            offsetTop: Number,
            offsetLeft: Number,
            repeat: Boolean,
            delay: Number
        },
        data: function() {
            return {
                cls: [],
                target: false,
                hidden: true,
                offsetTop: 0,
                offsetLeft: 0,
                repeat: false,
                delay: 0,
                inViewClass: "uk-scrollspy-inview"
            };
        },
        computed: {
            elements: function(ref, $el) {
                var target = ref.target;
                return target ? $$(target, $el) : [ $el ];
            }
        },
        update: [ {
            write: function() {
                if (this.hidden) {
                    css(filter(this.elements, ":not(." + this.inViewClass + ")"), "visibility", "hidden");
                }
            }
        }, {
            read: function(els) {
                var this$1 = this;
                if (!els.delay) {
                    return;
                }
                this.elements.forEach(function(el, i) {
                    var elData = els[i];
                    if (!elData || elData.el !== el) {
                        var cls = data(el, "uk-scrollspy-class");
                        elData = {
                            el: el,
                            toggles: cls && cls.split(",") || this$1.cls
                        };
                    }
                    elData.show = isInView(el, this$1.offsetTop, this$1.offsetLeft);
                    els[i] = elData;
                });
            },
            write: function(els) {
                var this$1 = this;
                if (!els.delay) {
                    this.$emit();
                    return els.delay = true;
                }
                this.elements.forEach(function(el, i) {
                    var elData = els[i];
                    var cls = elData.toggles[i] || elData.toggles[0];
                    if (elData.show && !elData.inview && !elData.queued) {
                        var show = function() {
                            css(el, "visibility", "");
                            addClass(el, this$1.inViewClass);
                            toggleClass(el, cls);
                            trigger(el, "inview");
                            this$1.$update(el);
                            elData.inview = true;
                            elData.abort && elData.abort();
                        };
                        if (this$1.delay) {
                            elData.queued = true;
                            els.promise = (els.promise || Promise.resolve()).then(function() {
                                return !elData.inview && new Promise(function(resolve) {
                                    var timer = setTimeout(function() {
                                        show();
                                        resolve();
                                    }, els.promise || this$1.elements.length === 1 ? this$1.delay : 0);
                                    elData.abort = function() {
                                        clearTimeout(timer);
                                        resolve();
                                        elData.queued = false;
                                    };
                                });
                            });
                        } else {
                            show();
                        }
                    } else if (!elData.show && (elData.inview || elData.queued) && this$1.repeat) {
                        elData.abort && elData.abort();
                        if (!elData.inview) {
                            return;
                        }
                        css(el, "visibility", this$1.hidden ? "hidden" : "");
                        removeClass(el, this$1.inViewClass);
                        toggleClass(el, cls);
                        trigger(el, "outview");
                        this$1.$update(el);
                        elData.inview = false;
                    }
                });
            },
            events: [ "scroll", "load", "resize" ]
        } ]
    };
    var ScrollspyNav = {
        props: {
            cls: String,
            closest: String,
            scroll: Boolean,
            overflow: Boolean,
            offset: Number
        },
        data: {
            cls: "uk-active",
            closest: false,
            scroll: false,
            overflow: true,
            offset: 0
        },
        computed: {
            links: function(_, $el) {
                return $$('a[href^="#"]', $el).filter(function(el) {
                    return el.hash;
                });
            },
            elements: function() {
                return this.closest ? closest(this.links, this.closest) : this.links;
            },
            targets: function() {
                return $$(this.links.map(function(el) {
                    return el.hash;
                }).join(","));
            }
        },
        update: [ {
            read: function() {
                if (this.scroll) {
                    this.$create("scroll", this.links, {
                        offset: this.offset || 0
                    });
                }
            }
        }, {
            read: function(data$$1) {
                var this$1 = this;
                var scroll = window.pageYOffset + this.offset + 1;
                var max = height(document) - height(window) + this.offset;
                data$$1.active = false;
                this.targets.every(function(el, i) {
                    var ref = offset(el);
                    var top = ref.top;
                    var last = i + 1 === this$1.targets.length;
                    if (!this$1.overflow && (i === 0 && top > scroll || last && top + el.offsetTop < scroll)) {
                        return false;
                    }
                    if (!last && offset(this$1.targets[i + 1]).top <= scroll) {
                        return true;
                    }
                    if (scroll >= max) {
                        for (var j = this$1.targets.length - 1; j > i; j--) {
                            if (isInView(this$1.targets[j])) {
                                el = this$1.targets[j];
                                break;
                            }
                        }
                    }
                    return !(data$$1.active = $(filter(this$1.links, '[href="#' + el.id + '"]')));
                });
            },
            write: function(ref) {
                var active = ref.active;
                this.links.forEach(function(el) {
                    return el.blur();
                });
                removeClass(this.elements, this.cls);
                if (active) {
                    trigger(this.$el, "active", [ active, addClass(this.closest ? closest(active, this.closest) : active, this.cls) ]);
                }
            },
            events: [ "scroll", "load", "resize" ]
        } ]
    };
    var Sticky = {
        mixins: [ Class, Media ],
        props: {
            top: null,
            bottom: Boolean,
            offset: Number,
            animation: String,
            clsActive: String,
            clsInactive: String,
            clsFixed: String,
            clsBelow: String,
            selTarget: String,
            widthElement: Boolean,
            showOnUp: Boolean,
            targetOffset: Number
        },
        data: {
            top: 0,
            bottom: false,
            offset: 0,
            animation: "",
            clsActive: "uk-active",
            clsInactive: "",
            clsFixed: "uk-sticky-fixed",
            clsBelow: "uk-sticky-below",
            selTarget: "",
            widthElement: false,
            showOnUp: false,
            targetOffset: true
        },
        computed: {
            selTarget: function(ref, $el) {
                var selTarget = ref.selTarget;
                return selTarget && $(selTarget, $el) || $el;
            },
            widthElement: function(ref, $el) {
                var widthElement = ref.widthElement;
                return query(widthElement, $el) || this.placeholder;
            }
        },
        connected: function() {
            this.placeholder = $("+ .uk-sticky-placeholder", this.$el) || $('<div class="uk-sticky-placeholder"></div>');
        },
        disconnected: function() {
            if (this.isActive) {
                this.isActive = undefined;
                this.hide();
                removeClass(this.selTarget, this.clsInactive);
            }
            remove(this.placeholder);
            this.placeholder = null;
            this.widthElement = null;
        },
        events: [ {
            name: "active",
            self: true,
            handler: function() {
                replaceClass(this.selTarget, this.clsInactive, this.clsActive);
            }
        }, {
            name: "inactive",
            self: true,
            handler: function() {
                replaceClass(this.selTarget, this.clsActive, this.clsInactive);
            }
        }, {
            name: "load hashchange popstate",
            el: window,
            handler: function() {
                var this$1 = this;
                if (!(this.targetOffset !== false && location.hash && window.pageYOffset > 0)) {
                    return;
                }
                var target = $(location.hash);
                if (target) {
                    fastdom.read(function() {
                        var ref = offset(target);
                        var top = ref.top;
                        var elTop = offset(this$1.$el).top;
                        var elHeight = this$1.$el.offsetHeight;
                        if (this$1.isActive && elTop + elHeight >= top && elTop <= top + target.offsetHeight) {
                            scrollTop(window, top - elHeight - (isNumeric(this$1.targetOffset) ? this$1.targetOffset : 0) - this$1.offset);
                        }
                    });
                }
            }
        } ],
        update: [ {
            read: function(ref) {
                var height$$1 = ref.height;
                this.topOffset = offset(this.isActive ? this.placeholder : this.$el).top;
                this.bottomOffset = this.topOffset + height$$1;
                var bottom = parseProp("bottom", this);
                this.top = Math.max(toFloat(parseProp("top", this)), this.topOffset) - this.offset;
                this.bottom = bottom && bottom - height$$1;
                this.inactive = !this.matchMedia;
                return {
                    height: !this.isActive ? this.$el.offsetHeight : height$$1,
                    margins: css(this.$el, [ "marginTop", "marginBottom", "marginLeft", "marginRight" ])
                };
            },
            write: function(ref) {
                var height$$1 = ref.height;
                var margins = ref.margins;
                var ref$1 = this;
                var placeholder = ref$1.placeholder;
                css(placeholder, assign({
                    height: height$$1
                }, margins));
                if (!within(placeholder, document)) {
                    after(this.$el, placeholder);
                    attr(placeholder, "hidden", "");
                }
                if (isUndefined(this.isActive)) {
                    this.hide();
                }
            },
            events: [ "load", "resize" ]
        }, {
            read: function(_, ref) {
                var scrollY = ref.scrollY;
                if (scrollY === void 0) scrollY = window.pageYOffset;
                this.width = (isVisible(this.widthElement) ? this.widthElement : this.$el).offsetWidth;
                return {
                    scroll: this.scroll = scrollY,
                    visible: isVisible(this.$el)
                };
            },
            write: function(ref, ref$1) {
                var this$1 = this;
                var visible = ref.visible;
                var scroll = ref.scroll;
                if (ref$1 === void 0) ref$1 = {};
                var dir = ref$1.dir;
                if (scroll < 0 || !visible || this.disabled || this.showOnUp && !dir) {
                    return;
                }
                if (this.inactive || scroll < this.top || this.showOnUp && (scroll <= this.top || dir === "down" || dir === "up" && !this.isActive && scroll <= this.bottomOffset)) {
                    if (!this.isActive) {
                        return;
                    }
                    this.isActive = false;
                    if (this.animation && scroll > this.topOffset) {
                        Animation.cancel(this.$el);
                        Animation.out(this.$el, this.animation).then(function() {
                            return this$1.hide();
                        }, noop);
                    } else {
                        this.hide();
                    }
                } else if (this.isActive) {
                    this.update();
                } else if (this.animation) {
                    Animation.cancel(this.$el);
                    this.show();
                    Animation.in(this.$el, this.animation).catch(noop);
                } else {
                    this.show();
                }
            },
            events: [ "load", "resize", "scroll" ]
        } ],
        methods: {
            show: function() {
                this.isActive = true;
                this.update();
                attr(this.placeholder, "hidden", null);
            },
            hide: function() {
                if (!this.isActive || hasClass(this.selTarget, this.clsActive)) {
                    trigger(this.$el, "inactive");
                }
                removeClass(this.$el, this.clsFixed, this.clsBelow);
                css(this.$el, {
                    position: "",
                    top: "",
                    width: ""
                });
                attr(this.placeholder, "hidden", "");
            },
            update: function() {
                var active = this.top !== 0 || this.scroll > this.top;
                var top = Math.max(0, this.offset);
                if (this.bottom && this.scroll > this.bottom - this.offset) {
                    top = this.bottom - this.scroll;
                }
                css(this.$el, {
                    position: "fixed",
                    top: top + "px",
                    width: this.width
                });
                if (hasClass(this.selTarget, this.clsActive)) {
                    if (!active) {
                        trigger(this.$el, "inactive");
                    }
                } else if (active) {
                    trigger(this.$el, "active");
                }
                toggleClass(this.$el, this.clsBelow, this.scroll > this.bottomOffset);
                addClass(this.$el, this.clsFixed);
            }
        }
    };
    function parseProp(prop, ref) {
        var $props = ref.$props;
        var $el = ref.$el;
        var propOffset = ref[prop + "Offset"];
        var value = $props[prop];
        if (!value) {
            return;
        }
        if (isNumeric(value)) {
            return propOffset + toFloat(value);
        } else if (isString(value) && value.match(/^-?\d+vh$/)) {
            return height(window) * toFloat(value) / 100;
        } else {
            var el = value === true ? $el.parentNode : query(value, $el);
            if (el) {
                return offset(el).top + el.offsetHeight;
            }
        }
    }
    var Switcher = {
        mixins: [ Togglable ],
        args: "connect",
        props: {
            connect: String,
            toggle: String,
            active: Number,
            swiping: Boolean
        },
        data: {
            connect: "~.uk-switcher",
            toggle: "> *",
            active: 0,
            swiping: true,
            cls: "uk-active",
            clsContainer: "uk-switcher",
            attrItem: "uk-switcher-item",
            queued: true
        },
        computed: {
            connects: function(ref, $el) {
                var connect = ref.connect;
                return queryAll(connect, $el);
            },
            toggles: function(ref, $el) {
                var toggle = ref.toggle;
                return $$(toggle, $el);
            }
        },
        events: [ {
            name: "click",
            delegate: function() {
                return this.toggle + ":not(.uk-disabled)";
            },
            handler: function(e) {
                e.preventDefault();
                this.show(e.current);
            }
        }, {
            name: "click",
            el: function() {
                return this.connects;
            },
            delegate: function() {
                return "[" + this.attrItem + "],[data-" + this.attrItem + "]";
            },
            handler: function(e) {
                e.preventDefault();
                this.show(data(e.current, this.attrItem));
            }
        }, {
            name: "swipeRight swipeLeft",
            filter: function() {
                return this.swiping;
            },
            el: function() {
                return this.connects;
            },
            handler: function(e) {
                if (!isTouch(e)) {
                    return;
                }
                e.preventDefault();
                if (!window.getSelection().toString()) {
                    this.show(e.type === "swipeLeft" ? "next" : "previous");
                }
            }
        } ],
        update: function() {
            var this$1 = this;
            this.connects.forEach(function(list) {
                return this$1.updateAria(list.children);
            });
            this.show(filter(this.toggles, "." + this.cls)[0] || this.toggles[this.active] || this.toggles[0]);
        },
        methods: {
            index: function() {
                return !!this.connects.length && index(filter(this.connects[0].children, "." + this.cls)[0]);
            },
            show: function(item) {
                var this$1 = this;
                var ref = this.toggles;
                var length = ref.length;
                var prev = this.index();
                var hasPrev = prev >= 0;
                var dir = item === "previous" ? -1 : 1;
                var toggle, next = getIndex(item, this.toggles, prev);
                for (var i = 0; i < length; i++, next = (next + dir + length) % length) {
                    if (!matches(this$1.toggles[next], ".uk-disabled, [disabled]")) {
                        toggle = this$1.toggles[next];
                        break;
                    }
                }
                if (!toggle || prev >= 0 && hasClass(toggle, this.cls) || prev === next) {
                    return;
                }
                removeClass(this.toggles, this.cls);
                attr(this.toggles, "aria-expanded", false);
                addClass(toggle, this.cls);
                attr(toggle, "aria-expanded", true);
                this.connects.forEach(function(list) {
                    if (!hasPrev) {
                        this$1.toggleNow(list.children[next]);
                    } else {
                        this$1.toggleElement([ list.children[prev], list.children[next] ]);
                    }
                });
            }
        }
    };
    var Tab = {
        mixins: [ Class ],
        extends: Switcher,
        props: {
            media: Boolean
        },
        data: {
            media: 960,
            attrItem: "uk-tab-item"
        },
        connected: function() {
            var cls = hasClass(this.$el, "uk-tab-left") ? "uk-tab-left" : hasClass(this.$el, "uk-tab-right") ? "uk-tab-right" : false;
            if (cls) {
                this.$create("toggle", this.$el, {
                    cls: cls,
                    mode: "media",
                    media: this.media
                });
            }
        }
    };
    var Toggle = {
        mixins: [ Media, Togglable ],
        args: "target",
        props: {
            href: String,
            target: null,
            mode: "list"
        },
        data: {
            href: false,
            target: false,
            mode: "click",
            queued: true
        },
        computed: {
            target: function(ref, $el) {
                var href = ref.href;
                var target = ref.target;
                target = queryAll(target || href, $el);
                return target.length && target || [ $el ];
            }
        },
        events: [ {
            name: pointerEnter + " " + pointerLeave,
            filter: function() {
                return includes(this.mode, "hover");
            },
            handler: function(e) {
                if (!isTouch(e)) {
                    this.toggle("toggle" + (e.type === pointerEnter ? "show" : "hide"));
                }
            }
        }, {
            name: "click",
            filter: function() {
                return includes(this.mode, "click") || hasTouch && includes(this.mode, "hover");
            },
            handler: function(e) {
                if (!isTouch(e) && !includes(this.mode, "click")) {
                    return;
                }
                var link;
                if (closest(e.target, 'a[href="#"], button') || (link = closest(e.target, "a[href]")) && (this.cls || !isVisible(this.target) || link.hash && matches(this.target, link.hash))) {
                    once(document, "click", function(e) {
                        return e.preventDefault();
                    });
                }
                this.toggle();
            }
        } ],
        update: {
            write: function() {
                if (!includes(this.mode, "media") || !this.media) {
                    return;
                }
                var toggled = this.isToggled(this.target);
                if (this.matchMedia ? !toggled : toggled) {
                    this.toggle();
                }
            },
            events: [ "load", "resize" ]
        },
        methods: {
            toggle: function(type) {
                if (trigger(this.target, type || "toggle", [ this ])) {
                    this.toggleElement(this.target);
                }
            }
        }
    };
    function core(UIkit) {
        UIkit.component("accordion", Accordion);
        UIkit.component("alert", Alert);
        UIkit.component("cover", Cover);
        UIkit.component("drop", Drop);
        UIkit.component("dropdown", Dropdown);
        UIkit.component("formCustom", FormCustom);
        UIkit.component("gif", Gif);
        UIkit.component("grid", Grid);
        UIkit.component("heightMatch", HeightMatch);
        UIkit.component("heightViewport", HeightViewport);
        UIkit.component("icon", Icon);
        UIkit.component("img", Img);
        UIkit.component("leader", Leader);
        UIkit.component("margin", Margin);
        UIkit.component("modal", Modal$1);
        UIkit.component("nav", Nav);
        UIkit.component("navbar", Navbar);
        UIkit.component("offcanvas", Offcanvas);
        UIkit.component("overflowAuto", OverflowAuto);
        UIkit.component("responsive", Responsive);
        UIkit.component("scroll", Scroll);
        UIkit.component("scrollspy", Scrollspy);
        UIkit.component("scrollspyNav", ScrollspyNav);
        UIkit.component("sticky", Sticky);
        UIkit.component("svg", SVG);
        UIkit.component("switcher", Switcher);
        UIkit.component("tab", Tab);
        UIkit.component("toggle", Toggle);
        UIkit.component("video", Video);
        UIkit.component("close", Close);
        UIkit.component("marker", IconComponent);
        UIkit.component("navbarToggleIcon", IconComponent);
        UIkit.component("overlayIcon", IconComponent);
        UIkit.component("paginationNext", IconComponent);
        UIkit.component("paginationPrevious", IconComponent);
        UIkit.component("searchIcon", Search);
        UIkit.component("slidenavNext", Slidenav);
        UIkit.component("slidenavPrevious", Slidenav);
        UIkit.component("spinner", Spinner);
        UIkit.component("totop", IconComponent);
        UIkit.use(Core);
    }
    UIkit.version = "3.0.0-rc.17";
    core(UIkit);
    var Countdown = {
        mixins: [ Class ],
        props: {
            date: String,
            clsWrapper: String
        },
        data: {
            date: "",
            clsWrapper: ".uk-countdown-%unit%"
        },
        computed: {
            date: function(ref) {
                var date = ref.date;
                return Date.parse(date);
            },
            days: function(ref, $el) {
                var clsWrapper = ref.clsWrapper;
                return $(clsWrapper.replace("%unit%", "days"), $el);
            },
            hours: function(ref, $el) {
                var clsWrapper = ref.clsWrapper;
                return $(clsWrapper.replace("%unit%", "hours"), $el);
            },
            minutes: function(ref, $el) {
                var clsWrapper = ref.clsWrapper;
                return $(clsWrapper.replace("%unit%", "minutes"), $el);
            },
            seconds: function(ref, $el) {
                var clsWrapper = ref.clsWrapper;
                return $(clsWrapper.replace("%unit%", "seconds"), $el);
            },
            units: function() {
                var this$1 = this;
                return [ "days", "hours", "minutes", "seconds" ].filter(function(unit) {
                    return this$1[unit];
                });
            }
        },
        connected: function() {
            this.start();
        },
        disconnected: function() {
            var this$1 = this;
            this.stop();
            this.units.forEach(function(unit) {
                return empty(this$1[unit]);
            });
        },
        events: [ {
            name: "visibilitychange",
            el: document,
            handler: function() {
                if (document.hidden) {
                    this.stop();
                } else {
                    this.start();
                }
            }
        } ],
        update: {
            write: function() {
                var this$1 = this;
                var timespan = getTimeSpan(this.date);
                if (timespan.total <= 0) {
                    this.stop();
                    timespan.days = timespan.hours = timespan.minutes = timespan.seconds = 0;
                }
                this.units.forEach(function(unit) {
                    var digits = String(Math.floor(timespan[unit]));
                    digits = digits.length < 2 ? "0" + digits : digits;
                    var el = this$1[unit];
                    if (el.textContent !== digits) {
                        digits = digits.split("");
                        if (digits.length !== el.children.length) {
                            html(el, digits.map(function() {
                                return "<span></span>";
                            }).join(""));
                        }
                        digits.forEach(function(digit, i) {
                            return el.children[i].textContent = digit;
                        });
                    }
                });
            }
        },
        methods: {
            start: function() {
                var this$1 = this;
                this.stop();
                if (this.date && this.units.length) {
                    this.$emit();
                    this.timer = setInterval(function() {
                        return this$1.$emit();
                    }, 1e3);
                }
            },
            stop: function() {
                if (this.timer) {
                    clearInterval(this.timer);
                    this.timer = null;
                }
            }
        }
    };
    function getTimeSpan(date) {
        var total = date - Date.now();
        return {
            total: total,
            seconds: total / 1e3 % 60,
            minutes: total / 1e3 / 60 % 60,
            hours: total / 1e3 / 60 / 60 % 24,
            days: total / 1e3 / 60 / 60 / 24
        };
    }
    var targetClass = "uk-animation-target";
    var Animate = {
        props: {
            animation: Number
        },
        data: {
            animation: 150
        },
        computed: {
            target: function() {
                return this.$el;
            }
        },
        methods: {
            animate: function(action) {
                var this$1 = this;
                addStyle();
                var children = toNodes(this.target.children);
                var propsFrom = children.map(function(el) {
                    return getProps(el, true);
                });
                var oldHeight = height(this.target);
                var oldScrollY = window.pageYOffset;
                action();
                Transition.cancel(this.target);
                children.forEach(Transition.cancel);
                reset(this.target);
                this.$update(this.target);
                fastdom.flush();
                var newHeight = height(this.target);
                children = children.concat(toNodes(this.target.children).filter(function(el) {
                    return !includes(children, el);
                }));
                var propsTo = children.map(function(el, i) {
                    return el.parentNode && i in propsFrom ? propsFrom[i] ? isVisible(el) ? getPositionWithMargin(el) : {
                        opacity: 0
                    } : {
                        opacity: isVisible(el) ? 1 : 0
                    } : false;
                });
                propsFrom = propsTo.map(function(props, i) {
                    var from = children[i].parentNode === this$1.target ? propsFrom[i] || getProps(children[i]) : false;
                    if (from) {
                        if (!props) {
                            delete from.opacity;
                        } else if (!("opacity" in props)) {
                            var opacity = from.opacity;
                            if (opacity % 1) {
                                props.opacity = 1;
                            } else {
                                delete from.opacity;
                            }
                        }
                    }
                    return from;
                });
                addClass(this.target, targetClass);
                children.forEach(function(el, i) {
                    return propsFrom[i] && css(el, propsFrom[i]);
                });
                css(this.target, "height", oldHeight);
                scrollTop(window, oldScrollY);
                return Promise.all(children.map(function(el, i) {
                    return propsFrom[i] && propsTo[i] ? Transition.start(el, propsTo[i], this$1.animation, "ease") : Promise.resolve();
                }).concat(Transition.start(this.target, {
                    height: newHeight
                }, this.animation, "ease"))).then(function() {
                    children.forEach(function(el, i) {
                        return css(el, {
                            display: propsTo[i].opacity === 0 ? "none" : "",
                            zIndex: ""
                        });
                    });
                    reset(this$1.target);
                    this$1.$update(this$1.target);
                    fastdom.flush();
                }, noop);
            }
        }
    };
    function getProps(el, opacity) {
        var zIndex = css(el, "zIndex");
        return isVisible(el) ? assign({
            display: "",
            opacity: opacity ? css(el, "opacity") : "0",
            pointerEvents: "none",
            position: "absolute",
            zIndex: zIndex === "auto" ? index(el) : zIndex
        }, getPositionWithMargin(el)) : false;
    }
    function reset(el) {
        css(el.children, {
            height: "",
            left: "",
            opacity: "",
            pointerEvents: "",
            position: "",
            top: "",
            width: ""
        });
        removeClass(el, targetClass);
        css(el, "height", "");
    }
    function getPositionWithMargin(el) {
        var ref = el.getBoundingClientRect();
        var height$$1 = ref.height;
        var width$$1 = ref.width;
        var ref$1 = position(el);
        var top = ref$1.top;
        var left = ref$1.left;
        top += toFloat(css(el, "marginTop"));
        return {
            top: top,
            left: left,
            height: height$$1,
            width: width$$1
        };
    }
    var style$1;
    function addStyle() {
        if (!style$1) {
            style$1 = append(document.head, "<style>").sheet;
            style$1.insertRule("." + targetClass + " > * {\n                    margin-top: 0 !important;\n                    transform: none !important;\n                }", 0);
        }
    }
    var Filter = {
        mixins: [ Animate ],
        args: "target",
        props: {
            target: Boolean,
            selActive: Boolean
        },
        data: {
            target: null,
            selActive: false,
            attrItem: "uk-filter-control",
            cls: "uk-active",
            animation: 250
        },
        computed: {
            toggles: function(ref, $el) {
                var attrItem = ref.attrItem;
                return $$("[" + this.attrItem + "],[data-" + this.attrItem + "]", $el);
            },
            target: function(ref, $el) {
                var target = ref.target;
                return $(target, $el);
            }
        },
        events: [ {
            name: "click",
            delegate: function() {
                return "[" + this.attrItem + "],[data-" + this.attrItem + "]";
            },
            handler: function(e) {
                e.preventDefault();
                this.apply(e.current);
            }
        } ],
        connected: function() {
            var this$1 = this;
            if (this.selActive === false) {
                return;
            }
            var actives = $$(this.selActive, this.$el);
            this.toggles.forEach(function(el) {
                return toggleClass(el, this$1.cls, includes(actives, el));
            });
        },
        update: function(data$$1) {
            var toggles = data$$1.toggles;
            var children = data$$1.children;
            if (isEqualList(toggles, this.toggles, false) && isEqualList(children, this.target.children, false)) {
                return;
            }
            data$$1.toggles = this.toggles;
            data$$1.children = this.target.children;
            this.setState(this.getState(), false);
        },
        methods: {
            apply: function(el) {
                this.setState(mergeState(el, this.attrItem, this.getState()));
            },
            getState: function() {
                var this$1 = this;
                return this.toggles.filter(function(item) {
                    return hasClass(item, this$1.cls);
                }).reduce(function(state, el) {
                    return mergeState(el, this$1.attrItem, state);
                }, {
                    filter: {
                        "": ""
                    },
                    sort: []
                });
            },
            setState: function(state, animate$$1) {
                var this$1 = this;
                if (animate$$1 === void 0) animate$$1 = true;
                state = assign({
                    filter: {
                        "": ""
                    },
                    sort: []
                }, state);
                trigger(this.$el, "beforeFilter", [ this, state ]);
                var children = toNodes(this.target.children);
                this.toggles.forEach(function(el) {
                    return toggleClass(el, this$1.cls, matchFilter(el, this$1.attrItem, state));
                });
                var apply$$1 = function() {
                    var selector = getSelector(state);
                    children.forEach(function(el) {
                        return css(el, "display", selector && !matches(el, selector) ? "none" : "");
                    });
                    var ref = state.sort;
                    var sort = ref[0];
                    var order = ref[1];
                    if (sort) {
                        var sorted = sortItems(children, sort, order);
                        if (!isEqualList(sorted, children)) {
                            sorted.forEach(function(el) {
                                return append(this$1.target, el);
                            });
                        }
                    }
                };
                if (animate$$1) {
                    this.animate(apply$$1).then(function() {
                        return trigger(this$1.$el, "afterFilter", [ this$1 ]);
                    });
                } else {
                    apply$$1();
                    trigger(this.$el, "afterFilter", [ this ]);
                }
            }
        }
    };
    function getFilter(el, attr$$1) {
        return parseOptions(data(el, attr$$1), [ "filter" ]);
    }
    function mergeState(el, attr$$1, state) {
        toNodes(el).forEach(function(el) {
            var filterBy = getFilter(el, attr$$1);
            var filter$$1 = filterBy.filter;
            var group = filterBy.group;
            var sort = filterBy.sort;
            var order = filterBy.order;
            if (order === void 0) order = "asc";
            if (filter$$1 || isUndefined(sort)) {
                if (group) {
                    delete state.filter[""];
                    state.filter[group] = filter$$1;
                } else {
                    state.filter = {
                        "": filter$$1
                    };
                }
            }
            if (!isUndefined(sort)) {
                state.sort = [ sort, order ];
            }
        });
        return state;
    }
    function matchFilter(el, attr$$1, ref) {
        var stateFilter = ref.filter;
        var ref_sort = ref.sort;
        var stateSort = ref_sort[0];
        var stateOrder = ref_sort[1];
        var ref$1 = getFilter(el, attr$$1);
        var filter$$1 = ref$1.filter;
        var group = ref$1.group;
        if (group === void 0) group = "";
        var sort = ref$1.sort;
        var order = ref$1.order;
        if (order === void 0) order = "asc";
        return Boolean((filter$$1 || isUndefined(sort)) && group in stateFilter && (filter$$1 === stateFilter[group] || isUndefined(filter$$1) && !stateFilter[group]) || stateSort && sort && stateSort === sort && stateOrder === order);
    }
    function isEqualList(listA, listB, strict) {
        if (strict === void 0) strict = true;
        listA = toNodes(listA);
        listB = toNodes(listB);
        return listA.length === listB.length && listA.every(function(el, i) {
            return strict ? el === listB[i] : ~listB.indexOf(el);
        });
    }
    function getSelector(ref) {
        var filter$$1 = ref.filter;
        var selector = "";
        each(filter$$1, function(value) {
            return selector += value || "";
        });
        return selector;
    }
    function sortItems(nodes, sort, order) {
        return toNodes(nodes).sort(function(a, b) {
            return data(a, sort).localeCompare(data(b, sort), undefined, {
                numeric: true
            }) * (order === "asc" || -1);
        });
    }
    var Animations = {
        slide: {
            show: function(dir) {
                return [ {
                    transform: translate(dir * -100)
                }, {
                    transform: translate()
                } ];
            },
            percent: function(current) {
                return translated(current);
            },
            translate: function(percent, dir) {
                return [ {
                    transform: translate(dir * -100 * percent)
                }, {
                    transform: translate(dir * 100 * (1 - percent))
                } ];
            }
        }
    };
    function translated(el) {
        return Math.abs(css(el, "transform").split(",")[4] / el.offsetWidth) || 0;
    }
    function translate(value, unit) {
        if (value === void 0) value = 0;
        if (unit === void 0) unit = "%";
        return "translateX(" + value + (value ? unit : "") + ")";
    }
    function scale3d(value) {
        return "scale3d(" + value + ", " + value + ", 1)";
    }
    var Animations$1 = assign({}, Animations, {
        fade: {
            show: function() {
                return [ {
                    opacity: 0
                }, {
                    opacity: 1
                } ];
            },
            percent: function(current) {
                return 1 - css(current, "opacity");
            },
            translate: function(percent) {
                return [ {
                    opacity: 1 - percent
                }, {
                    opacity: percent
                } ];
            }
        },
        scale: {
            show: function() {
                return [ {
                    opacity: 0,
                    transform: scale3d(1 - .2)
                }, {
                    opacity: 1,
                    transform: scale3d(1)
                } ];
            },
            percent: function(current) {
                return 1 - css(current, "opacity");
            },
            translate: function(percent) {
                return [ {
                    opacity: 1 - percent,
                    transform: scale3d(1 - .2 * percent)
                }, {
                    opacity: percent,
                    transform: scale3d(1 - .2 + .2 * percent)
                } ];
            }
        }
    });
    function Transitioner(prev, next, dir, ref) {
        var animation = ref.animation;
        var easing = ref.easing;
        var percent = animation.percent;
        var translate = animation.translate;
        var show = animation.show;
        if (show === void 0) show = noop;
        var props = show(dir);
        var deferred = new Deferred();
        return {
            dir: dir,
            show: function(duration, percent, linear) {
                var this$1 = this;
                if (percent === void 0) percent = 0;
                var timing = linear ? "linear" : easing;
                duration -= Math.round(duration * clamp(percent, -1, 1));
                this.translate(percent);
                triggerUpdate(next, "itemin", {
                    percent: percent,
                    duration: duration,
                    timing: timing,
                    dir: dir
                });
                triggerUpdate(prev, "itemout", {
                    percent: 1 - percent,
                    duration: duration,
                    timing: timing,
                    dir: dir
                });
                Promise.all([ Transition.start(next, props[1], duration, timing), Transition.start(prev, props[0], duration, timing) ]).then(function() {
                    this$1.reset();
                    deferred.resolve();
                }, noop);
                return deferred.promise;
            },
            stop: function() {
                return Transition.stop([ next, prev ]);
            },
            cancel: function() {
                Transition.cancel([ next, prev ]);
            },
            reset: function() {
                for (var prop in props[0]) {
                    css([ next, prev ], prop, "");
                }
            },
            forward: function(duration, percent) {
                if (percent === void 0) percent = this.percent();
                Transition.cancel([ next, prev ]);
                return this.show(duration, percent, true);
            },
            translate: function(percent) {
                this.reset();
                var props = translate(percent, dir);
                css(next, props[1]);
                css(prev, props[0]);
                triggerUpdate(next, "itemtranslatein", {
                    percent: percent,
                    dir: dir
                });
                triggerUpdate(prev, "itemtranslateout", {
                    percent: 1 - percent,
                    dir: dir
                });
            },
            percent: function() {
                return percent(prev || next, next, dir);
            },
            getDistance: function() {
                return prev.offsetWidth;
            }
        };
    }
    function triggerUpdate(el, type, data$$1) {
        trigger(el, createEvent(type, false, false, data$$1));
    }
    var SliderAutoplay = {
        props: {
            autoplay: Boolean,
            autoplayInterval: Number,
            pauseOnHover: Boolean
        },
        data: {
            autoplay: false,
            autoplayInterval: 7e3,
            pauseOnHover: true
        },
        connected: function() {
            this.startAutoplay();
        },
        disconnected: function() {
            this.stopAutoplay();
        },
        events: [ {
            name: "visibilitychange",
            el: document,
            handler: function() {
                if (document.hidden) {
                    this.stopAutoplay();
                } else {
                    this.startAutoplay();
                }
            }
        }, {
            name: pointerDown,
            handler: "stopAutoplay"
        }, {
            name: "mouseenter",
            filter: function() {
                return this.autoplay;
            },
            handler: function() {
                this.isHovering = true;
            }
        }, {
            name: "mouseleave",
            filter: function() {
                return this.autoplay;
            },
            handler: function() {
                this.isHovering = false;
            }
        } ],
        methods: {
            startAutoplay: function() {
                var this$1 = this;
                this.stopAutoplay();
                if (this.autoplay) {
                    this.interval = setInterval(function() {
                        return !(this$1.isHovering && this$1.pauseOnHover) && !this$1.stack.length && this$1.show("next");
                    }, this.autoplayInterval);
                }
            },
            stopAutoplay: function() {
                if (this.interval) {
                    clearInterval(this.interval);
                }
            }
        }
    };
    var SliderDrag = {
        data: {
            threshold: 10,
            preventCatch: false
        },
        created: function() {
            var this$1 = this;
            [ "start", "move", "end" ].forEach(function(key) {
                var fn = this$1[key];
                this$1[key] = function(e) {
                    var pos = getPos$1(e).x * (isRtl ? -1 : 1);
                    this$1.prevPos = pos !== this$1.pos ? this$1.pos : this$1.prevPos;
                    this$1.pos = pos;
                    fn(e);
                };
            });
        },
        events: [ {
            name: pointerDown,
            delegate: function() {
                return this.slidesSelector;
            },
            handler: function(e) {
                if (!isTouch(e) && hasTextNodesOnly(e.target) || e.button > 0 || this.length < 2 || this.preventCatch) {
                    return;
                }
                this.start(e);
            }
        }, {
            name: "touchmove",
            passive: false,
            handler: "move",
            delegate: function() {
                return this.slidesSelector;
            }
        }, {
            name: "dragstart",
            handler: function(e) {
                e.preventDefault();
            }
        } ],
        methods: {
            start: function() {
                var this$1 = this;
                this.drag = this.pos;
                if (this._transitioner) {
                    this.percent = this._transitioner.percent();
                    this.drag += this._transitioner.getDistance() * this.percent * this.dir;
                    this._transitioner.cancel();
                    this._transitioner.translate(this.percent);
                    this.dragging = true;
                    this.stack = [];
                } else {
                    this.prevIndex = this.index;
                }
                var off$$1 = on(document, pointerMove.replace(" touchmove", ""), this.move, {
                    passive: false
                });
                this.unbindMove = function() {
                    off$$1();
                    this$1.unbindMove = null;
                };
                on(window, "scroll", this.unbindMove);
                on(document, pointerUp, this.end, true);
            },
            move: function(e) {
                var this$1 = this;
                if (!this.unbindMove) {
                    return;
                }
                var distance = this.pos - this.drag;
                if (distance === 0 || this.prevPos === this.pos || !this.dragging && Math.abs(distance) < this.threshold) {
                    return;
                }
                e.cancelable && e.preventDefault();
                this.dragging = true;
                this.dir = distance < 0 ? 1 : -1;
                var ref = this;
                var slides = ref.slides;
                var ref$1 = this;
                var prevIndex = ref$1.prevIndex;
                var dis = Math.abs(distance);
                var nextIndex = this.getIndex(prevIndex + this.dir, prevIndex);
                var width$$1 = this._getDistance(prevIndex, nextIndex) || slides[prevIndex].offsetWidth;
                while (nextIndex !== prevIndex && dis > width$$1) {
                    this$1.drag -= width$$1 * this$1.dir;
                    prevIndex = nextIndex;
                    dis -= width$$1;
                    nextIndex = this$1.getIndex(prevIndex + this$1.dir, prevIndex);
                    width$$1 = this$1._getDistance(prevIndex, nextIndex) || slides[prevIndex].offsetWidth;
                }
                this.percent = dis / width$$1;
                var prev = slides[prevIndex];
                var next = slides[nextIndex];
                var changed = this.index !== nextIndex;
                var edge = prevIndex === nextIndex;
                var itemShown;
                [ this.index, this.prevIndex ].filter(function(i) {
                    return !includes([ nextIndex, prevIndex ], i);
                }).forEach(function(i) {
                    trigger(slides[i], "itemhidden", [ this$1 ]);
                    if (edge) {
                        itemShown = true;
                        this$1.prevIndex = prevIndex;
                    }
                });
                if (this.index === prevIndex && this.prevIndex !== prevIndex || itemShown) {
                    trigger(slides[this.index], "itemshown", [ this ]);
                }
                if (changed) {
                    this.prevIndex = prevIndex;
                    this.index = nextIndex;
                    !edge && trigger(prev, "beforeitemhide", [ this ]);
                    trigger(next, "beforeitemshow", [ this ]);
                }
                this._transitioner = this._translate(Math.abs(this.percent), prev, !edge && next);
                if (changed) {
                    !edge && trigger(prev, "itemhide", [ this ]);
                    trigger(next, "itemshow", [ this ]);
                }
            },
            end: function() {
                off(window, "scroll", this.unbindMove);
                this.unbindMove && this.unbindMove();
                off(document, pointerUp, this.end, true);
                if (this.dragging) {
                    this.dragging = null;
                    if (this.index === this.prevIndex) {
                        this.percent = 1 - this.percent;
                        this.dir *= -1;
                        this._show(false, this.index, true);
                        this._transitioner = null;
                    } else {
                        var dirChange = (isRtl ? this.dir * (isRtl ? 1 : -1) : this.dir) < 0 === this.prevPos > this.pos;
                        this.index = dirChange ? this.index : this.prevIndex;
                        if (dirChange) {
                            this.percent = 1 - this.percent;
                        }
                        this.show(this.dir > 0 && !dirChange || this.dir < 0 && dirChange ? "next" : "previous", true);
                    }
                    preventClick();
                }
                this.drag = this.percent = null;
            }
        }
    };
    function hasTextNodesOnly(el) {
        return !el.children.length && el.childNodes.length;
    }
    var SliderNav = {
        data: {
            selNav: false
        },
        computed: {
            nav: function(ref, $el) {
                var selNav = ref.selNav;
                return $(selNav, $el);
            },
            navItemSelector: function(ref) {
                var attrItem = ref.attrItem;
                return "[" + attrItem + "],[data-" + attrItem + "]";
            },
            navItems: function(_, $el) {
                return $$(this.navItemSelector, $el);
            }
        },
        update: {
            write: function() {
                var this$1 = this;
                if (this.nav && this.length !== this.nav.children.length) {
                    html(this.nav, this.slides.map(function(_, i) {
                        return "<li " + this$1.attrItem + '="' + i + '"><a href="#"></a></li>';
                    }).join(""));
                }
                toggleClass($$(this.navItemSelector, this.$el).concat(this.nav), "uk-hidden", !this.maxIndex);
                this.updateNav();
            },
            events: [ "load", "resize" ]
        },
        events: [ {
            name: "click",
            delegate: function() {
                return this.navItemSelector;
            },
            handler: function(e) {
                e.preventDefault();
                e.current.blur();
                this.show(data(e.current, this.attrItem));
            }
        }, {
            name: "itemshow",
            handler: "updateNav"
        } ],
        methods: {
            updateNav: function() {
                var this$1 = this;
                var i = this.getValidIndex();
                this.navItems.forEach(function(el) {
                    var cmd = data(el, this$1.attrItem);
                    toggleClass(el, this$1.clsActive, toNumber(cmd) === i);
                    toggleClass(el, "uk-invisible", this$1.finite && (cmd === "previous" && i === 0 || cmd === "next" && i >= this$1.maxIndex));
                });
            }
        }
    };
    var Slider = {
        mixins: [ SliderAutoplay, SliderDrag, SliderNav ],
        props: {
            clsActivated: Boolean,
            easing: String,
            index: Number,
            finite: Boolean,
            velocity: Number
        },
        data: function() {
            return {
                easing: "ease",
                finite: false,
                velocity: 1,
                index: 0,
                stack: [],
                percent: 0,
                clsActive: "uk-active",
                clsActivated: false,
                Transitioner: false,
                transitionOptions: {}
            };
        },
        computed: {
            duration: function(ref, $el) {
                var velocity = ref.velocity;
                return speedUp($el.offsetWidth / velocity);
            },
            length: function() {
                return this.slides.length;
            },
            list: function(ref, $el) {
                var selList = ref.selList;
                return $(selList, $el);
            },
            maxIndex: function() {
                return this.length - 1;
            },
            slidesSelector: function(ref) {
                var selList = ref.selList;
                return selList + " > *";
            },
            slides: function() {
                return toNodes(this.list.children);
            }
        },
        events: {
            itemshown: function() {
                this.$update(this.list);
            }
        },
        methods: {
            show: function(index$$1, force) {
                var this$1 = this;
                if (force === void 0) force = false;
                if (this.dragging || !this.length) {
                    return;
                }
                var ref = this;
                var stack = ref.stack;
                var queueIndex = force ? 0 : stack.length;
                var reset = function() {
                    stack.splice(queueIndex, 1);
                    if (stack.length) {
                        this$1.show(stack.shift(), true);
                    }
                };
                stack[force ? "unshift" : "push"](index$$1);
                if (!force && stack.length > 1) {
                    if (stack.length === 2) {
                        this._transitioner.forward(Math.min(this.duration, 200));
                    }
                    return;
                }
                var prevIndex = this.index;
                var prev = hasClass(this.slides, this.clsActive) && this.slides[prevIndex];
                var nextIndex = this.getIndex(index$$1, this.index);
                var next = this.slides[nextIndex];
                if (prev === next) {
                    reset();
                    return;
                }
                this.dir = getDirection(index$$1, prevIndex);
                this.prevIndex = prevIndex;
                this.index = nextIndex;
                prev && trigger(prev, "beforeitemhide", [ this ]);
                if (!trigger(next, "beforeitemshow", [ this, prev ])) {
                    this.index = this.prevIndex;
                    reset();
                    return;
                }
                var promise = this._show(prev, next, force).then(function() {
                    prev && trigger(prev, "itemhidden", [ this$1 ]);
                    trigger(next, "itemshown", [ this$1 ]);
                    return new Promise(function(resolve) {
                        fastdom.write(function() {
                            stack.shift();
                            if (stack.length) {
                                this$1.show(stack.shift(), true);
                            } else {
                                this$1._transitioner = null;
                            }
                            resolve();
                        });
                    });
                });
                prev && trigger(prev, "itemhide", [ this ]);
                trigger(next, "itemshow", [ this ]);
                return promise;
            },
            getIndex: function(index$$1, prev) {
                if (index$$1 === void 0) index$$1 = this.index;
                if (prev === void 0) prev = this.index;
                return clamp(getIndex(index$$1, this.slides, prev, this.finite), 0, this.maxIndex);
            },
            getValidIndex: function(index$$1, prevIndex) {
                if (index$$1 === void 0) index$$1 = this.index;
                if (prevIndex === void 0) prevIndex = this.prevIndex;
                return this.getIndex(index$$1, prevIndex);
            },
            _show: function(prev, next, force) {
                this._transitioner = this._getTransitioner(prev, next, this.dir, assign({
                    easing: force ? next.offsetWidth < 600 ? "cubic-bezier(0.25, 0.46, 0.45, 0.94)" : "cubic-bezier(0.165, 0.84, 0.44, 1)" : this.easing
                }, this.transitionOptions));
                if (!force && !prev) {
                    this._transitioner.translate(1);
                    return Promise.resolve();
                }
                var ref = this.stack;
                var length = ref.length;
                return this._transitioner[length > 1 ? "forward" : "show"](length > 1 ? Math.min(this.duration, 75 + 75 / (length - 1)) : this.duration, this.percent);
            },
            _getDistance: function(prev, next) {
                return new this._getTransitioner(prev, prev !== next && next).getDistance();
            },
            _translate: function(percent, prev, next) {
                if (prev === void 0) prev = this.prevIndex;
                if (next === void 0) next = this.index;
                var transitioner = this._getTransitioner(prev !== next ? prev : false, next);
                transitioner.translate(percent);
                return transitioner;
            },
            _getTransitioner: function(prev, next, dir, options) {
                if (prev === void 0) prev = this.prevIndex;
                if (next === void 0) next = this.index;
                if (dir === void 0) dir = this.dir || 1;
                if (options === void 0) options = this.transitionOptions;
                return new this.Transitioner(isNumber(prev) ? this.slides[prev] : prev, isNumber(next) ? this.slides[next] : next, dir * (isRtl ? -1 : 1), options);
            }
        }
    };
    function getDirection(index$$1, prevIndex) {
        return index$$1 === "next" ? 1 : index$$1 === "previous" ? -1 : index$$1 < prevIndex ? -1 : 1;
    }
    function speedUp(x) {
        return .5 * x + 300;
    }
    var Slideshow = {
        mixins: [ Slider ],
        props: {
            animation: String
        },
        data: {
            animation: "slide",
            clsActivated: "uk-transition-active",
            Animations: Animations,
            Transitioner: Transitioner
        },
        computed: {
            animation: function(ref) {
                var animation = ref.animation;
                var Animations$$1 = ref.Animations;
                return assign(animation in Animations$$1 ? Animations$$1[animation] : Animations$$1.slide, {
                    name: animation
                });
            },
            transitionOptions: function() {
                return {
                    animation: this.animation
                };
            }
        },
        events: {
            "itemshow itemhide itemshown itemhidden": function(ref) {
                var target = ref.target;
                this.$update(target);
            },
            itemshow: function() {
                isNumber(this.prevIndex) && fastdom.flush();
            },
            beforeitemshow: function(ref) {
                var target = ref.target;
                addClass(target, this.clsActive);
            },
            itemshown: function(ref) {
                var target = ref.target;
                addClass(target, this.clsActivated);
            },
            itemhidden: function(ref) {
                var target = ref.target;
                removeClass(target, this.clsActive, this.clsActivated);
            }
        }
    };
    var LightboxPanel = {
        mixins: [ Container, Modal, Togglable, Slideshow ],
        functional: true,
        props: {
            delayControls: Number,
            preload: Number,
            videoAutoplay: Boolean,
            template: String
        },
        data: function() {
            return {
                preload: 1,
                videoAutoplay: false,
                delayControls: 3e3,
                items: [],
                cls: "uk-open",
                clsPage: "uk-lightbox-page",
                selList: ".uk-lightbox-items",
                attrItem: "uk-lightbox-item",
                selClose: ".uk-close-large",
                pauseOnHover: false,
                velocity: 2,
                Animations: Animations$1,
                template: '<div class="uk-lightbox uk-overflow-hidden"> <ul class="uk-lightbox-items"></ul> <div class="uk-lightbox-toolbar uk-position-top uk-text-right uk-transition-slide-top uk-transition-opaque"> <button class="uk-lightbox-toolbar-icon uk-close-large" type="button" uk-close></button> </div> <a class="uk-lightbox-button uk-position-center-left uk-position-medium uk-transition-fade" href="#" uk-slidenav-previous uk-lightbox-item="previous"></a> <a class="uk-lightbox-button uk-position-center-right uk-position-medium uk-transition-fade" href="#" uk-slidenav-next uk-lightbox-item="next"></a> <div class="uk-lightbox-toolbar uk-lightbox-caption uk-position-bottom uk-text-center uk-transition-slide-bottom uk-transition-opaque"></div> </div>'
            };
        },
        created: function() {
            var this$1 = this;
            this.$mount(append(this.container, this.template));
            this.caption = $(".uk-lightbox-caption", this.$el);
            this.items.forEach(function() {
                return append(this$1.list, "<li></li>");
            });
        },
        events: [ {
            name: pointerMove + " " + pointerDown + " keydown",
            handler: "showControls"
        }, {
            name: "click",
            self: true,
            delegate: function() {
                return this.slidesSelector;
            },
            handler: function(e) {
                e.preventDefault();
                this.hide();
            }
        }, {
            name: "shown",
            self: true,
            handler: "showControls"
        }, {
            name: "hide",
            self: true,
            handler: function() {
                this.hideControls();
                removeClass(this.slides, this.clsActive);
                Transition.stop(this.slides);
            }
        }, {
            name: "keyup",
            el: document,
            handler: function(e) {
                if (!this.isToggled(this.$el)) {
                    return;
                }
                switch (e.keyCode) {
                  case 37:
                    this.show("previous");
                    break;

                  case 39:
                    this.show("next");
                    break;
                }
            }
        }, {
            name: "beforeitemshow",
            handler: function(e) {
                if (this.isToggled()) {
                    return;
                }
                this.preventCatch = true;
                e.preventDefault();
                this.toggleNow(this.$el, true);
                this.animation = Animations$1["scale"];
                removeClass(e.target, this.clsActive);
                this.stack.splice(1, 0, this.index);
            }
        }, {
            name: "itemshow",
            handler: function(ref) {
                var this$1 = this;
                var target = ref.target;
                var i = index(target);
                var ref$1 = this.getItem(i);
                var caption = ref$1.caption;
                css(this.caption, "display", caption ? "" : "none");
                html(this.caption, caption);
                for (var j = 0; j <= this.preload; j++) {
                    this$1.loadItem(this$1.getIndex(i + j));
                    this$1.loadItem(this$1.getIndex(i - j));
                }
            }
        }, {
            name: "itemshown",
            handler: function() {
                this.preventCatch = false;
            }
        }, {
            name: "itemload",
            handler: function(_, item) {
                var this$1 = this;
                var source = item.source;
                var type = item.type;
                var alt = item.alt;
                this.setItem(item, "<span uk-spinner></span>");
                if (!source) {
                    return;
                }
                var matches$$1;
                if (type === "image" || source.match(/\.(jp(e)?g|png|gif|svg)($|\?)/i)) {
                    getImage(source).then(function(img) {
                        return this$1.setItem(item, '<img width="' + img.width + '" height="' + img.height + '" src="' + source + '" alt="' + (alt ? alt : "") + '">');
                    }, function() {
                        return this$1.setError(item);
                    });
                } else if (type === "video" || source.match(/\.(mp4|webm|ogv)($|\?)/i)) {
                    var video = $("<video controls playsinline" + (item.poster ? ' poster="' + item.poster + '"' : "") + ' uk-video="' + this.videoAutoplay + '"></video>');
                    attr(video, "src", source);
                    on(video, "error", function() {
                        return this$1.setError(item);
                    });
                    on(video, "loadedmetadata", function() {
                        attr(video, {
                            width: video.videoWidth,
                            height: video.videoHeight
                        });
                        this$1.setItem(item, video);
                    });
                } else if (type === "iframe" || source.match(/\.(html|php)($|\?)/i)) {
                    this.setItem(item, '<iframe class="uk-lightbox-iframe" src="' + source + '" frameborder="0" allowfullscreen></iframe>');
                } else if (matches$$1 = source.match(/\/\/.*?youtube(-nocookie)?\.[a-z]+\/watch\?v=([^&\s]+)/) || source.match(/()youtu\.be\/(.*)/)) {
                    var id = matches$$1[2];
                    var setIframe = function(width$$1, height$$1) {
                        if (width$$1 === void 0) width$$1 = 640;
                        if (height$$1 === void 0) height$$1 = 450;
                        return this$1.setItem(item, getIframe("https://www.youtube" + (matches$$1[1] || "") + ".com/embed/" + id, width$$1, height$$1, this$1.videoAutoplay));
                    };
                    getImage("https://img.youtube.com/vi/" + id + "/maxresdefault.jpg").then(function(ref) {
                        var width$$1 = ref.width;
                        var height$$1 = ref.height;
                        if (width$$1 === 120 && height$$1 === 90) {
                            getImage("https://img.youtube.com/vi/" + id + "/0.jpg").then(function(ref) {
                                var width$$1 = ref.width;
                                var height$$1 = ref.height;
                                return setIframe(width$$1, height$$1);
                            }, setIframe);
                        } else {
                            setIframe(width$$1, height$$1);
                        }
                    }, setIframe);
                } else if (matches$$1 = source.match(/(\/\/.*?)vimeo\.[a-z]+\/([0-9]+).*?/)) {
                    ajax("https://vimeo.com/api/oembed.json?maxwidth=1920&url=" + encodeURI(source), {
                        responseType: "json",
                        withCredentials: false
                    }).then(function(ref) {
                        var ref_response = ref.response;
                        var height$$1 = ref_response.height;
                        var width$$1 = ref_response.width;
                        return this$1.setItem(item, getIframe("https://player.vimeo.com/video/" + matches$$1[2], width$$1, height$$1, this$1.videoAutoplay));
                    }, function() {
                        return this$1.setError(item);
                    });
                }
            }
        } ],
        methods: {
            loadItem: function(index$$1) {
                if (index$$1 === void 0) index$$1 = this.index;
                var item = this.getItem(index$$1);
                if (item.content) {
                    return;
                }
                trigger(this.$el, "itemload", [ item ]);
            },
            getItem: function(index$$1) {
                if (index$$1 === void 0) index$$1 = this.index;
                return this.items[index$$1] || {};
            },
            setItem: function(item, content) {
                assign(item, {
                    content: content
                });
                var el = html(this.slides[this.items.indexOf(item)], content);
                trigger(this.$el, "itemloaded", [ this, el ]);
                this.$update(el);
            },
            setError: function(item) {
                this.setItem(item, '<span uk-icon="icon: bolt; ratio: 2"></span>');
            },
            showControls: function() {
                clearTimeout(this.controlsTimer);
                this.controlsTimer = setTimeout(this.hideControls, this.delayControls);
                addClass(this.$el, "uk-active", "uk-transition-active");
            },
            hideControls: function() {
                removeClass(this.$el, "uk-active", "uk-transition-active");
            }
        }
    };
    function getIframe(src, width$$1, height$$1, autoplay) {
        return '<iframe src="' + src + '" width="' + width$$1 + '" height="' + height$$1 + '" style="max-width: 100%; box-sizing: border-box;" frameborder="0" allowfullscreen uk-video="autoplay: ' + autoplay + '" uk-responsive></iframe>';
    }
    var Lightbox = {
        install: install$2,
        props: {
            toggle: String
        },
        data: {
            toggle: "a"
        },
        computed: {
            toggles: function(ref, $el) {
                var toggle = ref.toggle;
                return $$(toggle, $el);
            }
        },
        disconnected: function() {
            this._destroy();
        },
        events: [ {
            name: "click",
            delegate: function() {
                return this.toggle + ":not(.uk-disabled)";
            },
            handler: function(e) {
                e.preventDefault();
                e.current.blur();
                this.show(index(this.toggles, e.current));
            }
        } ],
        update: function(data$$1) {
            data$$1.toggles = this.panel && data$$1.toggles || this.toggles;
            if (!this.panel || isEqualList$1(data$$1.toggles, this.toggles)) {
                return;
            }
            data$$1.toggles = this.toggles;
            this._destroy();
            this._init();
        },
        methods: {
            _init: function() {
                return this.panel = this.panel || this.$create("lightboxPanel", assign({}, this.$props, {
                    items: this.toggles.reduce(function(items, el) {
                        items.push([ "href", "caption", "type", "poster", "alt" ].reduce(function(obj, attr$$1) {
                            obj[attr$$1 === "href" ? "source" : attr$$1] = data(el, attr$$1);
                            return obj;
                        }, {}));
                        return items;
                    }, [])
                }));
            },
            _destroy: function() {
                if (this.panel) {
                    this.panel.$destroy(true);
                    this.panel = null;
                }
            },
            show: function(index$$1) {
                if (!this.panel) {
                    this._init();
                }
                return this.panel.show(index$$1);
            },
            hide: function() {
                return this.panel && this.panel.hide();
            }
        }
    };
    function isEqualList$1(listA, listB) {
        return listA.length === listB.length && listA.every(function(el, i) {
            return el === listB[i];
        });
    }
    function install$2(UIkit, Lightbox) {
        if (!UIkit.lightboxPanel) {
            UIkit.component("lightboxPanel", LightboxPanel);
        }
        assign(Lightbox.props, UIkit.component("lightboxPanel").options.props);
    }
    var obj;
    var containers = {};
    var Notification = {
        functional: true,
        args: [ "message", "status" ],
        data: {
            message: "",
            status: "",
            timeout: 5e3,
            group: null,
            pos: "top-center",
            clsClose: "uk-notification-close",
            clsMsg: "uk-notification-message"
        },
        install: install$3,
        created: function() {
            if (!containers[this.pos]) {
                containers[this.pos] = append(this.$container, '<div class="uk-notification uk-notification-' + this.pos + '"></div>');
            }
            var container = css(containers[this.pos], "display", "block");
            this.$mount(append(container, '<div class="' + this.clsMsg + (this.status ? " " + this.clsMsg + "-" + this.status : "") + '"> <a href="#" class="' + this.clsClose + '" data-uk-close></a> <div>' + this.message + "</div> </div>"));
        },
        connected: function() {
            var this$1 = this;
            var marginBottom = toFloat(css(this.$el, "marginBottom"));
            Transition.start(css(this.$el, {
                opacity: 0,
                marginTop: -this.$el.offsetHeight,
                marginBottom: 0
            }), {
                opacity: 1,
                marginTop: 0,
                marginBottom: marginBottom
            }).then(function() {
                if (this$1.timeout) {
                    this$1.timer = setTimeout(this$1.close, this$1.timeout);
                }
            });
        },
        events: (obj = {
            click: function(e) {
                if (closest(e.target, 'a[href="#"]')) {
                    e.preventDefault();
                }
                this.close();
            }
        }, obj[pointerEnter] = function() {
            if (this.timer) {
                clearTimeout(this.timer);
            }
        }, obj[pointerLeave] = function() {
            if (this.timeout) {
                this.timer = setTimeout(this.close, this.timeout);
            }
        }, obj),
        methods: {
            close: function(immediate) {
                var this$1 = this;
                var removeFn = function() {
                    trigger(this$1.$el, "close", [ this$1 ]);
                    remove(this$1.$el);
                    if (!containers[this$1.pos].children.length) {
                        css(containers[this$1.pos], "display", "none");
                    }
                };
                if (this.timer) {
                    clearTimeout(this.timer);
                }
                if (immediate) {
                    removeFn();
                } else {
                    Transition.start(this.$el, {
                        opacity: 0,
                        marginTop: -this.$el.offsetHeight,
                        marginBottom: 0
                    }).then(removeFn);
                }
            }
        }
    };
    function install$3(UIkit) {
        UIkit.notification.closeAll = function(group, immediate) {
            apply(document.body, function(el) {
                var notification = UIkit.getComponent(el, "notification");
                if (notification && (!group || group === notification.group)) {
                    notification.close(immediate);
                }
            });
        };
    }
    var props = [ "x", "y", "bgx", "bgy", "rotate", "scale", "color", "backgroundColor", "borderColor", "opacity", "blur", "hue", "grayscale", "invert", "saturate", "sepia", "fopacity" ];
    var Parallax = {
        mixins: [ Media ],
        props: props.reduce(function(props, prop) {
            props[prop] = "list";
            return props;
        }, {}),
        data: props.reduce(function(data$$1, prop) {
            data$$1[prop] = undefined;
            return data$$1;
        }, {}),
        computed: {
            props: function(properties, $el) {
                var this$1 = this;
                return props.reduce(function(props, prop) {
                    if (isUndefined(properties[prop])) {
                        return props;
                    }
                    var isColor = prop.match(/color/i);
                    var isCssProp = isColor || prop === "opacity";
                    var pos, bgPos, diff;
                    var steps = properties[prop].slice(0);
                    if (isCssProp) {
                        css($el, prop, "");
                    }
                    if (steps.length < 2) {
                        steps.unshift((prop === "scale" ? 1 : isCssProp ? css($el, prop) : 0) || 0);
                    }
                    var unit = includes(steps.join(""), "%") ? "%" : "px";
                    if (isColor) {
                        var ref = $el.style;
                        var color = ref.color;
                        steps = steps.map(function(step) {
                            return parseColor($el, step);
                        });
                        $el.style.color = color;
                    } else {
                        steps = steps.map(toFloat);
                    }
                    if (prop.match(/^bg/)) {
                        css($el, "background-position-" + prop[2], "");
                        bgPos = css($el, "backgroundPosition").split(" ")[prop[2] === "x" ? 0 : 1];
                        if (this$1.covers) {
                            var min = Math.min.apply(Math, steps);
                            var max = Math.max.apply(Math, steps);
                            var down = steps.indexOf(min) < steps.indexOf(max);
                            diff = max - min;
                            steps = steps.map(function(step) {
                                return step - (down ? min : max);
                            });
                            pos = (down ? -diff : 0) + "px";
                        } else {
                            pos = bgPos;
                        }
                    }
                    props[prop] = {
                        steps: steps,
                        unit: unit,
                        pos: pos,
                        bgPos: bgPos,
                        diff: diff
                    };
                    return props;
                }, {});
            },
            bgProps: function() {
                var this$1 = this;
                return [ "bgx", "bgy" ].filter(function(bg) {
                    return bg in this$1.props;
                });
            },
            covers: function(_, $el) {
                return covers($el);
            }
        },
        disconnected: function() {
            delete this._image;
        },
        update: {
            read: function(data$$1) {
                var this$1 = this;
                data$$1.active = this.matchMedia;
                data$$1.dimEl = {
                    width: this.$el.offsetWidth,
                    height: this.$el.offsetHeight
                };
                if ("image" in data$$1 || !this.covers || !this.bgProps.length) {
                    return;
                }
                var src = css(this.$el, "backgroundImage").replace(/^none|url\(["']?(.+?)["']?\)$/, "$1");
                if (!src) {
                    return;
                }
                var img = new Image();
                img.src = src;
                data$$1.image = img;
                if (!img.naturalWidth) {
                    img.onload = function() {
                        return this$1.$emit();
                    };
                }
            },
            write: function(ref) {
                var this$1 = this;
                var dimEl = ref.dimEl;
                var image = ref.image;
                var active = ref.active;
                if (!image || !image.naturalWidth) {
                    return;
                }
                if (!active) {
                    css(this.$el, {
                        backgroundSize: "",
                        backgroundRepeat: ""
                    });
                    return;
                }
                var imageDim = {
                    width: image.naturalWidth,
                    height: image.naturalHeight
                };
                var dim = Dimensions.cover(imageDim, dimEl);
                this.bgProps.forEach(function(prop) {
                    var ref = this$1.props[prop];
                    var diff = ref.diff;
                    var bgPos = ref.bgPos;
                    var steps = ref.steps;
                    var attr$$1 = prop === "bgy" ? "height" : "width";
                    var span = dim[attr$$1] - dimEl[attr$$1];
                    if (!bgPos.match(/%$|0px/)) {
                        return;
                    }
                    if (span < diff) {
                        dimEl[attr$$1] = dim[attr$$1] + diff - span;
                    } else if (span > diff) {
                        var bgPosFloat = parseFloat(bgPos);
                        if (bgPosFloat) {
                            this$1.props[prop].steps = steps.map(function(step) {
                                return step - (span - diff) / (100 / bgPosFloat);
                            });
                        }
                    }
                    dim = Dimensions.cover(imageDim, dimEl);
                });
                css(this.$el, {
                    backgroundSize: dim.width + "px " + dim.height + "px",
                    backgroundRepeat: "no-repeat"
                });
            },
            events: [ "load", "resize" ]
        },
        methods: {
            reset: function() {
                var this$1 = this;
                each(this.getCss(0), function(_, prop) {
                    return css(this$1.$el, prop, "");
                });
            },
            getCss: function(percent) {
                var ref = this;
                var props = ref.props;
                var translated = false;
                return Object.keys(props).reduce(function(css$$1, prop) {
                    var ref = props[prop];
                    var steps = ref.steps;
                    var unit = ref.unit;
                    var pos = ref.pos;
                    var value = getValue(steps, percent);
                    switch (prop) {
                      case "x":
                      case "y":
                        if (translated) {
                            break;
                        }
                        var ref$1 = [ "x", "y" ].map(function(dir) {
                            return prop === dir ? toFloat(value).toFixed(0) + unit : props[dir] ? getValue(props[dir].steps, percent, 0) + props[dir].unit : 0;
                        });
                        var x = ref$1[0];
                        var y = ref$1[1];
                        translated = css$$1.transform += " translate3d(" + x + ", " + y + ", 0)";
                        break;

                      case "rotate":
                        css$$1.transform += " rotate(" + value + "deg)";
                        break;

                      case "scale":
                        css$$1.transform += " scale(" + value + ")";
                        break;

                      case "bgy":
                      case "bgx":
                        css$$1["background-position-" + prop[2]] = "calc(" + pos + " + " + (value + unit) + ")";
                        break;

                      case "color":
                      case "backgroundColor":
                      case "borderColor":
                        var ref$2 = getStep(steps, percent);
                        var start = ref$2[0];
                        var end = ref$2[1];
                        var p = ref$2[2];
                        css$$1[prop] = "rgba(" + start.map(function(value, i) {
                            value = value + p * (end[i] - value);
                            return i === 3 ? toFloat(value) : parseInt(value, 10);
                        }).join(",") + ")";
                        break;

                      case "blur":
                        css$$1.filter += " blur(" + value + "px)";
                        break;

                      case "hue":
                        css$$1.filter += " hue-rotate(" + value + "deg)";
                        break;

                      case "fopacity":
                        css$$1.filter += " opacity(" + value + "%)";
                        break;

                      case "grayscale":
                      case "invert":
                      case "saturate":
                      case "sepia":
                        css$$1.filter += " " + prop + "(" + value + "%)";
                        break;

                      default:
                        css$$1[prop] = value;
                    }
                    return css$$1;
                }, {
                    transform: "",
                    filter: ""
                });
            }
        }
    };
    function parseColor(el, color) {
        return css(css(el, "color", color), "color").split(/[(),]/g).slice(1, -1).concat(1).slice(0, 4).map(function(n) {
            return toFloat(n);
        });
    }
    function getStep(steps, percent) {
        var count = steps.length - 1;
        var index$$1 = Math.min(Math.floor(count * percent), count - 1);
        var step = steps.slice(index$$1, index$$1 + 2);
        step.push(percent === 1 ? 1 : percent % (1 / count) * count);
        return step;
    }
    function getValue(steps, percent, digits) {
        if (digits === void 0) digits = 2;
        var ref = getStep(steps, percent);
        var start = ref[0];
        var end = ref[1];
        var p = ref[2];
        return (isNumber(start) ? start + Math.abs(start - end) * p * (start < end ? 1 : -1) : +end).toFixed(digits);
    }
    function covers(el) {
        var ref = el.style;
        var backgroundSize = ref.backgroundSize;
        var covers = css(css(el, "backgroundSize", ""), "backgroundSize") === "cover";
        el.style.backgroundSize = backgroundSize;
        return covers;
    }
    var Parallax$1 = {
        mixins: [ Parallax ],
        props: {
            target: String,
            viewport: Number,
            easing: Number
        },
        data: {
            target: false,
            viewport: 1,
            easing: 1
        },
        computed: {
            target: function(ref, $el) {
                var target = ref.target;
                return target && query(target, $el) || $el;
            }
        },
        update: {
            read: function(ref, ref$1) {
                var percent = ref.percent;
                var active = ref.active;
                var type = ref$1.type;
                if (type !== "scroll") {
                    percent = false;
                }
                if (!active) {
                    return;
                }
                var prev = percent;
                percent = ease$1(scrolledOver(this.target) / (this.viewport || 1), this.easing);
                return {
                    percent: percent,
                    style: prev !== percent ? this.getCss(percent) : false
                };
            },
            write: function(ref) {
                var style = ref.style;
                var active = ref.active;
                if (!active) {
                    this.reset();
                    return;
                }
                style && css(this.$el, style);
            },
            events: [ "scroll", "load", "resize" ]
        }
    };
    function ease$1(percent, easing) {
        return clamp(percent * (1 - (easing - easing * percent)));
    }
    var SliderReactive = {
        update: {
            write: function() {
                if (this.stack.length || this.dragging) {
                    return;
                }
                var index$$1 = this.getValidIndex();
                delete this.index;
                removeClass(this.slides, this.clsActive, this.clsActivated);
                this.show(index$$1);
            },
            events: [ "load", "resize" ]
        }
    };
    function Transitioner$1(prev, next, dir, ref) {
        var center = ref.center;
        var easing = ref.easing;
        var list = ref.list;
        var deferred = new Deferred();
        var from = prev ? getLeft(prev, list, center) : getLeft(next, list, center) + bounds(next).width * dir;
        var to = next ? getLeft(next, list, center) : from + bounds(prev).width * dir * (isRtl ? -1 : 1);
        return {
            dir: dir,
            show: function(duration, percent, linear) {
                if (percent === void 0) percent = 0;
                var timing = linear ? "linear" : easing;
                duration -= Math.round(duration * clamp(percent, -1, 1));
                this.translate(percent);
                prev && this.updateTranslates();
                percent = prev ? percent : clamp(percent, 0, 1);
                triggerUpdate$1(this.getItemIn(), "itemin", {
                    percent: percent,
                    duration: duration,
                    timing: timing,
                    dir: dir
                });
                prev && triggerUpdate$1(this.getItemIn(true), "itemout", {
                    percent: 1 - percent,
                    duration: duration,
                    timing: timing,
                    dir: dir
                });
                Transition.start(list, {
                    transform: translate(-to * (isRtl ? -1 : 1), "px")
                }, duration, timing).then(deferred.resolve, noop);
                return deferred.promise;
            },
            stop: function() {
                return Transition.stop(list);
            },
            cancel: function() {
                Transition.cancel(list);
            },
            reset: function() {
                css(list, "transform", "");
            },
            forward: function(duration, percent) {
                if (percent === void 0) percent = this.percent();
                Transition.cancel(list);
                return this.show(duration, percent, true);
            },
            translate: function(percent) {
                var distance = this.getDistance() * dir * (isRtl ? -1 : 1);
                css(list, "transform", translate(clamp(-to + (distance - distance * percent), -getWidth(list), bounds(list).width) * (isRtl ? -1 : 1), "px"));
                this.updateTranslates();
                if (prev) {
                    percent = clamp(percent, -1, 1);
                    triggerUpdate$1(this.getItemIn(), "itemtranslatein", {
                        percent: percent,
                        dir: dir
                    });
                    triggerUpdate$1(this.getItemIn(true), "itemtranslateout", {
                        percent: 1 - percent,
                        dir: dir
                    });
                }
            },
            percent: function() {
                return Math.abs((css(list, "transform").split(",")[4] * (isRtl ? -1 : 1) + from) / (to - from));
            },
            getDistance: function() {
                return Math.abs(to - from);
            },
            getItemIn: function(out) {
                if (out === void 0) out = false;
                var actives = this.getActives();
                var all = sortBy(slides(list), "offsetLeft");
                var i = index(all, actives[dir * (out ? -1 : 1) > 0 ? actives.length - 1 : 0]);
                return ~i && all[i + (prev && !out ? dir : 0)];
            },
            getActives: function() {
                var left = getLeft(prev || next, list, center);
                return sortBy(slides(list).filter(function(slide) {
                    var slideLeft = getElLeft(slide, list);
                    return slideLeft >= left && slideLeft + bounds(slide).width <= bounds(list).width + left;
                }), "offsetLeft");
            },
            updateTranslates: function() {
                var actives = this.getActives();
                slides(list).forEach(function(slide) {
                    var isActive = includes(actives, slide);
                    triggerUpdate$1(slide, "itemtranslate" + (isActive ? "in" : "out"), {
                        percent: isActive ? 1 : 0,
                        dir: slide.offsetLeft <= next.offsetLeft ? 1 : -1
                    });
                });
            }
        };
    }
    function getLeft(el, list, center) {
        var left = getElLeft(el, list);
        return center ? left - centerEl(el, list) : Math.min(left, getMax(list));
    }
    function getMax(list) {
        return Math.max(0, getWidth(list) - bounds(list).width);
    }
    function getWidth(list) {
        return slides(list).reduce(function(right, el) {
            return bounds(el).width + right;
        }, 0);
    }
    function getMaxWidth(list) {
        return slides(list).reduce(function(right, el) {
            return Math.max(right, bounds(el).width);
        }, 0);
    }
    function centerEl(el, list) {
        return bounds(list).width / 2 - bounds(el).width / 2;
    }
    function getElLeft(el, list) {
        return (position(el).left + (isRtl ? bounds(el).width - bounds(list).width : 0)) * (isRtl ? -1 : 1);
    }
    function bounds(el) {
        return el.getBoundingClientRect();
    }
    function triggerUpdate$1(el, type, data$$1) {
        trigger(el, createEvent(type, false, false, data$$1));
    }
    function slides(list) {
        return toNodes(list.children);
    }
    var Slider$1 = {
        mixins: [ Class, Slider, SliderReactive ],
        props: {
            center: Boolean,
            sets: Boolean
        },
        data: {
            center: false,
            sets: false,
            attrItem: "uk-slider-item",
            selList: ".uk-slider-items",
            selNav: ".uk-slider-nav",
            clsContainer: "uk-slider-container",
            Transitioner: Transitioner$1
        },
        computed: {
            avgWidth: function() {
                return getWidth(this.list) / this.length;
            },
            finite: function(ref) {
                var finite = ref.finite;
                return finite || getWidth(this.list) < bounds(this.list).width + getMaxWidth(this.list) + this.center;
            },
            maxIndex: function() {
                var this$1 = this;
                if (!this.finite || this.center && !this.sets) {
                    return this.length - 1;
                }
                if (this.center) {
                    return this.sets[this.sets.length - 1];
                }
                css(this.slides, "order", "");
                var max = getMax(this.list);
                var i = this.length;
                while (i--) {
                    if (getElLeft(this$1.list.children[i], this$1.list) < max) {
                        return Math.min(i + 1, this$1.length - 1);
                    }
                }
                return 0;
            },
            sets: function(ref) {
                var this$1 = this;
                var sets = ref.sets;
                var width$$1 = bounds(this.list).width / (this.center ? 2 : 1);
                var left = 0;
                var leftCenter = width$$1;
                var slideLeft = 0;
                sets = sets && this.slides.reduce(function(sets, slide, i) {
                    var ref = bounds(slide);
                    var slideWidth = ref.width;
                    var slideRight = slideLeft + slideWidth;
                    if (slideRight > left) {
                        if (!this$1.center && i > this$1.maxIndex) {
                            i = this$1.maxIndex;
                        }
                        if (!includes(sets, i)) {
                            var cmp = this$1.slides[i + 1];
                            if (this$1.center && cmp && slideWidth < leftCenter - bounds(cmp).width / 2) {
                                leftCenter -= slideWidth;
                            } else {
                                leftCenter = width$$1;
                                sets.push(i);
                                left = slideLeft + width$$1 + (this$1.center ? slideWidth / 2 : 0);
                            }
                        }
                    }
                    slideLeft += slideWidth;
                    return sets;
                }, []);
                return sets && sets.length && sets;
            },
            transitionOptions: function() {
                return {
                    center: this.center,
                    list: this.list
                };
            }
        },
        connected: function() {
            toggleClass(this.$el, this.clsContainer, !$("." + this.clsContainer, this.$el));
        },
        update: {
            write: function() {
                var this$1 = this;
                $$("[" + this.attrItem + "],[data-" + this.attrItem + "]", this.$el).forEach(function(el) {
                    var index$$1 = data(el, this$1.attrItem);
                    this$1.maxIndex && toggleClass(el, "uk-hidden", isNumeric(index$$1) && (this$1.sets && !includes(this$1.sets, toFloat(index$$1)) || index$$1 > this$1.maxIndex));
                });
            },
            events: [ "load", "resize" ]
        },
        events: {
            beforeitemshow: function(e) {
                var this$1 = this;
                if (!this.dragging && this.sets && this.stack.length < 2 && !includes(this.sets, this.index)) {
                    this.index = this.getValidIndex();
                }
                var diff = Math.abs(this.index - this.prevIndex + (this.dir > 0 && this.index < this.prevIndex || this.dir < 0 && this.index > this.prevIndex ? (this.maxIndex + 1) * this.dir : 0));
                if (!this.dragging && diff > 1) {
                    for (var i = 0; i < diff; i++) {
                        this$1.stack.splice(1, 0, this$1.dir > 0 ? "next" : "previous");
                    }
                    e.preventDefault();
                    return;
                }
                this.duration = speedUp(this.avgWidth / this.velocity) * (bounds(this.dir < 0 || !this.slides[this.prevIndex] ? this.slides[this.index] : this.slides[this.prevIndex]).width / this.avgWidth);
                this.reorder();
            },
            itemshow: function() {
                !isUndefined(this.prevIndex) && addClass(this._getTransitioner().getItemIn(), this.clsActive);
            },
            itemshown: function() {
                var this$1 = this;
                var actives = this._getTransitioner(this.index).getActives();
                this.slides.forEach(function(slide) {
                    return toggleClass(slide, this$1.clsActive, includes(actives, slide));
                });
                (!this.sets || includes(this.sets, toFloat(this.index))) && this.slides.forEach(function(slide) {
                    return toggleClass(slide, this$1.clsActivated, includes(actives, slide));
                });
            }
        },
        methods: {
            reorder: function() {
                var this$1 = this;
                css(this.slides, "order", "");
                if (this.finite) {
                    return;
                }
                var index$$1 = this.dir > 0 && this.slides[this.prevIndex] ? this.prevIndex : this.index;
                this.slides.forEach(function(slide, i) {
                    return css(slide, "order", this$1.dir > 0 && i < index$$1 ? 1 : this$1.dir < 0 && i >= this$1.index ? -1 : "");
                });
                if (!this.center) {
                    return;
                }
                var next = this.slides[index$$1];
                var width$$1 = bounds(this.list).width / 2 - bounds(next).width / 2;
                var j = 0;
                while (width$$1 > 0) {
                    var slideIndex = this$1.getIndex(--j + index$$1, index$$1);
                    var slide = this$1.slides[slideIndex];
                    css(slide, "order", slideIndex > index$$1 ? -2 : -1);
                    width$$1 -= bounds(slide).width;
                }
            },
            getValidIndex: function(index$$1, prevIndex) {
                var this$1 = this;
                if (index$$1 === void 0) index$$1 = this.index;
                if (prevIndex === void 0) prevIndex = this.prevIndex;
                index$$1 = this.getIndex(index$$1, prevIndex);
                if (!this.sets) {
                    return index$$1;
                }
                var prev;
                do {
                    if (includes(this$1.sets, index$$1)) {
                        return index$$1;
                    }
                    prev = index$$1;
                    index$$1 = this$1.getIndex(index$$1 + this$1.dir, prevIndex);
                } while (index$$1 !== prev);
                return index$$1;
            }
        }
    };
    var SliderParallax = {
        mixins: [ Parallax ],
        data: {
            selItem: "!li"
        },
        computed: {
            item: function(ref, $el) {
                var selItem = ref.selItem;
                return query(selItem, $el);
            }
        },
        events: [ {
            name: "itemshown",
            self: true,
            el: function() {
                return this.item;
            },
            handler: function() {
                css(this.$el, this.getCss(.5));
            }
        }, {
            name: "itemin itemout",
            self: true,
            el: function() {
                return this.item;
            },
            handler: function(ref) {
                var type = ref.type;
                var ref_detail = ref.detail;
                var percent = ref_detail.percent;
                var duration = ref_detail.duration;
                var timing = ref_detail.timing;
                var dir = ref_detail.dir;
                Transition.cancel(this.$el);
                css(this.$el, this.getCss(getCurrent(type, dir, percent)));
                Transition.start(this.$el, this.getCss(isIn(type) ? .5 : dir > 0 ? 1 : 0), duration, timing).catch(noop);
            }
        }, {
            name: "transitioncanceled transitionend",
            self: true,
            el: function() {
                return this.item;
            },
            handler: function() {
                Transition.cancel(this.$el);
            }
        }, {
            name: "itemtranslatein itemtranslateout",
            self: true,
            el: function() {
                return this.item;
            },
            handler: function(ref) {
                var type = ref.type;
                var ref_detail = ref.detail;
                var percent = ref_detail.percent;
                var dir = ref_detail.dir;
                Transition.cancel(this.$el);
                css(this.$el, this.getCss(getCurrent(type, dir, percent)));
            }
        } ]
    };
    function isIn(type) {
        return endsWith(type, "in");
    }
    function getCurrent(type, dir, percent) {
        percent /= 2;
        return !isIn(type) ? dir < 0 ? percent : 1 - percent : dir < 0 ? 1 - percent : percent;
    }
    var Animations$2 = assign({}, Animations, {
        fade: {
            show: function() {
                return [ {
                    opacity: 0,
                    zIndex: 0
                }, {
                    zIndex: -1
                } ];
            },
            percent: function(current) {
                return 1 - css(current, "opacity");
            },
            translate: function(percent) {
                return [ {
                    opacity: 1 - percent,
                    zIndex: 0
                }, {
                    zIndex: -1
                } ];
            }
        },
        scale: {
            show: function() {
                return [ {
                    opacity: 0,
                    transform: scale3d(1 + .5),
                    zIndex: 0
                }, {
                    zIndex: -1
                } ];
            },
            percent: function(current) {
                return 1 - css(current, "opacity");
            },
            translate: function(percent) {
                return [ {
                    opacity: 1 - percent,
                    transform: scale3d(1 + .5 * percent),
                    zIndex: 0
                }, {
                    zIndex: -1
                } ];
            }
        },
        pull: {
            show: function(dir) {
                return dir < 0 ? [ {
                    transform: translate(30),
                    zIndex: -1
                }, {
                    transform: translate(),
                    zIndex: 0
                } ] : [ {
                    transform: translate(-100),
                    zIndex: 0
                }, {
                    transform: translate(),
                    zIndex: -1
                } ];
            },
            percent: function(current, next, dir) {
                return dir < 0 ? 1 - translated(next) : translated(current);
            },
            translate: function(percent, dir) {
                return dir < 0 ? [ {
                    transform: translate(30 * percent),
                    zIndex: -1
                }, {
                    transform: translate(-100 * (1 - percent)),
                    zIndex: 0
                } ] : [ {
                    transform: translate(-percent * 100),
                    zIndex: 0
                }, {
                    transform: translate(30 * (1 - percent)),
                    zIndex: -1
                } ];
            }
        },
        push: {
            show: function(dir) {
                return dir < 0 ? [ {
                    transform: translate(100),
                    zIndex: 0
                }, {
                    transform: translate(),
                    zIndex: -1
                } ] : [ {
                    transform: translate(-30),
                    zIndex: -1
                }, {
                    transform: translate(),
                    zIndex: 0
                } ];
            },
            percent: function(current, next, dir) {
                return dir > 0 ? 1 - translated(next) : translated(current);
            },
            translate: function(percent, dir) {
                return dir < 0 ? [ {
                    transform: translate(percent * 100),
                    zIndex: 0
                }, {
                    transform: translate(-30 * (1 - percent)),
                    zIndex: -1
                } ] : [ {
                    transform: translate(-30 * percent),
                    zIndex: -1
                }, {
                    transform: translate(100 * (1 - percent)),
                    zIndex: 0
                } ];
            }
        }
    });
    var Slideshow$1 = {
        mixins: [ Class, Slideshow, SliderReactive ],
        props: {
            ratio: String,
            minHeight: Boolean,
            maxHeight: Boolean
        },
        data: {
            ratio: "16:9",
            minHeight: false,
            maxHeight: false,
            selList: ".uk-slideshow-items",
            attrItem: "uk-slideshow-item",
            selNav: ".uk-slideshow-nav",
            Animations: Animations$2
        },
        update: {
            read: function() {
                var ref = this.ratio.split(":").map(Number);
                var width$$1 = ref[0];
                var height$$1 = ref[1];
                height$$1 = height$$1 * this.list.offsetWidth / width$$1;
                if (this.minHeight) {
                    height$$1 = Math.max(this.minHeight, height$$1);
                }
                if (this.maxHeight) {
                    height$$1 = Math.min(this.maxHeight, height$$1);
                }
                return {
                    height: height$$1 - boxModelAdjust(this.list, "content-box")
                };
            },
            write: function(ref) {
                var height$$1 = ref.height;
                css(this.list, "minHeight", height$$1);
            },
            events: [ "load", "resize" ]
        }
    };
    var obj$1;
    var Sortable = {
        mixins: [ Class, Animate ],
        props: {
            group: String,
            threshold: Number,
            clsItem: String,
            clsPlaceholder: String,
            clsDrag: String,
            clsDragState: String,
            clsBase: String,
            clsNoDrag: String,
            clsEmpty: String,
            clsCustom: String,
            handle: String
        },
        data: {
            group: false,
            threshold: 5,
            clsItem: "uk-sortable-item",
            clsPlaceholder: "uk-sortable-placeholder",
            clsDrag: "uk-sortable-drag",
            clsDragState: "uk-drag",
            clsBase: "uk-sortable",
            clsNoDrag: "uk-sortable-nodrag",
            clsEmpty: "uk-sortable-empty",
            clsCustom: "",
            handle: false
        },
        created: function() {
            var this$1 = this;
            [ "init", "start", "move", "end" ].forEach(function(key) {
                var fn = this$1[key];
                this$1[key] = function(e) {
                    this$1.scrollY = window.pageYOffset;
                    var ref = getPos$1(e);
                    var x = ref.x;
                    var y = ref.y;
                    this$1.pos = {
                        x: x,
                        y: y
                    };
                    fn(e);
                };
            });
        },
        events: (obj$1 = {}, obj$1[pointerDown] = "init", obj$1),
        update: {
            write: function() {
                if (this.clsEmpty) {
                    toggleClass(this.$el, this.clsEmpty, !this.$el.children.length);
                }
                css(this.handle ? $$(this.handle, this.$el) : this.$el.children, "touchAction", "none");
                if (!this.drag) {
                    return;
                }
                offset(this.drag, {
                    top: this.pos.y + this.origin.top,
                    left: this.pos.x + this.origin.left
                });
                var ref = offset(this.drag);
                var top = ref.top;
                var bottom = top + this.drag.offsetHeight;
                var scroll;
                if (top > 0 && top < this.scrollY) {
                    scroll = this.scrollY - 5;
                } else if (bottom < height(document) && bottom > height(window) + this.scrollY) {
                    scroll = this.scrollY + 5;
                }
                scroll && setTimeout(function() {
                    return scrollTop(window, scroll);
                }, 5);
            }
        },
        methods: {
            init: function(e) {
                var target = e.target;
                var button = e.button;
                var defaultPrevented = e.defaultPrevented;
                var ref = toNodes(this.$el.children).filter(function(el) {
                    return within(target, el);
                });
                var placeholder = ref[0];
                if (!placeholder || isInput(e.target) || this.handle && !within(target, this.handle) || button > 0 || within(target, "." + this.clsNoDrag) || defaultPrevented) {
                    return;
                }
                e.preventDefault();
                this.touched = [ this ];
                this.placeholder = placeholder;
                this.origin = assign({
                    target: target,
                    index: index(placeholder)
                }, this.pos);
                on(document, pointerMove, this.move);
                on(document, pointerUp, this.end);
                on(window, "scroll", this.scroll);
                if (!this.threshold) {
                    this.start(e);
                }
            },
            start: function(e) {
                this.drag = append(this.$container, this.placeholder.outerHTML.replace(/^<li/i, "<div").replace(/li>$/i, "div>"));
                css(this.drag, assign({
                    boxSizing: "border-box",
                    width: this.placeholder.offsetWidth,
                    height: this.placeholder.offsetHeight
                }, css(this.placeholder, [ "paddingLeft", "paddingRight", "paddingTop", "paddingBottom" ])));
                attr(this.drag, "uk-no-boot", "");
                addClass(this.drag, this.clsDrag, this.clsCustom);
                height(this.drag.firstElementChild, height(this.placeholder.firstElementChild));
                var ref = offset(this.placeholder);
                var left = ref.left;
                var top = ref.top;
                assign(this.origin, {
                    left: left - this.pos.x,
                    top: top - this.pos.y
                });
                addClass(this.placeholder, this.clsPlaceholder);
                addClass(this.$el.children, this.clsItem);
                addClass(document.documentElement, this.clsDragState);
                trigger(this.$el, "start", [ this, this.placeholder ]);
                this.move(e);
            },
            move: function(e) {
                if (!this.drag) {
                    if (Math.abs(this.pos.x - this.origin.x) > this.threshold || Math.abs(this.pos.y - this.origin.y) > this.threshold) {
                        this.start(e);
                    }
                    return;
                }
                this.$emit();
                var target = e.type === "mousemove" ? e.target : document.elementFromPoint(this.pos.x - document.body.scrollLeft, this.pos.y - document.body.scrollTop);
                var sortable = this.getSortable(target);
                var previous = this.getSortable(this.placeholder);
                var move = sortable !== previous;
                if (!sortable || within(target, this.placeholder) || move && (!sortable.group || sortable.group !== previous.group)) {
                    return;
                }
                target = sortable.$el === target.parentNode && target || toNodes(sortable.$el.children).filter(function(element) {
                    return within(target, element);
                })[0];
                if (move) {
                    previous.remove(this.placeholder);
                } else if (!target) {
                    return;
                }
                sortable.insert(this.placeholder, target);
                if (!includes(this.touched, sortable)) {
                    this.touched.push(sortable);
                }
            },
            scroll: function() {
                var scroll = window.pageYOffset;
                if (scroll !== this.scrollY) {
                    this.pos.y += scroll - this.scrollY;
                    this.scrollY = scroll;
                    this.$emit();
                }
            },
            end: function(e) {
                off(document, pointerMove, this.move);
                off(document, pointerUp, this.end);
                off(window, "scroll", this.scroll);
                if (!this.drag) {
                    if (e.type !== "mouseup" && within(e.target, "a[href]")) {
                        location.href = closest(e.target, "a[href]").href;
                    }
                    return;
                }
                preventClick();
                var sortable = this.getSortable(this.placeholder);
                if (this === sortable) {
                    if (this.origin.index !== index(this.placeholder)) {
                        trigger(this.$el, "moved", [ this, this.placeholder ]);
                    }
                } else {
                    trigger(sortable.$el, "added", [ sortable, this.placeholder ]);
                    trigger(this.$el, "removed", [ this, this.placeholder ]);
                }
                trigger(this.$el, "stop", [ this, this.placeholder ]);
                remove(this.drag);
                this.drag = null;
                var classes = this.touched.map(function(sortable) {
                    return sortable.clsPlaceholder + " " + sortable.clsItem;
                }).join(" ");
                this.touched.forEach(function(sortable) {
                    return removeClass(sortable.$el.children, classes);
                });
                removeClass(document.documentElement, this.clsDragState);
            },
            insert: function(element, target) {
                var this$1 = this;
                addClass(this.$el.children, this.clsItem);
                var insert = function() {
                    if (target) {
                        if (!within(element, this$1.$el) || isPredecessor(element, target)) {
                            before(target, element);
                        } else {
                            after(target, element);
                        }
                    } else {
                        append(this$1.$el, element);
                    }
                };
                if (this.animation) {
                    this.animate(insert);
                } else {
                    insert();
                }
            },
            remove: function(element) {
                if (!within(element, this.$el)) {
                    return;
                }
                if (this.animation) {
                    this.animate(function() {
                        return remove(element);
                    });
                } else {
                    remove(element);
                }
            },
            getSortable: function(element) {
                return element && (this.$getComponent(element, "sortable") || this.getSortable(element.parentNode));
            }
        }
    };
    function isPredecessor(element, target) {
        return element.parentNode === target.parentNode && index(element) > index(target);
    }
    var obj$2;
    var actives = [];
    var Tooltip = {
        mixins: [ Container, Togglable, Position ],
        args: "title",
        props: {
            delay: Number,
            title: String
        },
        data: {
            pos: "top",
            title: "",
            delay: 0,
            animation: [ "uk-animation-scale-up" ],
            duration: 100,
            cls: "uk-active",
            clsPos: "uk-tooltip"
        },
        beforeConnect: function() {
            this._hasTitle = hasAttr(this.$el, "title");
            attr(this.$el, {
                title: "",
                "aria-expanded": false
            });
        },
        disconnected: function() {
            this.hide();
            attr(this.$el, {
                title: this._hasTitle ? this.title : null,
                "aria-expanded": null
            });
        },
        methods: {
            show: function() {
                var this$1 = this;
                if (includes(actives, this)) {
                    return;
                }
                actives.forEach(function(active) {
                    return active.hide();
                });
                actives.push(this);
                this._unbind = on(document, "click", function(e) {
                    return !within(e.target, this$1.$el) && this$1.hide();
                });
                clearTimeout(this.showTimer);
                this.showTimer = setTimeout(function() {
                    this$1._show();
                    this$1.hideTimer = setInterval(function() {
                        if (!isVisible(this$1.$el)) {
                            this$1.hide();
                        }
                    }, 150);
                }, this.delay);
            },
            hide: function() {
                var index$$1 = actives.indexOf(this);
                if (!~index$$1 || matches(this.$el, "input") && this.$el === document.activeElement) {
                    return;
                }
                actives.splice(index$$1, 1);
                clearTimeout(this.showTimer);
                clearInterval(this.hideTimer);
                attr(this.$el, "aria-expanded", false);
                this.toggleElement(this.tooltip, false);
                this.tooltip && remove(this.tooltip);
                this.tooltip = false;
                this._unbind();
            },
            _show: function() {
                this.tooltip = append(this.container, '<div class="' + this.clsPos + '" aria-expanded="true" aria-hidden> <div class="' + this.clsPos + '-inner">' + this.title + "</div> </div>");
                this.positionAt(this.tooltip, this.$el);
                this.origin = this.getAxis() === "y" ? flipPosition(this.dir) + "-" + this.align : this.align + "-" + flipPosition(this.dir);
                this.toggleElement(this.tooltip, true);
            }
        },
        events: (obj$2 = {}, obj$2["focus " + pointerEnter + " " + pointerDown] = function(e) {
            if (e.type !== pointerDown || !isTouch(e)) {
                this.show();
            }
        }, obj$2.blur = "hide", obj$2[pointerLeave] = function(e) {
            if (!isTouch(e)) {
                this.hide();
            }
        }, obj$2)
    };
    var Upload = {
        props: {
            allow: String,
            clsDragover: String,
            concurrent: Number,
            maxSize: Number,
            method: String,
            mime: String,
            msgInvalidMime: String,
            msgInvalidName: String,
            msgInvalidSize: String,
            multiple: Boolean,
            name: String,
            params: Object,
            type: String,
            url: String
        },
        data: {
            allow: false,
            clsDragover: "uk-dragover",
            concurrent: 1,
            maxSize: 0,
            method: "POST",
            mime: false,
            msgInvalidMime: "Invalid File Type: %s",
            msgInvalidName: "Invalid File Name: %s",
            msgInvalidSize: "Invalid File Size: %s Kilobytes Max",
            multiple: false,
            name: "files[]",
            params: {},
            type: "",
            url: "",
            abort: noop,
            beforeAll: noop,
            beforeSend: noop,
            complete: noop,
            completeAll: noop,
            error: noop,
            fail: noop,
            load: noop,
            loadEnd: noop,
            loadStart: noop,
            progress: noop
        },
        events: {
            change: function(e) {
                if (!matches(e.target, 'input[type="file"]')) {
                    return;
                }
                e.preventDefault();
                if (e.target.files) {
                    this.upload(e.target.files);
                }
                e.target.value = "";
            },
            drop: function(e) {
                stop(e);
                var transfer = e.dataTransfer;
                if (!transfer || !transfer.files) {
                    return;
                }
                removeClass(this.$el, this.clsDragover);
                this.upload(transfer.files);
            },
            dragenter: function(e) {
                stop(e);
            },
            dragover: function(e) {
                stop(e);
                addClass(this.$el, this.clsDragover);
            },
            dragleave: function(e) {
                stop(e);
                removeClass(this.$el, this.clsDragover);
            }
        },
        methods: {
            upload: function(files) {
                var this$1 = this;
                if (!files.length) {
                    return;
                }
                trigger(this.$el, "upload", [ files ]);
                for (var i = 0; i < files.length; i++) {
                    if (this$1.maxSize && this$1.maxSize * 1e3 < files[i].size) {
                        this$1.fail(this$1.msgInvalidSize.replace("%s", this$1.maxSize));
                        return;
                    }
                    if (this$1.allow && !match$1(this$1.allow, files[i].name)) {
                        this$1.fail(this$1.msgInvalidName.replace("%s", this$1.allow));
                        return;
                    }
                    if (this$1.mime && !match$1(this$1.mime, files[i].type)) {
                        this$1.fail(this$1.msgInvalidMime.replace("%s", this$1.mime));
                        return;
                    }
                }
                if (!this.multiple) {
                    files = [ files[0] ];
                }
                this.beforeAll(this, files);
                var chunks = chunk(files, this.concurrent);
                var upload = function(files) {
                    var data$$1 = new FormData();
                    files.forEach(function(file) {
                        return data$$1.append(this$1.name, file);
                    });
                    for (var key in this$1.params) {
                        data$$1.append(key, this$1.params[key]);
                    }
                    ajax(this$1.url, {
                        data: data$$1,
                        method: this$1.method,
                        responseType: this$1.type,
                        beforeSend: function(env) {
                            var xhr = env.xhr;
                            xhr.upload && on(xhr.upload, "progress", this$1.progress);
                            [ "loadStart", "load", "loadEnd", "abort" ].forEach(function(type) {
                                return on(xhr, type.toLowerCase(), this$1[type]);
                            });
                            this$1.beforeSend(env);
                        }
                    }).then(function(xhr) {
                        this$1.complete(xhr);
                        if (chunks.length) {
                            upload(chunks.shift());
                        } else {
                            this$1.completeAll(xhr);
                        }
                    }, function(e) {
                        return this$1.error(e);
                    });
                };
                upload(chunks.shift());
            }
        }
    };
    function match$1(pattern, path) {
        return path.match(new RegExp("^" + pattern.replace(/\//g, "\\/").replace(/\*\*/g, "(\\/[^\\/]+)*").replace(/\*/g, "[^\\/]+").replace(/((?!\\))\?/g, "$1.") + "$", "i"));
    }
    function chunk(files, size) {
        var chunks = [];
        for (var i = 0; i < files.length; i += size) {
            var chunk = [];
            for (var j = 0; j < size; j++) {
                chunk.push(files[i + j]);
            }
            chunks.push(chunk);
        }
        return chunks;
    }
    function stop(e) {
        e.preventDefault();
        e.stopPropagation();
    }
    UIkit.component("countdown", Countdown);
    UIkit.component("filter", Filter);
    UIkit.component("lightbox", Lightbox);
    UIkit.component("lightboxPanel", LightboxPanel);
    UIkit.component("notification", Notification);
    UIkit.component("parallax", Parallax$1);
    UIkit.component("slider", Slider$1);
    UIkit.component("sliderParallax", SliderParallax);
    UIkit.component("slideshow", Slideshow$1);
    UIkit.component("slideshowParallax", SliderParallax);
    UIkit.component("sortable", Sortable);
    UIkit.component("tooltip", Tooltip);
    UIkit.component("upload", Upload);
    {
        boot(UIkit);
    }
    return UIkit;
});

(function(global, factory) {
    typeof exports === "object" && typeof module !== "undefined" ? module.exports = factory() : typeof define === "function" && define.amd ? define("uikiticons", factory) : global.UIkitIcons = factory();
})(this, function() {
    "use strict";
    function plugin(UIkit) {
        if (plugin.installed) {
            return;
        }
        UIkit.icon.add({
            "500px": '<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg"> <path d="M9.624,11.866c-0.141,0.132,0.479,0.658,0.662,0.418c0.051-0.046,0.607-0.61,0.662-0.664c0,0,0.738,0.719,0.814,0.719\t\tc0.1,0,0.207-0.055,0.322-0.17c0.27-0.269,0.135-0.416,0.066-0.495l-0.631-0.616l0.658-0.668c0.146-0.156,0.021-0.314-0.1-0.449\t\tc-0.182-0.18-0.359-0.226-0.471-0.125l-0.656,0.654l-0.654-0.654c-0.033-0.034-0.08-0.045-0.124-0.045\t\tc-0.079,0-0.191,0.068-0.307,0.181c-0.202,0.202-0.247,0.351-0.133,0.462l0.665,0.665L9.624,11.866z" /> <path d="M11.066,2.884c-1.061,0-2.185,0.248-3.011,0.604c-0.087,0.034-0.141,0.106-0.15,0.205C7.893,3.784,7.919,3.909,7.982,4.066\t\tc0.05,0.136,0.187,0.474,0.452,0.372c0.844-0.326,1.779-0.507,2.633-0.507c0.963,0,1.9,0.191,2.781,0.564\t\tc0.695,0.292,1.357,0.719,2.078,1.34c0.051,0.044,0.105,0.068,0.164,0.068c0.143,0,0.273-0.137,0.389-0.271\t\tc0.191-0.214,0.324-0.395,0.135-0.575c-0.686-0.654-1.436-1.138-2.363-1.533C13.24,3.097,12.168,2.884,11.066,2.884z" /> <path d="M16.43,15.747c-0.092-0.028-0.242,0.05-0.309,0.119l0,0c-0.652,0.652-1.42,1.169-2.268,1.521\t\tc-0.877,0.371-1.814,0.551-2.779,0.551c-0.961,0-1.896-0.189-2.775-0.564c-0.848-0.36-1.612-0.879-2.268-1.53\t\tc-0.682-0.688-1.196-1.455-1.529-2.268c-0.325-0.799-0.471-1.643-0.471-1.643c-0.045-0.24-0.258-0.249-0.567-0.203\t\tc-0.128,0.021-0.519,0.079-0.483,0.36v0.01c0.105,0.644,0.289,1.284,0.545,1.895c0.417,0.969,1.002,1.849,1.756,2.604\t\tc0.757,0.754,1.636,1.34,2.604,1.757C8.901,18.785,9.97,19,11.088,19c1.104,0,2.186-0.215,3.188-0.645\t\tc1.838-0.896,2.604-1.757,2.604-1.757c0.182-0.204,0.227-0.317-0.1-0.643C16.779,15.956,16.525,15.774,16.43,15.747z" /> <path d="M5.633,13.287c0.293,0.71,0.723,1.341,1.262,1.882c0.54,0.54,1.172,0.971,1.882,1.264c0.731,0.303,1.509,0.461,2.298,0.461\t\tc0.801,0,1.578-0.158,2.297-0.461c0.711-0.293,1.344-0.724,1.883-1.264c0.543-0.541,0.971-1.172,1.264-1.882\t\tc0.314-0.721,0.463-1.5,0.463-2.298c0-0.79-0.148-1.569-0.463-2.289c-0.293-0.699-0.721-1.329-1.264-1.881\t\tc-0.539-0.541-1.172-0.959-1.867-1.263c-0.721-0.303-1.5-0.461-2.299-0.461c-0.802,0-1.613,0.159-2.322,0.461\t\tc-0.577,0.25-1.544,0.867-2.119,1.454v0.012V2.108h8.16C15.1,2.104,15.1,1.69,15.1,1.552C15.1,1.417,15.1,1,14.809,1H5.915\t\tC5.676,1,5.527,1.192,5.527,1.384v6.84c0,0.214,0.273,0.372,0.529,0.428c0.5,0.105,0.614-0.056,0.737-0.224l0,0\t\tc0.18-0.273,0.776-0.884,0.787-0.894c0.901-0.905,2.117-1.408,3.416-1.408c1.285,0,2.5,0.501,3.412,1.408\t\tc0.914,0.914,1.408,2.122,1.408,3.405c0,1.288-0.508,2.496-1.408,3.405c-0.9,0.896-2.152,1.406-3.438,1.406\t\tc-0.877,0-1.711-0.229-2.433-0.671v-4.158c0-0.553,0.237-1.151,0.643-1.614c0.462-0.519,1.094-0.799,1.782-0.799\t\tc0.664,0,1.293,0.253,1.758,0.715c0.459,0.459,0.709,1.071,0.709,1.723c0,1.385-1.094,2.468-2.488,2.468\t\tc-0.273,0-0.769-0.121-0.781-0.125c-0.281-0.087-0.405,0.306-0.438,0.436c-0.159,0.496,0.079,0.585,0.123,0.607\t\tc0.452,0.137,0.743,0.157,1.129,0.157c1.973,0,3.572-1.6,3.572-3.57c0-1.964-1.6-3.552-3.572-3.552c-0.97,0-1.872,0.36-2.546,1.038\t\tc-0.656,0.631-1.027,1.487-1.027,2.322v3.438v-0.011c-0.372-0.42-0.732-1.041-0.981-1.682c-0.102-0.248-0.315-0.202-0.607-0.113\t\tc-0.135,0.035-0.519,0.157-0.44,0.439C5.372,12.799,5.577,13.164,5.633,13.287z" /></svg>',
            album: '<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg"> <rect x="5" y="2" width="10" height="1" /> <rect x="3" y="4" width="14" height="1" /> <rect fill="none" stroke="#000" x="1.5" y="6.5" width="17" height="11" /></svg>',
            "arrow-down": '<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg"> <polygon points="10.5,16.08 5.63,10.66 6.37,10 10.5,14.58 14.63,10 15.37,10.66" /> <line fill="none" stroke="#000" x1="10.5" y1="4" x2="10.5" y2="15" /></svg>',
            "arrow-left": '<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg"> <polyline fill="none" stroke="#000" points="10 14 5 9.5 10 5" /> <line fill="none" stroke="#000" x1="16" y1="9.5" x2="5" y2="9.52" /></svg>',
            "arrow-right": '<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg"> <polyline fill="none" stroke="#000" points="10 5 15 9.5 10 14" /> <line fill="none" stroke="#000" x1="4" y1="9.5" x2="15" y2="9.5" /></svg>',
            "arrow-up": '<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg"> <polygon points="10.5,4 15.37,9.4 14.63,10.08 10.5,5.49 6.37,10.08 5.63,9.4" /> <line fill="none" stroke="#000" x1="10.5" y1="16" x2="10.5" y2="5" /></svg>',
            ban: '<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg"> <circle fill="none" stroke="#000" stroke-width="1.1" cx="10" cy="10" r="9" /> <line fill="none" stroke="#000" stroke-width="1.1" x1="4" y1="3.5" x2="16" y2="16.5" /></svg>',
            behance: '<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg"> <path d="M9.5,10.6c-0.4-0.5-0.9-0.9-1.6-1.1c1.7-1,2.2-3.2,0.7-4.7C7.8,4,6.3,4,5.2,4C3.5,4,1.7,4,0,4v12c1.7,0,3.4,0,5.2,0 c1,0,2.1,0,3.1-0.5C10.2,14.6,10.5,12.3,9.5,10.6L9.5,10.6z M5.6,6.1c1.8,0,1.8,2.7-0.1,2.7c-1,0-2,0-2.9,0V6.1H5.6z M2.6,13.8v-3.1 c1.1,0,2.1,0,3.2,0c2.1,0,2.1,3.2,0.1,3.2L2.6,13.8z" /> <path d="M19.9,10.9C19.7,9.2,18.7,7.6,17,7c-4.2-1.3-7.3,3.4-5.3,7.1c0.9,1.7,2.8,2.3,4.7,2.1c1.7-0.2,2.9-1.3,3.4-2.9h-2.2 c-0.4,1.3-2.4,1.5-3.5,0.6c-0.4-0.4-0.6-1.1-0.6-1.7H20C20,11.7,19.9,10.9,19.9,10.9z M13.5,10.6c0-1.6,2.3-2.7,3.5-1.4 c0.4,0.4,0.5,0.9,0.6,1.4H13.5L13.5,10.6z" /> <rect x="13" y="4" width="5" height="1.4" /></svg>',
            bell: '<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg"> <path fill="none" stroke="#000" stroke-width="1.1" d="M17,15.5 L3,15.5 C2.99,14.61 3.79,13.34 4.1,12.51 C4.58,11.3 4.72,10.35 5.19,7.01 C5.54,4.53 5.89,3.2 7.28,2.16 C8.13,1.56 9.37,1.5 9.81,1.5 L9.96,1.5 C9.96,1.5 11.62,1.41 12.67,2.17 C14.08,3.2 14.42,4.54 14.77,7.02 C15.26,10.35 15.4,11.31 15.87,12.52 C16.2,13.34 17.01,14.61 17,15.5 L17,15.5 Z" /> <path fill="none" stroke="#000" d="M12.39,16 C12.39,17.37 11.35,18.43 9.91,18.43 C8.48,18.43 7.42,17.37 7.42,16" /></svg>',
            bold: '<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg"> <path d="M5,15.3 C5.66,15.3 5.9,15 5.9,14.53 L5.9,5.5 C5.9,4.92 5.56,4.7 5,4.7 L5,4 L8.95,4 C12.6,4 13.7,5.37 13.7,6.9 C13.7,7.87 13.14,9.17 10.86,9.59 L10.86,9.7 C13.25,9.86 14.29,11.28 14.3,12.54 C14.3,14.47 12.94,16 9,16 L5,16 L5,15.3 Z M9,9.3 C11.19,9.3 11.8,8.5 11.85,7 C11.85,5.65 11.3,4.8 9,4.8 L7.67,4.8 L7.67,9.3 L9,9.3 Z M9.185,15.22 C11.97,15 12.39,14 12.4,12.58 C12.4,11.15 11.39,10 9,10 L7.67,10 L7.67,15 L9.18,15 Z" /></svg>',
            bolt: '<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg"> <path d="M4.74,20 L7.73,12 L3,12 L15.43,1 L12.32,9 L17.02,9 L4.74,20 L4.74,20 L4.74,20 Z M9.18,11 L7.1,16.39 L14.47,10 L10.86,10 L12.99,4.67 L5.61,11 L9.18,11 L9.18,11 L9.18,11 Z" /></svg>',
            bookmark: '<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg"> <polygon fill="none" stroke="#000" points="5.5 1.5 15.5 1.5 15.5 17.5 10.5 12.5 5.5 17.5" /></svg>',
            calendar: '<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg"> <path d="M 2,3 2,17 18,17 18,3 2,3 Z M 17,16 3,16 3,8 17,8 17,16 Z M 17,7 3,7 3,4 17,4 17,7 Z" /> <rect width="1" height="3" x="6" y="2" /> <rect width="1" height="3" x="13" y="2" /></svg>',
            camera: '<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg"> <circle fill="none" stroke="#000" stroke-width="1.1" cx="10" cy="10.8" r="3.8" /> <path fill="none" stroke="#000" d="M1,4.5 C0.7,4.5 0.5,4.7 0.5,5 L0.5,17 C0.5,17.3 0.7,17.5 1,17.5 L19,17.5 C19.3,17.5 19.5,17.3 19.5,17 L19.5,5 C19.5,4.7 19.3,4.5 19,4.5 L13.5,4.5 L13.5,2.9 C13.5,2.6 13.3,2.5 13,2.5 L7,2.5 C6.7,2.5 6.5,2.6 6.5,2.9 L6.5,4.5 L1,4.5 L1,4.5 Z" /></svg>',
            cart: '<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg"> <circle cx="7.3" cy="17.3" r="1.4" /> <circle cx="13.3" cy="17.3" r="1.4" /> <polyline fill="none" stroke="#000" points="0 2 3.2 4 5.3 12.5 16 12.5 18 6.5 8 6.5" /></svg>',
            check: '<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg"> <polyline fill="none" stroke="#000" stroke-width="1.1" points="4,10 8,15 17,4" /></svg>',
            "chevron-down": '<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg"> <polyline fill="none" stroke="#000" stroke-width="1.03" points="16 7 10 13 4 7" /></svg>',
            "chevron-left": '<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg"> <polyline fill="none" stroke="#000" stroke-width="1.03" points="13 16 7 10 13 4" /></svg>',
            "chevron-right": '<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg"> <polyline fill="none" stroke="#000" stroke-width="1.03" points="7 4 13 10 7 16" /></svg>',
            "chevron-up": '<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg"> <polyline fill="none" stroke="#000" stroke-width="1.03" points="4 13 10 7 16 13" /></svg>',
            clock: '<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg"> <circle fill="none" stroke="#000" stroke-width="1.1" cx="10" cy="10" r="9" /> <rect x="9" y="4" width="1" height="7" /> <path fill="none" stroke="#000" stroke-width="1.1" d="M13.018,14.197 L9.445,10.625" /></svg>',
            close: '<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg"> <path fill="none" stroke="#000" stroke-width="1.06" d="M16,16 L4,4" /> <path fill="none" stroke="#000" stroke-width="1.06" d="M16,4 L4,16" /></svg>',
            "cloud-download": '<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg"> <path fill="none" stroke="#000" stroke-width="1.1" d="M6.5,14.61 L3.75,14.61 C1.96,14.61 0.5,13.17 0.5,11.39 C0.5,9.76 1.72,8.41 3.3,8.2 C3.38,5.31 5.75,3 8.68,3 C11.19,3 13.31,4.71 13.89,7.02 C14.39,6.8 14.93,6.68 15.5,6.68 C17.71,6.68 19.5,8.45 19.5,10.64 C19.5,12.83 17.71,14.6 15.5,14.6 L12.5,14.6" /> <polyline fill="none" stroke="#000" points="11.75 16 9.5 18.25 7.25 16" /> <path fill="none" stroke="#000" d="M9.5,18 L9.5,9.5" /></svg>',
            "cloud-upload": '<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg"> <path fill="none" stroke="#000" stroke-width="1.1" d="M6.5,14.61 L3.75,14.61 C1.96,14.61 0.5,13.17 0.5,11.39 C0.5,9.76 1.72,8.41 3.31,8.2 C3.38,5.31 5.75,3 8.68,3 C11.19,3 13.31,4.71 13.89,7.02 C14.39,6.8 14.93,6.68 15.5,6.68 C17.71,6.68 19.5,8.45 19.5,10.64 C19.5,12.83 17.71,14.6 15.5,14.6 L12.5,14.6" /> <polyline fill="none" stroke="#000" points="7.25 11.75 9.5 9.5 11.75 11.75" /> <path fill="none" stroke="#000" d="M9.5,18 L9.5,9.5" /></svg>',
            code: '<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg"> <polyline fill="none" stroke="#000" stroke-width="1.01" points="13,4 19,10 13,16" /> <polyline fill="none" stroke="#000" stroke-width="1.01" points="7,4 1,10 7,16" /></svg>',
            cog: '<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg"> <circle fill="none" stroke="#000" cx="9.997" cy="10" r="3.31" /> <path fill="none" stroke="#000" d="M18.488,12.285 L16.205,16.237 C15.322,15.496 14.185,15.281 13.303,15.791 C12.428,16.289 12.047,17.373 12.246,18.5 L7.735,18.5 C7.938,17.374 7.553,16.299 6.684,15.791 C5.801,15.27 4.655,15.492 3.773,16.237 L1.5,12.285 C2.573,11.871 3.317,10.999 3.317,9.991 C3.305,8.98 2.573,8.121 1.5,7.716 L3.765,3.784 C4.645,4.516 5.794,4.738 6.687,4.232 C7.555,3.722 7.939,2.637 7.735,1.5 L12.263,1.5 C12.072,2.637 12.441,3.71 13.314,4.22 C14.206,4.73 15.343,4.516 16.225,3.794 L18.487,7.714 C17.404,8.117 16.661,8.988 16.67,10.009 C16.672,11.018 17.415,11.88 18.488,12.285 L18.488,12.285 Z" /></svg>',
            comment: '<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg"> <path d="M6,18.71 L6,14 L1,14 L1,1 L19,1 L19,14 L10.71,14 L6,18.71 L6,18.71 Z M2,13 L7,13 L7,16.29 L10.29,13 L18,13 L18,2 L2,2 L2,13 L2,13 Z" /></svg>',
            commenting: '<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg"> <polygon fill="none" stroke="#000" points="1.5,1.5 18.5,1.5 18.5,13.5 10.5,13.5 6.5,17.5 6.5,13.5 1.5,13.5" /> <circle cx="10" cy="8" r="1" /> <circle cx="6" cy="8" r="1" /> <circle cx="14" cy="8" r="1" /></svg>',
            comments: '<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg"> <polyline fill="none" stroke="#000" points="2 0.5 19.5 0.5 19.5 13" /> <path d="M5,19.71 L5,15 L0,15 L0,2 L18,2 L18,15 L9.71,15 L5,19.71 L5,19.71 L5,19.71 Z M1,14 L6,14 L6,17.29 L9.29,14 L17,14 L17,3 L1,3 L1,14 L1,14 L1,14 Z" /></svg>',
            copy: '<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg"> <rect fill="none" stroke="#000" x="3.5" y="2.5" width="12" height="16" /> <polyline fill="none" stroke="#000" points="5 0.5 17.5 0.5 17.5 17" /></svg>',
            "credit-card": '<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg"> <rect fill="none" stroke="#000" x="1.5" y="4.5" width="17" height="12" /> <rect x="1" y="7" width="18" height="3" /></svg>',
            database: '<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg"> <ellipse fill="none" stroke="#000" cx="10" cy="4.64" rx="7.5" ry="3.14" /> <path fill="none" stroke="#000" d="M17.5,8.11 C17.5,9.85 14.14,11.25 10,11.25 C5.86,11.25 2.5,9.84 2.5,8.11" /> <path fill="none" stroke="#000" d="M17.5,11.25 C17.5,12.99 14.14,14.39 10,14.39 C5.86,14.39 2.5,12.98 2.5,11.25" /> <path fill="none" stroke="#000" d="M17.49,4.64 L17.5,14.36 C17.5,16.1 14.14,17.5 10,17.5 C5.86,17.5 2.5,16.09 2.5,14.36 L2.5,4.64" /></svg>',
            desktop: '<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg"> <rect x="8" y="15" width="1" height="2" /> <rect x="11" y="15" width="1" height="2" /> <rect x="5" y="16" width="10" height="1" /> <rect fill="none" stroke="#000" x="1.5" y="3.5" width="17" height="11" /></svg>',
            download: '<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg"> <polyline fill="none" stroke="#000" points="14,10 9.5,14.5 5,10" /> <rect x="3" y="17" width="13" height="1" /> <line fill="none" stroke="#000" x1="9.5" y1="13.91" x2="9.5" y2="3" /></svg>',
            dribbble: '<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg"> <path fill="none" stroke="#000" stroke-width="1.4" d="M1.3,8.9c0,0,5,0.1,8.6-1c1.4-0.4,2.6-0.9,4-1.9 c1.4-1.1,2.5-2.5,2.5-2.5" /> <path fill="none" stroke="#000" stroke-width="1.4" d="M3.9,16.6c0,0,1.7-2.8,3.5-4.2 c1.8-1.3,4-2,5.7-2.2C16,10,19,10.6,19,10.6" /> <path fill="none" stroke="#000" stroke-width="1.4" d="M6.9,1.6c0,0,3.3,4.6,4.2,6.8 c0.4,0.9,1.3,3.1,1.9,5.2c0.6,2,0.9,4.4,0.9,4.4" /> <circle fill="none" stroke="#000" stroke-width="1.4" cx="10" cy="10" r="9" /></svg>',
            expand: '<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg"> <polygon points="13 2 18 2 18 7 17 7 17 3 13 3" /> <polygon points="2 13 3 13 3 17 7 17 7 18 2 18" /> <path fill="none" stroke="#000" stroke-width="1.1" d="M11,9 L17,3" /> <path fill="none" stroke="#000" stroke-width="1.1" d="M3,17 L9,11" /></svg>',
            facebook: '<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg"> <path d="M11,10h2.6l0.4-3H11V5.3c0-0.9,0.2-1.5,1.5-1.5H14V1.1c-0.3,0-1-0.1-2.1-0.1C9.6,1,8,2.4,8,5v2H5.5v3H8v8h3V10z" /></svg>',
            "file-edit": '<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg"> <path fill="none" stroke="#000" d="M18.65,1.68 C18.41,1.45 18.109,1.33 17.81,1.33 C17.499,1.33 17.209,1.45 16.98,1.68 L8.92,9.76 L8,12.33 L10.55,11.41 L18.651,3.34 C19.12,2.87 19.12,2.15 18.65,1.68 L18.65,1.68 L18.65,1.68 Z" /> <polyline fill="none" stroke="#000" points="16.5 8.482 16.5 18.5 3.5 18.5 3.5 1.5 14.211 1.5" /></svg>',
            file: '<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg"> <rect fill="none" stroke="#000" x="3.5" y="1.5" width="13" height="17" /></svg>',
            flickr: '<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg"> <circle cx="5.5" cy="9.5" r="3.5" /> <circle cx="14.5" cy="9.5" r="3.5" /></svg>',
            folder: '<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg"> <polygon fill="none" stroke="#000" points="9.5 5.5 8.5 3.5 1.5 3.5 1.5 16.5 18.5 16.5 18.5 5.5" /></svg>',
            forward: '<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg"> <path d="M2.47,13.11 C4.02,10.02 6.27,7.85 9.04,6.61 C9.48,6.41 10.27,6.13 11,5.91 L11,2 L18.89,9 L11,16 L11,12.13 C9.25,12.47 7.58,13.19 6.02,14.25 C3.03,16.28 1.63,18.54 1.63,18.54 C1.63,18.54 1.38,15.28 2.47,13.11 L2.47,13.11 Z M5.3,13.53 C6.92,12.4 9.04,11.4 12,10.92 L12,13.63 L17.36,9 L12,4.25 L12,6.8 C11.71,6.86 10.86,7.02 9.67,7.49 C6.79,8.65 4.58,10.96 3.49,13.08 C3.18,13.7 2.68,14.87 2.49,16 C3.28,15.05 4.4,14.15 5.3,13.53 L5.3,13.53 Z" /></svg>',
            foursquare: '<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg"> <path d="M15.23,2 C15.96,2 16.4,2.41 16.5,2.86 C16.57,3.15 16.56,3.44 16.51,3.73 C16.46,4.04 14.86,11.72 14.75,12.03 C14.56,12.56 14.16,12.82 13.61,12.83 C13.03,12.84 11.09,12.51 10.69,13 C10.38,13.38 7.79,16.39 6.81,17.53 C6.61,17.76 6.4,17.96 6.08,17.99 C5.68,18.04 5.29,17.87 5.17,17.45 C5.12,17.28 5.1,17.09 5.1,16.91 C5.1,12.4 4.86,7.81 5.11,3.31 C5.17,2.5 5.81,2.12 6.53,2 L15.23,2 L15.23,2 Z M9.76,11.42 C9.94,11.19 10.17,11.1 10.45,11.1 L12.86,11.1 C13.12,11.1 13.31,10.94 13.36,10.69 C13.37,10.64 13.62,9.41 13.74,8.83 C13.81,8.52 13.53,8.28 13.27,8.28 C12.35,8.29 11.42,8.28 10.5,8.28 C9.84,8.28 9.83,7.69 9.82,7.21 C9.8,6.85 10.13,6.55 10.5,6.55 C11.59,6.56 12.67,6.55 13.76,6.55 C14.03,6.55 14.23,6.4 14.28,6.14 C14.34,5.87 14.67,4.29 14.67,4.29 C14.67,4.29 14.82,3.74 14.19,3.74 L7.34,3.74 C7,3.75 6.84,4.02 6.84,4.33 C6.84,7.58 6.85,14.95 6.85,14.99 C6.87,15 8.89,12.51 9.76,11.42 L9.76,11.42 Z" /></svg>',
            future: '<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg"> <polyline points="19 2 18 2 18 6 14 6 14 7 19 7 19 2" /> <path fill="none" stroke="#000" stroke-width="1.1" d="M18,6.548 C16.709,3.29 13.354,1 9.6,1 C4.6,1 0.6,5 0.6,10 C0.6,15 4.6,19 9.6,19 C14.6,19 18.6,15 18.6,10" /> <rect x="9" y="4" width="1" height="7" /> <path d="M13.018,14.197 L9.445,10.625" fill="none" stroke="#000" stroke-width="1.1" /></svg>',
            "git-branch": '<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg"> <circle fill="none" stroke="#000" stroke-width="1.2" cx="7" cy="3" r="2" /> <circle fill="none" stroke="#000" stroke-width="1.2" cx="14" cy="6" r="2" /> <circle fill="none" stroke="#000" stroke-width="1.2" cx="7" cy="17" r="2" /> <path fill="none" stroke="#000" stroke-width="2" d="M14,8 C14,10.41 12.43,10.87 10.56,11.25 C9.09,11.54 7,12.06 7,15 L7,5" /></svg>',
            "git-fork": '<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg"> <circle fill="none" stroke="#000" stroke-width="1.2" cx="5.79" cy="2.79" r="1.79" /> <circle fill="none" stroke="#000" stroke-width="1.2" cx="14.19" cy="2.79" r="1.79" /> <ellipse fill="none" stroke="#000" stroke-width="1.2" cx="10.03" cy="16.79" rx="1.79" ry="1.79" /> <path fill="none" stroke="#000" stroke-width="2" d="M5.79,4.57 L5.79,6.56 C5.79,9.19 10.03,10.22 10.03,13.31 C10.03,14.86 10.04,14.55 10.04,14.55 C10.04,14.37 10.04,14.86 10.04,13.31 C10.04,10.22 14.2,9.19 14.2,6.56 L14.2,4.57" /></svg>',
            "github-alt": '<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg"> <path d="M10,0.5 C4.75,0.5 0.5,4.76 0.5,10.01 C0.5,15.26 4.75,19.51 10,19.51 C15.24,19.51 19.5,15.26 19.5,10.01 C19.5,4.76 15.25,0.5 10,0.5 L10,0.5 Z M12.81,17.69 C12.81,17.69 12.81,17.7 12.79,17.69 C12.47,17.75 12.35,17.59 12.35,17.36 L12.35,16.17 C12.35,15.45 12.09,14.92 11.58,14.56 C12.2,14.51 12.77,14.39 13.26,14.21 C13.87,13.98 14.36,13.69 14.74,13.29 C15.42,12.59 15.76,11.55 15.76,10.17 C15.76,9.25 15.45,8.46 14.83,7.8 C15.1,7.08 15.07,6.29 14.75,5.44 L14.51,5.42 C14.34,5.4 14.06,5.46 13.67,5.61 C13.25,5.78 12.79,6.03 12.31,6.35 C11.55,6.16 10.81,6.05 10.09,6.05 C9.36,6.05 8.61,6.15 7.88,6.35 C7.28,5.96 6.75,5.68 6.26,5.54 C6.07,5.47 5.9,5.44 5.78,5.44 L5.42,5.44 C5.06,6.29 5.04,7.08 5.32,7.8 C4.7,8.46 4.4,9.25 4.4,10.17 C4.4,11.94 4.96,13.16 6.08,13.84 C6.53,14.13 7.05,14.32 7.69,14.43 C8.03,14.5 8.32,14.54 8.55,14.55 C8.07,14.89 7.82,15.42 7.82,16.16 L7.82,17.51 C7.8,17.69 7.7,17.8 7.51,17.8 C4.21,16.74 1.82,13.65 1.82,10.01 C1.82,5.5 5.49,1.83 10,1.83 C14.5,1.83 18.17,5.5 18.17,10.01 C18.18,13.53 15.94,16.54 12.81,17.69 L12.81,17.69 Z" /></svg>',
            github: '<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg"> <path d="M10,1 C5.03,1 1,5.03 1,10 C1,13.98 3.58,17.35 7.16,18.54 C7.61,18.62 7.77,18.34 7.77,18.11 C7.77,17.9 7.76,17.33 7.76,16.58 C5.26,17.12 4.73,15.37 4.73,15.37 C4.32,14.33 3.73,14.05 3.73,14.05 C2.91,13.5 3.79,13.5 3.79,13.5 C4.69,13.56 5.17,14.43 5.17,14.43 C5.97,15.8 7.28,15.41 7.79,15.18 C7.87,14.6 8.1,14.2 8.36,13.98 C6.36,13.75 4.26,12.98 4.26,9.53 C4.26,8.55 4.61,7.74 5.19,7.11 C5.1,6.88 4.79,5.97 5.28,4.73 C5.28,4.73 6.04,4.49 7.75,5.65 C8.47,5.45 9.24,5.35 10,5.35 C10.76,5.35 11.53,5.45 12.25,5.65 C13.97,4.48 14.72,4.73 14.72,4.73 C15.21,5.97 14.9,6.88 14.81,7.11 C15.39,7.74 15.73,8.54 15.73,9.53 C15.73,12.99 13.63,13.75 11.62,13.97 C11.94,14.25 12.23,14.8 12.23,15.64 C12.23,16.84 12.22,17.81 12.22,18.11 C12.22,18.35 12.38,18.63 12.84,18.54 C16.42,17.35 19,13.98 19,10 C19,5.03 14.97,1 10,1 L10,1 Z" /></svg>',
            gitter: '<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg"> <rect x="3.5" y="1" width="1.531" height="11.471" /> <rect x="7.324" y="4.059" width="1.529" height="15.294" /> <rect x="11.148" y="4.059" width="1.527" height="15.294" /> <rect x="14.971" y="4.059" width="1.529" height="8.412" /></svg>',
            "google-plus": '<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg"> <path d="M12.9,9c0,2.7-0.6,5-3.2,6.3c-3.7,1.8-8.1,0.2-9.4-3.6C-1.1,7.6,1.9,3.3,6.1,3c1.7-0.1,3.2,0.3,4.6,1.3 c0.1,0.1,0.3,0.2,0.4,0.4c-0.5,0.5-1.2,1-1.7,1.6c-1-0.8-2.1-1.1-3.5-0.9C5,5.6,4.2,6,3.6,6.7c-1.3,1.3-1.5,3.4-0.5,5 c1,1.7,2.6,2.3,4.6,1.9c1.4-0.3,2.4-1.2,2.6-2.6H6.9V9H12.9z" /> <polygon points="20,9 20,11 18,11 18,13 16,13 16,11 14,11 14,9 16,9 16,7 18,7 18,9 " /></svg>',
            google: '<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg"> <path d="M17.86,9.09 C18.46,12.12 17.14,16.05 13.81,17.56 C9.45,19.53 4.13,17.68 2.47,12.87 C0.68,7.68 4.22,2.42 9.5,2.03 C11.57,1.88 13.42,2.37 15.05,3.65 C15.22,3.78 15.37,3.93 15.61,4.14 C14.9,4.81 14.23,5.45 13.5,6.14 C12.27,5.08 10.84,4.72 9.28,4.98 C8.12,5.17 7.16,5.76 6.37,6.63 C4.88,8.27 4.62,10.86 5.76,12.82 C6.95,14.87 9.17,15.8 11.57,15.25 C13.27,14.87 14.76,13.33 14.89,11.75 L10.51,11.75 L10.51,9.09 L17.86,9.09 L17.86,9.09 Z" /></svg>',
            grid: '<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg"> <rect x="2" y="2" width="3" height="3" /> <rect x="8" y="2" width="3" height="3" /> <rect x="14" y="2" width="3" height="3" /> <rect x="2" y="8" width="3" height="3" /> <rect x="8" y="8" width="3" height="3" /> <rect x="14" y="8" width="3" height="3" /> <rect x="2" y="14" width="3" height="3" /> <rect x="8" y="14" width="3" height="3" /> <rect x="14" y="14" width="3" height="3" /></svg>',
            happy: '<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg"> <circle cx="13" cy="7" r="1" /> <circle cx="7" cy="7" r="1" /> <circle fill="none" stroke="#000" cx="10" cy="10" r="8.5" /> <path fill="none" stroke="#000" d="M14.6,11.4 C13.9,13.3 12.1,14.5 10,14.5 C7.9,14.5 6.1,13.3 5.4,11.4" /></svg>',
            hashtag: '<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg"> <path d="M15.431,8 L15.661,7 L12.911,7 L13.831,3 L12.901,3 L11.98,7 L9.29,7 L10.21,3 L9.281,3 L8.361,7 L5.23,7 L5,8 L8.13,8 L7.21,12 L4.23,12 L4,13 L6.98,13 L6.061,17 L6.991,17 L7.911,13 L10.601,13 L9.681,17 L10.611,17 L11.531,13 L14.431,13 L14.661,12 L11.76,12 L12.681,8 L15.431,8 Z M10.831,12 L8.141,12 L9.061,8 L11.75,8 L10.831,12 Z" /></svg>',
            heart: '<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg"> <path fill="none" stroke="#000" stroke-width="1.03" d="M10,4 C10,4 8.1,2 5.74,2 C3.38,2 1,3.55 1,6.73 C1,8.84 2.67,10.44 2.67,10.44 L10,18 L17.33,10.44 C17.33,10.44 19,8.84 19,6.73 C19,3.55 16.62,2 14.26,2 C11.9,2 10,4 10,4 L10,4 Z" /></svg>',
            history: '<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg"> <polyline fill="#000" points="1 2 2 2 2 6 6 6 6 7 1 7 1 2" /> <path fill="none" stroke="#000" stroke-width="1.1" d="M2.1,6.548 C3.391,3.29 6.746,1 10.5,1 C15.5,1 19.5,5 19.5,10 C19.5,15 15.5,19 10.5,19 C5.5,19 1.5,15 1.5,10" /> <rect x="9" y="4" width="1" height="7" /> <path fill="none" stroke="#000" stroke-width="1.1" d="M13.018,14.197 L9.445,10.625" id="Shape" /></svg>',
            home: '<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg"> <polygon points="18.65 11.35 10 2.71 1.35 11.35 0.65 10.65 10 1.29 19.35 10.65" /> <polygon points="15 4 18 4 18 7 17 7 17 5 15 5" /> <polygon points="3 11 4 11 4 18 7 18 7 12 12 12 12 18 16 18 16 11 17 11 17 19 11 19 11 13 8 13 8 19 3 19" /></svg>',
            image: '<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg"> <circle cx="16.1" cy="6.1" r="1.1" /> <rect fill="none" stroke="#000" x="0.5" y="2.5" width="19" height="15" /> <polyline fill="none" stroke="#000" stroke-width="1.01" points="4,13 8,9 13,14" /> <polyline fill="none" stroke="#000" stroke-width="1.01" points="11,12 12.5,10.5 16,14" /></svg>',
            info: '<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg"> <path d="M12.13,11.59 C11.97,12.84 10.35,14.12 9.1,14.16 C6.17,14.2 9.89,9.46 8.74,8.37 C9.3,8.16 10.62,7.83 10.62,8.81 C10.62,9.63 10.12,10.55 9.88,11.32 C8.66,15.16 12.13,11.15 12.14,11.18 C12.16,11.21 12.16,11.35 12.13,11.59 C12.08,11.95 12.16,11.35 12.13,11.59 L12.13,11.59 Z M11.56,5.67 C11.56,6.67 9.36,7.15 9.36,6.03 C9.36,5 11.56,4.54 11.56,5.67 L11.56,5.67 Z" /> <circle fill="none" stroke="#000" stroke-width="1.1" cx="10" cy="10" r="9" /></svg>',
            instagram: '<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg"> <path d="M13.55,1H6.46C3.45,1,1,3.44,1,6.44v7.12c0,3,2.45,5.44,5.46,5.44h7.08c3.02,0,5.46-2.44,5.46-5.44V6.44 C19.01,3.44,16.56,1,13.55,1z M17.5,14c0,1.93-1.57,3.5-3.5,3.5H6c-1.93,0-3.5-1.57-3.5-3.5V6c0-1.93,1.57-3.5,3.5-3.5h8 c1.93,0,3.5,1.57,3.5,3.5V14z" /> <circle cx="14.87" cy="5.26" r="1.09" /> <path d="M10.03,5.45c-2.55,0-4.63,2.06-4.63,4.6c0,2.55,2.07,4.61,4.63,4.61c2.56,0,4.63-2.061,4.63-4.61 C14.65,7.51,12.58,5.45,10.03,5.45L10.03,5.45L10.03,5.45z M10.08,13c-1.66,0-3-1.34-3-2.99c0-1.65,1.34-2.99,3-2.99s3,1.34,3,2.99 C13.08,11.66,11.74,13,10.08,13L10.08,13L10.08,13z" /></svg>',
            italic: '<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg"> <path d="M12.63,5.48 L10.15,14.52 C10,15.08 10.37,15.25 11.92,15.3 L11.72,16 L6,16 L6.2,15.31 C7.78,15.26 8.19,15.09 8.34,14.53 L10.82,5.49 C10.97,4.92 10.63,4.76 9.09,4.71 L9.28,4 L15,4 L14.81,4.69 C13.23,4.75 12.78,4.91 12.63,5.48 L12.63,5.48 Z" /></svg>',
            joomla: '<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg"> <path d="M7.8,13.4l1.7-1.7L5.9,8c-0.6-0.5-0.6-1.5,0-2c0.6-0.6,1.4-0.6,2,0l1.7-1.7c-1-1-2.3-1.3-3.6-1C5.8,2.2,4.8,1.4,3.7,1.4 c-1.3,0-2.3,1-2.3,2.3c0,1.1,0.8,2,1.8,2.3c-0.4,1.3-0.1,2.8,1,3.8L7.8,13.4L7.8,13.4z" /> <path d="M10.2,4.3c1-1,2.5-1.4,3.8-1c0.2-1.1,1.1-2,2.3-2c1.3,0,2.3,1,2.3,2.3c0,1.2-0.9,2.2-2,2.3c0.4,1.3,0,2.8-1,3.8L13.9,8 c0.6-0.5,0.6-1.5,0-2c-0.5-0.6-1.5-0.6-2,0L8.2,9.7L6.5,8" /> <path d="M14.1,16.8c-1.3,0.4-2.8,0.1-3.8-1l1.7-1.7c0.6,0.6,1.5,0.6,2,0c0.5-0.6,0.6-1.5,0-2l-3.7-3.7L12,6.7l3.7,3.7 c1,1,1.3,2.4,1,3.6c1.1,0.2,2,1.1,2,2.3c0,1.3-1,2.3-2.3,2.3C15.2,18.6,14.3,17.8,14.1,16.8" /> <path d="M13.2,12.2l-3.7,3.7c-1,1-2.4,1.3-3.6,1c-0.2,1-1.2,1.8-2.2,1.8c-1.3,0-2.3-1-2.3-2.3c0-1.1,0.8-2,1.8-2.3 c-0.3-1.3,0-2.7,1-3.7l1.7,1.7c-0.6,0.6-0.6,1.5,0,2c0.6,0.6,1.4,0.6,2,0l3.7-3.7" /></svg>',
            laptop: '<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg"> <rect y="16" width="20" height="1" /> <rect fill="none" stroke="#000" x="2.5" y="4.5" width="15" height="10" /></svg>',
            lifesaver: '<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg"> <path d="M10,0.5 C4.76,0.5 0.5,4.76 0.5,10 C0.5,15.24 4.76,19.5 10,19.5 C15.24,19.5 19.5,15.24 19.5,10 C19.5,4.76 15.24,0.5 10,0.5 L10,0.5 Z M10,1.5 C11.49,1.5 12.89,1.88 14.11,2.56 L11.85,4.82 C11.27,4.61 10.65,4.5 10,4.5 C9.21,4.5 8.47,4.67 7.79,4.96 L5.58,2.75 C6.87,1.95 8.38,1.5 10,1.5 L10,1.5 Z M4.96,7.8 C4.67,8.48 4.5,9.21 4.5,10 C4.5,10.65 4.61,11.27 4.83,11.85 L2.56,14.11 C1.88,12.89 1.5,11.49 1.5,10 C1.5,8.38 1.95,6.87 2.75,5.58 L4.96,7.79 L4.96,7.8 L4.96,7.8 Z M10,18.5 C8.25,18.5 6.62,17.97 5.27,17.06 L7.46,14.87 C8.22,15.27 9.08,15.5 10,15.5 C10.79,15.5 11.53,15.33 12.21,15.04 L14.42,17.25 C13.13,18.05 11.62,18.5 10,18.5 L10,18.5 Z M10,14.5 C7.52,14.5 5.5,12.48 5.5,10 C5.5,7.52 7.52,5.5 10,5.5 C12.48,5.5 14.5,7.52 14.5,10 C14.5,12.48 12.48,14.5 10,14.5 L10,14.5 Z M15.04,12.21 C15.33,11.53 15.5,10.79 15.5,10 C15.5,9.08 15.27,8.22 14.87,7.46 L17.06,5.27 C17.97,6.62 18.5,8.25 18.5,10 C18.5,11.62 18.05,13.13 17.25,14.42 L15.04,12.21 L15.04,12.21 Z" /></svg>',
            link: '<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg"> <path fill="none" stroke="#000" stroke-width="1.1" d="M10.625,12.375 L7.525,15.475 C6.825,16.175 5.925,16.175 5.225,15.475 L4.525,14.775 C3.825,14.074 3.825,13.175 4.525,12.475 L7.625,9.375" /> <path fill="none" stroke="#000" stroke-width="1.1" d="M9.325,7.375 L12.425,4.275 C13.125,3.575 14.025,3.575 14.724,4.275 L15.425,4.975 C16.125,5.675 16.125,6.575 15.425,7.275 L12.325,10.375" /> <path fill="none" stroke="#000" stroke-width="1.1" d="M7.925,11.875 L11.925,7.975" /></svg>',
            linkedin: '<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg"> <path d="M5.77,17.89 L5.77,7.17 L2.21,7.17 L2.21,17.89 L5.77,17.89 L5.77,17.89 Z M3.99,5.71 C5.23,5.71 6.01,4.89 6.01,3.86 C5.99,2.8 5.24,2 4.02,2 C2.8,2 2,2.8 2,3.85 C2,4.88 2.77,5.7 3.97,5.7 L3.99,5.7 L3.99,5.71 L3.99,5.71 Z" /> <path d="M7.75,17.89 L11.31,17.89 L11.31,11.9 C11.31,11.58 11.33,11.26 11.43,11.03 C11.69,10.39 12.27,9.73 13.26,9.73 C14.55,9.73 15.06,10.71 15.06,12.15 L15.06,17.89 L18.62,17.89 L18.62,11.74 C18.62,8.45 16.86,6.92 14.52,6.92 C12.6,6.92 11.75,7.99 11.28,8.73 L11.3,8.73 L11.3,7.17 L7.75,7.17 C7.79,8.17 7.75,17.89 7.75,17.89 L7.75,17.89 L7.75,17.89 Z" /></svg>',
            list: '<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg"> <rect x="6" y="4" width="12" height="1" /> <rect x="6" y="9" width="12" height="1" /> <rect x="6" y="14" width="12" height="1" /> <rect x="2" y="4" width="2" height="1" /> <rect x="2" y="9" width="2" height="1" /> <rect x="2" y="14" width="2" height="1" /></svg>',
            location: '<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg"> <path fill="none" stroke="#000" stroke-width="1.01" d="M10,0.5 C6.41,0.5 3.5,3.39 3.5,6.98 C3.5,11.83 10,19 10,19 C10,19 16.5,11.83 16.5,6.98 C16.5,3.39 13.59,0.5 10,0.5 L10,0.5 Z" /> <circle fill="none" stroke="#000" cx="10" cy="6.8" r="2.3" /></svg>',
            lock: '<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg"> <rect fill="none" stroke="#000" height="10" width="13" y="8.5" x="3.5" /> <path fill="none" stroke="#000" d="M6.5,8 L6.5,4.88 C6.5,3.01 8.07,1.5 10,1.5 C11.93,1.5 13.5,3.01 13.5,4.88 L13.5,8" /></svg>',
            mail: '<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg"> <polyline fill="none" stroke="#000" points="1.4,6.5 10,11 18.6,6.5" /> <path d="M 1,4 1,16 19,16 19,4 1,4 Z M 18,15 2,15 2,5 18,5 18,15 Z" /></svg>',
            menu: '<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg"> <rect x="2" y="4" width="16" height="1" /> <rect x="2" y="9" width="16" height="1" /> <rect x="2" y="14" width="16" height="1" /></svg>',
            "minus-circle": '<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg"> <circle fill="none" stroke="#000" stroke-width="1.1" cx="9.5" cy="9.5" r="9" /> <line fill="none" stroke="#000" x1="5" y1="9.5" x2="14" y2="9.5" /></svg>',
            minus: '<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg"> <rect height="1" width="18" y="9" x="1" /></svg>',
            "more-vertical": '<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg"> <circle cx="10" cy="3" r="2" /> <circle cx="10" cy="10" r="2" /> <circle cx="10" cy="17" r="2" /></svg>',
            more: '<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg"> <circle cx="3" cy="10" r="2" /> <circle cx="10" cy="10" r="2" /> <circle cx="17" cy="10" r="2" /></svg>',
            move: '<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg"> <polygon points="4,5 1,5 1,9 2,9 2,6 4,6 " /> <polygon points="1,16 2,16 2,18 4,18 4,19 1,19 " /> <polygon points="14,16 14,19 11,19 11,18 13,18 13,16 " /> <rect fill="none" stroke="#000" x="5.5" y="1.5" width="13" height="13" /> <rect x="1" y="11" width="1" height="3" /> <rect x="6" y="18" width="3" height="1" /></svg>',
            nut: '<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg"> <polygon fill="none" stroke="#000" points="2.5,5.7 10,1.3 17.5,5.7 17.5,14.3 10,18.7 2.5,14.3" /> <circle fill="none" stroke="#000" cx="10" cy="10" r="3.5" /></svg>',
            pagekit: '<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg"> <polygon points="3,1 17,1 17,16 10,16 10,13 14,13 14,4 6,4 6,16 10,16 10,19 3,19 " /></svg>',
            "paint-bucket": '<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg"> <path d="M10.21,1 L0,11.21 L8.1,19.31 L18.31,9.1 L10.21,1 L10.21,1 Z M16.89,9.1 L15,11 L1.7,11 L10.21,2.42 L16.89,9.1 Z" /> <path fill="none" stroke="#000" stroke-width="1.1" d="M6.42,2.33 L11.7,7.61" /> <path d="M18.49,12 C18.49,12 20,14.06 20,15.36 C20,16.28 19.24,17 18.49,17 L18.49,17 C17.74,17 17,16.28 17,15.36 C17,14.06 18.49,12 18.49,12 L18.49,12 Z" /></svg>',
            pencil: '<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg"> <path fill="none" stroke="#000" d="M17.25,6.01 L7.12,16.1 L3.82,17.2 L5.02,13.9 L15.12,3.88 C15.71,3.29 16.66,3.29 17.25,3.88 C17.83,4.47 17.83,5.42 17.25,6.01 L17.25,6.01 Z" /> <path fill="none" stroke="#000" d="M15.98,7.268 L13.851,5.148" /></svg>',
            "phone-landscape": '<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg"> <path fill="none" stroke="#000" d="M17,5.5 C17.8,5.5 18.5,6.2 18.5,7 L18.5,14 C18.5,14.8 17.8,15.5 17,15.5 L3,15.5 C2.2,15.5 1.5,14.8 1.5,14 L1.5,7 C1.5,6.2 2.2,5.5 3,5.5 L17,5.5 L17,5.5 L17,5.5 Z" /> <circle cx="3.8" cy="10.5" r="0.8" /></svg>',
            phone: '<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg"> <path fill="none" stroke="#000" d="M15.5,17 C15.5,17.8 14.8,18.5 14,18.5 L7,18.5 C6.2,18.5 5.5,17.8 5.5,17 L5.5,3 C5.5,2.2 6.2,1.5 7,1.5 L14,1.5 C14.8,1.5 15.5,2.2 15.5,3 L15.5,17 L15.5,17 L15.5,17 Z" /> <circle cx="10.5" cy="16.5" r="0.8" /></svg>',
            pinterest: '<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg"> <path d="M10.21,1 C5.5,1 3,4.16 3,7.61 C3,9.21 3.85,11.2 5.22,11.84 C5.43,11.94 5.54,11.89 5.58,11.69 C5.62,11.54 5.8,10.8 5.88,10.45 C5.91,10.34 5.89,10.24 5.8,10.14 C5.36,9.59 5,8.58 5,7.65 C5,5.24 6.82,2.91 9.93,2.91 C12.61,2.91 14.49,4.74 14.49,7.35 C14.49,10.3 13,12.35 11.06,12.35 C9.99,12.35 9.19,11.47 9.44,10.38 C9.75,9.08 10.35,7.68 10.35,6.75 C10.35,5.91 9.9,5.21 8.97,5.21 C7.87,5.21 6.99,6.34 6.99,7.86 C6.99,8.83 7.32,9.48 7.32,9.48 C7.32,9.48 6.24,14.06 6.04,14.91 C5.7,16.35 6.08,18.7 6.12,18.9 C6.14,19.01 6.26,19.05 6.33,18.95 C6.44,18.81 7.74,16.85 8.11,15.44 C8.24,14.93 8.79,12.84 8.79,12.84 C9.15,13.52 10.19,14.09 11.29,14.09 C14.58,14.09 16.96,11.06 16.96,7.3 C16.94,3.7 14,1 10.21,1" /></svg>',
            "play-circle": '<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg"> <polygon fill="none" stroke="#000" stroke-width="1.1" points="8.5 7 13.5 10 8.5 13" /> <circle fill="none" stroke="#000" stroke-width="1.1" cx="10" cy="10" r="9" /></svg>',
            play: '<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg"> <polygon fill="none" stroke="#000" points="6.5,5 14.5,10 6.5,15" /></svg>',
            "plus-circle": '<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg"> <circle fill="none" stroke="#000" stroke-width="1.1" cx="9.5" cy="9.5" r="9" /> <line fill="none" stroke="#000" x1="9.5" y1="5" x2="9.5" y2="14" /> <line fill="none" stroke="#000" x1="5" y1="9.5" x2="14" y2="9.5" /></svg>',
            plus: '<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg"> <rect x="9" y="1" width="1" height="17" /> <rect x="1" y="9" width="17" height="1" /></svg>',
            pull: '<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg"> <polygon points="6.85,8 9.5,10.6 12.15,8 12.85,8.7 9.5,12 6.15,8.7" /> <line fill="none" stroke="#000" x1="9.5" y1="11" x2="9.5" y2="2" /> <polyline fill="none" stroke="#000" points="6,5.5 3.5,5.5 3.5,18.5 15.5,18.5 15.5,5.5 13,5.5" /></svg>',
            push: '<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg"> <polygon points="12.15,4 9.5,1.4 6.85,4 6.15,3.3 9.5,0 12.85,3.3" /> <line fill="none" stroke="#000" x1="9.5" y1="10" x2="9.5" y2="1" /> <polyline fill="none" stroke="#000" points="6 5.5 3.5 5.5 3.5 18.5 15.5 18.5 15.5 5.5 13 5.5" /></svg>',
            question: '<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg"> <circle fill="none" stroke="#000" stroke-width="1.1" cx="10" cy="10" r="9" /> <circle cx="10.44" cy="14.42" r="1.05" /> <path fill="none" stroke="#000" stroke-width="1.2" d="M8.17,7.79 C8.17,4.75 12.72,4.73 12.72,7.72 C12.72,8.67 11.81,9.15 11.23,9.75 C10.75,10.24 10.51,10.73 10.45,11.4 C10.44,11.53 10.43,11.64 10.43,11.75" /></svg>',
            "quote-right": '<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg"> <path d="M17.27,7.79 C17.27,9.45 16.97,10.43 15.99,12.02 C14.98,13.64 13,15.23 11.56,15.97 L11.1,15.08 C12.34,14.2 13.14,13.51 14.02,11.82 C14.27,11.34 14.41,10.92 14.49,10.54 C14.3,10.58 14.09,10.6 13.88,10.6 C12.06,10.6 10.59,9.12 10.59,7.3 C10.59,5.48 12.06,4 13.88,4 C15.39,4 16.67,5.02 17.05,6.42 C17.19,6.82 17.27,7.27 17.27,7.79 L17.27,7.79 Z" /> <path d="M8.68,7.79 C8.68,9.45 8.38,10.43 7.4,12.02 C6.39,13.64 4.41,15.23 2.97,15.97 L2.51,15.08 C3.75,14.2 4.55,13.51 5.43,11.82 C5.68,11.34 5.82,10.92 5.9,10.54 C5.71,10.58 5.5,10.6 5.29,10.6 C3.47,10.6 2,9.12 2,7.3 C2,5.48 3.47,4 5.29,4 C6.8,4 8.08,5.02 8.46,6.42 C8.6,6.82 8.68,7.27 8.68,7.79 L8.68,7.79 Z" /></svg>',
            receiver: '<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg"> <path fill="none" stroke="#000" stroke-width="1.01" d="M6.189,13.611C8.134,15.525 11.097,18.239 13.867,18.257C16.47,18.275 18.2,16.241 18.2,16.241L14.509,12.551L11.539,13.639L6.189,8.29L7.313,5.355L3.76,1.8C3.76,1.8 1.732,3.537 1.7,6.092C1.667,8.809 4.347,11.738 6.189,13.611" /></svg>',
            refresh: '<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg"> <path fill="none" stroke="#000" stroke-width="1.1" d="M17.08,11.15 C17.09,11.31 17.1,11.47 17.1,11.64 C17.1,15.53 13.94,18.69 10.05,18.69 C6.16,18.68 3,15.53 3,11.63 C3,7.74 6.16,4.58 10.05,4.58 C10.9,4.58 11.71,4.73 12.46,5" /> <polyline fill="none" stroke="#000" points="9.9 2 12.79 4.89 9.79 7.9" /></svg>',
            reply: '<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg"> <path d="M17.7,13.11 C16.12,10.02 13.84,7.85 11.02,6.61 C10.57,6.41 9.75,6.13 9,5.91 L9,2 L1,9 L9,16 L9,12.13 C10.78,12.47 12.5,13.19 14.09,14.25 C17.13,16.28 18.56,18.54 18.56,18.54 C18.56,18.54 18.81,15.28 17.7,13.11 L17.7,13.11 Z M14.82,13.53 C13.17,12.4 11.01,11.4 8,10.92 L8,13.63 L2.55,9 L8,4.25 L8,6.8 C8.3,6.86 9.16,7.02 10.37,7.49 C13.3,8.65 15.54,10.96 16.65,13.08 C16.97,13.7 17.48,14.86 17.68,16 C16.87,15.05 15.73,14.15 14.82,13.53 L14.82,13.53 Z" /></svg>',
            rss: '<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg"> <circle cx="3.12" cy="16.8" r="1.85" /> <path fill="none" stroke="#000" stroke-width="1.1" d="M1.5,8.2 C1.78,8.18 2.06,8.16 2.35,8.16 C7.57,8.16 11.81,12.37 11.81,17.57 C11.81,17.89 11.79,18.19 11.76,18.5" /> <path fill="none" stroke="#000" stroke-width="1.1" d="M1.5,2.52 C1.78,2.51 2.06,2.5 2.35,2.5 C10.72,2.5 17.5,9.24 17.5,17.57 C17.5,17.89 17.49,18.19 17.47,18.5" /></svg>',
            search: '<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg"> <circle fill="none" stroke="#000" stroke-width="1.1" cx="9" cy="9" r="7" /> <path fill="none" stroke="#000" stroke-width="1.1" d="M14,14 L18,18 L14,14 Z" /></svg>',
            server: '<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg"> <rect x="3" y="3" width="1" height="2" /> <rect x="5" y="3" width="1" height="2" /> <rect x="7" y="3" width="1" height="2" /> <rect x="16" y="3" width="1" height="1" /> <rect x="16" y="10" width="1" height="1" /> <circle fill="none" stroke="#000" cx="9.9" cy="17.4" r="1.4" /> <rect x="3" y="10" width="1" height="2" /> <rect x="5" y="10" width="1" height="2" /> <rect x="9.5" y="14" width="1" height="2" /> <rect x="3" y="17" width="6" height="1" /> <rect x="11" y="17" width="6" height="1" /> <rect fill="none" stroke="#000" x="1.5" y="1.5" width="17" height="5" /> <rect fill="none" stroke="#000" x="1.5" y="8.5" width="17" height="5" /></svg>',
            settings: '<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg"> <ellipse fill="none" stroke="#000" cx="6.11" cy="3.55" rx="2.11" ry="2.15" /> <ellipse fill="none" stroke="#000" cx="6.11" cy="15.55" rx="2.11" ry="2.15" /> <circle fill="none" stroke="#000" cx="13.15" cy="9.55" r="2.15" /> <rect x="1" y="3" width="3" height="1" /> <rect x="10" y="3" width="8" height="1" /> <rect x="1" y="9" width="8" height="1" /> <rect x="15" y="9" width="3" height="1" /> <rect x="1" y="15" width="3" height="1" /> <rect x="10" y="15" width="8" height="1" /></svg>',
            shrink: '<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg"> <polygon points="11 4 12 4 12 8 16 8 16 9 11 9" /> <polygon points="4 11 9 11 9 16 8 16 8 12 4 12" /> <path fill="none" stroke="#000" stroke-width="1.1" d="M12,8 L18,2" /> <path fill="none" stroke="#000" stroke-width="1.1" d="M2,18 L8,12" /></svg>',
            "sign-in": '<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg"> <polygon points="7 2 17 2 17 17 7 17 7 16 16 16 16 3 7 3" /> <polygon points="9.1 13.4 8.5 12.8 11.28 10 4 10 4 9 11.28 9 8.5 6.2 9.1 5.62 13 9.5" /></svg>',
            "sign-out": '<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg"> <polygon points="13.1 13.4 12.5 12.8 15.28 10 8 10 8 9 15.28 9 12.5 6.2 13.1 5.62 17 9.5" /> <polygon points="13 2 3 2 3 17 13 17 13 16 4 16 4 3 13 3" /></svg>',
            social: '<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg"> <line fill="none" stroke="#000" stroke-width="1.1" x1="13.4" y1="14" x2="6.3" y2="10.7" /> <line fill="none" stroke="#000" stroke-width="1.1" x1="13.5" y1="5.5" x2="6.5" y2="8.8" /> <circle fill="none" stroke="#000" stroke-width="1.1" cx="15.5" cy="4.6" r="2.3" /> <circle fill="none" stroke="#000" stroke-width="1.1" cx="15.5" cy="14.8" r="2.3" /> <circle fill="none" stroke="#000" stroke-width="1.1" cx="4.5" cy="9.8" r="2.3" /></svg>',
            soundcloud: '<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg"> <path d="M17.2,9.4c-0.4,0-0.8,0.1-1.101,0.2c-0.199-2.5-2.399-4.5-5-4.5c-0.6,0-1.2,0.1-1.7,0.3C9.2,5.5,9.1,5.6,9.1,5.6V15h8 c1.601,0,2.801-1.2,2.801-2.8C20,10.7,18.7,9.4,17.2,9.4L17.2,9.4z" /> <rect x="6" y="6.5" width="1.5" height="8.5" /> <rect x="3" y="8" width="1.5" height="7" /> <rect y="10" width="1.5" height="5" /></svg>',
            star: '<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg"> <polygon fill="none" stroke="#000" stroke-width="1.01" points="10 2 12.63 7.27 18.5 8.12 14.25 12.22 15.25 18 10 15.27 4.75 18 5.75 12.22 1.5 8.12 7.37 7.27" /></svg>',
            strikethrough: '<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg"> <path d="M6,13.02 L6.65,13.02 C7.64,15.16 8.86,16.12 10.41,16.12 C12.22,16.12 12.92,14.93 12.92,13.89 C12.92,12.55 11.99,12.03 9.74,11.23 C8.05,10.64 6.23,10.11 6.23,7.83 C6.23,5.5 8.09,4.09 10.4,4.09 C11.44,4.09 12.13,4.31 12.72,4.54 L13.33,4 L13.81,4 L13.81,7.59 L13.16,7.59 C12.55,5.88 11.52,4.89 10.07,4.89 C8.84,4.89 7.89,5.69 7.89,7.03 C7.89,8.29 8.89,8.78 10.88,9.45 C12.57,10.03 14.38,10.6 14.38,12.91 C14.38,14.75 13.27,16.93 10.18,16.93 C9.18,16.93 8.17,16.69 7.46,16.39 L6.52,17 L6,17 L6,13.02 L6,13.02 Z" /> <rect x="3" y="10" width="15" height="1" /></svg>',
            table: '<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg"> <rect x="1" y="3" width="18" height="1" /> <rect x="1" y="7" width="18" height="1" /> <rect x="1" y="11" width="18" height="1" /> <rect x="1" y="15" width="18" height="1" /></svg>',
            "tablet-landscape": '<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg"> <path fill="none" stroke="#000" d="M1.5,5 C1.5,4.2 2.2,3.5 3,3.5 L17,3.5 C17.8,3.5 18.5,4.2 18.5,5 L18.5,16 C18.5,16.8 17.8,17.5 17,17.5 L3,17.5 C2.2,17.5 1.5,16.8 1.5,16 L1.5,5 L1.5,5 L1.5,5 Z" /> <circle cx="3.7" cy="10.5" r="0.8" /></svg>',
            tablet: '<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg"> <path fill="none" stroke="#000" d="M5,18.5 C4.2,18.5 3.5,17.8 3.5,17 L3.5,3 C3.5,2.2 4.2,1.5 5,1.5 L16,1.5 C16.8,1.5 17.5,2.2 17.5,3 L17.5,17 C17.5,17.8 16.8,18.5 16,18.5 L5,18.5 L5,18.5 L5,18.5 Z" /> <circle cx="10.5" cy="16.3" r="0.8" /></svg>',
            tag: '<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg"> <path fill="none" stroke="#000" stroke-width="1.1" d="M17.5,3.71 L17.5,7.72 C17.5,7.96 17.4,8.2 17.21,8.39 L8.39,17.2 C7.99,17.6 7.33,17.6 6.93,17.2 L2.8,13.07 C2.4,12.67 2.4,12.01 2.8,11.61 L11.61,2.8 C11.81,2.6 12.08,2.5 12.34,2.5 L16.19,2.5 C16.52,2.5 16.86,2.63 17.11,2.88 C17.35,3.11 17.48,3.4 17.5,3.71 L17.5,3.71 Z" /> <circle cx="14" cy="6" r="1" /></svg>',
            thumbnails: '<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg"> <rect fill="none" stroke="#000" x="3.5" y="3.5" width="5" height="5" /> <rect fill="none" stroke="#000" x="11.5" y="3.5" width="5" height="5" /> <rect fill="none" stroke="#000" x="11.5" y="11.5" width="5" height="5" /> <rect fill="none" stroke="#000" x="3.5" y="11.5" width="5" height="5" /></svg>',
            trash: '<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg"> <polyline fill="none" stroke="#000" points="6.5 3 6.5 1.5 13.5 1.5 13.5 3" /> <polyline fill="none" stroke="#000" points="4.5 4 4.5 18.5 15.5 18.5 15.5 4" /> <rect x="8" y="7" width="1" height="9" /> <rect x="11" y="7" width="1" height="9" /> <rect x="2" y="3" width="16" height="1" /></svg>',
            "triangle-down": '<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg"> <polygon points="5 7 15 7 10 12" /></svg>',
            "triangle-left": '<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg"> <polygon points="12 5 7 10 12 15" /></svg>',
            "triangle-right": '<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg"> <polygon points="8 5 13 10 8 15" /></svg>',
            "triangle-up": '<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg"> <polygon points="5 13 10 8 15 13" /></svg>',
            tripadvisor: '<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg"> <path d="M19.021,7.866C19.256,6.862,20,5.854,20,5.854h-3.346C14.781,4.641,12.504,4,9.98,4C7.363,4,4.999,4.651,3.135,5.876H0\tc0,0,0.738,0.987,0.976,1.988c-0.611,0.837-0.973,1.852-0.973,2.964c0,2.763,2.249,5.009,5.011,5.009\tc1.576,0,2.976-0.737,3.901-1.879l1.063,1.599l1.075-1.615c0.475,0.611,1.1,1.111,1.838,1.451c1.213,0.547,2.574,0.612,3.825,0.15\tc2.589-0.963,3.913-3.852,2.964-6.439c-0.175-0.463-0.4-0.876-0.675-1.238H19.021z M16.38,14.594\tc-1.002,0.371-2.088,0.328-3.06-0.119c-0.688-0.317-1.252-0.817-1.657-1.438c-0.164-0.25-0.313-0.52-0.417-0.811\tc-0.124-0.328-0.186-0.668-0.217-1.014c-0.063-0.689,0.037-1.396,0.339-2.043c0.448-0.971,1.251-1.71,2.25-2.079\tc2.075-0.765,4.375,0.3,5.14,2.366c0.762,2.066-0.301,4.37-2.363,5.134L16.38,14.594L16.38,14.594z M8.322,13.066\tc-0.72,1.059-1.935,1.76-3.309,1.76c-2.207,0-4.001-1.797-4.001-3.996c0-2.203,1.795-4.002,4.001-4.002\tc2.204,0,3.999,1.8,3.999,4.002c0,0.137-0.024,0.261-0.04,0.396c-0.067,0.678-0.284,1.313-0.648,1.853v-0.013H8.322z M2.472,10.775\tc0,1.367,1.112,2.479,2.476,2.479c1.363,0,2.472-1.11,2.472-2.479c0-1.359-1.11-2.468-2.472-2.468\tC3.584,8.306,2.473,9.416,2.472,10.775L2.472,10.775z M12.514,10.775c0,1.367,1.104,2.479,2.471,2.479\tc1.363,0,2.474-1.108,2.474-2.479c0-1.359-1.11-2.468-2.474-2.468c-1.364,0-2.477,1.109-2.477,2.468H12.514z M3.324,10.775\tc0-0.893,0.726-1.618,1.614-1.618c0.889,0,1.625,0.727,1.625,1.618c0,0.898-0.725,1.627-1.625,1.627\tc-0.901,0-1.625-0.729-1.625-1.627H3.324z M13.354,10.775c0-0.893,0.726-1.618,1.627-1.618c0.886,0,1.61,0.727,1.61,1.618\tc0,0.898-0.726,1.627-1.626,1.627s-1.625-0.729-1.625-1.627H13.354z M9.977,4.875c1.798,0,3.425,0.324,4.849,0.968\tc-0.535,0.015-1.061,0.108-1.586,0.3c-1.264,0.463-2.264,1.388-2.815,2.604c-0.262,0.551-0.398,1.133-0.448,1.72\tC9.79,7.905,7.677,5.873,5.076,5.82C6.501,5.208,8.153,4.875,9.94,4.875H9.977z" /></svg>',
            tumblr: '<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg"> <path d="M6.885,8.598c0,0,0,3.393,0,4.996c0,0.282,0,0.66,0.094,0.942c0.377,1.509,1.131,2.545,2.545,3.11 c1.319,0.472,2.356,0.472,3.676,0c0.565-0.188,1.132-0.659,1.132-0.659l-0.849-2.263c0,0-1.036,0.378-1.603,0.283 c-0.565-0.094-1.226-0.66-1.226-1.508c0-1.603,0-4.902,0-4.902h2.828V5.771h-2.828V2H8.205c0,0-0.094,0.66-0.188,0.942 C7.828,3.791,7.262,4.733,6.603,5.394C5.848,6.147,5,6.43,5,6.43v2.168H6.885z" /></svg>',
            tv: '<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg"> <rect x="7" y="16" width="6" height="1" /> <rect fill="none" stroke="#000" x="0.5" y="3.5" width="19" height="11" /></svg>',
            twitter: '<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg"> <path d="M19,4.74 C18.339,5.029 17.626,5.229 16.881,5.32 C17.644,4.86 18.227,4.139 18.503,3.28 C17.79,3.7 17.001,4.009 16.159,4.17 C15.485,3.45 14.526,3 13.464,3 C11.423,3 9.771,4.66 9.771,6.7 C9.771,6.99 9.804,7.269 9.868,7.539 C6.795,7.38 4.076,5.919 2.254,3.679 C1.936,4.219 1.754,4.86 1.754,5.539 C1.754,6.82 2.405,7.95 3.397,8.61 C2.79,8.589 2.22,8.429 1.723,8.149 L1.723,8.189 C1.723,9.978 2.997,11.478 4.686,11.82 C4.376,11.899 4.049,11.939 3.713,11.939 C3.475,11.939 3.245,11.919 3.018,11.88 C3.49,13.349 4.852,14.419 6.469,14.449 C5.205,15.429 3.612,16.019 1.882,16.019 C1.583,16.019 1.29,16.009 1,15.969 C2.635,17.019 4.576,17.629 6.662,17.629 C13.454,17.629 17.17,12 17.17,7.129 C17.17,6.969 17.166,6.809 17.157,6.649 C17.879,6.129 18.504,5.478 19,4.74" /></svg>',
            uikit: '<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg"> <polygon points="14.4,3.1 11.3,5.1 15,7.3 15,12.9 10,15.7 5,12.9 5,8.5 2,6.8 2,14.8 9.9,19.5 18,14.8 18,5.3" /> <polygon points="9.8,4.2 6.7,2.4 9.8,0.4 12.9,2.3" /></svg>',
            unlock: '<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg"> <rect fill="none" stroke="#000" x="3.5" y="8.5" width="13" height="10" /> <path fill="none" stroke="#000" d="M6.5,8.5 L6.5,4.9 C6.5,3 8.1,1.5 10,1.5 C11.9,1.5 13.5,3 13.5,4.9" /></svg>',
            upload: '<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg"> <polyline fill="none" stroke="#000" points="5 8 9.5 3.5 14 8 " /> <rect x="3" y="17" width="13" height="1" /> <line fill="none" stroke="#000" x1="9.5" y1="15" x2="9.5" y2="4" /></svg>',
            user: '<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg"> <circle fill="none" stroke="#000" stroke-width="1.1" cx="9.9" cy="6.4" r="4.4" /> <path fill="none" stroke="#000" stroke-width="1.1" d="M1.5,19 C2.3,14.5 5.8,11.2 10,11.2 C14.2,11.2 17.7,14.6 18.5,19.2" /></svg>',
            users: '<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg"> <circle fill="none" stroke="#000" stroke-width="1.1" cx="7.7" cy="8.6" r="3.5" /> <path fill="none" stroke="#000" stroke-width="1.1" d="M1,18.1 C1.7,14.6 4.4,12.1 7.6,12.1 C10.9,12.1 13.7,14.8 14.3,18.3" /> <path fill="none" stroke="#000" stroke-width="1.1" d="M11.4,4 C12.8,2.4 15.4,2.8 16.3,4.7 C17.2,6.6 15.7,8.9 13.6,8.9 C16.5,8.9 18.8,11.3 19.2,14.1" /></svg>',
            "video-camera": '<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg"> <polygon points="18,6 18,14 12,10 " /> <rect x="2" y="5" width="12" height="10" /></svg>',
            vimeo: '<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg"> <path d="M2.065,7.59C1.84,7.367,1.654,7.082,1.468,6.838c-0.332-0.42-0.137-0.411,0.274-0.772c1.026-0.91,2.004-1.896,3.127-2.688 c1.017-0.713,2.365-1.173,3.286-0.039c0.849,1.045,0.869,2.629,1.084,3.891c0.215,1.309,0.421,2.648,0.88,3.901 c0.127,0.352,0.37,1.018,0.81,1.074c0.567,0.078,1.145-0.917,1.408-1.289c0.684-0.987,1.611-2.317,1.494-3.587 c-0.115-1.349-1.572-1.095-2.482-0.773c0.146-1.514,1.555-3.216,2.912-3.792c1.439-0.597,3.579-0.587,4.302,1.036 c0.772,1.759,0.078,3.802-0.763,5.396c-0.918,1.731-2.1,3.333-3.363,4.829c-1.114,1.329-2.432,2.787-4.093,3.422 c-1.897,0.723-3.021-0.686-3.667-2.318c-0.705-1.777-1.056-3.771-1.565-5.621C4.898,8.726,4.644,7.836,4.136,7.191 C3.473,6.358,2.72,7.141,2.065,7.59C1.977,7.502,2.115,7.551,2.065,7.59L2.065,7.59z" /></svg>',
            warning: '<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg"> <circle cx="10" cy="14" r="1" /> <circle fill="none" stroke="#000" stroke-width="1.1" cx="10" cy="10" r="9" /> <path d="M10.97,7.72 C10.85,9.54 10.56,11.29 10.56,11.29 C10.51,11.87 10.27,12 9.99,12 C9.69,12 9.49,11.87 9.43,11.29 C9.43,11.29 9.16,9.54 9.03,7.72 C8.96,6.54 9.03,6 9.03,6 C9.03,5.45 9.46,5.02 9.99,5 C10.53,5.01 10.97,5.44 10.97,6 C10.97,6 11.04,6.54 10.97,7.72 L10.97,7.72 Z" /></svg>',
            whatsapp: '<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg"> <path d="M16.7,3.3c-1.8-1.8-4.1-2.8-6.7-2.8c-5.2,0-9.4,4.2-9.4,9.4c0,1.7,0.4,3.3,1.3,4.7l-1.3,4.9l5-1.3c1.4,0.8,2.9,1.2,4.5,1.2 l0,0l0,0c5.2,0,9.4-4.2,9.4-9.4C19.5,7.4,18.5,5,16.7,3.3 M10.1,17.7L10.1,17.7c-1.4,0-2.8-0.4-4-1.1l-0.3-0.2l-3,0.8l0.8-2.9 l-0.2-0.3c-0.8-1.2-1.2-2.7-1.2-4.2c0-4.3,3.5-7.8,7.8-7.8c2.1,0,4.1,0.8,5.5,2.3c1.5,1.5,2.3,3.4,2.3,5.5 C17.9,14.2,14.4,17.7,10.1,17.7 M14.4,11.9c-0.2-0.1-1.4-0.7-1.6-0.8c-0.2-0.1-0.4-0.1-0.5,0.1c-0.2,0.2-0.6,0.8-0.8,0.9 c-0.1,0.2-0.3,0.2-0.5,0.1c-0.2-0.1-1-0.4-1.9-1.2c-0.7-0.6-1.2-1.4-1.3-1.6c-0.1-0.2,0-0.4,0.1-0.5C8,8.8,8.1,8.7,8.2,8.5 c0.1-0.1,0.2-0.2,0.2-0.4c0.1-0.2,0-0.3,0-0.4C8.4,7.6,7.9,6.5,7.7,6C7.5,5.5,7.3,5.6,7.2,5.6c-0.1,0-0.3,0-0.4,0 c-0.2,0-0.4,0.1-0.6,0.3c-0.2,0.2-0.8,0.8-0.8,2c0,1.2,0.8,2.3,1,2.4c0.1,0.2,1.7,2.5,4,3.5c0.6,0.2,1,0.4,1.3,0.5 c0.6,0.2,1.1,0.2,1.5,0.1c0.5-0.1,1.4-0.6,1.6-1.1c0.2-0.5,0.2-1,0.1-1.1C14.8,12.1,14.6,12,14.4,11.9" /></svg>',
            wordpress: '<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg"> <path d="M10,0.5c-5.2,0-9.5,4.3-9.5,9.5s4.3,9.5,9.5,9.5c5.2,0,9.5-4.3,9.5-9.5S15.2,0.5,10,0.5L10,0.5L10,0.5z M15.6,3.9h-0.1 c-0.8,0-1.4,0.7-1.4,1.5c0,0.7,0.4,1.3,0.8,1.9c0.3,0.6,0.7,1.3,0.7,2.3c0,0.7-0.3,1.5-0.6,2.7L14.1,15l-3-8.9 c0.5,0,0.9-0.1,0.9-0.1C12.5,6,12.5,5.3,12,5.4c0,0-1.3,0.1-2.2,0.1C9,5.5,7.7,5.4,7.7,5.4C7.2,5.3,7.2,6,7.6,6c0,0,0.4,0.1,0.9,0.1 l1.3,3.5L8,15L5,6.1C5.5,6.1,5.9,6,5.9,6C6.4,6,6.3,5.3,5.9,5.4c0,0-1.3,0.1-2.2,0.1c-0.2,0-0.3,0-0.5,0c1.5-2.2,4-3.7,6.9-3.7 C12.2,1.7,14.1,2.6,15.6,3.9L15.6,3.9L15.6,3.9z M2.5,6.6l3.9,10.8c-2.7-1.3-4.6-4.2-4.6-7.4C1.8,8.8,2,7.6,2.5,6.6L2.5,6.6L2.5,6.6 z M10.2,10.7l2.5,6.9c0,0,0,0.1,0.1,0.1C11.9,18,11,18.2,10,18.2c-0.8,0-1.6-0.1-2.3-0.3L10.2,10.7L10.2,10.7L10.2,10.7z M14.2,17.1 l2.5-7.3c0.5-1.2,0.6-2.1,0.6-2.9c0-0.3,0-0.6-0.1-0.8c0.6,1.2,1,2.5,1,4C18.3,13,16.6,15.7,14.2,17.1L14.2,17.1L14.2,17.1z" /></svg>',
            world: '<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg"> <path fill="none" stroke="#000" d="M1,10.5 L19,10.5" /> <path fill="none" stroke="#000" d="M2.35,15.5 L17.65,15.5" /> <path fill="none" stroke="#000" d="M2.35,5.5 L17.523,5.5" /> <path fill="none" stroke="#000" d="M10,19.46 L9.98,19.46 C7.31,17.33 5.61,14.141 5.61,10.58 C5.61,7.02 7.33,3.83 10,1.7 C10.01,1.7 9.99,1.7 10,1.7 L10,1.7 C12.67,3.83 14.4,7.02 14.4,10.58 C14.4,14.141 12.67,17.33 10,19.46 L10,19.46 L10,19.46 L10,19.46 Z" /> <circle fill="none" stroke="#000" cx="10" cy="10.5" r="9" /></svg>',
            xing: '<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg"> <path d="M4.4,4.56 C4.24,4.56 4.11,4.61 4.05,4.72 C3.98,4.83 3.99,4.97 4.07,5.12 L5.82,8.16 L5.82,8.17 L3.06,13.04 C2.99,13.18 2.99,13.33 3.06,13.44 C3.12,13.55 3.24,13.62 3.4,13.62 L6,13.62 C6.39,13.62 6.57,13.36 6.71,13.12 C6.71,13.12 9.41,8.35 9.51,8.16 C9.49,8.14 7.72,5.04 7.72,5.04 C7.58,4.81 7.39,4.56 6.99,4.56 L4.4,4.56 L4.4,4.56 Z" /> <path d="M15.3,1 C14.91,1 14.74,1.25 14.6,1.5 C14.6,1.5 9.01,11.42 8.82,11.74 C8.83,11.76 12.51,18.51 12.51,18.51 C12.64,18.74 12.84,19 13.23,19 L15.82,19 C15.98,19 16.1,18.94 16.16,18.83 C16.23,18.72 16.23,18.57 16.16,18.43 L12.5,11.74 L12.5,11.72 L18.25,1.56 C18.32,1.42 18.32,1.27 18.25,1.16 C18.21,1.06 18.08,1 17.93,1 L15.3,1 L15.3,1 Z" /></svg>',
            yelp: '<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg"> <path d="M17.175,14.971c-0.112,0.77-1.686,2.767-2.406,3.054c-0.246,0.1-0.487,0.076-0.675-0.069\tc-0.122-0.096-2.446-3.859-2.446-3.859c-0.194-0.293-0.157-0.682,0.083-0.978c0.234-0.284,0.581-0.393,0.881-0.276\tc0.016,0.01,4.21,1.394,4.332,1.482c0.178,0.148,0.263,0.379,0.225,0.646L17.175,14.971L17.175,14.971z M11.464,10.789\tc-0.203-0.307-0.199-0.666,0.009-0.916c0,0,2.625-3.574,2.745-3.657c0.203-0.135,0.452-0.141,0.69-0.025\tc0.691,0.335,2.085,2.405,2.167,3.199v0.027c0.024,0.271-0.082,0.491-0.273,0.623c-0.132,0.083-4.43,1.155-4.43,1.155\tc-0.322,0.096-0.68-0.06-0.882-0.381L11.464,10.789z M9.475,9.563C9.32,9.609,8.848,9.757,8.269,8.817c0,0-3.916-6.16-4.007-6.351\tc-0.057-0.212,0.011-0.455,0.202-0.65C5.047,1.211,8.21,0.327,9.037,0.529c0.27,0.069,0.457,0.238,0.522,0.479\tc0.047,0.266,0.433,5.982,0.488,7.264C10.098,9.368,9.629,9.517,9.475,9.563z M9.927,19.066c-0.083,0.225-0.273,0.373-0.54,0.421\tc-0.762,0.13-3.15-0.751-3.647-1.342c-0.096-0.131-0.155-0.262-0.167-0.394c-0.011-0.095,0-0.189,0.036-0.272\tc0.061-0.155,2.917-3.538,2.917-3.538c0.214-0.272,0.595-0.355,0.952-0.213c0.345,0.13,0.56,0.428,0.536,0.749\tC10.014,14.479,9.977,18.923,9.927,19.066z M3.495,13.912c-0.235-0.009-0.444-0.148-0.568-0.382c-0.089-0.17-0.151-0.453-0.19-0.794\tC2.63,11.701,2.761,10.144,3.07,9.648c0.145-0.226,0.357-0.345,0.592-0.336c0.154,0,4.255,1.667,4.255,1.667\tc0.321,0.118,0.521,0.453,0.5,0.833c-0.023,0.37-0.236,0.655-0.551,0.738L3.495,13.912z" /></svg>',
            youtube: '<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg"> <path d="M15,4.1c1,0.1,2.3,0,3,0.8c0.8,0.8,0.9,2.1,0.9,3.1C19,9.2,19,10.9,19,12c-0.1,1.1,0,2.4-0.5,3.4c-0.5,1.1-1.4,1.5-2.5,1.6 c-1.2,0.1-8.6,0.1-11,0c-1.1-0.1-2.4-0.1-3.2-1c-0.7-0.8-0.7-2-0.8-3C1,11.8,1,10.1,1,8.9c0-1.1,0-2.4,0.5-3.4C2,4.5,3,4.3,4.1,4.2 C5.3,4.1,12.6,4,15,4.1z M8,7.5v6l5.5-3L8,7.5z" /></svg>'
        });
    }
    if (typeof window !== "undefined" && window.UIkit) {
        window.UIkit.use(plugin);
    }
    return plugin;
});

(function() {
    "use strict";
    var _$JSONLoader_2 = {
        load: load
    };
    function load(location, callback) {
        var xhr = getXHR();
        xhr.open("GET", location, true);
        xhr.onreadystatechange = createStateChangeListener(xhr, callback);
        xhr.send();
    }
    function createStateChangeListener(xhr, callback) {
        return function() {
            if (xhr.readyState === 4 && xhr.status === 200) {
                try {
                    callback(null, JSON.parse(xhr.responseText));
                } catch (err) {
                    callback(err, null);
                }
            }
        };
    }
    function getXHR() {
        return window.XMLHttpRequest ? new window.XMLHttpRequest() : new ActiveXObject("Microsoft.XMLHTTP");
    }
    "use strict";
    var _$OptionsValidator_3 = function OptionsValidator(params) {
        if (!validateParams(params)) {
            throw new Error("-- OptionsValidator: required options missing");
        }
        if (!(this instanceof OptionsValidator)) {
            return new OptionsValidator(params);
        }
        var requiredOptions = params.required;
        this.getRequiredOptions = function() {
            return requiredOptions;
        };
        this.validate = function(parameters) {
            var errors = [];
            requiredOptions.forEach(function(requiredOptionName) {
                if (typeof parameters[requiredOptionName] === "undefined") {
                    errors.push(requiredOptionName);
                }
            });
            return errors;
        };
        function validateParams(params) {
            if (!params) {
                return false;
            }
            return typeof params.required !== "undefined" && params.required instanceof Array;
        }
    };
    "use strict";
    function fuzzysearch(needle, haystack) {
        var tlen = haystack.length;
        var qlen = needle.length;
        if (qlen > tlen) {
            return false;
        }
        if (qlen === tlen) {
            return needle === haystack;
        }
        outer: for (var i = 0, j = 0; i < qlen; i++) {
            var nch = needle.charCodeAt(i);
            while (j < tlen) {
                if (haystack.charCodeAt(j++) === nch) {
                    continue outer;
                }
            }
            return false;
        }
        return true;
    }
    var _$fuzzysearch_1 = fuzzysearch;
    "use strict";
    var _$FuzzySearchStrategy_5 = new FuzzySearchStrategy();
    function FuzzySearchStrategy() {
        this.matches = function(string, crit) {
            return _$fuzzysearch_1(crit.toLowerCase(), string.toLowerCase());
        };
    }
    "use strict";
    var _$LiteralSearchStrategy_6 = new LiteralSearchStrategy();
    function LiteralSearchStrategy() {
        this.matches = function(str, crit) {
            if (!str) return false;
            str = str.trim().toLowerCase();
            crit = crit.toLowerCase();
            return crit.split(" ").filter(function(word) {
                return str.indexOf(word) >= 0;
            }).length > 0;
        };
    }
    "use strict";
    var _$Repository_4 = {
        put: put,
        clear: clear,
        search: search,
        setOptions: setOptions
    };
    function NoSort() {
        return 0;
    }
    var data = [];
    var opt = {};
    opt.fuzzy = false;
    opt.limit = 10;
    opt.searchStrategy = opt.fuzzy ? _$FuzzySearchStrategy_5 : _$LiteralSearchStrategy_6;
    opt.sort = NoSort;
    function put(data) {
        if (isObject(data)) {
            return addObject(data);
        }
        if (isArray(data)) {
            return addArray(data);
        }
        return undefined;
    }
    function clear() {
        data.length = 0;
        return data;
    }
    function isObject(obj) {
        return Boolean(obj) && Object.prototype.toString.call(obj) === "[object Object]";
    }
    function isArray(obj) {
        return Boolean(obj) && Object.prototype.toString.call(obj) === "[object Array]";
    }
    function addObject(_data) {
        data.push(_data);
        return data;
    }
    function addArray(_data) {
        var added = [];
        clear();
        for (var i = 0, len = _data.length; i < len; i++) {
            if (isObject(_data[i])) {
                added.push(addObject(_data[i]));
            }
        }
        return added;
    }
    function search(crit) {
        if (!crit) {
            return [];
        }
        return findMatches(data, crit, opt.searchStrategy, opt).sort(opt.sort);
    }
    function setOptions(_opt) {
        opt = _opt || {};
        opt.fuzzy = _opt.fuzzy || false;
        opt.limit = _opt.limit || 10;
        opt.searchStrategy = _opt.fuzzy ? _$FuzzySearchStrategy_5 : _$LiteralSearchStrategy_6;
        opt.sort = _opt.sort || NoSort;
    }
    function findMatches(data, crit, strategy, opt) {
        var matches = [];
        for (var i = 0; i < data.length && matches.length < opt.limit; i++) {
            var match = findMatchesInObject(data[i], crit, strategy, opt);
            if (match) {
                matches.push(match);
            }
        }
        return matches;
    }
    function findMatchesInObject(obj, crit, strategy, opt) {
        for (var key in obj) {
            if (!isExcluded(obj[key], opt.exclude) && strategy.matches(obj[key], crit)) {
                return obj;
            }
        }
    }
    function isExcluded(term, excludedTerms) {
        var excluded = false;
        excludedTerms = excludedTerms || [];
        for (var i = 0, len = excludedTerms.length; i < len; i++) {
            var excludedTerm = excludedTerms[i];
            if (!excluded && new RegExp(term).test(excludedTerm)) {
                excluded = true;
            }
        }
        return excluded;
    }
    "use strict";
    var _$Templater_7 = {
        compile: compile,
        setOptions: __setOptions_7
    };
    var options = {};
    options.pattern = /\{(.*?)\}/g;
    options.template = "";
    options.middleware = function() {};
    function __setOptions_7(_options) {
        options.pattern = _options.pattern || options.pattern;
        options.template = _options.template || options.template;
        if (typeof _options.middleware === "function") {
            options.middleware = _options.middleware;
        }
    }
    function compile(data) {
        return options.template.replace(options.pattern, function(match, prop) {
            var value = options.middleware(prop, data[prop], options.template);
            if (typeof value !== "undefined") {
                return value;
            }
            return data[prop] || match;
        });
    }
    "use strict";
    var _$utils_9 = {
        merge: merge,
        isJSON: isJSON
    };
    function merge(defaultParams, mergeParams) {
        var mergedOptions = {};
        for (var option in defaultParams) {
            mergedOptions[option] = defaultParams[option];
            if (typeof mergeParams[option] !== "undefined") {
                mergedOptions[option] = mergeParams[option];
            }
        }
        return mergedOptions;
    }
    function isJSON(json) {
        try {
            if (json instanceof Object && JSON.parse(JSON.stringify(json))) {
                return true;
            }
            return false;
        } catch (err) {
            return false;
        }
    }
    var _$src_8 = {};
    (function(window) {
        "use strict";
        var options = {
            searchInput: null,
            resultsContainer: null,
            json: [],
            success: Function.prototype,
            searchResultTemplate: '<li><a href="{url}" title="{desc}">{title}</a></li>',
            templateMiddleware: Function.prototype,
            sortMiddleware: function() {
                return 0;
            },
            noResultsText: "No results found",
            limit: 10,
            fuzzy: false,
            exclude: []
        };
        var requiredOptions = [ "searchInput", "resultsContainer", "json" ];
        var optionsValidator = _$OptionsValidator_3({
            required: requiredOptions
        });
        window.SimpleJekyllSearch = function(_options) {
            var errors = optionsValidator.validate(_options);
            if (errors.length > 0) {
                throwError("You must specify the following required options: " + requiredOptions);
            }
            options = _$utils_9.merge(options, _options);
            _$Templater_7.setOptions({
                template: options.searchResultTemplate,
                middleware: options.templateMiddleware
            });
            _$Repository_4.setOptions({
                fuzzy: options.fuzzy,
                limit: options.limit,
                sort: options.sortMiddleware
            });
            if (_$utils_9.isJSON(options.json)) {
                initWithJSON(options.json);
            } else {
                initWithURL(options.json);
            }
            return {
                search: search
            };
        };
        function initWithJSON(json) {
            options.success(json);
            _$Repository_4.put(json);
            registerInput();
        }
        function initWithURL(url) {
            _$JSONLoader_2.load(url, function(err, json) {
                if (err) {
                    throwError("failed to get JSON (" + url + ")");
                }
                initWithJSON(json);
            });
        }
        function emptyResultsContainer() {
            options.resultsContainer.innerHTML = "";
        }
        function appendToResultsContainer(text) {
            options.resultsContainer.innerHTML += text;
        }
        function registerInput() {
            options.searchInput.addEventListener("keyup", function(e) {
                if (isWhitelistedKey(e.which)) {
                    emptyResultsContainer();
                    search(e.target.value);
                }
            });
        }
        function search(query) {
            if (isValidQuery(query)) {
                emptyResultsContainer();
                render(_$Repository_4.search(query));
            }
        }
        function render(results) {
            var len = results.length;
            if (len === 0) {
                return appendToResultsContainer(options.noResultsText);
            }
            for (var i = 0; i < len; i++) {
                appendToResultsContainer(_$Templater_7.compile(results[i]));
            }
        }
        function isValidQuery(query) {
            return query && query.length > 0;
        }
        function isWhitelistedKey(key) {
            return [ 13, 16, 20, 37, 38, 39, 40, 91 ].indexOf(key) === -1;
        }
        function throwError(message) {
            throw new Error("SimpleJekyllSearch --- " + message);
        }
    })(window);
})();

$(document).ready(function() {
    anchors.add();
});