/*! UIkit 3.0.0-beta.34 | http://www.getuikit.com | (c) 2014 - 2017 YOOtheme | MIT License */ (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'; /** * Promises/A+ polyfill v1.1.4 (https://github.com/bramstein/promis) */ var RESOLVED = 0; var REJECTED = 1; var PENDING = 2; var async = 'setImmediate' in window ? setImmediate : setTimeout; function Promise$1(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); } } Promise$1.reject = function (r) { return new Promise$1(function (resolve, reject) { reject(r); }); }; Promise$1.resolve = function (x) { return new Promise$1(function (resolve, reject) { resolve(x); }); }; Promise$1.all = function all(iterable) { return new Promise$1(function (resolve, reject) { var count = 0, result = []; 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) { Promise$1.resolve(iterable[i]).then(resolver(i), reject); } }); }; Promise$1.race = function race(iterable) { return new Promise$1(function (resolve, reject) { for (var i = 0; i < iterable.length; i += 1) { Promise$1.resolve(iterable[i]).then(resolve, reject); } }); }; var p = Promise$1.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 deferred = this$1.deferred.shift(), onResolved = deferred[0], onRejected = deferred[1], resolve = deferred[2], reject = deferred[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 Promise$1(function (resolve, reject) { this$1.deferred.push([onResolved, onRejected, resolve, reject]); this$1.notify(); }); }; p.catch = function (onRejected) { return this.then(undefined, onRejected); }; 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 hasOwnProperty = Object.prototype.hasOwnProperty; function hasOwn(obj, key) { return hasOwnProperty.call(obj, key); } var Promise = 'Promise' in window ? window.Promise : Promise$1; var classifyRe = /(?:^|[-_\/])(\w)/g; function classify(str) { return str.replace(classifyRe, function (_, c) { return c ? c.toUpperCase() : ''; }); } var hyphenateRe = /([a-z\d])([A-Z])/g; function hyphenate(str) { return str .replace(hyphenateRe, '$1-$2') .toLowerCase() } 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(-1 * 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) === Object.prototype; } function isWindow(obj) { return isObject(obj) && obj === obj.window; } function isDocument(obj) { return isObject(obj) && obj.nodeType === 9; } 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 toList(value) { return isArray(value) ? value : isString(value) ? value.split(',').map(function (value) { return isNumeric(value) ? toNumber(value) : toBoolean(value.trim()); }) : [value]; } var vars = {}; function toMedia(value) { if (isString(value)) { if (value[0] === '@') { var name = "media-" + (value.substr(1)); value = vars[name] || (vars[name] = toFloat(getCssVar(name))); } else if (isNaN(value)) { return value; } } return value && !isNaN(value) ? ("(min-width: " + value + "px)") : false; } function coerce(type, value, context) { if (type === Boolean) { return toBoolean(value); } else if (type === Number) { return toNumber(value); } else if (type === 'query') { return query(value, context); } else if (type === 'list') { return toList(value); } else if (type === 'media') { return toMedia(value); } return type ? type(value) : value; } function toMs(time) { return !time ? 0 : endsWith(time, 'ms') ? toFloat(time) : toFloat(time) * 1000; } 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) { if (cb.call(obj[key], obj[key], key) === false) { break; } } } 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 && r2.left <= r1.right && r1.top <= r2.bottom && r2.top <= r1.bottom; } function pointInRect(point, rect) { return intersectRect({top: point.y, bottom: point.y, left: point.x, right: point.x}, rect) } 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); var xhr = env.xhr; env.beforeSend(env); 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); }); } var arrayProto = Array.prototype; function $$1(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 query(selector, context) { return $$1(selector, isContextSelector(selector) ? context : doc); } function queryAll(selector, context) { return $$(selector, isContextSelector(selector) ? context : doc); } 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 = doc; 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(' '); } if (!ctx) { return null; } if (!ctx.id) { ctx.id = "uk-" + (Date.now()) + i; removes.push(function () { return removeAttr(ctx, 'id'); }); } return ("#" + (ctx.id) + " " + selector); }).filter(Boolean).join(','); context = doc; } try { return context[queryFn](selector); } catch (e) { return null; } finally { removes && removes.forEach(function (remove) { return remove(); }); } } function filter(element, selector) { return $$(element).filter(function (element) { return matches(element, selector); }); } function within(element, selector) { return !isString(selector) ? element === selector || toNode(selector).contains(toNode(element)) : matches(element, selector) || closest(element, selector); } 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.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 = [], parent = toNode(element).parentNode; while (parent && parent.nodeType === 1) { if (matches(parent, selector)) { elements.push(parent); } parent = parent.parentNode; } return elements; } function isJQuery(obj) { return isObject(obj) && !!obj.jquery; } function isNode(element) { return element instanceof Node || isObject(element) && element.nodeType === 1; } function isNodeCollection(element) { return element instanceof NodeList || element instanceof HTMLCollection; } function toNode(element) { return isNode(element) || isWindow(element) || isDocument(element) ? element : isNodeCollection(element) || isJQuery(element) ? element[0] : isArray(element) ? toNode(element[0]) : null; } 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 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 filterAttr(element, attribute, pattern, replacement) { attr(element, attribute, function (value) { return value ? value.replace(pattern, replacement) : value; }); } 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]); } } } var win = window; var doc = document; var docEl = doc.documentElement; var isRtl = attr(docEl, 'dir') === 'rtl'; function isReady() { return doc.readyState === 'complete' || doc.readyState !== 'loading' && !docEl.doScroll; } function ready(fn) { if (isReady()) { fn(); return; } var handle = function () { unbind1(); unbind2(); fn(); }, unbind1 = on(doc, 'DOMContentLoaded', handle), unbind2 = on(win, 'load', handle); } var transitioncancel = 'transitioncanceled'; function transition(element, props, duration, transition) { if ( duration === void 0 ) duration = 400; if ( transition === void 0 ) transition = '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 + " " + transitioncancel), function (ref) { var type = ref.type; clearTimeout(timer); removeClass(element, 'uk-transition'); css(element, 'transition', ''); type === transitioncancel ? reject() : resolve(); }, false, function (ref) { var target = ref.target; return element === target; }); addClass(element, 'uk-transition'); css(element, assign({transition: ("all " + duration + "ms " + transition)}, props)); }); } )); } var Transition = { start: transition, stop: function stop(element) { trigger(element, transitionend); return Promise.resolve(); }, cancel: function cancel(element) { trigger(element, transitioncancel); }, inProgress: function inProgress(element) { return hasClass(element, 'uk-transition'); } }; var animationcancel = 'animationcancel'; 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(null, arguments$1).then(resolve, reject); } ); } ); return; } var cls = animation + " " + animationPrefix + (out ? 'leave' : 'enter'); if (startsWith(animation, animationPrefix)) { if (origin) { cls += " " + animationPrefix + origin; } if (out) { cls += " " + animationPrefix + "reverse"; } } reset(); once(element, ((animationend || '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); if (!animationend) { requestAnimationFrame(function () { return Animation.cancel(element); }); } function reset() { css(element, 'animationDuration', ''); removeClasses(element, (animationPrefix + "\\S*")); } }); } )); } var inProgress = new RegExp((animationPrefix + "(enter|leave)")); var Animation = { in: function in$1(element, animation, duration, origin) { return animate(element, animation, duration, origin, false); }, out: function out(element, animation, duration, origin) { return animate(element, animation, duration, origin, true); }, inProgress: function inProgress$1(element) { return inProgress.test(attr(element, 'class')); }, cancel: function cancel(element) { trigger(element, animationcancel); } }; function isInView(element, top, left) { if ( top === void 0 ) top = 0; if ( left === void 0 ) left = 0; return intersectRect(toNode(element).getBoundingClientRect(), { top: top, left: left, bottom: top + height(win), right: left + width(win) }); } function scrolledOver(element) { element = toNode(element); var elHeight = element.offsetHeight, top = positionTop(element), vp = height(win), vh = vp + Math.min(0, top - vp), diff = Math.max(0, vp - (height(doc) - (top + elHeight))); return clamp(((vh + win.pageYOffset - top) / ((vh + (elHeight - (diff < vp ? diff : 0)) ) / 100)) / 100); } function positionTop(element) { var top = 0; do { top += element.offsetTop; } while (element = element.offsetParent); return top; } function getIndex(i, elements, current) { if ( current === void 0 ) current = 0; elements = toNodes(elements); var length = elements.length; i = (isNumeric(i) ? toNumber(i) : i === 'next' ? current + 1 : i === 'previous' ? current - 1 : index(elements, i) ) % length; return i < 0 ? i + length : i; } 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 voidElements[toNode(element).tagName.toLowerCase()]; } var Dimensions = { ratio: function ratio(dimensions, prop, value) { var aProp = prop === 'width' ? 'height' : 'width'; return ( obj = {}, obj[aProp] = Math.round(value * dimensions[aProp] / dimensions[prop]), obj[prop] = value, obj ); var obj; }, contain: function contain(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 cover(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 preventClick() { var timer = setTimeout(function () { return trigger(doc, 'click'); }, 0); once(doc, 'click', function (e) { e.preventDefault(); e.stopImmediatePropagation(); clearTimeout(timer); }, true); } function isVisible(element) { return toNodes(element).some(function (element) { return element.offsetHeight; }); } var selInput = 'input,select,textarea,button'; function isInput(element) { return toNodes(element).some(function (element) { return matches(element, selInput); }); } function empty(element) { element = toNode(element); element.innerHTML = ''; return element; } function html(parent, html) { parent = toNode(parent); return isUndefined(html) ? parent.innerHTML : append(parent.hasChildNodes() ? empty(parent) : parent, html); } function prepend(parent, element) { parent = toNode(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 = toNode(parent); return insertNodes(element, function (element) { return parent.appendChild(element); }); } function before(ref, element) { ref = toNode(ref); return insertNodes(element, function (element) { return ref.parentNode.insertBefore(element, ref); }); } function after(ref, element) { ref = toNode(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 'length' in element ? toNodes(element).map(fn) : fn(element); } 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; if (matches = singleTagRE.exec(html)) { return doc.createElement(matches[1]); } var container = doc.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 index(element, ref) { return ref ? toNodes(element).indexOf(toNode(ref)) : toNodes((element = toNode(element)) && element.parentNode.children).indexOf(element); } 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] = propName(styles[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$1 = {}; function getCssVar(name) { if (!(name in vars$1)) { /* usage in css: .var-name:before { content:"xyz" } */ var element = append(docEl, doc.createElement('div')); addClass(element, ("var-" + name)); try { vars$1[name] = getStyle(element, 'content', ':before').replace(/^["'](.*)["']$/, '$1'); vars$1[name] = JSON.parse(vars$1[name]); } catch (e) {} docEl.removeChild(element); } return vars$1[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 style = doc.createElement('div').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; } } } var supportsClassList; var supportsMultiple; var supportsForce; function addClass(element) { var args = [], len = arguments.length - 1; while ( len-- > 0 ) args[ len ] = arguments[ len + 1 ]; apply(element, args, 'add'); } function removeClass(element) { var args = [], len = arguments.length - 1; while ( len-- > 0 ) args[ len ] = arguments[ len + 1 ]; apply(element, args, 'remove'); } function removeClasses(element, cls) { filterAttr(element, 'class', new RegExp(("(^|\\s)" + cls + "(?!\\S)"), '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 supportsClassList && 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 (!supportsClassList || !args.length) { return; } args = getArgs(args); var force = !isString(args[args.length - 1]) ? args.pop() : undefined; toNodes(element).forEach(function (ref) { var classList = ref.classList; for (var i = 0; i < args.length; i++) { supportsForce ? classList.toggle(args[i], force) : (classList[(!isUndefined(force) ? force : !classList.contains(args[i])) ? 'add' : 'remove'](args[i])); } }); } function apply(element, args, fn) { args = getArgs(args).filter(function (arg) { return arg; }); supportsClassList && args.length && toNodes(element).forEach(function (ref) { var classList = ref.classList; supportsMultiple ? classList[fn].apply(classList, args) : args.forEach(function (cls) { return classList[fn](cls); }); }); } function getArgs(args) { return args.reduce(function (args, arg) { args.push.apply(args, isString(arg) && includes(arg, ' ') ? arg.trim().split(' ') : [arg]); return args; }, []); } (function () { var list = doc.createElement('_').classList; if (list) { list.add('a', 'b'); list.toggle('c', false); supportsMultiple = list.contains('b'); supportsForce = !list.contains('c'); supportsClassList = true; } list = null; })(); var Observer = win.MutationObserver || win.WebKitMutationObserver; var requestAnimationFrame = win.requestAnimationFrame || (function (fn) { return setTimeout(fn, 1000 / 60); }); var hasTouchEvents = 'ontouchstart' in win; var hasPointerEvents = win.PointerEvent; var hasTouch = 'ontouchstart' in win || win.DocumentTouch && doc instanceof DocumentTouch || navigator.msPointerEnabled && navigator.msMaxTouchPoints // IE 10 || navigator.pointerEnabled && navigator.maxTouchPoints; // IE >=11 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'; var transitionend = prefix('transition', 'transition-end'); var animationstart = prefix('animation', 'animation-start'); var animationend = prefix('animation', 'animation-end'); function getImage(src) { return new Promise(function (resolve, reject) { var img = new Image(); img.onerror = reject; img.onload = function () { return resolve(img); }; img.src = src; }); } function prefix(name, event) { var ucase = classify(name), lowered = classify(event).toLowerCase(), classified = classify(event), element = doc.body || docEl, names = ( obj = {}, obj[name] = lowered, obj[("Webkit" + ucase)] = ("webkit" + classified), obj[("Moz" + ucase)] = lowered, obj[("o" + ucase)] = ("o" + classified + " o" + lowered), obj ); var obj; for (name in names) { if (element.style[name] !== undefined) { return names[name]; } } } function on() { var args = [], len = arguments.length; while ( len-- ) args[ len ] = arguments[ len ]; var ref = getArgs$1(args); var target = ref[0]; var type = ref[1]; var selector = ref[2]; var listener = ref[3]; var useCapture = ref[4]; target = toEventTarget(target); if (selector) { listener = delegate(target, selector, listener); } if (listener.length > 1) { listener = detail(listener); } type.split(' ').forEach(function (type) { return target.addEventListener(type, listener, useCapture); }); return function () { return off(target, type, listener, useCapture); }; } function off(target, type, listener, useCapture) { if ( useCapture === void 0 ) useCapture = false; type.split(' ').forEach(function (type) { return toEventTarget(target).removeEventListener(type, listener, useCapture); }); } function once() { var args = [], len = arguments.length; while ( len-- ) args[ len ] = arguments[ len ]; var ref = getArgs$1(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(target, event, detail) { return toEventTargets(target).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 = doc.createEvent('CustomEvent'); event.initCustomEvent(e, bubbles, cancelable, detail); e = event; } return e; } function getArgs$1(args) { if (isString(args[0])) { args[0] = $$1(args[0]); } if (isFunction(args[2])) { args.splice(2, 0, false); } return args; } function delegate(element, selector, listener) { var this$1 = this; return function (e) { var target = e.target, current = selector[0] === '>' ? $$(selector, element).filter(function (element) { return within(target, element); })[0] : closest(target, selector); if (current) { e.delegate = element; e.current = current; listener.call(this$1, e); } } } function detail(listener) { return function (e) { return isArray(e.detail) ? listener.apply(listener, [e].concat(e.detail)) : listener(e); }; } function isEventTarget(target) { return 'EventTarget' in win ? target instanceof EventTarget : 'addEventListener' in target; } function toEventTarget(target) { return isEventTarget(target) ? target : toNode(target); } function toEventTargets(target) { return isEventTarget(target) ? [target] : isArray(target) ? target.map(toEventTarget).filter(Boolean) : toNodes(target); } /* Based on: Copyright (c) 2016 Wilson Page wilsonpage@me.com https://github.com/wilsonpage/fastdom */ var fastdom = { reads: [], writes: [], measure: function measure(task) { this.reads.push(task); scheduleFlush(); return task; }, mutate: function mutate(task) { this.writes.push(task); scheduleFlush(); return task; }, clear: function clear(task) { return remove$1(this.reads, task) || remove$1(this.writes, task); }, flush: function flush() { 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 init() { var this$1 = this; this.positions = []; this.position = null; var ticking = false; this.unbind = on(doc, 'mousemove', function (e) { if (ticking) { return; } setTimeout(function () { var time = Date.now(), length = this$1.positions.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 cancel() { if (this.unbind) { this.unbind(); } }, movesTo: function movesTo(target) { if (this.positions.length < 2) { return false; } var p = offset(target), position = this.positions[this.positions.length - 1], prevPos = this.positions[0]; if (p.left <= position.x && position.x <= p.right && p.top <= position.y && position.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.x) { } else if (p.left >= position.x) { points[0].reverse(); points[1].reverse(); } else if (p.bottom <= position.y) { points[0].reverse(); } else if (p.top >= position.y) { points[1].reverse(); } return !!points.reduce(function (result, point) { return result + (slope(prevPos, point[0]) < slope(position, point[0]) && slope(prevPos, point[1]) > slope(position, point[1])); }, 0); } }; function slope(a, b) { return (b.y - a.y) / (b.x - a.x); } var strats = {}; // concat strategy strats.args = strats.created = strats.events = strats.init = strats.ready = strats.connected = strats.disconnected = strats.destroy = function (parentVal, childVal) { parentVal = parentVal && !isArray(parentVal) ? [parentVal] : parentVal; return childVal ? parentVal ? parentVal.concat(childVal) : isArray(childVal) ? childVal : [childVal] : parentVal; }; // update strategy strats.update = function (parentVal, childVal) { return strats.args(parentVal, isFunction(childVal) ? {read: childVal} : childVal); }; // property strategy strats.props = function (parentVal, childVal) { if (isArray(childVal)) { childVal = childVal.reduce(function (value, key) { value[key] = String; return value; }, {}); } return strats.methods(parentVal, childVal); }; // extend strategy strats.computed = strats.defaults = strats.methods = function (parentVal, childVal) { return childVal ? parentVal ? assign({}, parentVal, childVal) : childVal : parentVal; }; // default strategy var defaultStrat = function (parentVal, childVal) { return isUndefined(childVal) ? parentVal : childVal; }; function mergeOptions(parent, child) { var options = {}, key; if (child.mixins) { for (var i = 0, l = child.mixins.length; i < l; i++) { parent = mergeOptions(parent, child.mixins[i]); } } for (key in parent) { mergeKey(key); } for (key in child) { if (!hasOwn(parent, key)) { mergeKey(key); } } function mergeKey(key) { options[key] = (strats[key] || defaultStrat)(parent[key], child[key]); } return options; } var id = 0; var Player = function Player(el) { this.id = ++id; this.el = toNode(el); }; Player.prototype.isVideo = function isVideo () { return this.isYoutube() || this.isVimeo() || this.isHTML5(); }; Player.prototype.isHTML5 = function isHTML5 () { return this.el.tagName === 'VIDEO'; }; Player.prototype.isIFrame = function isIFrame () { return this.el.tagName === 'IFRAME'; }; Player.prototype.isYoutube = function isYoutube () { return this.isIFrame() && !!this.el.src.match(/\/\/.*?youtube\.[a-z]+\/(watch\?v=[^&\s]+|embed)|youtu\.be\/.*/); }; Player.prototype.isVimeo = function isVimeo () { return this.isIFrame() && !!this.el.src.match(/vimeo\.com\/video\/.*/); }; Player.prototype.enableApi = function enableApi () { var this$1 = this; if (this.ready) { return this.ready; } var youtube = this.isYoutube(), vimeo = this.isVimeo(), 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) { return youtube && data.id === this$1.id && data.event === 'onReady' || vimeo && Number(data.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=" + id)))); }); } return Promise.resolve(); }; Player.prototype.play = function play () { 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()) { this.el.play(); } }; Player.prototype.pause = function pause () { 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 mute () { 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(win, 'message', function (_, data) { return resolve(data); }, false, function (ref) { var data = ref.data; if (!data || !isString(data)) { return; } try { data = JSON.parse(data); } catch (e) { return; } return data && cb(data); }); }); } 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), targetDim = getDimensions(target), 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 || getWindow(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, 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, 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), pos = css(element, 'position'); ['left', 'top'].forEach(function (prop) { if (prop in coordinates) { var value = css(element, prop); element.style[prop] = ((coordinates[prop] - currentOffset[prop]) + toFloat(pos === 'absolute' && value === 'auto' ? position(element)[prop] : value)) + "px"; } }); return; } return getDimensions(element); } function getDimensions(element) { element = toNode(element); var ref = getWindow(element); var top = ref.pageYOffset; var left = ref.pageXOffset; if (isWindow(element)) { var height = element.innerHeight, width = element.innerWidth; return { top: top, left: left, height: height, width: width, bottom: top + height, right: left + width, } } var display = false; if (!isVisible(element)) { display = element.style.display; element.style.display = 'block'; } var rect = element.getBoundingClientRect(); if (display !== false) { element.style.display = display; } 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 = offsetParent(element), parentOffset = parent === docEl$1(element) ? {top: 0, left: 0} : offset(parent); return ['top', 'left'].reduce(function (props, prop) { var propName = ucfirst(prop); props[prop] -= parentOffset[prop] + (toFloat(css(element, ("margin" + propName))) || 0) + (toFloat(css(parent, ("border" + propName + "Width"))) || 0); return props; }, offset(element)); } function offsetParent(element) { var parent = toNode(element).offsetParent; while (parent && css(parent, 'position') === 'static') { parent = parent.offsetParent; } return parent || docEl$1(element); } var height = dimension('height'); var width = dimension('width'); function dimension(prop) { var propName = ucfirst(prop); return function (element, value) { element = toNode(element); if (isUndefined(value)) { if (isWindow(element)) { return element[("inner" + propName)]; } if (isDocument(element)) { var doc = element.documentElement; return Math.max(doc.offsetHeight, doc.scrollHeight); } value = css(element, prop); value = value === 'auto' ? element[("offset" + propName)] : toFloat(value) || 0; return getContentSize(prop, element, value); } else { css(element, prop, !value && value !== 0 ? '' : getContentSize(prop, element, value) + 'px' ); } } } function getContentSize(prop, element, value) { return css(element, 'boxSizing') === 'border-box' ? dirs[prop].slice(1).map(ucfirst).reduce(function (value, prop) { return value - toFloat(css(element, ("padding" + prop))) - toFloat(css(element, ("border" + prop + "Width"))); } , value) : value; } function getWindow(element) { return isWindow(element) ? element : document$1(element).defaultView; } 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/, 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 document$1(element) { return toNode(element).ownerDocument; } function docEl$1(element) { return document$1(element).documentElement; } /* Based on: Copyright (c) 2010-2016 Thomas Fuchs http://zeptojs.com/ */ var touch = {}; var clickTimeout; var swipeTimeout; var tapTimeout; var 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(doc, 'click', function () { return clicked = true; }, true); on(doc, pointerDown, function (e) { var target = e.target; var ref = getPos$1(e); var x = ref.x; var y = ref.y; var now = Date.now(); 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.last = now; clicked = e.button > 0; }); on(doc, pointerMove, function (e) { var ref = getPos$1(e); var x = ref.x; var y = ref.y; touch.x2 = x; touch.y2 = y; }); on(doc, pointerUp, function (ref) { var target = ref.target; // swipe 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 = {}; }); // normal tap } else if ('last' in touch) { tapTimeout = setTimeout(function () { return touch.el && trigger(touch.el, 'tap'); }); // trigger single click after 350ms of inactivity if (touch.el && within(target, touch.el)) { clickTimeout = setTimeout(function () { clickTimeout = null; if (touch.el && !clicked) { trigger(touch.el, 'click'); } touch = {}; }, 350); } } else { touch = {}; } }); on(doc, 'touchcancel', cancelAll); on(win, 'scroll', cancelAll); }); var touching = false; on(doc, 'touchstart', function () { return touching = true; }, true); on(doc, 'click', function () {touching = false;}); on(doc, '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}; } var util = Object.freeze({ bind: bind, hasOwn: hasOwn, Promise: Promise, classify: classify, hyphenate: hyphenate, camelize: camelize, ucfirst: ucfirst, startsWith: startsWith, endsWith: endsWith, includes: includes, isArray: isArray, isFunction: isFunction, isObject: isObject, isPlainObject: isPlainObject, isWindow: isWindow, isDocument: isDocument, isBoolean: isBoolean, isString: isString, isNumber: isNumber, isNumeric: isNumeric, isUndefined: isUndefined, toBoolean: toBoolean, toNumber: toNumber, toFloat: toFloat, toList: toList, toMedia: toMedia, coerce: coerce, toMs: toMs, swap: swap, assign: assign, each: each, clamp: clamp, noop: noop, intersectRect: intersectRect, pointInRect: pointInRect, ajax: ajax, $: $$1, $$: $$, query: query, queryAll: queryAll, filter: filter, within: within, matches: matches, closest: closest, parents: parents, isJQuery: isJQuery, toNode: toNode, toNodes: toNodes, attr: attr, hasAttr: hasAttr, removeAttr: removeAttr, filterAttr: filterAttr, data: data, win: win, doc: doc, docEl: docEl, isRtl: isRtl, isReady: isReady, ready: ready, transition: transition, Transition: Transition, animate: animate, Animation: Animation, isInView: isInView, scrolledOver: scrolledOver, getIndex: getIndex, isVoidElement: isVoidElement, Dimensions: Dimensions, preventClick: preventClick, isVisible: isVisible, selInput: selInput, isInput: isInput, empty: empty, html: html, prepend: prepend, append: append, before: before, after: after, remove: remove, wrapAll: wrapAll, wrapInner: wrapInner, unwrap: unwrap, fragment: fragment, index: index, css: css, getStyles: getStyles, getStyle: getStyle, getCssVar: getCssVar, addClass: addClass, removeClass: removeClass, removeClasses: removeClasses, replaceClass: replaceClass, hasClass: hasClass, toggleClass: toggleClass, Observer: Observer, requestAnimationFrame: requestAnimationFrame, hasTouch: hasTouch, pointerDown: pointerDown, pointerMove: pointerMove, pointerUp: pointerUp, pointerEnter: pointerEnter, pointerLeave: pointerLeave, transitionend: transitionend, animationstart: animationstart, animationend: animationend, getImage: getImage, on: on, off: off, once: once, trigger: trigger, createEvent: createEvent, toEventTargets: toEventTargets, fastdom: fastdom, MouseTracker: MouseTracker, mergeOptions: mergeOptions, Player: Player, positionAt: positionAt, offset: offset, position: position, height: height, width: width, flipPosition: flipPosition, isTouch: isTouch, getPos: getPos$1 }); var boot = function (UIkit) { var connect = UIkit.connect; var disconnect = UIkit.disconnect; if (Observer) { if (doc.body) { init(); } else { (new Observer(function () { if (doc.body) { this.disconnect(); init(); } })).observe(docEl, {childList: true, subtree: true}); } } else { ready(function () { apply(doc.body, connect); on(docEl, 'DOMNodeInserted', function (e) { return apply(e.target, connect); }); on(docEl, 'DOMNodeRemoved', function (e) { return apply(e.target, disconnect); }); }); } function init() { apply(doc.body, connect); fastdom.flush(); (new Observer(function (mutations) { return mutations.forEach(function (ref) { var addedNodes = ref.addedNodes; var removedNodes = ref.removedNodes; var target = ref.target; for (var i = 0; i < addedNodes.length; i++) { apply(addedNodes[i], connect); } for (i = 0; i < removedNodes.length; i++) { apply(removedNodes[i], disconnect); } UIkit.update(createEvent('update', true, false, {mutation: true}), target, true); }); } )).observe(docEl, { childList: true, subtree: true, characterData: true, attributes: true, attributeFilter: ['href'] }); UIkit._initialized = true; } function apply(node, fn) { if (node.nodeType !== 1 || hasAttr(node, 'uk-no-boot')) { return; } fn(node); node = node.firstElementChild; while (node) { var next = node.nextElementSibling; apply(node, fn); node = next; } } }; var globalAPI = function (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.components[component] : component) || this; mixin = mergeOptions({}, mixin); mixin.mixins = component.options.mixins; delete component.options.mixins; component.options = mergeOptions(mixin, component.options); }; UIkit.extend = function (options) { options = options || {}; var Super = this, name = options.name || Super.options.name; var Sub = createClass(name || 'UIkitComponent'); 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 (e, element, parents) { if ( parents === void 0 ) parents = false; e = createEvent(e || 'update'); if (!element) { update(UIkit.instances, e); return; } element = toNode(element); if (parents) { do { update(element[DATA], e); element = element.parentNode; } while (element) } else { apply(element, function (element) { return update(element[DATA], e); }); } }; var container; Object.defineProperty(UIkit, 'container', { get: function get() { return container || doc.body; }, set: function set(element) { container = element; } }); function createClass(name) { return new Function(("return function " + (classify(name)) + " (options) { this._init(options); }"))(); } function apply(node, fn) { if (node.nodeType !== 1) { return; } fn(node); node = node.firstElementChild; while (node) { apply(node, fn); node = node.nextElementSibling; } } function update(data, e) { if (!data) { return; } for (var name in data) { if (data[name]._isReady) { data[name]._callUpdate(e); } } } }; var hooksAPI = function (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._callReady = function () { if (this._isReady) { return; } this._isReady = true; this._callHook('ready'); this._callUpdate(); }; UIkit.prototype._callConnected = function () { var this$1 = this; if (this._connected) { return; } if (!includes(UIkit.elements, this.$options.el)) { UIkit.elements.push(this.$options.el); } UIkit.instances[this._uid] = this; this._initEvents(); this._callHook('connected'); this._connected = true; this._initObserver(); if (!this._isReady) { ready(function () { return this$1._callReady(); }); } this._callUpdate(); }; UIkit.prototype._callDisconnected = function () { if (!this._connected) { return; } if (this._observer) { this._observer.disconnect(); this._observer = null; } var index = UIkit.elements.indexOf(this.$options.el); if (~index) { UIkit.elements.splice(index, 1); } delete UIkit.instances[this._uid]; 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; var detail = e.detail; if (type === 'update' && detail && detail.mutation) { this._computeds = {}; } var updates = this.$options.update; if (!updates) { return; } updates.forEach(function (update, i) { if (type !== 'update' && !includes(update.events, type)) { return; } if (update.read && !includes(fastdom.reads, this$1._frames.reads[i])) { this$1._frames.reads[i] = fastdom.measure(function () { update.read.call(this$1, e); delete this$1._frames.reads[i]; }); } if (update.write && !includes(fastdom.writes, this$1._frames.writes[i])) { this$1._frames.writes[i] = fastdom.mutate(function () { update.write.call(this$1, e); delete this$1._frames.writes[i]; }); } }); }; }; var stateAPI = function (UIkit) { var uid = 0; UIkit.prototype.props = {}; UIkit.prototype._init = function (options) { options = options || {}; options = this.$options = mergeOptions(this.constructor.options, options, this); this.$el = null; this.$name = UIkit.prefix + hyphenate(this.$options.name); 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 defaults = ref.defaults; var data$$1 = ref.data; if ( data$$1 === void 0 ) data$$1 = {}; var args = ref.args; if ( args === void 0 ) args = []; var props = ref.props; if ( props === void 0 ) props = {}; var el = ref.el; if (args.length && isArray(data$$1)) { data$$1 = data$$1.slice(0, args.length).reduce(function (data$$1, value, index) { if (isPlainObject(value)) { assign(data$$1, value); } else { data$$1[args[index]] = value; } return data$$1; }, {}); } for (var key in defaults) { this$1.$props[key] = this$1[key] = hasOwn(data$$1, key) && !isUndefined(data$$1[key]) ? coerce(props[key], data$$1[key], el) : isArray(defaults[key]) ? defaults[key].concat() : defaults[key]; } }; UIkit.prototype._initMethods = function () { var this$1 = this; var methods = this.$options.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 computed = this.$options.computed; this._computeds = {}; if (computed) { for (var key in computed) { registerComputed(this$1, key, computed[key]); } } }; UIkit.prototype._initProps = function (props) { var this$1 = this; this._computeds = {}; assign(this.$props, props || getProps(this.$options, this.$name)); var exclude = [this.$options.computed, this.$options.methods]; for (var key in this$1.$props) { if (notIn(exclude, key)) { this$1[key] = this$1.$props[key]; } } }; UIkit.prototype._initEvents = function () { var this$1 = this; var events = this.$options.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 || !Observer) { return; } attrs = isArray(attrs) ? attrs : Object.keys(props).map(function (key) { return hyphenate(key); }); this._observer = new Observer(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(data$$1); } }); this._observer.observe(el, {attributes: true, attributeFilter: attrs.concat([this.$name, ("data-" + (this.$name))])}); }; 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; var key, prop; if (!props) { return data$$1; } for (key in props) { prop = hyphenate(key); if (hasAttr(el, prop)) { var value = coerce(props[key], attr(el, prop), el); if (prop === 'target' && (!value || startsWith(value, '_'))) { continue; } data$$1[key] = value; } } var options = parseOptions(data(el, name), args); for (key in options) { prop = camelize(key); if (props[prop] !== undefined) { data$$1[prop] = coerce(props[prop], options[key], el); } } return data$$1; } function parseOptions(options, args) { 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 && value) { options[key.trim()] = value.trim(); } return options; }, {}); var obj; } catch (e) { return {}; } } function registerComputed(component, key, cb) { Object.defineProperty(component, key, { enumerable: true, get: function get() { 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 set(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 delegate = event.delegate; var self = event.self; var filter = event.filter; var handler = event.handler; el = isFunction(el) ? el.call(component) : el || component.$el; if (isArray(el)) { el.forEach(function (el) { return registerEvent(component, assign({}, event, {el: el}), key); }); return; } if (!el || filter && !filter.call(component)) { return; } 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 ) ); } 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(listener, [e].concat(e.detail)) : listener(e); }; } }; var instanceAPI = function (UIkit) { var DATA = UIkit.data; UIkit.prototype.$mount = function (el) { var name = this.$options.name; if (!el[DATA]) { el[DATA] = {}; } if (el[DATA][name]) { return; } el[DATA][name] = this; this.$el = this.$options.el = this.$options.el || el; this._initProps(); this._callHook('init'); if (within(el, docEl)) { this._callConnected(); } }; UIkit.prototype.$emit = function (e) { this._callUpdate(e); }; UIkit.prototype.$update = function (e, parents) { UIkit.update(e, this.$options.el, parents); }; UIkit.prototype.$reset = function (data) { this._callDisconnected(); this._initProps(data); 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); } }; }; var componentAPI = function (UIkit) { var DATA = UIkit.data; UIkit.components = {}; UIkit.component = function (id, options) { var name = camelize(id); if (isPlainObject(options)) { options.name = name; options = UIkit.extend(options); } else if (isUndefined(options)) { return UIkit.components[name] } else { options.options.name = name; } UIkit.components[name] = options; UIkit[name] = function (element, data) { var i = arguments.length, argsArray = Array(i); while ( i-- ) argsArray[i] = arguments[i]; if (isPlainObject(element)) { return new UIkit.components[name]({data: element}); } if (UIkit.components[name].options.functional) { return new UIkit.components[name]({data: [].concat( argsArray )}); } return element && element.nodeType ? init(element) : $$(element).map(init)[0]; function init(element) { return UIkit.getComponent(element, name) || new UIkit.components[name]({el: element, data: data || {}}); } }; if (UIkit._initialized && !options.options.functional) { fastdom.measure(function () { return UIkit[name](("[uk-" + id + "],[data-uk-" + id + "]")); }); } return UIkit.components[name]; }; UIkit.getComponents = function (element) { return element && (element = isJQuery(element) ? element[0] : element) && element[DATA] || {}; }; UIkit.getComponent = function (element, name) { return UIkit.getComponents(element)[name]; }; UIkit.connect = function (node) { var name; if (node[DATA]) { for (name in node[DATA]) { node[DATA][name]._callConnected(); } } for (var i = 0; i < node.attributes.length; i++) { name = node.attributes[i].name; if (startsWith(name, 'uk-') || startsWith(name, 'data-uk-')) { name = camelize(name.replace('data-uk-', '').replace('uk-', '')); if (UIkit[name]) { UIkit[name](node); } } } }; UIkit.disconnect = function (node) { for (var name in node[DATA]) { node[DATA][name]._callDisconnected(); } }; }; var UIkit$2 = function (options) { this._init(options); }; UIkit$2.util = util; UIkit$2.data = '__uikit__'; UIkit$2.prefix = 'uk-'; UIkit$2.options = {}; UIkit$2.instances = {}; UIkit$2.elements = []; globalAPI(UIkit$2); hooksAPI(UIkit$2); stateAPI(UIkit$2); instanceAPI(UIkit$2); componentAPI(UIkit$2); var Class = { init: function init() { addClass(this.$el, this.$name); } }; var Container = { props: { container: Boolean }, defaults: { container: true }, computed: { container: function container(ref) { var container = ref.container; return container === true && UIkit$2.container || container && $(container) || UIkit$2.container; } } }; var Togglable = { props: { cls: Boolean, animation: 'list', duration: Number, origin: String, transition: String, queued: Boolean }, defaults: { 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 hasAnimation(ref) { var animation = ref.animation; return !!animation[0]; }, hasTransition: function hasTransition(ref) { var animation = ref.animation; return this.hasAnimation && animation[0] === true; } }, methods: { toggleElement: function toggleElement(targets, show, animate) { 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); })); }, toggled = targets.filter(function (el) { return this$1.isToggled(el); }), untoggled = targets.filter(function (el) { return !includes(toggled, el); }), p; if (!this$1.queued || !isUndefined(animate) || !isUndefined(show) || !this$1.hasAnimation || targets.length < 2) { p = all(untoggled.concat(toggled)); } else { var body = doc.body, scroll = body.scrollTop, el = toggled[0], 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 toggleNow(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 isToggled(el) { var nodes = toNodes(el || this.$el); return this.cls ? hasClass(nodes, this.cls.split(' ')[0]) : !hasAttr(nodes, 'hidden'); }, updateAria: function updateAria(el) { if (this.cls === false) { attr(el, 'aria-hidden', !this.isToggled(el)); } }, _toggleElement: function _toggleElement(el, show, animate) { 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 === 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]); UIkit$2.update(null, el); }); }, _toggle: function _toggle(el, toggled) { if (this.cls) { toggleClass(el, this.cls, includes(this.cls, ' ') ? undefined : toggled); } else { attr(el, 'hidden', !toggled ? '' : null); } $$('[autofocus]', el).some(function (el) { return isVisible(el) && (el.focus() || true); }); this.updateAria(el); UIkit$2.update(null, el); }, _toggleImmediate: function _toggleImmediate(el, show) { this._toggle(el, show); return Promise.resolve(); }, _toggleHeight: function _toggleHeight(el, show) { var this$1 = this; var inProgress = Transition.inProgress(el), inner = el.hasChildNodes ? toFloat(css(el.firstElementChild, 'marginTop')) + toFloat(css(el.lastElementChild, 'marginBottom')) : 0, currentHeight = isVisible(el) ? height(el) + (inProgress ? 0 : inner) : 0, endHeight; Transition.cancel(el); if (!this.isToggled(el)) { this._toggle(el, true); } height(el, ''); // Update child components first fastdom.flush(); 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 _toggleAnimation(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 active; var Modal = { mixins: [Class, Container, Togglable], props: { clsPanel: String, selClose: String, escClose: Boolean, bgClose: Boolean, stack: Boolean }, defaults: { cls: 'uk-open', escClose: true, bgClose: true, overlay: true, stack: false }, computed: { panel: function panel(ref, $el) { var clsPanel = ref.clsPanel; return $$1(("." + clsPanel), $el); }, transitionElement: function transitionElement() { return this.panel; }, transitionDuration: function transitionDuration() { return toMs(css(this.transitionElement, 'transitionDuration')); } }, events: [ { name: 'click', delegate: function delegate() { return this.selClose; }, handler: function handler(e) { e.preventDefault(); this.hide(); } }, { name: 'toggle', handler: function handler(e) { if (e.defaultPrevented) { return; } e.preventDefault(); this.toggle(); } }, { name: 'show', self: true, handler: function handler() { if (!hasClass(docEl, this.clsPage)) { this.scrollbarWidth = width(win) - docEl.offsetWidth; css(doc.body, 'overflowY', this.scrollbarWidth && this.overlay ? 'scroll' : ''); } addClass(docEl, this.clsPage); } }, { name: 'hidden', self: true, handler: function handler() { var this$1 = this; var found, prev = this.prev; while (prev) { if (prev.clsPage === this$1.clsPage) { found = true; break; } prev = prev.prev; } if (!found) { removeClass(docEl, this.clsPage); } !this.prev && css(doc.body, 'overflowY', ''); } } ], methods: { toggle: function toggle() { return this.isToggled() ? this.hide() : this.show(); }, show: function show() { if (this.isToggled()) { return; } if (this.container && this.$el.parentNode !== this.container) { append(this.container, this.$el); this._callConnected(); } var prev = active && active !== this && active; active = this; if (prev) { if (this.stack) { this.prev = prev; } else { prev.hide().then(this.show); return; } } registerEvents(); return this.toggleNow(this.$el, true); }, hide: function hide() { if (!this.isToggled()) { return; } active = active && active !== this && active || this.prev; if (!active) { deregisterEvents(); } return this.toggleNow(this.$el, false); }, getActive: function getActive() { return active; }, _toggleImmediate: function _toggleImmediate(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(docEl, 'click', function (ref) { var target = ref.target; var defaultPrevented = ref.defaultPrevented; if (active && active.bgClose && !defaultPrevented && !within(target, active.panel)) { active.hide(); } }), on(doc, 'keydown', function (e) { if (e.keyCode === 27 && active && active.escClose) { e.preventDefault(); active.hide(); } }) ]; } function deregisterEvents() { events && events.forEach(function (unbind) { return unbind(); }); events = null; } var Position = { props: { pos: String, offset: null, flip: Boolean, clsPos: String }, defaults: { pos: ("bottom-" + (!isRtl ? 'left' : 'right')), flip: true, offset: false, clsPos: '' }, computed: { pos: function pos(ref) { var pos = ref.pos; return (pos + (!includes(pos, '-') ? '-center' : '')).split('-'); }, dir: function dir() { return this.pos[0]; }, align: function align() { return this.pos[1]; } }, methods: { positionAt: function positionAt$1(element, target, boundary) { removeClasses(element, ((this.clsPos) + "-(top|bottom|left|right)(-[a-z]+)?")); css(element, {top: '', left: ''}); var offset = toNumber(this.offset) || 0, axis = this.getAxis(); var ref = 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' ? -1 * offset : offset)) : (" " + (this.dir === 'top' ? -1 * offset : offset)), null, this.flip, boundary ).target; var x = ref.x; var y = ref.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 getAxis() { return this.dir === 'top' || this.dir === 'bottom' ? 'y' : 'x'; } } }; var mixin = function (UIkit) { UIkit.mixin.class = Class; UIkit.mixin.container = Container; UIkit.mixin.modal = Modal; UIkit.mixin.position = Position; UIkit.mixin.togglable = Togglable; }; var Accordion = function (UIkit) { UIkit.component('accordion', { mixins: [Class, Togglable], props: { targets: String, active: null, collapsible: Boolean, multiple: Boolean, toggle: String, content: String, transition: String }, defaults: { 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 items(ref, $el) { var targets = ref.targets; return $$(targets, $el); } }, events: [ { name: 'click', self: true, delegate: function delegate() { return ((this.targets) + " " + (this.$props.toggle)); }, handler: function handler(e) { e.preventDefault(); this.toggle(index($$(((this.targets) + " " + (this.$props.toggle)), this.$el), e.current)); } } ], ready: function ready() { var active = this.active !== false && this.items[Number(this.active)] && !hasClass(active, this.clsOpen); if (active) { this.toggle(active, false); } }, update: function update() { var this$1 = this; this.items.forEach(function (el) { return this$1.toggleNow($$1(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 toggle(item, animate) { var this$1 = this; var index = getIndex(item, this.items), active = filter(this.items, ("." + (this.clsOpen))); item = this.items[index]; item && [item] .concat(!this.multiple && !includes(active, item) && active || []) .forEach(function (el) { var isItem = el === item, 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 : $$1(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).then(function () { if (hasClass(el, this$1.clsOpen) === state) { if (!state) { this$1._toggleImmediate(content, false); } el._wrapper = null; unwrap(content); } }); }); } } }); }; var Alert = function (UIkit) { UIkit.component('alert', { attrs: true, mixins: [Class, Togglable], args: 'animation', props: { close: String }, defaults: { animation: [true], selClose: '.uk-alert-close', duration: 150, hideProps: assign({opacity: 0}, Togglable.defaults.hideProps) }, events: [ { name: 'click', delegate: function delegate() { return this.selClose; }, handler: function handler(e) { e.preventDefault(); this.close(); } } ], methods: { close: function close() { var this$1 = this; this.toggleElement(this.$el).then(function () { return this$1.$destroy(true); }); } } }); }; var Cover = function (UIkit) { UIkit.component('cover', { mixins: [Class, UIkit.components.video.options], props: { width: Number, height: Number }, defaults: { automute: true }, update: { write: function write() { var el = this.$el; if (!isVisible(el)) { return; } var ref = el.parentNode; var height = ref.offsetHeight; var width = ref.offsetWidth; css( css(el, {width: '', height: ''}), Dimensions.cover( { width: this.width || el.clientWidth, height: this.height || el.clientHeight }, { width: width + (width % 2 ? 1 : 0), height: height + (height % 2 ? 1 : 0) } ) ); }, events: ['load', 'resize'] }, events: { loadedmetadata: function loadedmetadata() { this.$emit(); } } }); }; var Drop = function (UIkit) { var active; UIkit.component('drop', { mixins: [Position, Togglable], args: 'pos', props: { mode: 'list', toggle: Boolean, boundary: 'query', boundaryAlign: Boolean, delayShow: Number, delayHide: Number, clsDrop: String }, defaults: { mode: ['click', 'hover'], toggle: true, boundary: win, boundaryAlign: false, delayShow: 0, delayHide: 800, clsDrop: false, hoverIdle: 200, animation: ['uk-animation-fade'], cls: 'uk-open' }, init: function init() { this.tracker = new MouseTracker(); this.clsDrop = this.clsDrop || ("uk-" + (this.$options.name)); this.clsPos = this.clsDrop; addClass(this.$el, this.clsDrop); }, ready: function ready() { this.updateAria(this.$el); if (this.toggle) { this.toggle = UIkit.toggle(isString(this.toggle) ? query(this.toggle, this.$el) : this.$el.previousElementSibling, {target: this.$el, mode: this.mode}); } }, events: [ { name: 'click', delegate: function delegate() { return ("." + (this.clsDrop) + "-close"); }, handler: function handler(e) { e.preventDefault(); this.hide(false); } }, { name: 'click', delegate: function delegate() { return 'a[href^="#"]'; }, handler: function handler(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 handler() { this.hide(false); } }, { name: 'toggle', self: true, handler: function handler(e, toggle) { e.preventDefault(); if (this.isToggled()) { this.hide(false); } else { this.show(toggle, false); } } }, { name: pointerEnter, filter: function filter() { return includes(this.mode, 'hover'); }, handler: function handler(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 handler(e, toggle) { if (toggle && !includes(toggle.target, this.$el)) { return; } e.preventDefault(); this.show(toggle || this.toggle); } }, { name: ("togglehide " + pointerLeave), handler: function handler(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 handler() { this.clearTimers(); } }, { name: 'show', self: true, handler: function handler() { this.tracker.init(); addClass(this.toggle.$el, this.cls); attr(this.toggle.$el, 'aria-expanded', 'true'); registerEvent(); } }, { name: 'beforehide', self: true, handler: function handler() { this.clearTimers(); } }, { name: 'hide', handler: function handler(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; 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 write() { if (this.isToggled() && !Animation.inProgress(this.$el)) { this.position(); } }, events: ['resize'] }, methods: { show: function show(toggle, delay) { var this$1 = this; if ( delay === void 0 ) delay = true; var show = function () { if (!this$1.isToggled()) { this$1.position(); this$1.toggleElement(this$1.$el, true); } }, 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 hide(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 clearTimers() { clearTimeout(this.showTimer); clearTimeout(this.hideTimer); this.showTimer = null; this.hideTimer = null; this.isDelaying = false; }, isActive: function isActive() { return active === this; }, isChildOf: function isChildOf(drop) { return drop && drop !== this && within(this.$el, drop.$el); }, isParentOf: function isParentOf(drop) { return drop && drop !== this && within(drop.$el, this.$el); }, position: function position() { 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), 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")); trigger(this.$el, 'stack', [this]); } this.positionAt(this.$el, this.boundaryAlign ? this.boundary : this.toggle.$el, this.boundary); css(this.$el, 'display', ''); } } }); UIkit.drop.getActive = function () { return active; }; var registered; function registerEvent() { if (registered) { return; } registered = true; on(docEl, '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 = function (UIkit) { UIkit.component('dropdown', UIkit.components.drop.extend({name: 'dropdown'})); }; var FormCustom = function (UIkit) { UIkit.component('form-custom', { mixins: [Class], args: 'target', props: { target: Boolean }, defaults: { target: false }, computed: { input: function input(_, $el) { return $$1(selInput, $el); }, state: function state() { return this.input.nextElementSibling; }, target: function target(ref, $el) { var target = ref.target; return target && (target === true && this.input.parentNode === $el && this.input.nextElementSibling || query(target, $el)); } }, connected: function connected() { trigger(this.input, 'change'); }, events: [ { name: 'focusin focusout mouseenter mouseleave', delegate: selInput, handler: function handler(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 handler() { var target = this.target, input = this.input, option; if (!target) { return; } target[isInput(target) ? 'value' : 'textContent'] = 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; } } ] }); }; var Gif = function (UIkit) { UIkit.component('gif', { update: { read: function read() { var inview = isInView(this.$el); if (!this.isInView && inview) { this.$el.src = this.$el.src; } this.isInView = inview; }, events: ['scroll', 'load', 'resize'] } }); }; var Grid = function (UIkit) { UIkit.component('grid', UIkit.components.margin.extend({ mixins: [Class], name: 'grid', defaults: { margin: 'uk-grid-margin', clsStack: 'uk-grid-stack' }, update: { write: function write() { toggleClass(this.$el, this.clsStack, this.stacks); }, events: ['load', 'resize'] } })); }; var HeightMatch = function (UIkit) { UIkit.component('height-match', { args: 'target', props: { target: String, row: Boolean }, defaults: { target: '> *', row: true }, computed: { elements: function elements(ref, $el) { var target = ref.target; return $$(target, $el); } }, update: { read: function read() { var this$1 = this; var lastOffset = false; css(this.elements, 'minHeight', ''); this.rows = !this.row ? [this.match(this.elements)] : this.elements.reduce(function (rows, el) { if (lastOffset !== el.offsetTop) { rows.push([el]); } else { rows[rows.length - 1].push(el); } lastOffset = el.offsetTop; return rows; }, []).map(function (elements) { return this$1.match(elements); }); }, write: function write() { this.rows.forEach(function (ref) { var height = ref.height; var elements = ref.elements; return css(elements, 'minHeight', height); }); }, events: ['load', 'resize'] }, methods: { match: function match(elements) { if (elements.length < 2) { return {}; } var max = 0, heights = []; elements .forEach(function (el) { var style, hidden; if (!isVisible(el)) { style = attr(el, 'style'); hidden = attr(el, 'hidden'); attr(el, { style: ((style || '') + ";display:block !important;"), hidden: null }); } max = Math.max(max, el.offsetHeight); heights.push(el.offsetHeight); if (!isUndefined(style)) { attr(el, {style: style, hidden: hidden}); } }); elements = elements.filter(function (el, i) { return heights[i] < max; }); return {height: max, elements: elements}; } } }); }; var HeightViewport = function (UIkit) { UIkit.component('height-viewport', { props: { expand: Boolean, offsetTop: Boolean, offsetBottom: Boolean, minHeight: Number }, defaults: { expand: false, offsetTop: false, offsetBottom: false, minHeight: 0 }, update: { write: function write() { css(this.$el, 'boxSizing', 'border-box'); var viewport = height(win), minHeight, offsetTop = 0; if (this.expand) { css(this.$el, {height: '', minHeight: ''}); var diff = viewport - offsetHeight(docEl); if (diff > 0) { minHeight = offsetHeight(this.$el) + diff; } } else { var top = offset(this.$el).top; if (top < viewport / 2 && this.offsetTop) { offsetTop += top; } if (this.offsetBottom === true) { offsetTop += offsetHeight(this.$el.nextElementSibling); } else if (isNumeric(this.offsetBottom)) { offsetTop += (viewport / 100) * this.offsetBottom; } else if (this.offsetBottom && endsWith(this.offsetBottom, 'px')) { offsetTop += toFloat(this.offsetBottom); } else if (isString(this.offsetBottom)) { offsetTop += offsetHeight(query(this.offsetBottom, this.$el)); } // on mobile devices (iOS and Android) window.innerHeight !== 100vh minHeight = offsetTop ? ("calc(100vh - " + offsetTop + "px)") : '100vh'; } if (!minHeight) { return; } css(this.$el, {height: '', minHeight: minHeight}); var elHeight = this.$el.offsetHeight; if (this.minHeight && this.minHeight > elHeight) { css(this.$el, 'minHeight', this.minHeight); } // IE 10-11 fix (min-height on a flex container won't apply to its flex items) if (viewport - offsetTop >= elHeight) { css(this.$el, 'height', minHeight); } }, events: ['load', 'resize'] } }); function offsetHeight(el) { return el && el.offsetHeight || 0; } }; var Hover = function (UIkit) { ready(function () { if (!hasTouch) { return; } var cls = 'uk-hover'; on(doc, '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 set(selector) { on(doc, 'tap', selector, function (ref) { var current = ref.current; return addClass(current, cls); }); } }); UIkit.hoverSelector = '.uk-animation-toggle, .uk-transition-toggle, [uk-hover]'; }); }; 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><line fill=\"none\" stroke=\"#000\" stroke-width=\"1.1\" x1=\"13\" y1=\"1\" x2=\"1\" y2=\"13\"></line></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><line fill=\"none\" stroke=\"#000\" stroke-width=\"1.4\" x1=\"19\" y1=\"1\" x2=\"1\" y2=\"19\"></line></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><rect x=\"4\" y=\"9\" width=\"11\" height=\"1\"></rect></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><rect y=\"3\" width=\"20\" height=\"2\"></rect><rect y=\"15\" width=\"20\" height=\"2\"></rect></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><rect x=\"0\" y=\"19\" width=\"40\" height=\"1\"></rect></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\"></polyline></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\"></polyline></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\"></circle><path fill=\"none\" stroke=\"#000\" stroke-width=\"1.1\" d=\"M14,14 L18,18 L14,14 Z\"></path></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\"></circle><line fill=\"none\" stroke=\"#000\" stroke-width=\"1.8\" x1=\"38\" y1=\"39\" x2=\"29\" y2=\"30\"></line></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 \"></polyline></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 \"></polyline></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 \"></polyline></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 \"></polyline></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\"></circle></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 \"></polyline></svg>"; var Icon = function (UIkit) { var parsed = {}, 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 }; UIkit.component('icon', UIkit.components.svg.extend({ attrs: ['icon', 'ratio'], mixins: [Class], name: 'icon', args: 'icon', props: ['icon'], defaults: {exclude: ['id', 'style', 'class', 'src', 'icon']}, init: function init() { addClass(this.$el, 'uk-icon'); if (isRtl) { this.icon = swap(swap(this.icon, 'left', 'right'), 'previous', 'next'); } }, disconnected: function disconnected() { delete this.delay; }, methods: { getSvg: function getSvg() { var icon = getIcon(this.icon); if (!icon) { return Promise.reject('Icon not found.'); } return Promise.resolve(icon); } } })); [ 'marker', 'navbar-toggle-icon', 'overlay-icon', 'pagination-previous', 'pagination-next', 'totop' ].forEach(function (name) { return registerComponent(name); }); [ 'slidenav-previous', 'slidenav-next' ].forEach(function (name) { return registerComponent(name, { init: function init() { addClass(this.$el, 'uk-slidenav'); if (hasClass(this.$el, 'uk-slidenav-large')) { this.icon += '-large'; } } }); }); registerComponent('search-icon', { init: function init() { if (hasClass(this.$el, 'uk-search-icon') && parents(this.$el, '.uk-search-large').length) { this.icon = 'search-large'; } else if (parents(this.$el, '.uk-search-navbar').length) { this.icon = 'search-navbar'; } } }); registerComponent('close', { init: function init() { this.icon = "close-" + (hasClass(this.$el, 'uk-close-large') ? 'large' : 'icon'); } }); registerComponent('spinner', { connected: function connected() { var this$1 = this; this.svg.then(function (svg) { return this$1.ratio !== 1 && css($$1('circle', svg), 'stroke-width', 1 / this$1.ratio); }, noop); } }); UIkit.icon.add = function (added) { Object.keys(added).forEach(function (name) { icons[name] = added[name]; delete parsed[name]; }); if (UIkit._initialized) { each(UIkit.instances, function (component) { if (component.$options.name === 'icon') { component.$reset(); } }); } }; function registerComponent(name, mixin$$1) { UIkit.component(name, UIkit.components.icon.extend({ name: name, mixins: mixin$$1 ? [mixin$$1] : [], defaults: { icon: name } })); } function getIcon(icon) { if (!icons[icon]) { return null; } if (!parsed[icon]) { parsed[icon] = $$1(icons[icon].trim()); } return parsed[icon]; } }; var Leader = function (UIkit) { UIkit.component('leader', { mixins: [Class], props: { fill: String, media: 'media' }, defaults: { fill: '', media: false, clsWrapper: 'uk-leader-fill', clsHide: 'uk-leader-hide', attrFill: 'data-fill' }, computed: { fill: function fill(ref) { var fill = ref.fill; return fill || getCssVar('leader-fill'); } }, connected: function connected() { this.wrapper = wrapInner(this.$el, ("<span class=\"" + (this.clsWrapper) + "\">"))[0]; }, disconnected: function disconnected() { unwrap(this.wrapper.childNodes); delete this._width; }, update: [ { read: function read() { var prev = this._width; this._width = Math.floor(this.$el.offsetWidth / 2); this._changed = prev !== this._width; this._hide = this.media && !win.matchMedia(this.media).matches; }, write: function write() { toggleClass(this.wrapper, this.clsHide, this._hide); if (this._changed) { attr(this.wrapper, this.attrFill, new Array(this._width).join(this.fill)); } }, events: ['load', 'resize'] } ] }); }; var Margin = function (UIkit) { UIkit.component('margin', { props: { margin: String, firstColumn: Boolean }, defaults: { margin: 'uk-margin-small-top', firstColumn: 'uk-first-column' }, update: { read: function read() { var this$1 = this; var items = this.$el.children; if (!items.length || !isVisible(this.$el)) { this.rows = false; return; } this.stacks = true; var rows = [[]]; for (var i = 0; i < items.length; i++) { var el = items[i], dim = el.getBoundingClientRect(); 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 = row[0].getBoundingClientRect(); if (dim.top >= Math.floor(leftDim.bottom)) { rows.push([el]); break; } if (Math.floor(dim.bottom) > leftDim.top) { this$1.stacks = false; if (dim.left < leftDim.left && !isRtl) { row.unshift(el); break; } row.push(el); break; } if (j === 0) { rows.unshift([el]); break; } } } this.rows = rows; }, write: function write() { var this$1 = this; this.rows && this.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'] } }); }; var Modal$1 = function (UIkit) { UIkit.component('modal', { mixins: [Modal], defaults: { clsPage: 'uk-modal-page', clsPanel: '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 handler() { if (hasClass(this.panel, 'uk-margin-auto-vertical')) { addClass(this.$el, 'uk-flex'); } else { css(this.$el, 'display', 'block'); } height(this.$el); // force reflow } }, { name: 'hidden', self: true, handler: function handler() { css(this.$el, 'display', ''); removeClass(this.$el, 'uk-flex'); } } ] }); UIkit.component('overflow-auto', { mixins: [Class], computed: { modal: function modal(_, $el) { return closest($el, '.uk-modal'); }, panel: function panel(_, $el) { return closest($el, '.uk-modal-dialog'); } }, connected: function connected() { css(this.$el, 'minHeight', 150); }, update: { write: function write() { if (!this.panel || !this.modal) { return; } var current = css(this.$el, 'maxHeight'); css(css(this.$el, 'maxHeight', 150), 'maxHeight', Math.max(150, 150 + height(this.modal) - this.panel.offsetHeight)); if (current !== css(this.$el, 'maxHeight')) { trigger(this.$el, 'resize'); } }, events: ['load', 'resize'] } }); UIkit.modal.dialog = function (content, options) { var dialog = UIkit.modal((" <div class=\"uk-modal\"> <div class=\"uk-modal-dialog\">" + content + "</div> </div> "), options); on(dialog.$el, 'hidden', function (ref) { var target = ref.target; var current = ref.current; if (target === current) { dialog.$destroy(true); } }); dialog.show(); 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: false, labels: UIkit.modal.labels}, options); return new Promise( function (resolve, reject) { 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-default uk-modal-close\">" + (options.labels.cancel) + "</button> <button class=\"uk-button uk-button-primary uk-modal-close\" autofocus>" + (options.labels.ok) + "</button> </div> "), options).$el, 'click', '.uk-modal-footer button', function (ref) { var target = ref.target; return index(target) === 0 ? reject() : resolve(); }); } ); }; UIkit.modal.prompt = function (message, value, options) { options = assign({bgClose: false, escClose: false, labels: UIkit.modal.labels}, options); return new Promise(function (resolve) { var resolved = false, 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 = $$1('input', prompt.$el); input.value = value; 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 = function (UIkit) { UIkit.component('nav', UIkit.components.accordion.extend({ name: 'nav', defaults: { targets: '> .uk-parent', toggle: '> a', content: '> ul' } })); }; var Navbar = function (UIkit) { UIkit.component('navbar', { mixins: [Class], props: { dropdown: String, mode: 'list', align: String, offset: Number, boundary: Boolean, boundaryAlign: Boolean, clsDrop: String, delayShow: Number, delayHide: Number, dropbar: Boolean, dropbarMode: String, dropbarAnchor: 'query', duration: Number }, defaults: { 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, }, computed: { boundary: function boundary(ref, $el) { var boundary = ref.boundary; var boundaryAlign = ref.boundaryAlign; return (boundary === true || boundaryAlign) ? $el : boundary }, pos: function pos(ref) { var align = ref.align; return ("bottom-" + align); } }, ready: function ready() { if (this.dropbar) { UIkit.navbarDropbar( query(this.dropbar, this.$el) || after(this.dropbarAnchor || this.$el, '<div></div>'), {clsDrop: this.clsDrop, mode: this.dropbarMode, duration: this.duration, navbar: this} ); } }, update: function update() { UIkit.drop( $$(((this.dropdown) + " ." + (this.clsDrop)), this.$el).filter(function (el) { return !UIkit.getComponent(el, 'dropdown'); }), assign({}, this.$props, {boundary: this.boundary, pos: this.pos}) ); }, events: [ { name: 'mouseover', delegate: function delegate() { return this.dropdown; }, handler: function handler(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); } } } ], methods: { getActive: function getActive() { var active = UIkit.drop.getActive(); return active && includes(active.mode, 'hover') && within(active.toggle.$el, this.$el) && active; } } }); UIkit.component('navbar-dropbar', { mixins: [Class], defaults: { clsDrop: '', mode: 'slide', navbar: null, duration: 200 }, init: function init() { if (this.mode === 'slide') { addClass(this.$el, 'uk-navbar-dropbar-slide'); } }, events: [ { name: 'beforeshow', el: function el() { return this.navbar.$el; }, handler: function handler(e, drop) { var $el = drop.$el; var dir = drop.dir; if (dir === 'bottom' && !within($el, this.$el)) { append(this.$el, $el); drop.show(); e.preventDefault(); } } }, { name: 'mouseleave', handler: function handler() { var active = this.navbar.getActive(); if (active && !matches(this.$el, ':hover')) { active.hide(); } } }, { name: 'show', handler: function handler(_, ref) { var $el = ref.$el; this.clsDrop && addClass($el, ((this.clsDrop) + "-dropbar")); this.transitionTo($el.offsetHeight + toFloat(css($el, 'margin-top')) + toFloat(css($el, 'margin-bottom'))); } }, { name: 'beforehide', handler: function handler(e, ref) { var $el = ref.$el; var active = this.navbar.getActive(); if (matches(this.$el, ':hover') && active && active.$el === $el) { e.preventDefault(); } } }, { name: 'hide', handler: function handler(_, ref) { var $el = ref.$el; var active = this.navbar.getActive(); if (!active || active && active.$el === $el) { this.transitionTo(0); } } } ], methods: { transitionTo: function transitionTo(newHeight) { height(this.$el, isVisible(this.$el) ? height(this.$el) : 0); Transition.cancel(this.$el); return Transition.start(this.$el, {height: newHeight}, this.duration).catch(noop); } } }); }; var scroll; var Offcanvas = function (UIkit) { UIkit.component('offcanvas', { mixins: [Modal], args: 'mode', props: { content: String, mode: String, flip: Boolean, overlay: Boolean }, defaults: { content: '.uk-offcanvas-content', mode: 'slide', flip: false, overlay: false, clsPage: 'uk-offcanvas-page', clsContainer: 'uk-offcanvas-container', clsPanel: '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 content(ref) { var content = ref.content; return $$1(content); }, clsFlip: function clsFlip(ref) { var flip = ref.flip; var clsFlip = ref.clsFlip; return flip ? clsFlip : ''; }, clsOverlay: function clsOverlay(ref) { var overlay = ref.overlay; var clsOverlay = ref.clsOverlay; return overlay ? clsOverlay : ''; }, clsMode: function clsMode(ref) { var mode = ref.mode; var clsMode = ref.clsMode; return (clsMode + "-" + mode); }, clsSidebarAnimation: function clsSidebarAnimation(ref) { var mode = ref.mode; var clsSidebarAnimation = ref.clsSidebarAnimation; return mode === 'none' || mode === 'reveal' ? '' : clsSidebarAnimation; }, clsContentAnimation: function clsContentAnimation(ref) { var mode = ref.mode; var clsContentAnimation = ref.clsContentAnimation; return mode !== 'push' && mode !== 'reveal' ? '' : clsContentAnimation }, transitionElement: function transitionElement(ref) { var mode = ref.mode; return mode === 'reveal' ? this.panel.parentNode : this.panel; } }, update: { write: function write() { if (this.getActive() === this) { if (this.overlay || this.clsContentAnimation) { width(this.content, width(win) - this.scrollbarWidth); } if (this.overlay) { height(this.content, height(win)); if (scroll) { this.content.scrollTop = scroll.y; } } } }, events: ['resize'] }, events: [ { name: 'click', delegate: function delegate() { return 'a[href^="#"]'; }, handler: function handler(ref) { var current = ref.current; if (current.hash && $$1(current.hash, this.content)) { scroll = null; this.hide(); } } }, { name: 'beforescroll', filter: function filter() { return this.overlay; }, handler: function handler(e, scroll, target) { if (scroll && target && this.isToggled() && $$1(target, this.content)) { once(this.$el, 'hidden', function () { return scroll.scrollTo(target); }); e.preventDefault(); } } }, { name: 'show', self: true, handler: function handler() { scroll = scroll || {x: win.pageXOffset, y: win.pageYOffset}; if (this.mode === 'reveal' && !hasClass(this.panel, this.clsMode)) { wrapAll(this.panel, '<div>'); addClass(this.panel.parentNode, this.clsMode); } css(docEl, 'overflowY', (!this.clsContentAnimation || this.flip) && this.scrollbarWidth && this.overlay ? 'scroll' : ''); addClass(doc.body, ((this.clsContainer) + " " + (this.clsFlip) + " " + (this.clsOverlay))); height(doc.body); // force reflow 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); // force reflow } }, { name: 'hide', self: true, handler: function handler() { 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 handler() { if (this.mode === 'reveal') { unwrap(this.panel); } if (!this.overlay) { scroll = {x: win.pageXOffset, y: win.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(doc.body, ((this.clsContainer) + " " + (this.clsFlip) + " " + (this.clsOverlay))); doc.body.scrollTop = scroll.y; css(docEl, 'overflow-y', ''); width(this.content, ''); height(this.content, ''); win.scrollTo(scroll.x, scroll.y); scroll = null; } }, { name: 'swipeLeft swipeRight', handler: function handler(e) { if (this.isToggled() && isTouch(e) && (e.type === 'swipeLeft' && !this.flip || e.type === 'swipeRight' && this.flip)) { this.hide(); } } } ] }); }; var Responsive = function (UIkit) { UIkit.component('responsive', { props: ['width', 'height'], init: function init() { addClass(this.$el, 'uk-responsive-width'); }, update: { read: function read() { this.dim = isVisible(this.$el) && this.width && this.height ? {width: width(this.$el.parentNode), height: this.height} : false; }, write: function write() { if (this.dim) { height(this.$el, Dimensions.contain({height: this.height, width: this.width}, this.dim).height); } }, events: ['load', 'resize'] } }); }; var Scroll = function (UIkit) { UIkit.component('scroll', { props: { duration: Number, offset: Number }, defaults: { duration: 1000, offset: 0 }, methods: { scrollTo: function scrollTo(el) { var this$1 = this; el = el && $$1(isString(el) ? el.replace(/\//g, '\\/') : el) || doc.body; var target = offset(el).top - this.offset, docHeight = height(doc), winHeight = height(win); if (target + winHeight > docHeight) { target = docHeight - winHeight; } if (!trigger(this.$el, 'beforescroll', [this, el])) { return; } var start = Date.now(), startY = win.pageYOffset, step = function () { var currentY = startY + (target - startY) * ease(clamp((Date.now() - start) / this$1.duration)); win.scrollTo(win.pageXOffset, currentY); // scroll more if we have not reached our destination if (currentY !== target) { requestAnimationFrame(step); } else { trigger(this$1.$el, 'scrolled', [this$1, el]); } }; step(); } }, events: { click: function click(e) { if (e.defaultPrevented) { return; } e.preventDefault(); this.scrollTo(this.$el.hash); } } }); function ease(k) { return 0.5 * (1 - Math.cos(Math.PI * k)); } }; var Scrollspy = function (UIkit) { UIkit.component('scrollspy', { args: 'cls', props: { cls: 'list', target: String, hidden: Boolean, offsetTop: Number, offsetLeft: Number, repeat: Boolean, delay: Number }, defaults: { cls: ['uk-scrollspy-inview'], target: false, hidden: true, offsetTop: 0, offsetLeft: 0, repeat: false, delay: 0, inViewClass: 'uk-scrollspy-inview' }, computed: { elements: function elements(ref, $el) { var target = ref.target; return target && $$(target, $el) || [$el]; } }, update: [ { write: function write() { if (this.hidden) { css(filter(this.elements, (":not(." + (this.inViewClass) + ")")), 'visibility', 'hidden'); } } }, { read: function read() { var this$1 = this; this.elements.forEach(function (el) { if (!el._scrollspy) { var cls = attr(el, 'uk-scrollspy-class'); el._scrollspy = {toggles: cls && cls.split(',') || this$1.cls}; } el._scrollspy.show = isInView(el, this$1.offsetTop, this$1.offsetLeft); }); }, write: function write() { var this$1 = this; var index = this.elements.length === 1 ? 1 : 0; this.elements.forEach(function (el, i) { var data = el._scrollspy, cls = data.toggles[i] || data.toggles[0]; if (data.show) { if (!data.inview && !data.timer) { var show = function () { css(el, 'visibility', ''); addClass(el, this$1.inViewClass); toggleClass(el, cls); trigger(el, 'inview'); this$1.$update(); data.inview = true; delete data.timer; }; if (this$1.delay && index) { data.timer = setTimeout(show, this$1.delay * index); } else { show(); } index++; } } else { if (data.inview && this$1.repeat) { if (data.timer) { clearTimeout(data.timer); delete data.timer; } css(el, 'visibility', this$1.hidden ? 'hidden' : ''); removeClass(el, this$1.inViewClass); toggleClass(el, cls); trigger(el, 'outview'); this$1.$update(); data.inview = false; } } }); }, events: ['scroll', 'load', 'resize'] } ] }); }; var ScrollspyNav = function (UIkit) { UIkit.component('scrollspy-nav', { props: { cls: String, closest: String, scroll: Boolean, overflow: Boolean, offset: Number }, defaults: { cls: 'uk-active', closest: false, scroll: false, overflow: true, offset: 0 }, computed: { links: function links(_, $el) { return $$('a[href^="#"]', $el).filter(function (el) { return el.hash; }); }, elements: function elements() { return this.closest ? closest(this.links, this.closest) : this.links; }, targets: function targets() { return $$(this.links.map(function (el) { return el.hash; }).join(',')); } }, update: [ { read: function read() { if (this.scroll) { UIkit.scroll(this.links, {offset: this.offset || 0}); } } }, { read: function read() { var this$1 = this; var scroll = win.pageYOffset + this.offset + 1, max = height(doc) - height(win) + this.offset; this.active = false; this.targets.every(function (el, i) { var top = offset(el).top, 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 !(this$1.active = $$1(filter(this$1.links, ("[href=\"#" + (el.id) + "\"]")))); }); }, write: function write() { this.links.forEach(function (el) { return el.blur(); }); removeClass(this.elements, this.cls); if (this.active) { trigger(this.$el, 'active', [ this.active, addClass(this.closest ? closest(this.active, this.closest) : this.active, this.cls) ]); } }, events: ['scroll', 'load', 'resize'] } ] }); }; var Sticky = function (UIkit) { UIkit.component('sticky', { mixins: [Class], attrs: true, props: { top: null, bottom: Boolean, offset: Number, animation: String, clsActive: String, clsInactive: String, clsFixed: String, clsBelow: String, selTarget: String, widthElement: 'query', showOnUp: Boolean, media: 'media', target: Number }, defaults: { top: 0, bottom: false, offset: 0, animation: '', clsActive: 'uk-active', clsInactive: '', clsFixed: 'uk-sticky-fixed', clsBelow: 'uk-sticky-below', selTarget: '', widthElement: false, showOnUp: false, media: false, target: false }, computed: { selTarget: function selTarget(ref, $el) { var selTarget = ref.selTarget; return selTarget && $$1(selTarget, $el) || $el; } }, connected: function connected() { this.placeholder = $$1('<div class="uk-sticky-placeholder"></div>'); this.widthElement = this.$props.widthElement || this.placeholder; if (!this.isActive) { this.hide(); } }, disconnected: function disconnected() { if (this.isActive) { this.isActive = false; this.hide(); removeClass(this.$el, this.clsInactive); } remove(this.placeholder); this.placeholder = null; this.widthElement = null; }, ready: function ready() { var this$1 = this; if (!(this.target && location.hash && win.pageYOffset > 0)) { return; } var target = $$1(location.hash); if (target) { requestAnimationFrame(function () { var top = offset(target).top, elTop = offset(this$1.$el).top, elHeight = this$1.$el.offsetHeight; if (elTop + elHeight >= top && elTop <= top + target.offsetHeight) { win.scrollTo(0, top - elHeight - this$1.target - this$1.offset); } }); } }, events: [ { name: 'active', self: true, handler: function handler() { replaceClass(this.selTarget, this.clsInactive, this.clsActive); } }, { name: 'inactive', self: true, handler: function handler() { replaceClass(this.selTarget, this.clsActive, this.clsInactive); } } ], update: [ { write: function write() { var this$1 = this; var placeholder = this.placeholder, outerHeight = (this.isActive ? placeholder : this.$el).offsetHeight, el; css(placeholder, assign( {height: css(this.$el, 'position') !== 'absolute' ? outerHeight : ''}, css(this.$el, ['marginTop', 'marginBottom', 'marginLeft', 'marginRight']) )); if (!within(placeholder, docEl)) { after(this.$el, placeholder); attr(placeholder, 'hidden', ''); } attr(this.widthElement, 'hidden', null); this.width = this.widthElement.offsetWidth; attr(this.widthElement, 'hidden', this.isActive ? null : ''); this.topOffset = offset(this.isActive ? placeholder : this.$el).top; this.bottomOffset = this.topOffset + outerHeight; ['top', 'bottom'].forEach(function (prop) { this$1[prop] = this$1.$props[prop]; if (!this$1[prop]) { return; } if (isNumeric(this$1[prop])) { this$1[prop] = this$1[(prop + "Offset")] + toFloat(this$1[prop]); } else { if (isString(this$1[prop]) && this$1[prop].match(/^-?\d+vh$/)) { this$1[prop] = height(win) * toFloat(this$1[prop]) / 100; } else { el = this$1[prop] === true ? this$1.$el.parentNode : query(this$1[prop], this$1.$el); if (el) { this$1[prop] = offset(el).top + el.offsetHeight; } } } }); this.top = Math.max(toFloat(this.top), this.topOffset) - this.offset; this.bottom = this.bottom && this.bottom - outerHeight; this.inactive = this.media && !win.matchMedia(this.media).matches; if (this.isActive) { this.update(); } }, events: ['load', 'resize'] }, { read: function read() { this.offsetTop = offset(this.$el).top; this.scroll = win.pageYOffset; this.visible = isVisible(this.$el); }, write: function write(ref) { var this$1 = this; if ( ref === void 0 ) ref = {}; var dir = ref.dir; var scroll = this.scroll; if (scroll < 0 || !this.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: ['scroll'] } ], methods: { show: function show() { this.isActive = true; this.update(); attr(this.placeholder, 'hidden', null); }, hide: function hide() { 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 update() { var top = Math.max(0, this.offset), active = this.scroll > this.top; 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); } } }); }; var svgs = {}; var Svg = function (UIkit) { UIkit.component('svg', { attrs: true, props: { id: String, icon: String, src: String, style: String, width: Number, height: Number, ratio: Number, 'class': String }, defaults: { ratio: 1, id: false, exclude: ['src'], 'class': '' }, init: function init() { this.class += ' uk-svg'; }, connected: function connected() { var this$1 = this; if (!this.icon && includes(this.src, '#')) { var parts = this.src.split('#'); if (parts.length > 1) { this.src = parts[0]; this.icon = parts[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 = $$1(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 disconnected() { 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 getSvg() { 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, 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>"; } } return symbols[svg][icon]; } }; var Switcher = function (UIkit) { UIkit.component('switcher', { mixins: [Togglable], args: 'connect', props: { connect: String, toggle: String, active: Number, swiping: Boolean }, defaults: { connect: '~.uk-switcher', toggle: '> *', active: 0, swiping: true, cls: 'uk-active', clsContainer: 'uk-switcher', attrItem: 'uk-switcher-item', queued: true }, computed: { connects: function connects(ref, $el) { var connect = ref.connect; return queryAll(connect, $el); }, toggles: function toggles(ref, $el) { var toggle = ref.toggle; return $$(toggle, $el); } }, events: [ { name: 'click', delegate: function delegate() { return ((this.toggle) + ":not(.uk-disabled)"); }, handler: function handler(e) { e.preventDefault(); this.show(e.current); } }, { name: 'click', el: function el() { return this.connects; }, delegate: function delegate() { return ("[" + (this.attrItem) + "],[data-" + (this.attrItem) + "]"); }, handler: function handler(e) { e.preventDefault(); this.show(data(e.current, this.attrItem)); } }, { name: 'swipeRight swipeLeft', filter: function filter() { return this.swiping; }, el: function el() { return this.connects; }, handler: function handler(e) { if (!isTouch(e)) { return; } e.preventDefault(); if (!win.getSelection().toString()) { this.show(e.type === 'swipeLeft' ? 'next' : 'previous'); } } } ], update: function update() { 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: { show: function show(item) { var this$1 = this; var length = this.toggles.length, prev = this.connects.length && index(filter(this.connects[0].children, ("." + (this.cls)))[0]), hasPrev = prev >= 0, next = getIndex(item, this.toggles, prev), dir = item === 'previous' ? -1 : 1, toggle; 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 = function (UIkit) { UIkit.component('tab', UIkit.components.switcher.extend({ mixins: [Class], name: 'tab', props: { media: 'media' }, defaults: { media: 960, attrItem: 'uk-tab-item' }, init: function init() { var cls = hasClass(this.$el, 'uk-tab-left') ? 'uk-tab-left' : hasClass(this.$el, 'uk-tab-right') ? 'uk-tab-right' : false; if (cls) { UIkit.toggle(this.$el, {cls: cls, mode: 'media', media: this.media}); } } })); }; var Toggle = function (UIkit) { UIkit.component('toggle', { mixins: [UIkit.mixin.togglable], args: 'target', props: { href: String, target: null, mode: 'list', media: 'media' }, defaults: { href: false, target: false, mode: 'click', queued: true, media: false }, computed: { target: function target(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 filter() { return includes(this.mode, 'hover'); }, handler: function handler(e) { if (!isTouch(e)) { this.toggle(("toggle" + (e.type === pointerEnter ? 'show' : 'hide'))); } } }, { name: 'click', filter: function filter() { return includes(this.mode, 'click') || hasTouch; }, handler: function handler(e) { if (!isTouch(e) && !includes(this.mode, 'click')) { return; } // TODO better isToggled handling 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) ) ) { e.preventDefault(); } this.toggle(); } } ], update: { write: function write() { if (!includes(this.mode, 'media') || !this.media) { return; } var toggled = this.isToggled(this.target); if (win.matchMedia(this.media).matches ? !toggled : toggled) { this.toggle(); } }, events: ['load', 'resize'] }, methods: { toggle: function toggle(type) { if (trigger(this.target, type || 'toggle', [this])) { this.toggleElement(this.target); } } } }); }; var Video = function (UIkit) { UIkit.component('video', { props: { automute: Boolean, autoplay: Boolean, }, defaults: {automute: false, autoplay: true}, ready: function ready() { this.player = new Player(this.$el); if (this.automute) { this.player.mute(); } }, update: { write: function write() { if (!this.player) { return; } if (!isVisible(this.$el) || css(this.$el, 'visibility') === 'hidden') { this.player.pause(); } else if (this.autoplay) { this.player.play(); } }, events: ['load'] }, }); }; var core = function (UIkit) { var scroll = 0, started = 0; on(win, 'load resize', UIkit.update); on(win, 'scroll', function (e) { e.dir = scroll < win.pageYOffset ? 'down' : 'up'; scroll = win.pageYOffset; UIkit.update(e); fastdom.flush(); }); animationstart && on(doc, animationstart, function (ref) { var target = ref.target; if ((css(target, 'animationName') || '').match(/^uk-.*(left|right)/)) { started++; doc.body.style.overflowX = 'hidden'; setTimeout(function () { if (!--started) { doc.body.style.overflowX = ''; } }, toMs(css(target, 'animationDuration')) + 100); } }, true); // core components UIkit.use(Toggle); UIkit.use(Accordion); UIkit.use(Alert); UIkit.use(Video); UIkit.use(Cover); UIkit.use(Drop); UIkit.use(Dropdown); UIkit.use(FormCustom); UIkit.use(HeightMatch); UIkit.use(HeightViewport); UIkit.use(Hover); UIkit.use(Margin); UIkit.use(Gif); UIkit.use(Grid); UIkit.use(Leader); UIkit.use(Modal$1); UIkit.use(Nav); UIkit.use(Navbar); UIkit.use(Offcanvas); UIkit.use(Responsive); UIkit.use(Scroll); UIkit.use(Scrollspy); UIkit.use(ScrollspyNav); UIkit.use(Sticky); UIkit.use(Svg); UIkit.use(Icon); UIkit.use(Switcher); UIkit.use(Tab); }; UIkit$2.version = '3.0.0-beta.34'; mixin(UIkit$2); core(UIkit$2); function plugin(UIkit) { if (plugin.installed) { return; } var ref = UIkit.util; var $ = ref.$; var doc = ref.doc; var empty = ref.empty; var html = ref.html; UIkit.component('countdown', { mixins: [UIkit.mixin.class], attrs: true, props: { date: String, clsWrapper: String }, defaults: { date: '', clsWrapper: '.uk-countdown-%unit%' }, computed: { date: function date(ref) { var date = ref.date; return Date.parse(date); }, days: function days(ref, $el) { var clsWrapper = ref.clsWrapper; return $(clsWrapper.replace('%unit%', 'days'), $el); }, hours: function hours(ref, $el) { var clsWrapper = ref.clsWrapper; return $(clsWrapper.replace('%unit%', 'hours'), $el); }, minutes: function minutes(ref, $el) { var clsWrapper = ref.clsWrapper; return $(clsWrapper.replace('%unit%', 'minutes'), $el); }, seconds: function seconds(ref, $el) { var clsWrapper = ref.clsWrapper; return $(clsWrapper.replace('%unit%', 'seconds'), $el); }, units: function units() { var this$1 = this; return ['days', 'hours', 'minutes', 'seconds'].filter(function (unit) { return this$1[unit]; }); } }, connected: function connected() { this.start(); }, disconnected: function disconnected() { var this$1 = this; this.stop(); this.units.forEach(function (unit) { return empty(this$1[unit]); }); }, events: [ { name: 'visibilitychange', el: doc, handler: function handler() { if (doc.hidden) { this.stop(); } else { this.start(); } } } ], update: { write: function write() { 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 start() { var this$1 = this; this.stop(); if (this.date && this.units.length) { this.$emit(); this.timer = setInterval(function () { return this$1.$emit(); }, 1000); } }, stop: function stop() { if (this.timer) { clearInterval(this.timer); this.timer = null; } } } }); function getTimeSpan(date) { var total = date - Date.now(); return { total: total, seconds: total / 1000 % 60, minutes: total / 1000 / 60 % 60, hours: total / 1000 / 60 / 60 % 24, days: total / 1000 / 60 / 60 / 24 }; } } if (!true && typeof window !== 'undefined' && window.UIkit) { window.UIkit.use(plugin); } function plugin$1(UIkit) { if (plugin$1.installed) { return; } var ref = UIkit.util; var $$ = ref.$$; var addClass = ref.addClass; var css = ref.css; var scrolledOver = ref.scrolledOver; var toFloat = ref.toFloat; var toNodes = ref.toNodes; UIkit.component('grid-parallax', UIkit.components.grid.extend({ props: { target: String, translate: Number }, defaults: { target: false, translate: 150 }, computed: { translate: function translate(ref) { var translate = ref.translate; return Math.abs(translate); }, items: function items(ref, $el) { var target = ref.target; return target ? $$(target, $el) : toNodes($el.children); } }, init: function init() { addClass(this.$el, 'uk-grid'); }, disconnected: function disconnected() { this.reset(); css(this.$el, 'marginBottom', ''); }, update: [ { read: function read() { this.columns = this.rows && this.rows[0] && this.rows[0].length || 0; this.rows = this.rows && this.rows.map(function (elements) { return sortBy(elements, 'offsetLeft'); }); }, write: function write() { css(this.$el, 'marginBottom', this.columns > 1 ? this.translate + toFloat(css(css(this.$el, 'marginBottom', ''), 'marginBottom')) : ''); }, events: ['load', 'resize'] }, { read: function read() { this.scrolled = scrolledOver(this.$el) * this.translate; }, write: function write() { var this$1 = this; if (!this.rows || this.columns === 1 || !this.scrolled) { return this.reset(); } this.rows.forEach(function (row) { return row.forEach(function (el, i) { return css(el, 'transform', ("translateY(" + (i % 2 ? this$1.scrolled : this$1.scrolled / 8) + "px)")); } ); } ); }, events: ['scroll', 'load', 'resize'] } ], methods: { reset: function reset() { css(this.items, 'transform', ''); } } })); UIkit.component('grid-parallax').options.update.unshift({ read: function read() { this.reset(); }, events: ['load', 'resize'] }); function sortBy(collection, prop) { return collection.sort(function (a, b) { return a[prop] > b[prop] ? 1 : b[prop] > a[prop] ? -1 : 0; } ) } } if (!true && typeof window !== 'undefined' && window.UIkit) { window.UIkit.use(plugin$1); } var Animations = function (UIkit) { var ref = UIkit.util; var css = ref.css; var Animations = { slide: { show: function show(dir) { return [ {transform: translate(dir * -100)}, {transform: translate()} ]; }, percent: function percent(current) { return Animations.translated(current); }, translate: function translate$1(percent, dir) { return [ {transform: translate(dir * -100 * percent)}, {transform: translate(dir * 100 * (1 - percent))} ]; } }, translated: function translated(el) { return Math.abs(css(el, 'transform').split(',')[4] / el.offsetWidth) } }; return Animations; }; function translate(value) { if ( value === void 0 ) value = 0; return ("translate(" + value + (value ? '%' : '') + ", 0)"); // currently not translate3d to support IE, translate3d within translate3d does not work while transitioning } function scale3d(value) { return ("scale3d(" + value + ", " + value + ", 1)"); } function plugin$3(UIkit) { if (plugin$3.installed) { return; } var ref = UIkit.util; var $$ = ref.$$; var $ = ref.$; var addClass = ref.addClass; var assign = ref.assign; var createEvent = ref.createEvent; var css = ref.css; var data = ref.data; var doc = ref.doc; var endsWith = ref.endsWith; var fastdom = ref.fastdom; var getIndex = ref.getIndex; var getPos = ref.getPos; var hasClass = ref.hasClass; var index = ref.index; var isTouch = ref.isTouch; var noop = ref.noop; var off = ref.off; var on = ref.on; var pointerDown = ref.pointerDown; var pointerMove = ref.pointerMove; var pointerUp = ref.pointerUp; var preventClick = ref.preventClick; var Promise = ref.Promise; var removeClass = ref.removeClass; var toggleClass = ref.toggleClass; var toNodes = ref.toNodes; var Transition = ref.Transition; var trigger = ref.trigger; var win = ref.win; var abs = Math.abs; UIkit.mixin.slideshow = { attrs: true, props: { autoplay: Boolean, autoplayInterval: Number, pauseOnHover: Boolean, animation: String, easing: String, velocity: Number }, defaults: { autoplay: false, autoplayInterval: 7000, pauseOnHover: true, animation: 'slide', easing: 'ease', velocity: 1, index: 0, stack: [], threshold: 10, percent: 0, clsActive: 'uk-active', clsActivated: 'uk-transition-active', initialAnimation: false, Animations: Animations(UIkit) }, computed: { list: function list(ref, $el) { var selList = ref.selList; return $(selList, $el); }, slides: function slides() { return toNodes(this.list.children); }, animation: function animation(ref) { var animation = ref.animation; var Animations$$1 = ref.Animations; return assign(animation in Animations$$1 ? Animations$$1[animation] : Animations$$1.slide, {name: animation}); }, duration: function duration(ref, $el) { var velocity = ref.velocity; return speedUp($el.offsetWidth / velocity); } }, init: function init() { var this$1 = this; ['start', 'move', 'end'].forEach(function (key) { var fn = this$1[key]; this$1[key] = function (e) { var pos = getPos(e).x; this$1.prevPos = pos !== this$1.pos ? this$1.pos : this$1.prevPos; this$1.pos = pos; fn(e); }; }); }, connected: function connected() { this.startAutoplay(); }, disconnected: function disconnected() { this.stopAutoplay(); }, update: [ { read: function read() { delete this._computeds.duration; }, events: ['load', 'resize'] } ], events: [ { name: 'click', delegate: function delegate() { return ("[" + (this.attrItem) + "],[data-" + (this.attrItem) + "]"); }, handler: function handler(e) { e.preventDefault(); e.current.blur(); this.show(data(e.current, this.attrItem)); } }, { name: pointerDown, delegate: function delegate() { return ((this.selList) + " > *"); }, handler: function handler(e) { if (isTouch(e) || !hasTextNodesOnly(e.target)) { this.start(e); } } }, { name: 'visibilitychange', el: doc, handler: function handler() { if (doc.hidden) { this.stopAutoplay(); } else { this.startAutoplay(); } } }, { name: pointerDown, handler: 'stopAutoplay' }, { name: 'mouseenter', filter: function filter() { return this.autoplay; }, handler: function handler() { this.isHovering = true; } }, { name: 'mouseleave', filter: function filter() { return this.autoplay; }, handler: function handler() { this.isHovering = false; } }, { name: 'beforeitemshow', self: true, delegate: function delegate() { return ((this.selList) + " > *"); }, handler: function handler(ref) { var target = ref.target; addClass(target, this.clsActive); } }, { name: 'itemshown', self: true, delegate: function delegate() { return ((this.selList) + " > *"); }, handler: function handler(ref) { var target = ref.target; addClass(target, this.clsActivated); } }, { name: 'itemshow itemhide', self: true, delegate: function delegate() { return ((this.selList) + " > *"); }, handler: function handler(ref) { var type = ref.type; var target = ref.target; toggleClass($$(("[" + (this.attrItem) + "=\"" + (index(target)) + "\"],[data-" + (this.attrItem) + "=\"" + (index(target)) + "\"]"), this.$el), this.clsActive, endsWith(type, 'show')); } }, { name: 'itemhidden', self: true, delegate: function delegate() { return ((this.selList) + " > *"); }, handler: function handler(ref) { var target = ref.target; removeClass(target, this.clsActive); removeClass(target, this.clsActivated); } }, { name: 'itemshow itemhide itemshown itemhidden', self: true, delegate: function delegate() { return ((this.selList) + " > *"); }, handler: function handler(ref) { var target = ref.target; UIkit.update(null, target); } }, { name: 'dragstart', handler: function handler(e) { e.preventDefault(); } } ], methods: { start: function start(e) { if (e.button && e.button !== 0 || this.slides.length < 2) { return; } if (this._animation && this._animation.animation !== this.animation) { return; } var percent = 0; if (this.stack.length) { var ref = this._animation; var dir = ref.dir; var getPercent = ref.percent; var cancel = ref.cancel; var translate$$1 = ref.translate; percent = getPercent() * dir; this.percent = abs(percent) * -dir; this.stack.splice(0, this.stack.length); cancel(); translate$$1(abs(percent)); this.index = this.getIndex(this.index - dir); this.dragging = true; } this.unbindMove = on(doc, pointerMove, this.move, {capture: true, passive: false}); on(win, 'scroll', this.unbindMove); on(doc, pointerUp, this.end, true); this.drag = this.pos + this.$el.offsetWidth * percent; }, move: function move(e) { var this$1 = this; var distance = this.pos - this.drag; if (this.prevPos === this.pos || !this.dragging && abs(distance) < this.threshold) { return; } e.cancelable && e.preventDefault(); this.dragging = true; var percent = distance / this.$el.offsetWidth; if (this.percent === percent) { return; } var prevIndex = this.getIndex(this.index - trunc(this.percent)), index = this.getIndex(this.index - trunc(percent)), current = this.slides[index], dir = percent < 0 ? 1 : -1, nextIndex = getIndex(percent < 0 ? 'next' : 'previous', this.slides, index), next = this.slides[nextIndex]; this.slides.forEach(function (el, i) { return toggleClass(el, this$1.clsActive, i === index || i === nextIndex); }); this._animation && this._animation.reset(); if (index !== prevIndex) { trigger(this.slides[prevIndex], 'itemhide', [this]); trigger(current, 'itemshow', [this]); } this._animation = new Transitioner(this.animation, this.easing, current, next, dir, noop); this._animation.translate(abs(percent % 1)); this.percent = percent; UIkit.update(null, current); UIkit.update(null, next); }, end: function end() { off(win, 'scroll', this.unbindMove); this.unbindMove(); off(doc, pointerUp, this.end, true); if (this.dragging) { var percent = this.percent; this.percent = abs(this.percent) % 1; this.index = this.getIndex(this.index - trunc(percent)); if (this.percent < .1 || percent < 0 === this.pos > this.prevPos) { this.index = this.getIndex(percent > 0 ? 'previous' : 'next'); this.percent = 1 - this.percent; percent *= -1; } this._animation && this._animation.reset(); this.show(percent > 0 ? 'previous' : 'next', true); preventClick(); } this.drag = this.dragging = this.percent = null; }, show: function show(index, force) { var this$1 = this; if ( force === void 0 ) force = false; if (!force && this.drag) { return; } this.stack[force ? 'unshift' : 'push'](index); if (!force && this.stack.length > 1) { if (this.stack.length === 2) { this._animation.forward(250); } return; } var prevIndex = this.index, nextIndex = this.getIndex(index), prev = hasClass(this.slides, 'uk-active') && this.slides[prevIndex], next = this.slides[nextIndex]; if (prev === next) { this.stack[force ? 'shift' : 'pop'](); return; } prev && trigger(prev, 'beforeitemhide', [this]); trigger(next, 'beforeitemshow', [this]); this.index = nextIndex; var done = function () { prev && trigger(prev, 'itemhidden', [this$1]); trigger(next, 'itemshown', [this$1]); fastdom.mutate(function () { this$1.stack.shift(); if (this$1.stack.length) { this$1.show(this$1.stack.shift(), true); } else { this$1._animation = null; } }); }; if (prev || this.initialAnimation) { this._show( !prev ? this.Animations[this.initialAnimation] : this.animation, force ? 'cubic-bezier(0.165, 0.840, 0.440, 1.000)' : this.easing, prev, next, getDirection(index, prevIndex), this.stack.length > 1, done ); } prev && trigger(prev, 'itemhide', [this]); trigger(next, 'itemshow', [this]); if (!prev && !this.initialAnimation) { done(); } prev && fastdom.flush(); // iOS 10+ will honor the video.play only if called from a gesture handler }, _show: function _show(animation, easing, prev, next, dir, forward, done) { this._animation = new Transitioner( animation, easing, prev, next, dir, done ); this._animation.show( prev === next ? 300 : forward ? 150 : this.duration, this.percent, forward ); }, getIndex: function getIndex$1(index) { if ( index === void 0 ) index = this.index; return getIndex(index, this.slides, this.index); }, startAutoplay: function startAutoplay() { var this$1 = this; this.stopAutoplay(); if (this.autoplay) { this.interval = setInterval(function () { if (!(this$1.isHovering && this$1.pauseOnHover) && !this$1.stack.length) { this$1.show('next'); } }, this.autoplayInterval); } }, stopAutoplay: function stopAutoplay() { if (this.interval) { clearInterval(this.interval); } } } }; function Transitioner(animation, easing, current, next, dir, cb) { var percent = animation.percent; var translate$$1 = animation.translate; var show = animation.show; var props = show(dir); return { animation: animation, dir: dir, current: current, next: next, show: function show(duration, percent, linear) { var this$1 = this; if ( percent === void 0 ) percent = 0; var ease = linear ? 'linear' : easing; duration -= Math.round(duration * percent); this.translate(percent); triggerUpdate(next, 'itemin', {percent: percent, duration: duration, ease: ease, dir: dir}); current && triggerUpdate(current, 'itemout', {percent: 1 - percent, duration: duration, ease: ease, dir: dir}); return Promise.all([ Transition.start(next, props[1], duration, ease), current && Transition.start(current, props[0], duration, ease) ]).then(function () { this$1.reset(); cb(); }, noop); }, stop: function stop() { return Transition.stop([next, current]); }, cancel: function cancel() { Transition.cancel([next, current]); }, reset: function reset() { for (var prop in props[0]) { css([next, current], prop, ''); } }, forward: function forward(duration) { var percent = this.percent(); Transition.cancel([next, current]); this.show(duration, percent, true); }, translate: function translate$1(percent) { var props = translate$$1(percent, dir); css(next, props[1]); current && css(current, props[0]); triggerUpdate(next, 'itemtranslatein', {percent: percent, dir: dir}); current && triggerUpdate(current, 'itemtranslateout', {percent: 1 - percent, dir: dir}); }, percent: function percent$1() { return percent(current, next, dir); } } } function triggerUpdate(el, type, data) { trigger(el, createEvent(type, false, false, data)); } // polyfill for Math.trunc (IE) function trunc(x) { return ~~x; } function getDirection(index, prevIndex) { return index === 'next' ? 1 : index === 'previous' ? -1 : index < prevIndex ? -1 : 1; } function speedUp(x) { return .5 * x + 300; // parabola through (400,500; 600,600; 1800,1200) } function hasTextNodesOnly(el) { return !el.children.length && el.childNodes.length; } } var Animations$1 = function (UIkit) { var mixin = UIkit.mixin; var ref = UIkit.util; var assign = ref.assign; var css = ref.css; return assign({}, mixin.slideshow.defaults.Animations, { fade: { show: function show() { return [ {opacity: 0}, {opacity: 1} ]; }, percent: function percent(current) { return 1 - css(current, 'opacity'); }, translate: function translate$$1(percent) { return [ {opacity: 1 - percent}, {opacity: percent} ]; } }, scale: { show: function show() { return [ {opacity: 0, transform: scale3d(1 - .2)}, {opacity: 1, transform: scale3d(1)} ]; }, percent: function percent(current) { return 1 - css(current, 'opacity'); }, translate: function translate$$1(percent) { return [ {opacity: 1 - percent, transform: scale3d(1 - .2 * percent)}, {opacity: percent, transform: scale3d(1 - .2 + .2 * percent)} ]; } } }); }; function plugin$2(UIkit) { if (plugin$2.installed) { return; } UIkit.use(plugin$3); var mixin = UIkit.mixin; var util = UIkit.util; var $ = util.$; var $$ = util.$$; var addClass = util.addClass; var ajax = util.ajax; var append = util.append; var assign = util.assign; var attr = util.attr; var css = util.css; var doc = util.doc; var docEl = util.docEl; var data = util.data; var getImage = util.getImage; var html = util.html; var index = util.index; var on = util.on; var pointerDown = util.pointerDown; var pointerMove = util.pointerMove; var removeClass = util.removeClass; var Transition = util.Transition; var trigger = util.trigger; UIkit.component('lightbox', { attrs: true, props: { animation: String, toggle: String, autoplay: Boolean, autoplayInterval: Number, videoAutoplay: Boolean }, defaults: { animation: undefined, toggle: 'a', autoplay: 0, videoAutoplay: false }, computed: { toggles: function toggles(ref, $el) { var this$1 = this; var toggle = ref.toggle; var toggles = $$(toggle, $el); this._changed = !this._toggles || toggles.length !== this._toggles.length || toggles.some(function (el, i) { return el !== this$1._toggles[i]; }); return this._toggles = toggles; } }, disconnected: function disconnected() { if (this.panel) { this.panel.$destroy(true); this.panel = null; } }, events: [ { name: 'click', delegate: function delegate() { return ((this.toggle) + ":not(.uk-disabled)"); }, handler: function handler(e) { e.preventDefault(); e.current.blur(); this.show(index(this.toggles, e.current)); } } ], update: function update() { if (this.panel && this.animation) { this.panel.$props.animation = this.animation; this.panel.$emit(); } if (!this.toggles.length || !this._changed || !this.panel) { return; } this.panel.$destroy(true); this._init(); }, methods: { _init: function _init() { return this.panel = this.panel || UIkit.lightboxPanel(assign({}, this.$props, { items: this.toggles.reduce(function (items, el) { items.push(['href', 'caption', 'type', 'poster'].reduce(function (obj, attr) { obj[attr === 'href' ? 'source' : attr] = data(el, attr); return obj; }, {})); return items; }, []) })); }, show: function show(index) { if (!this.panel) { this._init(); } return this.panel.show(index); }, hide: function hide() { return this.panel && this.panel.hide(); } } }); UIkit.component('lightbox-panel', { mixins: [mixin.container, mixin.togglable, mixin.slideshow], functional: true, defaults: { preload: 1, videoAutoplay: false, delayControls: 3000, items: [], cls: 'uk-open', clsPage: 'uk-lightbox-page', selList: '.uk-lightbox-items', attrItem: 'uk-lightbox-item', initialAnimation: 'scale', pauseOnHover: false, velocity: 2, Animations: Animations$1(UIkit), 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 uk-toggle=\"!.uk-lightbox\"></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 created() { var this$1 = this; this.$mount(append(this.container, this.template)); this.caption = $('.uk-lightbox-caption', this.$el); this.items.forEach(function (el, i) { return append(this$1.list, "<li></li>"); }); }, events: [ { name: (pointerMove + " " + pointerDown + " keydown"), handler: 'showControls' }, { name: 'click', self: true, delegate: function delegate() { return ((this.selList) + " > *"); }, handler: function handler(e) { e.preventDefault(); this.hide(); } }, { name: 'show', self: true, handler: function handler() { addClass(docEl, this.clsPage); } }, { name: 'shown', self: true, handler: 'showControls' }, { name: 'hide', self: true, handler: 'hideControls' }, { name: 'hidden', self: true, handler: function handler() { removeClass(docEl, this.clsPage); } }, { name: 'keyup', el: function el() { return doc; }, handler: function handler(e) { if (!this.isToggled(this.$el)) { return; } switch (e.keyCode) { case 27: this.hide(); break; case 37: this.show('previous'); break; case 39: this.show('next'); break; } } }, { name: 'toggle', handler: function handler(e) { e.preventDefault(); this.toggle(); } }, { name: 'beforeitemshow', self: true, delegate: function delegate() { return ((this.selList) + " > *"); }, handler: function handler() { if (!this.isToggled()) { this.toggleNow(this.$el, true); } } }, { name: 'itemshow', self: true, delegate: function delegate() { return ((this.selList) + " > *"); }, handler: function handler(ref) { var this$1 = this; var target = ref.target; var i = index(target), caption = this.getItem(i).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: 'itemload', handler: function handler(_, item) { var this$1 = this; var source = item.source; var type = item.type; var matches; this.setItem(item, '<span uk-spinner></span>'); if (!source) { return; } // Image 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 + "\">")); }, function () { return this$1.setError(item); } ); // Video } else if (type === 'video' || source.match(/\.(mp4|webm|ogv)$/i)) { var video = $(("<video controls playsinline" + (item.poster ? (" poster=\"" + (item.poster) + "\"") : '') + " uk-video=\"autoplay: " + (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); }); // Iframe } else if (type === 'iframe') { this.setItem(item, ("<iframe class=\"uk-lightbox-iframe\" src=\"" + source + "\" frameborder=\"0\" allowfullscreen></iframe>")); // Youtube } else if (matches = source.match(/\/\/.*?youtube\.[a-z]+\/watch\?v=([^&\s]+)/) || source.match(/youtu\.be\/(.*)/)) { var id = matches[1], setIframe = function (width, height) { if ( width === void 0 ) width = 640; if ( height === void 0 ) height = 450; return this$1.setItem(item, getIframe(("//www.youtube.com/embed/" + id), width, height, this$1.videoAutoplay)); }; getImage(("//img.youtube.com/vi/" + id + "/maxresdefault.jpg")).then( function (ref) { var width = ref.width; var height = ref.height; //youtube default 404 thumb, fall back to lowres if (width === 120 && height === 90) { getImage(("//img.youtube.com/vi/" + id + "/0.jpg")).then( function (ref) { var width = ref.width; var height = ref.height; return setIframe(width, height); }, setIframe ); } else { setIframe(width, height); } }, setIframe ); // Vimeo } else if (matches = source.match(/(\/\/.*?)vimeo\.[a-z]+\/([0-9]+).*?/)) { ajax(("//vimeo.com/api/oembed.json?maxwidth=1920&url=" + (encodeURI(source))), {responseType: 'json'}) .then(function (ref) { var ref_response = ref.response; var height = ref_response.height; var width = ref_response.width; return this$1.setItem(item, getIframe(("//player.vimeo.com/video/" + (matches[2])), width, height, this$1.videoAutoplay)); } ); } } } ], methods: { toggle: function toggle() { return this.isToggled() ? this.hide() : this.show(); }, hide: function hide() { if (this.isToggled()) { this.toggleNow(this.$el, false); } removeClass(this.slides, this.clsActive); Transition.stop(this.slides); delete this.index; delete this.percent; delete this._animation; }, loadItem: function loadItem(index) { if ( index === void 0 ) index = this.index; var item = this.getItem(index); if (item.content) { return; } trigger(this.$el, 'itemload', [item]); }, getItem: function getItem(index) { if ( index === void 0 ) index = this.index; return this.items[index] || {}; }, setItem: function setItem(item, content) { assign(item, {content: content}); var el = html(this.slides[this.items.indexOf(item)], content); trigger(this.$el, 'itemloaded', [this, el]); UIkit.update(null, el); }, setError: function setError(item) { this.setItem(item, '<span uk-icon="icon: bolt; ratio: 2"></span>'); }, showControls: function showControls() { clearTimeout(this.controlsTimer); this.controlsTimer = setTimeout(this.hideControls, this.delayControls); attr($$(("[" + (this.attrItem) + "],[data-" + (this.attrItem) + "]"), this.$el), 'hidden', this.items.length < 2 ? '' : null); addClass(this.$el, 'uk-active uk-transition-active'); }, hideControls: function hideControls() { removeClass(this.$el, 'uk-active uk-transition-active'); } } }); function getIframe(src, width, height, autoplay) { return ("<iframe src=\"" + src + "\" width=\"" + width + "\" height=\"" + height + "\" style=\"max-width: 100%; box-sizing: border-box;\" frameborder=\"0\" allowfullscreen uk-video=\"autoplay: " + autoplay + "\" uk-responsive></iframe>"); } } if (!true && typeof window !== 'undefined' && window.UIkit) { window.UIkit.use(plugin$2); } function plugin$4(UIkit) { if (plugin$4.installed) { return; } var ref = UIkit.util; var append = ref.append; var closest = ref.closest; var css = ref.css; var each = ref.each; var pointerEnter = ref.pointerEnter; var pointerLeave = ref.pointerLeave; var remove = ref.remove; var toFloat = ref.toFloat; var Transition = ref.Transition; var trigger = ref.trigger; var containers = {}; UIkit.component('notification', { functional: true, args: ['message', 'status'], defaults: { message: '', status: '', timeout: 5000, group: null, pos: 'top-center', clsClose: 'uk-notification-close', clsMsg: 'uk-notification-message' }, created: function created() { if (!containers[this.pos]) { containers[this.pos] = append(UIkit.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>") )); }, ready: function ready() { var this$1 = this; var marginBottom = toFloat(css(this.$el, 'marginBottom')); Transition.start( css(this.$el, {opacity: 0, marginTop: -1 * 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 click(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 close(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: -1 * this.$el.offsetHeight, marginBottom: 0 }).then(removeFn); } } } }); var obj; UIkit.notification.closeAll = function (group, immediate) { each(UIkit.instances, function (component) { if (component.$options.name === 'notification' && (!group || group === component.group)) { component.close(immediate); } }); }; } if (!true && typeof window !== 'undefined' && window.UIkit) { window.UIkit.use(plugin$4); } function plugin$5(UIkit) { if (plugin$5.installed) { return; } var mixin = UIkit.mixin; var util = UIkit.util; var clamp = util.clamp; var css = util.css; var Dimensions = util.Dimensions; var each = util.each; var getImage = util.getImage; var includes = util.includes; var isNumber = util.isNumber; var isUndefined = util.isUndefined; var scrolledOver = util.scrolledOver; var toFloat = util.toFloat; var query = util.query; var win = util.win; var props = ['x', 'y', 'bgx', 'bgy', 'rotate', 'scale', 'color', 'backgroundColor', 'borderColor', 'opacity', 'blur', 'hue', 'grayscale', 'invert', 'saturate', 'sepia', 'fopacity']; mixin.parallax = { props: props.reduce(function (props, prop) { props[prop] = 'list'; return props; }, { media: 'media' }), defaults: props.reduce(function (defaults, prop) { defaults[prop] = undefined; return defaults; }, { media: false }), computed: { props: function props$1(properties, $el) { var this$1 = this; return props.reduce(function (props, prop) { if (isUndefined(properties[prop])) { return props; } var isColor = prop.match(/color/i), isCssProp = isColor || prop === 'opacity', steps = properties[prop].slice(0), pos, bgPos, diff; 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 color = $el.style.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]; // IE 11 can't read background-position-[x|y] if (this$1.covers) { var min = Math.min.apply(Math, steps), max = Math.max.apply(Math, steps), 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 bgProps() { var this$1 = this; return ['bgx', 'bgy'].filter(function (bg) { return bg in this$1.props; }); }, covers: function covers(_, $el) { return css($el.style.backgroundSize !== '' ? css($el, 'backgroundSize', '') : $el, 'backgroundSize') === 'cover'; } }, disconnected: function disconnected() { delete this._image; }, update: [ { read: function read() { var this$1 = this; delete this._computeds.props; this._active = !this.media || win.matchMedia(this.media).matches; if (this._image) { this._image.dimEl = { width: this.$el.offsetWidth, height: this.$el.offsetHeight }; } if (!isUndefined(this._image) || !this.covers || !this.bgProps.length) { return; } var src = css(this.$el, 'backgroundImage').replace(/^none|url\(["']?(.+?)["']?\)$/, '$1'); if (!src) { return; } this._image = false; getImage(src).then(function (img) { this$1._image = { width: img.naturalWidth, height: img.naturalHeight }; this$1.$emit(); }); }, write: function write() { var this$1 = this; if (!this._image) { return; } if (!this._active) { css(this.$el, {backgroundSize: '', backgroundRepeat: ''}); return; } var image = this._image, dimEl = image.dimEl, dim = Dimensions.cover(image, 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 = prop === 'bgy' ? 'height' : 'width', span = dim[attr] - dimEl[attr]; if (!bgPos.match(/%$|0px/)) { return; } if (span < diff) { dimEl[attr] = dim[attr] + diff - span; } else if (span > diff) { bgPos = parseFloat(bgPos); if (bgPos) { this$1.props[prop].steps = steps.map(function (step) { return step - (span - diff) / (100 / bgPos); }); } } dim = Dimensions.cover(image, dimEl); }); css(this.$el, { backgroundSize: ((dim.width) + "px " + (dim.height) + "px"), backgroundRepeat: 'no-repeat' }); }, events: ['load', 'resize'] } ], methods: { reset: function reset() { var this$1 = this; each(this.getCss(0), function (_, prop) { return css(this$1.$el, prop, ''); }); }, getCss: function getCss(percent) { var translated = false, props = this.props; return Object.keys(props).reduce(function (css, prop) { var ref = props[prop]; var steps = ref.steps; var unit = ref.unit; var pos = ref.pos; var value = getValue(steps, percent); switch (prop) { // transforms case 'x': case 'y': if (translated) { break; } var ref$1 = ['x', 'y'].map(function (dir) { return prop === dir ? value + unit : props[dir] ? getValue(props[dir].steps, percent) + props[dir].unit : 0; } ); var x = ref$1[0]; var y = ref$1[1]; translated = css.transform += " translate3d(" + x + ", " + y + ", 0)"; break; case 'rotate': css.transform += " rotate(" + value + "deg)"; break; case 'scale': css.transform += " scale(" + value + ")"; break; // bg image case 'bgy': case 'bgx': css[("background-position-" + (prop[2]))] = "calc(" + pos + " + " + (value + unit) + ")"; break; // color 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[prop] = "rgba(" + (start.map(function (value, i) { value = value + p * (end[i] - value); return i === 3 ? toFloat(value) : parseInt(value, 10); }).join(',')) + ")"; break; // CSS Filter case 'blur': css.filter += " blur(" + value + "px)"; break; case 'hue': css.filter += " hue-rotate(" + value + "deg)"; break; case 'fopacity': css.filter += " opacity(" + value + "%)"; break; case 'grayscale': case 'invert': case 'saturate': case 'sepia': css.filter += " " + prop + "(" + value + "%)"; break; default: css[prop] = value; } return css; }, {transform: '', filter: ''}); } } }; UIkit.component('parallax', { mixins: [mixin.parallax], props: { target: String, viewport: Number, easing: Number, }, defaults: { target: false, viewport: 1, easing: 1, }, computed: { target: function target(ref, $el) { var target = ref.target; return target && query(target, $el) || $el; } }, disconnected: function disconnected() { delete this._prev; }, update: [ { read: function read() { this._percent = ease(scrolledOver(this.target) / (this.viewport || 1), this.easing); }, write: function write(ref) { var type = ref.type; if (type !== 'scroll') { delete this._prev; } if (!this._active) { this.reset(); return; } if (this._prev !== this._percent) { css(this.$el, this.getCss(this._percent)); this._prev = this._percent; } }, events: ['scroll', 'load', 'resize'] } ] }); function ease(percent, easing) { return clamp(percent * (1 - (easing - easing * percent))) } 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, index = Math.min(Math.floor(count * percent), count - 1), step = steps.slice(index, index + 2); step.push(percent === 1 ? 1 : percent % (1 / count) * count); return step; } function getValue(steps, percent) { 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(2); } } if (!true && typeof window !== 'undefined' && window.UIkit) { window.UIkit.use(plugin$5); } var Animations$2 = function (UIkit) { var mixin = UIkit.mixin; var ref = UIkit.util; var assign = ref.assign; var css = ref.css; var Animations$$1 = assign({}, mixin.slideshow.defaults.Animations, { fade: { show: function show() { return [ {opacity: 0, zIndex: 0}, {zIndex: -1} ]; }, percent: function percent(current) { return 1 - css(current, 'opacity'); }, translate: function translate$$1(percent) { return [ {opacity: 1 - percent, zIndex: 0}, {zIndex: -1} ]; } }, scale: { show: function show() { return [ {opacity: 0, transform: scale3d(1 + .5), zIndex: 0}, {zIndex: -1} ]; }, percent: function percent(current) { return 1 - css(current, 'opacity'); }, translate: function translate$$1(percent) { return [ {opacity: 1 - percent, transform: scale3d(1 + .5 * percent), zIndex: 0}, {zIndex: -1} ]; } }, pull: { show: function show(dir) { return dir < 0 ? [ {transform: translate(30), zIndex: -1}, {transform: translate(), zIndex: 0} ] : [ {transform: translate(-100), zIndex: 0}, {transform: translate(), zIndex: -1} ]; }, percent: function percent(current, next, dir) { return dir < 0 ? 1 - Animations$$1.translated(next) : Animations$$1.translated(current); }, translate: function translate$1(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 show(dir) { return dir < 0 ? [ {transform: translate(100), zIndex: 0}, {transform: translate(), zIndex: -1} ] : [ {transform: translate(-30), zIndex: -1}, {transform: translate(), zIndex: 0} ]; }, percent: function percent(current, next, dir) { return dir > 0 ? 1 - Animations$$1.translated(next) : Animations$$1.translated(current); }, translate: function translate$2(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} ]; } } }); return Animations$$1; }; function plugin$6(UIkit) { if (plugin$6.installed) { return; } UIkit.use(plugin$5); UIkit.use(plugin$3); var mixin = UIkit.mixin; var ref = UIkit.util; var closest = ref.closest; var css = ref.css; var fastdom = ref.fastdom; var endsWith = ref.endsWith; var height = ref.height; var noop = ref.noop; var Transition = ref.Transition; UIkit.component('slideshow', { mixins: [mixin.class, mixin.slideshow], props: { ratio: String, minHeight: Boolean, maxHeight: Boolean, }, defaults: { ratio: '16:9', minHeight: false, maxHeight: false, selList: '.uk-slideshow-items', attrItem: 'uk-slideshow-item', Animations: Animations$2(UIkit) }, ready: function ready() { var this$1 = this; fastdom.mutate(function () { return this$1.show(this$1.index); }); }, update: { read: function read() { var ref = this.ratio.split(':').map(Number); var width = ref[0]; var height = ref[1]; this.height = height * this.$el.offsetWidth / width; if (this.minHeight) { this.height = Math.max(this.minHeight, this.height); } if (this.maxHeight) { this.height = Math.min(this.maxHeight, this.height); } }, write: function write() { height(this.list, Math.floor(this.height)); }, events: ['load', 'resize'] } }); UIkit.component('slideshow-parallax', { mixins: [mixin.parallax], computed: { item: function item() { var slideshow = UIkit.getComponent(closest(this.$el, '.uk-slideshow'), 'slideshow'); return slideshow && closest(this.$el, ((slideshow.selList) + " > *")); } }, events: [ { name: 'itemshown', self: true, el: function el() { return this.item; }, handler: function handler() { css(this.$el, this.getCss(.5)); } }, { name: 'itemin itemout', self: true, el: function el() { return this.item; }, handler: function handler(ref) { var type = ref.type; var ref_detail = ref.detail; var percent = ref_detail.percent; var duration = ref_detail.duration; var ease = ref_detail.ease; 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, ease).catch(noop); } }, { name: 'transitioncanceled transitionend', self: true, el: function el() { return this.item; }, handler: function handler() { Transition.cancel(this.$el); } }, { name: 'itemtranslatein itemtranslateout', self: true, el: function el() { return this.item; }, handler: function handler(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; } } if (!true && typeof window !== 'undefined' && window.UIkit) { window.UIkit.use(plugin$6); } function plugin$7(UIkit) { if (plugin$7.installed) { return; } var mixin = UIkit.mixin; var util = UIkit.util; var addClass = util.addClass; var after = util.after; var assign = util.assign; var append = util.append; var attr = util.attr; var before = util.before; var closest = util.closest; var css = util.css; var doc = util.doc; var docEl = util.docEl; var height = util.height; var fastdom = util.fastdom; var getPos = util.getPos; var includes = util.includes; var index = util.index; var isInput = util.isInput; var noop = util.noop; var offset = util.offset; var off = util.off; var on = util.on; var pointerDown = util.pointerDown; var pointerMove = util.pointerMove; var pointerUp = util.pointerUp; var position = util.position; var preventClick = util.preventClick; var Promise = util.Promise; var remove = util.remove; var removeClass = util.removeClass; var toggleClass = util.toggleClass; var toNodes = util.toNodes; var Transition = util.Transition; var trigger = util.trigger; var win = util.win; var within = util.within; UIkit.component('sortable', { mixins: [mixin.class], props: { group: String, animation: Number, threshold: Number, clsItem: String, clsPlaceholder: String, clsDrag: String, clsDragState: String, clsBase: String, clsNoDrag: String, clsEmpty: String, clsCustom: String, handle: String }, defaults: { group: false, animation: 150, 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 }, init: function init() { var this$1 = this; ['init', 'start', 'move', 'end'].forEach(function (key) { var fn = this$1[key]; this$1[key] = function (e) { this$1.scrollY = win.scrollY; var ref = getPos(e); var x = ref.x; var y = ref.y; this$1.pos = {x: x, y: y}; fn(e); }; }); }, events: ( obj = {}, obj[pointerDown] = 'init', obj ), update: { write: function write() { if (this.clsEmpty) { toggleClass(this.$el, this.clsEmpty, !this.$el.children.length); } if (!this.drag) { return; } offset(this.drag, {top: this.pos.y + this.origin.top, left: this.pos.x + this.origin.left}); var top = offset(this.drag).top, bottom = top + this.drag.offsetHeight, scroll; if (top > 0 && top < this.scrollY) { scroll = this.scrollY - 5; } else if (bottom < height(doc) && bottom > height(win) + this.scrollY) { scroll = this.scrollY + 5; } scroll && setTimeout(function () { return win.scrollTo(win.scrollX, scroll); }, 5); } }, methods: { init: function init(e) { var target = e.target; var button = e.button; var defaultPrevented = e.defaultPrevented; var placeholder = toNodes(this.$el.children).filter(function (el) { return within(target, el); })[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(docEl, pointerMove, this.move); on(docEl, pointerUp, this.end); on(win, 'scroll', this.scroll); if (!this.threshold) { this.start(e); } }, start: function start(e) { this.drag = append(UIkit.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(docEl, this.clsDragState); trigger(this.$el, 'start', [this, this.placeholder, this.drag]); this.move(e); }, move: function move(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 : doc.elementFromPoint(this.pos.x - doc.body.scrollLeft, this.pos.y - doc.body.scrollTop), sortable = getSortable(target), previous = getSortable(this.placeholder), 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 scroll() { var scroll = win.scrollY; if (scroll !== this.scrollY) { this.pos.y += scroll - this.scrollY; this.scrollY = scroll; this.$emit(); } }, end: function end(e) { off(docEl, pointerMove, this.move); off(docEl, pointerUp, this.end); off(win, '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 = 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]); 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(docEl, this.clsDragState); }, insert: function insert(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 remove$1(element) { if (!within(element, this.$el)) { return; } if (this.animation) { this.animate(function () { return remove(element); }); } else { remove(element); } }, animate: function animate(action) { var this$1 = this; var props = [], children = toNodes(this.$el.children), reset = {position: '', width: '', height: '', pointerEvents: '', top: '', left: '', bottom: '', right: ''}; children.forEach(function (el) { props.push(assign({ position: 'absolute', pointerEvents: 'none', width: el.offsetWidth, height: el.offsetHeight }, position(el))); }); action(); children.forEach(Transition.cancel); css(this.$el.children, reset); this.$update('update', true); fastdom.flush(); css(this.$el, 'minHeight', height(this.$el)); var positions = children.map(function (el) { return position(el); }); Promise.all(children.map(function (el, i) { return Transition.start(css(el, props[i]), positions[i], this$1.animation); })) .then(function () { css(this$1.$el, 'minHeight', ''); css(children, reset); this$1.$update('update', true); fastdom.flush(); }, noop); } } }); var obj; function getSortable(element) { return element && (UIkit.getComponent(element, 'sortable') || getSortable(element.parentNode)); } function isPredecessor(element, target) { return element.parentNode === target.parentNode && index(element) > index(target); } } if (!true && typeof window !== 'undefined' && window.UIkit) { window.UIkit.use(plugin$7); } function plugin$8(UIkit) { if (plugin$8.installed) { return; } var util = UIkit.util; var mixin = UIkit.mixin; var append = util.append; var attr = util.attr; var doc = util.doc; var fastdom = util.fastdom; var flipPosition = util.flipPosition; var includes = util.includes; var isTouch = util.isTouch; var isVisible = util.isVisible; var matches = util.matches; var on = util.on; var pointerDown = util.pointerDown; var pointerEnter = util.pointerEnter; var pointerLeave = util.pointerLeave; var remove = util.remove; var within = util.within; var actives = []; UIkit.component('tooltip', { attrs: true, mixins: [mixin.container, mixin.togglable, mixin.position], props: { delay: Number, title: String }, defaults: { pos: 'top', title: '', delay: 0, animation: ['uk-animation-scale-up'], duration: 100, cls: 'uk-active', clsPos: 'uk-tooltip' }, connected: function connected() { var this$1 = this; fastdom.mutate(function () { return attr(this$1.$el, {title: null, 'aria-expanded': false}); }); }, disconnected: function disconnected() { this.hide(); }, methods: { show: function show() { var this$1 = this; if (includes(actives, this)) { return; } actives.forEach(function (active) { return active.hide(); }); actives.push(this); this._unbind = on(doc, 'click', function (e) { return !within(e.target, this$1.$el) && this$1.hide(); }); clearTimeout(this.showTimer); this.tooltip = append(this.container, ("<div class=\"" + (this.clsPos) + "\" aria-hidden><div class=\"" + (this.clsPos) + "-inner\">" + (this.title) + "</div></div>")); attr(this.$el, 'aria-expanded', true); this.positionAt(this.tooltip, this.$el); this.origin = this.getAxis() === 'y' ? ((flipPosition(this.dir)) + "-" + (this.align)) : ((this.align) + "-" + (flipPosition(this.dir))); this.showTimer = setTimeout(function () { this$1.toggleElement(this$1.tooltip, true); this$1.hideTimer = setInterval(function () { if (!isVisible(this$1.$el)) { this$1.hide(); } }, 150); }, this.delay); }, hide: function hide() { var index = actives.indexOf(this); if (!~index || matches(this.$el, 'input') && this.$el === doc.activeElement) { return; } actives.splice(index, 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(); } }, events: ( obj = { 'blur': 'hide' }, obj[("focus " + pointerEnter + " " + pointerDown)] = function (e) { if (e.type !== pointerDown || !isTouch(e)) { this.show(); } }, obj[pointerLeave] = function (e) { if (!isTouch(e)) { this.hide(); } }, obj ) }); var obj; } if (!true && typeof window !== 'undefined' && window.UIkit) { window.UIkit.use(plugin$8); } function plugin$9(UIkit) { if (plugin$9.installed) { return; } var ref = UIkit.util; var addClass = ref.addClass; var ajax = ref.ajax; var matches = ref.matches; var noop = ref.noop; var on = ref.on; var removeClass = ref.removeClass; var trigger = ref.trigger; UIkit.component('upload', { props: { allow: String, clsDragover: String, concurrent: Number, mime: String, msgInvalidMime: String, msgInvalidName: String, multiple: Boolean, name: String, params: Object, type: String, url: String }, defaults: { allow: false, clsDragover: 'uk-dragover', concurrent: 1, mime: false, msgInvalidMime: 'Invalid File Type: %s', msgInvalidName: 'Invalid File Name: %s', multiple: false, name: 'files[]', params: {}, type: 'POST', 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 change(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 drop(e) { stop(e); var transfer = e.dataTransfer; if (!transfer || !transfer.files) { return; } removeClass(this.$el, this.clsDragover); this.upload(transfer.files); }, dragenter: function dragenter(e) { stop(e); }, dragover: function dragover(e) { stop(e); addClass(this.$el, this.clsDragover); }, dragleave: function dragleave(e) { stop(e); removeClass(this.$el, this.clsDragover); } }, methods: { upload: function upload(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.allow) { if (!match(this$1.allow, files[i].name)) { this$1.fail(this$1.msgInvalidName.replace(/%s/, this$1.allow)); return; } } if (this$1.mime) { if (!match(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), upload = function (files) { var data = new FormData(); files.forEach(function (file) { return data.append(this$1.name, file); }); for (var key in this$1.params) { data.append(key, this$1.params[key]); } ajax(this$1.url, { data: data, method: 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.message); } ); }; upload(chunks.shift()); } } }); function match(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(); } } if (!true && typeof window !== 'undefined' && window.UIkit) { window.UIkit.use(plugin$9); } UIkit$2.use(plugin); UIkit$2.use(plugin$1); UIkit$2.use(plugin$2); UIkit$2.use(plugin$4); UIkit$2.use(plugin$5); UIkit$2.use(plugin$6); UIkit$2.use(plugin$7); UIkit$2.use(plugin$8); UIkit$2.use(plugin$9); { boot(UIkit$2); } return UIkit$2; })));