PageSourceSearch

https://www.hanau.de/mam/assets/js/uikit.js

js hanau.de collected 2026-10-02 05:54:32 UTC 325,400 bytes, 9,873 lines download raw bytes

vendor: 12,667 bytes, lines 1-349
1/*! UIkit 3.20.8 | https://www.getuikit.com | (c) 2014 - 2024 YOOtheme | MIT License */
2
3(function (global, factory) {
4    typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
5    typeof define === 'function' && define.amd ? define('uikit', factory) :
6    (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.UIkit = factory());
7})(this, (function () { 'use strict';
8
9    const { hasOwnProperty, toString } = Object.prototype;
10    function hasOwn(obj, key) {
11      return hasOwnProperty.call(obj, key);
12    }
13    const hyphenateRe = /\B([A-Z])/g;
14    const hyphenate = memoize((str) => str.replace(hyphenateRe, "-$1").toLowerCase());
15    const camelizeRe = /-(\w)/g;
16    const camelize = memoize(
17      (str) => (str.charAt(0).toLowerCase() + str.slice(1)).replace(camelizeRe, (_, c) => c.toUpperCase())
18    );
19    const ucfirst = memoize((str) => str.charAt(0).toUpperCase() + str.slice(1));
20    function startsWith(str, search) {
21      var _a;
22      return (_a = str == null ? void 0 : str.startsWith) == null ? void 0 : _a.call(str, search);
23    }
24    function endsWith(str, search) {
25      var _a;
26      return (_a = str == null ? void 0 : str.endsWith) == null ? void 0 : _a.call(str, search);
27    }
28    function includes(obj, search) {
29      var _a;
30      return (_a = obj == null ? void 0 : obj.includes) == null ? void 0 : _a.call(obj, search);
31    }
32    function findIndex(array, predicate) {
33      var _a;
34      return (_a = array == null ? void 0 : array.findIndex) == null ? void 0 : _a.call(array, predicate);
35    }
36    const { isArray, from: toArray } = Array;
37    const { assign } = Object;
38    function isFunction(obj) {
39      return typeof obj === "function";
40    }
41    function isObject(obj) {
42      return obj !== null && typeof obj === "object";
43    }
44    function isPlainObject(obj) {
45      return toString.call(obj) === "[object Object]";
46    }
47    function isWindow(obj) {
48      return isObject(obj) && obj === obj.window;
49    }
50    function isDocument(obj) {
51      return nodeType(obj) === 9;
52    }
53    function isNode(obj) {
54      return nodeType(obj) >= 1;
55    }
56    function isElement(obj) {
57      return nodeType(obj) === 1;
58    }
59    function nodeType(obj) {
60      return !isWindow(obj) && isObject(obj) && obj.nodeType;
61    }
62    function isBoolean(value) {
63      return typeof value === "boolean";
64    }
65    function isString(value) {
66      return typeof value === "string";
67    }
68    function isNumber(value) {
69      return typeof value === "number";
70    }
71    function isNumeric(value) {
72      return isNumber(value) || isString(value) && !isNaN(value - parseFloat(value));
73    }
74    function isEmpty(obj) {
75      return !(isArray(obj) ? obj.length : isObject(obj) ? Object.keys(obj).length : false);
76    }
77    function isUndefined(value) {
78      return value === void 0;
79    }
80    function toBoolean(value) {
81      return isBoolean(value) ? value : value === "true" || value === "1" || value === "" ? true : value === "false" || value === "0" ? false : value;
82    }
83    function toNumber(value) {
84      const number = Number(value);
85      return isNaN(number) ? false : number;
86    }
87    function toFloat(value) {
88      return parseFloat(value) || 0;
89    }
90    function toNode(element) {
91      return element && toNodes(element)[0];
92    }
93    function toNodes(element) {
94      return isNode(element) ? [element] : Array.from(element || []).filter(isNode);
95    }
96    function toWindow(element) {
97      if (isWindow(element)) {
98        return element;
99      }
100      element = toNode(element);
101      const document = isDocument(element) ? element : element == null ? void 0 : element.ownerDocument;
102      return (document == null ? void 0 : document.defaultView) || window;
103    }
104    function isEqual(value, other) {
105      return value === other || isObject(value) && isObject(other) && Object.keys(value).length === Object.keys(other).length && each(value, (val, key) => val === other[key]);
106    }
107    function swap(value, a, b) {
108      return value.replace(new RegExp(`${a}|${b}`, "g"), (match) => match === a ? b : a);
109    }
110    function last(array) {
111      return array[array.length - 1];
112    }
113    function each(obj, cb) {
114      for (const key in obj) {
115        if (false === cb(obj[key], key)) {
116          return false;
117        }
118      }
119      return true;
120    }
121    function sortBy(array, prop) {
122      return array.slice().sort(
123        ({ [prop]: propA = 0 }, { [prop]: propB = 0 }) => propA > propB ? 1 : propB > propA ? -1 : 0
124      );
125    }
126    function sumBy(array, iteratee) {
127      return array.reduce(
128        (sum, item) => sum + toFloat(isFunction(iteratee) ? iteratee(item) : item[iteratee]),
129        0
130      );
131    }
132    function uniqueBy(array, prop) {
133      const seen = /* @__PURE__ */ new Set();
134      return array.filter(({ [prop]: check }) => seen.has(check) ? false : seen.add(check));
135    }
136    function pick(obj, props) {
137      return props.reduce((res, prop) => ({ ...res, [prop]: obj[prop] }), {});
138    }
139    function clamp(number, min = 0, max = 1) {
140      return Math.min(Math.max(toNumber(number) || 0, min), max);
141    }
142    function noop() {
143    }
144    function intersectRect(...rects) {
145      return [
146        ["bottom", "top"],
147        ["right", "left"]
148      ].every(
149        ([minProp, maxProp]) => Math.min(...rects.map(({ [minProp]: min }) => min)) - Math.max(...rects.map(({ [maxProp]: max }) => max)) > 0
150      );
151    }
152    function pointInRect(point, rect) {
153      return point.x <= rect.right && point.x >= rect.left && point.y <= rect.bottom && point.y >= rect.top;
154    }
155    function ratio(dimensions, prop, value) {
156      const aProp = prop === "width" ? "height" : "width";
157      return {
158        [aProp]: dimensions[prop] ? Math.round(value * dimensions[aProp] / dimensions[prop]) : dimensions[aProp],
159        [prop]: value
160      };
161    }
162    function contain(dimensions, maxDimensions) {
163      dimensions = { ...dimensions };
164      for (const prop in dimensions) {
165        dimensions = dimensions[prop] > maxDimensions[prop] ? ratio(dimensions, prop, maxDimensions[prop]) : dimensions;
166      }
167      return dimensions;
168    }
169    function cover$1(dimensions, maxDimensions) {
170      dimensions = contain(dimensions, maxDimensions);
171      for (const prop in dimensions) {
172        dimensions = dimensions[prop] < maxDimensions[prop] ? ratio(dimensions, prop, maxDimensions[prop]) : dimensions;
173      }
174      return dimensions;
175    }
176    const Dimensions = { ratio, contain, cover: cover$1 };
177    function getIndex(i, elements, current = 0, finite = false) {
178      elements = toNodes(elements);
179      const { length } = elements;
180      if (!length) {
181        return -1;
182      }
183      i = isNumeric(i) ? toNumber(i) : i === "next" ? current + 1 : i === "previous" ? current - 1 : i === "last" ? length - 1 : elements.indexOf(toNode(i));
184      if (finite) {
185        return clamp(i, 0, length - 1);
186      }
187      i %= length;
188      return i < 0 ? i + length : i;
189    }
190    function memoize(fn) {
191      const cache = /* @__PURE__ */ Object.create(null);
192      return (key, ...args) => cache[key] || (cache[key] = fn(key, ...args));
193    }
194
195    function attr(element, name, value) {
196      var _a;
197      if (isObject(name)) {
198        for (const key in name) {
199          attr(element, key, name[key]);
200        }
201        return;
202      }
203      if (isUndefined(value)) {
204        return (_a = toNode(element)) == null ? void 0 : _a.getAttribute(name);
205      } else {
206        for (const el of toNodes(element)) {
207          if (isFunction(value)) {
208            value = value.call(el, attr(el, name));
209          }
210          if (value === null) {
211            removeAttr(el, name);
212          } else {
213            el.setAttribute(name, value);
214          }
215        }
216      }
217    }
218    function hasAttr(element, name) {
219      return toNodes(element).some((element2) => element2.hasAttribute(name));
220    }
221    function removeAttr(element, name) {
222      toNodes(element).forEach((element2) => element2.removeAttribute(name));
223    }
224    function data(element, attribute) {
225      for (const name of [attribute, `data-${attribute}`]) {
226        if (hasAttr(element, name)) {
227          return attr(element, name);
228        }
229      }
230    }
231
232    function addClass(element, ...classes) {
233      for (const node of toNodes(element)) {
234        const add = toClasses(classes).filter((cls) => !hasClass(node, cls));
235        if (add.length) {
236          node.classList.add(...add);
237        }
238      }
239    }
240    function removeClass(element, ...classes) {
241      for (const node of toNodes(element)) {
242        const remove = toClasses(classes).filter((cls) => hasClass(node, cls));
243        if (remove.length) {
244          node.classList.remove(...remove);
245        }
246      }
247    }
248    function removeClasses(element, clsRegex) {
249      clsRegex = new RegExp(clsRegex);
250      for (const node of toNodes(element)) {
251        node.classList.remove(...toArray(node.classList).filter((cls) => cls.match(clsRegex)));
252      }
253    }
254    function replaceClass(element, oldClass, newClass) {
255      newClass = toClasses(newClass);
256      oldClass = toClasses(oldClass).filter((cls) => !includes(newClass, cls));
257      removeClass(element, oldClass);
258      addClass(element, newClass);
259    }
260    function hasClass(element, cls) {
261      [cls] = toClasses(cls);
262      return toNodes(element).some((node) => node.classList.contains(cls));
263    }
264    function toggleClass(element, cls, force) {
265      const classes = toClasses(cls);
266      if (!isUndefined(force)) {
267        force = !!force;
268      }
269      for (const node of toNodes(element)) {
270        for (const cls2 of classes) {
271          node.classList.toggle(cls2, force);
272        }
273      }
274    }
275    function toClasses(str) {
276      return str ? isArray(str) ? str.map(toClasses).flat() : String(str).split(" ").filter(Boolean) : [];
277    }
278
279    const inBrowser = typeof window !== "undefined";
280    const isRtl = inBrowser && document.dir === "rtl";
281    const hasTouch = inBrowser && "ontouchstart" in window;
282    const hasPointerEvents = inBrowser && window.PointerEvent;
283    const pointerDown$1 = hasPointerEvents ? "pointerdown" : hasTouch ? "touchstart" : "mousedown";
284    const pointerMove$1 = hasPointerEvents ? "pointermove" : hasTouch ? "touchmove" : "mousemove";
285    const pointerUp$1 = hasPointerEvents ? "pointerup" : hasTouch ? "touchend" : "mouseup";
286    const pointerEnter = hasPointerEvents ? "pointerenter" : hasTouch ? "" : "mouseenter";
287    const pointerLeave = hasPointerEvents ? "pointerleave" : hasTouch ? "" : "mouseleave";
288    const pointerCancel = hasPointerEvents ? "pointercancel" : "touchcancel";
289
290    const voidElements = {
291      area: true,
292      base: true,
293      br: true,
294      col: true,
295      embed: true,
296      hr: true,
297      img: true,
298      input: true,
299      keygen: true,
300      link: true,
301      meta: true,
302      param: true,
303      source: true,
304      track: true,
305      wbr: true
306    };
307    function isVoidElement(element) {
308      return toNodes(element).some((element2) => voidElements[element2.tagName.toLowerCase()]);
309    }
310    const isVisibleFn = inBrowser && Element.prototype.checkVisibility || function() {
311      return this.offsetWidth || this.offsetHeight || this.getClientRects().length;
312    };
313    function isVisible(element) {
314      return toNodes(element).some((element2) => isVisibleFn.call(element2));
315    }
316    const selInput = "input,select,textarea,button";
317    function isInput(element) {
318      return toNodes(element).some((element2) => matches(element2, selInput));
319    }
320    const selFocusable = `${selInput},a[href],[tabindex]`;
321    function isFocusable(element) {
322      return matches(element, selFocusable);
323    }
324    function parent(element) {
325      var _a;
326      return (_a = toNode(element)) == null ? void 0 : _a.parentElement;
327    }
328    function filter$1(element, selector) {
329      return toNodes(element).filter((element2) => matches(element2, selector));
330    }
331    function matches(element, selector) {
332      return toNodes(element).some((element2) => element2.matches(selector));
333    }
334    function parents(element, selector) {
335      const elements = [];
336      while (element = parent(element)) {
337        if (!selector || matches(element, selector)) {
338          elements.push(element);
339        }
340      }
341      return elements;
342    }
343    function children(element, selector) {
344      element = toNode(element);
345      const children2 = element ? toArray(element.children) : [];
346      return selector ? filter$1(children2, selector) : children2;
347    }
348    function index(element, ref) {
349      return ref ? toNodes(element).indexOf(toNode(ref)) : children(parent
349(element)).indexOf(element);
350    }
351    function isSameSiteAnchor(el) {
352      el = toNode(el);
353      return el && ["origin", "pathname", "search"].every((part) => el[part] === location[part]);
354    }
355    function getTargetedElement(el) {
356      if (isSameSiteAnchor(el)) {
357        el = toNode(el);
358        const id = decodeURIComponent(el.hash).substring(1);
359        return document.getElementById(id) || document.getElementsByName(id)[0];
360      }
361    }
362
363    function query(selector, context) {
364      return find(selector, getContext(selector, context));
365    }
366    function queryAll(selector, context) {
367      return findAll(selector, getContext(selector, context));
368    }
369    function find(selector, context) {
370      return toNode(_query(selector, toNode(context), "querySelector"));
371    }
372    function findAll(selector, context) {
373      return toNodes(_query(selector, toNode(context), "querySelectorAll"));
374    }
375    function getContext(selector, context = document) {
376      return isString(selector) && parseSelector(selector).isContextSelector || isDocument(context) ? context : context.ownerDocument;
377    }
378    const addStarRe = /([!>+~-])(?=\s+[!>+~-]|\s*$)/g;
379    const splitSelectorRe = /.*?[^\\](?![^(]*\))(?:,|$)/g;
380    const trailingCommaRe = /\s*,$/;
381    const parseSelector = memoize((selector) => {
382      var _a;
383      selector = selector.replace(addStarRe, "$1 *");
384      let isContextSelector = false;
385      const selectors = [];
386      for (let sel of (_a = selector.match(splitSelectorRe)) != null ? _a : []) {
387        sel = sel.replace(trailingCommaRe, "").trim();
388        isContextSelector || (isContextSelector = ["!", "+", "~", "-", ">"].includes(sel[0]));
389        selectors.push(sel);
390      }
391      return {
392        selector: selectors.join(","),
393        selectors,
394        isContextSelector
395      };
396    });
397    const parsePositionSelector = memoize((selector) => {
398      selector = selector.substr(1).trim();
399      const index2 = selector.indexOf(" ");
400      return ~index2 ? [selector.substring(0, index2), selector.substring(index2 + 1)] : [selector, ""];
401    });
402    function _query(selector, context = document, queryFn) {
403      if (!selector || !isString(selector)) {
404        return selector;
405      }
406      const parsed = parseSelector(selector);
407      if (!parsed.isContextSelector) {
408        return _doQuery(context, queryFn, parsed.selector);
409      }
410      selector = "";
411      const isSingle = parsed.selectors.length === 1;
412      for (let sel of parsed.selectors) {
413        let positionSel;
414        let ctx = context;
415        if (sel[0] === "!") {
416          [positionSel, sel] = parsePositionSelector(sel);
417          ctx = context.parentElement.closest(positionSel);
418          if (!sel && isSingle) {
419            return ctx;
420          }
421        }
422        if (ctx && sel[0] === "-") {
423          [positionSel, sel] = parsePositionSelector(sel);
424          ctx = ctx.previousElementSibling;
425          ctx = matches(ctx, positionSel) ? ctx : null;
426          if (!sel && isSingle) {
427            return ctx;
428          }
429        }
430        if (!ctx) {
431          continue;
432        }
433        if (isSingle) {
434          if (sel[0] === "~" || sel[0] === "+") {
435            sel = `:scope > :nth-child(${index(ctx) + 1}) ${sel}`;
436            ctx = ctx.parentElement;
437          } else if (sel[0] === ">") {
438            sel = `:scope ${sel}`;
439          }
440          return _doQuery(ctx, queryFn, sel);
441        }
442        selector += `${selector ? "," : ""}${domPath(ctx)} ${sel}`;
443      }
444      if (!isDocument(context)) {
445        context = context.ownerDocument;
446      }
447      return _doQuery(context, queryFn, selector);
448    }
449    function _doQuery(context, queryFn, selector) {
450      try {
451        return context[queryFn](selector);
452      } catch (e) {
453        return null;
454      }
455    }
456    function domPath(element) {
457      const names = [];
458      while (element.parentNode) {
459        const id = attr(element, "id");
460        if (id) {
461          names.unshift(`#${escape(id)}`);
462          break;
463        } else {
464          let { tagName } = element;
465          if (tagName !== "HTML") {
466            tagName += `:nth-child(${index(element) + 1})`;
467          }
468          names.unshift(tagName);
469          element = element.parentNode;
470        }
471      }
472      return names.join(" > ");
473    }
474    function escape(css) {
475      return isString(css) ? CSS.escape(css) : "";
476    }
477
478    function on(...args) {
479      let [targets, types, selector, listener, useCapture = false] = getArgs(args);
480      if (listener.length > 1) {
481        listener = detail(listener);
482      }
483      if (useCapture == null ? void 0 : useCapture.self) {
484        listener = selfFilter(listener);
485      }
486      if (selector) {
487        listener = delegate(selector, listener);
488      }
489      for (const type of types) {
490        for (const target of targets) {
491          target.addEventListener(type, listener, useCapture);
492        }
493      }
494      return () => off(targets, types, listener, useCapture);
495    }
496    function off(...args) {
497      let [targets, types, , listener, useCapture = false] = getArgs(args);
498      for (const type of types) {
499        for (const target of targets) {
500          target.removeEventListener(type, listener, useCapture);
501        }
502      }
503    }
504    function once(...args) {
505      const [element, types, selector, listener, useCapture = false, condition] = getArgs(args);
506      const off2 = on(
507        element,
508        types,
509        selector,
510        (e) => {
511          const result = !condition || condition(e);
512          if (result) {
513            off2();
514            listener(e, result);
515          }
516        },
517        useCapture
518      );
519      return off2;
520    }
521    function trigger(targets, event, detail2) {
522      return toEventTargets(targets).every(
523        (target) => target.dispatchEvent(createEvent(event, true, true, detail2))
524      );
525    }
526    function createEvent(e, bubbles = true, cancelable = false, detail2) {
527      if (isString(e)) {
vendor: 8,152 bytes, lines 528-769
528        e = new CustomEvent(e, { bubbles, cancelable, detail: detail2 });
529      }
530      return e;
531    }
532    function getArgs(args) {
533      args[0] = toEventTargets(args[0]);
534      if (isString(args[1])) {
535        args[1] = args[1].split(" ");
536      }
537      if (isFunction(args[2])) {
538        args.splice(2, 0, false);
539      }
540      return args;
541    }
542    function delegate(selector, listener) {
543      return (e) => {
544        const current = selector[0] === ">" ? findAll(selector, e.currentTarget).reverse().find((element) => element.contains(e.target)) : e.target.closest(selector);
545        if (current) {
546          e.current = current;
547          listener.call(this, e);
548          delete e.current;
549        }
550      };
551    }
552    function detail(listener) {
553      return (e) => isArray(e.detail) ? listener(e, ...e.detail) : listener(e);
554    }
555    function selfFilter(listener) {
556      return function(e) {
557        if (e.target === e.currentTarget || e.target === e.current) {
558          return listener.call(null, e);
559        }
560      };
561    }
562    function isEventTarget(target) {
563      return target && "addEventListener" in target;
564    }
565    function toEventTarget(target) {
566      return isEventTarget(target) ? target : toNode(target);
567    }
568    function toEventTargets(target) {
569      return isArray(target) ? target.map(toEventTarget).filter(Boolean) : isString(target) ? findAll(target) : isEventTarget(target) ? [target] : toNodes(target);
570    }
571    function isTouch(e) {
572      return e.pointerType === "touch" || !!e.touches;
573    }
574    function getEventPos(e) {
575      var _a, _b;
576      const { clientX: x, clientY: y } = ((_a = e.touches) == null ? void 0 : _a[0]) || ((_b = e.changedTouches) == null ? void 0 : _b[0]) || e;
577      return { x, y };
578    }
579
580    const cssNumber = {
581      "animation-iteration-count": true,
582      "column-count": true,
583      "fill-opacity": true,
584      "flex-grow": true,
585      "flex-shrink": true,
586      "font-weight": true,
587      "line-height": true,
588      opacity: true,
589      order: true,
590      orphans: true,
591      "stroke-dasharray": true,
592      "stroke-dashoffset": true,
593      widows: true,
594      "z-index": true,
595      zoom: true
596    };
597    function css(element, property, value, priority) {
598      const elements = toNodes(element);
599      for (const element2 of elements) {
600        if (isString(property)) {
601          property = propName(property);
602          if (isUndefined(value)) {
603            return getComputedStyle(element2).getPropertyValue(property);
604          } else {
605            element2.style.setProperty(
606              property,
607              isNumeric(value) && !cssNumber[property] ? `${value}px` : value || isNumber(value) ? value : "",
608              priority
609            );
610          }
611        } else if (isArray(property)) {
612          const props = {};
613          for (const prop of property) {
614            props[prop] = css(element2, prop);
615          }
616          return props;
617        } else if (isObject(property)) {
618          for (const prop in property) {
619            css(element2, prop, property[prop], value);
620          }
621        }
622      }
623      return elements[0];
624    }
625    const propName = memoize((name) => {
626      if (startsWith(name, "--")) {
627        return name;
628      }
629      name = hyphenate(name);
630      const { style } = document.documentElement;
631      if (name in style) {
632        return name;
633      }
634      for (const prefix of ["webkit", "moz"]) {
635        const prefixedName = `-${prefix}-${name}`;
636        if (prefixedName in style) {
637          return prefixedName;
638        }
639      }
640    });
641
642    const clsTransition = "uk-transition";
643    const transitionEnd = "transitionend";
644    const transitionCanceled = "transitioncanceled";
645    function transition$1(element, props, duration = 400, timing = "linear") {
646      duration = Math.round(duration);
647      return Promise.all(
648        toNodes(element).map(
649          (element2) => new Promise((resolve, reject) => {
650            for (const name in props) {
651              const value = css(element2, name);
652              if (value === "") {
653                css(element2, name, value);
654              }
655            }
656            const timer = setTimeout(() => trigger(element2, transitionEnd), duration);
657            once(
658              element2,
659              [transitionEnd, transitionCanceled],
660              ({ type }) => {
661                clearTimeout(timer);
662                removeClass(element2, clsTransition);
663                css(element2, {
664                  transitionProperty: "",
665                  transitionDuration: "",
666                  transitionTimingFunction: ""
667                });
668                type === transitionCanceled ? reject() : resolve(element2);
669              },
670              { self: true }
671            );
672            addClass(element2, clsTransition);
673            css(element2, {
674              transitionProperty: Object.keys(props).map(propName).join(","),
675              transitionDuration: `${duration}ms`,
676              transitionTimingFunction: timing,
677              ...props
678            });
679          })
680        )
681      );
682    }
683    const Transition = {
684      start: transition$1,
685      async stop(element) {
686        trigger(element, transitionEnd);
687        await Promise.resolve();
688      },
689      async cancel(element) {
690        trigger(element, transitionCanceled);
691        await Promise.resolve();
692      },
693      inProgress(element) {
694        return hasClass(element, clsTransition);
695      }
696    };
697    const animationPrefix = "uk-animation-";
698    const animationEnd = "animationend";
699    const animationCanceled = "animationcanceled";
700    function animate$2(element, animation, duration = 200, origin, out) {
701      return Promise.all(
702        toNodes(element).map(
703          (element2) => new Promise((resolve, reject) => {
704            trigger(element2, animationCanceled);
705            const timer = setTimeout(() => trigger(element2, animationEnd), duration);
706            once(
707              element2,
708              [animationEnd, animationCanceled],
709              ({ type }) => {
710                clearTimeout(timer);
711                type === animationCanceled ? reject() : resolve(element2);
712                css(element2, "animationDuration", "");
713                removeClasses(element2, `${animationPrefix}\\S*`);
714              },
715              { self: true }
716            );
717            css(element2, "animationDuration", `${duration}ms`);
718            addClass(element2, animation, animationPrefix + (out ? "leave" : "enter"));
719            if (startsWith(animation, animationPrefix)) {
720              origin && addClass(element2, `uk-transform-origin-${origin}`);
721              out && addClass(element2, `${animationPrefix}reverse`);
722            }
723          })
724        )
725      );
726    }
727    const inProgressRe = new RegExp(`${animationPrefix}(enter|leave)`);
728    const Animation = {
729      in: animate$2,
730      out(element, animation, duration, origin) {
731        return animate$2(element, animation, duration, origin, true);
732      },
733      inProgress(element) {
734        return inProgressRe.test(attr(element, "class"));
735      },
736      cancel(element) {
737        trigger(element, animationCanceled);
738      }
739    };
740
741    function ready(fn) {
742      if (document.readyState !== "loading") {
743        fn();
744        return;
745      }
746      once(document, "DOMContentLoaded", fn);
747    }
748    function isTag(element, ...tagNames) {
749      return tagNames.some((tagName) => {
750        var _a;
751        return ((_a = element == null ? void 0 : element.tagName) == null ? void 0 : _a.toLowerCase()) === tagName.toLowerCase();
752      });
753    }
754    function empty(element) {
755      element = $(element);
756      element.innerHTML = "";
757      return element;
758    }
759    function html(parent2, html2) {
760      return isUndefined(html2) ? $(parent2).innerHTML : append(empty(parent2), html2);
761    }
762    const prepend = applyFn("prepend");
763    const append = applyFn("append");
764    const before = applyFn("before");
765    const after = applyFn("after");
766    function applyFn(fn) {
767      return function(ref, element) {
768        var _a;
769        const nodes = toNodes(isString(element) ? fragment(element) : element);
vendor: 10,068 bytes, lines 770-1085
770        (_a = $(ref)) == null ? void 0 : _a[fn](...nodes);
771        return unwrapSingle(nodes);
772      };
773    }
774    function remove$1(element) {
775      toNodes(element).forEach((element2) => element2.remove());
776    }
777    function wrapAll(element, structure) {
778      structure = toNode(before(element, structure));
779      while (structure.firstElementChild) {
780        structure = structure.firstElementChild;
781      }
782      append(structure, element);
783      return structure;
784    }
785    function wrapInner(element, structure) {
786      return toNodes(
787        toNodes(element).map(
788          (element2) => element2.hasChildNodes() ? wrapAll(toArray(element2.childNodes), structure) : append(element2, structure)
789        )
790      );
791    }
792    function unwrap(element) {
793      toNodes(element).map(parent).filter((value, index, self) => self.indexOf(value) === index).forEach((parent2) => parent2.replaceWith(...parent2.childNodes));
794    }
795    const singleTagRe = /^<(\w+)\s*\/?>(?:<\/\1>)?$/;
796    function fragment(html2) {
797      const matches = singleTagRe.exec(html2);
798      if (matches) {
799        return document.createElement(matches[1]);
800      }
801      const container = document.createElement("template");
802      container.innerHTML = html2.trim();
803      return unwrapSingle(container.content.childNodes);
804    }
805    function unwrapSingle(nodes) {
806      return nodes.length > 1 ? nodes : nodes[0];
807    }
808    function apply(node, fn) {
809      if (!isElement(node)) {
810        return;
811      }
812      fn(node);
813      node = node.firstElementChild;
814      while (node) {
815        const next = node.nextElementSibling;
816        apply(node, fn);
817        node = next;
818      }
819    }
820    function $(selector, context) {
821      return isHtml(selector) ? toNode(fragment(selector)) : find(selector, context);
822    }
823    function $$(selector, context) {
824      return isHtml(selector) ? toNodes(fragment(selector)) : findAll(selector, context);
825    }
826    function isHtml(str) {
827      return isString(str) && startsWith(str.trim(), "<");
828    }
829
830    const dirs$1 = {
831      width: ["left", "right"],
832      height: ["top", "bottom"]
833    };
834    function dimensions$1(element) {
835      const rect = isElement(element) ? toNode(element).getBoundingClientRect() : { height: height(element), width: width(element), top: 0, left: 0 };
836      return {
837        height: rect.height,
838        width: rect.width,
839        top: rect.top,
840        left: rect.left,
841        bottom: rect.top + rect.height,
842        right: rect.left + rect.width
843      };
844    }
845    function offset(element, coordinates) {
846      if (coordinates) {
847        css(element, { left: 0, top: 0 });
848      }
849      const currentOffset = dimensions$1(element);
850      if (element) {
851        const { scrollY, scrollX } = toWindow(element);
852        const offsetBy = { height: scrollY, width: scrollX };
853        for (const dir in dirs$1) {
854          for (const prop of dirs$1[dir]) {
855            currentOffset[prop] += offsetBy[dir];
856          }
857        }
858      }
859      if (!coordinates) {
860        return currentOffset;
861      }
862      for (const prop of ["left", "top"]) {
863        css(element, prop, coordinates[prop] - currentOffset[prop]);
864      }
865    }
866    function position(element) {
867      let { top, left } = offset(element);
868      const {
869        ownerDocument: { body, documentElement },
870        offsetParent
871      } = toNode(element);
872      let parent = offsetParent || documentElement;
873      while (parent && (parent === body || parent === documentElement) && css(parent, "position") === "static") {
874        parent = parent.parentNode;
875      }
876      if (isElement(parent)) {
877        const parentOffset = offset(parent);
878        top -= parentOffset.top + toFloat(css(parent, "borderTopWidth"));
879        left -= parentOffset.left + toFloat(css(parent, "borderLeftWidth"));
880      }
881      return {
882        top: top - toFloat(css(element, "marginTop")),
883        left: left - toFloat(css(element, "marginLeft"))
884      };
885    }
886    function offsetPosition(element) {
887      element = toNode(element);
888      const offset2 = [element.offsetTop, element.offsetLeft];
889      while (element = element.offsetParent) {
890        offset2[0] += element.offsetTop + toFloat(css(element, `borderTopWidth`));
891        offset2[1] += element.offsetLeft + toFloat(css(element, `borderLeftWidth`));
892        if (css(element, "position") === "fixed") {
893          const win = toWindow(element);
894          offset2[0] += win.scrollY;
895          offset2[1] += win.scrollX;
896          return offset2;
897        }
898      }
899      return offset2;
900    }
901    const height = dimension("height");
902    const width = dimension("width");
903    function dimension(prop) {
904      const propName = ucfirst(prop);
905      return (element, value) => {
906        if (isUndefined(value)) {
907          if (isWindow(element)) {
908            return element[`inner${propName}`];
909          }
910          if (isDocument(element)) {
911            const doc = element.documentElement;
912            return Math.max(doc[`offset${propName}`], doc[`scroll${propName}`]);
913          }
914          element = toNode(element);
915          value = css(element, prop);
916          value = value === "auto" ? element[`offset${propName}`] : toFloat(value) || 0;
917          return value - boxModelAdjust(element, prop);
918        } else {
919          return css(
920            element,
921            prop,
922            !value && value !== 0 ? "" : +value + boxModelAdjust(element, prop) + "px"
923          );
924        }
925      };
926    }
927    function boxModelAdjust(element, prop, sizing = "border-box") {
928      return css(element, "boxSizing") === sizing ? sumBy(
929        dirs$1[prop].map(ucfirst),
930        (prop2) => toFloat(css(element, `padding${prop2}`)) + toFloat(css(element, `border${prop2}Width`))
931      ) : 0;
932    }
933    function flipPosition(pos) {
934      for (const dir in dirs$1) {
935        for (const i in dirs$1[dir]) {
936          if (dirs$1[dir][i] === pos) {
937            return dirs$1[dir][1 - i];
938          }
939        }
940      }
941      return pos;
942    }
943    function toPx(value, property = "width", element = window, offsetDim = false) {
944      if (!isString(value)) {
945        return toFloat(value);
946      }
947      return sumBy(parseCalc(value), (value2) => {
948        const unit = parseUnit(value2);
949        return unit ? percent(
950          unit === "vh" ? getViewportHeight() : unit === "vw" ? width(toWindow(element)) : offsetDim ? element[`offset${ucfirst(property)}`] : dimensions$1(element)[property],
951          value2
952        ) : value2;
953      });
954    }
955    const calcRe = /-?\d+(?:\.\d+)?(?:v[wh]|%|px)?/g;
956    const parseCalc = memoize((calc) => calc.toString().replace(/\s/g, "").match(calcRe) || []);
957    const unitRe$1 = /(?:v[hw]|%)$/;
958    const parseUnit = memoize((str) => (str.match(unitRe$1) || [])[0]);
959    function percent(base, value) {
960      return base * toFloat(value) / 100;
961    }
962    let vh;
963    let vhEl;
964    function getViewportHeight() {
965      if (vh) {
966        return vh;
967      }
968      if (!vhEl) {
969        vhEl = $("<div>");
970        css(vhEl, {
971          height: "100vh",
972          position: "fixed"
973        });
974        on(window, "resize", () => vh = null);
975      }
976      append(document.body, vhEl);
977      vh = vhEl.clientHeight;
978      remove$1(vhEl);
979      return vh;
980    }
981
982    const fastdom = {
983      reads: [],
984      writes: [],
985      read(task) {
986        this.reads.push(task);
987        scheduleFlush();
988        return task;
989      },
990      write(task) {
991        this.writes.push(task);
992        scheduleFlush();
993        return task;
994      },
995      clear(task) {
996        remove(this.reads, task);
997        remove(this.writes, task);
998      },
999      flush
1000    };
1001    function flush() {
1002      runTasks(fastdom.reads);
1003      runTasks(fastdom.writes.splice(0));
1004      fastdom.scheduled = false;
1005      if (fastdom.reads.length || fastdom.writes.length) {
1006        scheduleFlush();
1007      }
1008    }
1009    function scheduleFlush() {
1010      if (!fastdom.scheduled) {
1011        fastdom.scheduled = true;
1012        queueMicrotask(flush);
1013      }
1014    }
1015    function runTasks(tasks) {
1016      let task;
1017      while (task = tasks.shift()) {
1018        try {
1019          task();
1020        } catch (e) {
1021          console.error(e);
1022        }
1023      }
1024    }
1025    function remove(array, item) {
1026      const index = array.indexOf(item);
1027      return ~index && array.splice(index, 1);
1028    }
1029
1030    class MouseTracker {
1031      init() {
1032        this.positions = [];
1033        let position;
1034        this.unbind = on(document, "mousemove", (e) => position = getEventPos(e));
1035        this.interval = setInterval(() => {
1036          if (!position) {
1037            return;
1038          }
1039          this.positions.push(position);
1040          if (this.positions.length > 5) {
1041            this.positions.shift();
1042          }
1043        }, 50);
1044      }
1045      cancel() {
1046        var _a;
1047        (_a = this.unbind) == null ? void 0 : _a.call(this);
1048        clearInterval(this.interval);
1049      }
1050      movesTo(target) {
1051        if (!this.positions || this.positions.length < 2) {
1052          return false;
1053        }
1054        const p = dimensions$1(target);
1055        const { left, right, top, bottom } = p;
1056        const [prevPosition] = this.positions;
1057        const position = last(this.positions);
1058        const path = [prevPosition, position];
1059        if (pointInRect(position, p)) {
1060          return false;
1061        }
1062        const diagonals = [
1063          [
1064            { x: left, y: top },
1065            { x: right, y: bottom }
1066          ],
1067          [
1068            { x: left, y: bottom },
1069            { x: right, y: top }
1070          ]
1071        ];
1072        return diagonals.some((diagonal) => {
1073          const intersection = intersect(path, diagonal);
1074          return intersection && pointInRect(intersection, p);
1075        });
1076      }
1077    }
1078    function intersect([{ x: x1, y: y1 }, { x: x2, y: y2 }], [{ x: x3, y: y3 }, { x: x4, y: y4 }]) {
1079      const denominator = (y4 - y3) * (x2 - x1) - (x4 - x3) * (y2 - y1);
1080      if (denominator === 0) {
1081        return false;
1082      }
1083      const ua = ((x4 - x3) * (y1 - y3) - (y4 - y3) * (x1 - x3)) / denominator;
1084      if (ua < 0) {
1085        return false;
vendor: 6,898 bytes, lines 1086-1281
1086      }
1087      return { x: x1 + ua * (x2 - x1), y: y1 + ua * (y2 - y1) };
1088    }
1089
1090    function observeIntersection(targets, cb, options = {}, { intersecting = true } = {}) {
1091      const observer = new IntersectionObserver(
1092        intersecting ? (entries, observer2) => {
1093          if (entries.some((entry) => entry.isIntersecting)) {
1094            cb(entries, observer2);
1095          }
1096        } : cb,
1097        options
1098      );
1099      for (const el of toNodes(targets)) {
1100        observer.observe(el);
1101      }
1102      return observer;
1103    }
1104    const hasResizeObserver = inBrowser && window.ResizeObserver;
1105    function observeResize(targets, cb, options = { box: "border-box" }) {
1106      if (hasResizeObserver) {
1107        return observe$1(ResizeObserver, targets, cb, options);
1108      }
1109      const off = [on(window, "load resize", cb), on(document, "loadedmetadata load", cb, true)];
1110      return { disconnect: () => off.map((cb2) => cb2()) };
1111    }
1112    function observeViewportResize(cb) {
1113      return { disconnect: on([window, window.visualViewport], "resize", cb) };
1114    }
1115    function observeMutation(targets, cb, options) {
1116      return observe$1(MutationObserver, targets, cb, options);
1117    }
1118    function observe$1(Observer, targets, cb, options) {
1119      const observer = new Observer(cb);
1120      for (const el of toNodes(targets)) {
1121        observer.observe(el, options);
1122      }
1123      return observer;
1124    }
1125
1126    function play(el) {
1127      if (isIFrame(el)) {
1128        call(el, { func: "playVideo", method: "play" });
1129      }
1130      if (isHTML5(el)) {
1131        el.play();
1132      }
1133    }
1134    function pause(el) {
1135      if (isIFrame(el)) {
1136        call(el, { func: "pauseVideo", method: "pause" });
1137      }
1138      if (isHTML5(el)) {
1139        el.pause();
1140      }
1141    }
1142    function mute(el) {
1143      if (isIFrame(el)) {
1144        call(el, { func: "mute", method: "setVolume", value: 0 });
1145      }
1146      if (isHTML5(el)) {
1147        el.muted = true;
1148      }
1149    }
1150    function isVideo(el) {
1151      return isHTML5(el) || isIFrame(el);
1152    }
1153    function isHTML5(el) {
1154      return isTag(el, "video");
1155    }
1156    function isIFrame(el) {
1157      return isTag(el, "iframe") && (isYoutube(el) || isVimeo(el));
1158    }
1159    function isYoutube(el) {
1160      return !!el.src.match(
1161        /\/\/.*?youtube(-nocookie)?\.[a-z]+\/(watch\?v=[^&\s]+|embed)|youtu\.be\/.*/
1162      );
1163    }
1164    function isVimeo(el) {
1165      return !!el.src.match(/vimeo\.com\/video\/.*/);
1166    }
1167    async function call(el, cmd) {
1168      await enableApi(el);
1169      post(el, cmd);
1170    }
1171    function post(el, cmd) {
1172      el.contentWindow.postMessage(JSON.stringify({ event: "command", ...cmd }), "*");
1173    }
1174    const stateKey = "_ukPlayer";
1175    let counter = 0;
1176    function enableApi(el) {
1177      if (el[stateKey]) {
1178        return el[stateKey];
1179      }
1180      const youtube = isYoutube(el);
1181      const vimeo = isVimeo(el);
1182      const id = ++counter;
1183      let poller;
1184      return el[stateKey] = new Promise((resolve) => {
1185        youtube && once(el, "load", () => {
1186          const listener = () => post(el, { event: "listening", id });
1187          poller = setInterval(listener, 100);
1188          listener();
1189        });
1190        once(window, "message", resolve, false, ({ data }) => {
1191          try {
1192            data = JSON.parse(data);
1193            return youtube && (data == null ? void 0 : data.id) === id && data.event === "onReady" || vimeo && Number(data == null ? void 0 : data.player_id) === id;
1194          } catch (e) {
1195          }
1196        });
1197        el.src = `${el.src}${includes(el.src, "?") ? "&" : "?"}${youtube ? "enablejsapi=1" : `api=1&player_id=${id}`}`;
1198      }).then(() => clearInterval(poller));
1199    }
1200
1201    function isInView(element, offsetTop = 0, offsetLeft = 0) {
1202      if (!isVisible(element)) {
1203        return false;
1204      }
1205      return intersectRect(
1206        ...overflowParents(element).map((parent2) => {
1207          const { top, left, bottom, right } = offsetViewport(parent2);
1208          return {
1209            top: top - offsetTop,
1210            left: left - offsetLeft,
1211            bottom: bottom + offsetTop,
1212            right: right + offsetLeft
1213          };
1214        }).concat(offset(element))
1215      );
1216    }
1217    function scrollIntoView(element, { offset: offsetBy = 0 } = {}) {
1218      const parents2 = isVisible(element) ? scrollParents(element, false, ["hidden"]) : [];
1219      return parents2.reduce(
1220        (fn, scrollElement, i) => {
1221          const { scrollTop, scrollHeight, offsetHeight } = scrollElement;
1222          const viewport = offsetViewport(scrollElement);
1223          const maxScroll = scrollHeight - viewport.height;
1224          const { height: elHeight, top: elTop } = parents2[i - 1] ? offsetViewport(parents2[i - 1]) : offset(element);
1225          let top = Math.ceil(elTop - viewport.top - offsetBy + scrollTop);
1226          if (offsetBy > 0 && offsetHeight < elHeight + offsetBy) {
1227            top += offsetBy;
1228          } else {
1229            offsetBy = 0;
1230          }
1231          if (top > maxScroll) {
1232            offsetBy -= top - maxScroll;
1233            top = maxScroll;
1234          } else if (top < 0) {
1235            offsetBy -= top;
1236            top = 0;
1237          }
1238          return () => scrollTo(scrollElement, top - scrollTop, element, maxScroll).then(fn);
1239        },
1240        () => Promise.resolve()
1241      )();
1242      function scrollTo(element2, top, targetEl, maxScroll) {
1243        return new Promise((resolve) => {
1244          const scroll = element2.scrollTop;
1245          const duration = getDuration(Math.abs(top));
1246          const start = Date.now();
1247          const isScrollingElement = scrollingElement(element2) === element2;
1248          const targetTop = offset(targetEl).top + (isScrollingElement ? 0 : scroll);
1249          let prev = 0;
1250          let frames = 15;
1251          (function step() {
1252            const percent = ease(clamp((Date.now() - start) / duration));
1253            let diff = 0;
1254            if (parents2[0] === element2 && scroll + top < maxScroll) {
1255              diff = offset(targetEl).top + (isScrollingElement ? 0 : element2.scrollTop) - targetTop;
1256              const coverEl = getCoveringElement(targetEl);
1257              diff -= coverEl ? offset(coverEl).height : 0;
1258            }
1259            element2.scrollTop = scroll + (top + diff) * percent;
1260            if (percent === 1 && (prev === diff || !frames--)) {
1261              resolve();
1262            } else {
1263              prev = diff;
1264              requestAnimationFrame(step);
1265            }
1266          })();
1267        });
1268      }
1269      function getDuration(dist) {
1270        return 40 * Math.pow(dist, 0.375);
1271      }
1272      function ease(k) {
1273        return 0.5 * (1 - Math.cos(Math.PI * k));
1274      }
1275    }
1276    function scrolledOver(element, startOffset = 0, endOffset = 0) {
1277      if (!isVisible(element)) {
1278        return 0;
1279      }
1280      const scrollElement = scrollParent(element, true);
1281      const { scrollHeight, scrollTop } = scrollElement;
vendor: 11,795 bytes, lines 1282-1600
1282      const { height: viewportHeight } = offsetViewport(scrollElement);
1283      const maxScroll = scrollHeight - viewportHeight;
1284      const elementOffsetTop = offsetPosition(element)[0] - offsetPosition(scrollElement)[0];
1285      const start = Math.max(0, elementOffsetTop - viewportHeight + startOffset);
1286      const end = Math.min(maxScroll, elementOffsetTop + element.offsetHeight - endOffset);
1287      return start < end ? clamp((scrollTop - start) / (end - start)) : 1;
1288    }
1289    function scrollParents(element, scrollable = false, props = []) {
1290      const scrollEl = scrollingElement(element);
1291      let ancestors = parents(element).reverse();
1292      ancestors = ancestors.slice(ancestors.indexOf(scrollEl) + 1);
1293      const fixedIndex = findIndex(ancestors, (el) => css(el, "position") === "fixed");
1294      if (~fixedIndex) {
1295        ancestors = ancestors.slice(fixedIndex);
1296      }
1297      return [scrollEl].concat(
1298        ancestors.filter(
1299          (parent2) => css(parent2, "overflow").split(" ").some((prop) => includes(["auto", "scroll", ...props], prop)) && (!scrollable || parent2.scrollHeight > offsetViewport(parent2).height)
1300        )
1301      ).reverse();
1302    }
1303    function scrollParent(...args) {
1304      return scrollParents(...args)[0];
1305    }
1306    function overflowParents(element) {
1307      return scrollParents(element, false, ["hidden", "clip"]);
1308    }
1309    function offsetViewport(scrollElement) {
1310      const window = toWindow(scrollElement);
1311      let viewportElement = scrollElement === scrollingElement(scrollElement) ? window : scrollElement;
1312      if (isWindow(viewportElement) && window.visualViewport) {
1313        let { height, width, scale, pageTop: top, pageLeft: left } = window.visualViewport;
1314        height = Math.round(height * scale);
1315        width = Math.round(width * scale);
1316        return { height, width, top, left, bottom: top + height, right: left + width };
1317      }
1318      let rect = offset(viewportElement);
1319      if (css(viewportElement, "display") === "inline") {
1320        return rect;
1321      }
1322      for (let [prop, dir, start, end] of [
1323        ["width", "x", "left", "right"],
1324        ["height", "y", "top", "bottom"]
1325      ]) {
1326        if (isWindow(viewportElement)) {
1327          viewportElement = scrollElement.ownerDocument;
1328        } else {
1329          rect[start] += toFloat(css(viewportElement, `border-${start}-width`));
1330        }
1331        const subpixel = rect[prop] % 1;
1332        rect[prop] = rect[dir] = viewportElement[`client${ucfirst(prop)}`] - (subpixel ? subpixel < 0.5 ? -subpixel : 1 - subpixel : 0);
1333        rect[end] = rect[prop] + rect[start];
1334      }
1335      return rect;
1336    }
1337    function getCoveringElement(target) {
1338      const { left, width, top } = dimensions$1(target);
1339      for (const topPosition of [0, top]) {
1340        const coverEl = target.ownerDocument.elementsFromPoint(left + width / 2, topPosition).find(
1341          (el) => !el.contains(target) && // If e.g. Offcanvas is not yet closed
1342          !hasClass(el, "uk-togglable-leave") && (hasPosition(el, "fixed") && zIndex(
1343            parents(target).reverse().find(
1344              (parent2) => !parent2.contains(el) && !hasPosition(parent2, "static")
1345            )
1346          ) < zIndex(el) || hasPosition(el, "sticky") && parent(el).contains(target))
1347        );
1348        if (coverEl) {
1349          return coverEl;
1350        }
1351      }
1352    }
1353    function zIndex(element) {
1354      return toFloat(css(element, "zIndex"));
1355    }
1356    function hasPosition(element, position) {
1357      return css(element, "position") === position;
1358    }
1359    function scrollingElement(element) {
1360      return toWindow(element).document.scrollingElement;
1361    }
1362
1363    const dirs = [
1364      ["width", "x", "left", "right"],
1365      ["height", "y", "top", "bottom"]
1366    ];
1367    function positionAt(element, target, options) {
1368      options = {
1369        attach: {
1370          element: ["left", "top"],
1371          target: ["left", "top"],
1372          ...options.attach
1373        },
1374        offset: [0, 0],
1375        placement: [],
1376        ...options
1377      };
1378      if (!isArray(target)) {
1379        target = [target, target];
1380      }
1381      offset(element, getPosition(element, target, options));
1382    }
1383    function getPosition(element, target, options) {
1384      const position = attachTo(element, target, options);
1385      const { boundary, viewportOffset = 0, placement } = options;
1386      let offsetPosition = position;
1387      for (const [i, [prop, , start, end]] of Object.entries(dirs)) {
1388        const viewport = getViewport$2(element, target[i], viewportOffset, boundary, i);
1389        if (isWithin(position, viewport, i)) {
1390          continue;
1391        }
1392        let offsetBy = 0;
1393        if (placement[i] === "flip") {
1394          const attach = options.attach.target[i];
1395          if (attach === end && position[end] <= viewport[end] || attach === start && position[start] >= viewport[start]) {
1396            continue;
1397          }
1398          offsetBy = flip(element, target, options, i)[start] - position[start];
1399          const scrollArea = getScrollArea(element, target[i], viewportOffset, i);
1400          if (!isWithin(applyOffset(position, offsetBy, i), scrollArea, i)) {
1401            if (isWithin(position, scrollArea, i)) {
1402              continue;
1403            }
1404            if (options.recursion) {
1405              return false;
1406            }
1407            const newPos = flipAxis(element, target, options);
1408            if (newPos && isWithin(newPos, scrollArea, 1 - i)) {
1409              return newPos;
1410            }
1411            continue;
1412          }
1413        } else if (placement[i] === "shift") {
1414          const targetDim = offset(target[i]);
1415          const { offset: elOffset } = options;
1416          offsetBy = clamp(
1417            clamp(position[start], viewport[start], viewport[end] - position[prop]),
1418            targetDim[start] - position[prop] + elOffset[i],
1419            targetDim[end] - elOffset[i]
1420          ) - position[start];
1421        }
1422        offsetPosition = applyOffset(offsetPosition, offsetBy, i);
1423      }
1424      return offsetPosition;
1425    }
1426    function attachTo(element, target, options) {
1427      let { attach, offset: offsetBy } = {
1428        attach: {
1429          element: ["left", "top"],
1430          target: ["left", "top"],
1431          ...options.attach
1432        },
1433        offset: [0, 0],
1434        ...options
1435      };
1436      let elOffset = offset(element);
1437      for (const [i, [prop, , start, end]] of Object.entries(dirs)) {
1438        const targetOffset = attach.target[i] === attach.element[i] ? offsetViewport(target[i]) : offset(target[i]);
1439        elOffset = applyOffset(
1440          elOffset,
1441          targetOffset[start] - elOffset[start] + moveBy(attach.target[i], end, targetOffset[prop]) - moveBy(attach.element[i], end, elOffset[prop]) + +offsetBy[i],
1442          i
1443        );
1444      }
1445      return elOffset;
1446    }
1447    function applyOffset(position, offset2, i) {
1448      const [, dir, start, end] = dirs[i];
1449      const newPos = { ...position };
1450      newPos[start] = position[dir] = position[start] + offset2;
1451      newPos[end] += offset2;
1452      return newPos;
1453    }
1454    function moveBy(attach, end, dim) {
1455      return attach === "center" ? dim / 2 : attach === end ? dim : 0;
1456    }
1457    function getViewport$2(element, target, viewportOffset, boundary, i) {
1458      let viewport = getIntersectionArea(...commonScrollParents(element, target).map(offsetViewport));
1459      if (viewportOffset) {
1460        viewport[dirs[i][2]] += viewportOffset;
1461        viewport[dirs[i][3]] -= viewportOffset;
1462      }
1463      if (boundary) {
1464        viewport = getIntersectionArea(
1465          viewport,
1466          offset(isArray(boundary) ? boundary[i] : boundary)
1467        );
1468      }
1469      return viewport;
1470    }
1471    function getScrollArea(element, target, viewportOffset, i) {
1472      const [prop, axis, start, end] = dirs[i];
1473      const [scrollElement] = commonScrollParents(element, target);
1474      const viewport = offsetViewport(scrollElement);
1475      if (["auto", "scroll"].includes(css(scrollElement, `overflow-${axis}`))) {
1476        viewport[start] -= scrollElement[`scroll${ucfirst(start)}`];
1477        viewport[end] = viewport[start] + scrollElement[`scroll${ucfirst(prop)}`];
1478      }
1479      viewport[start] += viewportOffset;
1480      viewport[end] -= viewportOffset;
1481      return viewport;
1482    }
1483    function commonScrollParents(element, target) {
1484      return overflowParents(target).filter((parent) => parent.contains(element));
1485    }
1486    function getIntersectionArea(...rects) {
1487      let area = {};
1488      for (const rect of rects) {
1489        for (const [, , start, end] of dirs) {
1490          area[start] = Math.max(area[start] || 0, rect[start]);
1491          area[end] = Math.min(...[area[end], rect[end]].filter(Boolean));
1492        }
1493      }
1494      return area;
1495    }
1496    function isWithin(positionA, positionB, i) {
1497      const [, , start, end] = dirs[i];
1498      return positionA[start] >= positionB[start] && positionA[end] <= positionB[end];
1499    }
1500    function flip(element, target, { offset: offset2, attach }, i) {
1501      return attachTo(element, target, {
1502        attach: {
1503          element: flipAttach(attach.element, i),
1504          target: flipAttach(attach.target, i)
1505        },
1506        offset: flipOffset(offset2, i)
1507      });
1508    }
1509    function flipAxis(element, target, options) {
1510      return getPosition(element, target, {
1511        ...options,
1512        attach: {
1513          element: options.attach.element.map(flipAttachAxis).reverse(),
1514          target: options.attach.target.map(flipAttachAxis).reverse()
1515        },
1516        offset: options.offset.reverse(),
1517        placement: options.placement.reverse(),
1518        recursion: true
1519      });
1520    }
1521    function flipAttach(attach, i) {
1522      const newAttach = [...attach];
1523      const index = dirs[i].indexOf(attach[i]);
1524      if (~index) {
1525        newAttach[i] = dirs[i][1 - index % 2 + 2];
1526      }
1527      return newAttach;
1528    }
1529    function flipAttachAxis(prop) {
1530      for (let i = 0; i < dirs.length; i++) {
1531        const index = dirs[i].indexOf(prop);
1532        if (~index) {
1533          return dirs[1 - i][index % 2 + 2];
1534        }
1535      }
1536    }
1537    function flipOffset(offset2, i) {
1538      offset2 = [...offset2];
1539      offset2[i] *= -1;
1540      return offset2;
1541    }
1542
1543    var util = /*#__PURE__*/Object.freeze({
1544        __proto__: null,
1545        $: $,
1546        $$: $$,
1547        Animation: Animation,
1548        Dimensions: Dimensions,
1549        MouseTracker: MouseTracker,
1550        Transition: Transition,
1551        addClass: addClass,
1552        after: after,
1553        append: append,
1554        apply: apply,
1555        assign: assign,
1556        attr: attr,
1557        before: before,
1558        boxModelAdjust: boxModelAdjust,
1559        camelize: camelize,
1560        children: children,
1561        clamp: clamp,
1562        createEvent: createEvent,
1563        css: css,
1564        data: data,
1565        dimensions: dimensions$1,
1566        each: each,
1567        empty: empty,
1568        endsWith: endsWith,
1569        escape: escape,
1570        fastdom: fastdom,
1571        filter: filter$1,
1572        find: find,
1573        findAll: findAll,
1574        findIndex: findIndex,
1575        flipPosition: flipPosition,
1576        fragment: fragment,
1577        getCoveringElement: getCoveringElement,
1578        getEventPos: getEventPos,
1579        getIndex: getIndex,
1580        getTargetedElement: getTargetedElement,
1581        hasAttr: hasAttr,
1582        hasClass: hasClass,
1583        hasOwn: hasOwn,
1584        hasTouch: hasTouch,
1585        height: height,
1586        html: html,
1587        hyphenate: hyphenate,
1588        inBrowser: inBrowser,
1589        includes: includes,
1590        index: index,
1591        intersectRect: intersectRect,
1592        isArray: isArray,
1593        isBoolean: isBoolean,
1594        isDocument: isDocument,
1595        isElement: isElement,
1596        isEmpty: isEmpty,
1597        isEqual: isEqual,
1598        isFocusable: isFocusable,
1599        isFunction: isFunction,
1600        isInView: isInView,
1601        isInput: isInput,
1602        isNode: isNode,
1603        isNumber: isNumber,
1604        isNumeric: isNumeric,
1605        isObject: isObject,
1606        isPlainObject: isPlainObject,
1607        isRtl: isRtl,
1608        isSameSiteAnchor: isSameSiteAnchor,
1609        isString: isString,
1610        isTag: isTag,
1611        isTouch: isTouch,
1612        isUndefined: isUndefined,
1613        isVideo: isVideo,
1614        isVisible: isVisible,
1615        isVoidElement: isVoidElement,
1616        isWindow: isWindow,
1617        last: last,
1618        matches: matches,
1619        memoize: memoize,
1620        mute: mute,
1621        noop: noop,
1622        observeIntersection: observeIntersection,
1623        observeMutation: observeMutation,
1624        observeResize: observeResize,
1625        observeViewportResize: observeViewportResize,
1626        off: off,
1627        offset: offset,
1628        offsetPosition: offsetPosition,
1629        offsetViewport: offsetViewport,
1630        on: on,
1631        once: once,
1632        overflowParents: overflowParents,
1633        parent: parent,
1634        parents: parents,
1635        pause: pause,
1636        pick: pick,
1637        play: play,
1638        pointInRect: pointInRect,
1639        pointerCancel: pointerCancel,
1640        pointerDown: pointerDown$1,
1641        pointerEnter: pointerEnter,
1642        pointerLeave: pointerLeave,
1643        pointerMove: pointerMove$1,
1644        pointerUp: pointerUp$1,
1645        position: position,
1646        positionAt: positionAt,
1647        prepend: prepend,
1648        propName: propName,
1649        query: query,
1650        queryAll: queryAll,
1651        ready: ready,
1652        remove: remove$1,
1653        removeAttr: removeAttr,
1654        removeClass: removeClass,
1655        removeClasses: removeClasses,
1656        replaceClass: replaceClass,
1657        scrollIntoView: scrollIntoView,
1658        scrollParent: scrollParent,
1659        scrollParents: scrollParents,
1660        scrolledOver: scrolledOver,
1661        selFocusable: selFocusable,
1662        selInput: selInput,
1663        sortBy: sortBy,
1664        startsWith: startsWith,
1665        sumBy: sumBy,
1666        swap: swap,
1667        toArray: toArray,
1668        toBoolean: toBoolean,
1669        toEventTargets: toEventTargets,
1670        toFloat: toFloat,
1671        toNode: toNode,
1672        toNodes: toNodes,
1673        toNumber: toNumber,
1674        toPx: toPx,
1675        toWindow: toWindow,
1676        toggleClass: toggleClass,
1677        trigger: trigger,
1678        ucfirst: ucfirst,
1679        uniqueBy: uniqueBy,
1680        unwrap: unwrap,
1681        width: width,
1682        wrapAll: wrapAll,
1683        wrapInner: wrapInner
1684    });
1685
1686    var Class = {
1687      connected() {
1688        addClass(this.$el, this.$options.id);
1689      }
1690    };
1691
1692    const units = ["days", "hours", "minutes", "seconds"];
1693    var countdown = {
1694      mixins: [Class],
1695      props: {
1696        date: String,
1697        clsWrapper: String,
1698        role: String
1699      },
1700      data: {
1701        date: "",
1702        clsWrapper: ".uk-countdown-%unit%",
1703        role: "timer"
1704      },
1705      connected() {
1706        attr(this.$el, "role", this.role);
1707        this.date = toFloat(Date.parse(this.$props.date));
1708        this.end = false;
1709        this.start();
1710      },
1711      disconnected() {
1712        this.stop();
1713      },
1714      events: {
1715        name: "visibilitychange",
1716        el: () => document,
1717        handler() {
1718          if (document.hidden) {
1719            this.stop();
1720          } else {
1721            this.start();
1722          }
1723        }
1724      },
1725      methods: {
1726        start() {
1727          this.stop();
1728          this.update();
1729          if (!this.timer) {
1730            trigger(this.$el, "countdownstart");
1731            this.timer = setInterval(this.update, 1e3);
1732          }
1733        },
1734        stop() {
1735          if (this.timer) {
1736            clearInterval(this.timer);
1737            trigger(this.$el, "countdownstop");
1738            this.timer = null;
1739          }
1740        },
1741        update() {
1742          const timespan = getTimeSpan(this.date);
1743          if (!timespan.total) {
1744            this.stop();
1745            if (!this.end) {
1746              trigger(this.$el, "countdownend");
1747              this.end = true;
1748            }
1749          }
1750          for (const unit of units) {
1751            const el = $(this.clsWrapper.replace("%unit%", unit), this.$el);
1752            if (!el) {
1753              continue;
1754            }
1755            let digits = String(Math.trunc(timespan[unit]));
1756            digits = digits.length < 2 ? `0${digits}` : digits;
1757            if (el.textContent !== digits) {
1758              digits = digits.split("");
1759              if (digits.length !== el.children.length) {
1760                html(el, digits.map(() => "<span></span>").join(""));
1761              }
vendor: 12,013 bytes, lines 1762-2130
1762              digits.forEach((digit, i) => el.children[i].textContent = digit);
1763            }
1764          }
1765        }
1766      }
1767    };
1768    function getTimeSpan(date) {
1769      const total = Math.max(0, date - Date.now()) / 1e3;
1770      return {
1771        total,
1772        seconds: total % 60,
1773        minutes: total / 60 % 60,
1774        hours: total / 60 / 60 % 24,
1775        days: total / 60 / 60 / 24
1776      };
1777    }
1778
1779    const strats = {};
1780    strats.events = strats.watch = strats.observe = strats.created = strats.beforeConnect = strats.connected = strats.beforeDisconnect = strats.disconnected = strats.destroy = concatStrat;
1781    strats.args = function(parentVal, childVal) {
1782      return childVal !== false && concatStrat(childVal || parentVal);
1783    };
1784    strats.update = function(parentVal, childVal) {
1785      return sortBy(
1786        concatStrat(parentVal, isFunction(childVal) ? { read: childVal } : childVal),
1787        "order"
1788      );
1789    };
1790    strats.props = function(parentVal, childVal) {
1791      if (isArray(childVal)) {
1792        const value = {};
1793        for (const key of childVal) {
1794          value[key] = String;
1795        }
1796        childVal = value;
1797      }
1798      return strats.methods(parentVal, childVal);
1799    };
1800    strats.computed = strats.methods = function(parentVal, childVal) {
1801      return childVal ? parentVal ? { ...parentVal, ...childVal } : childVal : parentVal;
1802    };
1803    strats.i18n = strats.data = function(parentVal, childVal, vm) {
1804      if (!vm) {
1805        if (!childVal) {
1806          return parentVal;
1807        }
1808        if (!parentVal) {
1809          return childVal;
1810        }
1811        return function(vm2) {
1812          return mergeFnData(parentVal, childVal, vm2);
1813        };
1814      }
1815      return mergeFnData(parentVal, childVal, vm);
1816    };
1817    function mergeFnData(parentVal, childVal, vm) {
1818      return strats.computed(
1819        isFunction(parentVal) ? parentVal.call(vm, vm) : parentVal,
1820        isFunction(childVal) ? childVal.call(vm, vm) : childVal
1821      );
1822    }
1823    function concatStrat(parentVal, childVal) {
1824      parentVal = parentVal && !isArray(parentVal) ? [parentVal] : parentVal;
1825      return childVal ? parentVal ? parentVal.concat(childVal) : isArray(childVal) ? childVal : [childVal] : parentVal;
1826    }
1827    function defaultStrat(parentVal, childVal) {
1828      return isUndefined(childVal) ? parentVal : childVal;
1829    }
1830    function mergeOptions(parent, child, vm) {
1831      const options = {};
1832      if (isFunction(child)) {
1833        child = child.options;
1834      }
1835      if (child.extends) {
1836        parent = mergeOptions(parent, child.extends, vm);
1837      }
1838      if (child.mixins) {
1839        for (const mixin of child.mixins) {
1840          parent = mergeOptions(parent, mixin, vm);
1841        }
1842      }
1843      for (const key in parent) {
1844        mergeKey(key);
1845      }
1846      for (const key in child) {
1847        if (!hasOwn(parent, key)) {
1848          mergeKey(key);
1849        }
1850      }
1851      function mergeKey(key) {
1852        options[key] = (strats[key] || defaultStrat)(parent[key], child[key], vm);
1853      }
1854      return options;
1855    }
1856    function parseOptions(options, args = []) {
1857      try {
1858        return options ? startsWith(options, "{") ? JSON.parse(options) : args.length && !includes(options, ":") ? { [args[0]]: options } : options.split(";").reduce((options2, option) => {
1859          const [key, value] = option.split(/:(.*)/);
1860          if (key && !isUndefined(value)) {
1861            options2[key.trim()] = value.trim();
1862          }
1863          return options2;
1864        }, {}) : {};
1865      } catch (e) {
1866        return {};
1867      }
1868    }
1869    function coerce$1(type, value) {
1870      if (type === Boolean) {
1871        return toBoolean(value);
1872      } else if (type === Number) {
1873        return toNumber(value);
1874      } else if (type === "list") {
1875        return toList(value);
1876      } else if (type === Object && isString(value)) {
1877        return parseOptions(value);
1878      }
1879      return type ? type(value) : value;
1880    }
1881    const listRe = /,(?![^(]*\))/;
1882    function toList(value) {
1883      return isArray(value) ? value : isString(value) ? value.split(listRe).map((value2) => isNumeric(value2) ? toNumber(value2) : toBoolean(value2.trim())) : [value];
1884    }
1885
1886    function initUpdates(instance) {
1887      instance._data = {};
1888      instance._updates = [...instance.$options.update || []];
1889    }
1890    function prependUpdate(instance, update) {
1891      instance._updates.unshift(update);
1892    }
1893    function clearUpdateData(instance) {
1894      delete instance._data;
1895    }
1896    function callUpdate(instance, e = "update") {
1897      if (!instance._connected) {
1898        return;
1899      }
1900      if (!instance._updates.length) {
1901        return;
1902      }
1903      if (!instance._queued) {
1904        instance._queued = /* @__PURE__ */ new Set();
1905        fastdom.read(() => {
1906          if (instance._connected) {
1907            runUpdates(instance, instance._queued);
1908          }
1909          delete instance._queued;
1910        });
1911      }
1912      instance._queued.add(e.type || e);
1913    }
1914    function runUpdates(instance, types) {
1915      for (const { read, write, events = [] } of instance._updates) {
1916        if (!types.has("update") && !events.some((type) => types.has(type))) {
1917          continue;
1918        }
1919        let result;
1920        if (read) {
1921          result = read.call(instance, instance._data, types);
1922          if (result && isPlainObject(result)) {
1923            assign(instance._data, result);
1924          }
1925        }
1926        if (write && result !== false) {
1927          fastdom.write(() => {
1928            if (instance._connected) {
1929              write.call(instance, instance._data, types);
1930            }
1931          });
1932        }
1933      }
1934    }
1935
1936    function resize(options) {
1937      return observe(observeResize, options, "resize");
1938    }
1939    function intersection(options) {
1940      return observe(observeIntersection, options);
1941    }
1942    function mutation(options) {
1943      return observe(observeMutation, options);
1944    }
1945    function lazyload(options = {}) {
1946      return intersection({
1947        handler: function(entries, observer) {
1948          const { targets = this.$el, preload = 5 } = options;
1949          for (const el of toNodes(isFunction(targets) ? targets(this) : targets)) {
1950            $$('[loading="lazy"]', el).slice(0, preload - 1).forEach((el2) => removeAttr(el2, "loading"));
1951          }
1952          for (const el of entries.filter(({ isIntersecting }) => isIntersecting).map(({ target }) => target)) {
1953            observer.unobserve(el);
1954          }
1955        },
1956        ...options
1957      });
1958    }
1959    function viewport(options) {
1960      return observe((target, handler) => observeViewportResize(handler), options, "resize");
1961    }
1962    function scroll$1(options) {
1963      return observe(
1964        (target, handler) => ({
1965          disconnect: on(toScrollTargets(target), "scroll", handler, { passive: true })
1966        }),
1967        options,
1968        "scroll"
1969      );
1970    }
1971    function swipe(options) {
1972      return {
1973        observe(target, handler) {
1974          return {
1975            observe: noop,
1976            unobserve: noop,
1977            disconnect: on(target, pointerDown$1, handler, { passive: true })
1978          };
1979        },
1980        handler(e) {
1981          if (!isTouch(e)) {
1982            return;
1983          }
1984          const pos = getEventPos(e);
1985          const target = "tagName" in e.target ? e.target : parent(e.target);
1986          once(document, `${pointerUp$1} ${pointerCancel} scroll`, (e2) => {
1987            const { x, y } = getEventPos(e2);
1988            if (e2.type !== "scroll" && target && x && Math.abs(pos.x - x) > 100 || y && Math.abs(pos.y - y) > 100) {
1989              setTimeout(() => {
1990                trigger(target, "swipe");
1991                trigger(target, `swipe${swipeDirection(pos.x, pos.y, x, y)}`);
1992              });
1993            }
1994          });
1995        },
1996        ...options
1997      };
1998    }
1999    function observe(observe2, options, emit) {
2000      return {
2001        observe: observe2,
2002        handler() {
2003          callUpdate(this, emit);
2004        },
2005        ...options
2006      };
2007    }
2008    function swipeDirection(x1, y1, x2, y2) {
2009      return Math.abs(x1 - x2) >= Math.abs(y1 - y2) ? x1 - x2 > 0 ? "Left" : "Right" : y1 - y2 > 0 ? "Up" : "Down";
2010    }
2011    function toScrollTargets(elements) {
2012      return toNodes(elements).map((node) => {
2013        const { ownerDocument } = node;
2014        const parent2 = scrollParent(node, true);
2015        return parent2 === ownerDocument.scrollingElement ? ownerDocument : parent2;
2016      });
2017    }
2018
2019    var Margin = {
2020      props: {
2021        margin: String,
2022        firstColumn: Boolean
2023      },
2024      data: {
2025        margin: "uk-margin-small-top",
2026        firstColumn: "uk-first-column"
2027      },
2028      observe: [
2029        mutation({
2030          options: {
2031            childList: true
2032          }
2033        }),
2034        mutation({
2035          options: {
2036            attributes: true,
2037            attributeFilter: ["style"]
2038          },
2039          target: ({ $el }) => [$el, ...children($el)]
2040        }),
2041        resize({
2042          target: ({ $el }) => [$el, ...children($el)]
2043        })
2044      ],
2045      update: {
2046        read() {
2047          return {
2048            rows: getRows(children(this.$el))
2049          };
2050        },
2051        write({ rows }) {
2052          for (const row of rows) {
2053            for (const el of row) {
2054              toggleClass(el, this.margin, rows[0] !== row);
2055              toggleClass(el, this.firstColumn, row[isRtl ? row.length - 1 : 0] === el);
2056            }
2057          }
2058        },
2059        events: ["resize"]
2060      }
2061    };
2062    function getRows(elements) {
2063      const sorted = [[]];
2064      const withOffset = elements.some(
2065        (el, i) => i && elements[i - 1].offsetParent !== el.offsetParent
2066      );
2067      for (const el of elements) {
2068        if (!isVisible(el)) {
2069          continue;
2070        }
2071        const offset = getOffset(el, withOffset);
2072        for (let i = sorted.length - 1; i >= 0; i--) {
2073          const current = sorted[i];
2074          if (!current[0]) {
2075            current.push(el);
2076            break;
2077          }
2078          const offsetCurrent = getOffset(current[0], withOffset);
2079          if (offset.top >= offsetCurrent.bottom - 1 && offset.top !== offsetCurrent.top) {
2080            sorted.push([el]);
2081            break;
2082          }
2083          if (offset.bottom - 1 > offsetCurrent.top || offset.top === offsetCurrent.top) {
2084            let j = current.length - 1;
2085            for (; j >= 0; j--) {
2086              const offsetCurrent2 = getOffset(current[j], withOffset);
2087              if (offset.left >= offsetCurrent2.left) {
2088                break;
2089              }
2090            }
2091            current.splice(j + 1, 0, el);
2092            break;
2093          }
2094          if (i === 0) {
2095            sorted.unshift([el]);
2096            break;
2097          }
2098        }
2099      }
2100      return sorted;
2101    }
2102    function getOffset(element, offset = false) {
2103      let { offsetTop, offsetLeft, offsetHeight, offsetWidth } = element;
2104      if (offset) {
2105        [offsetTop, offsetLeft] = offsetPosition(element);
2106      }
2107      return {
2108        top: offsetTop,
2109        left: offsetLeft,
2110        bottom: offsetTop + offsetHeight,
2111        right: offsetLeft + offsetWidth
2112      };
2113    }
2114
2115    async function slide(action, target, duration) {
2116      await awaitFrame();
2117      let nodes = children(target);
2118      const currentProps = nodes.map((el) => getProps$1(el, true));
2119      const targetProps = { ...css(target, ["height", "padding"]), display: "block" };
2120      const targets = nodes.concat(target);
2121      await Promise.all(targets.map(Transition.cancel));
2122      css(targets, "transitionProperty", "none");
2123      await action();
2124      nodes = nodes.concat(children(target).filter((el) => !includes(nodes, el)));
2125      await Promise.resolve();
2126      css(targets, "transitionProperty", "");
2127      const targetStyle = attr(target, "style");
2128      const targetPropsTo = css(target, ["height", "padding"]);
2129      const [propsTo, propsFrom] = getTransitionProps(target, nodes, currentProps);
2130      const attrsTo = nodes.map((el) => ({ style: attr(el, "style") }));
2131      nodes.forEach((el, i) => propsFrom[i] && css(el, propsFrom[i]));
2132      css(target, targetProps);
2133      trigger(target, "scroll");
2134      await awaitFrame();
2135      const transitions = nodes.map((el, i) => parent(el) === target && Transition.start(el, propsTo[i], duration, "ease")).concat(Transition.start(target, targetPropsTo, duration, "ease"));
2136      try {
2137        await Promise.all(transitions);
2138        nodes.forEach((el, i) => {
2139          attr(el, attrsTo[i]);
2140          if (parent(el) === target) {
2141            css(el, "display", propsTo[i].opacity === 0 ? "none" : "");
2142          }
2143        });
2144        attr(target, "style", targetStyle);
2145      } catch (e) {
2146        attr(nodes, "style", "");
2147        resetProps(target, targetProps);
2148      }
2149    }
2150    function getProps$1(el, opacity) {
2151      const zIndex = css(el, "zIndex");
2152      return isVisible(el) ? {
2153        display: "",
2154        opacity: opacity ? css(el, "opacity") : "0",
2155        pointerEvents: "none",
2156        position: "absolute",
2157        zIndex: zIndex === "auto" ? index(el) : zIndex,
2158        ...getPositionWithMargin(el)
2159      } : false;
2160    }
2161    function getTransitionProps(target, nodes, currentProps) {
2162      const propsTo = nodes.map(
2163        (el, i) => parent(el) && i in currentProps ? currentProps[i] ? isVisible(el) ? getPositionWithMargin(el) : { opacity: 0 } : { opacity: isVisible(el) ? 1 : 0 } : false
2164      );
2165      const propsFrom = propsTo.map((props, i) => {
2166        const from = parent(nodes[i]) === target && (currentProps[i] || getProps$1(nodes[i]));
2167        if (!from) {
2168          return false;
2169        }
2170        if (!props) {
2171          delete from.opacity;
2172        } else if (!("opacity" in props)) {
2173          const { opacity } = from;
2174          if (opacity % 1) {
2175            props.opacity = 1;
2176          } else {
2177            delete from.opacity;
2178          }
2179        }
2180        return from;
2181      });
2182      return [propsTo, propsFrom];
2183    }
2184    function resetProps(el, props) {
2185      for (const prop in props) {
2186        css(el, prop, "");
2187      }
2188    }
2189    function getPositionWithMargin(el) {
2190      const { height, width } = offset(el);
2191      return {
2192        height,
2193        width,
2194        transform: "",
2195        ...position(el),
2196        ...css(el, ["marginTop", "marginLeft"])
2197      };
2198    }
2199    function awaitFrame() {
2200      return new Promise((resolve) => requestAnimationFrame(resolve));
2201    }
2202
2203    const clsLeave = "uk-transition-leave";
2204    const clsEnter = "uk-transition-enter";
2205    function fade(action, target, duration, stagger = 0) {
2206      const index = transitionIndex(target, true);
2207      const propsIn = { opacity: 1 };
2208      const propsOut = { opacity: 0 };
2209      const wrapIndexFn = (fn) => () => index === transitionIndex(target) ? fn() : Promise.reject();
2210      const leaveFn = wrapIndexFn(async () => {
2211        addClass(target, clsLeave);
2212        await Promise.all(
2213          getTransitionNodes(target).map(
2214            (child, i) => new Promise(
2215              (resolve) => setTimeout(
2216                () => Transition.start(child, propsOut, duration / 2, "ease").then(
2217                  resolve
2218                ),
2219                i * stagger
2220              )
2221            )
2222          )
2223        );
2224        removeClass(target, clsLeave);
2225      });
2226      const enterFn = wrapIndexFn(async () => {
2227        const oldHeight = height(target);
2228        addClass(target, clsEnter);
2229        action();
2230        css(children(target), { opacity: 0 });
2231        await awaitFrame();
2232        const nodes = children(target);
2233        const newHeight = height(target);
2234        css(target, "alignContent", "flex-start");
2235        height(target, oldHeight);
2236        const transitionNodes = getTransitionNodes(target);
2237        css(nodes, propsOut);
2238        const transitions = transitionNodes.map(async (child, i) => {
2239          await awaitTimeout(i * stagger);
2240          await Transition.start(child, propsIn, duration / 2, "ease");
2241        });
2242        if (oldHeight !== newHeight) {
2243          transitions.push(
2244            Transition.start(
2245              target,
2246              { height: newHeight },
2247              duration / 2 + transitionNodes.length * stagger,
2248              "ease"
2249            )
2250          );
2251        }
2252        await Promise.all(transitions).then(() => {
2253          removeClass(target, clsEnter);
2254          if (index === transitionIndex(target)) {
2255            css(target, { height: "", alignContent: "" });
2256            css(nodes, { opacity: "" });
2257            delete target.dataset.transition;
2258          }
2259        });
2260      });
2261      return hasClass(target, clsLeave) ? waitTransitionend(target).then(enterFn) : hasClass(target, clsEnter) ? waitTransitionend(target).then(leaveFn).then(enterFn) : leaveFn().then(enterFn);
2262    }
2263    function transitionIndex(target, next) {
2264      if (next) {
2265        target.dataset.transition = 1 + transitionIndex(target);
2266      }
2267      return toNumber(target.dataset.transition) || 0;
2268    }
2269    function waitTransitionend(target) {
2270      return Promise.all(
2271        children(target).filter(Transition.inProgress).map(
2272          (el) => new Promise((resolve) => once(el, "transitionend transitioncanceled", resolve))
2273        )
2274      );
2275    }
2276    function getTransitionNodes(target) {
2277      return getRows(children(target)).flat().filter(isVisible);
2278    }
2279    function awaitTimeout(timeout) {
2280      return new Promise((resolve) => setTimeout(resolve, timeout));
2281    }
2282
2283    var Animate = {
2284      props: {
2285        duration: Number,
2286        animation: Boolean
2287      },
2288      data: {
2289        duration: 150,
2290        animation: "slide"
2291      },
2292      methods: {
2293        animate(action, target = this.$el) {
2294          const name = this.animation;
2295          const animationFn = name === "fade" ? fade : name === "delayed-fade" ? (...args) => fade(...args, 40) : name ? slide : () => {
2296            action();
2297            return Promise.resolve();
2298          };
2299          return animationFn(action, target, this.duration).catch(noop);
2300        }
2301      }
2302    };
2303
vendor: 11,230 bytes, lines 2304-2644
2304    const keyMap = {
2305      TAB: 9,
2306      ESC: 27,
2307      SPACE: 32,
2308      END: 35,
2309      HOME: 36,
2310      LEFT: 37,
2311      UP: 38,
2312      RIGHT: 39,
2313      DOWN: 40
2314    };
2315
2316    var filter = {
2317      mixins: [Animate],
2318      args: "target",
2319      props: {
2320        target: String,
2321        selActive: Boolean
2322      },
2323      data: {
2324        target: "",
2325        selActive: false,
2326        attrItem: "uk-filter-control",
2327        cls: "uk-active",
2328        duration: 250
2329      },
2330      computed: {
2331        children: ({ target }, $el) => $$(`${target} > *`, $el),
2332        toggles: ({ attrItem }, $el) => $$(`[${attrItem}],[data-${attrItem}]`, $el)
2333      },
2334      watch: {
2335        toggles(toggles) {
2336          this.updateState();
2337          const actives = $$(this.selActive, this.$el);
2338          for (const toggle of toggles) {
2339            if (this.selActive !== false) {
2340              toggleClass(toggle, this.cls, includes(actives, toggle));
2341            }
2342            const button = findButton(toggle);
2343            if (isTag(button, "a")) {
2344              attr(button, "role", "button");
2345            }
2346          }
2347        },
2348        children(list, prev) {
2349          if (prev) {
2350            this.updateState();
2351          }
2352        }
2353      },
2354      events: {
2355        name: "click keydown",
2356        delegate() {
2357          return `[${this.attrItem}],[data-${this.attrItem}]`;
2358        },
2359        handler(e) {
2360          if (e.type === "keydown" && e.keyCode !== keyMap.SPACE) {
2361            return;
2362          }
2363          if (e.target.closest("a,button")) {
2364            e.preventDefault();
2365            this.apply(e.current);
2366          }
2367        }
2368      },
2369      methods: {
2370        apply(el) {
2371          const prevState = this.getState();
2372          const newState = mergeState(el, this.attrItem, this.getState());
2373          if (!isEqualState(prevState, newState)) {
2374            this.setState(newState);
2375          }
2376        },
2377        getState() {
2378          return this.toggles.filter((item) => hasClass(item, this.cls)).reduce((state, el) => mergeState(el, this.attrItem, state), {
2379            filter: { "": "" },
2380            sort: []
2381          });
2382        },
2383        async setState(state, animate = true) {
2384          state = { filter: { "": "" }, sort: [], ...state };
2385          trigger(this.$el, "beforeFilter", [this, state]);
2386          for (const toggle of this.toggles) {
2387            toggleClass(toggle, this.cls, matchFilter(toggle, this.attrItem, state));
2388          }
2389          await Promise.all(
2390            $$(this.target, this.$el).map((target) => {
2391              const filterFn = () => applyState(state, target, children(target));
2392              return animate ? this.animate(filterFn, target) : filterFn();
2393            })
2394          );
2395          trigger(this.$el, "afterFilter", [this]);
2396        },
2397        updateState() {
2398          fastdom.write(() => this.setState(this.getState(), false));
2399        }
2400      }
2401    };
2402    function getFilter(el, attr2) {
2403      return parseOptions(data(el, attr2), ["filter"]);
2404    }
2405    function isEqualState(stateA, stateB) {
2406      return ["filter", "sort"].every((prop) => isEqual(stateA[prop], stateB[prop]));
2407    }
2408    function applyState(state, target, children) {
2409      const selector = getSelector(state);
2410      for (const el of children) {
2411        css(el, "display", selector && !matches(el, selector) ? "none" : "");
2412      }
2413      const [sort, order] = state.sort;
2414      if (sort) {
2415        const sorted = sortItems(children, sort, order);
2416        if (!isEqual(sorted, children)) {
2417          append(target, sorted);
2418        }
2419      }
2420    }
2421    function mergeState(el, attr2, state) {
2422      const { filter, group, sort, order = "asc" } = getFilter(el, attr2);
2423      if (filter || isUndefined(sort)) {
2424        if (group) {
2425          if (filter) {
2426            delete state.filter[""];
2427            state.filter[group] = filter;
2428          } else {
2429            delete state.filter[group];
2430            if (isEmpty(state.filter) || "" in state.filter) {
2431              state.filter = { "": filter || "" };
2432            }
2433          }
2434        } else {
2435          state.filter = { "": filter || "" };
2436        }
2437      }
2438      if (!isUndefined(sort)) {
2439        state.sort = [sort, order];
2440      }
2441      return state;
2442    }
2443    function matchFilter(el, attr2, { filter: stateFilter = { "": "" }, sort: [stateSort, stateOrder] }) {
2444      const { filter = "", group = "", sort, order = "asc" } = getFilter(el, attr2);
2445      return isUndefined(sort) ? group in stateFilter && filter === stateFilter[group] || !filter && group && !(group in stateFilter) && !stateFilter[""] : stateSort === sort && stateOrder === order;
2446    }
2447    function getSelector({ filter }) {
2448      let selector = "";
2449      each(filter, (value) => selector += value || "");
2450      return selector;
2451    }
2452    function sortItems(nodes, sort, order) {
2453      return [...nodes].sort(
2454        (a, b) => data(a, sort).localeCompare(data(b, sort), void 0, { numeric: true }) * (order === "asc" || -1)
2455      );
2456    }
2457    function findButton(el) {
2458      return $("a,button", el) || el;
2459    }
2460
2461    let prevented;
2462    function preventBackgroundScroll(el) {
2463      const off = on(el, "touchstart", (e) => {
2464        if (e.targetTouches.length !== 1 || matches(e.target, 'input[type="range"')) {
2465          return;
2466        }
2467        let prev = getEventPos(e).y;
2468        const offMove = on(
2469          el,
2470          "touchmove",
2471          (e2) => {
2472            const pos = getEventPos(e2).y;
2473            if (pos === prev) {
2474              return;
2475            }
2476            prev = pos;
2477            if (!scrollParents(e2.target).some((scrollParent) => {
2478              if (!el.contains(scrollParent)) {
2479                return false;
2480              }
2481              let { scrollHeight, clientHeight } = scrollParent;
2482              return clientHeight < scrollHeight;
2483            })) {
2484              e2.preventDefault();
2485            }
2486          },
2487          { passive: false }
2488        );
2489        once(el, "scroll touchend touchcanel", offMove, { capture: true });
2490      });
2491      if (prevented) {
2492        return off;
2493      }
2494      prevented = true;
2495      const { scrollingElement } = document;
2496      css(scrollingElement, {
2497        overflowY: CSS.supports("overflow", "clip") ? "clip" : "hidden",
2498        touchAction: "none",
2499        paddingRight: width(window) - scrollingElement.clientWidth || ""
2500      });
2501      return () => {
2502        prevented = false;
2503        off();
2504        css(scrollingElement, { overflowY: "", touchAction: "", paddingRight: "" });
2505      };
2506    }
2507
2508    var Container = {
2509      props: {
2510        container: Boolean
2511      },
2512      data: {
2513        container: true
2514      },
2515      computed: {
2516        container({ container }) {
2517          return container === true && this.$container || container && $(container);
2518        }
2519      }
2520    };
2521
2522    var Togglable = {
2523      props: {
2524        cls: Boolean,
2525        animation: "list",
2526        duration: Number,
2527        velocity: Number,
2528        origin: String,
2529        transition: String
2530      },
2531      data: {
2532        cls: false,
2533        animation: [false],
2534        duration: 200,
2535        velocity: 0.2,
2536        origin: false,
2537        transition: "ease",
2538        clsEnter: "uk-togglable-enter",
2539        clsLeave: "uk-togglable-leave"
2540      },
2541      computed: {
2542        hasAnimation: ({ animation }) => !!animation[0],
2543        hasTransition: ({ animation }) => ["slide", "reveal"].some((transition) => startsWith(animation[0], transition))
2544      },
2545      methods: {
2546        async toggleElement(targets, toggle, animate) {
2547          try {
2548            await Promise.all(
2549              toNodes(targets).map((el) => {
2550                const show = isBoolean(toggle) ? toggle : !this.isToggled(el);
2551                if (!trigger(el, `before${show ? "show" : "hide"}`, [this])) {
2552                  return Promise.reject();
2553                }
2554                const promise = (isFunction(animate) ? animate : animate === false || !this.hasAnimation ? toggleInstant : this.hasTransition ? toggleTransition : toggleAnimation)(el, show, this);
2555                const cls = show ? this.clsEnter : this.clsLeave;
2556                addClass(el, cls);
2557                trigger(el, show ? "show" : "hide", [this]);
2558                const done = () => {
2559                  removeClass(el, cls);
2560                  trigger(el, show ? "shown" : "hidden", [this]);
2561                };
2562                return promise ? promise.then(done, () => {
2563                  removeClass(el, cls);
2564                  return Promise.reject();
2565                }) : done();
2566              })
2567            );
2568            return true;
2569          } catch (e) {
2570            return false;
2571          }
2572        },
2573        isToggled(el = this.$el) {
2574          el = toNode(el);
2575          return hasClass(el, this.clsEnter) ? true : hasClass(el, this.clsLeave) ? false : this.cls ? hasClass(el, this.cls.split(" ")[0]) : isVisible(el);
2576        },
2577        _toggle(el, toggled) {
2578          if (!el) {
2579            return;
2580          }
2581          toggled = Boolean(toggled);
2582          let changed;
2583          if (this.cls) {
2584            changed = includes(this.cls, " ") || toggled !== hasClass(el, this.cls);
2585            changed && toggleClass(el, this.cls, includes(this.cls, " ") ? void 0 : toggled);
2586          } else {
2587            changed = toggled === el.hidden;
2588            changed && (el.hidden = !toggled);
2589          }
2590          $$("[autofocus]", el).some((el2) => isVisible(el2) ? el2.focus() || true : el2.blur());
2591          if (changed) {
2592            trigger(el, "toggled", [toggled, this]);
2593          }
2594        }
2595      }
2596    };
2597    function toggleInstant(el, show, { _toggle }) {
2598      Animation.cancel(el);
2599      Transition.cancel(el);
2600      return _toggle(el, show);
2601    }
2602    async function toggleTransition(el, show, { animation, duration, velocity, transition, _toggle }) {
2603      var _a;
2604      const [mode = "reveal", startProp = "top"] = ((_a = animation[0]) == null ? void 0 : _a.split("-")) || [];
2605      const dirs = [
2606        ["left", "right"],
2607        ["top", "bottom"]
2608      ];
2609      const dir = dirs[includes(dirs[0], startProp) ? 0 : 1];
2610      const end = dir[1] === startProp;
2611      const props = ["width", "height"];
2612      const dimProp = props[dirs.indexOf(dir)];
2613      const marginProp = `margin-${dir[0]}`;
2614      const marginStartProp = `margin-${startProp}`;
2615      let currentDim = dimensions$1(el)[dimProp];
2616      const inProgress = Transition.inProgress(el);
2617      await Transition.cancel(el);
2618      if (show) {
2619        _toggle(el, true);
2620      }
2621      const prevProps = Object.fromEntries(
2622        [
2623          "padding",
2624          "border",
2625          "width",
2626          "height",
2627          "minWidth",
2628          "minHeight",
2629          "overflowY",
2630          "overflowX",
2631          marginProp,
2632          marginStartProp
2633        ].map((key) => [key, el.style[key]])
2634      );
2635      const dim = dimensions$1(el);
2636      const currentMargin = toFloat(css(el, marginProp));
2637      const marginStart = toFloat(css(el, marginStartProp));
2638      const endDim = dim[dimProp] + marginStart;
2639      if (!inProgress && !show) {
2640        currentDim += marginStart;
2641      }
2642      const [wrapper] = wrapInner(el, "<div>");
2643      css(wrapper, {
2644        boxSizing: "border-box",
vendor: 4,060 bytes, lines 2645-2789
2645        height: dim.height,
2646        width: dim.width,
2647        ...css(el, [
2648          "overflow",
2649          "padding",
2650          "borderTop",
2651          "borderRight",
2652          "borderBottom",
2653          "borderLeft",
2654          "borderImage",
2655          marginStartProp
2656        ])
2657      });
2658      css(el, {
2659        padding: 0,
2660        border: 0,
2661        minWidth: 0,
2662        minHeight: 0,
2663        [marginStartProp]: 0,
2664        width: dim.width,
2665        height: dim.height,
2666        overflow: "hidden",
2667        [dimProp]: currentDim
2668      });
2669      const percent = currentDim / endDim;
2670      duration = (velocity * endDim + duration) * (show ? 1 - percent : percent);
2671      const endProps = { [dimProp]: show ? endDim : 0 };
2672      if (end) {
2673        css(el, marginProp, endDim - currentDim + currentMargin);
2674        endProps[marginProp] = show ? currentMargin : endDim + currentMargin;
2675      }
2676      if (!end ^ mode === "reveal") {
2677        css(wrapper, marginProp, -endDim + currentDim);
2678        Transition.start(wrapper, { [marginProp]: show ? 0 : -endDim }, duration, transition);
2679      }
2680      try {
2681        await Transition.start(el, endProps, duration, transition);
2682      } finally {
2683        css(el, prevProps);
2684        unwrap(wrapper.firstChild);
2685        if (!show) {
2686          _toggle(el, false);
2687        }
2688      }
2689    }
2690    function toggleAnimation(el, show, cmp) {
2691      const { animation, duration, _toggle } = cmp;
2692      if (show) {
2693        _toggle(el, true);
2694        return Animation.in(el, animation[0], duration, cmp.origin);
2695      }
2696      return Animation.out(el, animation[1] || animation[0], duration, cmp.origin).then(
2697        () => _toggle(el, false)
2698      );
2699    }
2700
2701    const active$1 = [];
2702    var Modal = {
2703      mixins: [Class, Container, Togglable],
2704      props: {
2705        selPanel: String,
2706        selClose: String,
2707        escClose: Boolean,
2708        bgClose: Boolean,
2709        stack: Boolean,
2710        role: String
2711      },
2712      data: {
2713        cls: "uk-open",
2714        escClose: true,
2715        bgClose: true,
2716        overlay: true,
2717        stack: false,
2718        role: "dialog"
2719      },
2720      computed: {
2721        panel: ({ selPanel }, $el) => $(selPanel, $el),
2722        transitionElement() {
2723          return this.panel;
2724        },
2725        bgClose({ bgClose }) {
2726          return bgClose && this.panel;
2727        }
2728      },
2729      connected() {
2730        attr(this.panel || this.$el, "role", this.role);
2731        if (this.overlay) {
2732          attr(this.panel || this.$el, "aria-modal", true);
2733        }
2734      },
2735      beforeDisconnect() {
2736        if (includes(active$1, this)) {
2737          this.toggleElement(this.$el, false, false);
2738        }
2739      },
2740      events: [
2741        {
2742          name: "click",
2743          delegate() {
2744            return `${this.selClose},a[href*="#"]`;
2745          },
2746          handler(e) {
2747            const { current, defaultPrevented } = e;
2748            const { hash } = current;
2749            if (!defaultPrevented && hash && isSameSiteAnchor(current) && !this.$el.contains($(hash))) {
2750              this.hide();
2751            } else if (matches(current, this.selClose)) {
2752              e.preventDefault();
2753              this.hide();
2754            }
2755          }
2756        },
2757        {
2758          name: "toggle",
2759          self: true,
2760          handler(e) {
2761            if (e.defaultPrevented) {
2762              return;
2763            }
2764            e.preventDefault();
2765            if (this.isToggled() === includes(active$1, this)) {
2766              this.toggle();
2767            }
2768          }
2769        },
2770        {
2771          name: "beforeshow",
2772          self: true,
2773          handler(e) {
2774            if (includes(active$1, this)) {
2775              return false;
2776            }
2777            if (!this.stack && active$1.length) {
2778              Promise.all(active$1.map((modal) => modal.hide())).then(this.show);
2779              e.preventDefault();
2780            } else {
2781              active$1.push(this);
2782            }
2783          }
2784        },
2785        {
2786          name: "show",
2787          self: true,
2788          handler() {
2789            if (this.stack) {
2790              css(this.$el, "zIndex", toFloat(css(this.$el, "zIndex")) + active$1.length);
2791            }
2792            const handlers = [
2793              this.overlay && preventBackgroundFocus(this),
2794              this.overlay && preventBackgroundScroll(this.$el),
2795              this.bgClose && listenForBackgroundClose$1(this),
2796              this.escClose && listenForEscClose$1(this)
2797            ];
2798            once(
2799              this.$el,
2800              "hidden",
2801              () => handlers.forEach((handler) => handler && handler()),
2802              { self: true }
2803            );
2804            addClass(document.documentElement, this.clsPage);
2805          }
2806        },
2807        {
2808          name: "shown",
2809          self: true,
2810          handler() {
2811            if (!isFocusable(this.$el)) {
2812              attr(this.$el, "tabindex", "-1");
2813            }
2814            if (!matches(this.$el, ":focus-within")) {
2815              this.$el.focus();
2816            }
2817          }
2818        },
2819        {
2820          name: "hidden",
2821          self: true,
2822          handler() {
2823            if (includes(active$1, this)) {
2824              active$1.splice(active$1.indexOf(this), 1);
2825            }
2826            css(this.$el, "zIndex", "");
2827            if (!active$1.some((modal) => modal.clsPage === this.clsPage)) {
2828              removeClass(document.documentElement, this.clsPage);
2829            }
2830          }
2831        }
2832      ],
2833      methods: {
2834        toggle() {
2835          return this.isToggled() ? this.hide() : this.show();
2836        },
2837        show() {
2838          if (this.container && parent(this.$el) !== this.container) {
2839            append(this.container, this.$el);
2840            return new Promise(
2841              (resolve) => requestAnimationFrame(() => this.show().then(resolve))
2842            );
2843          }
2844          return this.toggleElement(this.$el, true, animate$1);
2845        },
2846        hide() {
2847          return this.toggleElement(this.$el, false, animate$1);
2848        }
2849      }
2850    };
2851    function animate$1(el, show, { transitionElement, _toggle }) {
2852      return new Promise(
2853        (resolve, reject) => once(el, "show hide", () => {
2854          var _a;
2855          (_a = el._reject) == null ? void 0 : _a.call(el);
2856          el._reject = reject;
2857          _toggle(el, show);
2858          const off = once(
2859            transitionElement,
2860            "transitionstart",
2861            () => {
2862              once(transitionElement, "transitionend transitioncancel", resolve, {
2863                self: true
2864              });
2865              clearTimeout(timer);
2866            },
2867            { self: true }
2868          );
2869          const timer = setTimeout(
2870            () => {
2871              off();
2872              resolve();
2873            },
2874            toMs(css(transitionElement, "transitionDuration"))
2875          );
2876        })
2877      ).then(() => delete el._reject);
2878    }
2879    function toMs(time) {
2880      return time ? endsWith(time, "ms") ? toFloat(time) : toFloat(time) * 1e3 : 0;
2881    }
2882    function preventBackgroundFocus(modal) {
2883      return on(document, "focusin", (e) => {
2884        if (last(active$1) === modal && !modal.$el.contains(e.target)) {
2885          modal.$el.focus();
2886        }
2887      });
2888    }
vendor: 18,995 bytes, lines 2889-3452
2889    function listenForBackgroundClose$1(modal) {
2890      return on(document, pointerDown$1, ({ target }) => {
2891        if (last(active$1) !== modal || modal.overlay && !modal.$el.contains(target) || modal.panel.contains(target)) {
2892          return;
2893        }
2894        once(
2895          document,
2896          `${pointerUp$1} ${pointerCancel} scroll`,
2897          ({ defaultPrevented, type, target: newTarget }) => {
2898            if (!defaultPrevented && type === pointerUp$1 && target === newTarget) {
2899              modal.hide();
2900            }
2901          },
2902          true
2903        );
2904      });
2905    }
2906    function listenForEscClose$1(modal) {
2907      return on(document, "keydown", (e) => {
2908        if (e.keyCode === 27 && last(active$1) === modal) {
2909          modal.hide();
2910        }
2911      });
2912    }
2913
2914    var Animations$2 = {
2915      slide: {
2916        show(dir) {
2917          return [{ transform: translate(dir * -100) }, { transform: translate() }];
2918        },
2919        percent(current) {
2920          return translated(current);
2921        },
2922        translate(percent, dir) {
2923          return [
2924            { transform: translate(dir * -100 * percent) },
2925            { transform: translate(dir * 100 * (1 - percent)) }
2926          ];
2927        }
2928      }
2929    };
2930    function translated(el) {
2931      return Math.abs(css(el, "transform").split(",")[4] / el.offsetWidth);
2932    }
2933    function translate(value = 0, unit = "%") {
2934      value += value ? unit : "";
2935      return `translate3d(${value}, 0, 0)`;
2936    }
2937    function scale3d(value) {
2938      return `scale3d(${value}, ${value}, 1)`;
2939    }
2940
2941    function Transitioner$1(prev, next, dir, { animation, easing }) {
2942      const { percent, translate, show = noop } = animation;
2943      const props = show(dir);
2944      let resolve;
2945      return {
2946        dir,
2947        show(duration, percent2 = 0, linear) {
2948          const timing = linear ? "linear" : easing;
2949          duration -= Math.round(duration * clamp(percent2, -1, 1));
2950          this.translate(percent2);
2951          triggerUpdate$1(next, "itemin", { percent: percent2, duration, timing, dir });
2952          triggerUpdate$1(prev, "itemout", { percent: 1 - percent2, duration, timing, dir });
2953          return new Promise((res) => {
2954            resolve || (resolve = res);
2955            Promise.all([
2956              Transition.start(next, props[1], duration, timing),
2957              Transition.start(prev, props[0], duration, timing)
2958            ]).then(() => {
2959              this.reset();
2960              resolve();
2961            }, noop);
2962          });
2963        },
2964        cancel() {
2965          return Transition.cancel([next, prev]);
2966        },
2967        reset() {
2968          for (const prop in props[0]) {
2969            css([next, prev], prop, "");
2970          }
2971        },
2972        async forward(duration, percent2 = this.percent()) {
2973          await this.cancel();
2974          return this.show(duration, percent2, true);
2975        },
2976        translate(percent2) {
2977          this.reset();
2978          const props2 = translate(percent2, dir);
2979          css(next, props2[1]);
2980          css(prev, props2[0]);
2981          triggerUpdate$1(next, "itemtranslatein", { percent: percent2, dir });
2982          triggerUpdate$1(prev, "itemtranslateout", { percent: 1 - percent2, dir });
2983        },
2984        percent() {
2985          return percent(prev || next, next, dir);
2986        },
2987        getDistance() {
2988          return prev == null ? void 0 : prev.offsetWidth;
2989        }
2990      };
2991    }
2992    function triggerUpdate$1(el, type, data) {
2993      trigger(el, createEvent(type, false, false, data));
2994    }
2995
2996    var I18n = {
2997      props: {
2998        i18n: Object
2999      },
3000      data: {
3001        i18n: null
3002      },
3003      methods: {
3004        t(key, ...params) {
3005          var _a, _b, _c;
3006          let i = 0;
3007          return ((_c = ((_a = this.i18n) == null ? void 0 : _a[key]) || ((_b = this.$options.i18n) == null ? void 0 : _b[key])) == null ? void 0 : _c.replace(
3008            /%s/g,
3009            () => params[i++] || ""
3010          )) || "";
3011        }
3012      }
3013    };
3014
3015    var SliderAutoplay = {
3016      props: {
3017        autoplay: Boolean,
3018        autoplayInterval: Number,
3019        pauseOnHover: Boolean
3020      },
3021      data: {
3022        autoplay: false,
3023        autoplayInterval: 7e3,
3024        pauseOnHover: true
3025      },
3026      connected() {
3027        attr(this.list, "aria-live", this.autoplay ? "off" : "polite");
3028        this.autoplay && this.startAutoplay();
3029      },
3030      disconnected() {
3031        this.stopAutoplay();
3032      },
3033      update() {
3034        attr(this.slides, "tabindex", "-1");
3035      },
3036      events: [
3037        {
3038          name: "visibilitychange",
3039          el: () => document,
3040          filter() {
3041            return this.autoplay;
3042          },
3043          handler() {
3044            if (document.hidden) {
3045              this.stopAutoplay();
3046            } else {
3047              this.startAutoplay();
3048            }
3049          }
3050        }
3051      ],
3052      methods: {
3053        startAutoplay() {
3054          this.stopAutoplay();
3055          this.interval = setInterval(() => {
3056            if (!(this.stack.length || this.draggable && matches(this.$el, ":focus-within") && !matches(this.$el, ":focus") || this.pauseOnHover && matches(this.$el, ":hover"))) {
3057              this.show("next");
3058            }
3059          }, this.autoplayInterval);
3060        },
3061        stopAutoplay() {
3062          clearInterval(this.interval);
3063        }
3064      }
3065    };
3066
3067    const pointerOptions = { passive: false, capture: true };
3068    const pointerUpOptions = { passive: true, capture: true };
3069    const pointerDown = "touchstart mousedown";
3070    const pointerMove = "touchmove mousemove";
3071    const pointerUp = "touchend touchcancel mouseup click input scroll";
3072    const preventClick = (e) => e.preventDefault();
3073    var SliderDrag = {
3074      props: {
3075        draggable: Boolean
3076      },
3077      data: {
3078        draggable: true,
3079        threshold: 10
3080      },
3081      created() {
3082        for (const key of ["start", "move", "end"]) {
3083          const fn = this[key];
3084          this[key] = (e) => {
3085            const pos = getEventPos(e).x * (isRtl ? -1 : 1);
3086            this.prevPos = pos === this.pos ? this.prevPos : this.pos;
3087            this.pos = pos;
3088            fn(e);
3089          };
3090        }
3091      },
3092      events: [
3093        {
3094          name: pointerDown,
3095          passive: true,
3096          delegate() {
3097            return `${this.selList} > *`;
3098          },
3099          handler(e) {
3100            if (!this.draggable || this.parallax || !isTouch(e) && hasSelectableText(e.target) || e.target.closest(selInput) || e.button > 0 || this.length < 2) {
3101              return;
3102            }
3103            this.start(e);
3104          }
3105        },
3106        {
3107          name: "dragstart",
3108          handler(e) {
3109            e.preventDefault();
3110          }
3111        },
3112        {
3113          // iOS workaround for slider stopping if swiping fast
3114          name: pointerMove,
3115          el() {
3116            return this.list;
3117          },
3118          handler: noop,
3119          ...pointerOptions
3120        }
3121      ],
3122      methods: {
3123        start() {
3124          this.drag = this.pos;
3125          if (this._transitioner) {
3126            this.percent = this._transitioner.percent();
3127            this.drag += this._transitioner.getDistance() * this.percent * this.dir;
3128            this._transitioner.cancel();
3129            this._transitioner.translate(this.percent);
3130            this.dragging = true;
3131            this.stack = [];
3132          } else {
3133            this.prevIndex = this.index;
3134          }
3135          on(document, pointerMove, this.move, pointerOptions);
3136          on(document, pointerUp, this.end, pointerUpOptions);
3137          css(this.list, "userSelect", "none");
3138        },
3139        move(e) {
3140          const distance = this.pos - this.drag;
3141          if (distance === 0 || this.prevPos === this.pos || !this.dragging && Math.abs(distance) < this.threshold) {
3142            return;
3143          }
3144          if (!this.dragging) {
3145            on(this.list, "click", preventClick, pointerOptions);
3146          }
3147          e.cancelable && e.preventDefault();
3148          this.dragging = true;
3149          this.dir = distance < 0 ? 1 : -1;
3150          let { slides, prevIndex } = this;
3151          let dis = Math.abs(distance);
3152          let nextIndex = this.getIndex(prevIndex + this.dir);
3153          let width = getDistance.call(this, prevIndex, nextIndex);
3154          while (nextIndex !== prevIndex && dis > width) {
3155            this.drag -= width * this.dir;
3156            prevIndex = nextIndex;
3157            dis -= width;
3158            nextIndex = this.getIndex(prevIndex + this.dir);
3159            width = getDistance.call(this, prevIndex, nextIndex);
3160          }
3161          this.percent = dis / width;
3162          const prev = slides[prevIndex];
3163          const next = slides[nextIndex];
3164          const changed = this.index !== nextIndex;
3165          const edge = prevIndex === nextIndex;
3166          let itemShown;
3167          for (const i of [this.index, this.prevIndex]) {
3168            if (!includes([nextIndex, prevIndex], i)) {
3169              trigger(slides[i], "itemhidden", [this]);
3170              if (edge) {
3171                itemShown = true;
3172                this.prevIndex = prevIndex;
3173              }
3174            }
3175          }
3176          if (this.index === prevIndex && this.prevIndex !== prevIndex || itemShown) {
3177            trigger(slides[this.index], "itemshown", [this]);
3178          }
3179          if (changed) {
3180            this.prevIndex = prevIndex;
3181            this.index = nextIndex;
3182            if (!edge) {
3183              trigger(prev, "beforeitemhide", [this]);
3184              trigger(prev, "itemhide", [this]);
3185            }
3186            trigger(next, "beforeitemshow", [this]);
3187            trigger(next, "itemshow", [this]);
3188          }
3189          this._transitioner = this._translate(Math.abs(this.percent), prev, !edge && next);
3190        },
3191        end() {
3192          off(document, pointerMove, this.move, pointerOptions);
3193          off(document, pointerUp, this.end, pointerUpOptions);
3194          if (this.dragging) {
3195            this.dragging = null;
3196            if (this.index === this.prevIndex) {
3197              this.percent = 1 - this.percent;
3198              this.dir *= -1;
3199              this._show(false, this.index, true);
3200              this._transitioner = null;
3201            } else {
3202              const dirChange = (isRtl ? this.dir * (isRtl ? 1 : -1) : this.dir) < 0 === this.prevPos > this.pos;
3203              this.index = dirChange ? this.index : this.prevIndex;
3204              if (dirChange) {
3205                this.percent = 1 - this.percent;
3206              }
3207              this.show(
3208                this.dir > 0 && !dirChange || this.dir < 0 && dirChange ? "next" : "previous",
3209                true
3210              );
3211            }
3212          }
3213          setTimeout(() => off(this.list, "click", preventClick, pointerOptions));
3214          css(this.list, { userSelect: "" });
3215          this.drag = this.percent = null;
3216        }
3217      }
3218    };
3219    function getDistance(prev, next) {
3220      return this._getTransitioner(prev, prev !== next && next).getDistance() || this.slides[prev].offsetWidth;
3221    }
3222    function hasSelectableText(el) {
3223      return css(el, "userSelect") !== "none" && toArray(el.childNodes).some((el2) => el2.nodeType === 3 && el2.textContent.trim());
3224    }
3225
3226    function initWatches(instance) {
3227      instance._watches = [];
3228      for (const watches of instance.$options.watch || []) {
3229        for (const [name, watch] of Object.entries(watches)) {
3230          registerWatch(instance, watch, name);
3231        }
3232      }
3233      instance._initial = true;
3234    }
3235    function registerWatch(instance, watch, name) {
3236      instance._watches.push({
3237        name,
3238        ...isPlainObject(watch) ? watch : { handler: watch }
3239      });
3240    }
3241    function runWatches(instance, values) {
3242      for (const { name, handler, immediate = true } of instance._watches) {
3243        if (instance._initial && immediate || hasOwn(values, name) && !isEqual(values[name], instance[name])) {
3244          handler.call(instance, instance[name], values[name]);
3245        }
3246      }
3247      instance._initial = false;
3248    }
3249
3250    function initComputed(instance) {
3251      const { computed } = instance.$options;
3252      instance._computed = {};
3253      if (computed) {
3254        for (const key in computed) {
3255          registerComputed(instance, key, computed[key]);
3256        }
3257      }
3258    }
3259    const mutationOptions = { subtree: true, childList: true };
3260    function registerComputed(instance, key, cb) {
3261      instance._hasComputed = true;
3262      Object.defineProperty(instance, key, {
3263        enumerable: true,
3264        get() {
3265          const { _computed, $props, $el } = instance;
3266          if (!hasOwn(_computed, key)) {
3267            _computed[key] = (cb.get || cb).call(instance, $props, $el);
3268            if (cb.observe && instance._computedObserver) {
3269              const selector = cb.observe.call(instance, $props);
3270              instance._computedObserver.observe(
3271                ["~", "+", "-"].includes(selector[0]) ? $el.parentElement : $el.getRootNode(),
3272                mutationOptions
3273              );
3274            }
3275          }
3276          return _computed[key];
3277        },
3278        set(value) {
3279          const { _computed } = instance;
3280          _computed[key] = cb.set ? cb.set.call(instance, value) : value;
3281          if (isUndefined(_computed[key])) {
3282            delete _computed[key];
3283          }
3284        }
3285      });
3286    }
3287    function initComputedUpdates(instance) {
3288      if (!instance._hasComputed) {
3289        return;
3290      }
3291      prependUpdate(instance, {
3292        read: () => runWatches(instance, resetComputed(instance)),
3293        events: ["resize", "computed"]
3294      });
3295      instance._computedObserver = observeMutation(
3296        instance.$el,
3297        () => callUpdate(instance, "computed"),
3298        mutationOptions
3299      );
3300    }
3301    function disconnectComputedUpdates(instance) {
3302      var _a;
3303      (_a = instance._computedObserver) == null ? void 0 : _a.disconnect();
3304      delete instance._computedObserver;
3305      resetComputed(instance);
3306    }
3307    function resetComputed(instance) {
3308      const values = { ...instance._computed };
3309      instance._computed = {};
3310      return values;
3311    }
3312
3313    function initEvents(instance) {
3314      instance._events = [];
3315      for (const event of instance.$options.events || []) {
3316        if (hasOwn(event, "handler")) {
3317          registerEvent(instance, event);
3318        } else {
3319          for (const key in event) {
3320            registerEvent(instance, event[key], key);
3321          }
3322        }
3323      }
3324    }
3325    function unbindEvents(instance) {
3326      instance._events.forEach((unbind) => unbind());
3327      delete instance._events;
3328    }
3329    function registerEvent(instance, event, key) {
3330      let { name, el, handler, capture, passive, delegate, filter, self } = isPlainObject(event) ? event : { name: key, handler: event };
3331      el = isFunction(el) ? el.call(instance, instance) : el || instance.$el;
3332      if (!el || isArray(el) && !el.length || filter && !filter.call(instance)) {
3333        return;
3334      }
3335      instance._events.push(
3336        on(
3337          el,
3338          name,
3339          delegate ? isString(delegate) ? delegate : delegate.call(instance, instance) : null,
3340          isString(handler) ? instance[handler] : handler.bind(instance),
3341          { passive, capture, self }
3342        )
3343      );
3344    }
3345
3346    function initObservers(instance) {
3347      instance._observers = [];
3348      for (const observer of instance.$options.observe || []) {
3349        registerObservable(instance, observer);
3350      }
3351    }
3352    function registerObserver(instance, ...observer) {
3353      instance._observers.push(...observer);
3354    }
3355    function disconnectObservers(instance) {
3356      for (const observer of instance._observers) {
3357        observer.disconnect();
3358      }
3359    }
3360    function registerObservable(instance, observable) {
3361      let { observe, target = instance.$el, handler, options, filter, args } = observable;
3362      if (filter && !filter.call(instance, instance)) {
3363        return;
3364      }
3365      const key = `_observe${instance._observers.length}`;
3366      if (isFunction(target) && !hasOwn(instance, key)) {
3367        registerComputed(instance, key, () => target.call(instance, instance));
3368      }
3369      handler = isString(handler) ? instance[handler] : handler.bind(instance);
3370      if (isFunction(options)) {
3371        options = options.call(instance, instance);
3372      }
3373      const targets = hasOwn(instance, key) ? instance[key] : target;
3374      const observer = observe(targets, handler, options, args);
3375      if (isFunction(target) && isArray(instance[key])) {
3376        registerWatch(
3377          instance,
3378          { handler: updateTargets(observer, options), immediate: false },
3379          key
3380        );
3381      }
3382      registerObserver(instance, observer);
3383    }
3384    function updateTargets(observer, options) {
3385      return (targets, prev) => {
3386        for (const target of prev) {
3387          if (!includes(targets, target)) {
3388            if (observer.unobserve) {
3389              observer.unobserve(target);
3390            } else if (observer.observe) {
3391              observer.disconnect();
3392            }
3393          }
3394        }
3395        for (const target of targets) {
3396          if (!includes(prev, target) || !observer.unobserve) {
3397            observer.observe(target, options);
3398          }
3399        }
3400      };
3401    }
3402
3403    function initProps(instance) {
3404      const { $options, $props } = instance;
3405      const props = getProps($options);
3406      assign($props, props);
3407      const { computed, methods } = $options;
3408      for (let key in $props) {
3409        if (key in props && (!computed || !hasOwn(computed, key)) && (!methods || !hasOwn(methods, key))) {
3410          instance[key] = $props[key];
3411        }
3412      }
3413    }
3414    function getProps(opts) {
3415      const data$1 = {};
3416      const { args = [], props = {}, el, id } = opts;
3417      if (!props) {
3418        return data$1;
3419      }
3420      for (const key in props) {
3421        const prop = hyphenate(key);
3422        let value = data(el, prop);
3423        if (isUndefined(value)) {
3424          continue;
3425        }
3426        value = props[key] === Boolean && value === "" ? true : coerce$1(props[key], value);
3427        if (prop === "target" && startsWith(value, "_")) {
3428          continue;
3429        }
3430        data$1[key] = value;
3431      }
3432      const options = parseOptions(data(el, id), args);
3433      for (const key in options) {
3434        const prop = camelize(key);
3435        if (!isUndefined(props[prop])) {
3436          data$1[prop] = coerce$1(props[prop], options[key]);
3437        }
3438      }
3439      return data$1;
3440    }
3441    const getAttributes = memoize((id, props) => {
3442      const attributes = Object.keys(props);
3443      const filter = attributes.concat(id).map((key) => [hyphenate(key), `data-${hyphenate(key)}`]).flat();
3444      return { attributes, filter };
3445    });
3446    function initPropsObserver(instance) {
3447      const { $options, $props } = instance;
3448      const { id, props, el } = $options;
3449      if (!props) {
3450        return;
3451      }
3452      const { attributes, filter } = getAttributes(id, props);
vendor: 5,879 bytes, lines 3453-3635
3453      const observer = new MutationObserver((records) => {
3454        const data = getProps($options);
3455        if (records.some(({ attributeName }) => {
3456          const prop = attributeName.replace("data-", "");
3457          return (prop === id ? attributes : [camelize(prop), camelize(attributeName)]).some(
3458            (prop2) => !isUndefined(data[prop2]) && data[prop2] !== $props[prop2]
3459          );
3460        })) {
3461          instance.$reset();
3462        }
3463      });
3464      observer.observe(el, {
3465        attributes: true,
3466        attributeFilter: filter
3467      });
3468      registerObserver(instance, observer);
3469    }
3470
3471    function callHook(instance, hook) {
3472      var _a;
3473      (_a = instance.$options[hook]) == null ? void 0 : _a.forEach((handler) => handler.call(instance));
3474    }
3475    function callConnected(instance) {
3476      if (instance._connected) {
3477        return;
3478      }
3479      initProps(instance);
3480      callHook(instance, "beforeConnect");
3481      instance._connected = true;
3482      initEvents(instance);
3483      initUpdates(instance);
3484      initWatches(instance);
3485      initObservers(instance);
3486      initPropsObserver(instance);
3487      initComputedUpdates(instance);
3488      callHook(instance, "connected");
3489      callUpdate(instance);
3490    }
3491    function callDisconnected(instance) {
3492      if (!instance._connected) {
3493        return;
3494      }
3495      callHook(instance, "beforeDisconnect");
3496      unbindEvents(instance);
3497      clearUpdateData(instance);
3498      disconnectObservers(instance);
3499      disconnectComputedUpdates(instance);
3500      callHook(instance, "disconnected");
3501      instance._connected = false;
3502    }
3503
3504    let uid = 0;
3505    function init$1(instance, options = {}) {
3506      options.data = normalizeData(options, instance.constructor.options);
3507      instance.$options = mergeOptions(instance.constructor.options, options, instance);
3508      instance.$props = {};
3509      instance._uid = uid++;
3510      initData(instance);
3511      initMethods(instance);
3512      initComputed(instance);
3513      callHook(instance, "created");
3514      if (options.el) {
3515        instance.$mount(options.el);
3516      }
3517    }
3518    function initData(instance) {
3519      const { data = {} } = instance.$options;
3520      for (const key in data) {
3521        instance.$props[key] = instance[key] = data[key];
3522      }
3523    }
3524    function initMethods(instance) {
3525      const { methods } = instance.$options;
3526      if (methods) {
3527        for (const key in methods) {
3528          instance[key] = methods[key].bind(instance);
3529        }
3530      }
3531    }
3532    function normalizeData({ data = {} }, { args = [], props = {} }) {
3533      if (isArray(data)) {
3534        data = data.slice(0, args.length).reduce((data2, value, index) => {
3535          if (isPlainObject(value)) {
3536            assign(data2, value);
3537          } else {
3538            data2[args[index]] = value;
3539          }
3540          return data2;
3541        }, {});
3542      }
3543      for (const key in data) {
3544        if (isUndefined(data[key])) {
3545          delete data[key];
3546        } else if (props[key]) {
3547          data[key] = coerce$1(props[key], data[key]);
3548        }
3549      }
3550      return data;
3551    }
3552
3553    const App = function(options) {
3554      init$1(this, options);
3555    };
3556    App.util = util;
3557    App.options = {};
3558    App.version = "3.20.8";
3559
3560    const PREFIX = "uk-";
3561    const DATA = "__uikit__";
3562    const components$2 = {};
3563    function component(name, options) {
3564      var _a, _b;
3565      const id = PREFIX + hyphenate(name);
3566      if (!options) {
3567        if (!components$2[id].options) {
3568          components$2[id] = App.extend(components$2[id]);
3569        }
3570        return components$2[id];
3571      }
3572      name = camelize(name);
3573      App[name] = (element, data) => createComponent(name, element, data);
3574      const opt = (_a = options.options) != null ? _a : { ...options };
3575      opt.id = id;
3576      opt.name = name;
3577      (_b = opt.install) == null ? void 0 : _b.call(opt, App, opt, name);
3578      if (App._initialized && !opt.functional) {
3579        requestAnimationFrame(() => createComponent(name, `[${id}],[data-${id}]`));
3580      }
3581      return components$2[id] = opt;
3582    }
3583    function createComponent(name, element, data, ...args) {
3584      const Component = component(name);
3585      return Component.options.functional ? new Component({ data: isPlainObject(element) ? element : [element, data, ...args] }) : element ? findAll(element).map(init)[0] : init();
3586      function init(element2) {
3587        const instance = getComponent(element2, name);
3588        if (instance) {
3589          if (data) {
3590            instance.$destroy();
3591          } else {
3592            return instance;
3593          }
3594        }
3595        return new Component({ el: element2, data });
3596      }
3597    }
3598    function getComponents(element) {
3599      return (element == null ? void 0 : element[DATA]) || {};
3600    }
3601    function getComponent(element, name) {
3602      return getComponents(element)[name];
3603    }
3604    function attachToElement(element, instance) {
3605      if (!element[DATA]) {
3606        element[DATA] = {};
3607      }
3608      element[DATA][instance.$options.name] = instance;
3609    }
3610    function detachFromElement(element, instance) {
3611      var _a;
3612      (_a = element[DATA]) == null ? true : delete _a[instance.$options.name];
3613      if (!isEmpty(element[DATA])) {
3614        delete element[DATA];
3615      }
3616    }
3617
3618    function globalApi(App) {
3619      App.component = component;
3620      App.getComponents = getComponents;
3621      App.getComponent = getComponent;
3622      App.update = update;
3623      App.use = function(plugin) {
3624        if (plugin.installed) {
3625          return;
3626        }
3627        plugin.call(null, this);
3628        plugin.installed = true;
3629        return this;
3630      };
3631      App.mixin = function(mixin, component2) {
3632        component2 = (isString(component2) ? this.component(component2) : component2) || this;
3633        component2.options = mergeOptions(component2.options, mixin);
3634      };
3635      App.extend = function(options) {
vendor: 4,232 bytes, lines 3636-3777
3636        options || (options = {});
3637        const Super = this;
3638        const Sub = function UIkitComponent(options2) {
3639          init$1(this, options2);
3640        };
3641        Sub.prototype = Object.create(Super.prototype);
3642        Sub.prototype.constructor = Sub;
3643        Sub.options = mergeOptions(Super.options, options);
3644        Sub.super = Super;
3645        Sub.extend = Super.extend;
3646        return Sub;
3647      };
3648      let container;
3649      Object.defineProperty(App, "container", {
3650        get() {
3651          return container || document.body;
3652        },
3653        set(element) {
3654          container = $(element);
3655        }
3656      });
3657    }
3658    function update(element, e) {
3659      element = element ? toNode(element) : document.body;
3660      for (const parentEl of parents(element).reverse()) {
3661        updateElement(parentEl, e);
3662      }
3663      apply(element, (element2) => updateElement(element2, e));
3664    }
3665    function updateElement(element, e) {
3666      const components = getComponents(element);
3667      for (const name in components) {
3668        callUpdate(components[name], e);
3669      }
3670    }
3671
3672    function instanceApi(App) {
3673      App.prototype.$mount = function(el) {
3674        const instance = this;
3675        attachToElement(el, instance);
3676        instance.$options.el = el;
3677        if (document.contains(el)) {
3678          callConnected(instance);
3679        }
3680      };
3681      App.prototype.$destroy = function(removeEl = false) {
3682        const instance = this;
3683        const { el } = instance.$options;
3684        if (el) {
3685          callDisconnected(instance);
3686        }
3687        callHook(instance, "destroy");
3688        detachFromElement(el, instance);
3689        if (removeEl) {
3690          remove$1(instance.$el);
3691        }
3692      };
3693      App.prototype.$create = createComponent;
3694      App.prototype.$emit = function(e) {
3695        callUpdate(this, e);
3696      };
3697      App.prototype.$update = function(element = this.$el, e) {
3698        update(element, e);
3699      };
3700      App.prototype.$reset = function() {
3701        callDisconnected(this);
3702        callConnected(this);
3703      };
3704      App.prototype.$getComponent = getComponent;
3705      Object.defineProperties(App.prototype, {
3706        $el: {
3707          get() {
3708            return this.$options.el;
3709          }
3710        },
3711        $container: Object.getOwnPropertyDescriptor(App, "container")
3712      });
3713    }
3714    let id = 1;
3715    function generateId(instance, el = null) {
3716      return (el == null ? void 0 : el.id) || `${instance.$options.id}-${id++}`;
3717    }
3718
3719    var SliderNav = {
3720      i18n: {
3721        next: "Next slide",
3722        previous: "Previous slide",
3723        slideX: "Slide %s",
3724        slideLabel: "%s of %s",
3725        role: "String"
3726      },
3727      data: {
3728        selNav: false,
3729        role: "region"
3730      },
3731      computed: {
3732        nav: ({ selNav }, $el) => $(selNav, $el),
3733        navChildren() {
3734          return children(this.nav);
3735        },
3736        selNavItem: ({ attrItem }) => `[${attrItem}],[data-${attrItem}]`,
3737        navItems(_, $el) {
3738          return $$(this.selNavItem, $el);
3739        }
3740      },
3741      watch: {
3742        nav(nav, prev) {
3743          attr(nav, "role", "tablist");
3744          if (prev) {
3745            this.$emit();
3746          }
3747        },
3748        list(list) {
3749          if (isTag(list, "ul")) {
3750            attr(list, "role", "presentation");
3751          }
3752        },
3753        navChildren(children2) {
3754          attr(children2, "role", "presentation");
3755        },
3756        navItems(items) {
3757          for (const el of items) {
3758            const cmd = data(el, this.attrItem);
3759            const button = $("a,button", el) || el;
3760            let ariaLabel;
3761            let ariaControls = null;
3762            if (isNumeric(cmd)) {
3763              const item = toNumber(cmd);
3764              const slide = this.slides[item];
3765              if (slide) {
3766                if (!slide.id) {
3767                  slide.id = generateId(this, slide);
3768                }
3769                ariaControls = slide.id;
3770              }
3771              ariaLabel = this.t("slideX", toFloat(cmd) + 1);
3772              attr(button, "role", "tab");
3773            } else {
3774              if (this.list) {
3775                if (!this.list.id) {
3776                  this.list.id = generateId(this, this.list);
3777                }
3778                ariaControls = this.list.id;
3779              }
3780              ariaLabel = this.t(cmd);
3781            }
3782            attr(button, {
3783              "aria-controls": ariaControls,
3784              "aria-label": attr(button, "aria-label") || ariaLabel
3785            });
3786          }
3787        },
3788        slides(slides) {
3789          slides.forEach(
3790            (slide, i) => attr(slide, {
3791              role: this.nav ? "tabpanel" : "group",
3792              "aria-label": this.t("slideLabel", i + 1, this.length),
3793              "aria-roledescription": this.nav ? null : "slide"
3794            })
3795          );
3796        },
3797        length(length) {
3798          const navLength = this.navChildren.length;
3799          if (this.nav && length !== navLength) {
3800            empty(this.nav);
3801            for (let i = 0; i < length; i++) {
3802              append(this.nav, `<li ${this.attrItem}="${i}"><a href></a></li>`);
3803            }
3804          }
3805        }
3806      },
3807      connected() {
3808        attr(this.$el, {
3809          role: this.role,
3810          "aria-roledescription": "carousel"
3811        });
3812      },
3813      update: [
3814        {
3815          write() {
3816            this.navItems.concat(this.nav).forEach((el) => el && (el.hidden = !this.maxIndex));
3817            this.updateNav();
3818          },
3819          events: ["resize"]
3820        }
3821      ],
3822      events: [
3823        {
3824          name: "click keydown",
3825          delegate() {
3826            return this.selNavItem;
3827          },
3828          filter() {
3829            return !this.parallax;
3830          },
3831          handler(e) {
3832            if (e.target.closest("a,button") && (e.type === "click" || e.keyCode === keyMap.SPACE)) {
3833              e.preventDefault();
3834              this.show(data(e.current, this.attrItem));
3835            }
3836          }
3837        },
3838        {
3839          name: "itemshow",
3840          handler: "updateNav"
3841        },
3842        {
3843          name: "keydown",
3844          delegate() {
3845            return this.selNavItem;
3846          },
3847          filter() {
3848            return !this.parallax;
3849          },
3850          handler(e) {
3851            const { current, keyCode } = e;
3852            const cmd = data(current, this.attrItem);
3853            if (!isNumeric(cmd)) {
3854              return;
3855            }
3856            let i = keyCode === keyMap.HOME ? 0 : keyCode === keyMap.END ? "last" : keyCode === keyMap.LEFT ? "previous" : keyCode === keyMap.RIGHT ? "next" : -1;
3857            if (~i) {
3858              e.preventDefault();
3859              this.show(i);
3860            }
3861          }
3862        }
3863      ],
3864      methods: {
3865        updateNav() {
3866          const index = this.getValidIndex();
3867          for (const el of this.navItems) {
3868            const cmd = data(el, this.attrItem);
3869            const button = $("a,button", el) || el;
3870            if (isNumeric(cmd)) {
3871              const item = toNumber(cmd);
3872              const active = item === index;
3873              toggleClass(el, this.clsActive, active);
3874              toggleClass(button, "uk-disabled", this.parallax);
3875              attr(button, {
3876                "aria-selected": active,
3877                tabindex: active && !this.parallax ? null : -1
3878              });
3879              if (active && button && matches(parent(el), ":focus-within")) {
3880                button.focus();
3881              }
3882            } else {
3883              toggleClass(
3884                el,
3885                "uk-invisible",
3886                this.finite && (cmd === "previous" && index === 0 || cmd === "next" && index >= this.maxIndex)
3887              );
3888            }
3889          }
3890        }
3891      }
3892    };
3893
3894    var Slider = {
3895      mixins: [SliderAutoplay, SliderDrag, SliderNav, I18n],
3896      props: {
3897        clsActivated: String,
3898        easing: String,
3899        index: Number,
3900        finite: Boolean,
3901        velocity: Number
3902      },
3903      data: () => ({
3904        easing: "ease",
3905        finite: false,
3906        velocity: 1,
3907        index: 0,
3908        prevIndex: -1,
3909        stack: [],
3910        percent: 0,
3911        clsActive: "uk-active",
3912        clsActivated: "",
3913        clsEnter: "uk-slide-enter",
3914        clsLeave: "uk-slide-leave",
3915        clsSlideActive: "uk-slide-active",
3916        Transitioner: false,
3917        transitionOptions: {}
3918      }),
3919      connected() {
3920        this.prevIndex = -1;
3921        this.index = this.getValidIndex(this.$props.index);
3922        this.stack = [];
3923      },
3924      disconnected() {
3925        removeClass(this.slides, this.clsActive);
3926      },
3927      computed: {
3928        duration: ({ velocity }, $el) => speedUp($el.offsetWidth / velocity),
3929        list: ({ selList }, $el) => $(selList, $el),
vendor: 7,016 bytes, lines 3930-4144
3930        maxIndex() {
3931          return this.length - 1;
3932        },
3933        slides() {
3934          return children(this.list);
3935        },
3936        length() {
3937          return this.slides.length;
3938        }
3939      },
3940      watch: {
3941        slides(slides, prev) {
3942          if (prev) {
3943            this.$emit();
3944          }
3945        }
3946      },
3947      events: {
3948        itemshow({ target }) {
3949          addClass(target, this.clsEnter, this.clsSlideActive);
3950        },
3951        itemshown({ target }) {
3952          removeClass(target, this.clsEnter);
3953        },
3954        itemhide({ target }) {
3955          addClass(target, this.clsLeave);
3956        },
3957        itemhidden({ target }) {
3958          removeClass(target, this.clsLeave, this.clsSlideActive);
3959        }
3960      },
3961      methods: {
3962        show(index, force = false) {
3963          var _a;
3964          if (this.dragging || !this.length || this.parallax) {
3965            return;
3966          }
3967          const { stack } = this;
3968          const queueIndex = force ? 0 : stack.length;
3969          const reset = () => {
3970            stack.splice(queueIndex, 1);
3971            if (stack.length) {
3972              this.show(stack.shift(), true);
3973            }
3974          };
3975          stack[force ? "unshift" : "push"](index);
3976          if (!force && stack.length > 1) {
3977            if (stack.length === 2) {
3978              (_a = this._transitioner) == null ? void 0 : _a.forward(Math.min(this.duration, 200));
3979            }
3980            return;
3981          }
3982          const prevIndex = this.getIndex(this.index);
3983          const prev = hasClass(this.slides, this.clsActive) && this.slides[prevIndex];
3984          const nextIndex = this.getIndex(index, this.index);
3985          const next = this.slides[nextIndex];
3986          if (prev === next) {
3987            reset();
3988            return;
3989          }
3990          this.dir = getDirection(index, prevIndex);
3991          this.prevIndex = prevIndex;
3992          this.index = nextIndex;
3993          if (prev && !trigger(prev, "beforeitemhide", [this]) || !trigger(next, "beforeitemshow", [this, prev])) {
3994            this.index = this.prevIndex;
3995            reset();
3996            return;
3997          }
3998          const promise = this._show(prev, next, force).then(() => {
3999            prev && trigger(prev, "itemhidden", [this]);
4000            trigger(next, "itemshown", [this]);
4001            stack.shift();
4002            this._transitioner = null;
4003            requestAnimationFrame(() => stack.length && this.show(stack.shift(), true));
4004          });
4005          prev && trigger(prev, "itemhide", [this]);
4006          trigger(next, "itemshow", [this]);
4007          return promise;
4008        },
4009        getIndex(index = this.index, prev = this.index) {
4010          return clamp(
4011            getIndex(index, this.slides, prev, this.finite),
4012            0,
4013            Math.max(0, this.maxIndex)
4014          );
4015        },
4016        getValidIndex(index = this.index, prevIndex = this.prevIndex) {
4017          return this.getIndex(index, prevIndex);
4018        },
4019        _show(prev, next, force) {
4020          this._transitioner = this._getTransitioner(prev, next, this.dir, {
4021            easing: force ? next.offsetWidth < 600 ? "cubic-bezier(0.25, 0.46, 0.45, 0.94)" : "cubic-bezier(0.165, 0.84, 0.44, 1)" : this.easing,
4022            ...this.transitionOptions
4023          });
4024          if (!force && !prev) {
4025            this._translate(1);
4026            return Promise.resolve();
4027          }
4028          const { length } = this.stack;
4029          return this._transitioner[length > 1 ? "forward" : "show"](
4030            length > 1 ? Math.min(this.duration, 75 + 75 / (length - 1)) : this.duration,
4031            this.percent
4032          );
4033        },
4034        _translate(percent, prev = this.prevIndex, next = this.index) {
4035          const transitioner = this._getTransitioner(prev === next ? false : prev, next);
4036          transitioner.translate(percent);
4037          return transitioner;
4038        },
4039        _getTransitioner(prev = this.prevIndex, next = this.index, dir = this.dir || 1, options = this.transitionOptions) {
4040          return new this.Transitioner(
4041            isNumber(prev) ? this.slides[prev] : prev,
4042            isNumber(next) ? this.slides[next] : next,
4043            dir * (isRtl ? -1 : 1),
4044            options
4045          );
4046        }
4047      }
4048    };
4049    function getDirection(index, prevIndex) {
4050      return index === "next" ? 1 : index === "previous" ? -1 : index < prevIndex ? -1 : 1;
4051    }
4052    function speedUp(x) {
4053      return 0.5 * x + 300;
4054    }
4055
4056    var Slideshow = {
4057      mixins: [Slider],
4058      props: {
4059        animation: String
4060      },
4061      data: {
4062        animation: "slide",
4063        clsActivated: "uk-transition-active",
4064        Animations: Animations$2,
4065        Transitioner: Transitioner$1
4066      },
4067      computed: {
4068        animation({ animation, Animations: Animations2 }) {
4069          return { ...Animations2[animation] || Animations2.slide, name: animation };
4070        },
4071        transitionOptions() {
4072          return { animation: this.animation };
4073        }
4074      },
4075      observe: resize(),
4076      events: {
4077        beforeitemshow({ target }) {
4078          addClass(target, this.clsActive);
4079        },
4080        itemshown({ target }) {
4081          addClass(target, this.clsActivated);
4082        },
4083        itemhidden({ target }) {
4084          removeClass(target, this.clsActive, this.clsActivated);
4085        }
4086      }
4087    };
4088
4089    var Animations$1 = {
4090      ...Animations$2,
4091      fade: {
4092        show() {
4093          return [{ opacity: 0 }, { opacity: 1 }];
4094        },
4095        percent(current) {
4096          return 1 - css(current, "opacity");
4097        },
4098        translate(percent) {
4099          return [{ opacity: 1 - percent }, { opacity: percent }];
4100        }
4101      },
4102      scale: {
4103        show() {
4104          return [
4105            { opacity: 0, transform: scale3d(1 - 0.2) },
4106            { opacity: 1, transform: scale3d(1) }
4107          ];
4108        },
4109        percent(current) {
4110          return 1 - css(current, "opacity");
4111        },
4112        translate(percent) {
4113          return [
4114            { opacity: 1 - percent, transform: scale3d(1 - 0.2 * percent) },
4115            { opacity: percent, transform: scale3d(1 - 0.2 + 0.2 * percent) }
4116          ];
4117        }
4118      }
4119    };
4120
4121    var LightboxPanel = {
4122      mixins: [Modal, Slideshow],
4123      functional: true,
4124      props: {
4125        delayControls: Number,
4126        preload: Number,
4127        videoAutoplay: Boolean,
4128        template: String
4129      },
4130      data: () => ({
4131        preload: 1,
4132        videoAutoplay: false,
4133        delayControls: 3e3,
4134        items: [],
4135        cls: "uk-open",
4136        clsPage: "uk-lightbox-page",
4137        selList: ".uk-lightbox-items",
4138        attrItem: "uk-lightbox-item",
4139        selClose: ".uk-close-large",
4140        selCaption: ".uk-lightbox-caption",
4141        pauseOnHover: false,
4142        velocity: 2,
4143        Animations: Animations$1,
4144        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-sli
4144de-top uk-transition-opaque"> <button class="uk-lightbox-toolbar-icon uk-close-large" type="button" uk-close></button> </div> <a class="uk-lightbox-button uk-position-center-left uk-position-medium uk-transition-fade" href uk-slidenav-previous uk-lightbox-item="previous"></a> <a class="uk-lightbox-button uk-position-center-right uk-position-medium uk-transition-fade" href uk-slidenav-next uk-lightbox-item="next"></a> <div class="uk-lightbox-toolbar uk-lightbox-caption uk-position-bottom uk-text-center uk-transition-slide-bottom uk-transition-opaque"></div> </div>`
4145      }),
4146      created() {
4147        const $el = $(this.template);
4148        const list = $(this.selList, $el);
4149        this.items.forEach(() => append(list, "<li>"));
4150        const close = $("[uk-close]", $el);
4151        const closeLabel = this.t("close");
4152        if (close && closeLabel) {
4153          close.dataset.i18n = JSON.stringify({ label: closeLabel });
4154        }
4155        this.$mount(append(this.container, $el));
4156      },
4157      computed: {
4158        caption: ({ selCaption }, $el) => $(selCaption, $el)
4159      },
4160      events: [
4161        {
4162          name: `${pointerMove$1} ${pointerDown$1} keydown`,
4163          handler: "showControls"
4164        },
4165        {
4166          name: "click",
4167          self: true,
4168          delegate() {
4169            return `${this.selList} > *`;
4170          },
4171          handler(e) {
4172            if (!e.defaultPrevented) {
4173              this.hide();
4174            }
4175          }
4176        },
4177        {
4178          name: "shown",
4179          self: true,
4180          handler: "showControls"
4181        },
4182        {
4183          name: "hide",
4184          self: true,
4185          handler() {
4186            this.hideControls();
4187            removeClass(this.slides, this.clsActive);
4188            Transition.stop(this.slides);
4189          }
4190        },
4191        {
4192          name: "hidden",
4193          self: true,
4194          handler() {
4195            this.$destroy(true);
4196          }
4197        },
4198        {
4199          name: "keyup",
4200          el: () => document,
4201          handler({ keyCode }) {
4202            if (!this.isToggled(this.$el) || !this.draggable) {
4203              return;
4204            }
4205            let i = -1;
4206            if (keyCode === keyMap.LEFT) {
4207              i = "previous";
4208            } else if (keyCode === keyMap.RIGHT) {
4209              i = "next";
4210            } else if (keyCode === keyMap.HOME) {
4211              i = 0;
4212            } else if (keyCode === keyMap.END) {
4213              i = "last";
4214            }
4215            if (~i) {
4216              this.show(i);
4217            }
4218          }
4219        },
4220        {
4221          name: "beforeitemshow",
4222          handler(e) {
4223            if (this.isToggled()) {
4224              return;
4225            }
4226            this.draggable = false;
4227            e.preventDefault();
4228            this.toggleElement(this.$el, true, false);
4229            this.animation = Animations$1["scale"];
4230            removeClass(e.target, this.clsActive);
4231            this.stack.splice(1, 0, this.index);
4232          }
4233        },
4234        {
4235          name: "itemshow",
4236          handler() {
4237            html(this.caption, this.getItem().caption || "");
4238            for (let j = -this.preload; j <= this.preload; j++) {
4239              this.loadItem(this.index + j);
4240            }
4241          }
4242        },
4243        {
4244          name: "itemshown",
4245          handler() {
4246            this.draggable = this.$props.draggable;
4247          }
4248        },
4249        {
4250          name: "itemload",
4251          async handler(_, item) {
4252            const { source: src, type, alt = "", poster, attrs = {} } = item;
4253            this.setItem(item, "<span uk-spinner></span>");
4254            if (!src) {
4255              return;
4256            }
4257            let matches;
4258            const iframeAttrs = {
4259              allowfullscreen: "",
4260              style: "max-width: 100%; box-sizing: border-box;",
4261              "uk-responsive": "",
4262              "uk-video": `${this.videoAutoplay}`
4263            };
4264            if (type === "image" || src.match(/\.(avif|jpe?g|jfif|a?png|gif|svg|webp)($|\?)/i)) {
4265              const img = createEl("img", { src, alt, ...attrs });
4266              on(img, "load", () => this.setItem(item, img));
4267              on(img, "error", () => this.setError(item));
4268            } else if (type === "video" || src.match(/\.(mp4|webm|ogv)($|\?)/i)) {
4269              const video = createEl("video", {
4270                src,
4271                poster,
4272                controls: "",
4273                playsinline: "",
4274                "uk-video": `${this.videoAutoplay}`,
4275                ...attrs
4276              });
4277              on(video, "loadedmetadata", () => this.setItem(item, video));
4278              on(video, "error", () => this.setError(item));
4279            } else if (type === "iframe" || src.match(/\.(html|php)($|\?)/i)) {
4280              this.setItem(
4281                item,
4282                createEl("iframe", {
4283                  src,
4284                  allowfullscreen: "",
4285                  class: "uk-lightbox-iframe",
4286                  ...attrs
4287                })
4288              );
4289            } else if (matches = src.match(
4290              /\/\/(?:.*?youtube(-nocookie)?\..*?(?:[?&]v=|\/shorts\/)|youtu\.be\/)([\w-]{11})[&?]?(.*)?/
4291            )) {
4292              this.setItem(
4293                item,
4294                createEl("iframe", {
4295                  src: `https://www.youtube${matches[1] || ""}.com/embed/${matches[2]}${matches[3] ? `?${matches[3]}` : ""}`,
4296                  width: 1920,
4297                  height: 1080,
4298                  ...iframeAttrs,
4299                  ...attrs
4300                })
4301              );
4302            } else if (matches = src.match(/\/\/.*?vimeo\.[a-z]+\/(\d+)[&?]?(.*)?/)) {
4303              try {
4304                const { height, width } = await (await fetch(
4305                  `https://vimeo.com/api/oembed.json?maxwidth=1920&url=${encodeURI(
4306                src
4307              )}`,
4308                  { credentials: "omit" }
4309                )).json();
4310                this.setItem(
4311                  item,
4312                  createEl("iframe", {
4313                    src: `https://player.vimeo.com/video/${matches[1]}${matches[2] ? `?${matches[2]}` : ""}`,
4314                    width,
4315                    height,
4316                    ...iframeAttrs,
4317                    ...attrs
4318                  })
4319                );
4320              } catch (e) {
4321                this.setError(item);
4322              }
4323            }
4324          }
4325        }
4326      ],
4327      methods: {
4328        loadItem(index = this.index) {
4329          const item = this.getItem(index);
4330          if (!this.getSlide(item).childElementCount) {
4331            trigger(this.$el, "itemload", [item]);
4332          }
4333        },
4334        getItem(index = this.index) {
4335          return this.items[getIndex(index, this.slides)];
4336        },
4337        setItem(item, content) {
4338          trigger(this.$el, "itemloaded", [this, html(this.getSlide(item), content)]);
4339        },
4340        getSlide(item) {
4341          return this.slides[this.items.indexOf(item)];
4342        },
4343        setError(item) {
4344          this.setItem(item, '<span uk-icon="icon: bolt; ratio: 2"></span>');
4345        },
4346        showControls() {
4347          clearTimeout(this.controlsTimer);
4348          this.controlsTimer = setTimeout(this.hideControls, this.delayControls);
4349          addClass(this.$el, "uk-active", "uk-transition-active");
4350        },
4351        hideControls() {
4352          removeClass(this.$el, "uk-active", "uk-transition-active");
4353        }
4354      }
4355    };
4356    function createEl(tag, attrs) {
4357      const el = fragment(`<${tag}>`);
4358      attr(el, attrs);
4359      return el;
4360    }
4361
4362    var lightbox = {
4363      install: install$3,
4364      props: { toggle: String },
4365      data: { toggle: "a" },
4366      computed: {
4367        toggles: ({ toggle }, $el) => $$(toggle, $el)
4368      },
4369      watch: {
4370        toggles(toggles) {
4371          this.hide();
4372          for (const toggle of toggles) {
4373            if (isTag(toggle, "a")) {
4374              attr(toggle, "role", "button");
4375            }
4376          }
4377        }
4378      },
4379      disconnected() {
4380        this.hide();
4381      },
4382      events: {
4383        name: "click",
4384        delegate() {
4385          return `${this.toggle}:not(.uk-disabled)`;
4386        },
4387        handler(e) {
4388          e.preventDefault();
4389          this.show(e.current);
4390        }
4391      },
4392      methods: {
4393        show(index) {
4394          const items = uniqueBy(this.toggles.map(toItem), "source");
4395          if (isElement(index)) {
4396            const { source }
vendor: 70,254 bytes, lines 4396-6536
4396 = toItem(index);
4397            index = findIndex(items, ({ source: src }) => source === src);
4398          }
4399          this.panel = this.panel || this.$create("lightboxPanel", { ...this.$props, items });
4400          on(this.panel.$el, "hidden", () => this.panel = null);
4401          return this.panel.show(index);
4402        },
4403        hide() {
4404          var _a;
4405          return (_a = this.panel) == null ? void 0 : _a.hide();
4406        }
4407      }
4408    };
4409    function install$3(UIkit, Lightbox) {
4410      if (!UIkit.lightboxPanel) {
4411        UIkit.component("lightboxPanel", LightboxPanel);
4412      }
4413      assign(Lightbox.props, UIkit.component("lightboxPanel").options.props);
4414    }
4415    function toItem(el) {
4416      const item = {};
4417      for (const attr2 of ["href", "caption", "type", "poster", "alt", "attrs"]) {
4418        item[attr2 === "href" ? "source" : attr2] = data(el, attr2);
4419      }
4420      item.attrs = parseOptions(item.attrs);
4421      return item;
4422    }
4423
4424    var notification = {
4425      mixins: [Container],
4426      functional: true,
4427      args: ["message", "status"],
4428      data: {
4429        message: "",
4430        status: "",
4431        timeout: 5e3,
4432        group: "",
4433        pos: "top-center",
4434        clsContainer: "uk-notification",
4435        clsClose: "uk-notification-close",
4436        clsMsg: "uk-notification-message"
4437      },
4438      install: install$2,
4439      computed: {
4440        marginProp: ({ pos }) => `margin-${pos.match(/[a-z]+(?=-)/)[0]}`,
4441        startProps() {
4442          return { opacity: 0, [this.marginProp]: -this.$el.offsetHeight };
4443        }
4444      },
4445      created() {
4446        const posClass = `${this.clsContainer}-${this.pos}`;
4447        const containerAttr = `data-${this.clsContainer}-container`;
4448        const container = $(`.${posClass}[${containerAttr}]`, this.container) || append(
4449          this.container,
4450          `<div class="${this.clsContainer} ${posClass}" ${containerAttr}></div>`
4451        );
4452        this.$mount(
4453          append(
4454            container,
4455            `<div class="${this.clsMsg}${this.status ? ` ${this.clsMsg}-${this.status}` : ""}" role="alert"> <a href class="${this.clsClose}" data-uk-close></a> <div>${this.message}</div> </div>`
4456          )
4457        );
4458      },
4459      async connected() {
4460        const margin = toFloat(css(this.$el, this.marginProp));
4461        await Transition.start(css(this.$el, this.startProps), {
4462          opacity: 1,
4463          [this.marginProp]: margin
4464        });
4465        if (this.timeout) {
4466          this.timer = setTimeout(this.close, this.timeout);
4467        }
4468      },
4469      events: {
4470        click(e) {
4471          if (e.target.closest('a[href="#"],a[href=""]')) {
4472            e.preventDefault();
4473          }
4474          this.close();
4475        },
4476        [pointerEnter]() {
4477          if (this.timer) {
4478            clearTimeout(this.timer);
4479          }
4480        },
4481        [pointerLeave]() {
4482          if (this.timeout) {
4483            this.timer = setTimeout(this.close, this.timeout);
4484          }
4485        }
4486      },
4487      methods: {
4488        async close(immediate) {
4489          const removeFn = (el) => {
4490            const container = parent(el);
4491            trigger(el, "close", [this]);
4492            remove$1(el);
4493            if (!(container == null ? void 0 : container.hasChildNodes())) {
4494              remove$1(container);
4495            }
4496          };
4497          if (this.timer) {
4498            clearTimeout(this.timer);
4499          }
4500          if (!immediate) {
4501            await Transition.start(this.$el, this.startProps);
4502          }
4503          removeFn(this.$el);
4504        }
4505      }
4506    };
4507    function install$2(UIkit) {
4508      UIkit.notification.closeAll = function(group, immediate) {
4509        apply(document.body, (el) => {
4510          const notification = UIkit.getComponent(el, "notification");
4511          if (notification && (!group || group === notification.group)) {
4512            notification.close(immediate);
4513          }
4514        });
4515      };
4516    }
4517
4518    var Media = {
4519      props: {
4520        media: Boolean
4521      },
4522      data: {
4523        media: false
4524      },
4525      connected() {
4526        const media = toMedia(this.media, this.$el);
4527        this.matchMedia = true;
4528        if (media) {
4529          this.mediaObj = window.matchMedia(media);
4530          const handler = () => {
4531            this.matchMedia = this.mediaObj.matches;
4532            trigger(this.$el, createEvent("mediachange", false, true, [this.mediaObj]));
4533          };
4534          this.offMediaObj = on(this.mediaObj, "change", () => {
4535            handler();
4536            this.$emit("resize");
4537          });
4538          handler();
4539        }
4540      },
4541      disconnected() {
4542        var _a;
4543        (_a = this.offMediaObj) == null ? void 0 : _a.call(this);
4544      }
4545    };
4546    function toMedia(value, element) {
4547      if (isString(value)) {
4548        if (startsWith(value, "@")) {
4549          value = toFloat(css(element, `--uk-breakpoint-${value.substr(1)}`));
4550        } else if (isNaN(value)) {
4551          return value;
4552        }
4553      }
4554      return value && isNumeric(value) ? `(min-width: ${value}px)` : "";
4555    }
4556
4557    function getMaxPathLength(el) {
4558      return isVisible(el) ? Math.ceil(Math.max(0, ...$$("[stroke]", el).map((stroke) => stroke.getTotalLength()))) : 0;
4559    }
4560
4561    const props = {
4562      x: transformFn,
4563      y: transformFn,
4564      rotate: transformFn,
4565      scale: transformFn,
4566      color: colorFn,
4567      backgroundColor: colorFn,
4568      borderColor: colorFn,
4569      blur: filterFn,
4570      hue: filterFn,
4571      fopacity: filterFn,
4572      grayscale: filterFn,
4573      invert: filterFn,
4574      saturate: filterFn,
4575      sepia: filterFn,
4576      opacity: cssPropFn,
4577      stroke: strokeFn,
4578      bgx: backgroundFn,
4579      bgy: backgroundFn
4580    };
4581    const { keys } = Object;
4582    var Parallax = {
4583      mixins: [Media],
4584      props: fillObject(keys(props), "list"),
4585      data: fillObject(keys(props), void 0),
4586      computed: {
4587        props(properties, $el) {
4588          const stops = {};
4589          for (const prop in properties) {
4590            if (prop in props && !isUndefined(properties[prop])) {
4591              stops[prop] = properties[prop].slice();
4592            }
4593          }
4594          const result = {};
4595          for (const prop in stops) {
4596            result[prop] = props[prop](prop, $el, stops[prop], stops);
4597          }
4598          return result;
4599        }
4600      },
4601      events: {
4602        load() {
4603          this.$emit();
4604        }
4605      },
4606      methods: {
4607        reset() {
4608          for (const prop in this.getCss(0)) {
4609            css(this.$el, prop, "");
4610          }
4611        },
4612        getCss(percent) {
4613          const css2 = {};
4614          for (const prop in this.props) {
4615            this.props[prop](css2, clamp(percent));
4616          }
4617          css2.willChange = Object.keys(css2).map(propName).join(",");
4618          return css2;
4619        }
4620      }
4621    };
4622    function transformFn(prop, el, stops) {
4623      let unit = getUnit(stops) || { x: "px", y: "px", rotate: "deg" }[prop] || "";
4624      let transformFn2;
4625      if (prop === "x" || prop === "y") {
4626        prop = `translate${ucfirst(prop)}`;
4627        transformFn2 = (stop) => toFloat(toFloat(stop).toFixed(unit === "px" ? 0 : 6));
4628      } else if (prop === "scale") {
4629        unit = "";
4630        transformFn2 = (stop) => {
4631          var _a;
4632          return getUnit([stop]) ? toPx(stop, "width", el, true) / el[`offset${((_a = stop.endsWith) == null ? void 0 : _a.call(stop, "vh")) ? "Height" : "Width"}`] : toFloat(stop);
4633        };
4634      }
4635      if (stops.length === 1) {
4636        stops.unshift(prop === "scale" ? 1 : 0);
4637      }
4638      stops = parseStops(stops, transformFn2);
4639      return (css2, percent) => {
4640        css2.transform = `${css2.transform || ""} ${prop}(${getValue(stops, percent)}${unit})`;
4641      };
4642    }
4643    function colorFn(prop, el, stops) {
4644      if (stops.length === 1) {
4645        stops.unshift(getCssValue(el, prop, ""));
4646      }
4647      stops = parseStops(stops, (stop) => parseColor(el, stop));
4648      return (css2, percent) => {
4649        const [start, end, p] = getStop(stops, percent);
4650        const value = start.map((value2, i) => {
4651          value2 += p * (end[i] - value2);
4652          return i === 3 ? toFloat(value2) : parseInt(value2, 10);
4653        }).join(",");
4654        css2[prop] = `rgba(${value})`;
4655      };
4656    }
4657    function parseColor(el, color) {
4658      return getCssValue(el, "color", color).split(/[(),]/g).slice(1, -1).concat(1).slice(0, 4).map(toFloat);
4659    }
4660    function filterFn(prop, el, stops) {
4661      if (stops.length === 1) {
4662        stops.unshift(0);
4663      }
4664      const unit = getUnit(stops) || { blur: "px", hue: "deg" }[prop] || "%";
4665      prop = { fopacity: "opacity", hue: "hue-rotate" }[prop] || prop;
4666      stops = parseStops(stops);
4667      return (css2, percent) => {
4668        const value = getValue(stops, percent);
4669        css2.filter = `${css2.filter || ""} ${prop}(${value + unit})`;
4670      };
4671    }
4672    function cssPropFn(prop, el, stops) {
4673      if (stops.length === 1) {
4674        stops.unshift(getCssValue(el, prop, ""));
4675      }
4676      stops = parseStops(stops);
4677      return (css2, percent) => {
4678        css2[prop] = getValue(stops, percent);
4679      };
4680    }
4681    function strokeFn(prop, el, stops) {
4682      if (stops.length === 1) {
4683        stops.unshift(0);
4684      }
4685      const unit = getUnit(stops);
4686      const length = getMaxPathLength(el);
4687      stops = parseStops(stops.reverse(), (stop) => {
4688        stop = toFloat(stop);
4689        return unit === "%" ? stop * length / 100 : stop;
4690      });
4691      if (!stops.some(([value]) => value)) {
4692        return noop;
4693      }
4694      css(el, "strokeDasharray", length);
4695      return (css2, percent) => {
4696        css2.strokeDashoffset = getValue(stops, percent);
4697      };
4698    }
4699    function backgroundFn(prop, el, stops, props2) {
4700      if (stops.length === 1) {
4701        stops.unshift(0);
4702      }
4703      const attr = prop === "bgy" ? "height" : "width";
4704      props2[prop] = parseStops(stops, (stop) => toPx(stop, attr, el));
4705      const bgProps = ["bgx", "bgy"].filter((prop2) => prop2 in props2);
4706      if (bgProps.length === 2 && prop === "bgx") {
4707        return noop;
4708      }
4709      if (getCssValue(el, "backgroundSize", "") === "cover") {
4710        return backgroundCoverFn(prop, el, stops, props2);
4711      }
4712      const positions = {};
4713      for (const prop2 of bgProps) {
4714        positions[prop2] = getBackgroundPos(el, prop2);
4715      }
4716      return setBackgroundPosFn(bgProps, positions, props2);
4717    }
4718    function backgroundCoverFn(prop, el, stops, props2) {
4719      const dimImage = getBackgroundImageDimensions(el);
4720      if (!dimImage.width) {
4721        return noop;
4722      }
4723      const dimEl = {
4724        width: el.offsetWidth,
4725        height: el.offsetHeight
4726      };
4727      const bgProps = ["bgx", "bgy"].filter((prop2) => prop2 in props2);
4728      const positions = {};
4729      for (const prop2 of bgProps) {
4730        const values = props2[prop2].map(([value]) => value);
4731        const min = Math.min(...values);
4732        const max = Math.max(...values);
4733        const down = values.indexOf(min) < values.indexOf(max);
4734        const diff = max - min;
4735        positions[prop2] = `${(down ? -diff : 0) - (down ? min : max)}px`;
4736        dimEl[prop2 === "bgy" ? "height" : "width"] += diff;
4737      }
4738      const dim = Dimensions.cover(dimImage, dimEl);
4739      for (const prop2 of bgProps) {
4740        const attr = prop2 === "bgy" ? "height" : "width";
4741        const overflow = dim[attr] - dimEl[attr];
4742        positions[prop2] = `max(${getBackgroundPos(el, prop2)},-${overflow}px) + ${positions[prop2]}`;
4743      }
4744      const fn = setBackgroundPosFn(bgProps, positions, props2);
4745      return (css2, percent) => {
4746        fn(css2, percent);
4747        css2.backgroundSize = `${dim.width}px ${dim.height}px`;
4748        css2.backgroundRepeat = "no-repeat";
4749      };
4750    }
4751    function getBackgroundPos(el, prop) {
4752      return getCssValue(el, `background-position-${prop.substr(-1)}`, "");
4753    }
4754    function setBackgroundPosFn(bgProps, positions, props2) {
4755      return function(css2, percent) {
4756        for (const prop of bgProps) {
4757          const value = getValue(props2[prop], percent);
4758          css2[`background-position-${prop.substr(-1)}`] = `calc(${positions[prop]} + ${value}px)`;
4759        }
4760      };
4761    }
4762    const loading = {};
4763    const dimensions = {};
4764    function getBackgroundImageDimensions(el) {
4765      const src = css(el, "backgroundImage").replace(/^none|url\(["']?(.+?)["']?\)$/, "$1");
4766      if (dimensions[src]) {
4767        return dimensions[src];
4768      }
4769      const image = new Image();
4770      if (src) {
4771        image.src = src;
4772        if (!image.naturalWidth && !loading[src]) {
4773          once(image, "error load", () => {
4774            dimensions[src] = toDimensions(image);
4775            trigger(el, createEvent("load", false));
4776          });
4777          loading[src] = true;
4778          return toDimensions(image);
4779        }
4780      }
4781      return dimensions[src] = toDimensions(image);
4782    }
4783    function toDimensions(image) {
4784      return {
4785        width: image.naturalWidth,
4786        height: image.naturalHeight
4787      };
4788    }
4789    function parseStops(stops, fn = toFloat) {
4790      const result = [];
4791      const { length } = stops;
4792      let nullIndex = 0;
4793      for (let i = 0; i < length; i++) {
4794        let [value, percent] = isString(stops[i]) ? stops[i].trim().split(/ (?![^(]*\))/) : [stops[i]];
4795        value = fn(value);
4796        percent = percent ? toFloat(percent) / 100 : null;
4797        if (i === 0) {
4798          if (percent === null) {
4799            percent = 0;
4800          } else if (percent) {
4801            result.push([value, 0]);
4802          }
4803        } else if (i === length - 1) {
4804          if (percent === null) {
4805            percent = 1;
4806          } else if (percent !== 1) {
4807            result.push([value, percent]);
4808            percent = 1;
4809          }
4810        }
4811        result.push([value, percent]);
4812        if (percent === null) {
4813          nullIndex++;
4814        } else if (nullIndex) {
4815          const leftPercent = result[i - nullIndex - 1][1];
4816          const p = (percent - leftPercent) / (nullIndex + 1);
4817          for (let j = nullIndex; j > 0; j--) {
4818            result[i - j][1] = leftPercent + p * (nullIndex - j + 1);
4819          }
4820          nullIndex = 0;
4821        }
4822      }
4823      return result;
4824    }
4825    function getStop(stops, percent) {
4826      const index = findIndex(stops.slice(1), ([, targetPercent]) => percent <= targetPercent) + 1;
4827      return [
4828        stops[index - 1][0],
4829        stops[index][0],
4830        (percent - stops[index - 1][1]) / (stops[index][1] - stops[index - 1][1])
4831      ];
4832    }
4833    function getValue(stops, percent) {
4834      const [start, end, p] = getStop(stops, percent);
4835      return start + Math.abs(start - end) * p * (start < end ? 1 : -1);
4836    }
4837    const unitRe = /^-?\d+(?:\.\d+)?(\S+)?/;
4838    function getUnit(stops, defaultUnit) {
4839      var _a;
4840      for (const stop of stops) {
4841        const match = (_a = stop.match) == null ? void 0 : _a.call(stop, unitRe);
4842        if (match) {
4843          return match[1];
4844        }
4845      }
4846      return defaultUnit;
4847    }
4848    function getCssValue(el, prop, value) {
4849      const prev = el.style[prop];
4850      const val = css(css(el, prop, value), prop);
4851      el.style[prop] = prev;
4852      return val;
4853    }
4854    function fillObject(keys2, value) {
4855      return keys2.reduce((data, prop) => {
4856        data[prop] = value;
4857        return data;
4858      }, {});
4859    }
4860    function ease(percent, easing) {
4861      return easing >= 0 ? Math.pow(percent, easing + 1) : 1 - Math.pow(1 - percent, 1 - easing);
4862    }
4863
4864    var parallax = {
4865      mixins: [Parallax],
4866      props: {
4867        target: String,
4868        viewport: Number,
4869        // Deprecated
4870        easing: Number,
4871        start: String,
4872        end: String
4873      },
4874      data: {
4875        target: false,
4876        viewport: 1,
4877        easing: 1,
4878        start: 0,
4879        end: 0
4880      },
4881      computed: {
4882        target: ({ target }, $el) => getOffsetElement(target && query(target, $el) || $el),
4883        start({ start }) {
4884          return toPx(start, "height", this.target, true);
4885        },
4886        end({ end, viewport: viewport2 }) {
4887          return toPx(
4888            end || (viewport2 = (1 - viewport2) * 100) && `${viewport2}vh+${viewport2}%`,
4889            "height",
4890            this.target,
4891            true
4892          );
4893        }
4894      },
4895      observe: [
4896        viewport(),
4897        scroll$1({ target: ({ target }) => target }),
4898        resize({ target: ({ $el, target }) => [$el, target, scrollParent(target, true)] })
4899      ],
4900      update: {
4901        read({ percent }, types) {
4902          if (!types.has("scroll")) {
4903            percent = false;
4904          }
4905          if (!isVisible(this.$el)) {
4906            return false;
4907          }
4908          if (!this.matchMedia) {
4909            return;
4910          }
4911          const prev = percent;
4912          percent = ease(scrolledOver(this.target, this.start, this.end), this.easing);
4913          return {
4914            percent,
4915            style: prev === percent ? false : this.getCss(percent)
4916          };
4917        },
4918        write({ style }) {
4919          if (!this.matchMedia) {
4920            this.reset();
4921            return;
4922          }
4923          style && css(this.$el, style);
4924        },
4925        events: ["scroll", "resize"]
4926      }
4927    };
4928    function getOffsetElement(el) {
4929      return el ? "offsetTop" in el ? el : getOffsetElement(parent(el)) : document.documentElement;
4930    }
4931
4932    var SliderParallax = {
4933      props: {
4934        parallax: Boolean,
4935        parallaxTarget: Boolean,
4936        parallaxStart: String,
4937        parallaxEnd: String,
4938        parallaxEasing: Number
4939      },
4940      data: {
4941        parallax: false,
4942        parallaxTarget: false,
4943        parallaxStart: 0,
4944        parallaxEnd: 0,
4945        parallaxEasing: 0
4946      },
4947      observe: [
4948        resize({
4949          target: ({ $el, parallaxTarget }) => [$el, parallaxTarget],
4950          filter: ({ parallax }) => parallax
4951        }),
4952        scroll$1({ filter: ({ parallax }) => parallax })
4953      ],
4954      computed: {
4955        parallaxTarget({ parallaxTarget }, $el) {
4956          return parallaxTarget && query(parallaxTarget, $el) || this.list;
4957        }
4958      },
4959      update: {
4960        write() {
4961          if (!this.parallax) {
4962            return;
4963          }
4964          const target = this.parallaxTarget;
4965          const start = toPx(this.parallaxStart, "height", target, true);
4966          const end = toPx(this.parallaxEnd, "height", target, true);
4967          const percent = ease(scrolledOver(target, start, end), this.parallaxEasing);
4968          const [prevIndex, slidePercent] = this.getIndexAt(percent);
4969          const nextIndex = this.getValidIndex(prevIndex + Math.ceil(slidePercent));
4970          const prev = this.slides[prevIndex];
4971          const next = this.slides[nextIndex];
4972          const { triggerShow, triggerShown, triggerHide, triggerHidden } = useTriggers(this);
4973          if (~this.prevIndex) {
4974            for (const i of /* @__PURE__ */ new Set([this.index, this.prevIndex])) {
4975              if (!includes([nextIndex, prevIndex], i)) {
4976                triggerHide(this.slides[i]);
4977                triggerHidden(this.slides[i]);
4978              }
4979            }
4980          }
4981          const changed = this.prevIndex !== prevIndex || this.index !== nextIndex;
4982          this.dir = 1;
4983          this.prevIndex = prevIndex;
4984          this.index = nextIndex;
4985          if (prev !== next) {
4986            triggerHide(prev);
4987          }
4988          triggerShow(next);
4989          if (changed) {
4990            triggerShown(prev);
4991          }
4992          this._translate(prev === next ? 1 : slidePercent, prev, next);
4993        },
4994        events: ["scroll", "resize"]
4995      },
4996      methods: {
4997        getIndexAt(percent) {
4998          const index = percent * (this.length - 1);
4999          return [Math.floor(index), index % 1];
5000        }
5001      }
5002    };
5003    function useTriggers(cmp) {
5004      const { clsSlideActive, clsEnter, clsLeave } = cmp;
5005      return { triggerShow, triggerShown, triggerHide, triggerHidden };
5006      function triggerShow(el) {
5007        if (hasClass(el, clsLeave)) {
5008          triggerHide(el);
5009          triggerHidden(el);
5010        }
5011        if (!hasClass(el, clsSlideActive)) {
5012          trigger(el, "beforeitemshow", [cmp]);
5013          trigger(el, "itemshow", [cmp]);
5014        }
5015      }
5016      function triggerShown(el) {
5017        if (hasClass(el, clsEnter)) {
5018          trigger(el, "itemshown", [cmp]);
5019        }
5020      }
5021      function triggerHide(el) {
5022        if (!hasClass(el, clsSlideActive)) {
5023          triggerShow(el);
5024        }
5025        if (hasClass(el, clsEnter)) {
5026          triggerShown(el);
5027        }
5028        if (!hasClass(el, clsLeave)) {
5029          trigger(el, "beforeitemhide", [cmp]);
5030          trigger(el, "itemhide", [cmp]);
5031        }
5032      }
5033      function triggerHidden(el) {
5034        if (hasClass(el, clsLeave)) {
5035          trigger(el, "itemhidden", [cmp]);
5036        }
5037      }
5038    }
5039
5040    var SliderReactive = {
5041      update: {
5042        write() {
5043          if (this.stack.length || this.dragging || this.parallax) {
5044            return;
5045          }
5046          const index = this.getValidIndex();
5047          if (!~this.prevIndex || this.index !== index) {
5048            this.show(index);
5049          } else {
5050            this._translate(1, this.prevIndex, this.index);
5051          }
5052        },
5053        events: ["resize"]
5054      }
5055    };
5056
5057    var SliderPreload = {
5058      observe: lazyload({
5059        target: ({ slides }) => slides,
5060        targets: (instance) => instance.getAdjacentSlides()
5061      }),
5062      methods: {
5063        getAdjacentSlides() {
5064          return [1, -1].map((i) => this.slides[this.getIndex(this.index + i)]);
5065        }
5066      }
5067    };
5068
5069    function Transitioner(prev, next, dir, { center, easing, list }) {
5070      const from = prev ? getLeft(prev, list, center) : getLeft(next, list, center) + dimensions$1(next).width * dir;
5071      const to = next ? getLeft(next, list, center) : from + dimensions$1(prev).width * dir * (isRtl ? -1 : 1);
5072      let resolve;
5073      return {
5074        dir,
5075        show(duration, percent = 0, linear) {
5076          const timing = linear ? "linear" : easing;
5077          duration -= Math.round(duration * clamp(percent, -1, 1));
5078          this.translate(percent);
5079          percent = prev ? percent : clamp(percent, 0, 1);
5080          triggerUpdate(this.getItemIn(), "itemin", { percent, duration, timing, dir });
5081          prev && triggerUpdate(this.getItemIn(true), "itemout", {
5082            percent: 1 - percent,
5083            duration,
5084            timing,
5085            dir
5086          });
5087          return new Promise((res) => {
5088            resolve || (resolve = res);
5089            Transition.start(
5090              list,
5091              { transform: translate(-to * (isRtl ? -1 : 1), "px") },
5092              duration,
5093              timing
5094            ).then(resolve, noop);
5095          });
5096        },
5097        cancel() {
5098          return Transition.cancel(list);
5099        },
5100        reset() {
5101          css(list, "transform", "");
5102        },
5103        async forward(duration, percent = this.percent()) {
5104          await this.cancel();
5105          return this.show(duration, percent, true);
5106        },
5107        translate(percent) {
5108          const distance = this.getDistance() * dir * (isRtl ? -1 : 1);
5109          css(
5110            list,
5111            "transform",
5112            translate(
5113              clamp(
5114                -to + (distance - distance * percent),
5115                -getWidth(list),
5116                dimensions$1(list).width
5117              ) * (isRtl ? -1 : 1),
5118              "px"
5119            )
5120          );
5121          const actives = this.getActives();
5122          const itemIn = this.getItemIn();
5123          const itemOut = this.getItemIn(true);
5124          percent = prev ? clamp(percent, -1, 1) : 0;
5125          for (const slide of children(list)) {
5126            const isActive = includes(actives, slide);
5127            const isIn = slide === itemIn;
5128            const isOut = slide === itemOut;
5129            const translateIn = isIn || !isOut && (isActive || dir * (isRtl ? -1 : 1) === -1 ^ getElLeft(slide, list) > getElLeft(prev || next));
5130            triggerUpdate(slide, `itemtranslate${translateIn ? "in" : "out"}`, {
5131              dir,
5132              percent: isOut ? 1 - percent : isIn ? percent : isActive ? 1 : 0
5133            });
5134          }
5135        },
5136        percent() {
5137          return Math.abs(
5138            (css(list, "transform").split(",")[4] * (isRtl ? -1 : 1) + from) / (to - from)
5139          );
5140        },
5141        getDistance() {
5142          return Math.abs(to - from);
5143        },
5144        getItemIn(out = false) {
5145          let actives = this.getActives();
5146          let nextActives = inView(list, getLeft(next || prev, list, center));
5147          if (out) {
5148            const temp = actives;
5149            actives = nextActives;
5150            nextActives = temp;
5151          }
5152          return nextActives[findIndex(nextActives, (el) => !includes(actives, el))];
5153        },
5154        getActives() {
5155          return inView(list, getLeft(prev || next, list, center));
5156        }
5157      };
5158    }
5159    function getLeft(el, list, center) {
5160      const left = getElLeft(el, list);
5161      return center ? left - centerEl(el, list) : Math.min(left, getMax(list));
5162    }
5163    function getMax(list) {
5164      return Math.max(0, getWidth(list) - dimensions$1(list).width);
5165    }
5166    function getWidth(list, index) {
5167      return sumBy(children(list).slice(0, index), (el) => dimensions$1(el).width);
5168    }
5169    function centerEl(el, list) {
5170      return dimensions$1(list).width / 2 - dimensions$1(el).width / 2;
5171    }
5172    function getElLeft(el, list) {
5173      return el && (position(el).left + (isRtl ? dimensions$1(el).width - dimensions$1(list).width : 0)) * (isRtl ? -1 : 1) || 0;
5174    }
5175    function inView(list, listLeft) {
5176      listLeft -= 1;
5177      const listWidth = dimensions$1(list).width;
5178      const listRight = listLeft + listWidth + 2;
5179      return children(list).filter((slide) => {
5180        const slideLeft = getElLeft(slide, list);
5181        const slideRight = slideLeft + Math.min(dimensions$1(slide).width, listWidth);
5182        return slideLeft >= listLeft && slideRight <= listRight;
5183      });
5184    }
5185    function triggerUpdate(el, type, data) {
5186      trigger(el, createEvent(type, false, false, data));
5187    }
5188
5189    var slider = {
5190      mixins: [Class, Slider, SliderReactive, SliderParallax, SliderPreload],
5191      props: {
5192        center: Boolean,
5193        sets: Boolean,
5194        active: String
5195      },
5196      data: {
5197        center: false,
5198        sets: false,
5199        attrItem: "uk-slider-item",
5200        selList: ".uk-slider-items",
5201        selNav: ".uk-slider-nav",
5202        clsContainer: "uk-slider-container",
5203        active: "all",
5204        Transitioner
5205      },
5206      computed: {
5207        finite({ finite }) {
5208          return finite || isFinite(this.list, this.center);
5209        },
5210        maxIndex() {
5211          if (!this.finite || this.center && !this.sets) {
5212            return this.length - 1;
5213          }
5214          if (this.center) {
5215            return last(this.sets);
5216          }
5217          let lft = 0;
5218          const max = getMax(this.list);
5219          const index = findIndex(this.slides, (el) => {
5220            if (lft >= max) {
5221              return true;
5222            }
5223            lft += dimensions$1(el).width;
5224          });
5225          return ~index ? index : this.length - 1;
5226        },
5227        sets({ sets: enabled }) {
5228          if (!enabled || this.parallax) {
5229            return;
5230          }
5231          let left = 0;
5232          const sets = [];
5233          const width = dimensions$1(this.list).width;
5234          for (let i = 0; i < this.length; i++) {
5235            const slideWidth = dimensions$1(this.slides[i]).width;
5236            if (left + slideWidth > width) {
5237              left = 0;
5238            }
5239            if (this.center) {
5240              if (left < width / 2 && left + slideWidth + dimensions$1(this.slides[getIndex(+i + 1, this.slides)]).width / 2 > width / 2) {
5241                sets.push(+i);
5242                left = width / 2 - slideWidth / 2;
5243              }
5244            } else if (left === 0) {
5245              sets.push(Math.min(+i, this.maxIndex));
5246            }
5247            left += slideWidth;
5248          }
5249          if (sets.length) {
5250            return sets;
5251          }
5252        },
5253        transitionOptions() {
5254          return {
5255            center: this.center,
5256            list: this.list
5257          };
5258        },
5259        slides() {
5260          return children(this.list).filter(isVisible);
5261        }
5262      },
5263      connected() {
5264        toggleClass(this.$el, this.clsContainer, !$(`.${this.clsContainer}`, this.$el));
5265      },
5266      observe: resize({
5267        target: ({ slides, $el }) => [$el, ...slides]
5268      }),
5269      update: {
5270        write() {
5271          for (const el of this.navItems) {
5272            const index = toNumber(data(el, this.attrItem));
5273            if (index !== false) {
5274              el.hidden = !this.maxIndex || index > this.maxIndex || this.sets && !includes(this.sets, index);
5275            }
5276          }
5277          this.reorder();
5278          this.updateActiveClasses();
5279        },
5280        events: ["resize"]
5281      },
5282      events: {
5283        beforeitemshow(e) {
5284          if (!this.dragging && this.sets && this.stack.length < 2 && !includes(this.sets, this.index)) {
5285            this.index = this.getValidIndex();
5286          }
5287          const diff = Math.abs(
5288            this.index - this.prevIndex + (this.dir > 0 && this.index < this.prevIndex || this.dir < 0 && this.index > this.prevIndex ? (this.maxIndex + 1) * this.dir : 0)
5289          );
5290          if (!this.dragging && diff > 1) {
5291            for (let i = 0; i < diff; i++) {
5292              this.stack.splice(1, 0, this.dir > 0 ? "next" : "previous");
5293            }
5294            e.preventDefault();
5295            return;
5296          }
5297          const index = this.dir < 0 || !this.slides[this.prevIndex] ? this.index : this.prevIndex;
5298          const avgWidth = getWidth(this.list) / this.length;
5299          this.duration = speedUp(avgWidth / this.velocity) * (dimensions$1(this.slides[index]).width / avgWidth);
5300          this.reorder();
5301        },
5302        itemshow() {
5303          if (~this.prevIndex) {
5304            addClass(this._getTransitioner().getItemIn(), this.clsActive);
5305          }
5306          this.updateActiveClasses(this.prevIndex);
5307        },
5308        itemshown() {
5309          this.updateActiveClasses();
5310        }
5311      },
5312      methods: {
5313        reorder() {
5314          if (this.finite) {
5315            css(this.slides, "order", "");
5316            return;
5317          }
5318          const index = this.dir > 0 && this.slides[this.prevIndex] ? this.prevIndex : this.index;
5319          this.slides.forEach(
5320            (slide, i) => css(
5321              slide,
5322              "order",
5323              this.dir > 0 && i < index ? 1 : this.dir < 0 && i >= this.index ? -1 : ""
5324            )
5325          );
5326          if (!this.center) {
5327            return;
5328          }
5329          const next = this.slides[index];
5330          let width = dimensions$1(this.list).width / 2 - dimensions$1(next).width / 2;
5331          let j = 0;
5332          while (width > 0) {
5333            const slideIndex = this.getIndex(--j + index, index);
5334            const slide = this.slides[slideIndex];
5335            css(slide, "order", slideIndex > index ? -2 : -1);
5336            width -= dimensions$1(slide).width;
5337          }
5338        },
5339        updateActiveClasses(currentIndex = this.index) {
5340          let actives = this._getTransitioner(currentIndex).getActives();
5341          if (this.active !== "all") {
5342            actives = [this.slides[this.getValidIndex(currentIndex)]];
5343          }
5344          const activeClasses = [
5345            this.clsActive,
5346            !this.sets || includes(this.sets, toFloat(this.index)) ? this.clsActivated : ""
5347          ];
5348          for (const slide of this.slides) {
5349            const active = includes(actives, slide);
5350            toggleClass(slide, activeClasses, active);
5351            attr(slide, "aria-hidden", !active);
5352            for (const focusable of $$(selFocusable, slide)) {
5353              if (!hasOwn(focusable, "_tabindex")) {
5354                focusable._tabindex = attr(focusable, "tabindex");
5355              }
5356              attr(focusable, "tabindex", active ? focusable._tabindex : -1);
5357            }
5358          }
5359        },
5360        getValidIndex(index = this.index, prevIndex = this.prevIndex) {
5361          index = this.getIndex(index, prevIndex);
5362          if (!this.sets) {
5363            return index;
5364          }
5365          let prev;
5366          do {
5367            if (includes(this.sets, index)) {
5368              return index;
5369            }
5370            prev = index;
5371            index = this.getIndex(index + this.dir, prevIndex);
5372          } while (index !== prev);
5373          return index;
5374        },
5375        getAdjacentSlides() {
5376          const { width } = dimensions$1(this.list);
5377          const left = -width;
5378          const right = width * 2;
5379          const slideWidth = dimensions$1(this.slides[this.index]).width;
5380          const slideLeft = this.center ? width / 2 - slideWidth / 2 : 0;
5381          const slides = /* @__PURE__ */ new Set();
5382          for (const i of [-1, 1]) {
5383            let currentLeft = slideLeft + (i > 0 ? slideWidth : 0);
5384            let j = 0;
5385            do {
5386              const slide = this.slides[this.getIndex(this.index + i + j++ * i)];
5387              currentLeft += dimensions$1(slide).width * i;
5388              slides.add(slide);
5389            } while (this.length > j && currentLeft > left && currentLeft < right);
5390          }
5391          return Array.from(slides);
5392        },
5393        getIndexAt(percent) {
5394          let index = -1;
5395          const scrollDist = this.center ? getWidth(this.list) - (dimensions$1(this.slides[0]).width / 2 + dimensions$1(last(this.slides)).width / 2) : getWidth(this.list, this.maxIndex);
5396          let dist = percent * scrollDist;
5397          let slidePercent = 0;
5398          do {
5399            const slideWidth = dimensions$1(this.slides[++index]).width;
5400            const slideDist = this.center ? slideWidth / 2 + dimensions$1(this.slides[index + 1]).width / 2 : slideWidth;
5401            slidePercent = dist / slideDist % 1;
5402            dist -= slideDist;
5403          } while (dist >= 0 && index < this.maxIndex);
5404          return [index, slidePercent];
5405        }
5406      }
5407    };
5408    function isFinite(list, center) {
5409      if (!list || list.length < 2) {
5410        return true;
5411      }
5412      const { width: listWidth } = dimensions$1(list);
5413      if (!center) {
5414        return Math.ceil(getWidth(list)) < Math.trunc(listWidth + getMaxElWidth(list));
5415      }
5416      const slides = children(list);
5417      const listHalf = Math.trunc(listWidth / 2);
5418      for (const index in slides) {
5419        const slide = slides[index];
5420        const slideWidth = dimensions$1(slide).width;
5421        const slidesInView = /* @__PURE__ */ new Set([slide]);
5422        let diff = 0;
5423        for (const i of [-1, 1]) {
5424          let left = slideWidth / 2;
5425          let j = 0;
5426          while (left < listHalf) {
5427            const nextSlide = slides[getIndex(+index + i + j++ * i, slides)];
5428            if (slidesInView.has(nextSlide)) {
5429              return true;
5430            }
5431            left += dimensions$1(nextSlide).width;
5432            slidesInView.add(nextSlide);
5433          }
5434          diff = Math.max(
5435            diff,
5436            slideWidth / 2 + dimensions$1(slides[getIndex(+index + i, slides)]).width / 2 - (left - listHalf)
5437          );
5438        }
5439        if (Math.trunc(diff) > sumBy(
5440          slides.filter((slide2) => !slidesInView.has(slide2)),
5441          (slide2) => dimensions$1(slide2).width
5442        )) {
5443          return true;
5444        }
5445      }
5446      return false;
5447    }
5448    function getMaxElWidth(list) {
5449      return Math.max(0, ...children(list).map((el) => dimensions$1(el).width));
5450    }
5451
5452    var sliderParallax = {
5453      mixins: [Parallax],
5454      beforeConnect() {
5455        this.item = this.$el.closest(`.${this.$options.id.replace("parallax", "items")} > *`);
5456      },
5457      disconnected() {
5458        this.item = null;
5459      },
5460      events: [
5461        {
5462          name: "itemin itemout",
5463          self: true,
5464          el() {
5465            return this.item;
5466          },
5467          handler({ type, detail: { percent, duration, timing, dir } }) {
5468            fastdom.read(() => {
5469              if (!this.matchMedia) {
5470                return;
5471              }
5472              const propsFrom = this.getCss(getCurrentPercent(type, dir, percent));
5473              const propsTo = this.getCss(isIn(type) ? 0.5 : dir > 0 ? 1 : 0);
5474              fastdom.write(() => {
5475                css(this.$el, propsFrom);
5476                Transition.start(this.$el, propsTo, duration, timing).catch(noop);
5477              });
5478            });
5479          }
5480        },
5481        {
5482          name: "transitioncanceled transitionend",
5483          self: true,
5484          el() {
5485            return this.item;
5486          },
5487          handler() {
5488            Transition.cancel(this.$el);
5489          }
5490        },
5491        {
5492          name: "itemtranslatein itemtranslateout",
5493          self: true,
5494          el() {
5495            return this.item;
5496          },
5497          handler({ type, detail: { percent, dir } }) {
5498            fastdom.read(() => {
5499              if (!this.matchMedia) {
5500                this.reset();
5501                return;
5502              }
5503              const props = this.getCss(getCurrentPercent(type, dir, percent));
5504              fastdom.write(() => css(this.$el, props));
5505            });
5506          }
5507        }
5508      ]
5509    };
5510    function isIn(type) {
5511      return endsWith(type, "in");
5512    }
5513    function getCurrentPercent(type, dir, percent) {
5514      percent /= 2;
5515      return isIn(type) ^ dir < 0 ? percent : 1 - percent;
5516    }
5517
5518    var Animations = {
5519      ...Animations$2,
5520      fade: {
5521        show() {
5522          return [{ opacity: 0, zIndex: 0 }, { zIndex: -1 }];
5523        },
5524        percent(current) {
5525          return 1 - css(current, "opacity");
5526        },
5527        translate(percent) {
5528          return [{ opacity: 1 - percent, zIndex: 0 }, { zIndex: -1 }];
5529        }
5530      },
5531      scale: {
5532        show() {
5533          return [{ opacity: 0, transform: scale3d(1 + 0.5), zIndex: 0 }, { zIndex: -1 }];
5534        },
5535        percent(current) {
5536          return 1 - css(current, "opacity");
5537        },
5538        translate(percent) {
5539          return [
5540            { opacity: 1 - percent, transform: scale3d(1 + 0.5 * percent), zIndex: 0 },
5541            { zIndex: -1 }
5542          ];
5543        }
5544      },
5545      pull: {
5546        show(dir) {
5547          return dir < 0 ? [
5548            { transform: translate(30), zIndex: -1 },
5549            { transform: translate(), zIndex: 0 }
5550          ] : [
5551            { transform: translate(-100), zIndex: 0 },
5552            { transform: translate(), zIndex: -1 }
5553          ];
5554        },
5555        percent(current, next, dir) {
5556          return dir < 0 ? 1 - translated(next) : translated(current);
5557        },
5558        translate(percent, dir) {
5559          return dir < 0 ? [
5560            { transform: translate(30 * percent), zIndex: -1 },
5561            { transform: translate(-100 * (1 - percent)), zIndex: 0 }
5562          ] : [
5563            { transform: translate(-percent * 100), zIndex: 0 },
5564            { transform: translate(30 * (1 - percent)), zIndex: -1 }
5565          ];
5566        }
5567      },
5568      push: {
5569        show(dir) {
5570          return dir < 0 ? [
5571            { transform: translate(100), zIndex: 0 },
5572            { transform: translate(), zIndex: -1 }
5573          ] : [
5574            { transform: translate(-30), zIndex: -1 },
5575            { transform: translate(), zIndex: 0 }
5576          ];
5577        },
5578        percent(current, next, dir) {
5579          return dir > 0 ? 1 - translated(next) : translated(current);
5580        },
5581        translate(percent, dir) {
5582          return dir < 0 ? [
5583            { transform: translate(percent * 100), zIndex: 0 },
5584            { transform: translate(-30 * (1 - percent)), zIndex: -1 }
5585          ] : [
5586            { transform: translate(-30 * percent), zIndex: -1 },
5587            { transform: translate(100 * (1 - percent)), zIndex: 0 }
5588          ];
5589        }
5590      }
5591    };
5592
5593    var slideshow = {
5594      mixins: [Class, Slideshow, SliderReactive, SliderParallax, SliderPreload],
5595      props: {
5596        ratio: String,
5597        minHeight: String,
5598        maxHeight: String
5599      },
5600      data: {
5601        ratio: "16:9",
5602        minHeight: void 0,
5603        maxHeight: void 0,
5604        selList: ".uk-slideshow-items",
5605        attrItem: "uk-slideshow-item",
5606        selNav: ".uk-slideshow-nav",
5607        Animations
5608      },
5609      watch: {
5610        list(list) {
5611          css(list, {
5612            aspectRatio: this.ratio ? this.ratio.replace(":", "/") : void 0,
5613            minHeight: this.minHeight,
5614            maxHeight: this.maxHeight,
5615            minWidth: "100%",
5616            maxWidth: "100%"
5617          });
5618        }
5619      },
5620      methods: {
5621        getAdjacentSlides() {
5622          return [1, -1].map((i) => this.slides[this.getIndex(this.index + i)]);
5623        }
5624      }
5625    };
5626
5627    var sortable = {
5628      mixins: [Class, Animate],
5629      props: {
5630        group: String,
5631        threshold: Number,
5632        clsItem: String,
5633        clsPlaceholder: String,
5634        clsDrag: String,
5635        clsDragState: String,
5636        clsBase: String,
5637        clsNoDrag: String,
5638        clsEmpty: String,
5639        clsCustom: String,
5640        handle: String
5641      },
5642      data: {
5643        group: false,
5644        threshold: 5,
5645        clsItem: "uk-sortable-item",
5646        clsPlaceholder: "uk-sortable-placeholder",
5647        clsDrag: "uk-sortable-drag",
5648        clsDragState: "uk-drag",
5649        clsBase: "uk-sortable",
5650        clsNoDrag: "uk-sortable-nodrag",
5651        clsEmpty: "uk-sortable-empty",
5652        clsCustom: "",
5653        handle: false,
5654        pos: {}
5655      },
5656      events: {
5657        name: pointerDown$1,
5658        passive: false,
5659        handler: "init"
5660      },
5661      computed: {
5662        target: (_, $el) => ($el.tBodies || [$el])[0],
5663        items() {
5664          return children(this.target);
5665        },
5666        isEmpty() {
5667          return !this.items.length;
5668        },
5669        handles({ handle }, $el) {
5670          return handle ? $$(handle, $el) : this.items;
5671        }
5672      },
5673      watch: {
5674        isEmpty(empty) {
5675          toggleClass(this.target, this.clsEmpty, empty);
5676        },
5677        handles(handles, prev) {
5678          css(prev, { touchAction: "", userSelect: "" });
5679          css(handles, { touchAction: "none", userSelect: "none" });
5680        }
5681      },
5682      update: {
5683        write(data) {
5684          if (!this.drag || !parent(this.placeholder)) {
5685            return;
5686          }
5687          const {
5688            pos: { x, y },
5689            origin: { offsetTop, offsetLeft },
5690            placeholder
5691          } = this;
5692          css(this.drag, {
5693            top: y - offsetTop,
5694            left: x - offsetLeft
5695          });
5696          const sortable = this.getSortable(document.elementFromPoint(x, y));
5697          if (!sortable) {
5698            return;
5699          }
5700          const { items } = sortable;
5701          if (items.some(Transition.inProgress)) {
5702            return;
5703          }
5704          const target = findTarget(items, { x, y });
5705          if (items.length && (!target || target === placeholder)) {
5706            return;
5707          }
5708          const previous = this.getSortable(placeholder);
5709          const insertTarget = findInsertTarget(
5710            sortable.target,
5711            target,
5712            placeholder,
5713            x,
5714            y,
5715            sortable === previous && data.moved !== target
5716          );
5717          if (insertTarget === false) {
5718            return;
5719          }
5720          if (insertTarget && placeholder === insertTarget) {
5721            return;
5722          }
5723          if (sortable !== previous) {
5724            previous.remove(placeholder);
5725            data.moved = target;
5726          } else {
5727            delete data.moved;
5728          }
5729          sortable.insert(placeholder, insertTarget);
5730          this.touched.add(sortable);
5731        },
5732        events: ["move"]
5733      },
5734      methods: {
5735        init(e) {
5736          const { target, button, defaultPrevented } = e;
5737          const [placeholder] = this.items.filter((el) => el.contains(target));
5738          if (!placeholder || defaultPrevented || button > 0 || isInput(target) || target.closest(`.${this.clsNoDrag}`) || this.handle && !target.closest(this.handle)) {
5739            return;
5740          }
5741          e.preventDefault();
5742          this.pos = getEventPos(e);
5743          this.touched = /* @__PURE__ */ new Set([this]);
5744          this.placeholder = placeholder;
5745          this.origin = { target, index: index(placeholder), ...this.pos };
5746          on(document, pointerMove$1, this.move);
5747          on(document, pointerUp$1, this.end);
5748          if (!this.threshold) {
5749            this.start(e);
5750          }
5751        },
5752        start(e) {
5753          this.drag = appendDrag(this.$container, this.placeholder);
5754          const { left, top } = dimensions$1(this.placeholder);
5755          assign(this.origin, { offsetLeft: this.pos.x - left, offsetTop: this.pos.y - top });
5756          addClass(this.drag, this.clsDrag, this.clsCustom);
5757          addClass(this.placeholder, this.clsPlaceholder);
5758          addClass(this.items, this.clsItem);
5759          addClass(document.documentElement, this.clsDragState);
5760          trigger(this.$el, "start", [this, this.placeholder]);
5761          trackScroll(this.pos);
5762          this.move(e);
5763        },
5764        move: throttle(function(e) {
5765          assign(this.pos, getEventPos(e));
5766          if (this.drag) {
5767            this.$emit("move");
5768          } else if (Math.abs(this.pos.x - this.origin.x) > this.threshold || Math.abs(this.pos.y - this.origin.y) > this.threshold) {
5769            this.start(e);
5770          }
5771        }),
5772        end() {
5773          off(document, pointerMove$1, this.move);
5774          off(document, pointerUp$1, this.end);
5775          if (!this.drag) {
5776            return;
5777          }
5778          untrackScroll();
5779          const sortable = this.getSortable(this.placeholder);
5780          if (this === sortable) {
5781            if (this.origin.index !== index(this.placeholder)) {
5782              trigger(this.$el, "moved", [this, this.placeholder]);
5783            }
5784          } else {
5785            trigger(sortable.$el, "added", [sortable, this.placeholder]);
5786            trigger(this.$el, "removed", [this, this.placeholder]);
5787          }
5788          trigger(this.$el, "stop", [this, this.placeholder]);
5789          remove$1(this.drag);
5790          this.drag = null;
5791          for (const { clsPlaceholder, clsItem } of this.touched) {
5792            for (const sortable2 of this.touched) {
5793              removeClass(sortable2.items, clsPlaceholder, clsItem);
5794            }
5795          }
5796          this.touched = null;
5797          removeClass(document.documentElement, this.clsDragState);
5798        },
5799        insert(element, target) {
5800          addClass(this.items, this.clsItem);
5801          if (target && target.previousElementSibling !== element) {
5802            this.animate(() => before(target, element));
5803          } else if (!target && this.target.lastElementChild !== element) {
5804            this.animate(() => append(this.target, element));
5805          }
5806        },
5807        remove(element) {
5808          if (this.target.contains(element)) {
5809            this.animate(() => remove$1(element));
5810          }
5811        },
5812        getSortable(element) {
5813          do {
5814            const sortable = this.$getComponent(element, "sortable");
5815            if (sortable && (sortable === this || this.group !== false && sortable.group === this.group)) {
5816              return sortable;
5817            }
5818          } while (element = parent(element));
5819        }
5820      }
5821    };
5822    let trackTimer;
5823    function trackScroll(pos) {
5824      let last = Date.now();
5825      trackTimer = setInterval(() => {
5826        let { x, y } = pos;
5827        y += document.scrollingElement.scrollTop;
5828        const dist = (Date.now() - last) * 0.3;
5829        last = Date.now();
5830        scrollParents(document.elementFromPoint(x, pos.y)).reverse().some((scrollEl) => {
5831          let { scrollTop: scroll, scrollHeight } = scrollEl;
5832          const { top, bottom, height: height2 } = offsetViewport(scrollEl);
5833          if (top < y && top + 35 > y) {
5834            scroll -= dist;
5835          } else if (bottom > y && bottom - 35 < y) {
5836            scroll += dist;
5837          } else {
5838            return;
5839          }
5840          if (scroll > 0 && scroll < scrollHeight - height2) {
5841            scrollEl.scrollTop = scroll;
5842            return true;
5843          }
5844        });
5845      }, 15);
5846    }
5847    function untrackScroll() {
5848      clearInterval(trackTimer);
5849    }
5850    function appendDrag(container, element) {
5851      let clone;
5852      if (isTag(element, "li", "tr")) {
5853        clone = $("<div>");
5854        append(clone, element.cloneNode(true).children);
5855        for (const attribute of element.getAttributeNames()) {
5856          attr(clone, attribute, element.getAttribute(attribute));
5857        }
5858      } else {
5859        clone = element.cloneNode(true);
5860      }
5861      append(container, clone);
5862      css(clone, "margin", "0", "important");
5863      css(clone, {
5864        boxSizing: "border-box",
5865        width: element.offsetWidth,
5866        height: element.offsetHeight,
5867        padding: css(element, "padding")
5868      });
5869      height(clone.firstElementChild, height(element.firstElementChild));
5870      return clone;
5871    }
5872    function findTarget(items, point) {
5873      return items[findIndex(items, (item) => pointInRect(point, dimensions$1(item)))];
5874    }
5875    function findInsertTarget(list, target, placeholder, x, y, sameList) {
5876      if (!children(list).length) {
5877        return;
5878      }
5879      const rect = dimensions$1(target);
5880      if (!sameList) {
5881        if (!isHorizontal(list, placeholder)) {
5882          return y < rect.top + rect.height / 2 ? target : target.nextElementSibling;
5883        }
5884        return target;
5885      }
5886      const placeholderRect = dimensions$1(placeholder);
5887      const sameRow = linesIntersect(
5888        [rect.top, rect.bottom],
5889        [placeholderRect.top, placeholderRect.bottom]
5890      );
5891      const [pointerPos, lengthProp, startProp, endProp] = sameRow ? [x, "width", "left", "right"] : [y, "height", "top", "bottom"];
5892      const diff = placeholderRect[lengthProp] < rect[lengthProp] ? rect[lengthProp] - placeholderRect[lengthProp] : 0;
5893      if (placeholderRect[startProp] < rect[startProp]) {
5894        if (diff && pointerPos < rect[startProp] + diff) {
5895          return false;
5896        }
5897        return target.nextElementSibling;
5898      }
5899      if (diff && pointerPos > rect[endProp] - diff) {
5900        return false;
5901      }
5902      return target;
5903    }
5904    function isHorizontal(list, placeholder) {
5905      const single = children(list).length === 1;
5906      if (single) {
5907        append(list, placeholder);
5908      }
5909      const items = children(list);
5910      const isHorizontal2 = items.some((el, i) => {
5911        const rectA = dimensions$1(el);
5912        return items.slice(i + 1).some((el2) => {
5913          const rectB = dimensions$1(el2);
5914          return !linesIntersect([rectA.left, rectA.right], [rectB.left, rectB.right]);
5915        });
5916      });
5917      if (single) {
5918        remove$1(placeholder);
5919      }
5920      return isHorizontal2;
5921    }
5922    function linesIntersect(lineA, lineB) {
5923      return lineA[1] > lineB[0] && lineB[1] > lineA[0];
5924    }
5925    function throttle(fn) {
5926      let throttled;
5927      return function(...args) {
5928        if (!throttled) {
5929          throttled = true;
5930          requestAnimationFrame(() => {
5931            throttled = false;
5932            fn.call(this, ...args);
5933          });
5934        }
5935      };
5936    }
5937
5938    var Position = {
5939      props: {
5940        pos: String,
5941        offset: null,
5942        flip: Boolean,
5943        shift: Boolean,
5944        inset: Boolean
5945      },
5946      data: {
5947        pos: `bottom-${isRtl ? "right" : "left"}`,
5948        offset: false,
5949        flip: true,
5950        shift: true,
5951        inset: false
5952      },
5953      connected() {
5954        this.pos = this.$props.pos.split("-").concat("center").slice(0, 2);
5955        [this.dir, this.align] = this.pos;
5956        this.axis = includes(["top", "bottom"], this.dir) ? "y" : "x";
5957      },
5958      methods: {
5959        positionAt(element, target, boundary) {
5960          let offset = [this.getPositionOffset(element), this.getShiftOffset(element)];
5961          const placement = [this.flip && "flip", this.shift && "shift"];
5962          const attach = {
5963            element: [this.inset ? this.dir : flipPosition(this.dir), this.align],
5964            target: [this.dir, this.align]
5965          };
5966          if (this.axis === "y") {
5967            for (const prop in attach) {
5968              attach[prop].reverse();
5969            }
5970            offset.reverse();
5971            placement.reverse();
5972          }
5973          const restoreScrollPosition = storeScrollPosition(element);
5974          const elDim = dimensions$1(element);
5975          css(element, { top: -elDim.height, left: -elDim.width });
5976          positionAt(element, target, {
5977            attach,
5978            offset,
5979            boundary,
5980            placement,
5981            viewportOffset: this.getViewportOffset(element)
5982          });
5983          restoreScrollPosition();
5984        },
5985        getPositionOffset(element = this.$el) {
5986          return toPx(
5987            this.offset === false ? css(element, "--uk-position-offset") : this.offset,
5988            this.axis === "x" ? "width" : "height",
5989            element
5990          ) * (includes(["left", "top"], this.dir) ? -1 : 1) * (this.inset ? -1 : 1);
5991        },
5992        getShiftOffset(element = this.$el) {
5993          return this.align === "center" ? 0 : toPx(
5994            css(element, "--uk-position-shift-offset"),
5995            this.axis === "y" ? "width" : "height",
5996            element
5997          ) * (includes(["left", "top"], this.align) ? 1 : -1);
5998        },
5999        getViewportOffset(element) {
6000          return toPx(css(element, "--uk-position-viewport-offset"));
6001        }
6002      }
6003    };
6004    function storeScrollPosition(element) {
6005      const scrollElement = scrollParent(element);
6006      const { scrollTop } = scrollElement;
6007      return () => {
6008        if (scrollTop !== scrollElement.scrollTop) {
6009          scrollElement.scrollTop = scrollTop;
6010        }
6011      };
6012    }
6013
6014    var tooltip = {
6015      mixins: [Container, Togglable, Position],
6016      data: {
6017        pos: "top",
6018        animation: ["uk-animation-scale-up"],
6019        duration: 100,
6020        cls: "uk-active"
6021      },
6022      connected() {
6023        makeFocusable(this.$el);
6024      },
6025      disconnected() {
6026        this.hide();
6027      },
6028      methods: {
6029        show() {
6030          if (this.isToggled(this.tooltip || null)) {
6031            return;
6032          }
6033          const { delay = 0, title } = parseProps(this.$options);
6034          if (!title) {
6035            return;
6036          }
6037          const titleAttr = attr(this.$el, "title");
6038          const off = on(this.$el, ["blur", pointerLeave], (e) => !isTouch(e) && this.hide());
6039          this.reset = () => {
6040            attr(this.$el, { title: titleAttr, "aria-describedby": null });
6041            off();
6042          };
6043          const id = generateId(this);
6044          attr(this.$el, { title: null, "aria-describedby": id });
6045          clearTimeout(this.showTimer);
6046          this.showTimer = setTimeout(() => this._show(title, id), delay);
6047        },
6048        async hide() {
6049          var _a;
6050          if (matches(this.$el, "input:focus")) {
6051            return;
6052          }
6053          clearTimeout(this.showTimer);
6054          if (this.isToggled(this.tooltip || null)) {
6055            await this.toggleElement(this.tooltip, false, false);
6056          }
6057          (_a = this.reset) == null ? void 0 : _a.call(this);
6058          remove$1(this.tooltip);
6059          this.tooltip = null;
6060        },
6061        async _show(title, id) {
6062          this.tooltip = append(
6063            this.container,
6064            `<div id="${id}" class="uk-${this.$options.name}" role="tooltip"> <div class="uk-${this.$options.name}-inner">${title}</div> </div>`
6065          );
6066          on(this.tooltip, "toggled", (e, toggled) => {
6067            if (!toggled) {
6068              return;
6069            }
6070            const update = () => this.positionAt(this.tooltip, this.$el);
6071            update();
6072            const [dir, align] = getAlignment(this.tooltip, this.$el, this.pos);
6073            this.origin = this.axis === "y" ? `${flipPosition(dir)}-${align}` : `${align}-${flipPosition(dir)}`;
6074            const handlers = [
6075              once(
6076                document,
6077                `keydown ${pointerDown$1}`,
6078                this.hide,
6079                false,
6080                (e2) => e2.type === pointerDown$1 && !this.$el.contains(e2.target) || e2.type === "keydown" && e2.keyCode === keyMap.ESC
6081              ),
6082              on([document, ...overflowParents(this.$el)], "scroll", update, {
6083                passive: true
6084              })
6085            ];
6086            once(this.tooltip, "hide", () => handlers.forEach((handler) => handler()), {
6087              self: true
6088            });
6089          });
6090          if (!await this.toggleElement(this.tooltip, true)) {
6091            this.hide();
6092          }
6093        }
6094      },
6095      events: {
6096        // Clicking a button does not give it focus on all browsers and platforms
6097        // https://developer.mozilla.org/en-US/docs/Web/HTML/Element/button#clicking_and_focus
6098        [`focus ${pointerEnter} ${pointerDown$1}`](e) {
6099          if (!isTouch(e) || e.type === pointerDown$1) {
6100            this.show();
6101          }
6102        }
6103      }
6104    };
6105    function makeFocusable(el) {
6106      if (!isFocusable(el)) {
6107        attr(el, "tabindex", "0");
6108      }
6109    }
6110    function getAlignment(el, target, [dir, align]) {
6111      const elOffset = offset(el);
6112      const targetOffset = offset(target);
6113      const properties = [
6114        ["left", "right"],
6115        ["top", "bottom"]
6116      ];
6117      for (const props2 of properties) {
6118        if (elOffset[props2[0]] >= targetOffset[props2[1]]) {
6119          dir = props2[1];
6120          break;
6121        }
6122        if (elOffset[props2[1]] <= targetOffset[props2[0]]) {
6123          dir = props2[0];
6124          break;
6125        }
6126      }
6127      const props = includes(properties[0], dir) ? properties[1] : properties[0];
6128      align = props.find((prop) => elOffset[prop] === targetOffset[prop]) || "center";
6129      return [dir, align];
6130    }
6131    function parseProps(options) {
6132      const { el, id, data: data$1 } = options;
6133      return ["delay", "title"].reduce((obj, key) => ({ [key]: data(el, key), ...obj }), {
6134        ...parseOptions(data(el, id), ["title"]),
6135        ...data$1
6136      });
6137    }
6138
6139    var upload = {
6140      mixins: [I18n],
6141      i18n: {
6142        invalidMime: "Invalid File Type: %s",
6143        invalidName: "Invalid File Name: %s",
6144        invalidSize: "Invalid File Size: %s Kilobytes Max"
6145      },
6146      props: {
6147        allow: String,
6148        clsDragover: String,
6149        concurrent: Number,
6150        maxSize: Number,
6151        method: String,
6152        mime: String,
6153        multiple: Boolean,
6154        name: String,
6155        params: Object,
6156        type: String,
6157        url: String
6158      },
6159      data: {
6160        allow: false,
6161        clsDragover: "uk-dragover",
6162        concurrent: 1,
6163        maxSize: 0,
6164        method: "POST",
6165        mime: false,
6166        multiple: false,
6167        name: "files[]",
6168        params: {},
6169        type: "",
6170        url: "",
6171        abort: noop,
6172        beforeAll: noop,
6173        beforeSend: noop,
6174        complete: noop,
6175        completeAll: noop,
6176        error: noop,
6177        fail: noop,
6178        load: noop,
6179        loadEnd: noop,
6180        loadStart: noop,
6181        progress: noop
6182      },
6183      events: {
6184        change(e) {
6185          if (!matches(e.target, 'input[type="file"]')) {
6186            return;
6187          }
6188          e.preventDefault();
6189          if (e.target.files) {
6190            this.upload(e.target.files);
6191          }
6192          e.target.value = "";
6193        },
6194        drop(e) {
6195          stop(e);
6196          const transfer = e.dataTransfer;
6197          if (!(transfer == null ? void 0 : transfer.files)) {
6198            return;
6199          }
6200          removeClass(this.$el, this.clsDragover);
6201          this.upload(transfer.files);
6202        },
6203        dragenter(e) {
6204          stop(e);
6205        },
6206        dragover(e) {
6207          stop(e);
6208          addClass(this.$el, this.clsDragover);
6209        },
6210        dragleave(e) {
6211          stop(e);
6212          removeClass(this.$el, this.clsDragover);
6213        }
6214      },
6215      methods: {
6216        async upload(files) {
6217          files = toArray(files);
6218          if (!files.length) {
6219            return;
6220          }
6221          trigger(this.$el, "upload", [files]);
6222          for (const file of files) {
6223            if (this.maxSize && this.maxSize * 1e3 < file.size) {
6224              this.fail(this.t("invalidSize", this.maxSize));
6225              return;
6226            }
6227            if (this.allow && !match$1(this.allow, file.name)) {
6228              this.fail(this.t("invalidName", this.allow));
6229              return;
6230            }
6231            if (this.mime && !match$1(this.mime, file.type)) {
6232              this.fail(this.t("invalidMime", this.mime));
6233              return;
6234            }
6235          }
6236          if (!this.multiple) {
6237            files = files.slice(0, 1);
6238          }
6239          this.beforeAll(this, files);
6240          const chunks = chunk(files, this.concurrent);
6241          const upload = async (files2) => {
6242            const data = new FormData();
6243            files2.forEach((file) => data.append(this.name, file));
6244            for (const key in this.params) {
6245              data.append(key, this.params[key]);
6246            }
6247            try {
6248              const xhr = await ajax(this.url, {
6249                data,
6250                method: this.method,
6251                responseType: this.type,
6252                beforeSend: (env) => {
6253                  const { xhr: xhr2 } = env;
6254                  on(xhr2.upload, "progress", this.progress);
6255                  for (const type of ["loadStart", "load", "loadEnd", "abort"]) {
6256                    on(xhr2, type.toLowerCase(), this[type]);
6257                  }
6258                  return this.beforeSend(env);
6259                }
6260              });
6261              this.complete(xhr);
6262              if (chunks.length) {
6263                await upload(chunks.shift());
6264              } else {
6265                this.completeAll(xhr);
6266              }
6267            } catch (e) {
6268              this.error(e);
6269            }
6270          };
6271          await upload(chunks.shift());
6272        }
6273      }
6274    };
6275    function match$1(pattern, path) {
6276      return path.match(
6277        new RegExp(
6278          `^${pattern.replace(/\//g, "\\/").replace(/\*\*/g, "(\\/[^\\/]+)*").replace(/\*/g, "[^\\/]+").replace(/((?!\\))\?/g, "$1.")}$`,
6279          "i"
6280        )
6281      );
6282    }
6283    function chunk(files, size) {
6284      const chunks = [];
6285      for (let i = 0; i < files.length; i += size) {
6286        chunks.push(files.slice(i, i + size));
6287      }
6288      return chunks;
6289    }
6290    function stop(e) {
6291      e.preventDefault();
6292      e.stopPropagation();
6293    }
6294    function ajax(url, options) {
6295      const env = {
6296        data: null,
6297        method: "GET",
6298        headers: {},
6299        xhr: new XMLHttpRequest(),
6300        beforeSend: noop,
6301        responseType: "",
6302        ...options
6303      };
6304      return Promise.resolve().then(() => env.beforeSend(env)).then(() => send(url, env));
6305    }
6306    function send(url, env) {
6307      return new Promise((resolve, reject) => {
6308        const { xhr } = env;
6309        for (const prop in env) {
6310          if (prop in xhr) {
6311            try {
6312              xhr[prop] = env[prop];
6313            } catch (e) {
6314            }
6315          }
6316        }
6317        xhr.open(env.method.toUpperCase(), url);
6318        for (const header in env.headers) {
6319          xhr.setRequestHeader(header, env.headers[header]);
6320        }
6321        on(xhr, "load", () => {
6322          if (xhr.status === 0 || xhr.status >= 200 && xhr.status < 300 || xhr.status === 304) {
6323            resolve(xhr);
6324          } else {
6325            reject(
6326              assign(Error(xhr.statusText), {
6327                xhr,
6328                status: xhr.status
6329              })
6330            );
6331          }
6332        });
6333        on(xhr, "error", () => reject(assign(Error("Network Error"), { xhr })));
6334        on(xhr, "timeout", () => reject(assign(Error("Network Timeout"), { xhr })));
6335        xhr.send(env.data);
6336      });
6337    }
6338
6339    var components$1 = /*#__PURE__*/Object.freeze({
6340        __proto__: null,
6341        Countdown: countdown,
6342        Filter: filter,
6343        Lightbox: lightbox,
6344        LightboxPanel: LightboxPanel,
6345        Notification: notification,
6346        Parallax: parallax,
6347        Slider: slider,
6348        SliderParallax: sliderParallax,
6349        Slideshow: slideshow,
6350        SlideshowParallax: sliderParallax,
6351        Sortable: sortable,
6352        Tooltip: tooltip,
6353        Upload: upload
6354    });
6355
6356    function boot(App) {
6357      if (inBrowser && window.MutationObserver) {
6358        if (document.body) {
6359          requestAnimationFrame(() => init(App));
6360        } else {
6361          new MutationObserver((records, observer) => {
6362            if (document.body) {
6363              init(App);
6364              observer.disconnect();
6365            }
6366          }).observe(document.documentElement, { childList: true });
6367        }
6368      }
6369    }
6370    function init(App) {
6371      trigger(document, "uikit:init", App);
6372      if (document.body) {
6373        apply(document.body, connect);
6374      }
6375      new MutationObserver((records) => records.forEach(applyChildListMutation)).observe(document, {
6376        subtree: true,
6377        childList: true
6378      });
6379      new MutationObserver((records) => records.forEach(applyAttributeMutation)).observe(document, {
6380        subtree: true,
6381        attributes: true
6382      });
6383      App._initialized = true;
6384    }
6385    function applyChildListMutation({ addedNodes, removedNodes }) {
6386      for (const node of addedNodes) {
6387        apply(node, connect);
6388      }
6389      for (const node of removedNodes) {
6390        apply(node, disconnect);
6391      }
6392    }
6393    function applyAttributeMutation({ target, attributeName }) {
6394      var _a;
6395      const name = getComponentName(attributeName);
6396      if (name) {
6397        if (hasAttr(target, attributeName)) {
6398          createComponent(name, target);
6399        } else {
6400          (_a = getComponent(target, name)) == null ? void 0 : _a.$destroy();
6401        }
6402      }
6403    }
6404    function connect(node) {
6405      const components2 = getComponents(node);
6406      for (const name in components2) {
6407        callConnected(components2[name]);
6408      }
6409      for (const attributeName of node.getAttributeNames()) {
6410        const name = getComponentName(attributeName);
6411        name && createComponent(name, node);
6412      }
6413    }
6414    function disconnect(node) {
6415      const components2 = getComponents(node);
6416      for (const name in components2) {
6417        callDisconnected(components2[name]);
6418      }
6419    }
6420    function getComponentName(attribute) {
6421      if (startsWith(attribute, "data-")) {
6422        attribute = attribute.slice(5);
6423      }
6424      const cmp = components$2[attribute];
6425      return cmp && (cmp.options || cmp).name;
6426    }
6427
6428    globalApi(App);
6429    instanceApi(App);
6430
6431    var Accordion = {
6432      mixins: [Class, Togglable],
6433      props: {
6434        animation: Boolean,
6435        targets: String,
6436        active: null,
6437        collapsible: Boolean,
6438        multiple: Boolean,
6439        toggle: String,
6440        content: String,
6441        offset: Number
6442      },
6443      data: {
6444        targets: "> *",
6445        active: false,
6446        animation: true,
6447        collapsible: true,
6448        multiple: false,
6449        clsOpen: "uk-open",
6450        toggle: "> .uk-accordion-title",
6451        content: "> .uk-accordion-content",
6452        offset: 0
6453      },
6454      computed: {
6455        items: ({ targets }, $el) => $$(targets, $el),
6456        toggles({ toggle }) {
6457          return this.items.map((item) => $(toggle, item));
6458        },
6459        contents({ content }) {
6460          return this.items.map((item) => {
6461            var _a;
6462            return ((_a = item._wrapper) == null ? void 0 : _a.firstElementChild) || $(content, item);
6463          });
6464        }
6465      },
6466      watch: {
6467        items(items, prev) {
6468          if (prev || hasClass(items, this.clsOpen)) {
6469            return;
6470          }
6471          const active = this.active !== false && items[Number(this.active)] || !this.collapsible && items[0];
6472          if (active) {
6473            this.toggle(active, false);
6474          }
6475        },
6476        toggles() {
6477          this.$emit();
6478        },
6479        contents(items) {
6480          for (const el of items) {
6481            const isOpen = hasClass(
6482              this.items.find((item) => item.contains(el)),
6483              this.clsOpen
6484            );
6485            hide(el, !isOpen);
6486          }
6487          this.$emit();
6488        }
6489      },
6490      observe: lazyload(),
6491      events: [
6492        {
6493          name: "click keydown",
6494          delegate() {
6495            return `${this.targets} ${this.$props.toggle}`;
6496          },
6497          async handler(e) {
6498            var _a;
6499            if (e.type === "keydown" && e.keyCode !== keyMap.SPACE) {
6500              return;
6501            }
6502            e.preventDefault();
6503            (_a = this._off) == null ? void 0 : _a.call(this);
6504            this._off = keepScrollPosition(e.target);
6505            await this.toggle(index(this.toggles, e.current));
6506            this._off();
6507          }
6508        },
6509        {
6510          name: "shown hidden",
6511          self: true,
6512          delegate() {
6513            return this.targets;
6514          },
6515          handler() {
6516            this.$emit();
6517          }
6518        }
6519      ],
6520      update() {
6521        const activeItems = filter$1(this.items, `.${this.clsOpen}`);
6522        for (const index2 in this.items) {
6523          const toggle = this.toggles[index2];
6524          const content = this.contents[index2];
6525          if (!toggle || !content) {
6526            continue;
6527          }
6528          toggle.id = generateId(this, toggle);
6529          content.id = generateId(this, content);
6530          const active = includes(activeItems, this.items[index2]);
6531          attr(toggle, {
6532            role: isTag(toggle, "a") ? "button" : null,
6533            "aria-controls": content.id,
6534            "aria-expanded": active,
6535            "aria-disabled": !this.collapsible && activeItems.length < 2 && active
6536          });
6537          attr(content, { role: "region", "aria-labelledby": toggle.id });
6538          if (isTag(content, "ul")) {
6539            attr(children(content), "role", "presentation");
6540          }
6541        }
6542      },
6543      methods: {
6544        toggle(item, animate) {
6545          item = this.items[getIndex(item, this.items)];
6546          let items = [item];
6547          const activeItems = filter$1(this.items, `.${this.clsOpen}`);
6548          if (!this.multiple && !includes(activeItems, items[0])) {
6549            items = items.concat(activeItems);
6550          }
6551          if (!this.collapsible && activeItems.length < 2 && includes(activeItems, item)) {
6552            return;
6553          }
6554          return Promise.all(
6555            items.map(
6556              (el) => this.toggleElement(el, !includes(activeItems, el), (el2, show) => {
6557                toggleClass(el2, this.clsOpen, show);
6558                if (animate === false || !this.animation) {
6559                  hide($(this.content, el2), !show);
6560                  return;
6561                }
6562                return transition(el2, show, this);
6563              })
6564            )
6565          );
6566        }
6567      }
6568    };
6569    function hide(el, hide2) {
6570      el && (el.hidden = hide2);
6571    }
6572    async function transition(el, show, { content, duration, velocity, transition: transition2 }) {
6573      var _a;
6574      content = ((_a = el._wrapper) == null ? void 0 : _a.firstElementChild) || $(content, el);
6575      if (!el._wrapper) {
6576        el._wrapper = wrapAll(content, "<div>");
6577      }
6578      const wrapper = el._wrapper;
6579      css(wrapper, "overflow", "hidden");
6580      const currentHeight = toFloat(css(wrapper, "height"));
6581      await Transition.cancel(wrapper);
6582      hide(content, false);
6583      const endHeight = sumBy(["marginTop", "marginBottom"], (prop) => css(content, prop)) + dimensions$1(content).height;
6584      const percent = currentHeight / endHeight;
6585      duration = (velocity * endHeight + duration) * (show ? 1 - percent : percent);
6586      css(wrapper, "height", currentHeight);
6587      await Transition.start(wrapper, { height: show ? endHeight : 0 }, duration, transition2);
6588      unwrap(content);
6589      delete el._wrapper;
6590      if (!show) {
6591        hide(content, true);
6592      }
6593    }
6594    function keepScrollPosition(el) {
6595      const scrollElement = scrollParent(el, true);
6596      let frame;
6597      (function scroll() {
6598        frame = requestAnimationFrame(() => {
6599          const { top } = dimensions$1(el);
6600          if (top < 0) {
6601            scrollElement.scrollTop += top;
6602          }
6603          scroll();
6604        });
6605      })();
6606      return () => requestAnimationFrame(() => cancelAnimationFrame(frame));
6607    }
6608
6609    var alert = {
6610      mixins: [Class, Togglable],
6611      args: "animation",
6612      props: {
6613        animation: Boolean,
6614        close: String
6615      },
6616      data: {
6617        animation: true,
6618        selClose: ".uk-alert-close",
6619        duration: 150
6620      },
6621      events: {
6622        name: "click",
6623        delegate() {
6624          return this.selClose;
6625        },
6626        handler(e) {
6627          e.preventDefault();
6628          this.close();
6629        }
6630      },
6631      methods: {
6632        async close() {
6633          await this.toggleElement(this.$el, false, animate);
6634          this.$destroy(true);
6635        }
6636      }
6637    };
6638    function animate(el, show, { duration, transition, velocity }) {
6639      const height = toFloat(css(el, "height"));
6640      css(el, "height", height);
6641      return Transition.start(
6642        el,
6643        {
6644          height: 0,
6645          marginTop: 0,
6646          marginBottom: 0,
6647          paddingTop: 0,
6648          paddingBottom: 0,
6649          borderTop: 0,
6650          borderBottom: 0,
6651          opacity: 0
6652        },
6653        velocity * height + duration,
6654        transition
6655      );
6656    }
6657
6658    var Video = {
6659      args: "autoplay",
6660      props: {
6661        automute: Boolean,
6662        autoplay: Boolean
6663      },
6664      data: {
6665        automute: false,
6666        autoplay: true
6667      },
6668      beforeConnect() {
6669        if (this.autoplay === "inview" && !hasAttr(this.$el, "preload")) {
6670          this.$el.preload = "none";
6671        }
6672        if (isTag(this.$el, "iframe") && !hasAttr(this.$el, "allow")) {
6673          this.$el.allow = "autoplay";
6674        }
6675        if (this.autoplay === "hover") {
6676          if (isTag(this.$el, "video")) {
6677            this.$el.tabindex = 0;
6678          } else {
6679            this.autoplay = true;
6680          }
6681        }
6682        if (this.automute) {
6683          mute(this.$el);
6684        }
6685      },
6686      events: [
6687        {
6688          name: `${pointerEnter} focusin`,
6689          filter() {
6690            return includes(this.autoplay, "hover");
6691          },
6692          handler(e) {
6693            if (!isTouch(e) || !isPlaying(this.$el)) {
6694              play(this.$el);
6695            } else {
6696              pause(this.$el);
6697            }
6698          }
6699        },
6700        {
6701          name: `${pointerLeave} focusout`,
6702          filter() {
6703            return includes(this.autoplay, "hover");
6704          },
6705          handler(e) {
6706            if (!isTouch(e)) {
6707              pause(this.$el);
6708            }
6709          }
6710        }
6711      ],
6712      observe: [
6713        intersection({
6714          filter: ({ $el, autoplay }) => autoplay && autoplay !== "hover" && isVideo($el),
6715          handler([{ isIntersecting }]) {
6716            if (!document.fullscreenElement) {
6717              if (isIntersecting) {
6718                play(this.$el);
6719              } else {
6720                pause(this.$el);
6721              }
6722            }
6723          },
6724          args: { intersecting: false },
6725          options: ({ $el, autoplay }) => ({ root: autoplay === "inview" ? null : parent($el) })
6726        })
6727      ]
6728    };
6729    function isPlaying(videoEl) {
6730      return !videoEl.paused && !videoEl.ended;
6731    }
6732
6733    var cover = {
6734      mixins: [Video],
6735      props: {
6736        width: Number,
6737        height: Number
6738      },
6739      data: {
6740        automute: true
6741      },
6742      events: {
6743        "load loadedmetadata"() {
6744          this.$emit("resize");
6745        }
6746      },
6747      observe: resize({
6748        target: ({ $el }) => [getPositionedParent($el) || parent($el)],
6749        filter: ({ $el }) => !useObjectFit($el)
6750      }),
6751      update: {
6752        read() {
6753          if (useObjectFit(this.$el)) {
6754            return;
6755          }
6756          const { ratio, cover } = Dimensions;
6757          const { $el, width, height } = this;
6758          let dim = { width, height };
6759          if (!width || !height) {
6760            const intrinsic = {
6761              width: $el.naturalWidth || $el.videoWidth || $el.clientWidth,
6762              height: $el.naturalHeight || $el.videoHeight || $el.clientHeight
6763            };
6764            if (width) {
6765              dim = ratio(intrinsic, "width", width);
6766            } else if (height) {
6767              dim = ratio(intrinsic, "height", height);
6768            } else {
6769              dim = intrinsic;
6770            }
6771          }
6772          const { offsetHeight: coverHeight, offsetWidth: coverWidth } = getPositionedParent($el) || parent($el);
6773          const coverDim = cover(dim, {
6774            width: coverWidth + (coverWidth % 2 ? 1 : 0),
6775            height: coverHeight + (coverHeight % 2 ? 1 : 0)
6776          });
6777          if (!coverDim.width || !coverDim.height) {
6778            return false;
6779          }
6780          return coverDim;
6781        },
6782        write({ height, width }) {
6783          css(this.$el, { height, width });
6784        },
6785        events: ["resize"]
6786      }
6787    };
6788    function getPositionedParent(el) {
6789      while (el = parent(el)) {
6790        if (css(el, "position") !== "static") {
6791          return el;
6792        }
6793      }
6794    }
6795    function useObjectFit(el) {
6796      return isTag(el, "img", "video");
6797    }
6798
6799    let active;
6800    var drop = {
6801      mixins: [Container, Position, Togglable],
6802      args: "pos",
6803      props: {
6804        mode: "list",
6805        toggle: Boolean,
6806        boundary: Boolean,
6807        boundaryX: Boolean,
6808        boundaryY: Boolean,
6809        target: Boolean,
6810        targetX: Boolean,
6811        targetY: Boolean,
6812        stretch: Boolean,
6813        delayShow: Number,
6814        delayHide: Number,
6815        autoUpdate: Boolean,
6816        clsDrop: String,
6817        animateOut: Boolean,
6818        bgScroll: Boolean,
6819        closeOnScroll: Boolean
6820      },
6821      data: {
6822        mode: ["click", "hover"],
6823        toggle: "- *",
6824        boundary: false,
6825        boundaryX: false,
6826        boundaryY: false,
6827        target: false,
6828        targetX: false,
6829        targetY: false,
6830        stretch: false,
6831        delayShow: 0,
6832        delayHide: 800,
6833        autoUpdate: true,
6834        clsDrop: false,
6835        animateOut: false,
6836        bgScroll: true,
6837        animation: ["uk-animation-fade"],
6838        cls: "uk-open",
6839        container: false,
6840        closeOnScroll: false
6841      },
6842      computed: {
6843        boundary({ boundary, boundaryX, boundaryY }, $el) {
6844          return [
6845            query(boundaryX || boundary, $el) || window,
6846            query(boundaryY || boundary, $el) || window
6847          ];
6848        },
6849        target({ target, targetX, targetY }, $el) {
6850          targetX || (targetX = target || this.targetEl);
6851          targetY || (targetY = target || this.targetEl);
6852          return [
6853            targetX === true ? window : query(targetX, $el),
6854            targetY === true ? window : query(targetY, $el)
6855          ];
6856        }
6857      },
6858      created() {
6859        this.tracker = new MouseTracker();
6860      },
6861      beforeConnect() {
6862        this.clsDrop = this.$props.clsDrop || `uk-${this.$options.name}`;
6863      },
6864      connected() {
6865        addClass(this.$el, "uk-drop", this.clsDrop);
6866        if (this.toggle && !this.targetEl) {
6867          this.targetEl = createToggleComponent(this);
6868        }
6869        this._style = pick(this.$el.style, ["width", "height"]);
6870      },
6871      disconnected() {
6872        if (this.isActive()) {
6873          this.hide(false);
6874          active = null;
6875        }
6876        css(this.$el, this._style);
6877      },
6878      events: [
6879        {
6880          name: "click",
6881          delegate() {
6882            return ".uk-drop-close";
6883          },
6884          handler(e) {
6885            e.preventDefault();
6886            this.hide(false);
6887          }
6888        },
6889        {
6890          name: "click",
6891          delegate() {
6892            return 'a[href*="#"]';
6893          },
6894          handler({ defaultPrevented, current }) {
6895            const { hash } = current;
6896            if (!defaultPrevented && hash && isSameSiteAnchor(current) && !this.$el.contains($(hash))) {
6897              this.hide(false);
6898            }
6899          }
6900        },
6901        {
6902          name: "beforescroll",
6903          handler() {
6904            this.hide(false);
6905          }
6906        },
6907        {
6908          name: "toggle",
6909          self: true,
6910          handler(e, toggle) {
6911            e.preventDefault();
6912            if (this.isToggled()) {
6913              this.hide(false);
6914            } else {
6915              this.show(toggle == null ? void 0 : toggle.$el, false);
6916            }
6917          }
6918        },
6919        {
6920          name: "toggleshow",
6921          self: true,
6922          handler(e, toggle) {
6923            e.preventDefault();
6924            this.show(toggle == null ? void 0 : toggle.$el);
6925          }
6926        },
6927        {
6928          name: "togglehide",
6929          self: true,
6930          handler(e) {
6931            e.preventDefault();
6932            if (!matches(this.$el, ":focus,:hover")) {
6933              this.hide();
6934            }
6935          }
6936        },
6937        {
6938          name: `${pointerEnter} focusin`,
6939          filter() {
6940            return includes(this.mode, "hover");
6941          },
6942          handler(e) {
6943            if (!isTouch(e)) {
6944              this.clearTimers();
6945            }
6946          }
6947        },
6948        {
6949          name: `${pointerLeave} focusout`,
6950          filter() {
6951            return includes(this.mode, "hover");
6952          },
6953          handler(e) {
6954            if (!isTouch(e) && e.relatedTarget) {
6955              this.hide();
6956            }
6957          }
6958        },
6959        {
6960          name: "toggled",
6961          self: true,
6962          handler(e, toggled) {
6963            if (toggled) {
6964              this.clearTimers();
6965              this.position();
6966            }
6967          }
6968        },
6969        {
6970          name: "show",
6971          self: true,
6972          handler() {
6973            active = this;
6974            this.tracker.init();
6975            attr(this.targetEl, "aria-expanded", true);
6976            const handlers = [
6977              listenForResize(this),
6978              listenForEscClose(this),
vendor: 6,574 bytes, lines 6979-7158
6979              listenForBackgroundClose(this),
6980              this.autoUpdate && listenForScroll(this),
6981              this.closeOnScroll && listenForScrollClose(this)
6982            ];
6983            once(this.$el, "hide", () => handlers.forEach((handler) => handler && handler()), {
6984              self: true
6985            });
6986            if (!this.bgScroll) {
6987              once(this.$el, "hidden", preventBackgroundScroll(this.$el), { self: true });
6988            }
6989          }
6990        },
6991        {
6992          name: "beforehide",
6993          self: true,
6994          handler: "clearTimers"
6995        },
6996        {
6997          name: "hide",
6998          handler({ target }) {
6999            if (this.$el !== target) {
7000              active = active === null && this.$el.contains(target) && this.isToggled() ? this : active;
7001              return;
7002            }
7003            active = this.isActive() ? null : active;
7004            this.tracker.cancel();
7005            attr(this.targetEl, "aria-expanded", null);
7006          }
7007        }
7008      ],
7009      update: {
7010        write() {
7011          if (this.isToggled() && !hasClass(this.$el, this.clsEnter)) {
7012            this.position();
7013          }
7014        }
7015      },
7016      methods: {
7017        show(target = this.targetEl, delay = true) {
7018          if (this.isToggled() && target && this.targetEl && target !== this.targetEl) {
7019            this.hide(false, false);
7020          }
7021          this.targetEl = target;
7022          this.clearTimers();
7023          if (this.isActive()) {
7024            return;
7025          }
7026          if (active) {
7027            if (delay && active.isDelaying) {
7028              this.showTimer = setTimeout(() => matches(target, ":hover") && this.show(), 10);
7029              return;
7030            }
7031            let prev;
7032            while (active && prev !== active && !active.$el.contains(this.$el)) {
7033              prev = active;
7034              active.hide(false, false);
7035            }
7036          }
7037          if (this.container && parent(this.$el) !== this.container) {
7038            append(this.container, this.$el);
7039          }
7040          this.showTimer = setTimeout(
7041            () => this.toggleElement(this.$el, true),
7042            delay && this.delayShow || 0
7043          );
7044        },
7045        hide(delay = true, animate = true) {
7046          const hide = () => this.toggleElement(this.$el, false, this.animateOut && animate);
7047          this.clearTimers();
7048          this.isDelayedHide = delay;
7049          this.isDelaying = getPositionedElements(this.$el).some(
7050            (el) => this.tracker.movesTo(el)
7051          );
7052          if (delay && this.isDelaying) {
7053            this.hideTimer = setTimeout(this.hide, 50);
7054          } else if (delay && this.delayHide) {
7055            this.hideTimer = setTimeout(hide, this.delayHide);
7056          } else {
7057            hide();
7058          }
7059        },
7060        clearTimers() {
7061          clearTimeout(this.showTimer);
7062          clearTimeout(this.hideTimer);
7063          this.showTimer = null;
7064          this.hideTimer = null;
7065          this.isDelaying = false;
7066        },
7067        isActive() {
7068          return active === this;
7069        },
7070        position() {
7071          removeClass(this.$el, "uk-drop-stack");
7072          css(this.$el, this._style);
7073          this.$el.hidden = true;
7074          const viewports = this.target.map((target) => getViewport$1(this.$el, target));
7075          const viewportOffset = this.getViewportOffset(this.$el);
7076          const dirs = [
7077            [0, ["x", "width", "left", "right"]],
7078            [1, ["y", "height", "top", "bottom"]]
7079          ];
7080          for (const [i, [axis, prop]] of dirs) {
7081            if (this.axis !== axis && includes([axis, true], this.stretch)) {
7082              css(this.$el, {
7083                [prop]: Math.min(
7084                  offset(this.boundary[i])[prop],
7085                  viewports[i][prop] - 2 * viewportOffset
7086                ),
7087                [`overflow-${axis}`]: "auto"
7088              });
7089            }
7090          }
7091          const maxWidth = viewports[0].width - 2 * viewportOffset;
7092          this.$el.hidden = false;
7093          css(this.$el, "maxWidth", "");
7094          if (this.$el.offsetWidth > maxWidth) {
7095            addClass(this.$el, "uk-drop-stack");
7096          }
7097          css(this.$el, "maxWidth", maxWidth);
7098          this.positionAt(this.$el, this.target, this.boundary);
7099          for (const [i, [axis, prop, start, end]] of dirs) {
7100            if (this.axis === axis && includes([axis, true], this.stretch)) {
7101              const positionOffset = Math.abs(this.getPositionOffset());
7102              const targetOffset = offset(this.target[i]);
7103              const elOffset = offset(this.$el);
7104              css(this.$el, {
7105                [prop]: (targetOffset[start] > elOffset[start] ? targetOffset[this.inset ? end : start] - Math.max(
7106                  offset(this.boundary[i])[start],
7107                  viewports[i][start] + viewportOffset
7108                ) : Math.min(
7109                  offset(this.boundary[i])[end],
7110                  viewports[i][end] - viewportOffset
7111                ) - targetOffset[this.inset ? start : end]) - positionOffset,
7112                [`overflow-${axis}`]: "auto"
7113              });
7114              this.positionAt(this.$el, this.target, this.boundary);
7115            }
7116          }
7117        }
7118      }
7119    };
7120    function getPositionedElements(el) {
7121      const result = [];
7122      apply(el, (el2) => css(el2, "position") !== "static" && result.push(el2));
7123      return result;
7124    }
7125    function getViewport$1(el, target) {
7126      return offsetViewport(overflowParents(target).find((parent2) => parent2.contains(el)));
7127    }
7128    function createToggleComponent(drop) {
7129      const { $el } = drop.$create("toggle", query(drop.toggle, drop.$el), {
7130        target: drop.$el,
7131        mode: drop.mode
7132      });
7133      attr($el, "aria-haspopup", true);
7134      return $el;
7135    }
7136    function listenForResize(drop) {
7137      const update = () => drop.$emit();
7138      const off = [
7139        observeViewportResize(update),
7140        observeResize(overflowParents(drop.$el).concat(drop.target), update)
7141      ];
7142      return () => off.map((observer) => observer.disconnect());
7143    }
7144    function listenForScroll(drop, fn = () => drop.$emit()) {
7145      return on([document, ...overflowParents(drop.$el)], "scroll", fn, {
7146        passive: true
7147      });
7148    }
7149    function listenForEscClose(drop) {
7150      return on(document, "keydown", (e) => {
7151        if (e.keyCode === keyMap.ESC) {
7152          drop.hide(false);
7153        }
7154      });
7155    }
7156    function listenForScrollClose(drop) {
7157      return listenForScroll(drop, () => drop.hide(false));
7158    }
vendor: 13,858 bytes, lines 7159-7594
7159    function listenForBackgroundClose(drop) {
7160      return on(document, pointerDown$1, ({ target }) => {
7161        if (drop.$el.contains(target)) {
7162          return;
7163        }
7164        once(
7165          document,
7166          `${pointerUp$1} ${pointerCancel} scroll`,
7167          ({ defaultPrevented, type, target: newTarget }) => {
7168            var _a;
7169            if (!defaultPrevented && type === pointerUp$1 && target === newTarget && !((_a = drop.targetEl) == null ? void 0 : _a.contains(target))) {
7170              drop.hide(false);
7171            }
7172          },
7173          true
7174        );
7175      });
7176    }
7177
7178    var Dropnav = {
7179      mixins: [Class, Container],
7180      props: {
7181        align: String,
7182        clsDrop: String,
7183        boundary: Boolean,
7184        dropbar: Boolean,
7185        dropbarAnchor: Boolean,
7186        duration: Number,
7187        mode: Boolean,
7188        offset: Boolean,
7189        stretch: Boolean,
7190        delayShow: Boolean,
7191        delayHide: Boolean,
7192        target: Boolean,
7193        targetX: Boolean,
7194        targetY: Boolean,
7195        animation: Boolean,
7196        animateOut: Boolean,
7197        closeOnScroll: Boolean
7198      },
7199      data: {
7200        align: isRtl ? "right" : "left",
7201        clsDrop: "uk-dropdown",
7202        clsDropbar: "uk-dropnav-dropbar",
7203        boundary: true,
7204        dropbar: false,
7205        dropbarAnchor: false,
7206        duration: 200,
7207        container: false,
7208        selNavItem: "> li > a, > ul > li > a"
7209      },
7210      computed: {
7211        dropbarAnchor: ({ dropbarAnchor }, $el) => query(dropbarAnchor, $el) || $el,
7212        dropbar({ dropbar }) {
7213          if (!dropbar) {
7214            return null;
7215          }
7216          dropbar = this._dropbar || query(dropbar, this.$el) || $(`+ .${this.clsDropbar}`, this.$el);
7217          return dropbar ? dropbar : this._dropbar = $("<div></div>");
7218        },
7219        dropContainer(_, $el) {
7220          return this.container || $el;
7221        },
7222        dropdowns({ clsDrop }, $el) {
7223          var _a;
7224          const dropdowns = $$(`.${clsDrop}`, $el);
7225          if (this.dropContainer !== $el) {
7226            for (const el of $$(`.${clsDrop}`, this.dropContainer)) {
7227              const target = (_a = this.getDropdown(el)) == null ? void 0 : _a.targetEl;
7228              if (!includes(dropdowns, el) && target && this.$el.contains(target)) {
7229                dropdowns.push(el);
7230              }
7231            }
7232          }
7233          return dropdowns;
7234        },
7235        items({ selNavItem }, $el) {
7236          return $$(selNavItem, $el);
7237        }
7238      },
7239      watch: {
7240        dropbar(dropbar) {
7241          addClass(
7242            dropbar,
7243            "uk-dropbar",
7244            "uk-dropbar-top",
7245            this.clsDropbar,
7246            `uk-${this.$options.name}-dropbar`
7247          );
7248        },
7249        dropdowns() {
7250          this.initializeDropdowns();
7251        }
7252      },
7253      connected() {
7254        this.initializeDropdowns();
7255      },
7256      disconnected() {
7257        remove$1(this._dropbar);
7258        delete this._dropbar;
7259      },
7260      events: [
7261        {
7262          name: "mouseover focusin",
7263          delegate() {
7264            return this.selNavItem;
7265          },
7266          handler({ current }) {
7267            const active2 = this.getActive();
7268            if (active2 && includes(active2.mode, "hover") && active2.targetEl && !current.contains(active2.targetEl) && !active2.isDelaying) {
7269              active2.hide(false);
7270            }
7271          }
7272        },
7273        {
7274          name: "keydown",
7275          self: true,
7276          delegate() {
7277            return this.selNavItem;
7278          },
7279          handler(e) {
7280            var _a;
7281            const { current, keyCode } = e;
7282            const active2 = this.getActive();
7283            if (keyCode === keyMap.DOWN && (active2 == null ? void 0 : active2.targetEl) === current) {
7284              e.preventDefault();
7285              (_a = $(selFocusable, active2.$el)) == null ? void 0 : _a.focus();
7286            }
7287            handleNavItemNavigation(e, this.items, active2);
7288          }
7289        },
7290        {
7291          name: "keydown",
7292          el() {
7293            return this.dropContainer;
7294          },
7295          delegate() {
7296            return `.${this.clsDrop}`;
7297          },
7298          handler(e) {
7299            var _a;
7300            const { current, keyCode } = e;
7301            if (!includes(this.dropdowns, current)) {
7302              return;
7303            }
7304            const active2 = this.getActive();
7305            let next = -1;
7306            if (keyCode === keyMap.HOME) {
7307              next = 0;
7308            } else if (keyCode === keyMap.END) {
7309              next = "last";
7310            } else if (keyCode === keyMap.UP) {
7311              next = "previous";
7312            } else if (keyCode === keyMap.DOWN) {
7313              next = "next";
7314            } else if (keyCode === keyMap.ESC) {
7315              (_a = active2.targetEl) == null ? void 0 : _a.focus();
7316            }
7317            if (~next) {
7318              e.preventDefault();
7319              const elements = $$(selFocusable, current);
7320              elements[getIndex(
7321                next,
7322                elements,
7323                findIndex(elements, (el) => matches(el, ":focus"))
7324              )].focus();
7325            }
7326            handleNavItemNavigation(e, this.items, active2);
7327          }
7328        },
7329        {
7330          name: "mouseleave",
7331          el() {
7332            return this.dropbar;
7333          },
7334          filter() {
7335            return this.dropbar;
7336          },
7337          handler() {
7338            const active2 = this.getActive();
7339            if (active2 && includes(active2.mode, "hover") && !this.dropdowns.some((el) => matches(el, ":hover"))) {
7340              active2.hide();
7341            }
7342          }
7343        },
7344        {
7345          name: "beforeshow",
7346          el() {
7347            return this.dropContainer;
7348          },
7349          filter() {
7350            return this.dropbar;
7351          },
7352          handler({ target }) {
7353            if (!this.isDropbarDrop(target)) {
7354              return;
7355            }
7356            if (this.dropbar.previousElementSibling !== this.dropbarAnchor) {
7357              after(this.dropbarAnchor, this.dropbar);
7358            }
7359            addClass(target, `${this.clsDrop}-dropbar`);
7360          }
7361        },
7362        {
7363          name: "show",
7364          el() {
7365            return this.dropContainer;
7366          },
7367          filter() {
7368            return this.dropbar;
7369          },
7370          handler({ target }) {
7371            if (!this.isDropbarDrop(target)) {
7372              return;
7373            }
7374            const drop = this.getDropdown(target);
7375            const adjustHeight = () => {
7376              const maxBottom = Math.max(
7377                ...parents(target, `.${this.clsDrop}`).concat(target).map((el) => offset(el).bottom)
7378              );
7379              offset(this.dropbar, {
7380                left: offset(this.dropbar).left,
7381                top: this.getDropbarOffset(drop.getPositionOffset())
7382              });
7383              this.transitionTo(
7384                maxBottom - offset(this.dropbar).top + toFloat(css(target, "marginBottom")),
7385                target
7386              );
7387            };
7388            this._observer = observeResize([drop.$el, ...drop.target], adjustHeight);
7389            adjustHeight();
7390          }
7391        },
7392        {
7393          name: "beforehide",
7394          el() {
7395            return this.dropContainer;
7396          },
7397          filter() {
7398            return this.dropbar;
7399          },
7400          handler(e) {
7401            const active2 = this.getActive();
7402            if (matches(this.dropbar, ":hover") && active2.$el === e.target && this.isDropbarDrop(active2.$el) && includes(active2.mode, "hover") && active2.isDelayedHide && !this.items.some((el) => active2.targetEl !== el && matches(el, ":focus"))) {
7403              e.preventDefault();
7404            }
7405          }
7406        },
7407        {
7408          name: "hide",
7409          el() {
7410            return this.dropContainer;
7411          },
7412          filter() {
7413            return this.dropbar;
7414          },
7415          handler({ target }) {
7416            var _a;
7417            if (!this.isDropbarDrop(target)) {
7418              return;
7419            }
7420            (_a = this._observer) == null ? void 0 : _a.disconnect();
7421            const active2 = this.getActive();
7422            if (!active2 || active2.$el === target) {
7423              this.transitionTo(0);
7424            }
7425          }
7426        }
7427      ],
7428      methods: {
7429        getActive() {
7430          var _a;
7431          return includes(this.dropdowns, (_a = active) == null ? void 0 : _a.$el) && active;
7432        },
7433        async transitionTo(newHeight, el) {
7434          const { dropbar } = this;
7435          const oldHeight = height(dropbar);
7436          el = oldHeight < newHeight && el;
7437          await Transition.cancel([el, dropbar]);
7438          if (el) {
7439            const diff = offset(el).top - offset(dropbar).top - oldHeight;
7440            if (diff > 0) {
7441              css(el, "transitionDelay", `${diff / newHeight * this.duration}ms`);
7442            }
7443          }
7444          css(el, "clipPath", `polygon(0 0,100% 0,100% ${oldHeight}px,0 ${oldHeight}px)`);
7445          height(dropbar, oldHeight);
7446          await Promise.all([
7447            Transition.start(dropbar, { height: newHeight }, this.duration),
7448            Transition.start(
7449              el,
7450              { clipPath: `polygon(0 0,100% 0,100% ${newHeight}px,0 ${newHeight}px)` },
7451              this.duration
7452            ).finally(() => css(el, { clipPath: "", transitionDelay: "" }))
7453          ]).catch(noop);
7454        },
7455        getDropdown(el) {
7456          return this.$getComponent(el, "drop") || this.$getComponent(el, "dropdown");
7457        },
7458        isDropbarDrop(el) {
7459          return includes(this.dropdowns, el) && hasClass(el, this.clsDrop);
7460        },
7461        getDropbarOffset(offsetTop) {
7462          const { $el, target, targetY } = this;
7463          const { top, height: height2 } = offset(query(targetY || target || $el, $el));
7464          return top + height2 + offsetTop;
7465        },
7466        initializeDropdowns() {
7467          this.$create(
7468            "drop",
7469            this.dropdowns.filter((el) => !this.getDropdown(el)),
7470            {
7471              ...this.$props,
7472              flip: false,
7473              shift: true,
7474              pos: `bottom-${this.align}`,
7475              boundary: this.boundary === true ? this.$el : this.boundary
7476            }
7477          );
7478        }
7479      }
7480    };
7481    function handleNavItemNavigation(e, toggles, active2) {
7482      var _a, _b, _c;
7483      const { current, keyCode } = e;
7484      let next = -1;
7485      if (keyCode === keyMap.HOME) {
7486        next = 0;
7487      } else if (keyCode === keyMap.END) {
7488        next = "last";
7489      } else if (keyCode === keyMap.LEFT) {
7490        next = "previous";
7491      } else if (keyCode === keyMap.RIGHT) {
7492        next = "next";
7493      } else if (keyCode === keyMap.TAB) {
7494        (_a = active2.targetEl) == null ? void 0 : _a.focus();
7495        (_b = active2.hide) == null ? void 0 : _b.call(active2, false);
7496      }
7497      if (~next) {
7498        e.preventDefault();
7499        (_c = active2.hide) == null ? void 0 : _c.call(active2, false);
7500        toggles[getIndex(next, toggles, toggles.indexOf(active2.targetEl || current))].focus();
7501      }
7502    }
7503
7504    var formCustom = {
7505      mixins: [Class],
7506      args: "target",
7507      props: {
7508        target: Boolean
7509      },
7510      data: {
7511        target: false
7512      },
7513      computed: {
7514        input: (_, $el) => $(selInput, $el),
7515        state() {
7516          return this.input.nextElementSibling;
7517        },
7518        target({ target }, $el) {
7519          return target && (target === true && parent(this.input) === $el && this.input.nextElementSibling || $(target, $el));
7520        }
7521      },
7522      update() {
7523        var _a;
7524        const { target, input } = this;
7525        if (!target) {
7526          return;
7527        }
7528        let option;
7529        const prop = isInput(target) ? "value" : "textContent";
7530        const prev = target[prop];
7531        const value = ((_a = input.files) == null ? void 0 : _a[0]) ? input.files[0].name : matches(input, "select") && (option = $$("option", input).filter((el) => el.selected)[0]) ? option.textContent : input.value;
7532        if (prev !== value) {
7533          target[prop] = value;
7534        }
7535      },
7536      events: [
7537        {
7538          name: "change",
7539          handler() {
7540            this.$emit();
7541          }
7542        },
7543        {
7544          name: "reset",
7545          el() {
7546            return this.$el.closest("form");
7547          },
7548          handler() {
7549            this.$emit();
7550          }
7551        }
7552      ]
7553    };
7554
7555    var grid = {
7556      extends: Margin,
7557      mixins: [Class],
7558      name: "grid",
7559      props: {
7560        masonry: Boolean,
7561        parallax: String,
7562        parallaxStart: String,
7563        parallaxEnd: String,
7564        parallaxJustify: Boolean
7565      },
7566      data: {
7567        margin: "uk-grid-margin",
7568        clsStack: "uk-grid-stack",
7569        masonry: false,
7570        parallax: 0,
7571        parallaxStart: 0,
7572        parallaxEnd: 0,
7573        parallaxJustify: false
7574      },
7575      connected() {
7576        this.masonry && addClass(this.$el, "uk-flex-top", "uk-flex-wrap-top");
7577      },
7578      observe: scroll$1({ filter: ({ parallax, parallaxJustify }) => parallax || parallaxJustify }),
7579      update: [
7580        {
7581          write({ rows }) {
7582            toggleClass(this.$el, this.clsStack, !rows.some((row) => row.length > 1));
7583          },
7584          events: ["resize"]
7585        },
7586        {
7587          read(data) {
7588            const { rows } = data;
7589            let { masonry, parallax, parallaxJustify, margin } = this;
7590            parallax = Math.max(0, toPx(parallax));
7591            if (!(masonry || parallax || parallaxJustify) || positionedAbsolute(rows) || rows[0].some(
7592              (el, i) => rows.some((row) => row[i] && row[i].offsetWidth !== el.offsetWidth)
7593            )) {
7594              return data.translates = data.scrollColumns = false;
vendor: 4,998 bytes, lines 7595-7747
7595            }
7596            let gutter = getGutter(rows, margin);
7597            let columns;
7598            let translates;
7599            if (masonry) {
7600              [columns, translates] = applyMasonry(rows, gutter, masonry === "next");
7601            } else {
7602              columns = transpose(rows);
7603            }
7604            const columnHeights = columns.map(
7605              (column) => sumBy(column, "offsetHeight") + gutter * (column.length - 1)
7606            );
7607            const height = Math.max(0, ...columnHeights);
7608            let scrollColumns;
7609            let parallaxStart;
7610            let parallaxEnd;
7611            if (parallax || parallaxJustify) {
7612              scrollColumns = columnHeights.map(
7613                (hgt, i) => parallaxJustify ? height - hgt + parallax : parallax / (i % 2 || 8)
7614              );
7615              if (!parallaxJustify) {
7616                parallax = Math.max(
7617                  ...columnHeights.map((hgt, i) => hgt + scrollColumns[i] - height)
7618                );
7619              }
7620              parallaxStart = toPx(this.parallaxStart, "height", this.$el, true);
7621              parallaxEnd = toPx(this.parallaxEnd, "height", this.$el, true);
7622            }
7623            return {
7624              columns,
7625              translates,
7626              scrollColumns,
7627              parallaxStart,
7628              parallaxEnd,
7629              padding: parallax,
7630              height: translates ? height : ""
7631            };
7632          },
7633          write({ height, padding }) {
7634            css(this.$el, "paddingBottom", padding || "");
7635            height !== false && css(this.$el, "height", height);
7636          },
7637          events: ["resize"]
7638        },
7639        {
7640          read({ rows, scrollColumns, parallaxStart, parallaxEnd }) {
7641            if (scrollColumns && positionedAbsolute(rows)) {
7642              return false;
7643            }
7644            return {
7645              scrolled: scrollColumns ? scrolledOver(this.$el, parallaxStart, parallaxEnd) : false
7646            };
7647          },
7648          write({ columns, scrolled, scrollColumns, translates }) {
7649            if (!scrolled && !translates) {
7650              return;
7651            }
7652            columns.forEach(
7653              (column, i) => column.forEach((el, j) => {
7654                let [x, y] = translates && translates[i][j] || [0, 0];
7655                if (scrolled) {
7656                  y += scrolled * scrollColumns[i];
7657                }
7658                css(el, "transform", `translate(${x}px, ${y}px)`);
7659              })
7660            );
7661          },
7662          events: ["scroll", "resize"]
7663        }
7664      ]
7665    };
7666    function positionedAbsolute(rows) {
7667      return rows.flat().some((el) => css(el, "position") === "absolute");
7668    }
7669    function applyMasonry(rows, gutter, next) {
7670      const columns = [];
7671      const translates = [];
7672      const columnHeights = Array(rows[0].length).fill(0);
7673      let rowHeights = 0;
7674      for (let row of rows) {
7675        if (isRtl) {
7676          row = row.reverse();
7677        }
7678        let height = 0;
7679        for (const j in row) {
7680          const { offsetWidth, offsetHeight } = row[j];
7681          const index = next ? j : columnHeights.indexOf(Math.min(...columnHeights));
7682          push(columns, index, row[j]);
7683          push(translates, index, [
7684            (index - j) * offsetWidth * (isRtl ? -1 : 1),
7685            columnHeights[index] - rowHeights
7686          ]);
7687          columnHeights[index] += offsetHeight + gutter;
7688          height = Math.max(height, offsetHeight);
7689        }
7690        rowHeights += height + gutter;
7691      }
7692      return [columns, translates];
7693    }
7694    function getGutter(rows, cls) {
7695      const node = rows.flat().find((el) => hasClass(el, cls));
7696      return toFloat(node ? css(node, "marginTop") : css(rows[0][0], "paddingLeft"));
7697    }
7698    function transpose(rows) {
7699      const columns = [];
7700      for (const row of rows) {
7701        for (const i in row) {
7702          push(columns, i, row[i]);
7703        }
7704      }
7705      return columns;
7706    }
7707    function push(array, index, value) {
7708      if (!array[index]) {
7709        array[index] = [];
7710      }
7711      array[index].push(value);
7712    }
7713
7714    var heightMatch = {
7715      args: "target",
7716      props: {
7717        target: String,
7718        row: Boolean
7719      },
7720      data: {
7721        target: "> *",
7722        row: true
7723      },
7724      computed: {
7725        elements: ({ target }, $el) => $$(target, $el)
7726      },
7727      observe: resize({
7728        target: ({ $el, elements }) => elements.reduce((elements2, el) => elements2.concat(el, ...el.children), [$el])
7729      }),
7730      events: {
7731        // Hidden elements may change height when fonts load
7732        name: "loadingdone",
7733        el() {
7734          return document.fonts;
7735        },
7736        handler() {
7737          this.$emit("resize");
7738        }
7739      },
7740      update: {
7741        read() {
7742          return {
7743            rows: (this.row ? getRows(this.elements) : [this.elements]).map(match)
7744          };
7745        },
7746        write({ rows }) {
7747          for (const { heights, elements } of rows) {
vendor: 5,867 bytes, lines 7748-7881
7748            elements.forEach((el, i) => css(el, "minHeight", heights[i]));
7749          }
7750        },
7751        events: ["resize"]
7752      }
7753    };
7754    function match(elements) {
7755      if (elements.length < 2) {
7756        return { heights: [""], elements };
7757      }
7758      let heights = elements.map(getHeight);
7759      const max = Math.max(...heights);
7760      return {
7761        heights: elements.map((el, i) => heights[i].toFixed(2) === max.toFixed(2) ? "" : max),
7762        elements
7763      };
7764    }
7765    function getHeight(element) {
7766      const style = pick(element.style, ["display", "minHeight"]);
7767      if (!isVisible(element)) {
7768        css(element, "display", "block", "important");
7769      }
7770      css(element, "minHeight", "");
7771      const height = dimensions$1(element).height - boxModelAdjust(element, "height", "content-box");
7772      css(element, style);
7773      return height;
7774    }
7775
7776    var heightPlaceholder = {
7777      args: "target",
7778      props: {
7779        target: String
7780      },
7781      data: {
7782        target: ""
7783      },
7784      computed: {
7785        target: {
7786          get: ({ target }, $el) => query(target, $el),
7787          observe: ({ target }) => target
7788        }
7789      },
7790      observe: resize({ target: ({ target }) => target }),
7791      update: {
7792        read() {
7793          return { height: this.target.offsetHeight };
7794        },
7795        write({ height }) {
7796          css(this.$el, { minHeight: height });
7797        },
7798        events: ["resize"]
7799      }
7800    };
7801
7802    var heightViewport = {
7803      props: {
7804        expand: Boolean,
7805        offsetTop: Boolean,
7806        offsetBottom: Boolean,
7807        minHeight: Number
7808      },
7809      data: {
7810        expand: false,
7811        offsetTop: false,
7812        offsetBottom: false,
7813        minHeight: 0
7814      },
7815      // check for offsetTop change
7816      observe: [
7817        viewport({ filter: ({ expand }) => expand }),
7818        resize({ target: ({ $el }) => scrollParents($el) })
7819      ],
7820      update: {
7821        read() {
7822          if (!isVisible(this.$el)) {
7823            return false;
7824          }
7825          let minHeight = "";
7826          const box = boxModelAdjust(this.$el, "height", "content-box");
7827          const { body, scrollingElement } = document;
7828          const scrollElement = scrollParent(this.$el);
7829          const { height: viewportHeight } = offsetViewport(
7830            scrollElement === body ? scrollingElement : scrollElement
7831          );
7832          const isScrollingElement = scrollingElement === scrollElement || body === scrollElement;
7833          minHeight = `calc(${isScrollingElement ? "100vh" : `${viewportHeight}px`}`;
7834          if (this.expand) {
7835            const diff = dimensions$1(scrollElement).height - dimensions$1(this.$el).height;
7836            minHeight += ` - ${diff}px`;
7837          } else {
7838            if (this.offsetTop) {
7839              if (isScrollingElement) {
7840                const offsetTopEl = this.offsetTop === true ? this.$el : query(this.offsetTop, this.$el);
7841                const top = offsetPosition(offsetTopEl)[0] - offsetPosition(scrollElement)[0];
7842                minHeight += top > 0 && top < viewportHeight / 2 ? ` - ${top}px` : "";
7843              } else {
7844                minHeight += ` - ${boxModelAdjust(scrollElement, "height", css(scrollElement, "boxSizing"))}px`;
7845              }
7846            }
7847            if (this.offsetBottom === true) {
7848              minHeight += ` - ${dimensions$1(this.$el.nextElementSibling).height}px`;
7849            } else if (isNumeric(this.offsetBottom)) {
7850              minHeight += ` - ${this.offsetBottom}vh`;
7851            } else if (this.offsetBottom && endsWith(this.offsetBottom, "px")) {
7852              minHeight += ` - ${toFloat(this.offsetBottom)}px`;
7853            } else if (isString(this.offsetBottom)) {
7854              minHeight += ` - ${dimensions$1(query(this.offsetBottom, this.$el)).height}px`;
7855            }
7856          }
7857          minHeight += `${box ? ` - ${box}px` : ""})`;
7858          return { minHeight };
7859        },
7860        write({ minHeight }) {
7861          css(this.$el, "minHeight", `max(${this.minHeight || 0}px, ${minHeight})`);
7862        },
7863        events: ["resize"]
7864      }
7865    };
7866
7867    var closeIcon = "<svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\"><line fill=\"none\" stroke=\"#000\" stroke-width=\"1.1\" x1=\"1\" y1=\"1\" x2=\"13\" y2=\"13\"/><line fill=\"none\" stroke=\"#000\" stroke-width=\"1.1\" x1=\"13\" y1=\"1\" x2=\"1\" y2=\"13\"/></svg>";
7868
7869    var closeLarge = "<svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\"><line fill=\"none\" stroke=\"#000\" stroke-width=\"1.4\" x1=\"1\" y1=\"1\" x2=\"19\" y2=\"19\"/><line fill=\"none\" stroke=\"#000\" stroke-width=\"1.4\" x1=\"19\" y1=\"1\" x2=\"1\" y2=\"19\"/></svg>";
7870
7871    var dropParentIcon = "<svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\"><polyline fill=\"none\" stroke=\"#000\" stroke-width=\"1.1\" points=\"1 3.5 6 8.5 11 3.5\"/></svg>";
7872
7873    var marker = "<svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\"><rect width=\"1\" height=\"11\" x=\"9\" y=\"4\"/><rect width=\"11\" height=\"1\" x=\"4\" y=\"9\"/></svg>";
7874
7875    var navParentIconLarge = "<svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\"><polyline fill=\"none\" stroke=\"#000\" stroke-width=\"1.1\" points=\"1 4 7 10 13 4\"/></svg>";
7876
7877    var navParentIcon = "<svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\"><polyline fill=\"none\" stroke=\"#000\" stroke-width=\"1.1\" points=\"1 3.5 6 8.5 11 3.5\"/></svg>";
7878
7879    var navbarParentIcon = "<svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\"><polyline fill=\"none\" stroke=\"#000\" stroke-width=\"1.1\" points=\"1 3.5 6 8.5 11 3.5\"/></svg>";
7880
7881    var navbarToggleIcon = "<svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\"><style>.uk-navbar-toggle-icon svg&gt;[class*=&quot;line-&quot;]{transition:0.2s ease-in-out;transition-property:transform, opacity;transform-origin:center;opacity:1}.uk-navbar-toggle-icon svg&gt;.line-3{opacity:0}
7881.uk-navbar-toggle-animate[aria-expanded=&quot;true&quot;] svg&gt;.line-3{opacity:1}.uk-navbar-toggle-animate[aria-expanded=&quot;true&quot;] svg&gt;.line-2{transform:rotate(45deg)}.uk-navbar-toggle-animate[aria-expanded=&quot;true&quot;] svg&gt;.line-3{transform:rotate(-45deg)}.uk-navbar-toggle-animate[aria-expanded=&quot;true&quot;] svg&gt;.line-1,.uk-navbar-toggle-animate[aria-expanded=&quot;true&quot;] svg&gt;.line-4{opacity:0}.uk-navbar-toggle-animate[aria-expanded=&quot;true&quot;] svg&gt;.line-1{transform:translateY(6px) scaleX(0)}.uk-navbar-toggle-animate[aria-expanded=&quot;true&quot;] svg&gt;.line-4{transform:translateY(-6px) scaleX(0)}</style><rect width=\"20\" height=\"2\" y=\"3\" class=\"line-1\"/><rect width=\"20\" height=\"2\" y=\"9\" class=\"line-2\"/><rect width=\"20\" height=\"2\" y=\"9\" class=\"line-3\"/><rect width=\"20\" height=\"2\" y=\"15\" class=\"line-4\"/></svg>";
7882
7883    var overlayIcon = "<svg width=\"40\" height=\"40\" viewBox=\"0 0 40 40\"><rect width=\"1\" height=\"40\" x=\"19\" y=\"0\"/><rect width=\"40\" height=\"1\" x=\"0\" y=\"19\"/></svg>";
7884
7885    var paginationNext = "<svg width=\"7\" height=\"12\" viewBox=\"0 0 7 12\"><polyline fill=\"none\" stroke=\"#000\" stroke-width=\"1.2\" points=\"1 1 6 6 1 11\"/></svg>";
7886
7887    var paginationPrevious = "<svg width=\"7\" height=\"12\" viewBox=\"0 0 7 12\"><polyline fill=\"none\" stroke=\"#000\" stroke-width=\"1.2\" points=\"6 1 1 6 6 11\"/></svg>";
7888
7889    var searchIcon = "<svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\"><circle fill=\"none\" stroke=\"#000\" stroke-width=\"1.1\" cx=\"9\" cy=\"9\" r=\"7\"/><path fill=\"none\" stroke=\"#000\" stroke-width=\"1.1\" d=\"M14,14 L18,18 L14,14 Z\"/></svg>";
7890
7891    var searchLarge = "<svg width=\"40\" height=\"40\" viewBox=\"0 0 40 40\"><circle fill=\"none\" stroke=\"#000\" stroke-width=\"1.8\" cx=\"17.5\" cy=\"17.5\" r=\"16.5\"/><line fill=\"none\" stroke=\"#000\" stroke-width=\"1.8\" x1=\"38\" y1=\"39\" x2=\"29\" y2=\"30\"/></svg>";
7892
7893    var searchNavbar = "<svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\"><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>";
7894
7895    var slidenavNextLarge = "<svg width=\"25\" height=\"40\" viewBox=\"0 0 25 40\"><polyline fill=\"none\" stroke=\"#000\" stroke-width=\"2\" points=\"4.002,38.547 22.527,20.024 4,1.5\"/></svg>";
7896
7897    var slidenavNext = "<svg width=\"14\" height=\"24\" viewBox=\"0 0 14 24\"><polyline fill=\"none\" stroke=\"#000\" stroke-width=\"1.4\" points=\"1.225,23 12.775,12 1.225,1\"/></svg>";
7898
7899    var slidenavPreviousLarge = "<svg width=\"25\" height=\"40\" viewBox=\"0 0 25 40\"><polyline fill=\"none\" stroke=\"#000\" stroke-width=\"2\" points=\"20.527,1.5 2,20.024 20.525,38.547\"/></svg>";
7900
7901    var slidenavPrevious = "<svg width=\"14\" height=\"24\" viewBox=\"0 0 14 24\"><polyline fill=\"none\" stroke=\"#000\" stroke-width=\"1.4\" points=\"12.775,1 1.225,12 12.775,23\"/></svg>";
7902
7903    var spinner = "<svg width=\"30\" height=\"30\" viewBox=\"0 0 30 30\"><circle fill=\"none\" stroke=\"#000\" cx=\"15\" cy=\"15\" r=\"14\"/></svg>";
7904
7905    var totop = "<svg width=\"18\" height=\"10\" viewBox=\"0 0 18 10\"><polyline fill=\"none\" stroke=\"#000\" stroke-width=\"1.2\" points=\"1 9 9 1 17 9\"/></svg>";
7906
7907    var Svg = {
7908      args: "src",
7909      props: {
7910        width: Number,
7911        height: Number,
7912        ratio: Number
7913      },
7914      data: {
7915        ratio: 1
7916      },
7917      connected() {
7918        this.svg = this.getSvg().then((el) => {
7919          if (!this._connected) {
7920            return;
7921          }
7922          const svg = insertSVG(el, this.$el);
7923          if (this.svgEl && svg !== this.svgEl) {
7924            remove$1(this.svgEl);
7925          }
7926          applyWidthAndHeight.call(this, svg, el);
7927          return this.svgEl = svg;
7928        }, noop);
7929      },
7930      disconnected() {
7931        this.svg.then((svg) => {
7932          if (this._connected) {
7933            return;
7934          }
7935          if (isVoidElement(this.$el)) {
7936            this.$el.hidden = false;
vendor: 11,819 bytes, lines 7937-8331
7937          }
7938          remove$1(svg);
7939          this.svgEl = null;
7940        });
7941        this.svg = null;
7942      },
7943      methods: {
7944        async getSvg() {
7945        }
7946      }
7947    };
7948    function insertSVG(el, root) {
7949      if (isVoidElement(root) || isTag(root, "canvas")) {
7950        root.hidden = true;
7951        const next = root.nextElementSibling;
7952        return equals(el, next) ? next : after(root, el);
7953      }
7954      const last = root.lastElementChild;
7955      return equals(el, last) ? last : append(root, el);
7956    }
7957    function equals(el, other) {
7958      return isTag(el, "svg") && isTag(other, "svg") && el.innerHTML === other.innerHTML;
7959    }
7960    function applyWidthAndHeight(el, ref) {
7961      const props = ["width", "height"];
7962      let dimensions = props.map((prop) => this[prop]);
7963      if (!dimensions.some((val) => val)) {
7964        dimensions = props.map((prop) => attr(ref, prop));
7965      }
7966      const viewBox = attr(ref, "viewBox");
7967      if (viewBox && !dimensions.some((val) => val)) {
7968        dimensions = viewBox.split(" ").slice(2);
7969      }
7970      dimensions.forEach((val, i) => attr(el, props[i], toFloat(val) * this.ratio || null));
7971    }
7972
7973    const icons = {
7974      spinner,
7975      totop,
7976      marker,
7977      "close-icon": closeIcon,
7978      "close-large": closeLarge,
7979      "drop-parent-icon": dropParentIcon,
7980      "nav-parent-icon": navParentIcon,
7981      "nav-parent-icon-large": navParentIconLarge,
7982      "navbar-parent-icon": navbarParentIcon,
7983      "navbar-toggle-icon": navbarToggleIcon,
7984      "overlay-icon": overlayIcon,
7985      "pagination-next": paginationNext,
7986      "pagination-previous": paginationPrevious,
7987      "search-icon": searchIcon,
7988      "search-large": searchLarge,
7989      "search-navbar": searchNavbar,
7990      "search-toggle-icon": searchIcon,
7991      "slidenav-next": slidenavNext,
7992      "slidenav-next-large": slidenavNextLarge,
7993      "slidenav-previous": slidenavPrevious,
7994      "slidenav-previous-large": slidenavPreviousLarge
7995    };
7996    const Icon = {
7997      install: install$1,
7998      mixins: [Svg],
7999      args: "icon",
8000      props: { icon: String },
8001      isIcon: true,
8002      beforeConnect() {
8003        addClass(this.$el, "uk-icon");
8004      },
8005      methods: {
8006        async getSvg() {
8007          const icon = getIcon(this.icon);
8008          if (!icon) {
8009            throw "Icon not found.";
8010          }
8011          return icon;
8012        }
8013      }
8014    };
8015    const IconComponent = {
8016      args: false,
8017      extends: Icon,
8018      data: (vm) => ({
8019        icon: hyphenate(vm.constructor.options.name)
8020      }),
8021      beforeConnect() {
8022        addClass(this.$el, this.$options.id);
8023      }
8024    };
8025    const NavParentIcon = {
8026      extends: IconComponent,
8027      beforeConnect() {
8028        const icon = this.$props.icon;
8029        this.icon = this.$el.closest(".uk-nav-primary") ? `${icon}-large` : icon;
8030      }
8031    };
8032    const Search = {
8033      extends: IconComponent,
8034      mixins: [I18n],
8035      i18n: { toggle: "Open Search", submit: "Submit Search" },
8036      beforeConnect() {
8037        const isToggle = hasClass(this.$el, "uk-search-toggle") || hasClass(this.$el, "uk-navbar-toggle");
8038        this.icon = isToggle ? "search-toggle-icon" : hasClass(this.$el, "uk-search-icon") && this.$el.closest(".uk-search-large") ? "search-large" : this.$el.closest(".uk-search-navbar") ? "search-navbar" : this.$props.icon;
8039        if (hasAttr(this.$el, "aria-label")) {
8040          return;
8041        }
8042        if (isToggle) {
8043          const label = this.t("toggle");
8044          attr(this.$el, "aria-label", label);
8045        } else {
8046          const button = this.$el.closest("a,button");
8047          if (button) {
8048            const label = this.t("submit");
8049            attr(button, "aria-label", label);
8050          }
8051        }
8052      }
8053    };
8054    const Spinner = {
8055      extends: IconComponent,
8056      beforeConnect() {
8057        attr(this.$el, "role", "status");
8058      },
8059      methods: {
8060        async getSvg() {
8061          const icon = await Icon.methods.getSvg.call(this);
8062          if (this.ratio !== 1) {
8063            css($("circle", icon), "strokeWidth", 1 / this.ratio);
8064          }
8065          return icon;
8066        }
8067      }
8068    };
8069    const ButtonComponent = {
8070      extends: IconComponent,
8071      mixins: [I18n],
8072      beforeConnect() {
8073        const button = this.$el.closest("a,button");
8074        attr(button, "role", this.role !== null && isTag(button, "a") ? "button" : this.role);
8075        const label = this.t("label");
8076        if (label && !hasAttr(button, "aria-label")) {
8077          attr(button, "aria-label", label);
8078        }
8079      }
8080    };
8081    const Slidenav = {
8082      extends: ButtonComponent,
8083      beforeConnect() {
8084        addClass(this.$el, "uk-slidenav");
8085        const icon = this.$props.icon;
8086        this.icon = hasClass(this.$el, "uk-slidenav-large") ? `${icon}-large` : icon;
8087      }
8088    };
8089    const NavbarToggleIcon = {
8090      extends: ButtonComponent,
8091      i18n: { label: "Open menu" }
8092    };
8093    const Close = {
8094      extends: ButtonComponent,
8095      i18n: { label: "Close" },
8096      beforeConnect() {
8097        this.icon = `close-${hasClass(this.$el, "uk-close-large") ? "large" : "icon"}`;
8098      }
8099    };
8100    const Marker = {
8101      extends: ButtonComponent,
8102      i18n: { label: "Open" }
8103    };
8104    const Totop = {
8105      extends: ButtonComponent,
8106      i18n: { label: "Back to top" }
8107    };
8108    const PaginationNext = {
8109      extends: ButtonComponent,
8110      i18n: { label: "Next page" },
8111      data: { role: null }
8112    };
8113    const PaginationPrevious = {
8114      extends: ButtonComponent,
8115      i18n: { label: "Previous page" },
8116      data: { role: null }
8117    };
8118    const parsed = {};
8119    function install$1(UIkit) {
8120      UIkit.icon.add = (name, svg) => {
8121        const added = isString(name) ? { [name]: svg } : name;
8122        each(added, (svg2, name2) => {
8123          icons[name2] = svg2;
8124          delete parsed[name2];
8125        });
8126        if (UIkit._initialized) {
8127          apply(
8128            document.body,
8129            (el) => each(UIkit.getComponents(el), (cmp) => {
8130              cmp.$options.isIcon && cmp.icon in added && cmp.$reset();
8131            })
8132          );
8133        }
8134      };
8135    }
8136    const aliases = { twitter: "x" };
8137    function getIcon(icon) {
8138      icon = aliases[icon] || icon;
8139      if (!icons[icon]) {
8140        return null;
8141      }
8142      if (!parsed[icon]) {
8143        parsed[icon] = $((icons[applyRtl(icon)] || icons[icon]).trim());
8144      }
8145      return parsed[icon].cloneNode(true);
8146    }
8147    function applyRtl(icon) {
8148      return isRtl ? swap(swap(icon, "left", "right"), "previous", "next") : icon;
8149    }
8150
8151    var img = {
8152      args: "dataSrc",
8153      props: {
8154        dataSrc: String,
8155        sources: String,
8156        margin: String,
8157        target: String,
8158        loading: String
8159      },
8160      data: {
8161        dataSrc: "",
8162        sources: false,
8163        margin: "50%",
8164        target: false,
8165        loading: "lazy"
8166      },
8167      connected() {
8168        if (this.loading !== "lazy") {
8169          this.load();
8170        } else if (isImg(this.$el)) {
8171          this.$el.loading = "lazy";
8172          setSrcAttrs(this.$el);
8173        }
8174      },
8175      disconnected() {
8176        if (this.img) {
8177          this.img.onload = "";
8178        }
8179        delete this.img;
8180      },
8181      observe: intersection({
8182        handler(entries, observer) {
8183          this.load();
8184          observer.disconnect();
8185        },
8186        options: ({ margin }) => ({ rootMargin: margin }),
8187        filter: ({ loading }) => loading === "lazy",
8188        target: ({ $el, $props }) => $props.target ? [$el, ...queryAll($props.target, $el)] : $el
8189      }),
8190      methods: {
8191        load() {
8192          if (this.img) {
8193            return this.img;
8194          }
8195          const image = isImg(this.$el) ? this.$el : getImageFromElement(this.$el, this.dataSrc, this.sources);
8196          removeAttr(image, "loading");
8197          setSrcAttrs(this.$el, image.currentSrc);
8198          return this.img = image;
8199        }
8200      }
8201    };
8202    function setSrcAttrs(el, src) {
8203      if (isImg(el)) {
8204        const parentNode = parent(el);
8205        const elements = isTag(parentNode, "picture") ? children(parentNode) : [el];
8206        elements.forEach((el2) => setSourceProps(el2, el2));
8207      } else if (src) {
8208        const change = !includes(el.style.backgroundImage, src);
8209        if (change) {
8210          css(el, "backgroundImage", `url(${escape(src)})`);
8211          trigger(el, createEvent("load", false));
8212        }
8213      }
8214    }
8215    const srcProps = ["data-src", "data-srcset", "sizes"];
8216    function setSourceProps(sourceEl, targetEl) {
8217      for (const prop of srcProps) {
8218        const value = data(sourceEl, prop);
8219        if (value) {
8220          attr(targetEl, prop.replace(/^(data-)+/, ""), value);
8221        }
8222      }
8223    }
8224    function getImageFromElement(el, src, sources) {
8225      const img = new Image();
8226      wrapInPicture(img, sources);
8227      setSourceProps(el, img);
8228      img.onload = () => {
8229        setSrcAttrs(el, img.currentSrc);
8230      };
8231      attr(img, "src", src);
8232      return img;
8233    }
8234    function wrapInPicture(img, sources) {
8235      sources = parseSources(sources);
8236      if (sources.length) {
8237        const picture = fragment("<picture>");
8238        for (const attrs of sources) {
8239          const source = fragment("<source>");
8240          attr(source, attrs);
8241          append(picture, source);
8242        }
8243        append(picture, img);
8244      }
8245    }
8246    function parseSources(sources) {
8247      if (!sources) {
8248        return [];
8249      }
8250      if (startsWith(sources, "[")) {
8251        try {
8252          sources = JSON.parse(sources);
8253        } catch (e) {
8254          sources = [];
8255        }
8256      } else {
8257        sources = parseOptions(sources);
8258      }
8259      if (!isArray(sources)) {
8260        sources = [sources];
8261      }
8262      return sources.filter((source) => !isEmpty(source));
8263    }
8264    function isImg(el) {
8265      return isTag(el, "img");
8266    }
8267
8268    var inverse = {
8269      props: {
8270        target: String,
8271        selActive: String
8272      },
8273      data: {
8274        target: false,
8275        selActive: false
8276      },
8277      computed: {
8278        target: ({ target }, $el) => target ? $$(target, $el) : $el
8279      },
8280      observe: [
8281        intersection({
8282          handler(entries) {
8283            this.isIntersecting = entries.some(({ isIntersecting }) => isIntersecting);
8284            this.$emit();
8285          },
8286          target: ({ target }) => target,
8287          args: { intersecting: false }
8288        }),
8289        mutation({
8290          target: ({ target }) => target,
8291          options: { attributes: true, attributeFilter: ["class"], attributeOldValue: true }
8292        }),
8293        {
8294          target: ({ target }) => target,
8295          observe: (target, handler) => {
8296            const observer = observeResize(
8297              [...toNodes(target), document.documentElement],
8298              handler
8299            );
8300            const listener = [
8301              on(document, "scroll itemshown itemhidden", handler, {
8302                passive: true,
8303                capture: true
8304              }),
8305              on(document, "show hide transitionstart", (e) => {
8306                handler();
8307                return observer.observe(e.target);
8308              }),
8309              on(document, "shown hidden transitionend transitioncancel", (e) => {
8310                handler();
8311                return observer.unobserve(e.target);
8312              })
8313            ];
8314            return {
8315              observe: observer.observe.bind(observer),
8316              unobserve: observer.unobserve.bind(observer),
8317              disconnect() {
8318                observer.disconnect();
8319                listener.map((off) => off());
8320              }
8321            };
8322          },
8323          handler() {
8324            this.$emit();
8325          }
8326        }
8327      ],
8328      update: {
8329        read() {
8330          if (!this.isIntersecting) {
8331            return false;
vendor: 4,411 bytes, lines 8332-8473
8332          }
8333          for (const target of toNodes(this.target)) {
8334            replaceClass(
8335              target,
8336              "uk-light uk-dark",
8337              !this.selActive || matches(target, this.selActive) ? findTargetColor(target) : ""
8338            );
8339          }
8340        }
8341      }
8342    };
8343    function findTargetColor(target) {
8344      const { left, top, height, width } = dimensions$1(target);
8345      let last;
8346      for (const percent of [0.25, 0.5, 0.75]) {
8347        const elements = target.ownerDocument.elementsFromPoint(
8348          Math.max(0, left) + width * percent,
8349          Math.max(0, top) + height / 2
8350        );
8351        for (const element of elements) {
8352          if (target.contains(element) || element.closest('[class*="-leave"]') && elements.some((el) => element !== el && matches(el, '[class*="-enter"]'))) {
8353            continue;
8354          }
8355          const color = css(element, "--uk-inverse");
8356          if (color) {
8357            if (color === last) {
8358              return `uk-${color}`;
8359            }
8360            last = color;
8361            break;
8362          }
8363        }
8364      }
8365      return last ? `uk-${last}` : "";
8366    }
8367
8368    var leader = {
8369      mixins: [Class, Media],
8370      props: {
8371        fill: String
8372      },
8373      data: {
8374        fill: "",
8375        clsWrapper: "uk-leader-fill",
8376        clsHide: "uk-leader-hide",
8377        attrFill: "data-fill"
8378      },
8379      computed: {
8380        fill: ({ fill }, $el) => fill || css($el, "--uk-leader-fill-content")
8381      },
8382      connected() {
8383        [this.wrapper] = wrapInner(this.$el, `<span class="${this.clsWrapper}">`);
8384      },
8385      disconnected() {
8386        unwrap(this.wrapper.childNodes);
8387      },
8388      observe: resize(),
8389      update: {
8390        read() {
8391          const width = Math.trunc(this.$el.offsetWidth / 2);
8392          return {
8393            width,
8394            fill: this.fill,
8395            hide: !this.matchMedia
8396          };
8397        },
8398        write({ width, fill, hide }) {
8399          toggleClass(this.wrapper, this.clsHide, hide);
8400          attr(this.wrapper, this.attrFill, new Array(width).join(fill));
8401        },
8402        events: ["resize"]
8403      }
8404    };
8405
8406    var modal = {
8407      install,
8408      mixins: [Modal],
8409      data: {
8410        clsPage: "uk-modal-page",
8411        selPanel: ".uk-modal-dialog",
8412        selClose: ".uk-modal-close, .uk-modal-close-default, .uk-modal-close-outside, .uk-modal-close-full"
8413      },
8414      events: [
8415        {
8416          name: "fullscreenchange webkitendfullscreen",
8417          capture: true,
8418          handler(e) {
8419            if (isTag(e.target, "video") && this.isToggled() && !document.fullscreenElement) {
8420              this.hide();
8421            }
8422          }
8423        },
8424        {
8425          name: "show",
8426          self: true,
8427          handler() {
8428            if (hasClass(this.panel, "uk-margin-auto-vertical")) {
8429              addClass(this.$el, "uk-flex");
8430            } else {
8431              css(this.$el, "display", "block");
8432            }
8433            height(this.$el);
8434          }
8435        },
8436        {
8437          name: "hidden",
8438          self: true,
8439          handler() {
8440            css(this.$el, "display", "");
8441            removeClass(this.$el, "uk-flex");
8442          }
8443        }
8444      ]
8445    };
8446    function install({ modal }) {
8447      modal.dialog = function(content, options) {
8448        const dialog = modal($(`<div><div class="uk-modal-dialog">${content}</div></div>`), {
8449          stack: true,
8450          role: "alertdialog",
8451          ...options
8452        });
8453        dialog.show();
8454        on(
8455          dialog.$el,
8456          "hidden",
8457          async () => {
8458            await Promise.resolve();
8459            dialog.$destroy(true);
8460          },
8461          { self: true }
8462        );
8463        return dialog;
8464      };
8465      modal.alert = function(message, options) {
8466        return openDialog(
8467          ({ i18n }) => `<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>${i18n.ok}</button> </div>`,
8468          options
8469        );
8470      };
8471      modal.confirm = function(message, options) {
8472        return openDialog(
8473          ({ i18n }) => `<form> <div class="uk-modal-body">${isString(message) ? message : html(message)}</div> <div class="uk-modal-footer uk-text-right"> <button class="uk-button uk-button-default uk-modal-close" type="button">
8473${i18n.cancel}</button> <button class="uk-button uk-button-primary" autofocus>${i18n.ok}</button> </div> </form>`,
8474          options,
8475          () => Promise.reject()
8476        );
8477      };
8478      modal.prompt = function(message, value, options) {
8479        const promise = openDialog(
8480          ({ i18n }) => `<form class="uk-form-stacked"> <div class="uk-modal-body"> <label>${isString(message) ? message : html(message)}</label> <input class="uk-input" value="${value || ""}" autofocus> </div> <div class="uk-modal-footer uk-text-right"> <button class="uk-button uk-button-default uk-modal-close" type="button">${i18n.cancel}</button> <button class="uk-button uk-button-primary">${i18n.ok}</button> </div> </form>`,
8481          options,
8482          () => null,
8483          () => input.value
8484        );
8485        const { $el } = promise.dialog;
8486        const input = $("input", $el);
8487        on($el, "show", () => input.select());
8488        return promise;
8489      };
8490      modal.i18n = {
8491        ok: "Ok",
8492        cancel: "Cancel"
8493      };
8494      function openDialog(tmpl, options, hideFn = noop, submitFn = noop) {
8495        options = {
8496          bgClose: false,
8497          escClose: true,
8498          ...options,
8499          i18n: { ...modal.i18n, ...options == null ? void 0 : options.i18n }
8500        };
8501        const dialog = modal.dialog(tmpl(options), options);
8502        return assign(
8503          new Promise((resolve) => {
8504            const off = on(dialog.$el, "hide", () => resolve(hideFn()));
8505            on(dialog.$el, "submit", "form", (e) => {
8506              e.preventDefault();
8507              resolve(submitFn(dialog));
8508              off();
8509              dialog.hide();
8510            });
8511          }),
8512          { dialog }
8513        );
8514      }
8515    }
8516
8517    var nav = {
8518      extends: Accordion,
8519      data: {
8520        targets: "> .uk-parent",
8521        toggle: "> a",
8522        content: "> ul"
8523      }
8524    };
8525
8526    const clsNavbarTransparent = "uk-navbar-transparent";
8527    var navbar = {
8528      extends: Dropnav,
8529      props: {
8530        dropbarTransparentMode: Boolean
8531      },
8532      data: {
8533        clsDrop: "uk-navbar-dropdown",
8534        selNavItem: ".uk-navbar-nav > li > a,a.uk-navbar-item,button.uk-navbar-item,.uk-navbar-item a,.uk-navbar-item button,.uk-navbar-toggle",
8535        // Simplify with :where() selector once browser target is Safari 14+
8536        dropbarTransparentMode: false
8537      },
8538      computed: {
8539        navbarContainer: (_, $el) => $el.closest(".uk-navbar-container")
8540      },
8541      watch: {
8542        items() {
8543          const justify = hasClass(this.$el, "uk-navbar-justify");
8544          const containers = $$(".uk-navbar-nav, .uk-navbar-left, .uk-navbar-right", this.$el);
8545          for (const container of containers) {
8546            const items = justify ? $$(".uk-navbar-nav > li > a, .uk-navbar-item, .uk-navbar-toggle", container).length : "";
8547            css(container, "flexGrow", items);
8548          }
8549        }
8550      },
8551      events: [
8552        {
8553          name: "show",
8554          el() {
8555            return this.dropContainer;
8556          },
8557          handler({ target }) {
8558            if (this.getTransparentMode(target) === "remove" && hasClass(this.navbarContainer, clsNavbarTransparent)) {
8559              removeClass(this.navbarContainer, clsNavbarTransparent);
8560              this._transparent = true;
8561            }
8562          }
8563        },
8564        {
8565          name: "hide",
8566          el() {
8567            return this.dropContainer;
8568          },
8569          async handler() {
8570            await awaitMacroTask();
8571            if (!this.getActive() && this._transparent) {
8572              addClass(this.navbarContainer, clsNavbarTransparent);
8573              this._transparent = null;
8574            }
8575          }
8576        }
8577      ],
8578      methods: {
8579        getTransparentMode(el) {
8580          if (!this.navbarContainer) {
8581            return;
8582          }
8583          if (this.dropbar && this.isDropbarDrop(el)) {
8584            return this.dropbarTransparentMode;
8585          }
8586          const drop = this.getDropdown(el);
8587          if (drop && hasClass(el, "uk-dropbar")) {
8588            return drop.inset ? "behind" : "remove";
8589          }
8590        },
8591        getDropbarOffset(offsetTop) {
8592          const { top, height }
vendor: 9,228 bytes, lines 8592-8890
8592 = offset(this.navbarContainer);
8593          return top + (this.dropbarTransparentMode === "behind" ? 0 : height + offsetTop);
8594        }
8595      }
8596    };
8597    function awaitMacroTask() {
8598      return new Promise((resolve) => setTimeout(resolve));
8599    }
8600
8601    var offcanvas = {
8602      mixins: [Modal],
8603      args: "mode",
8604      props: {
8605        mode: String,
8606        flip: Boolean,
8607        overlay: Boolean,
8608        swiping: Boolean
8609      },
8610      data: {
8611        mode: "slide",
8612        flip: false,
8613        overlay: false,
8614        clsPage: "uk-offcanvas-page",
8615        clsContainer: "uk-offcanvas-container",
8616        selPanel: ".uk-offcanvas-bar",
8617        clsFlip: "uk-offcanvas-flip",
8618        clsContainerAnimation: "uk-offcanvas-container-animation",
8619        clsSidebarAnimation: "uk-offcanvas-bar-animation",
8620        clsMode: "uk-offcanvas",
8621        clsOverlay: "uk-offcanvas-overlay",
8622        selClose: ".uk-offcanvas-close",
8623        container: false,
8624        swiping: true
8625      },
8626      computed: {
8627        clsFlip: ({ flip, clsFlip }) => flip ? clsFlip : "",
8628        clsOverlay: ({ overlay, clsOverlay }) => overlay ? clsOverlay : "",
8629        clsMode: ({ mode, clsMode }) => `${clsMode}-${mode}`,
8630        clsSidebarAnimation: ({ mode, clsSidebarAnimation }) => mode === "none" || mode === "reveal" ? "" : clsSidebarAnimation,
8631        clsContainerAnimation: ({ mode, clsContainerAnimation }) => mode !== "push" && mode !== "reveal" ? "" : clsContainerAnimation,
8632        transitionElement({ mode }) {
8633          return mode === "reveal" ? parent(this.panel) : this.panel;
8634        }
8635      },
8636      observe: swipe({ filter: ({ swiping }) => swiping }),
8637      update: {
8638        read() {
8639          if (this.isToggled() && !isVisible(this.$el)) {
8640            this.hide();
8641          }
8642        },
8643        events: ["resize"]
8644      },
8645      events: [
8646        {
8647          name: "touchmove",
8648          self: true,
8649          passive: false,
8650          filter() {
8651            return this.overlay;
8652          },
8653          handler(e) {
8654            e.cancelable && e.preventDefault();
8655          }
8656        },
8657        {
8658          name: "show",
8659          self: true,
8660          handler() {
8661            if (this.mode === "reveal" && !hasClass(parent(this.panel), this.clsMode)) {
8662              wrapAll(this.panel, "<div>");
8663              addClass(parent(this.panel), this.clsMode);
8664            }
8665            const { body, scrollingElement } = document;
8666            addClass(body, this.clsContainer, this.clsFlip);
8667            css(body, "touch-action", "pan-y pinch-zoom");
8668            css(this.$el, "display", "block");
8669            css(this.panel, "maxWidth", scrollingElement.clientWidth);
8670            addClass(this.$el, this.clsOverlay);
8671            addClass(
8672              this.panel,
8673              this.clsSidebarAnimation,
8674              this.mode === "reveal" ? "" : this.clsMode
8675            );
8676            height(body);
8677            addClass(body, this.clsContainerAnimation);
8678            this.clsContainerAnimation && suppressUserScale();
8679          }
8680        },
8681        {
8682          name: "hide",
8683          self: true,
8684          handler() {
8685            removeClass(document.body, this.clsContainerAnimation);
8686            css(document.body, "touch-action", "");
8687          }
8688        },
8689        {
8690          name: "hidden",
8691          self: true,
8692          handler() {
8693            this.clsContainerAnimation && resumeUserScale();
8694            if (this.mode === "reveal") {
8695              unwrap(this.panel);
8696            }
8697            removeClass(this.panel, this.clsSidebarAnimation, this.clsMode);
8698            removeClass(this.$el, this.clsOverlay);
8699            css(this.$el, "display", "");
8700            css(this.panel, "maxWidth", "");
8701            removeClass(document.body, this.clsContainer, this.clsFlip);
8702          }
8703        },
8704        {
8705          name: "swipeLeft swipeRight",
8706          handler(e) {
8707            if (this.isToggled() && endsWith(e.type, "Left") ^ this.flip) {
8708              this.hide();
8709            }
8710          }
8711        }
8712      ]
8713    };
8714    function suppressUserScale() {
8715      getViewport().content += ",user-scalable=0";
8716    }
8717    function resumeUserScale() {
8718      const viewport = getViewport();
8719      viewport.content = viewport.content.replace(/,user-scalable=0$/, "");
8720    }
8721    function getViewport() {
8722      return $('meta[name="viewport"]', document.head) || append(document.head, '<meta name="viewport">');
8723    }
8724
8725    var overflowAuto = {
8726      mixins: [Class],
8727      props: {
8728        selContainer: String,
8729        selContent: String,
8730        minHeight: Number
8731      },
8732      data: {
8733        selContainer: ".uk-modal",
8734        selContent: ".uk-modal-dialog",
8735        minHeight: 150
8736      },
8737      computed: {
8738        container: ({ selContainer }, $el) => $el.closest(selContainer),
8739        content: ({ selContent }, $el) => $el.closest(selContent)
8740      },
8741      observe: resize({
8742        target: ({ container, content }) => [container, content]
8743      }),
8744      update: {
8745        read() {
8746          if (!this.content || !this.container || !isVisible(this.$el)) {
8747            return false;
8748          }
8749          return {
8750            max: Math.max(
8751              this.minHeight,
8752              height(this.container) - (dimensions$1(this.content).height - height(this.$el))
8753            )
8754          };
8755        },
8756        write({ max }) {
8757          css(this.$el, { minHeight: this.minHeight, maxHeight: max });
8758        },
8759        events: ["resize"]
8760      }
8761    };
8762
8763    var responsive = {
8764      props: ["width", "height"],
8765      connected() {
8766        addClass(this.$el, "uk-responsive-width");
8767        css(this.$el, "aspectRatio", `${this.width}/${this.height}`);
8768      }
8769    };
8770
8771    var scroll = {
8772      props: {
8773        offset: Number
8774      },
8775      data: {
8776        offset: 0
8777      },
8778      connected() {
8779        registerClick(this);
8780      },
8781      disconnected() {
8782        unregisterClick(this);
8783      },
8784      methods: {
8785        async scrollTo(el) {
8786          el = el && $(el) || document.body;
8787          if (trigger(this.$el, "beforescroll", [this, el])) {
8788            await scrollIntoView(el, { offset: this.offset });
8789            trigger(this.$el, "scrolled", [this, el]);
8790          }
8791        }
8792      }
8793    };
8794    const instances = /* @__PURE__ */ new Set();
8795    function registerClick(cmp) {
8796      if (!instances.size) {
8797        on(document, "click", clickHandler);
8798      }
8799      instances.add(cmp);
8800    }
8801    function unregisterClick(cmp) {
8802      instances.delete(cmp);
8803      if (!instances.size) {
8804        off(document, "click", clickHandler);
8805      }
8806    }
8807    function clickHandler(e) {
8808      if (e.defaultPrevented) {
8809        return;
8810      }
8811      for (const instance of instances) {
8812        if (instance.$el.contains(e.target) && isSameSiteAnchor(instance.$el)) {
8813          e.preventDefault();
8814          if (window.location.href !== instance.$el.href) {
8815            window.history.pushState({}, "", instance.$el.href);
8816          }
8817          instance.scrollTo(getTargetedElement(instance.$el));
8818        }
8819      }
8820    }
8821
8822    var scrollspy = {
8823      args: "cls",
8824      props: {
8825        cls: String,
8826        target: String,
8827        hidden: Boolean,
8828        margin: String,
8829        repeat: Boolean,
8830        delay: Number
8831      },
8832      data: () => ({
8833        cls: "",
8834        target: false,
8835        hidden: true,
8836        margin: "-1px",
8837        repeat: false,
8838        delay: 0,
8839        inViewClass: "uk-scrollspy-inview"
8840      }),
8841      computed: {
8842        elements: ({ target }, $el) => target ? $$(target, $el) : [$el]
8843      },
8844      watch: {
8845        elements(elements) {
8846          if (this.hidden) {
8847            css(filter$1(elements, `:not(.${this.inViewClass})`), "opacity", 0);
8848          }
8849        }
8850      },
8851      connected() {
8852        this.elementData = /* @__PURE__ */ new Map();
8853      },
8854      disconnected() {
8855        for (const [el, state] of this.elementData.entries()) {
8856          removeClass(el, this.inViewClass, (state == null ? void 0 : state.cls) || "");
8857        }
8858        delete this.elementData;
8859      },
8860      observe: intersection({
8861        target: ({ elements }) => elements,
8862        handler(records) {
8863          const elements = this.elementData;
8864          for (const { target: el, isIntersecting } of records) {
8865            if (!elements.has(el)) {
8866              elements.set(el, {
8867                cls: data(el, "uk-scrollspy-class") || this.cls
8868              });
8869            }
8870            const state = elements.get(el);
8871            if (!this.repeat && state.show) {
8872              continue;
8873            }
8874            state.show = isIntersecting;
8875          }
8876          this.$emit();
8877        },
8878        options: ({ margin }) => ({ rootMargin: margin }),
8879        args: { intersecting: false }
8880      }),
8881      update: [
8882        {
8883          write(data) {
8884            for (const [el, state] of this.elementData.entries()) {
8885              if (state.show && !state.inview && !state.queued) {
8886                state.queued = true;
8887                data.promise = (data.promise || Promise.resolve()).then(() => new Promise((resolve) => setTimeout(resolve, this.delay))).then(() => {
8888                  this.toggle(el, true);
8889                  setTimeout(() => {
8890                    state.queued = false;
8891                    this.$emit();
8892                  }, 300);
8893                });
8894              } else if (!state.show && state.inview && !state.queued && this.repeat) {
8895                this.toggle(el, false);
8896              }
8897            }
8898          }
8899        }
8900      ],
8901      methods: {
8902        toggle(el, inview) {
8903          var _a;
8904          const state = this.elementData.get(el);
8905          if (!state) {
8906            return;
8907          }
8908          (_a = state.off) == null ? void 0 : _a.call(state);
8909          css(el, "opacity", !inview && this.hidden ? 0 : "");
8910          toggleClass(el, this.inViewClass, inview);
8911          toggleClass(el, state.cls);
8912          if (/\buk-animation-/.test(state.cls)) {
8913            const removeAnimationClasses = () => removeClasses(el, "uk-animation-[\\w-]+");
8914            if (inview) {
8915              state.off = once(el, "animationcancel animationend", removeAnimationClasses, {
8916                self: true
8917              });
8918            } else {
8919              removeAnimationClasses();
8920            }
8921          }
8922          trigger(el, inview ? "inview" : "outview");
8923          state.inview = inview;
8924        }
8925      }
8926    };
8927
8928    var scrollspyNav = {
8929      props: {
8930        cls: String,
8931        closest: Boolean,
8932        scroll: Boolean,
8933        overflow: Boolean,
8934        offset: Number
8935      },
8936      data: {
8937        cls: "uk-active",
8938        closest: false,
8939        scroll: false,
8940        overflow: true,
8941        offset: 0
8942      },
8943      computed: {
8944        links: (_, $el) => $$('a[href*="#"]', $el).filter((el) => el.hash && isSameSiteAnchor(el)),
8945        elements({ closest: selector }) {
8946          return this.links.map((el) => el.closest(selector || "*"));
8947        }
8948      },
8949      watch: {
8950        links(links) {
8951          if (this.scroll) {
8952            this.$create("scroll", links, { offset: this.offset });
8953          }
8954        }
8955      },
8956      observe: [intersection(), scroll$1()],
8957      update: [
8958        {
8959          read() {
8960            const targets = this.links.map(getTargetedElement).filter(Boolean);
8961            const { length } = targets;
8962            if (!length || !isVisible(this.$el)) {
8963              return false;
8964            }
8965            const scrollElement = scrollParent(targets, true);
8966            const { scrollTop, scrollHeight } = scrollElement;
8967            const viewport = offsetViewport(scrollElement);
8968            const max = scrollHeight - viewport.height;
8969            let active = false;
8970            if (scrollTop === max) {
8971              active = length - 1;
8972            } else {
8973              for (let i = 0; i < targets.length; i++) {
8974                const fixedEl = getCoveringElement(targets[i]);
8975                const offsetBy = this.offset + (fixedEl ? offset(fixedEl).height : 0);
8976                if (offset(targets[i]).top - viewport.top - offsetBy > 0) {
8977                  break;
8978                }
8979                active = +i;
8980              }
8981              if (active === false && this.overflow) {
8982                active = 0;
8983              }
8984            }
8985            return { active };
8986          },
8987          write({ active }) {
8988            const changed = active !== false && !hasClass(this.elements[active], this.cls);
8989            this.links.forEach((el) => el.blur());
8990            for (let i = 0; i < this.elements.length; i++) {
8991              toggleClass(this.elements[i], this.cls, +i === active);
8992            }
8993            if (changed) {
8994              trigger(this.$el, "active", [active, this.elements[active]]);
8995            }
8996          },
8997          events: ["scroll", "resize"]
8998        }
8999      ]
9000    };
9001
9002    var sticky = {
9003      mixins: [Class, Media],
9004      props: {
9005        position: String,
9006        top: null,
9007        bottom: null,
9008        start: null,
9009        end: null,
9010        offset: String,
9011        overflowFlip: Boolean,
9012        animation: String,
9013        clsActive: String,
9014        clsInactive: String,
9015        clsFixed: String,
9016        clsBelow: String,
9017        selTarget: String,
9018        showOnUp: Boolean,
9019        targetOffset: Number
9020      },
9021      data: {
9022        position: "top",
9023        top: false,
9024        bottom: false,
9025        start: false,
9026        end: false,
9027        offset: 0,
9028        overflowFlip: false,
9029        animation: "",
9030        clsActive: "uk-active",
9031        clsInactive: "",
9032        clsFixed: "uk-sticky-fixed",
9033        clsBelow: "uk-sticky-below",
9034        selTarget: "",
9035        showOnUp: false,
9036        targetOffset: false
9037      },
9038      computed: {
9039        target: ({ selTarget }, $el) => selTarget && $(selTarget, $el) || $el
9040      },
9041      connected() {
9042        this.start = coerce(this.start || this.top);
9043        this.end = coerce(this.end || this.bottom);
9044        this.placeholder = $("+ .uk-sticky-placeholder", this.$el) || $('<div class="uk-sticky-placeholder"></div>');
9045        this.isFixed = false;
vendor: 8,341 bytes, lines 9046-9273
9046        this.setActive(false);
9047      },
9048      beforeDisconnect() {
9049        if (this.isFixed) {
9050          this.hide();
9051          removeClass(this.target, this.clsInactive);
9052        }
9053        reset(this.$el);
9054        remove$1(this.placeholder);
9055        this.placeholder = null;
9056      },
9057      observe: [
9058        viewport({
9059          handler() {
9060            if (toPx("100vh", "height") !== this._data.viewport) {
9061              this.$emit("resize");
9062            }
9063          }
9064        }),
9065        scroll$1({ target: () => document.scrollingElement }),
9066        resize({
9067          target: () => document.scrollingElement,
9068          options: { box: "content-box" }
9069        }),
9070        resize()
9071      ],
9072      events: [
9073        {
9074          name: "load hashchange popstate",
9075          el() {
9076            return window;
9077          },
9078          filter() {
9079            return this.targetOffset !== false;
9080          },
9081          handler() {
9082            const { scrollingElement } = document;
9083            if (!location.hash || scrollingElement.scrollTop === 0) {
9084              return;
9085            }
9086            setTimeout(() => {
9087              const targetOffset = offset($(location.hash));
9088              const elOffset = offset(this.$el);
9089              if (this.isFixed && intersectRect(targetOffset, elOffset)) {
9090                scrollingElement.scrollTop = Math.ceil(
9091                  targetOffset.top - elOffset.height - toPx(this.targetOffset, "height", this.placeholder) - toPx(this.offset, "height", this.placeholder)
9092                );
9093              }
9094            });
9095          }
9096        },
9097        {
9098          name: "transitionstart",
9099          handler() {
9100            this.transitionInProgress = once(
9101              this.$el,
9102              "transitionend transitioncancel",
9103              () => this.transitionInProgress = null
9104            );
9105          }
9106        }
9107      ],
9108      update: [
9109        {
9110          read({ height: height$1, width, margin, sticky }) {
9111            this.inactive = !this.matchMedia || !isVisible(this.$el);
9112            if (this.inactive) {
9113              return;
9114            }
9115            const hide = this.isFixed && !this.transitionInProgress;
9116            if (hide) {
9117              preventTransition(this.target);
9118              this.hide();
9119            }
9120            if (!this.active) {
9121              ({ height: height$1, width } = offset(this.$el));
9122              margin = css(this.$el, "margin");
9123            }
9124            if (hide) {
9125              this.show();
9126            }
9127            const viewport2 = toPx("100vh", "height");
9128            const dynamicViewport = height(window);
9129            const maxScrollHeight = Math.max(
9130              0,
9131              document.scrollingElement.scrollHeight - viewport2
9132            );
9133            let position = this.position;
9134            if (this.overflowFlip && height$1 > viewport2) {
9135              position = position === "top" ? "bottom" : "top";
9136            }
9137            const referenceElement = this.isFixed ? this.placeholder : this.$el;
9138            let offset$1 = toPx(this.offset, "height", sticky ? this.$el : referenceElement);
9139            if (position === "bottom" && (height$1 < dynamicViewport || this.overflowFlip)) {
9140              offset$1 += dynamicViewport - height$1;
9141            }
9142            const overflow = this.overflowFlip ? 0 : Math.max(0, height$1 + offset$1 - viewport2);
9143            const topOffset = offset(referenceElement).top;
9144            const elHeight = offset(this.$el).height;
9145            const start = (this.start === false ? topOffset : parseProp(this.start, this.$el, topOffset)) - offset$1;
9146            const end = this.end === false ? maxScrollHeight : Math.min(
9147              maxScrollHeight,
9148              parseProp(this.end, this.$el, topOffset + height$1, true) - elHeight - offset$1 + overflow
9149            );
9150            sticky = maxScrollHeight && !this.showOnUp && start + offset$1 === topOffset && end === Math.min(
9151              maxScrollHeight,
9152              parseProp(true, this.$el, 0, true) - elHeight - offset$1 + overflow
9153            ) && css(parent(this.$el), "overflowY") === "visible";
9154            return {
9155              start,
9156              end,
9157              offset: offset$1,
9158              overflow,
9159              height: height$1,
9160              elHeight,
9161              width,
9162              margin,
9163              top: offsetPosition(referenceElement)[0],
9164              sticky,
9165              viewport: viewport2
9166            };
9167          },
9168          write({ height, width, margin, offset, sticky }) {
9169            if (this.inactive || sticky || !this.isFixed) {
9170              reset(this.$el);
9171            }
9172            if (this.inactive) {
9173              return;
9174            }
9175            if (sticky) {
9176              height = width = margin = 0;
9177              css(this.$el, { position: "sticky", top: offset });
9178            }
9179            const { placeholder } = this;
9180            css(placeholder, { height, width, margin });
9181            if (parent(placeholder) !== parent(this.$el) || sticky ^ index(placeholder) < index(this.$el)) {
9182              (sticky ? before : after)(this.$el, placeholder);
9183              placeholder.hidden = true;
9184            }
9185          },
9186          events: ["resize"]
9187        },
9188        {
9189          read({
9190            scroll: prevScroll = 0,
9191            dir: prevDir = "down",
9192            overflow,
9193            overflowScroll = 0,
9194            start,
9195            end,
9196            elHeight,
9197            height,
9198            sticky
9199          }) {
9200            const scroll2 = document.scrollingElement.scrollTop;
9201            const dir = prevScroll <= scroll2 ? "down" : "up";
9202            const referenceElement = this.isFixed ? this.placeholder : this.$el;
9203            return {
9204              dir,
9205              prevDir,
9206              scroll: scroll2,
9207              prevScroll,
9208              below: scroll2 > offset(referenceElement).top + (sticky ? Math.min(height, elHeight) : height),
9209              offsetParentTop: offset(referenceElement.offsetParent).top,
9210              overflowScroll: clamp(
9211                overflowScroll + clamp(scroll2, start, end) - clamp(prevScroll, start, end),
9212                0,
9213                overflow
9214              )
9215            };
9216          },
9217          write(data, types) {
9218            const isScrollUpdate = types.has("scroll");
9219            const {
9220              initTimestamp = 0,
9221              dir,
9222              prevDir,
9223              scroll: scroll2,
9224              prevScroll = 0,
9225              top,
9226              start,
9227              below
9228            } = data;
9229            if (scroll2 < 0 || scroll2 === prevScroll && isScrollUpdate || this.showOnUp && !isScrollUpdate && !this.isFixed) {
9230              return;
9231            }
9232            const now = Date.now();
9233            if (now - initTimestamp > 300 || dir !== prevDir) {
9234              data.initScroll = scroll2;
9235              data.initTimestamp = now;
9236            }
9237            if (this.showOnUp && !this.isFixed && Math.abs(data.initScroll - scroll2) <= 30 && Math.abs(prevScroll - scroll2) <= 10) {
9238              return;
9239            }
9240            if (this.inactive || scroll2 < start || this.showOnUp && (scroll2 <= start || dir === "down" && isScrollUpdate || dir === "up" && !this.isFixed && !below)) {
9241              if (!this.isFixed) {
9242                if (Animation.inProgress(this.$el) && top > scroll2) {
9243                  Animation.cancel(this.$el);
9244                  this.hide();
9245                }
9246                return;
9247              }
9248              if (this.animation && below) {
9249                if (hasClass(this.$el, "uk-animation-leave")) {
9250                  return;
9251                }
9252                Animation.out(this.$el, this.animation).then(() => this.hide(), noop);
9253              } else {
9254                this.hide();
9255              }
9256            } else if (this.isFixed) {
9257              this.update();
9258            } else if (this.animation && below) {
9259              this.show();
9260              Animation.in(this.$el, this.animation).catch(noop);
9261            } else {
9262              preventTransition(this.target);
9263              this.show();
9264            }
9265          },
9266          events: ["resize", "resizeViewport", "scroll"]
9267        }
9268      ],
9269      methods: {
9270        show() {
9271          this.isFixed = true;
9272          this.update();
9273          this.placeholder.hidden = false;
vendor: 6,287 bytes, lines 9274-9484
9274        },
9275        hide() {
9276          const { offset, sticky } = this._data;
9277          this.setActive(false);
9278          removeClass(this.$el, this.clsFixed, this.clsBelow);
9279          if (sticky) {
9280            css(this.$el, "top", offset);
9281          } else {
9282            css(this.$el, {
9283              position: "",
9284              top: "",
9285              width: "",
9286              marginTop: ""
9287            });
9288          }
9289          this.placeholder.hidden = true;
9290          this.isFixed = false;
9291        },
9292        update() {
9293          let {
9294            width,
9295            scroll: scroll2 = 0,
9296            overflow,
9297            overflowScroll = 0,
9298            start,
9299            end,
9300            offset,
9301            offsetParentTop,
9302            sticky,
9303            below
9304          } = this._data;
9305          const active = start !== 0 || scroll2 > start;
9306          if (!sticky) {
9307            let position = "fixed";
9308            if (scroll2 > end) {
9309              offset += end - offsetParentTop + overflowScroll - overflow;
9310              position = "absolute";
9311            }
9312            css(this.$el, { position, width, marginTop: 0 }, "important");
9313          }
9314          css(this.$el, "top", offset - overflowScroll);
9315          this.setActive(active);
9316          toggleClass(this.$el, this.clsBelow, below);
9317          addClass(this.$el, this.clsFixed);
9318        },
9319        setActive(active) {
9320          const prev = this.active;
9321          this.active = active;
9322          if (active) {
9323            replaceClass(this.target, this.clsInactive, this.clsActive);
9324            prev !== active && trigger(this.$el, "active");
9325          } else {
9326            replaceClass(this.target, this.clsActive, this.clsInactive);
9327            if (prev !== active) {
9328              preventTransition(this.target);
9329              trigger(this.$el, "inactive");
9330            }
9331          }
9332        }
9333      }
9334    };
9335    function parseProp(value, el, propOffset, padding) {
9336      if (!value) {
9337        return 0;
9338      }
9339      if (isNumeric(value) || isString(value) && value.match(/^-?\d/)) {
9340        return propOffset + toPx(value, "height", el, true);
9341      } else {
9342        const refElement = value === true ? parent(el) : query(value, el);
9343        return offset(refElement).bottom - (padding && (refElement == null ? void 0 : refElement.contains(el)) ? toFloat(css(refElement, "paddingBottom")) : 0);
9344      }
9345    }
9346    function coerce(value) {
9347      if (value === "true") {
9348        return true;
9349      } else if (value === "false") {
9350        return false;
9351      }
9352      return value;
9353    }
9354    function reset(el) {
9355      css(el, { position: "", top: "", marginTop: "", width: "" });
9356    }
9357    function preventTransition(el) {
9358      addClass(el, "uk-transition-disable");
9359      requestAnimationFrame(() => removeClass(el, "uk-transition-disable"));
9360    }
9361
9362    var svg = {
9363      mixins: [Svg],
9364      args: "src",
9365      props: {
9366        src: String,
9367        icon: String,
9368        attributes: "list",
9369        strokeAnimation: Boolean
9370      },
9371      data: {
9372        strokeAnimation: false
9373      },
9374      observe: [
9375        mutation({
9376          async handler() {
9377            const svg = await this.svg;
9378            if (svg) {
9379              applyAttributes.call(this, svg);
9380            }
9381          },
9382          options: {
9383            attributes: true,
9384            attributeFilter: ["id", "class", "style"]
9385          }
9386        })
9387      ],
9388      async connected() {
9389        if (includes(this.src, "#")) {
9390          [this.src, this.icon] = this.src.split("#");
9391        }
9392        const svg = await this.svg;
9393        if (svg) {
9394          applyAttributes.call(this, svg);
9395          if (this.strokeAnimation) {
9396            applyAnimation(svg);
9397          }
9398        }
9399      },
9400      methods: {
9401        async getSvg() {
9402          if (isTag(this.$el, "img") && !this.$el.complete && this.$el.loading === "lazy") {
9403            await new Promise((resolve) => once(this.$el, "load", resolve));
9404          }
9405          return parseSVG(await loadSVG(this.src), this.icon) || Promise.reject("SVG not found.");
9406        }
9407      }
9408    };
9409    function applyAttributes(el) {
9410      const { $el } = this;
9411      addClass(el, attr($el, "class"), "uk-svg");
9412      for (let i = 0; i < $el.style.length; i++) {
9413        const prop = $el.style[i];
9414        css(el, prop, css($el, prop));
9415      }
9416      for (const attribute in this.attributes) {
9417        const [prop, value] = this.attributes[attribute].split(":", 2);
9418        attr(el, prop, value);
9419      }
9420      if (!this.$el.id) {
9421        removeAttr(el, "id");
9422      }
9423    }
9424    const loadSVG = memoize(async (src) => {
9425      if (src) {
9426        if (startsWith(src, "data:")) {
9427          return decodeURIComponent(src.split(",")[1]);
9428        } else {
9429          return (await fetch(src)).text();
9430        }
9431      } else {
9432        return Promise.reject();
9433      }
9434    });
9435    function parseSVG(svg, icon) {
9436      if (icon && includes(svg, "<symbol")) {
9437        svg = parseSymbols(svg)[icon] || svg;
9438      }
9439      svg = $(svg.substr(svg.indexOf("<svg")));
9440      return (svg == null ? void 0 : svg.hasChildNodes()) && svg;
9441    }
9442    const symbolRe = /<symbol([^]*?id=(['"])(.+?)\2[^]*?<\/)symbol>/g;
9443    const parseSymbols = memoize(function(svg) {
9444      const symbols = {};
9445      symbolRe.lastIndex = 0;
9446      let match;
9447      while (match = symbolRe.exec(svg)) {
9448        symbols[match[3]] = `<svg ${match[1]}svg>`;
9449      }
9450      return symbols;
9451    });
9452    function applyAnimation(el) {
9453      const length = getMaxPathLength(el);
9454      if (length) {
9455        css(el, "--uk-animation-stroke", length);
9456      }
9457    }
9458
9459    const selDisabled = ".uk-disabled *, .uk-disabled, [disabled]";
9460    var Switcher = {
9461      mixins: [Togglable],
9462      args: "connect",
9463      props: {
9464        connect: String,
9465        toggle: String,
9466        itemNav: String,
9467        active: Number,
9468        followFocus: Boolean,
9469        swiping: Boolean
9470      },
9471      data: {
9472        connect: "~.uk-switcher",
9473        toggle: "> * > :first-child",
9474        itemNav: false,
9475        active: 0,
9476        cls: "uk-active",
9477        attrItem: "uk-switcher-item",
9478        selVertical: ".uk-nav",
9479        followFocus: false,
9480        swiping: true
9481      },
9482      computed: {
9483        connects: {
9484          get: ({ connect }, $el) => queryAll(connect, $el),
9485          observe: ({ connect }) => connect
9486        },
9487        connectChildren() {
9488          return this.connects.map((el) => children(el)).flat();
9489        },
9490        toggles: ({ toggle }, $el) => $$(toggle, $el),
9491        children(_, $el) {
9492          return children($el).filter(
9493            (child) => this.toggles.some((toggle) => child.contains(toggle))
9494          );
9495        }
9496      },
9497      watch: {
9498        connects(connects) {
9499          if (this.swiping) {
9500            css(connects, "touchAction", "pan-y pinch-zoom");
9501          }
9502          this.$emit();
9503        },
9504        connectChildren() {
9505          let index = Math.max(0, this.index());
9506          for (const el of this.connects) {
9507            children(el).forEach((child, i) => toggleClass(child, this.cls, i === index));
9508          }
9509          this.$emit();
9510        },
9511        toggles(toggles) {
9512          this.$emit();
9513          const active = this.index();
9514          this.show(~active ? active : toggles[this.active] || toggles[0]);
9515        }
9516      },
9517      connected() {
9518        attr(this.$el, "role", "tablist");
9519      },
9520      observe: [
9521        lazyload({ targets: ({ connectChildren }) => connectChildren }),
9522        swipe({ target: ({ connects }) => connects, filter: ({ swiping }) => swiping })
9523      ],
9524      events: [
9525        {
9526          name: "click keydown",
9527          delegate() {
9528            return this.toggle;
9529          },
9530          handler(e) {
9531            if (!matches(e.current, selDisabled) && (e.type === "click" || e.keyCode === keyMap.SPACE)) {
9532              e.preventDefault();
9533              this.show(e.current);
9534            }
9535          }
9536        },
9537        {
9538          name: "keydown",
9539          delegate() {
9540            return this.toggle;
9541          },
9542          handler(e) {
9543            const { current, keyCode } = e;
9544            const isVertical = matches(this.$el, this.selVertical);
9545            let i = keyCode === keyMap.HOME ? 0 : keyCode === keyMap.END ? "last" : keyCode === keyMap.LEFT && !isVertical || keyCode === keyMap.UP && isVertical ? "previous" : keyCode === keyMap.RIGHT && !isVertical || keyCode === keyMap.DOWN && isVertical ? "next" : -1;
9546            if (~i) {
9547              e.preventDefault();
9548              const toggles = this.toggles.filter((el) => !matches(el, selDisabled));
9549              const next = toggles[getIndex(i, toggles, toggles.indexOf(current))];
9550              next.focus();
9551              if (this.followFocus) {
9552                this.show(next);
9553              }
9554            }
9555          }
9556        },
9557        {
9558          name: "click",
9559          el() {
9560            return this.connects.concat(this.itemNav ? queryAll(this.itemNav, this.$el) : []);
9561          },
9562          delegate() {
9563            return `[${this.attrItem}],[data-${this.attrItem}]`;
9564          },
9565          handler(e) {
9566            if (e.target.closest("a,button")) {
9567              e.preventDefault();
9568              this.show(data(e.current, this.attrItem));
9569            }
9570          }
9571        },
9572        {
9573          name: "swipeRight swipeLeft",
9574          filter() {
9575            return this.swiping;
9576          },
9577          el() {
9578            return this.connects;
9579          },
9580          handler({ type }) {
9581            this.show(endsWith(type, "Left") ? "next" : "previous");
9582          }
9583        }
9584      ],
9585      update() {
9586        var _a;
9587        for (const el of this.connects) {
9588          if (isTag(el, "ul")) {
9589            attr(el, "role", "presentation");
9590          }
9591        }
9592        attr(children(this.$el), "role", "presentation");
9593        for (const index in this.toggles) {
9594          const toggle = this.toggles[index];
9595          const item = (_a = this.connects[0]) == null ? void 0 : _a.children[index];
9596          attr(toggle, "role", "tab");
9597          if (!item) {
9598            continue;
9599          }
9600          toggle.id = generateId(this, toggle);
9601          item.id = generateId(this, item);
9602          attr(toggle, "aria-controls", item.id);
9603          attr(item, { role: "tabpanel", "aria-labelledby": toggle.id });
9604        }
9605        attr(this.$el, "aria-orientation", matches(this.$el, this.selVertical) ? "vertical" : null);
9606      },
9607      methods: {
9608        index() {
9609          return findIndex(this.children, (el) => hasClass(el, this.cls));
9610        },
9611        show(item) {
9612          const toggles = this.toggles.filter((el) => !matches(el, selDisabled));
9613          const prev = this.index();
9614          const next = getIndex(
9615            !isNode(item) || includes(toggles, item) ? item : 0,
9616            toggles,
9617            getIndex(this.toggles[prev], toggles)
9618          );
9619          const active = getIndex(toggles[next], this.toggles);
vendor: 1,114 bytes, lines 9620-9652
9620          this.children.forEach((child, i) => {
9621            toggleClass(child, this.cls, active === i);
9622            attr(this.toggles[i], {
9623              "aria-selected": active === i,
9624              tabindex: active === i ? null : -1
9625            });
9626          });
9627          const animate = prev >= 0 && prev !== next;
9628          this.connects.forEach(async ({ children: children2 }) => {
9629            const actives = toArray(children2).filter(
9630              (child, i) => i !== active && hasClass(child, this.cls)
9631            );
9632            if (await this.toggleElement(actives, false, animate)) {
9633              await this.toggleElement(children2[active], true, animate);
9634            }
9635          });
9636        }
9637      }
9638    };
9639
9640    var tab = {
9641      mixins: [Class],
9642      extends: Switcher,
9643      props: {
9644        media: Boolean
9645      },
9646      data: {
9647        media: 960,
9648        attrItem: "uk-tab-item",
9649        selVertical: ".uk-tab-left,.uk-tab-right"
9650      },
9651      connected() {
9652        const cls = hasClass(this.$el, "uk-tab-left") ? "uk-tab-left" : hasClass(this.$el, "uk-tab-right") ? "uk-tab-right" : false;
9653        if (cls) {
9654          this.$create("toggle", this.$el, { cls, mode: "media", media: this.media });
9655        }
9656      }
9657    };
9658
9659    const KEY_SPACE = 32;
9660    var toggle = {
9661      mixins: [Media, Togglable],
9662      args: "target",
9663      props: {
9664        href: String,
9665        target: null,
9666        mode: "list",
9667        queued: Boolean
9668      },
9669      data: {
9670        href: false,
9671        target: false,
9672        mode: "click",
9673        queued: true
9674      },
9675      computed: {
9676        target: {
9677          get: ({ target }, $el) => {
9678            target = queryAll(target || $el.hash, $el);
9679            return target.length ? target : [$el];
9680          },
9681          observe: ({ target }) => target
9682        }
9683      },
9684      connected() {
9685        if (!includes(this.mode, "media")) {
9686          if (!isFocusable(this.$el)) {
9687            attr(this.$el, "tabindex", "0");
9688          }
9689          if (!this.cls && isTag(this.$el, "a")) {
9690            attr(this.$el, "role", "button");
9691          }
9692        }
9693      },
9694      observe: lazyload({ targets: ({ target }) => target }),
9695      events: [
9696        {
9697          name: pointerDown$1,
9698          filter() {
9699            return includes(this.mode, "hover");
9700          },
9701          handler(e) {
9702            this._preventClick = null;
9703            if (!isTouch(e) || isBoolean(this._showState) || this.$el.disabled) {
9704              return;
9705            }
9706            trigger(this.$el, "focus");
9707            once(
9708              document,
9709              pointerDown$1,
9710              () => trigger(this.$el, "blur"),
9711              true,
9712              (e2) => !this.$el.contains(e2.target)
9713            );
9714            if (includes(this.mode, "click")) {
9715              this._preventClick = true;
9716            }
9717          }
9718        },
9719        {
9720          // mouseenter mouseleave are added because of Firefox bug,
9721          // where pointerleave is triggered immediately after pointerenter on scroll
9722          name: `mouseenter mouseleave ${pointerEnter} ${pointerLeave} focus blur`,
9723          filter() {
9724            return includes(this.mode, "hover");
9725          },
9726          handler(e) {
9727            if (isTouch(e) || this.$el.disabled) {
9728              return;
9729            }
9730            const show = includes(["mouseenter", pointerEnter, "focus"], e.type);
9731            const expanded = this.isToggled(this.target);
9732            if (!show && (!isBoolean(this._showState) || e.type !== "blur" && matches(this.$el, ":focus") || e.type === "blur" && matches(this.$el, ":hover"))) {
9733              if (expanded === this._showState) {
9734                this._showState = null;
9735              }
9736              return;
9737            }
9738            if (show && isBoolean(this._showState) && expanded !== this._showState) {
9739              return;
9740            }
9741            this._showState = show ? expanded : null;
9742            this.toggle(`toggle${show ? "show" : "hide"}`);
9743          }
9744        },
9745        {
9746          name: "keydown",
9747          filter() {
9748            return includes(this.mode, "click") && !isTag(this.$el, "input");
9749          },
9750          handler(e) {
9751            if (e.keyCode === KEY_SPACE) {
9752              e.preventDefault();
9753              this.$el.click();
9754            }
9755          }
9756        },
9757        {
9758          name: "click",
9759          filter() {
9760            return ["click", "hover"].some((mode) => includes(this.mode, mode));
9761          },
9762          handler(e) {
9763            let link;
9764            if (this._preventClick || e.target.closest('a[href="#"], a[href=""]') || (link = e.target.closest("a[href]")) && (!this.isToggled(this.target) || link.hash && matches(this.target, link.hash))) {
9765              e.preventDefault();
9766            }
9767            if (!this._preventClick && includes(this.mode, "click")) {
9768              this.toggle();
9769            }
9770          }
9771        },
9772        {
9773          name: "mediachange",
9774          filter() {
9775            return includes(this.mode, "media");
9776          },
9777          el() {
9778            return this.target;
9779          },
9780          handler(e, mediaObj) {
9781            if (mediaObj.matches ^ this.isToggled(this.target)) {
9782              this.toggle();
9783            }
9784          }
9785        }
9786      ],
9787      methods: {
9788        async toggle(type) {
9789          if (!trigger(this.target, type || "toggle", [this])) {
9790            return;
9791          }
9792          if (hasAttr(this.$el, "aria-expanded")) {
9793            attr(this.$el, "aria-expanded", !this.isToggled(this.target));
9794          }
9795          if (!this.queued) {
9796            return this.toggleElement(this.target);
9797          }
9798          const leaving = this.target.filter((el) => hasClass(el, this.clsLeave));
9799          if (leaving.length) {
9800            for (const el of this.target) {
9801              const isLeaving = includes(leaving, el);
9802              this.toggleElement(el, isLeaving, isLeaving);
9803            }
9804            return;
9805          }
9806          const toggled = this.target.filter(this.isToggled);
9807          if (await this.toggleElement(toggled, false)) {
9808            await this.toggleElement(
9809              this.target.filter((el) => !includes(toggled, el)),
9810              true
9811            );
9812          }
9813        }
9814      }
9815    };
9816
9817    var components = /*#__PURE__*/Object.freeze({
9818        __proto__: null,
9819        Accordion: Accordion,
9820        Alert: alert,
9821        Close: Close,
9822        Cover: cover,
9823        Drop: drop,
9824        DropParentIcon: IconComponent,
9825        Dropdown: drop,
9826        Dropnav: Dropnav,
9827        FormCustom: formCustom,
9828        Grid: grid,
9829        HeightMatch: heightMatch,
9830        HeightPlaceholder: heightPlaceholder,
9831        HeightViewport: heightViewport,
9832        Icon: Icon,
9833        Img: img,
9834        Inverse: inverse,
9835        Leader: leader,
9836        Margin: Margin,
9837        Marker: Marker,
9838        Modal: modal,
9839        Nav: nav,
9840        NavParentIcon: NavParentIcon,
9841        Navbar: navbar,
9842        NavbarParentIcon: IconComponent,
9843        NavbarToggleIcon: NavbarToggleIcon,
9844        Offcanvas: offcanvas,
9845        OverflowAuto: overflowAuto,
9846        OverlayIcon: IconComponent,
9847        PaginationNext: PaginationNext,
9848        PaginationPrevious: PaginationPrevious,
9849        Responsive: responsive,
9850        Scroll: scroll,
9851        Scrollspy: scrollspy,
9852        ScrollspyNav: scrollspyNav,
9853        SearchIcon: Search,
9854        SlidenavNext: Slidenav,
9855        SlidenavPrevious: Slidenav,
9856        Spinner: Spinner,
9857        Sticky: sticky,
9858        Svg: svg,
9859        Switcher: Switcher,
9860        Tab: tab,
9861        Toggle: toggle,
9862        Totop: Totop,
9863        Video: Video
9864    });
9865
9866    each(components, (component, name) => App.component(name, component));
9867    boot(App);
9868
9869    each(components$1, (component, name) => App.component(name, component));
9870
9871    return App;
9872
9873}));

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.