PageSourceSearch

https://wolli.ai/wp-content/plugins/bdthemes-element-pack-lite/assets/js/bdt-uikit.js?ver=3.21.7

js wolli.ai collected 2026-10-05 15:59:45 UTC 325,337 bytes, 9,783 lines download raw bytes

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

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.